Nice, thanks Evan! -Chris
On Aug 1, 2007, at 4:45 PM, Evan Cheng wrote: > Author: evancheng > Date: Wed Aug 1 18:45:51 2007 > New Revision: 40701 > > URL: http://llvm.org/viewvc/llvm-project?rev=40701&view=rev > Log: > Mac OS X X86-64 low 4G address not available. > > Modified: > llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp > llvm/trunk/lib/Target/X86/X86InstrInfo.td > llvm/trunk/lib/Target/X86/X86Subtarget.cpp > llvm/trunk/lib/Target/X86/X86Subtarget.h > > Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ > X86ISelDAGToDAG.cpp?rev=40701&r1=40700&r2=40701&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original) > +++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Wed Aug 1 > 18:45:51 2007 > @@ -614,7 +614,8 @@ > bool isStatic = TM.getRelocationModel() == Reloc::Static; > SDOperand N0 = N.getOperand(0); > // Mac OS X X86-64 lower 4G address is not available. > - bool isAbs32 = !is64Bit || (isStatic && !Subtarget- > >isTargetDarwin()); > + bool isAbs32 = !is64Bit || > + (isStatic && Subtarget->hasLow4GUserSpaceAddress()); > if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode> > (N0)) { > GlobalValue *GV = G->getGlobal(); > if (isAbs32 || isRoot) { > > Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ > X86InstrInfo.td?rev=40701&r1=40700&r2=40701&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original) > +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Wed Aug 1 18:45:51 2007 > @@ -162,6 +162,7 @@ > def FPStack : Predicate<"!Subtarget->hasSSE2()">; > def In32BitMode : Predicate<"!Subtarget->is64Bit()">; > def In64BitMode : Predicate<"Subtarget->is64Bit()">; > +def HasLow4G : Predicate<"Subtarget->hasLow4GUserSpaceAddress > ()">; > def SmallCode : Predicate<"TM.getCodeModel() == > CodeModel::Small">; > def NotSmallCode : Predicate<"TM.getCodeModel() != > CodeModel::Small">; > def IsStatic : Predicate<"TM.getRelocationModel() == > Reloc::Static">; > > Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ > X86Subtarget.cpp?rev=40701&r1=40700&r2=40701&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original) > +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Wed Aug 1 18:45:51 > 2007 > @@ -225,6 +225,7 @@ > // FIXME: this is a known good value for Yonah. How about others? > , MinRepStrSizeThreshold(128) > , Is64Bit(is64Bit) > + , HasLow4GUserAddress(true) > , TargetType(isELF) { // Default to ELF unless otherwise specified. > > // Determine default and user specified characteristics > @@ -285,6 +286,9 @@ > } > } > > + if (TargetType == isDarwin && Is64Bit) > + HasLow4GUserAddress = false; > + > if (TargetType == isDarwin || > TargetType == isCygwin || > TargetType == isMingw || > > Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ > X86Subtarget.h?rev=40701&r1=40700&r2=40701&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original) > +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Wed Aug 1 18:45:51 2007 > @@ -46,18 +46,23 @@ > }; > > /// AsmFlavor - Which x86 asm dialect to use. > + /// > AsmWriterFlavorTy AsmFlavor; > > /// PICStyle - Which PIC style to use > + /// > PICStyle::Style PICStyle; > > /// X86SSELevel - MMX, SSE1, SSE2, SSE3, SSSE3, or none supported. > + /// > X86SSEEnum X86SSELevel; > > /// X863DNowLevel - 3DNow or 3DNow Athlon, or none supported. > + /// > X863DNowEnum X863DNowLevel; > > /// HasX86_64 - True if the processor supports X86-64 instructions. > + /// > bool HasX86_64; > > /// stackAlignment - The minimum alignment known to hold of the > stack frame on > @@ -65,6 +70,7 @@ > unsigned stackAlignment; > > /// Min. memset / memcpy size that is turned into rep/movs, rep/ > stos ops. > + /// > unsigned MinRepStrSizeThreshold; > > private: > @@ -72,6 +78,10 @@ > /// pointer size is 64 bit. > bool Is64Bit; > > + /// HasLow4GUserAddress - True if the low 4G user-space address > is available. > + /// > + bool HasLow4GUserAddress; > + > public: > enum { > isELF, isCygwin, isDarwin, isWindows, isMingw > @@ -103,6 +113,10 @@ > > bool is64Bit() const { return Is64Bit; } > > + /// hasLow4GUserSpaceAddress - True if lower 4G user-space > address is > + /// available. > + bool hasLow4GUserSpaceAddress() const { return > HasLow4GUserAddress; } > + > PICStyle::Style getPICStyle() const { return PICStyle; } > void setPICStyle(PICStyle::Style Style) { PICStyle = Style; } > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits