|
9 | 9 | // This file examines all full size vector constant pool loads and attempts to
|
10 | 10 | // replace them with smaller constant pool entries, including:
|
11 | 11 | // * Converting AVX512 memory-fold instructions to their broadcast-fold form
|
12 |
| -// * TODO: Broadcasting of full width loads. |
| 12 | +// * Broadcasting of full width loads. |
13 | 13 | // * TODO: Sign/Zero extension of full width loads.
|
14 | 14 | //
|
15 | 15 | //===----------------------------------------------------------------------===//
|
@@ -230,6 +230,7 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
|
230 | 230 | MachineInstr &MI) {
|
231 | 231 | unsigned Opc = MI.getOpcode();
|
232 | 232 | MachineConstantPool *CP = MI.getParent()->getParent()->getConstantPool();
|
| 233 | + bool HasAVX2 = ST->hasAVX2(); |
233 | 234 | bool HasDQI = ST->hasDQI();
|
234 | 235 | bool HasBWI = ST->hasBWI();
|
235 | 236 |
|
@@ -309,19 +310,19 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
|
309 | 310 | /* Integer Loads */
|
310 | 311 | case X86::VMOVDQArm:
|
311 | 312 | case X86::VMOVDQUrm:
|
312 |
| - if (ST->hasAVX2()) |
313 |
| - return ConvertToBroadcast(0, 0, X86::VPBROADCASTQrm, X86::VPBROADCASTDrm, |
314 |
| - X86::VPBROADCASTWrm, X86::VPBROADCASTBrm, 1); |
315 |
| - return ConvertToBroadcast(0, 0, X86::VMOVDDUPrm, X86::VBROADCASTSSrm, 0, 0, |
316 |
| - 1); |
| 313 | + return ConvertToBroadcast( |
| 314 | + 0, 0, HasAVX2 ? X86::VPBROADCASTQrm : X86::VMOVDDUPrm, |
| 315 | + HasAVX2 ? X86::VPBROADCASTDrm : X86::VBROADCASTSSrm, |
| 316 | + HasAVX2 ? X86::VPBROADCASTWrm : 0, HasAVX2 ? X86::VPBROADCASTBrm : 0, |
| 317 | + 1); |
317 | 318 | case X86::VMOVDQAYrm:
|
318 | 319 | case X86::VMOVDQUYrm:
|
319 |
| - if (ST->hasAVX2()) |
320 |
| - return ConvertToBroadcast(0, X86::VBROADCASTI128, X86::VPBROADCASTQYrm, |
321 |
| - X86::VPBROADCASTDYrm, X86::VPBROADCASTWYrm, |
322 |
| - X86::VPBROADCASTBYrm, 1); |
323 |
| - return ConvertToBroadcast(0, X86::VBROADCASTF128, X86::VBROADCASTSDYrm, |
324 |
| - X86::VBROADCASTSSYrm, 0, 0, 1); |
| 320 | + return ConvertToBroadcast( |
| 321 | + 0, HasAVX2 ? X86::VBROADCASTI128 : X86::VBROADCASTF128, |
| 322 | + HasAVX2 ? X86::VPBROADCASTQYrm : X86::VBROADCASTSDYrm, |
| 323 | + HasAVX2 ? X86::VPBROADCASTDYrm : X86::VBROADCASTSSYrm, |
| 324 | + HasAVX2 ? X86::VPBROADCASTWYrm : 0, HasAVX2 ? X86::VPBROADCASTBYrm : 0, |
| 325 | + 1); |
325 | 326 | case X86::VMOVDQA32Z128rm:
|
326 | 327 | case X86::VMOVDQA64Z128rm:
|
327 | 328 | case X86::VMOVDQU32Z128rm:
|
|
0 commit comments