summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorMircea Trofin <mtrofin@google.com>2018-04-06 15:54:47 +0000
committerMircea Trofin <mtrofin@google.com>2018-04-06 15:54:47 +0000
commitaa3fea6cb0590e82796bf6c785165bcfe5ffa6b0 (patch)
tree9a1b4d3cc4cb91456e309e34776f98335602dbc4 /llvm/lib/Transforms
parent59399ae4ccd8b5f8e1e0f5aef8a570c8ff6cc7eb (diff)
downloadbcm5719-llvm-aa3fea6cb0590e82796bf6c785165bcfe5ffa6b0.tar.gz
bcm5719-llvm-aa3fea6cb0590e82796bf6c785165bcfe5ffa6b0.zip
[GlobalOpt] Fix support for casts in ctors.
Summary: Fixing an issue where initializations of globals where constructors use casts were silently translated to 0-initialization. Reviewers: davidxl, evgeny777 Reviewed By: evgeny777 Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D45198 llvm-svn: 329409
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Utils/Evaluator.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/Evaluator.cpp b/llvm/lib/Transforms/Utils/Evaluator.cpp
index 51fc423546d..cb5280992fb 100644
--- a/llvm/lib/Transforms/Utils/Evaluator.cpp
+++ b/llvm/lib/Transforms/Utils/Evaluator.cpp
@@ -203,7 +203,11 @@ Constant *Evaluator::ComputeLoadResult(Constant *P) {
break;
// Handle a constantexpr bitcast.
case Instruction::BitCast:
- if (auto *I = getInitializer(CE->getOperand(0)))
+ Constant *Val = getVal(CE->getOperand(0));
+ auto MM = MutatedMemory.find(Val);
+ auto *I = (MM != MutatedMemory.end()) ? MM->second
+ : getInitializer(CE->getOperand(0));
+ if (I)
return ConstantFoldLoadThroughBitcast(
I, P->getType()->getPointerElementType(), DL);
break;
OpenPOWER on IntegriCloud