diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-06-20 00:38:12 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-06-20 00:38:12 +0000 |
commit | 4dc895164a8b3a26792dc7fe5db391e7218968be (patch) | |
tree | 11accff7423f33d9dc3307047c34bbce208f499a /llvm/lib/Transforms/Utils | |
parent | 9801b253ad3be9d9151e78e738115fa7725db7ff (diff) | |
download | bcm5719-llvm-4dc895164a8b3a26792dc7fe5db391e7218968be.tar.gz bcm5719-llvm-4dc895164a8b3a26792dc7fe5db391e7218968be.zip |
Don't build switch lookup tables for dllimport or TLS variables
We would previously put dllimport variables in switch lookup tables, which
doesn't work because the address cannot be used in a constant initializer.
This is basically the same problem that we have in PR19955.
Putting TLS variables in switch tables also desn't work, because the
address of such a variable is not constant.
Differential Revision: http://reviews.llvm.org/D4220
llvm-svn: 211331
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index e155daf6fcc..ff2f2a03622 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -3313,6 +3313,10 @@ static bool ForwardSwitchConditionToPHI(SwitchInst *SI) { static bool ValidLookupTableConstant(Constant *C) { if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) return CE->isGEPWithNoNotionalOverIndexing(); + if (C->isThreadDependent()) + return false; + if (C->isDLLImportDependent()) + return false; return isa<ConstantFP>(C) || isa<ConstantInt>(C) || |