[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / ARM / GlobalISel / thumb-select-load-store.mir
blob132424ae7e7f3d84f7e19965ede9a31b7e5e1a97
1 # RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
2 --- |
3   define void @test_s1() { ret void }
4   define void @test_s8() { ret void }
5   define void @test_s16() { ret void }
6   define void @test_s32() { ret void }
8   define void @test_gep() { ret void }
10   define void @test_load_from_stack() { ret void }
11 ...
12 ---
13 name:            test_s1
14 # CHECK-LABEL: name: test_s1
15 legalized:       true
16 regBankSelected: true
17 selected:        false
18 # CHECK: selected: true
19 registers:
20   - { id: 0, class: gprb }
21   - { id: 1, class: gprb }
22 body:             |
23   bb.0:
24     liveins: $r0
26     %0(p0) = COPY $r0
27     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
29     %1(s1) = G_LOAD %0(p0) :: (load 1)
30     ; CHECK: %[[V8:[0-9]+]]:rgpr = t2LDRBi12 %[[P]], 0, 14, $noreg :: (load 1)
32     G_STORE %1(s1), %0(p0) :: (store 1)
33     ; CHECK: %[[V1:[0-9]+]]:rgpr = t2ANDri %[[V8]], 1, 14, $noreg
34     ; CHECK: t2STRBi12 %[[V1]], %[[P]], 0, 14, $noreg :: (store 1)
36     BX_RET 14, $noreg
37     ; CHECK: BX_RET 14, $noreg
38 ...
39 ---
40 name:            test_s8
41 # CHECK-LABEL: name: test_s8
42 legalized:       true
43 regBankSelected: true
44 selected:        false
45 # CHECK: selected: true
46 registers:
47   - { id: 0, class: gprb }
48   - { id: 1, class: gprb }
49 body:             |
50   bb.0:
51     liveins: $r0
53     %0(p0) = COPY $r0
54     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
56     %1(s8) = G_LOAD %0(p0) :: (load 1)
57     ; CHECK: %[[V:[0-9]+]]:rgpr = t2LDRBi12 %[[P]], 0, 14, $noreg :: (load 1)
59     G_STORE %1(s8), %0(p0) :: (store 1)
60     ; CHECK: t2STRBi12 %[[V]], %[[P]], 0, 14, $noreg :: (store 1)
62     BX_RET 14, $noreg
63     ; CHECK: BX_RET 14, $noreg
64 ...
65 ---
66 name:            test_s16
67 # CHECK-LABEL: name: test_s16
68 legalized:       true
69 regBankSelected: true
70 selected:        false
71 # CHECK: selected: true
72 registers:
73   - { id: 0, class: gprb }
74   - { id: 1, class: gprb }
75 body:             |
76   bb.0:
77     liveins: $r0
79     %0(p0) = COPY $r0
80     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
82     %1(s16) = G_LOAD %0(p0) :: (load 2)
83     ; CHECK: %[[V:[0-9]+]]:rgpr = t2LDRHi12 %[[P]], 0, 14, $noreg :: (load 2)
85     G_STORE %1(s16), %0(p0) :: (store 2)
86     ; CHECK: t2STRHi12 %[[V]], %[[P]], 0, 14, $noreg :: (store 2)
88     BX_RET 14, $noreg
89     ; CHECK: BX_RET 14, $noreg
90 ...
91 ---
92 name:            test_s32
93 # CHECK-LABEL: name: test_s32
94 legalized:       true
95 regBankSelected: true
96 selected:        false
97 # CHECK: selected: true
98 registers:
99   - { id: 0, class: gprb }
100   - { id: 1, class: gprb }
101 body:             |
102   bb.0:
103     liveins: $r0
105     %0(p0) = COPY $r0
106     ; CHECK: %[[P:[0-9]+]]:gpr = COPY $r0
108     %1(s32) = G_LOAD %0(p0) :: (load 4)
109     ; CHECK: %[[V:[0-9]+]]:gpr = t2LDRi12 %[[P]], 0, 14, $noreg :: (load 4)
111     G_STORE %1(s32), %0(p0) :: (store 4)
112     ; CHECK: t2STRi12 %[[V]], %[[P]], 0, 14, $noreg :: (store 4)
114     BX_RET 14, $noreg
115     ; CHECK: BX_RET 14, $noreg
118 name:            test_gep
119 # CHECK-LABEL: name: test_gep
120 legalized:       true
121 regBankSelected: true
122 selected:        false
123 # CHECK: selected: true
124 registers:
125   - { id: 0, class: gprb }
126   - { id: 1, class: gprb }
127   - { id: 2, class: gprb }
128 body:             |
129   bb.0:
130     liveins: $r0, $r1
132     %0(p0) = COPY $r0
133     ; CHECK: [[PTR:%[0-9]+]]:gprnopc = COPY $r0
135     %1(s32) = COPY $r1
136     ; CHECK: [[OFF:%[0-9]+]]:rgpr = COPY $r1
138     %2(p0) = G_GEP %0, %1(s32)
139     ; CHECK: [[GEP:%[0-9]+]]:gprnopc = t2ADDrr [[PTR]], [[OFF]], 14, $noreg, $noreg
141     $r0 = COPY %2(p0)
142     ; CHECK: $r0 = COPY [[GEP]]
144     BX_RET 14, $noreg, implicit $r0
145     ; CHECK: BX_RET 14, $noreg, implicit $r0
148 name:            test_load_from_stack
149 # CHECK-LABEL: name: test_load_from_stack
150 legalized:       true
151 regBankSelected: true
152 selected:        false
153 # CHECK: selected: true
154 registers:
155   - { id: 0, class: gprb }
156   - { id: 1, class: gprb }
157   - { id: 2, class: gprb }
158   - { id: 3, class: gprb }
159   - { id: 4, class: gprb }
160 fixedStack:
161   - { id: 0, offset: 0, size: 1, alignment: 4, isImmutable: true, isAliased: false }
162   - { id: 1, offset: 4, size: 4, alignment: 4, isImmutable: true, isAliased: false }
163   - { id: 2, offset: 8, size: 4, alignment: 4, isImmutable: true, isAliased: false }
164 # CHECK-DAG: id: [[FI1:[0-9]+]], type: default, offset: 0, size: 1
165 # CHECK-DAG: id: [[FI32:[0-9]+]], type: default, offset: 8
166 body:             |
167   bb.0:
168     liveins: $r0, $r1, $r2, $r3
170     %0(p0) = G_FRAME_INDEX %fixed-stack.2
171     ; CHECK: [[FI32VREG:%[0-9]+]]:gprnopc = t2ADDri %fixed-stack.[[FI32]], 0, 14, $noreg, $noreg
173     %1(s32) = G_LOAD %0(p0) :: (load 4)
174     ; CHECK: [[LD32VREG:%[0-9]+]]:gpr = t2LDRi12 [[FI32VREG]], 0, 14, $noreg
176     $r0 = COPY %1
177     ; CHECK: $r0 = COPY [[LD32VREG]]
179     %2(p0) = G_FRAME_INDEX %fixed-stack.0
180     ; CHECK: [[FI1VREG:%[0-9]+]]:gprnopc = t2ADDri %fixed-stack.[[FI1]], 0, 14, $noreg, $noreg
182     %3(s1) = G_LOAD %2(p0) :: (load 1)
183     ; CHECK: [[LD1VREG:%[0-9]+]]:gprnopc = t2LDRBi12 [[FI1VREG]], 0, 14, $noreg
185     %4(s32) = G_ANYEXT %3(s1)
186     ; CHECK: [[RES:%[0-9]+]]:gpr = COPY [[LD1VREG]]
188     $r0 = COPY %4
189     ; CHECK: $r0 = COPY [[RES]]
191     BX_RET 14, $noreg
192     ; CHECK: BX_RET 14, $noreg