[llvm] r270095 - Remember the relocation model. NFC.
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 14:18:27 PDT 2016
Hi Rafael,
If we want to remember something, I would rather keep a reference on the TargetMachine than copying the RelocModel. (We could build a getRelocModel on top of that reference).
The reason why I do not like the RelocModel being copied around is that it is not obvious anymore that the relocation model must be the same for all the sub target involved in a Module.
Cheers,
-Quentin
> On May 19, 2016, at 11:49 AM, Rafael Espindola via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: rafael
> Date: Thu May 19 13:49:29 2016
> New Revision: 270095
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270095&view=rev
> Log:
> Remember the relocation model. NFC.
>
> This avoids passing a TargetMachine in a few places.
>
> Modified:
> llvm/trunk/lib/Target/X86/X86FastISel.cpp
> llvm/trunk/lib/Target/X86/X86ISelLowering.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/X86FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=270095&r1=270094&r2=270095&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Thu May 19 13:49:29 2016
> @@ -3183,7 +3183,7 @@ bool X86FastISel::fastLowerCall(CallLowe
> unsigned CallOpc = Is64Bit ? X86::CALL64pcrel32 : X86::CALLpcrel32;
>
> // See if we need any target-specific flags on the GV operand.
> - unsigned char OpFlags = Subtarget->classifyGlobalFunctionReference(GV, TM);
> + unsigned char OpFlags = Subtarget->classifyGlobalFunctionReference(GV);
> // Ignore NonLazyBind attribute in FastISel
> if (OpFlags == X86II::MO_GOTPCREL)
> OpFlags = 0;
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=270095&r1=270094&r2=270095&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu May 19 13:49:29 2016
> @@ -3262,8 +3262,7 @@ X86TargetLowering::LowerCall(TargetLower
> // non-JIT mode.
> const GlobalValue *GV = G->getGlobal();
> if (!GV->hasDLLImportStorageClass()) {
> - unsigned char OpFlags =
> - Subtarget.classifyGlobalFunctionReference(GV, DAG.getTarget());
> + unsigned char OpFlags = Subtarget.classifyGlobalFunctionReference(GV);
>
> Callee = DAG.getTargetGlobalAddress(
> GV, dl, getPointerTy(DAG.getDataLayout()), G->getOffset(), OpFlags);
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=270095&r1=270094&r2=270095&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Thu May 19 13:49:29 2016
> @@ -886,7 +886,7 @@ def OptForSize : Predicate<"OptForSize
> def OptForMinSize : Predicate<"OptForMinSize">;
> def OptForSpeed : Predicate<"!OptForSize">;
> def FastBTMem : Predicate<"!Subtarget->isBTMemSlow()">;
> -def CallImmAddr : Predicate<"Subtarget->isLegalToCallImmediateAddr(TM)">;
> +def CallImmAddr : Predicate<"Subtarget->isLegalToCallImmediateAddr()">;
> def FavorMemIndirectCall : Predicate<"!Subtarget->callRegIndirect()">;
> def NotSlowIncDec : Predicate<"!Subtarget->slowIncDec()">;
> def HasFastMem32 : Predicate<"!Subtarget->isUnalignedMem32Slow()">;
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=270095&r1=270094&r2=270095&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Thu May 19 13:49:29 2016
> @@ -88,7 +88,7 @@ classifyGlobalReference(const GlobalValu
> // overridden.
>
> if (!GV->hasLocalLinkage() && GV->hasDefaultVisibility() &&
> - !isGlobalDefinedInPIE(GV, TM))
> + !isGlobalDefinedInPIE(GV))
> return X86II::MO_GOTPCREL;
> }
>
> @@ -100,7 +100,7 @@ classifyGlobalReference(const GlobalValu
> // PIE as the definition of the global in an executable is not overridden.
>
> if (GV->hasLocalLinkage() || GV->hasHiddenVisibility() ||
> - isGlobalDefinedInPIE(GV, TM))
> + isGlobalDefinedInPIE(GV))
> return X86II::MO_GOTOFF;
> return X86II::MO_GOT;
> }
> @@ -151,15 +151,14 @@ classifyGlobalReference(const GlobalValu
> return X86II::MO_NO_FLAG;
> }
>
> -unsigned char X86Subtarget::classifyGlobalFunctionReference(
> - const GlobalValue *GV, const TargetMachine &TM) const {
> +unsigned char
> +X86Subtarget::classifyGlobalFunctionReference(const GlobalValue *GV) const {
> // On ELF targets, in both X86-64 and X86-32 mode, direct calls to
> // external symbols most go through the PLT in PIC mode. If the symbol
> // has hidden or protected visibility, or if it is static or local, then
> // we don't need to use the PLT - we can directly call it.
> // In PIE mode, calls to global functions don't need to go through PLT
> - if (isTargetELF() && TM.getRelocationModel() == Reloc::PIC_ &&
> - !isGlobalDefinedInPIE(GV, TM) &&
> + if (isTargetELF() && RM == Reloc::PIC_ && !isGlobalDefinedInPIE(GV) &&
> GV->hasDefaultVisibility() && !GV->hasLocalLinkage()) {
> return X86II::MO_PLT;
> } else if (isPICStyleStubAny() && !GV->isStrongDefinitionForLinker() &&
> @@ -200,13 +199,13 @@ bool X86Subtarget::hasSinCos() const {
> }
>
> /// Return true if the subtarget allows calls to immediate address.
> -bool X86Subtarget::isLegalToCallImmediateAddr(const TargetMachine &TM) const {
> +bool X86Subtarget::isLegalToCallImmediateAddr() const {
> // FIXME: I386 PE/COFF supports PC relative calls using IMAGE_REL_I386_REL32
> // but WinCOFFObjectWriter::RecordRelocation cannot emit them. Once it does,
> // the following check for Win32 should be removed.
> if (In64BitMode || isTargetWin32())
> return false;
> - return isTargetELF() || TM.getRelocationModel() == Reloc::Static;
> + return isTargetELF() || RM == Reloc::Static;
> }
>
> void X86Subtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
> @@ -347,7 +346,7 @@ X86Subtarget::X86Subtarget(const Triple
> const std::string &FS, const X86TargetMachine &TM,
> unsigned StackAlignOverride)
> : X86GenSubtargetInfo(TT, CPU, FS), X86ProcFamily(Others),
> - PICStyle(PICStyles::None), TargetTriple(TT),
> + PICStyle(PICStyles::None), RM(TM.getRelocationModel()), TargetTriple(TT),
> StackAlignOverride(StackAlignOverride),
> In64BitMode(TargetTriple.getArch() == Triple::x86_64),
> In32BitMode(TargetTriple.getArch() == Triple::x86 &&
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=270095&r1=270094&r2=270095&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Thu May 19 13:49:29 2016
> @@ -64,6 +64,8 @@ protected:
> /// Which PIC style to use
> PICStyles::Style PICStyle;
>
> + Reloc::Model RM;
> +
> /// SSE1, SSE2, SSE3, SSSE3, SSE41, SSE42, or none supported.
> X86SSEEnum X86SSELevel;
>
> @@ -556,8 +558,7 @@ public:
>
> /// Determine if this global is defined in a Position Independent
> /// Executable (PIE) where its definition cannot be interposed.
> - bool isGlobalDefinedInPIE(const GlobalValue *GV,
> - const TargetMachine &TM) const {
> + bool isGlobalDefinedInPIE(const GlobalValue *GV) const {
> return GV->getParent()->getPIELevel() != PIELevel::Default &&
> !GV->isDeclarationForLinker();
> }
> @@ -568,15 +569,14 @@ public:
> const TargetMachine &TM)const;
>
> /// Classify a global function reference for the current subtarget.
> - unsigned char classifyGlobalFunctionReference(const GlobalValue *GV,
> - const TargetMachine &TM) const;
> + unsigned char classifyGlobalFunctionReference(const GlobalValue *GV) const;
>
> /// Classify a blockaddress reference for the current subtarget according to
> /// how we should reference it in a non-pcrel context.
> unsigned char classifyBlockAddressReference() const;
>
> /// Return true if the subtarget allows calls to immediate address.
> - bool isLegalToCallImmediateAddr(const TargetMachine &TM) const;
> + bool isLegalToCallImmediateAddr() const;
>
> /// This function returns the name of a function which has an interface
> /// like the non-standard bzero function, if such a function exists on
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list