summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-06-20 00:38:12 +0000
committerHans Wennborg <hans@hanshq.net>2014-06-20 00:38:12 +0000
commit4dc895164a8b3a26792dc7fe5db391e7218968be (patch)
tree11accff7423f33d9dc3307047c34bbce208f499a /llvm/lib/Transforms/Utils
parent9801b253ad3be9d9151e78e738115fa7725db7ff (diff)
downloadbcm5719-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.cpp4
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) ||
OpenPOWER on IntegriCloud