Skip to content

Commit 46788a2

Browse files
committed
[X86][AsmPrinter] PrintSymbolOperand: prefer to lower ELF MO_GlobalAddress to .Lfoo$local
1 parent c1943b4 commit 46788a2

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

llvm/lib/Target/X86/X86AsmPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void X86AsmPrinter::PrintSymbolOperand(const MachineOperand &MO,
124124
MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE)
125125
GVSym = getSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
126126
else
127-
GVSym = getSymbol(GV);
127+
GVSym = getSymbolPreferLocal(*GV);
128128

129129
// Handle dllimport linkage.
130130
if (MO.getTargetFlags() == X86II::MO_DLLIMPORT)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
; RUN: llc -mtriple=x86_64 -relocation-model=pic < %s | FileCheck %s
2+
3+
;; Test that we use the local alias for dso_local globals in inline assembly.
4+
5+
@mxcsr0 = dso_local global i32 0
6+
@mxcsr1 = dso_preemptable global i32 1
7+
8+
define <2 x double> @foo(<2 x double> %a, <2 x double> %b) {
9+
; CHECK-LABEL: foo:
10+
; CHECK: movq mxcsr1@GOTPCREL(%rip), %rax
11+
; CHECK: #APP
12+
; CHECK-NEXT: ldmxcsr .Lmxcsr0$local(%rip)
13+
; CHECK-NEXT: addpd %xmm1, %xmm0
14+
; CHECK-NEXT: ldmxcsr (%rax)
15+
; CHECK-NEXT: #NO_APP
16+
entry:
17+
%0 = call <2 x double> asm sideeffect "ldmxcsr $2; addpd $1, $0; ldmxcsr $3",
18+
"=x,x,*m,*m,0,~{dirflag},~{fpsr},~{flags}"(
19+
<2 x double> %b, i32* nonnull @mxcsr0, i32* nonnull @mxcsr1, <2 x double> %a)
20+
ret <2 x double> %0
21+
}

0 commit comments

Comments
 (0)