OSDN Git Service

X86 TLS: Implement review feedback.
authorLauro Ramos Venancio <lauro.venancio@gmail.com>
Sat, 21 Apr 2007 20:56:26 +0000 (20:56 +0000)
committerLauro Ramos Venancio <lauro.venancio@gmail.com>
Sat, 21 Apr 2007 20:56:26 +0000 (20:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36318 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SelectionDAGNodes.h
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
lib/Target/X86/X86ISelLowering.cpp

index 77d607a..f80e247 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef LLVM_CODEGEN_SELECTIONDAGNODES_H
 #define LLVM_CODEGEN_SELECTIONDAGNODES_H
 
-#include "llvm/GlobalVariable.h"
 #include "llvm/Value.h"
 #include "llvm/ADT/FoldingSet.h"
 #include "llvm/ADT/GraphTraits.h"
@@ -1166,16 +1165,7 @@ class GlobalAddressSDNode : public SDNode {
 protected:
   friend class SelectionDAG;
   GlobalAddressSDNode(bool isTarget, const GlobalValue *GA, MVT::ValueType VT,
-                      int o = 0)
-    : SDNode(dyn_cast<GlobalVariable>(GA) &&
-             dyn_cast<GlobalVariable>(GA)->isThreadLocal() ?
-             // Thread Local
-             (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
-             // Non Thread Local
-             (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
-             getSDVTList(VT)), Offset(o) {
-    TheGlobal = const_cast<GlobalValue*>(GA);
-  }
+                      int o = 0);
 public:
 
   GlobalValue *getGlobal() const { return TheGlobal; }
index 75fbf8a..05348da 100644 (file)
@@ -13,7 +13,6 @@
 
 #include "llvm/CodeGen/SelectionDAG.h"
 #include "llvm/Constants.h"
-#include "llvm/GlobalValue.h"
 #include "llvm/GlobalVariable.h"
 #include "llvm/Intrinsics.h"
 #include "llvm/Assembly/Writer.h"
@@ -2573,6 +2572,17 @@ HandleSDNode::~HandleSDNode() {
   MorphNodeTo(ISD::HANDLENODE, VTs, 0, 0);  // Drops operand uses.
 }
 
+GlobalAddressSDNode::GlobalAddressSDNode(bool isTarget, const GlobalValue *GA,
+                                         MVT::ValueType VT, int o)
+  : SDNode(isa<GlobalVariable>(GA) &&
+           dyn_cast<GlobalVariable>(GA)->isThreadLocal() ?
+           // Thread Local
+           (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) :
+           // Non Thread Local
+           (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress),
+           getSDVTList(VT)), Offset(o) {
+  TheGlobal = const_cast<GlobalValue*>(GA);
+}
 
 /// Profile - Gather unique data for the node.
 ///
index b37e47c..ec86924 100644 (file)
@@ -3004,8 +3004,9 @@ LowerToTLSExecModel(GlobalAddressSDNode *GA, SelectionDAG &DAG,
 SDOperand
 X86TargetLowering::LowerGlobalTLSAddress(SDOperand Op, SelectionDAG &DAG) {
   // TODO: implement the "local dynamic" model
-  // TODO: implement the "initial exec"model for pic executables 
-  assert(!Subtarget->is64Bit() && "TLS not implemented for X86_64");
+  // TODO: implement the "initial exec"model for pic executables
+  assert(!Subtarget->is64Bit() && Subtarget->isTargetELF() &&
+         "TLS not implemented for non-ELF and 64-bit targets");
   GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
   // If the relocation model is PIC, use the "General Dynamic" TLS Model,
   // otherwise use the "Local Exec"TLS Model