diff options
-rw-r--r-- | llvm/lib/Target/X86/X86FixupVectorConstants.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86FixupVectorConstants.cpp b/llvm/lib/Target/X86/X86FixupVectorConstants.cpp index 94e221f..d4d5cd8 100644 --- a/llvm/lib/Target/X86/X86FixupVectorConstants.cpp +++ b/llvm/lib/Target/X86/X86FixupVectorConstants.cpp @@ -9,7 +9,7 @@ // This file examines all full size vector constant pool loads and attempts to // replace them with smaller constant pool entries, including: // * Converting AVX512 memory-fold instructions to their broadcast-fold form -// * TODO: Broadcasting of full width loads. +// * Broadcasting of full width loads. // * TODO: Sign/Zero extension of full width loads. // //===----------------------------------------------------------------------===// @@ -230,6 +230,7 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF, MachineInstr &MI) { unsigned Opc = MI.getOpcode(); MachineConstantPool *CP = MI.getParent()->getParent()->getConstantPool(); + bool HasAVX2 = ST->hasAVX2(); bool HasDQI = ST->hasDQI(); bool HasBWI = ST->hasBWI(); @@ -309,19 +310,19 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF, /* Integer Loads */ case X86::VMOVDQArm: case X86::VMOVDQUrm: - if (ST->hasAVX2()) - return ConvertToBroadcast(0, 0, X86::VPBROADCASTQrm, X86::VPBROADCASTDrm, - X86::VPBROADCASTWrm, X86::VPBROADCASTBrm, 1); - return ConvertToBroadcast(0, 0, X86::VMOVDDUPrm, X86::VBROADCASTSSrm, 0, 0, - 1); + return ConvertToBroadcast( + 0, 0, HasAVX2 ? X86::VPBROADCASTQrm : X86::VMOVDDUPrm, + HasAVX2 ? X86::VPBROADCASTDrm : X86::VBROADCASTSSrm, + HasAVX2 ? X86::VPBROADCASTWrm : 0, HasAVX2 ? X86::VPBROADCASTBrm : 0, + 1); case X86::VMOVDQAYrm: case X86::VMOVDQUYrm: - if (ST->hasAVX2()) - return ConvertToBroadcast(0, X86::VBROADCASTI128, X86::VPBROADCASTQYrm, - X86::VPBROADCASTDYrm, X86::VPBROADCASTWYrm, - X86::VPBROADCASTBYrm, 1); - return ConvertToBroadcast(0, X86::VBROADCASTF128, X86::VBROADCASTSDYrm, - X86::VBROADCASTSSYrm, 0, 0, 1); + return ConvertToBroadcast( + 0, HasAVX2 ? X86::VBROADCASTI128 : X86::VBROADCASTF128, + HasAVX2 ? X86::VPBROADCASTQYrm : X86::VBROADCASTSDYrm, + HasAVX2 ? X86::VPBROADCASTDYrm : X86::VBROADCASTSSYrm, + HasAVX2 ? X86::VPBROADCASTWYrm : 0, HasAVX2 ? X86::VPBROADCASTBYrm : 0, + 1); case X86::VMOVDQA32Z128rm: case X86::VMOVDQA64Z128rm: case X86::VMOVDQU32Z128rm: |