[llvm] [LV] Don't mark ptrs as safe to speculate if fed by UB/poison op. (PR #143204)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 21 02:41:18 PDT 2025


================
@@ -1491,10 +1491,51 @@ bool LoopVectorizationLegality::canVectorizeWithIfConvert() {
     SmallVector<const SCEVPredicate *, 4> Predicates;
     for (Instruction &I : *BB) {
       LoadInst *LI = dyn_cast<LoadInst>(&I);
+
+      // Make sure we can execute all computations feeding into Ptr in the loop
+      // w/o triggering UB and that none of the out-of-loop operands are poison.
+      // We do not need to check if operations inside the loop can produce
+      // poison due to flags (e.g. due to an inbounds GEP going out of bounds),
+      // because flags will be dropped when executing them unconditionally.
+      // TODO: Results could be improved by considering poison-propagation
+      // properties of visited ops.
----------------
ayalz wrote:

Post-commit nit: another TODO is to potentially save compile time by computing all SpeculatablePointers defined in the loop together, instead of analyzing the expression of each pointer independently, as some pointers may be used to define others?

https://github.com/llvm/llvm-project/pull/143204


More information about the llvm-commits mailing list