[llvm] r347147 - [CorrelatedValuePropagation] Preserve debug locations (PR38178)
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 17 16:29:58 PST 2018
Author: vedantk
Date: Sat Nov 17 16:29:58 2018
New Revision: 347147
URL: http://llvm.org/viewvc/llvm-project?rev=347147&view=rev
Log:
[CorrelatedValuePropagation] Preserve debug locations (PR38178)
Fix all of the missing debug location errors in CVP found by debugify.
This includes the missing-location-after-udiv-truncation case described
in llvm.org/PR38178.
Modified:
llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
llvm/trunk/test/Transforms/CorrelatedValuePropagation/ashr.ll
llvm/trunk/test/Transforms/CorrelatedValuePropagation/overflows.ll
llvm/trunk/test/Transforms/CorrelatedValuePropagation/udiv.ll
Modified: llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=347147&r1=347146&r2=347147&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp Sat Nov 17 16:29:58 2018
@@ -430,23 +430,21 @@ static bool willNotOverflow(IntrinsicIns
}
static void processOverflowIntrinsic(IntrinsicInst *II) {
+ IRBuilder<> B(II);
Value *NewOp = nullptr;
switch (II->getIntrinsicID()) {
default:
llvm_unreachable("Unexpected instruction.");
case Intrinsic::uadd_with_overflow:
case Intrinsic::sadd_with_overflow:
- NewOp = BinaryOperator::CreateAdd(II->getOperand(0), II->getOperand(1),
- II->getName(), II);
+ NewOp = B.CreateAdd(II->getOperand(0), II->getOperand(1), II->getName());
break;
case Intrinsic::usub_with_overflow:
case Intrinsic::ssub_with_overflow:
- NewOp = BinaryOperator::CreateSub(II->getOperand(0), II->getOperand(1),
- II->getName(), II);
+ NewOp = B.CreateSub(II->getOperand(0), II->getOperand(1), II->getName());
break;
}
++NumOverflows;
- IRBuilder<> B(II);
Value *NewI = B.CreateInsertValue(UndefValue::get(II->getType()), NewOp, 0);
NewI = B.CreateInsertValue(NewI, ConstantInt::getFalse(II->getContext()), 1);
II->replaceAllUsesWith(NewI);
@@ -528,17 +526,17 @@ static bool processUDivOrURem(BinaryOper
return false;
++NumUDivs;
+ IRBuilder<> B{Instr};
auto *TruncTy = Type::getIntNTy(Instr->getContext(), NewWidth);
- auto *LHS = CastInst::Create(Instruction::Trunc, Instr->getOperand(0), TruncTy,
- Instr->getName() + ".lhs.trunc", Instr);
- auto *RHS = CastInst::Create(Instruction::Trunc, Instr->getOperand(1), TruncTy,
- Instr->getName() + ".rhs.trunc", Instr);
- auto *BO =
- BinaryOperator::Create(Instr->getOpcode(), LHS, RHS, Instr->getName(), Instr);
- auto *Zext = CastInst::Create(Instruction::ZExt, BO, Instr->getType(),
- Instr->getName() + ".zext", Instr);
- if (BO->getOpcode() == Instruction::UDiv)
- BO->setIsExact(Instr->isExact());
+ auto *LHS = B.CreateTruncOrBitCast(Instr->getOperand(0), TruncTy,
+ Instr->getName() + ".lhs.trunc");
+ auto *RHS = B.CreateTruncOrBitCast(Instr->getOperand(1), TruncTy,
+ Instr->getName() + ".rhs.trunc");
+ auto *BO = B.CreateBinOp(Instr->getOpcode(), LHS, RHS, Instr->getName());
+ auto *Zext = B.CreateZExt(BO, Instr->getType(), Instr->getName() + ".zext");
+ if (auto *BinOp = dyn_cast<BinaryOperator>(BO))
+ if (BinOp->getOpcode() == Instruction::UDiv)
+ BinOp->setIsExact(Instr->isExact());
Instr->replaceAllUsesWith(Zext);
Instr->eraseFromParent();
@@ -552,6 +550,7 @@ static bool processSRem(BinaryOperator *
++NumSRems;
auto *BO = BinaryOperator::CreateURem(SDI->getOperand(0), SDI->getOperand(1),
SDI->getName(), SDI);
+ BO->setDebugLoc(SDI->getDebugLoc());
SDI->replaceAllUsesWith(BO);
SDI->eraseFromParent();
@@ -573,6 +572,7 @@ static bool processSDiv(BinaryOperator *
++NumSDivs;
auto *BO = BinaryOperator::CreateUDiv(SDI->getOperand(0), SDI->getOperand(1),
SDI->getName(), SDI);
+ BO->setDebugLoc(SDI->getDebugLoc());
BO->setIsExact(SDI->isExact());
SDI->replaceAllUsesWith(BO);
SDI->eraseFromParent();
@@ -595,6 +595,7 @@ static bool processAShr(BinaryOperator *
++NumAShrs;
auto *BO = BinaryOperator::CreateLShr(SDI->getOperand(0), SDI->getOperand(1),
SDI->getName(), SDI);
+ BO->setDebugLoc(SDI->getDebugLoc());
BO->setIsExact(SDI->isExact());
SDI->replaceAllUsesWith(BO);
SDI->eraseFromParent();
Modified: llvm/trunk/test/Transforms/CorrelatedValuePropagation/ashr.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CorrelatedValuePropagation/ashr.ll?rev=347147&r1=347146&r2=347147&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/ashr.ll (original)
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/ashr.ll Sat Nov 17 16:29:58 2018
@@ -1,5 +1,11 @@
; RUN: opt < %s -correlated-propagation -S | FileCheck %s
+; Check that debug locations are preserved. For more info see:
+; https://llvm.org/docs/SourceLevelDebugging.html#fixing-errors
+; RUN: opt < %s -enable-debugify -correlated-propagation -S 2>&1 | \
+; RUN: FileCheck %s -check-prefix=DEBUG
+; DEBUG: CheckModuleDebugify: PASS
+
; CHECK-LABEL: @test1
define void @test1(i32 %n) {
entry:
Modified: llvm/trunk/test/Transforms/CorrelatedValuePropagation/overflows.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CorrelatedValuePropagation/overflows.ll?rev=347147&r1=347146&r2=347147&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/overflows.ll (original)
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/overflows.ll Sat Nov 17 16:29:58 2018
@@ -1,5 +1,11 @@
; RUN: opt -S -correlated-propagation < %s | FileCheck %s
+; Check that debug locations are preserved. For more info see:
+; https://llvm.org/docs/SourceLevelDebugging.html#fixing-errors
+; RUN: opt < %s -enable-debugify -correlated-propagation -S 2>&1 | \
+; RUN: FileCheck %s -check-prefix=DEBUG
+; DEBUG: CheckModuleDebugify: PASS
+
declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32)
declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32)
Modified: llvm/trunk/test/Transforms/CorrelatedValuePropagation/udiv.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CorrelatedValuePropagation/udiv.ll?rev=347147&r1=347146&r2=347147&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/udiv.ll (original)
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/udiv.ll Sat Nov 17 16:29:58 2018
@@ -1,5 +1,11 @@
; RUN: opt < %s -correlated-propagation -S | FileCheck %s
+; Check that debug locations are preserved. For more info see:
+; https://llvm.org/docs/SourceLevelDebugging.html#fixing-errors
+; RUN: opt < %s -enable-debugify -correlated-propagation -S 2>&1 | \
+; RUN: FileCheck %s -check-prefix=DEBUG
+; DEBUG: CheckModuleDebugify: PASS
+
; CHECK-LABEL: @test_nop
define void @test_nop(i32 %n) {
; CHECK udiv i32 %n, 100
More information about the llvm-commits
mailing list