[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / GlobalISel / select-add.mir
blobb4166a89e0aba506fd8927158b6e3d2b90aea6df
1 # RUN: llc -mtriple=x86_64-linux-gnu                                  -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=NO_AVX512VL --check-prefix=NO_AVX512F --check-prefix=SSE
2 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx                      -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=NO_AVX512VL --check-prefix=NO_AVX512F --check-prefix=AVX
3 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f                  -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=NO_AVX512VL --check-prefix=AVX512ALL --check-prefix=AVX512F
4 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f -mattr=+avx512vl -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=AVX512ALL --check-prefix=AVX512VL
6 --- |
7   define i64 @test_add_i64(i64 %arg1, i64 %arg2) {
8     %ret = add i64 %arg1, %arg2
9     ret i64 %ret
10   }
12   define i32 @test_add_i32(i32 %arg1, i32 %arg2) {
13     %ret = add i32 %arg1, %arg2
14     ret i32 %ret
15   }
17   define i16 @test_add_i16(i16 %arg1, i16 %arg2) {
18     %ret = add i16 %arg1, %arg2
19     ret i16 %ret
20   }
22   define i8 @test_add_i8(i8 %arg1, i8 %arg2) {
23     %ret = add i8 %arg1, %arg2
24     ret i8 %ret
25   }
27   define <4 x i32> @test_add_v4i32(<4 x i32> %arg1, <4 x i32> %arg2) {
28     %ret = add <4 x i32> %arg1, %arg2
29     ret <4 x i32> %ret
30   }
32   define <4 x float>  @test_add_v4f32(<4 x float> %arg1, <4 x float>  %arg2) {
33     %ret = fadd <4 x float>  %arg1, %arg2
34     ret <4 x float>  %ret
35   }
36 ...
38 ---
39 name:            test_add_i64
40 # ALL-LABEL: name:            test_add_i64
41 legalized:       true
42 regBankSelected: true
43 registers:
44   - { id: 0, class: gpr }
45   - { id: 1, class: gpr }
46   - { id: 2, class: gpr }
47 # ALL:      %0:gr64 = COPY $rdi
48 # ALL-NEXT: %1:gr64 = COPY $rsi
49 # ALL-NEXT: %2:gr64 = ADD64rr %0, %1
50 body:             |
51   bb.1 (%ir-block.0):
52     liveins: $edi, $esi
54     %0(s64) = COPY $rdi
55     %1(s64) = COPY $rsi
56     %2(s64) = G_ADD %0, %1
57     $rax = COPY %2(s64)
59 ...
61 ---
62 name:            test_add_i32
63 # ALL-LABEL: name:            test_add_i32
64 legalized:       true
65 regBankSelected: true
66 registers:
67   - { id: 0, class: gpr }
68   - { id: 1, class: gpr }
69   - { id: 2, class: gpr }
70 # ALL:      %0:gr32 = COPY $edi
71 # ALL-NEXT: %1:gr32 = COPY $esi
72 # ALL-NEXT: %2:gr32 = ADD32rr %0, %1
73 body:             |
74   bb.1 (%ir-block.0):
75     liveins: $edi, $esi
77     %0(s32) = COPY $edi
78     %1(s32) = COPY $esi
79     %2(s32) = G_ADD %0, %1
80     $eax = COPY %2(s32)
82 ...
83 ---
84 name:            test_add_i16
85 # ALL-LABEL: name:            test_add_i16
86 alignment:       4
87 legalized:       true
88 regBankSelected: true
89 selected:        false
90 registers:
91   - { id: 0, class: gpr }
92   - { id: 1, class: gpr }
93   - { id: 2, class: gpr }
94 # ALL: %0:gr16 = COPY $di
95 # ALL: %1:gr16 = COPY $si
96 # ALL: %2:gr16 = ADD16rr %0, %1, implicit-def $eflags
97 body:             |
98   bb.1 (%ir-block.0):
99     liveins: $edi, $esi
101     %0(s16) = COPY $di
102     %1(s16) = COPY $si
103     %2(s16) = G_ADD %0, %1
104     $ax = COPY %2(s16)
105     RET 0, implicit $ax
109 name:            test_add_i8
110 # ALL-LABEL: name:            test_add_i8
111 alignment:       4
112 legalized:       true
113 regBankSelected: true
114 selected:        false
115 registers:
116   - { id: 0, class: gpr }
117   - { id: 1, class: gpr }
118   - { id: 2, class: gpr }
119 # ALL: %0:gr8 = COPY $dil
120 # ALL: %1:gr8 = COPY $sil
121 # ALL: %2:gr8 = ADD8rr %0, %1, implicit-def $eflags
122 body:             |
123   bb.1 (%ir-block.0):
124     liveins: $edi, $esi
126     %0(s8) = COPY $dil
127     %1(s8) = COPY $sil
128     %2(s8) = G_ADD %0, %1
129     $al = COPY %2(s8)
130     RET 0, implicit $al
134 name:            test_add_v4i32
135 # ALL-LABEL: name:            test_add_v4i32
136 alignment:       4
137 legalized:       true
138 regBankSelected: true
139 selected:        false
140 tracksRegLiveness: true
141 registers:
142   - { id: 0, class: vecr }
143   - { id: 1, class: vecr }
144   - { id: 2, class: vecr }
145 # NO_AVX512VL:   %0:vr128 = COPY $xmm0
146 # NO_AVX512VL:   %1:vr128 = COPY $xmm1
147 # SSE-NEXT:      %2:vr128 = PADDDrr %0, %1
148 # AVX-NEXT:      %2:vr128 = VPADDDrr %0, %1
149 # AVX512F-NEXT:  %2:vr128 = VPADDDrr %0, %1
150 # AVX512VL:      %0:vr128x = COPY $xmm0
151 # AVX512VL:      %1:vr128x = COPY $xmm1
152 # AVX512VL-NEXT: %2:vr128x = VPADDDZ128rr %0, %1
153 body:             |
154   bb.1 (%ir-block.0):
155     liveins: $xmm0, $xmm1
157     %0(<4 x s32>) = COPY $xmm0
158     %1(<4 x s32>) = COPY $xmm1
159     %2(<4 x s32>) = G_ADD %0, %1
160     $xmm0 = COPY %2(<4 x s32>)
161     RET 0, implicit $xmm0
165 name:            test_add_v4f32
166 # ALL-LABEL: name:            test_add_v4f32
167 alignment:       4
168 legalized:       true
169 regBankSelected: true
170 selected:        false
171 tracksRegLiveness: true
172 registers:
173   - { id: 0, class: vecr }
174   - { id: 1, class: vecr }
175   - { id: 2, class: vecr }
176 # SSE:           %0:vr128 = COPY $xmm0
177 # SSE-NEXT:      %1:vr128 = COPY $xmm1
178 # SSE-NEXT:      %2:vr128 = ADDPSrr %0, %1
179 # AVX:           %0:vr128 = COPY $xmm0
180 # AVX-NEXT:      %1:vr128 = COPY $xmm1
181 # AVX-NEXT:      %2:vr128 = VADDPSrr %0, %1
182 # AVX512F:       %0:vr128 = COPY $xmm0
183 # AVX512F-NEXT:  1:vr128 = COPY $xmm1
184 # AVX512F-NEXT:  %2:vr128 = VADDPSrr %0, %1
185 # AVX512VL:      %0:vr128x = COPY $xmm0
186 # AVX512VL-NEXT: %1:vr128x = COPY $xmm1
187 # AVX512VL-NEXT: %2:vr128x = VADDPSZ128rr %0, %1
188 body:             |
189   bb.1 (%ir-block.0):
190     liveins: $xmm0, $xmm1
192     %0(<4 x s32>) = COPY $xmm0
193     %1(<4 x s32>) = COPY $xmm1
194     %2(<4 x s32>) = G_FADD %0, %1
195     $xmm0 = COPY %2(<4 x s32>)
196     RET 0, implicit $xmm0