aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2009-03-06 00:42:50 +0000
committerDale Johannesen <dalej@apple.com>2009-03-06 00:42:50 +0000
commit2511abf6e79d36f679bd5ed5af94208cde579e74 (patch)
tree6199f735c39b0a9795a7e28c1a076fa07ffa3dc9 /lib/Transforms/Utils/PromoteMemoryToRegister.cpp
parentf70bda2f8175db0e0ea24d080a8e5c921b95a74c (diff)
Tweak the check for promotable alloca's to handle
debug intrinsics correctly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66225 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r--lib/Transforms/Utils/PromoteMemoryToRegister.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
index cc626ae71f..e3dd72daf7 100644
--- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
+++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
@@ -81,9 +81,15 @@ bool llvm::isAllocaPromotable(const AllocaInst *AI) {
if (SI->isVolatile())
return false;
} else if (const BitCastInst *BC = dyn_cast<BitCastInst>(*UI)) {
- // Uses by dbg info shouldn't inhibit promotion.
+ // A bitcast that does not feed into debug info inhibits promotion.
if (!BC->hasOneUse() || !isa<DbgInfoIntrinsic>(*BC->use_begin()))
return false;
+ // If the only use is by debug info, this alloca will not exist in
+ // non-debug code, so don't try to promote; this ensures the same
+ // codegen with debug info. Otherwise, debug info should not
+ // inhibit promotion (but we must examine other uses).
+ if (AI->hasOneUse())
+ return false;
} else {
return false;
}