[llvm] 3a859b1 - [VPlan] Set and use debug location for VPScalarIVStepsRecipe.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 4 13:14:58 PDT 2025
Author: Florian Hahn
Date: 2025-04-04T21:14:36+01:00
New Revision: 3a859b11e3ca758043b88693fdf990d361a02ef1
URL: https://github.com/llvm/llvm-project/commit/3a859b11e3ca758043b88693fdf990d361a02ef1
DIFF: https://github.com/llvm/llvm-project/commit/3a859b11e3ca758043b88693fdf990d361a02ef1.diff
LOG: [VPlan] Set and use debug location for VPScalarIVStepsRecipe.
This adds missing debug location for VPscalarIVStepsRecipe. The location
of the corresponding phi is used.
Added:
Modified:
llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
llvm/lib/Transforms/Vectorize/VPlan.h
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
llvm/test/Transforms/LoopVectorize/debugloc.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h b/llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
index 9e0c55c7bcce2..12d615d9adbcc 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
@@ -263,10 +263,10 @@ class VPBuilder {
VPScalarIVStepsRecipe *
createScalarIVSteps(Instruction::BinaryOps InductionOpcode,
FPMathOperator *FPBinOp, VPValue *IV, VPValue *Step,
- VPValue *VF) {
+ VPValue *VF, DebugLoc DL) {
return tryInsertInstruction(new VPScalarIVStepsRecipe(
IV, Step, VF, InductionOpcode,
- FPBinOp ? FPBinOp->getFastMathFlags() : FastMathFlags()));
+ FPBinOp ? FPBinOp->getFastMathFlags() : FastMathFlags(), DL));
}
//===--------------------------------------------------------------------===//
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index ebdc09feeb06e..a98d0ecb9a33b 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -3076,25 +3076,28 @@ class VPScalarIVStepsRecipe : public VPRecipeWithIRFlags,
public:
VPScalarIVStepsRecipe(VPValue *IV, VPValue *Step, VPValue *VF,
- Instruction::BinaryOps Opcode, FastMathFlags FMFs)
+ Instruction::BinaryOps Opcode, FastMathFlags FMFs,
+ DebugLoc DL)
: VPRecipeWithIRFlags(VPDef::VPScalarIVStepsSC,
- ArrayRef<VPValue *>({IV, Step, VF}), FMFs),
+ ArrayRef<VPValue *>({IV, Step, VF}), FMFs, DL),
InductionOpcode(Opcode) {}
VPScalarIVStepsRecipe(const InductionDescriptor &IndDesc, VPValue *IV,
- VPValue *Step, VPValue *VF)
+ VPValue *Step, VPValue *VF, DebugLoc DL = {})
: VPScalarIVStepsRecipe(
IV, Step, VF, IndDesc.getInductionOpcode(),
dyn_cast_or_null<FPMathOperator>(IndDesc.getInductionBinOp())
? IndDesc.getInductionBinOp()->getFastMathFlags()
- : FastMathFlags()) {}
+ : FastMathFlags(),
+ DL) {}
~VPScalarIVStepsRecipe() override = default;
VPScalarIVStepsRecipe *clone() override {
return new VPScalarIVStepsRecipe(
getOperand(0), getOperand(1), getOperand(2), InductionOpcode,
- hasFastMathFlags() ? getFastMathFlags() : FastMathFlags());
+ hasFastMathFlags() ? getFastMathFlags() : FastMathFlags(),
+ getDebugLoc());
}
/// Return true if this VPScalarIVStepsRecipe corresponds to part 0. Note that
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index a117d82e64ef7..7b5c6b6f6f76e 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -2029,6 +2029,7 @@ void VPDerivedIVRecipe::print(raw_ostream &O, const Twine &Indent,
#endif
void VPScalarIVStepsRecipe::execute(VPTransformState &State) {
+ State.setDebugLocFrom(getDebugLoc());
// Fast-math-flags propagate from the original induction instruction.
IRBuilder<>::FastMathFlagGuard FMFG(State.Builder);
if (hasFastMathFlags())
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 098e35fbe5bbb..9815dfd31374b 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -576,7 +576,7 @@ createScalarIVSteps(VPlan &Plan, InductionDescriptor::InductionKind Kind,
Step = Builder.createScalarCast(Instruction::Trunc, Step, ResultTy, DL);
}
return Builder.createScalarIVSteps(InductionOpcode, FPBinOp, BaseIV, Step,
- &Plan.getVF());
+ &Plan.getVF(), DL);
}
static SmallVector<VPUser *> collectUsersRecursively(VPValue *V) {
diff --git a/llvm/test/Transforms/LoopVectorize/debugloc.ll b/llvm/test/Transforms/LoopVectorize/debugloc.ll
index 03c3dcf3ec39f..c31f438feae6e 100644
--- a/llvm/test/Transforms/LoopVectorize/debugloc.ll
+++ b/llvm/test/Transforms/LoopVectorize/debugloc.ll
@@ -175,9 +175,8 @@ define void @test_scalar_steps(ptr nocapture %a, ptr noalias %b, i64 %size) !dbg
; CHECK: vector.body:
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %vector.ph ], [ [[INDEX_NEXT:%.*]], %vector.body ]
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = mul i64 [[INDEX]], 2
-; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[OFFSET_IDX]], 0
-; CHECK-NOT: !dbg
-; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[OFFSET_IDX]], 2
+; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[OFFSET_IDX]], 0, !dbg [[LOC8:!.+]]
+; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[OFFSET_IDX]], 2, !dbg [[LOC8]]
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 [[TMP6]]
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[TMP7]]
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i64 [[TMP6]]
@@ -215,6 +214,7 @@ exit:
; CHECK: [[LOC5]] = !DILocation(line: 320
; CHECK: [[LOC6]] = !DILocation(line: 430
; CHECK: [[LOC7]] = !DILocation(line: 540
+; CHECK: [[LOC8]] = !DILocation(line: 650
declare void @llvm.dbg.declare(metadata, metadata, metadata)
More information about the llvm-commits
mailing list