diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index cc626ae71f5..e3dd72daf70 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(*UI)) { - // Uses by dbg info shouldn't inhibit promotion. + // A bitcast that does not feed into debug info inhibits promotion. if (!BC->hasOneUse() || !isa(*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; }