1# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=X64ALL --check-prefix=X64 2# RUN: llc -mtriple=x86_64-apple-darwin -relocation-model=pic -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=X64ALL --check-prefix=X64_DARWIN_PIC 3# RUN: llc -mtriple=i386-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=X32ALL --check-prefix=X32 4# RUN: llc -mtriple=x86_64-linux-gnux32 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=X32ALL --check-prefix=X32ABI 5 6--- | 7 8 @g_int = global i32 0, align 4 9 10 define void @test_global_ptrv() { 11 entry: 12 store i32* @g_int, i32** undef 13 ret void 14 } 15 16 define i32 @test_global_valv() { 17 entry: 18 %0 = load i32, i32* @g_int, align 4 19 ret i32 %0 20 } 21 22... 23--- 24name: test_global_ptrv 25# CHECK-LABEL: name: test_global_ptrv 26alignment: 4 27legalized: true 28regBankSelected: true 29# X64ALL: registers: 30# X64ALL-NEXT: - { id: 0, class: gr64, preferred-register: '' } 31# X64ALL-NEXT: - { id: 1, class: gr64, preferred-register: '' } 32# 33# X32: registers: 34# X32-NEXT: - { id: 0, class: gr32, preferred-register: '' } 35# X32-NEXT: - { id: 1, class: gr32, preferred-register: '' } 36# 37# X32ABI: registers: 38# X32ABI-NEXT: - { id: 0, class: low32_addr_access, preferred-register: '' } 39# X32ABI-NEXT: - { id: 1, class: gr32, preferred-register: '' } 40registers: 41 - { id: 0, class: gpr, preferred-register: '' } 42 - { id: 1, class: gpr, preferred-register: '' } 43# X64: %0:gr64 = IMPLICIT_DEF 44# X64-NEXT: %1:gr64 = LEA64r $noreg, 1, $noreg, @g_int, $noreg 45# X64-NEXT: MOV64mr %0, 1, $noreg, 0, $noreg, %1 :: (store 8 into `i32** undef`) 46# X64-NEXT: RET 0 47# 48# X64_DARWIN_PIC: %0:gr64 = IMPLICIT_DEF 49# X64_DARWIN_PIC-NEXT: %1:gr64 = LEA64r $rip, 1, $noreg, @g_int, $noreg 50# X64_DARWIN_PIC-NEXT: MOV64mr %0, 1, $noreg, 0, $noreg, %1 :: (store 8 into `i32** undef`) 51# X64_DARWIN_PIC-NEXT: RET 0 52# 53# X32: %0:gr32 = IMPLICIT_DEF 54# X32-NEXT: %1:gr32 = LEA32r $noreg, 1, $noreg, @g_int, $noreg 55# X32-NEXT: MOV32mr %0, 1, $noreg, 0, $noreg, %1 :: (store 8 into `i32** undef`) 56# X32-NEXT: RET 0 57# 58# X32ABI: %0:low32_addr_access = IMPLICIT_DEF 59# X32ABI-NEXT: %1:gr32 = LEA64_32r $noreg, 1, $noreg, @g_int, $noreg 60# X32ABI-NEXT: MOV32mr %0, 1, $noreg, 0, $noreg, %1 :: (store 8 into `i32** undef`) 61# X32ABI-NEXT: RET 0 62body: | 63 bb.1.entry: 64 liveins: $rdi 65 66 %0(p0) = IMPLICIT_DEF 67 %1(p0) = G_GLOBAL_VALUE @g_int 68 G_STORE %1(p0), %0(p0) :: (store 8 into `i32** undef`) 69 RET 0 70 71... 72--- 73name: test_global_valv 74# CHECK-LABEL: name: test_global_valv 75alignment: 4 76legalized: true 77regBankSelected: true 78# X64ALL: registers: 79# X64ALL-NEXT: - { id: 0, class: gr32, preferred-register: '' } 80# X64ALL-NEXT: - { id: 1, class: gr64, preferred-register: '' } 81# 82# X32ALL: registers: 83# X32ALL-NEXT: - { id: 0, class: gr32, preferred-register: '' } 84# X32ALL-NEXT: - { id: 1, class: gr32, preferred-register: '' } 85registers: 86 - { id: 0, class: gpr, preferred-register: '' } 87 - { id: 1, class: gpr, preferred-register: '' } 88# X64: %1:gr64 = LEA64r $noreg, 1, $noreg, @g_int, $noreg 89# X64-NEXT: %0:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load 4 from @g_int) 90# X64-NEXT: $eax = COPY %0 91# X64-NEXT: RET 0, implicit $eax 92# 93# X64_DARWIN_PIC: %1:gr64 = LEA64r $rip, 1, $noreg, @g_int, $noreg 94# X64_DARWIN_PIC-NEXT: %0:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load 4 from @g_int) 95# X64_DARWIN_PIC-NEXT: $eax = COPY %0 96# X64_DARWIN_PIC-NEXT: RET 0, implicit $eax 97# 98# X32: %1:gr32 = LEA32r $noreg, 1, $noreg, @g_int, $noreg 99# X32-NEXT: %0:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load 4 from @g_int) 100# X32-NEXT: $eax = COPY %0 101# X32-NEXT: RET 0, implicit $eax 102# 103# X32ABI: %1:gr32 = LEA64_32r $noreg, 1, $noreg, @g_int, $noreg 104# X32ABI-NEXT: %0:gr32 = MOV32rm %1, 1, $noreg, 0, $noreg :: (load 4 from @g_int) 105# X32ABI-NEXT: $eax = COPY %0 106# X32ABI-NEXT: RET 0, implicit $eax 107body: | 108 bb.1.entry: 109 %1(p0) = G_GLOBAL_VALUE @g_int 110 %0(s32) = G_LOAD %1(p0) :: (load 4 from @g_int) 111 $eax = COPY %0(s32) 112 RET 0, implicit $eax 113 114... 115