summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2012-11-16 20:14:40 +0000
committerHans Wennborg <hans@hanshq.net>2012-11-16 20:14:40 +0000
commit21863332ca402263c518840742aee2b126d53007 (patch)
tree2a926d1196874c833de59bbb1edcdee70697d28b /include
parent3481efbe83bbd775b609ea02ee426fb956b9c43a (diff)
downloadllvm-21863332ca402263c518840742aee2b126d53007.tar.gz
llvm-21863332ca402263c518840742aee2b126d53007.tar.bz2
llvm-21863332ca402263c518840742aee2b126d53007.tar.xz
Merge r168037 from trunk:
Make GlobalOpt be conservative with TLS variables (PR14309) For global variables that get the same value stored into them everywhere, GlobalOpt will replace them with a constant. The problem is that a thread-local GlobalVariable looks like one value (the address of the TLS var), but is different between threads. This patch introduces Constant::isThreadDependent() which returns true for thread-local variables and constants which depend on them (e.g. a GEP into a thread-local array), and teaches GlobalOpt not to track such values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_32@168192 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Constant.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h
index 7fecf4c7b4..0ddd1db6c0 100644
--- a/include/llvm/Constant.h
+++ b/include/llvm/Constant.h
@@ -65,6 +65,9 @@ public:
/// true for things like constant expressions that could divide by zero.
bool canTrap() const;
+ /// isThreadDependent - Return true if the value can vary between threads.
+ bool isThreadDependent() const;
+
/// isConstantUsed - Return true if the constant has users other than constant
/// exprs and other dangling things.
bool isConstantUsed() const;