From 1839858983dcbaf1808a6a37f5cd64d92981f27e Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Thu, 15 Nov 2012 11:40:00 +0000 Subject: 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/trunk@168037 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Constant.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index bbd1b1a6e2..b3cb449da1 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; -- cgit v1.2.3