Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/emutls-pie.ll
Show All 12 Lines | |||||
define i32 @my_get_xyz() { | define i32 @my_get_xyz() { | ||||
; X32-LABEL: my_get_xyz: | ; X32-LABEL: my_get_xyz: | ||||
; X32: movl my_emutls_v_xyz@GOT(%ebx), %eax | ; X32: movl my_emutls_v_xyz@GOT(%ebx), %eax | ||||
; X32-NEXT: movl %eax, (%esp) | ; X32-NEXT: movl %eax, (%esp) | ||||
; X32-NEXT: calll my_emutls_get_address@PLT | ; X32-NEXT: calll my_emutls_get_address@PLT | ||||
; X32-NEXT: movl (%eax), %eax | ; X32-NEXT: movl (%eax), %eax | ||||
; X32-NEXT: addl $8, %esp | ; X32-NEXT: addl $8, %esp | ||||
; X32-NEXT: : | |||||
; X32-NEXT: .cfi_def_cfa_offset 8 | |||||
; X32-NEXT: popl %ebx | ; X32-NEXT: popl %ebx | ||||
; X32-NEXT: : | |||||
; X32-NEXT: .cfi_def_cfa_offset 4 | |||||
; X32-NEXT: retl | ; X32-NEXT: retl | ||||
; X64-LABEL: my_get_xyz: | ; X64-LABEL: my_get_xyz: | ||||
; X64: movq my_emutls_v_xyz@GOTPCREL(%rip), %rdi | ; X64: movq my_emutls_v_xyz@GOTPCREL(%rip), %rdi | ||||
; X64-NEXT: callq my_emutls_get_address@PLT | ; X64-NEXT: callq my_emutls_get_address@PLT | ||||
; X64-NEXT: movl (%rax), %eax | ; X64-NEXT: movl (%rax), %eax | ||||
; X64-NEXT: popq %rcx | ; X64-NEXT: popq %rcx | ||||
; X64-NEXT: : | |||||
; X64-NEXT: .cfi_def_cfa_offset 8 | |||||
; X64-NEXT: retq | ; X64-NEXT: retq | ||||
entry: | entry: | ||||
%call = call i8* @my_emutls_get_address(i8* bitcast (i8** @my_emutls_v_xyz to i8*)) | %call = call i8* @my_emutls_get_address(i8* bitcast (i8** @my_emutls_v_xyz to i8*)) | ||||
%0 = bitcast i8* %call to i32* | %0 = bitcast i8* %call to i32* | ||||
%1 = load i32, i32* %0, align 4 | %1 = load i32, i32* %0, align 4 | ||||
ret i32 %1 | ret i32 %1 | ||||
} | } | ||||
@i = thread_local global i32 15 | @i = thread_local global i32 15 | ||||
@i2 = external thread_local global i32 | @i2 = external thread_local global i32 | ||||
define i32 @f1() { | define i32 @f1() { | ||||
; X32-LABEL: f1: | ; X32-LABEL: f1: | ||||
; X32: leal __emutls_v.i@GOTOFF(%ebx), %eax | ; X32: leal __emutls_v.i@GOTOFF(%ebx), %eax | ||||
; X32-NEXT: movl %eax, (%esp) | ; X32-NEXT: movl %eax, (%esp) | ||||
; X32-NEXT: calll __emutls_get_address@PLT | ; X32-NEXT: calll __emutls_get_address@PLT | ||||
; X32-NEXT: movl (%eax), %eax | ; X32-NEXT: movl (%eax), %eax | ||||
; X32-NEXT: addl $8, %esp | ; X32-NEXT: addl $8, %esp | ||||
; X32-NEXT: : | |||||
; X32-NEXT: .cfi_def_cfa_offset 8 | |||||
; X32-NEXT: popl %ebx | ; X32-NEXT: popl %ebx | ||||
; X32-NEXT: : | |||||
; X32-NEXT: .cfi_def_cfa_offset 4 | |||||
; X32-NEXT: retl | ; X32-NEXT: retl | ||||
; X64-LABEL: f1: | ; X64-LABEL: f1: | ||||
; X64: leaq __emutls_v.i(%rip), %rdi | ; X64: leaq __emutls_v.i(%rip), %rdi | ||||
; X64-NEXT: callq __emutls_get_address@PLT | ; X64-NEXT: callq __emutls_get_address@PLT | ||||
; X64-NEXT: movl (%rax), %eax | ; X64-NEXT: movl (%rax), %eax | ||||
; X64-NEXT: popq %rcx | ; X64-NEXT: popq %rcx | ||||
; X64-NEXT: : | |||||
; X64-NEXT: .cfi_def_cfa_offset 8 | |||||
; X64-NEXT: retq | ; X64-NEXT: retq | ||||
entry: | entry: | ||||
%tmp1 = load i32, i32* @i | %tmp1 = load i32, i32* @i | ||||
ret i32 %tmp1 | ret i32 %tmp1 | ||||
} | } | ||||
define i32* @f2() { | define i32* @f2() { | ||||
▲ Show 20 Lines • Show All 75 Lines • Show Last 20 Lines |