• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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