From: Vedant Kumar Date: Wed, 22 Aug 2018 00:10:37 +0000 (+0000) Subject: [CodeGenPrepare] Set debug locations when splitting selects X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e8a2c963c804770bb58fbbd0103da2a86217c15;p=platform%2Fupstream%2Fllvm.git [CodeGenPrepare] Set debug locations when splitting selects When splitting a select into a diamond, set debug locations on newly-created branch instructions and phi nodes. llvm-svn: 340371 --- diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index fd26345b..5209ddb 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -5680,6 +5680,7 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) { TrueBlock = BasicBlock::Create(SI->getContext(), "select.true.sink", EndBlock->getParent(), EndBlock); TrueBranch = BranchInst::Create(EndBlock, TrueBlock); + TrueBranch->setDebugLoc(SI->getDebugLoc()); } auto *TrueInst = cast(SI->getTrueValue()); TrueInst->moveBefore(TrueBranch); @@ -5689,6 +5690,7 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) { FalseBlock = BasicBlock::Create(SI->getContext(), "select.false.sink", EndBlock->getParent(), EndBlock); FalseBranch = BranchInst::Create(EndBlock, FalseBlock); + FalseBranch->setDebugLoc(SI->getDebugLoc()); } auto *FalseInst = cast(SI->getFalseValue()); FalseInst->moveBefore(FalseBranch); @@ -5703,7 +5705,8 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) { FalseBlock = BasicBlock::Create(SI->getContext(), "select.false", EndBlock->getParent(), EndBlock); - BranchInst::Create(EndBlock, FalseBlock); + auto *FalseBranch = BranchInst::Create(EndBlock, FalseBlock); + FalseBranch->setDebugLoc(SI->getDebugLoc()); } // Insert the real conditional branch based on the original condition. @@ -5738,6 +5741,7 @@ bool CodeGenPrepare::optimizeSelectInst(SelectInst *SI) { PN->takeName(SI); PN->addIncoming(getTrueOrFalseValue(SI, true, INS), TrueBlock); PN->addIncoming(getTrueOrFalseValue(SI, false, INS), FalseBlock); + PN->setDebugLoc(SI->getDebugLoc()); SI->replaceAllUsesWith(PN); SI->eraseFromParent(); diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/select.ll b/llvm/test/Transforms/CodeGenPrepare/X86/select.ll index 2c81de9..7829376 100644 --- a/llvm/test/Transforms/CodeGenPrepare/X86/select.ll +++ b/llvm/test/Transforms/CodeGenPrepare/X86/select.ll @@ -40,13 +40,13 @@ define float @fdiv_true_sink(float %a, float %b) { ; DEBUG-NEXT: entry: ; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 1.000000e+00 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]] -; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%[^,]+]] +; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]], !dbg ; DEBUG: select.true.sink: ; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]] -; DEBUG-NEXT: br label [[SELECT_END]] +; DEBUG-NEXT: br label [[SELECT_END]], !dbg ; DEBUG: select.end: -; DEBUG-NEXT: [[SEL:%.*]] = phi float [ [[DIV]], [[SELECT_TRUE_SINK]] ], [ 2.000000e+00, [[ENTRY:%.*]] ] +; DEBUG-NEXT: [[SEL:%.*]] = phi float [ [[DIV]], [[SELECT_TRUE_SINK]] ], [ 2.000000e+00, [[ENTRY:%.*]] ], !dbg ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[SEL]] ; DEBUG-NEXT: ret float [[SEL]] ; @@ -69,6 +69,20 @@ define float @fdiv_false_sink(float %a, float %b) { ; CHECK-NEXT: [[SEL:%.*]] = phi float [ 4.000000e+00, [[ENTRY:%.*]] ], [ [[DIV]], [[SELECT_FALSE_SINK]] ] ; CHECK-NEXT: ret float [[SEL]] ; +; DEBUG-LABEL: @fdiv_false_sink( +; DEBUG-NEXT: entry: +; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 3.000000e+00 +; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]] +; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_END:%.*]], label [[SELECT_FALSE_SINK:%.*]], !dbg +; DEBUG: select.false.sink: +; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]] +; DEBUG-NEXT: br label [[SELECT_END]], !dbg +; DEBUG: select.end: +; DEBUG-NEXT: [[SEL:%.*]] = phi float [ 4.000000e+00, [[ENTRY:%.*]] ], [ [[DIV]], [[SELECT_FALSE_SINK]] ], !dbg +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[SEL]] +; DEBUG-NEXT: ret float [[SEL]], !dbg +; entry: %div = fdiv float %a, %b %cmp = fcmp ogt float %a, 3.0