// If the symbol is defined, it cannot be preempted.
if (!GV->isDeclarationForLinker())
return true;
-
- // A symbol marked nonlazybind should not be accessed with a plt. If the
- // symbol turns out to be external, the linker will convert a direct
- // access to an access via the plt, so don't assume it is local.
- const Function *F = dyn_cast<Function>(GV);
- if (F && F->hasFnAttribute(Attribute::NonLazyBind))
- return false;
- Triple::ArchType Arch = TT.getArch();
-
- // PowerPC64 prefers TOC indirection to avoid copy relocations.
- if (TT.isPPC64())
- return false;
-
- // dso_local is traditionally implied for Reloc::Static. Eventually we shall
- // drop the if block entirely and respect dso_local/dso_preemptable
- // specifiers set by the frontend.
- if (RM == Reloc::Static) {
- // TODO Remove the special case for x86-32.
- if (Arch == Triple::x86 && !F && !GV->isThreadLocal())
- return true;
- }
} else if (TT.isOSBinFormatELF()) {
// If dso_local allows AsmPrinter::getSymbolPreferLocal to use a local
// alias, set the flag. We cannot set dso_local for other global values,
;
; LINUX-32-STATIC-LABEL: qux01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $dst+64, ptr
+; LINUX-32-STATIC-NEXT: leal dst+64, %eax
+; LINUX-32-STATIC-NEXT: movl %eax, ptr
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: qux01:
;
; LINUX-32-STATIC-LABEL: qxx01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $xdst+64, ptr
+; LINUX-32-STATIC-NEXT: leal xdst+64, %eax
+; LINUX-32-STATIC-NEXT: movl %eax, ptr
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: qxx01:
;
; LINUX-32-STATIC-LABEL: moo01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $dst+262144, ptr
+; LINUX-32-STATIC-NEXT: leal dst+262144, %eax
+; LINUX-32-STATIC-NEXT: movl %eax, ptr
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: moo01:
;
; LINUX-32-STATIC-LABEL: bat00:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $src+64, %eax
+; LINUX-32-STATIC-NEXT: leal src+64, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bat00:
;
; LINUX-32-STATIC-LABEL: bxt00:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $xsrc+64, %eax
+; LINUX-32-STATIC-NEXT: leal xsrc+64, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bxt00:
;
; LINUX-32-STATIC-LABEL: bat01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $dst+64, %eax
+; LINUX-32-STATIC-NEXT: leal dst+64, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bat01:
;
; LINUX-32-STATIC-LABEL: bxt01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $xdst+64, %eax
+; LINUX-32-STATIC-NEXT: leal xdst+64, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bxt01:
;
; LINUX-32-STATIC-LABEL: bam00:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $src+262144, %eax
+; LINUX-32-STATIC-NEXT: leal src+262144, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bam00:
;
; LINUX-32-STATIC-LABEL: bam01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $dst+262144, %eax
+; LINUX-32-STATIC-NEXT: leal dst+262144, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bam01:
;
; LINUX-32-STATIC-LABEL: bxm01:
; LINUX-32-STATIC: # %bb.0: # %entry
-; LINUX-32-STATIC-NEXT: movl $xdst+262144, %eax
+; LINUX-32-STATIC-NEXT: leal xdst+262144, %eax
; LINUX-32-STATIC-NEXT: retl
;
; LINUX-32-PIC-LABEL: bxm01: