[llvm] [X86] Blocklist instructions that are unsafe for masked-load folding. (PR #178888)
Mészáros Gergely via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 30 06:09:23 PST 2026
================
@@ -295,3 +295,107 @@ ENTRY(MOVSDrr, MOVLPDrm, TB_NO_REVERSE)
ENTRY(VMOVSDZrr, VMOVLPDZ128rm, TB_NO_REVERSE)
ENTRY(VMOVSDrr, VMOVLPDrm, TB_NO_REVERSE)
#undef ENTRY
+// Prefixes for instructions that are unsafe for masked-load folding.
+// Folding with the same mask is only safe if every active destination
+// element reads only from source elements that are also active under the same mask.
+// These instructions perform element rearrangement/broadcasting that may cause
+// active destination elements to read from masked-off source elements.
+#ifndef NOFOLD_SAME_MASK_PREFIX
+#define NOFOLD_SAME_MASK_PREFIX(PREFIX)
+#endif
+NOFOLD_SAME_MASK_PREFIX(VALIGND)
+NOFOLD_SAME_MASK_PREFIX(VALIGNQ)
+NOFOLD_SAME_MASK_PREFIX(VBROADCASTF32X2)
+NOFOLD_SAME_MASK_PREFIX(VBROADCASTI32X2)
+NOFOLD_SAME_MASK_PREFIX(VBROADCASTSD)
+NOFOLD_SAME_MASK_PREFIX(VBROADCASTSS)
+NOFOLD_SAME_MASK_PREFIX(VDBPSADBW)
+NOFOLD_SAME_MASK_PREFIX(VEXPANDPD)
+NOFOLD_SAME_MASK_PREFIX(VEXPANDPS)
+NOFOLD_SAME_MASK_PREFIX(VGF2P8AFFINEINVQB)
+NOFOLD_SAME_MASK_PREFIX(VGF2P8AFFINEQB)
+NOFOLD_SAME_MASK_PREFIX(VINSERTF32X4)
+NOFOLD_SAME_MASK_PREFIX(VINSERTF32X8)
+NOFOLD_SAME_MASK_PREFIX(VINSERTF64X2)
+NOFOLD_SAME_MASK_PREFIX(VINSERTF64X4)
+NOFOLD_SAME_MASK_PREFIX(VINSERTI32X4)
+NOFOLD_SAME_MASK_PREFIX(VINSERTI32X8)
+NOFOLD_SAME_MASK_PREFIX(VINSERTI64X2)
+NOFOLD_SAME_MASK_PREFIX(VINSERTI64X4)
+NOFOLD_SAME_MASK_PREFIX(VMOVDDUP)
+NOFOLD_SAME_MASK_PREFIX(VMOVSHDUP)
+NOFOLD_SAME_MASK_PREFIX(VMOVSLDUP)
+NOFOLD_SAME_MASK_PREFIX(VMPSADBW)
+NOFOLD_SAME_MASK_PREFIX(VPACKSSDW)
+NOFOLD_SAME_MASK_PREFIX(VPACKSSWB)
+NOFOLD_SAME_MASK_PREFIX(VPACKUSDW)
+NOFOLD_SAME_MASK_PREFIX(VPACKUSWB)
+NOFOLD_SAME_MASK_PREFIX(VPALIGNR)
+NOFOLD_SAME_MASK_PREFIX(VPBROADCASTB)
+NOFOLD_SAME_MASK_PREFIX(VPBROADCASTD)
+NOFOLD_SAME_MASK_PREFIX(VPBROADCASTQ)
+NOFOLD_SAME_MASK_PREFIX(VPBROADCASTW)
+NOFOLD_SAME_MASK_PREFIX(VPCONFLICTD)
+NOFOLD_SAME_MASK_PREFIX(VPCONFLICTQ)
+NOFOLD_SAME_MASK_PREFIX(VPERMB)
+NOFOLD_SAME_MASK_PREFIX(VPERMD)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2B)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2D)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2PD)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2PS)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2Q)
+NOFOLD_SAME_MASK_PREFIX(VPERMI2W)
+NOFOLD_SAME_MASK_PREFIX(VPERMPD)
+NOFOLD_SAME_MASK_PREFIX(VPERMPS)
+NOFOLD_SAME_MASK_PREFIX(VPERMQ)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2B)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2D)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2PD)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2PS)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2Q)
+NOFOLD_SAME_MASK_PREFIX(VPERMT2W)
+NOFOLD_SAME_MASK_PREFIX(VPERMW)
+NOFOLD_SAME_MASK_PREFIX(VPEXPANDB)
+NOFOLD_SAME_MASK_PREFIX(VPEXPANDD)
+NOFOLD_SAME_MASK_PREFIX(VPEXPANDQ)
+NOFOLD_SAME_MASK_PREFIX(VPEXPANDW)
+NOFOLD_SAME_MASK_PREFIX(VPMULTISHIFTQB)
+NOFOLD_SAME_MASK_PREFIX(VPSHUFD)
+NOFOLD_SAME_MASK_PREFIX(VPSHUFHW)
+NOFOLD_SAME_MASK_PREFIX(VPSHUFLW)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKHBW)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKHDQ)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKHQDQ)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKHWD)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKLBW)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKLDQ)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKLQDQ)
+NOFOLD_SAME_MASK_PREFIX(VPUNPCKLWD)
+NOFOLD_SAME_MASK_PREFIX(VSHUFF32X4)
+NOFOLD_SAME_MASK_PREFIX(VSHUFF64X2)
+NOFOLD_SAME_MASK_PREFIX(VSHUFI32X4)
+NOFOLD_SAME_MASK_PREFIX(VSHUFI64X2)
+NOFOLD_SAME_MASK_PREFIX(VSHUFPD)
+NOFOLD_SAME_MASK_PREFIX(VSHUFPS)
+NOFOLD_SAME_MASK_PREFIX(VUNPCKHPD)
+NOFOLD_SAME_MASK_PREFIX(VUNPCKHPS)
+NOFOLD_SAME_MASK_PREFIX(VUNPCKLPD)
+NOFOLD_SAME_MASK_PREFIX(VUNPCKLPS)
+#undef NOFOLD_SAME_MASK_PREFIX
+#ifndef NOFOLD_SAME_MASK
+#define NOFOLD_SAME_MASK(INSN)
+#endif
+// VPERMILPD/VPERMILPS rik forms: Only rik forms are listed here; rrk forms are NOT blocked
+NOFOLD_SAME_MASK(VPERMILPDZ128rik)
+NOFOLD_SAME_MASK(VPERMILPDZ128rikz)
+NOFOLD_SAME_MASK(VPERMILPDZ256rik)
+NOFOLD_SAME_MASK(VPERMILPDZ256rikz)
+NOFOLD_SAME_MASK(VPERMILPDZrik)
+NOFOLD_SAME_MASK(VPERMILPDZrikz)
+NOFOLD_SAME_MASK(VPERMILPSZ128rik)
+NOFOLD_SAME_MASK(VPERMILPSZ128rikz)
+NOFOLD_SAME_MASK(VPERMILPSZ256rik)
+NOFOLD_SAME_MASK(VPERMILPSZ256rikz)
+NOFOLD_SAME_MASK(VPERMILPSZrik)
+NOFOLD_SAME_MASK(VPERMILPSZrikz)
+#undef NOFOLD_SAME_MASK
----------------
Maetveis wrote:
```suggestion
#undef NOFOLD_SAME_MASK
```
https://github.com/llvm/llvm-project/pull/178888
More information about the llvm-commits
mailing list