diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2018-10-23 16:35:51 +0000 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2018-10-23 16:35:51 +0000 |
commit | 2fed6ac186b505a68a30e9e3851b942e74687d6e (patch) | |
tree | 72e591fa442312b8d83483faef08b6c44499e48b /llvm/lib | |
parent | f1d8b7c49e29e0983c241862a4a78c3657620c36 (diff) | |
download | bcm5719-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.cpp | 12 |
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(); |