Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / legalize-or-v256.mir
blob8c189de61c5e02bbfae1adacb7dd534063947773
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+sse2 -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=SSE
3 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx  -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=AVX
4 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx2 -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=AVX
6 --- |
7   define void @test_or_v32i8() {
8     %ret = or <32 x i8> undef, undef
9     ret void
10   }
12   define void @test_or_v16i16() {
13     %ret = or <16 x i16> undef, undef
14     ret void
15   }
17   define void @test_or_v8i32() {
18     %ret = or <8 x i32> undef, undef
19     ret void
20   }
22   define void @test_or_v4i64() {
23     %ret = or <4 x i64> undef, undef
24     ret void
25   }
26 ...
27 ---
28 name:            test_or_v32i8
29 alignment:       16
30 legalized:       false
31 regBankSelected: false
32 registers:
33   - { id: 0, class: _ }
34   - { id: 1, class: _ }
35   - { id: 2, class: _ }
36 body:             |
37   bb.1 (%ir-block.0):
38     liveins: $ymm0, $ymm1
40     ; SSE-LABEL: name: test_or_v32i8
41     ; SSE: liveins: $ymm0, $ymm1
42     ; SSE-NEXT: {{  $}}
43     ; SSE-NEXT: [[DEF:%[0-9]+]]:_(<32 x s8>) = IMPLICIT_DEF
44     ; SSE-NEXT: [[DEF1:%[0-9]+]]:_(<32 x s8>) = IMPLICIT_DEF
45     ; SSE-NEXT: [[UV:%[0-9]+]]:_(<16 x s8>), [[UV1:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[DEF]](<32 x s8>)
46     ; SSE-NEXT: [[UV2:%[0-9]+]]:_(<16 x s8>), [[UV3:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[DEF1]](<32 x s8>)
47     ; SSE-NEXT: [[OR:%[0-9]+]]:_(<16 x s8>) = G_OR [[UV]], [[UV2]]
48     ; SSE-NEXT: [[OR1:%[0-9]+]]:_(<16 x s8>) = G_OR [[UV1]], [[UV3]]
49     ; SSE-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<32 x s8>) = G_CONCAT_VECTORS [[OR]](<16 x s8>), [[OR1]](<16 x s8>)
50     ; SSE-NEXT: $ymm0 = COPY [[CONCAT_VECTORS]](<32 x s8>)
51     ; SSE-NEXT: RET 0
52     ; AVX-LABEL: name: test_or_v32i8
53     ; AVX: liveins: $ymm0, $ymm1
54     ; AVX-NEXT: {{  $}}
55     ; AVX-NEXT: [[DEF:%[0-9]+]]:_(<32 x s8>) = IMPLICIT_DEF
56     ; AVX-NEXT: [[DEF1:%[0-9]+]]:_(<32 x s8>) = IMPLICIT_DEF
57     ; AVX-NEXT: [[OR:%[0-9]+]]:_(<32 x s8>) = G_OR [[DEF]], [[DEF1]]
58     ; AVX-NEXT: $ymm0 = COPY [[OR]](<32 x s8>)
59     ; AVX-NEXT: RET 0
60     %0(<32 x s8>) = IMPLICIT_DEF
61     %1(<32 x s8>) = IMPLICIT_DEF
62     %2(<32 x s8>) = G_OR %0, %1
63     $ymm0 = COPY %2
64     RET 0
65 ...
66 ---
67 name:            test_or_v16i16
68 alignment:       16
69 legalized:       false
70 regBankSelected: false
71 registers:
72   - { id: 0, class: _ }
73   - { id: 1, class: _ }
74   - { id: 2, class: _ }
75 body:             |
76   bb.1 (%ir-block.0):
77     liveins: $ymm0, $ymm1
79     ; SSE-LABEL: name: test_or_v16i16
80     ; SSE: liveins: $ymm0, $ymm1
81     ; SSE-NEXT: {{  $}}
82     ; SSE-NEXT: [[DEF:%[0-9]+]]:_(<16 x s16>) = IMPLICIT_DEF
83     ; SSE-NEXT: [[DEF1:%[0-9]+]]:_(<16 x s16>) = IMPLICIT_DEF
84     ; SSE-NEXT: [[UV:%[0-9]+]]:_(<8 x s16>), [[UV1:%[0-9]+]]:_(<8 x s16>) = G_UNMERGE_VALUES [[DEF]](<16 x s16>)
85     ; SSE-NEXT: [[UV2:%[0-9]+]]:_(<8 x s16>), [[UV3:%[0-9]+]]:_(<8 x s16>) = G_UNMERGE_VALUES [[DEF1]](<16 x s16>)
86     ; SSE-NEXT: [[OR:%[0-9]+]]:_(<8 x s16>) = G_OR [[UV]], [[UV2]]
87     ; SSE-NEXT: [[OR1:%[0-9]+]]:_(<8 x s16>) = G_OR [[UV1]], [[UV3]]
88     ; SSE-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<16 x s16>) = G_CONCAT_VECTORS [[OR]](<8 x s16>), [[OR1]](<8 x s16>)
89     ; SSE-NEXT: $ymm0 = COPY [[CONCAT_VECTORS]](<16 x s16>)
90     ; SSE-NEXT: RET 0
91     ; AVX-LABEL: name: test_or_v16i16
92     ; AVX: liveins: $ymm0, $ymm1
93     ; AVX-NEXT: {{  $}}
94     ; AVX-NEXT: [[DEF:%[0-9]+]]:_(<16 x s16>) = IMPLICIT_DEF
95     ; AVX-NEXT: [[DEF1:%[0-9]+]]:_(<16 x s16>) = IMPLICIT_DEF
96     ; AVX-NEXT: [[OR:%[0-9]+]]:_(<16 x s16>) = G_OR [[DEF]], [[DEF1]]
97     ; AVX-NEXT: $ymm0 = COPY [[OR]](<16 x s16>)
98     ; AVX-NEXT: RET 0
99     %0(<16 x s16>) = IMPLICIT_DEF
100     %1(<16 x s16>) = IMPLICIT_DEF
101     %2(<16 x s16>) = G_OR %0, %1
102     $ymm0 = COPY %2
103     RET 0
106 name:            test_or_v8i32
107 alignment:       16
108 legalized:       false
109 regBankSelected: false
110 registers:
111   - { id: 0, class: _ }
112   - { id: 1, class: _ }
113   - { id: 2, class: _ }
114 body:             |
115   bb.1 (%ir-block.0):
116     liveins: $ymm0, $ymm1
118     ; SSE-LABEL: name: test_or_v8i32
119     ; SSE: liveins: $ymm0, $ymm1
120     ; SSE-NEXT: {{  $}}
121     ; SSE-NEXT: [[DEF:%[0-9]+]]:_(<8 x s32>) = IMPLICIT_DEF
122     ; SSE-NEXT: [[DEF1:%[0-9]+]]:_(<8 x s32>) = IMPLICIT_DEF
123     ; SSE-NEXT: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[DEF]](<8 x s32>)
124     ; SSE-NEXT: [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[DEF1]](<8 x s32>)
125     ; SSE-NEXT: [[OR:%[0-9]+]]:_(<4 x s32>) = G_OR [[UV]], [[UV2]]
126     ; SSE-NEXT: [[OR1:%[0-9]+]]:_(<4 x s32>) = G_OR [[UV1]], [[UV3]]
127     ; SSE-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[OR]](<4 x s32>), [[OR1]](<4 x s32>)
128     ; SSE-NEXT: $ymm0 = COPY [[CONCAT_VECTORS]](<8 x s32>)
129     ; SSE-NEXT: RET 0
130     ; AVX-LABEL: name: test_or_v8i32
131     ; AVX: liveins: $ymm0, $ymm1
132     ; AVX-NEXT: {{  $}}
133     ; AVX-NEXT: [[DEF:%[0-9]+]]:_(<8 x s32>) = IMPLICIT_DEF
134     ; AVX-NEXT: [[DEF1:%[0-9]+]]:_(<8 x s32>) = IMPLICIT_DEF
135     ; AVX-NEXT: [[OR:%[0-9]+]]:_(<8 x s32>) = G_OR [[DEF]], [[DEF1]]
136     ; AVX-NEXT: $ymm0 = COPY [[OR]](<8 x s32>)
137     ; AVX-NEXT: RET 0
138     %0(<8 x s32>) = IMPLICIT_DEF
139     %1(<8 x s32>) = IMPLICIT_DEF
140     %2(<8 x s32>) = G_OR %0, %1
141     $ymm0 = COPY %2
142     RET 0
145 name:            test_or_v4i64
146 alignment:       16
147 legalized:       false
148 regBankSelected: false
149 registers:
150   - { id: 0, class: _ }
151   - { id: 1, class: _ }
152   - { id: 2, class: _ }
153 body:             |
154   bb.1 (%ir-block.0):
155     liveins: $ymm0, $ymm1
157     ; SSE-LABEL: name: test_or_v4i64
158     ; SSE: liveins: $ymm0, $ymm1
159     ; SSE-NEXT: {{  $}}
160     ; SSE-NEXT: [[DEF:%[0-9]+]]:_(<4 x s64>) = IMPLICIT_DEF
161     ; SSE-NEXT: [[DEF1:%[0-9]+]]:_(<4 x s64>) = IMPLICIT_DEF
162     ; SSE-NEXT: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[DEF]](<4 x s64>)
163     ; SSE-NEXT: [[UV2:%[0-9]+]]:_(<2 x s64>), [[UV3:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[DEF1]](<4 x s64>)
164     ; SSE-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[UV]], [[UV2]]
165     ; SSE-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[UV1]], [[UV3]]
166     ; SSE-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s64>) = G_CONCAT_VECTORS [[OR]](<2 x s64>), [[OR1]](<2 x s64>)
167     ; SSE-NEXT: $ymm0 = COPY [[CONCAT_VECTORS]](<4 x s64>)
168     ; SSE-NEXT: RET 0
169     ; AVX-LABEL: name: test_or_v4i64
170     ; AVX: liveins: $ymm0, $ymm1
171     ; AVX-NEXT: {{  $}}
172     ; AVX-NEXT: [[DEF:%[0-9]+]]:_(<4 x s64>) = IMPLICIT_DEF
173     ; AVX-NEXT: [[DEF1:%[0-9]+]]:_(<4 x s64>) = IMPLICIT_DEF
174     ; AVX-NEXT: [[OR:%[0-9]+]]:_(<4 x s64>) = G_OR [[DEF]], [[DEF1]]
175     ; AVX-NEXT: $ymm0 = COPY [[OR]](<4 x s64>)
176     ; AVX-NEXT: RET 0
177     %0(<4 x s64>) = IMPLICIT_DEF
178     %1(<4 x s64>) = IMPLICIT_DEF
179     %2(<4 x s64>) = G_OR %0, %1
180     $ymm0 = COPY %2
181     RET 0