Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 698 Lines • ▼ Show 20 Lines | if (Subtarget->hasFullFP16()) { | ||||
setOperationAction(ISD::BITCAST, MVT::i16, Custom); | setOperationAction(ISD::BITCAST, MVT::i16, Custom); | ||||
setOperationAction(ISD::BITCAST, MVT::i32, Custom); | setOperationAction(ISD::BITCAST, MVT::i32, Custom); | ||||
setOperationAction(ISD::BITCAST, MVT::f16, Custom); | setOperationAction(ISD::BITCAST, MVT::f16, Custom); | ||||
setOperationAction(ISD::FMINNUM, MVT::f16, Legal); | setOperationAction(ISD::FMINNUM, MVT::f16, Legal); | ||||
setOperationAction(ISD::FMAXNUM, MVT::f16, Legal); | setOperationAction(ISD::FMAXNUM, MVT::f16, Legal); | ||||
} | } | ||||
for (MVT VT : MVT::vector_valuetypes()) { | for (MVT VT : MVT::fixedlen_vector_valuetypes()) { | ||||
for (MVT InnerVT : MVT::vector_valuetypes()) { | for (MVT InnerVT : MVT::fixedlen_vector_valuetypes()) { | ||||
setTruncStoreAction(VT, InnerVT, Expand); | setTruncStoreAction(VT, InnerVT, Expand); | ||||
addAllExtLoads(VT, InnerVT, Expand); | addAllExtLoads(VT, InnerVT, Expand); | ||||
} | } | ||||
setOperationAction(ISD::MULHS, VT, Expand); | setOperationAction(ISD::MULHS, VT, Expand); | ||||
setOperationAction(ISD::SMUL_LOHI, VT, Expand); | setOperationAction(ISD::SMUL_LOHI, VT, Expand); | ||||
setOperationAction(ISD::MULHU, VT, Expand); | setOperationAction(ISD::MULHU, VT, Expand); | ||||
setOperationAction(ISD::UMUL_LOHI, VT, Expand); | setOperationAction(ISD::UMUL_LOHI, VT, Expand); | ||||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | if (Subtarget->hasNEON()) { | ||||
setTargetDAGCombine(ISD::FP_TO_SINT); | setTargetDAGCombine(ISD::FP_TO_SINT); | ||||
setTargetDAGCombine(ISD::FP_TO_UINT); | setTargetDAGCombine(ISD::FP_TO_UINT); | ||||
setTargetDAGCombine(ISD::FDIV); | setTargetDAGCombine(ISD::FDIV); | ||||
setTargetDAGCombine(ISD::LOAD); | setTargetDAGCombine(ISD::LOAD); | ||||
// It is legal to extload from v4i8 to v4i16 or v4i32. | // It is legal to extload from v4i8 to v4i16 or v4i32. | ||||
for (MVT Ty : {MVT::v8i8, MVT::v4i8, MVT::v2i8, MVT::v4i16, MVT::v2i16, | for (MVT Ty : {MVT::v8i8, MVT::v4i8, MVT::v2i8, MVT::v4i16, MVT::v2i16, | ||||
MVT::v2i32}) { | MVT::v2i32}) { | ||||
for (MVT VT : MVT::integer_vector_valuetypes()) { | for (MVT VT : MVT::integer_fixedlen_vector_valuetypes()) { | ||||
setLoadExtAction(ISD::EXTLOAD, VT, Ty, Legal); | setLoadExtAction(ISD::EXTLOAD, VT, Ty, Legal); | ||||
setLoadExtAction(ISD::ZEXTLOAD, VT, Ty, Legal); | setLoadExtAction(ISD::ZEXTLOAD, VT, Ty, Legal); | ||||
setLoadExtAction(ISD::SEXTLOAD, VT, Ty, Legal); | setLoadExtAction(ISD::SEXTLOAD, VT, Ty, Legal); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) { | if (Subtarget->hasNEON() || Subtarget->hasMVEIntegerOps()) { | ||||
▲ Show 20 Lines • Show All 127 Lines • ▼ Show 20 Lines | if (Subtarget->isThumb1Only()) { | ||||
setOperationAction(ISD::SRL_PARTS, MVT::i32, Expand); | setOperationAction(ISD::SRL_PARTS, MVT::i32, Expand); | ||||
} | } | ||||
if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops()) | if (!Subtarget->isThumb1Only() && Subtarget->hasV6T2Ops()) | ||||
setOperationAction(ISD::BITREVERSE, MVT::i32, Legal); | setOperationAction(ISD::BITREVERSE, MVT::i32, Legal); | ||||
// ARM does not have ROTL. | // ARM does not have ROTL. | ||||
setOperationAction(ISD::ROTL, MVT::i32, Expand); | setOperationAction(ISD::ROTL, MVT::i32, Expand); | ||||
for (MVT VT : MVT::vector_valuetypes()) { | for (MVT VT : MVT::fixedlen_vector_valuetypes()) { | ||||
setOperationAction(ISD::ROTL, VT, Expand); | setOperationAction(ISD::ROTL, VT, Expand); | ||||
setOperationAction(ISD::ROTR, VT, Expand); | setOperationAction(ISD::ROTR, VT, Expand); | ||||
} | } | ||||
setOperationAction(ISD::CTTZ, MVT::i32, Custom); | setOperationAction(ISD::CTTZ, MVT::i32, Custom); | ||||
setOperationAction(ISD::CTPOP, MVT::i32, Expand); | setOperationAction(ISD::CTPOP, MVT::i32, Expand); | ||||
if (!Subtarget->hasV5TOps() || Subtarget->isThumb1Only()) { | if (!Subtarget->hasV5TOps() || Subtarget->isThumb1Only()) { | ||||
setOperationAction(ISD::CTLZ, MVT::i32, Expand); | setOperationAction(ISD::CTLZ, MVT::i32, Expand); | ||||
setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, LibCall); | setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, LibCall); | ||||
▲ Show 20 Lines • Show All 15,782 Lines • Show Last 20 Lines |