• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3--- |
4  define void @test_s1() { ret void }
5  define void @test_s8() { ret void }
6  define void @test_s16() { ret void }
7  define void @test_s32() { ret void }
8
9  define void @test_gep() { ret void }
10
11  define void @test_load_from_stack() { ret void }
12...
13---
14name:            test_s1
15legalized:       true
16regBankSelected: true
17selected:        false
18registers:
19  - { id: 0, class: gprb }
20  - { id: 1, class: gprb }
21body:             |
22  bb.0:
23    liveins: $r0
24
25    ; CHECK-LABEL: name: test_s1
26    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
27    ; CHECK: [[t2LDRBi12_:%[0-9]+]]:rgpr = t2LDRBi12 [[COPY]], 0, 14 /* CC::al */, $noreg :: (load 1)
28    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[t2LDRBi12_]], 1, 14 /* CC::al */, $noreg, $noreg
29    ; CHECK: t2STRBi12 [[t2ANDri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store 1)
30    ; CHECK: BX_RET 14 /* CC::al */, $noreg
31    %0(p0) = COPY $r0
32
33    %1(s1) = G_LOAD %0(p0) :: (load 1)
34
35    G_STORE %1(s1), %0(p0) :: (store 1)
36
37    BX_RET 14, $noreg
38...
39---
40name:            test_s8
41legalized:       true
42regBankSelected: true
43selected:        false
44registers:
45  - { id: 0, class: gprb }
46  - { id: 1, class: gprb }
47body:             |
48  bb.0:
49    liveins: $r0
50
51    ; CHECK-LABEL: name: test_s8
52    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
53    ; CHECK: [[t2LDRBi12_:%[0-9]+]]:rgpr = t2LDRBi12 [[COPY]], 0, 14 /* CC::al */, $noreg :: (load 1)
54    ; CHECK: t2STRBi12 [[t2LDRBi12_]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store 1)
55    ; CHECK: BX_RET 14 /* CC::al */, $noreg
56    %0(p0) = COPY $r0
57
58    %1(s8) = G_LOAD %0(p0) :: (load 1)
59
60    G_STORE %1(s8), %0(p0) :: (store 1)
61
62    BX_RET 14, $noreg
63...
64---
65name:            test_s16
66legalized:       true
67regBankSelected: true
68selected:        false
69registers:
70  - { id: 0, class: gprb }
71  - { id: 1, class: gprb }
72body:             |
73  bb.0:
74    liveins: $r0
75
76    ; CHECK-LABEL: name: test_s16
77    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
78    ; CHECK: [[t2LDRHi12_:%[0-9]+]]:rgpr = t2LDRHi12 [[COPY]], 0, 14 /* CC::al */, $noreg :: (load 2)
79    ; CHECK: t2STRHi12 [[t2LDRHi12_]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store 2)
80    ; CHECK: BX_RET 14 /* CC::al */, $noreg
81    %0(p0) = COPY $r0
82
83    %1(s16) = G_LOAD %0(p0) :: (load 2)
84
85    G_STORE %1(s16), %0(p0) :: (store 2)
86
87    BX_RET 14, $noreg
88...
89---
90name:            test_s32
91legalized:       true
92regBankSelected: true
93selected:        false
94registers:
95  - { id: 0, class: gprb }
96  - { id: 1, class: gprb }
97body:             |
98  bb.0:
99    liveins: $r0
100
101    ; CHECK-LABEL: name: test_s32
102    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
103    ; CHECK: [[t2LDRi12_:%[0-9]+]]:gpr = t2LDRi12 [[COPY]], 0, 14 /* CC::al */, $noreg :: (load 4)
104    ; CHECK: t2STRi12 [[t2LDRi12_]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store 4)
105    ; CHECK: BX_RET 14 /* CC::al */, $noreg
106    %0(p0) = COPY $r0
107
108    %1(s32) = G_LOAD %0(p0) :: (load 4)
109
110    G_STORE %1(s32), %0(p0) :: (store 4)
111
112    BX_RET 14, $noreg
113...
114---
115name:            test_gep
116legalized:       true
117regBankSelected: true
118selected:        false
119registers:
120  - { id: 0, class: gprb }
121  - { id: 1, class: gprb }
122  - { id: 2, class: gprb }
123body:             |
124  bb.0:
125    liveins: $r0, $r1
126
127    ; CHECK-LABEL: name: test_gep
128    ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0
129    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1
130    ; CHECK: [[t2ADDrr:%[0-9]+]]:gprnopc = t2ADDrr [[COPY]], [[COPY1]], 14 /* CC::al */, $noreg, $noreg
131    ; CHECK: $r0 = COPY [[t2ADDrr]]
132    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
133    %0(p0) = COPY $r0
134
135    %1(s32) = COPY $r1
136
137    %2(p0) = G_PTR_ADD %0, %1(s32)
138
139    $r0 = COPY %2(p0)
140
141    BX_RET 14, $noreg, implicit $r0
142...
143---
144name:            test_load_from_stack
145legalized:       true
146regBankSelected: true
147selected:        false
148registers:
149  - { id: 0, class: gprb }
150  - { id: 1, class: gprb }
151  - { id: 2, class: gprb }
152  - { id: 3, class: gprb }
153  - { id: 4, class: gprb }
154fixedStack:
155  - { id: 0, offset: 0, size: 1, alignment: 4, isImmutable: true, isAliased: false }
156  - { id: 1, offset: 4, size: 4, alignment: 4, isImmutable: true, isAliased: false }
157  - { id: 2, offset: 8, size: 4, alignment: 4, isImmutable: true, isAliased: false }
158body:             |
159  bb.0:
160    liveins: $r0, $r1, $r2, $r3
161
162    ; CHECK-LABEL: name: test_load_from_stack
163    ; CHECK: [[t2ADDri:%[0-9]+]]:rgpr = t2ADDri %fixed-stack.0, 0, 14 /* CC::al */, $noreg, $noreg
164    ; CHECK: [[t2LDRi12_:%[0-9]+]]:gpr = t2LDRi12 [[t2ADDri]], 0, 14 /* CC::al */, $noreg :: (load 4)
165    ; CHECK: $r0 = COPY [[t2LDRi12_]]
166    ; CHECK: [[t2ADDri1:%[0-9]+]]:rgpr = t2ADDri %fixed-stack.2, 0, 14 /* CC::al */, $noreg, $noreg
167    ; CHECK: [[t2LDRBi12_:%[0-9]+]]:gprnopc = t2LDRBi12 [[t2ADDri1]], 0, 14 /* CC::al */, $noreg :: (load 1)
168    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY [[t2LDRBi12_]]
169    ; CHECK: $r0 = COPY [[COPY]]
170    ; CHECK: BX_RET 14 /* CC::al */, $noreg
171    %0(p0) = G_FRAME_INDEX %fixed-stack.2
172
173    %1(s32) = G_LOAD %0(p0) :: (load 4)
174
175    $r0 = COPY %1
176
177    %2(p0) = G_FRAME_INDEX %fixed-stack.0
178
179    %3(s1) = G_LOAD %2(p0) :: (load 1)
180
181    %4(s32) = G_ANYEXT %3(s1)
182
183    $r0 = COPY %4
184
185    BX_RET 14, $noreg
186...
187