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

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 9 05:01:30 PDT 2025


================
@@ -1493,10 +1493,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.
+      auto CanSpeculateOp = [this](Value *Ptr) {
----------------
david-arm wrote:

This function is specifically related to UB, so perhaps worth making it a bit clearer by adding it to the name, i.e. `PtrWillNotTriggerUB`?

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


More information about the llvm-commits mailing list