diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 8c3d0d7a42d..a8859be9fb1 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -866,14 +866,11 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM, setLoadExtAction(ISD::EXTLOAD, VT, MVT::v8i8, Custom); } - if (ExperimentalVectorWideningLegalization) { - // Explicitly code the list so we don't use narrow result types. - setLoadExtAction(ISD::SEXTLOAD, MVT::v4i32, MVT::v4i8, Custom); - setLoadExtAction(ISD::SEXTLOAD, MVT::v4i32, MVT::v4i16, Custom); + if (ExperimentalVectorWideningLegalization && + !Subtarget.hasSSE41() && Subtarget.is64Bit()) { + // This lets DAG combine create sextloads that get split and scalarized. + // TODO: Does this make sense? What about v2i8->v2i64? setLoadExtAction(ISD::SEXTLOAD, MVT::v4i64, MVT::v4i8, Custom); - setLoadExtAction(ISD::SEXTLOAD, MVT::v4i64, MVT::v4i16, Custom); - setLoadExtAction(ISD::SEXTLOAD, MVT::v8i16, MVT::v8i8, Custom); - setLoadExtAction(ISD::SEXTLOAD, MVT::v8i32, MVT::v8i8, Custom); setLoadExtAction(ISD::SEXTLOAD, MVT::v8i64, MVT::v8i8, Custom); } |