[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / xxeval-eqv-nor-or-xor.ll
blob6616a1e6e7e9f4861ae21ca52af9b5531ac828df
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mcpu=pwr10 -mtriple=powerpc64le-unknown-unknown \
3 ; RUN:   -ppc-asm-full-reg-names --ppc-vsr-nums-as-vr < %s | FileCheck %s
5 ; (eqv A, (and B, C)) 225
6 define dso_local <2 x i64> @eqvA_andB_C(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C) local_unnamed_addr #0 {
7 ; CHECK-LABEL: eqvA_andB_C:
8 ; CHECK:       # %bb.0: # %entry
9 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 225
10 ; CHECK-NEXT:    blr
11 entry:
12   %and = and <2 x i64> %B, %C
13   %xor = xor <2 x i64> %A, %and
14   %neg = xor <2 x i64> %xor, <i64 -1, i64 -1>
15   ret <2 x i64> %neg
18 ; (eqv A, (or B, C)) 135
19 define dso_local <4 x i32> @eqvA_orB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
20 ; CHECK-LABEL: eqvA_orB_C:
21 ; CHECK:       # %bb.0: # %entry
22 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 135
23 ; CHECK-NEXT:    blr
24 entry:
25   %or = or <4 x i32> %B, %C
26   %xor = xor <4 x i32> %A, %or
27   %neg = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>
28   ret <4 x i32> %neg
31 ; (eqv A, B, C) 150
32 define dso_local <8 x i16> @eqvA_B_C(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C) local_unnamed_addr #0 {
33 ; CHECK-LABEL: eqvA_B_C:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 150
36 ; CHECK-NEXT:    blr
37 entry:
38   %and = and <8 x i16> %B, %C
39   %and1 = and <8 x i16> %A, %and
40   %or = or <8 x i16> %B, %C
41   %or1 = or <8 x i16> %A, %or
42   %neg = xor <8 x i16> %or1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
43   %or2 = or <8 x i16> %and1, %neg
44   ret <8 x i16> %or2
47 ; (nor A, (and B, C)) 224
48 define dso_local <16 x i8> @norA_andB_C(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) local_unnamed_addr #0 {
49 ; CHECK-LABEL: norA_andB_C:
50 ; CHECK:       # %bb.0: # %entry
51 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 224
52 ; CHECK-NEXT:    blr
53 entry:
54   %and = and <16 x i8> %B, %C
55   %or = or <16 x i8> %A, %and
56   %neg = xor <16 x i8> %or, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
57   ret <16 x i8> %neg
60 ; (nor A, (eqv B, C)) 96
61 define dso_local <4 x i32> @norA_eqvB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
62 ; CHECK-LABEL: norA_eqvB_C:
63 ; CHECK:       # %bb.0: # %entry
64 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 96
65 ; CHECK-NEXT:    blr
66 entry:
67   %neg = xor <4 x i32> %A, <i32 -1, i32 -1, i32 -1, i32 -1>
68   %xor = xor <4 x i32> %B, %C
69   %and = and <4 x i32> %neg, %xor
70   ret <4 x i32> %and
73 ; (nor A, (nand B, C)) 16
74 define dso_local <4 x i32> @norA_nandB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
75 ; CHECK-LABEL: norA_nandB_C:
76 ; CHECK:       # %bb.0: # %entry
77 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 16
78 ; CHECK-NEXT:    blr
79 entry:
80   %neg = xor <4 x i32> %A, <i32 -1, i32 -1, i32 -1, i32 -1>
81   %and = and <4 x i32> %B, %C
82   %and1 = and <4 x i32> %neg, %and
83   ret <4 x i32> %and1
86 ; (nor A, (nor B, C)) 112
87 define dso_local <4 x i32> @norA_norB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
88 ; CHECK-LABEL: norA_norB_C:
89 ; CHECK:       # %bb.0: # %entry
90 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 112
91 ; CHECK-NEXT:    blr
92 entry:
93   %neg = xor <4 x i32> %A, <i32 -1, i32 -1, i32 -1, i32 -1>
94   %or = or <4 x i32> %B, %C
95   %and = and <4 x i32> %neg, %or
96   ret <4 x i32> %and
99 ; (nor A, (xor B, C)) 144
100 define dso_local <4 x i32> @norA_xorB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
101 ; CHECK-LABEL: norA_xorB_C:
102 ; CHECK:       # %bb.0: # %entry
103 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 144
104 ; CHECK-NEXT:    blr
105 entry:
106   %xor = xor <4 x i32> %B, %C
107   %or = or <4 x i32> %A, %xor
108   %neg = xor <4 x i32> %or, <i32 -1, i32 -1, i32 -1, i32 -1>
109   ret <4 x i32> %neg
112 ; (nor A, B, C) 128
113 define dso_local <4 x i32> @norA_B_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
114 ; CHECK-LABEL: norA_B_C:
115 ; CHECK:       # %bb.0: # %entry
116 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 128
117 ; CHECK-NEXT:    blr
118 entry:
119   %or = or <4 x i32> %B, %C
120   %or1 = or <4 x i32> %A, %or
121   %neg = xor <4 x i32> %or1, <i32 -1, i32 -1, i32 -1, i32 -1>
122   ret <4 x i32> %neg
125 ; (or A, (and B, C)) 31
126 define dso_local <4 x i32> @orA_andB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
127 ; CHECK-LABEL: orA_andB_C:
128 ; CHECK:       # %bb.0: # %entry
129 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 31
130 ; CHECK-NEXT:    blr
131 entry:
132   %and = and <4 x i32> %B, %C
133   %or = or <4 x i32> %A, %and
134   ret <4 x i32> %or
137 ; (or A, (eqv B, C)) 159
138 define dso_local <4 x i32> @orA_eqvB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
139 ; CHECK-LABEL: orA_eqvB_C:
140 ; CHECK:       # %bb.0: # %entry
141 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 159
142 ; CHECK-NEXT:    blr
143 entry:
144   %xor = xor <4 x i32> %B, %C
145   %neg = xor <4 x i32> %xor, <i32 -1, i32 -1, i32 -1, i32 -1>
146   %or = or <4 x i32> %A, %neg
147   ret <4 x i32> %or
150 ; (or A, (nand B, C)) 239
151 define dso_local <4 x i32> @orA_nandB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
152 ; CHECK-LABEL: orA_nandB_C:
153 ; CHECK:       # %bb.0: # %entry
154 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 239
155 ; CHECK-NEXT:    blr
156 entry:
157   %and = and <4 x i32> %B, %C
158   %neg = xor <4 x i32> %and, <i32 -1, i32 -1, i32 -1, i32 -1>
159   %or = or <4 x i32> %A, %neg
160   ret <4 x i32> %or
163 ; (or A, (nor B, C)) 143
164 define dso_local <4 x i32> @orA_norB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
165 ; CHECK-LABEL: orA_norB_C:
166 ; CHECK:       # %bb.0: # %entry
167 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 143
168 ; CHECK-NEXT:    blr
169 entry:
170   %or = or <4 x i32> %B, %C
171   %neg = xor <4 x i32> %or, <i32 -1, i32 -1, i32 -1, i32 -1>
172   %or1 = or <4 x i32> %A, %neg
173   ret <4 x i32> %or1
176 ; (or A, (xor B, C)) 111
177 define dso_local <4 x i32> @orA_xorB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
178 ; CHECK-LABEL: orA_xorB_C:
179 ; CHECK:       # %bb.0: # %entry
180 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 111
181 ; CHECK-NEXT:    blr
182 entry:
183   %xor = xor <4 x i32> %B, %C
184   %or = or <4 x i32> %A, %xor
185   ret <4 x i32> %or
188 ; (or A, B, C) 127
189 define dso_local <4 x i32> @orA_B_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
190 ; CHECK-LABEL: orA_B_C:
191 ; CHECK:       # %bb.0: # %entry
192 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 127
193 ; CHECK-NEXT:    blr
194 entry:
195   %or = or <4 x i32> %B, %C
196   %or1 = or <4 x i32> %A, %or
197   ret <4 x i32> %or1
200 ; (xor A, (and B, C)) 30
201 define dso_local <4 x i32> @xorA_andB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
202 ; CHECK-LABEL: xorA_andB_C:
203 ; CHECK:       # %bb.0: # %entry
204 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 30
205 ; CHECK-NEXT:    blr
206 entry:
207   %and = and <4 x i32> %B, %C
208   %xor = xor <4 x i32> %A, %and
209   ret <4 x i32> %xor
212 ; (xor A, (or B, C)) 120
213 define dso_local <4 x i32> @xorA_orB_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
214 ; CHECK-LABEL: xorA_orB_C:
215 ; CHECK:       # %bb.0: # %entry
216 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 120
217 ; CHECK-NEXT:    blr
218 entry:
219   %or = or <4 x i32> %B, %C
220   %xor = xor <4 x i32> %A, %or
221   ret <4 x i32> %xor
224 ; (xor A, B, C) 105
225 define dso_local <4 x i32> @xorA_B_C(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) local_unnamed_addr #0 {
226 ; CHECK-LABEL: xorA_B_C:
227 ; CHECK:       # %bb.0: # %entry
228 ; CHECK-NEXT:    xxeval v2, v2, v3, v4, 105
229 ; CHECK-NEXT:    blr
230 entry:
231   %xor = xor <4 x i32> %B, %C
232   %xor1 = xor <4 x i32> %A, %xor
233   ret <4 x i32> %xor1
236 attributes #0 = { nounwind }