This does not deserve special handling. The code should be added to Clang
instead if deemed useful. With this simplification, we can additionally delete
the PIC extern_weak special case.
if (TT.isOSBinFormatCOFF() || TT.isOSWindows())
return true;
- // Most PIC code sequences that assume that a symbol is local cannot
- // produce a 0 if it turns out the symbol is undefined. While this
- // is ABI and relocation depended, it seems worth it to handle it
- // here.
- if (isPositionIndependent() && GV->hasExternalWeakLinkage())
- return false;
-
- if (!GV->hasDefaultVisibility())
- return true;
-
if (TT.isOSBinFormatMachO()) {
if (RM == Reloc::Static)
return true;
entry:
; CHECK: LCPI0_0:
; CHECK-NEXT: .long _x
+;; .long _y can be used if @y is dso_local.
; CHECK: LCPI0_1:
-; CHECK-NEXT: .long _y
+; CHECK-NEXT: .long L_y$non_lazy_ptr
%0 = load i32, i32* @x, align 4 ; <i32> [#uses=1]
%1 = load i32, i32* @y, align 4 ; <i32> [#uses=1]
define i32 @t() nounwind readonly {
entry:
+;; movl _y, %eax can be used if @y is dso_local.
; X32: _t:
-; X32: movl _y, %eax
+; X32: movl L_y$non_lazy_ptr, %eax
+; X32-NEXT: movl (%eax), %eax
; X64: _t:
; X64: movq _y@GOTPCREL(%rip), %rax