From 2c5c111b6c144b05718404c85b9dfcc76b1619e7 Mon Sep 17 00:00:00 2001 From: Lauro Ramos Venancio Date: Sat, 21 Apr 2007 20:56:26 +0000 Subject: [PATCH] X86 TLS: Implement review feedback. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36318 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/SelectionDAGNodes.h | 12 +----------- lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 12 +++++++++++- lib/Target/X86/X86ISelLowering.cpp | 5 +++-- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index 77d607a2cb6..f80e24771a3 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -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(GA) && - dyn_cast(GA)->isThreadLocal() ? - // Thread Local - (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) : - // Non Thread Local - (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress), - getSDVTList(VT)), Offset(o) { - TheGlobal = const_cast(GA); - } + int o = 0); public: GlobalValue *getGlobal() const { return TheGlobal; } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 75fbf8afb9c..05348da6e87 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -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(GA) && + dyn_cast(GA)->isThreadLocal() ? + // Thread Local + (isTarget ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress) : + // Non Thread Local + (isTarget ? ISD::TargetGlobalAddress : ISD::GlobalAddress), + getSDVTList(VT)), Offset(o) { + TheGlobal = const_cast(GA); +} /// Profile - Gather unique data for the node. /// diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index b37e47cb03e..ec86924c662 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -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(Op); // If the relocation model is PIC, use the "General Dynamic" TLS Model, // otherwise use the "Local Exec"TLS Model