diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 59540211d54..15d4bde0167 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -1267,7 +1267,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,      for (auto VT : { MVT::v4i32, MVT::v8i32, MVT::v2i64, MVT::v4i64,                       MVT::v4f32, MVT::v8f32, MVT::v2f64, MVT::v4f64 }) { -      setOperationAction(ISD::MLOAD,  VT, Custom); +      setOperationAction(ISD::MLOAD,  VT, Subtarget.hasVLX() ? Legal : Custom);        setOperationAction(ISD::MSTORE, VT, Legal);      } @@ -1416,10 +1416,12 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,      // With 512-bit vectors and no VLX, we prefer to widen MLOAD/MSTORE      // to 512-bit rather than use the AVX2 instructions so that we can use      // k-masks. -    for (auto VT : {MVT::v4i32, MVT::v8i32, MVT::v2i64, MVT::v4i64, -         MVT::v4f32, MVT::v8f32, MVT::v2f64, MVT::v4f64}) { -      setOperationAction(ISD::MLOAD,  VT, Subtarget.hasVLX() ? Legal : Custom); -      setOperationAction(ISD::MSTORE, VT, Subtarget.hasVLX() ? Legal : Custom); +    if (!Subtarget.hasVLX()) { +      for (auto VT : {MVT::v4i32, MVT::v8i32, MVT::v2i64, MVT::v4i64, +           MVT::v4f32, MVT::v8f32, MVT::v2f64, MVT::v4f64}) { +        setOperationAction(ISD::MLOAD,  VT, Custom); +        setOperationAction(ISD::MSTORE, VT, Custom); +      }      }      setOperationAction(ISD::TRUNCATE,           MVT::v8i32, Custom);  | 

