[llvm-branch-commits] [llvm] [Vectorizer] fix GEPs incorrectly marked as "inbounds" (PR #120730)
Florian Mayer via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Dec 20 05:40:24 PST 2024
https://github.com/fmayer updated https://github.com/llvm/llvm-project/pull/120730
>From 5987219575feabd0eefba5932c21b0eba8ae4fb7 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Dec 2024 05:35:56 -0800
Subject: [PATCH 1/2] simplify
Created using spr 1.3.4
---
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index 0768eccc8aeb35..ffd89466abeea9 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -1986,12 +1986,12 @@ void VPReverseVectorPointerRecipe::execute(VPTransformState &State) {
// LastLane = 1 - RunTimeVF
Value *LastLane = Builder.CreateSub(ConstantInt::get(IndexTy, 1), RunTimeVF);
Value *Ptr = State.get(getOperand(0), VPLane(0));
- Value *ResultPtr = Builder.CreateGEP(
- IndexedTy, Ptr, NumElt, "",
- getGEPNoWrapFlags().withoutInBounds().withoutNoUnsignedSignedWrap());
- ResultPtr = Builder.CreateGEP(
- IndexedTy, ResultPtr, LastLane, "",
- getGEPNoWrapFlags().withoutInBounds().withoutNoUnsignedSignedWrap());
+ Value *ResultPtr =
+ Builder.CreateGEP(IndexedTy, Ptr, NumElt, "",
+ getGEPNoWrapFlags().withoutNoUnsignedSignedWrap());
+ ResultPtr =
+ Builder.CreateGEP(IndexedTy, ResultPtr, LastLane, "",
+ getGEPNoWrapFlags().withoutNoUnsignedSignedWrap());
State.set(this, ResultPtr, /*IsScalar*/ true);
}
>From e4e48cf7e0448f25ccdcdf7d7c262ac880853ddd Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Fri, 20 Dec 2024 05:40:10 -0800
Subject: [PATCH 2/2] address comment
Created using spr 1.3.4
---
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index ffd89466abeea9..f97cae215ec087 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -1986,12 +1986,10 @@ void VPReverseVectorPointerRecipe::execute(VPTransformState &State) {
// LastLane = 1 - RunTimeVF
Value *LastLane = Builder.CreateSub(ConstantInt::get(IndexTy, 1), RunTimeVF);
Value *Ptr = State.get(getOperand(0), VPLane(0));
- Value *ResultPtr =
- Builder.CreateGEP(IndexedTy, Ptr, NumElt, "",
- getGEPNoWrapFlags().withoutNoUnsignedSignedWrap());
- ResultPtr =
- Builder.CreateGEP(IndexedTy, ResultPtr, LastLane, "",
- getGEPNoWrapFlags().withoutNoUnsignedSignedWrap());
+ // N.B. we deliberately do not use getGEPNoWrapFlags here, because this
+ // transform can invalidate `inbounds`.
+ Value *ResultPtr = Builder.CreateGEP(IndexedTy, Ptr, NumElt, "");
+ ResultPtr = Builder.CreateGEP(IndexedTy, ResultPtr, LastLane, "");
State.set(this, ResultPtr, /*IsScalar*/ true);
}
More information about the llvm-branch-commits
mailing list