summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2018-10-23 16:35:51 +0000
committerJordan Rupprecht <rupprecht@google.com>2018-10-23 16:35:51 +0000
commit2fed6ac186b505a68a30e9e3851b942e74687d6e (patch)
tree72e591fa442312b8d83483faef08b6c44499e48b /llvm/lib
parentf1d8b7c49e29e0983c241862a4a78c3657620c36 (diff)
downloadbcm5719-llvm-2fed6ac186b505a68a30e9e3851b942e74687d6e.tar.gz
bcm5719-llvm-2fed6ac186b505a68a30e9e3851b942e74687d6e.zip
[DebugInfo][GlobalOpt] Fix -debugify for globalopt shrinking globals to booleans.
Summary: TryToShrinkGlobalToBoolean, when possible, will split store <value> + load <value> into store <bool> + select <bool ? value : 0>. This preserves DebugLoc during that pass. Fixes PR37959. The test case here is the simplified .ll for: ``` static int foo; int bar() { foo = 5; return foo; } ``` Reviewers: dblaikie, gbedwell, aprantl Reviewed By: dblaikie Subscribers: mehdi_amini, JDevlieghere, dexonsmith, llvm-commits Tags: #debug-info Differential Revision: https://reviews.llvm.org/D53531 llvm-svn: 345046
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/IPO/GlobalOpt.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 5518ef8fce9..3005aafd06b 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -1710,19 +1710,25 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
assert(isa<LoadInst>(StoreVal) && "Not a load of NewGV!");
}
}
- new StoreInst(StoreVal, NewGV, false, 0,
- SI->getOrdering(), SI->getSyncScopeID(), SI);
+ StoreInst *NSI =
+ new StoreInst(StoreVal, NewGV, false, 0, SI->getOrdering(),
+ SI->getSyncScopeID(), SI);
+ NSI->setDebugLoc(SI->getDebugLoc());
} else {
// Change the load into a load of bool then a select.
LoadInst *LI = cast<LoadInst>(UI);
LoadInst *NLI = new LoadInst(NewGV, LI->getName()+".b", false, 0,
LI->getOrdering(), LI->getSyncScopeID(), LI);
- Value *NSI;
+ Instruction *NSI;
if (IsOneZero)
NSI = new ZExtInst(NLI, LI->getType(), "", LI);
else
NSI = SelectInst::Create(NLI, OtherVal, InitVal, "", LI);
NSI->takeName(LI);
+ // Since LI is split into two instructions, NLI and NSI both inherit the
+ // same DebugLoc
+ NLI->setDebugLoc(LI->getDebugLoc());
+ NSI->setDebugLoc(LI->getDebugLoc());
LI->replaceAllUsesWith(NSI);
}
UI->eraseFromParent();
OpenPOWER on IntegriCloud