Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / LoongArch / not.ll
blobb9e02bdf111d9c544658833f94c71a2015e08905
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 < %s | FileCheck %s --check-prefix=LA64
5 define i8 @nor_i8(i8 %a, i8 %b) nounwind {
6 ; LA32-LABEL: nor_i8:
7 ; LA32:       # %bb.0:
8 ; LA32-NEXT:    nor $a0, $a0, $a1
9 ; LA32-NEXT:    ret
11 ; LA64-LABEL: nor_i8:
12 ; LA64:       # %bb.0:
13 ; LA64-NEXT:    nor $a0, $a0, $a1
14 ; LA64-NEXT:    ret
15   %or = or i8 %a, %b
16   %neg = xor i8 %or, -1
17   ret i8 %neg
20 define i16 @nor_i16(i16 %a, i16 %b) nounwind {
21 ; LA32-LABEL: nor_i16:
22 ; LA32:       # %bb.0:
23 ; LA32-NEXT:    nor $a0, $a0, $a1
24 ; LA32-NEXT:    ret
26 ; LA64-LABEL: nor_i16:
27 ; LA64:       # %bb.0:
28 ; LA64-NEXT:    nor $a0, $a0, $a1
29 ; LA64-NEXT:    ret
30   %or = or i16 %a, %b
31   %neg = xor i16 %or, -1
32   ret i16 %neg
35 define i32 @nor_i32(i32 %a, i32 %b) nounwind {
36 ; LA32-LABEL: nor_i32:
37 ; LA32:       # %bb.0:
38 ; LA32-NEXT:    nor $a0, $a0, $a1
39 ; LA32-NEXT:    ret
41 ; LA64-LABEL: nor_i32:
42 ; LA64:       # %bb.0:
43 ; LA64-NEXT:    nor $a0, $a0, $a1
44 ; LA64-NEXT:    ret
45   %or = or i32 %a, %b
46   %neg = xor i32 %or, -1
47   ret i32 %neg
50 define i64 @nor_i64(i64 %a, i64 %b) nounwind {
51 ; LA32-LABEL: nor_i64:
52 ; LA32:       # %bb.0:
53 ; LA32-NEXT:    nor $a0, $a0, $a2
54 ; LA32-NEXT:    nor $a1, $a1, $a3
55 ; LA32-NEXT:    ret
57 ; LA64-LABEL: nor_i64:
58 ; LA64:       # %bb.0:
59 ; LA64-NEXT:    nor $a0, $a0, $a1
60 ; LA64-NEXT:    ret
61   %or = or i64 %a, %b
62   %neg = xor i64 %or, -1
63   ret i64 %neg
66 define i8 @nor_zero_i8(i8 %a) nounwind {
67 ; LA32-LABEL: nor_zero_i8:
68 ; LA32:       # %bb.0:
69 ; LA32-NEXT:    nor $a0, $a0, $zero
70 ; LA32-NEXT:    ret
72 ; LA64-LABEL: nor_zero_i8:
73 ; LA64:       # %bb.0:
74 ; LA64-NEXT:    nor $a0, $a0, $zero
75 ; LA64-NEXT:    ret
76   %neg = xor i8 %a, -1
77   ret i8 %neg
80 define i16 @nor_zero_i16(i16 %a) nounwind {
81 ; LA32-LABEL: nor_zero_i16:
82 ; LA32:       # %bb.0:
83 ; LA32-NEXT:    nor $a0, $a0, $zero
84 ; LA32-NEXT:    ret
86 ; LA64-LABEL: nor_zero_i16:
87 ; LA64:       # %bb.0:
88 ; LA64-NEXT:    nor $a0, $a0, $zero
89 ; LA64-NEXT:    ret
90   %neg = xor i16 %a, -1
91   ret i16 %neg
94 define i32 @nor_zero_i32(i32 %a) nounwind {
95 ; LA32-LABEL: nor_zero_i32:
96 ; LA32:       # %bb.0:
97 ; LA32-NEXT:    nor $a0, $a0, $zero
98 ; LA32-NEXT:    ret
100 ; LA64-LABEL: nor_zero_i32:
101 ; LA64:       # %bb.0:
102 ; LA64-NEXT:    nor $a0, $a0, $zero
103 ; LA64-NEXT:    ret
104   %neg = xor i32 %a, -1
105   ret i32 %neg
108 define i64 @nor_zero_i64(i64 %a) nounwind {
109 ; LA32-LABEL: nor_zero_i64:
110 ; LA32:       # %bb.0:
111 ; LA32-NEXT:    nor $a0, $a0, $zero
112 ; LA32-NEXT:    nor $a1, $a1, $zero
113 ; LA32-NEXT:    ret
115 ; LA64-LABEL: nor_zero_i64:
116 ; LA64:       # %bb.0:
117 ; LA64-NEXT:    nor $a0, $a0, $zero
118 ; LA64-NEXT:    ret
119   %neg = xor i64 %a, -1
120   ret i64 %neg
123 define i8 @orn_i8(i8 %a, i8 %b) nounwind {
124 ; LA32-LABEL: orn_i8:
125 ; LA32:       # %bb.0:
126 ; LA32-NEXT:    orn $a0, $a0, $a1
127 ; LA32-NEXT:    ret
129 ; LA64-LABEL: orn_i8:
130 ; LA64:       # %bb.0:
131 ; LA64-NEXT:    orn $a0, $a0, $a1
132 ; LA64-NEXT:    ret
133   %neg = xor i8 %b, -1
134   %or = or i8 %neg, %a
135   ret i8 %or
138 define i16 @orn_i16(i16 %a, i16 %b) nounwind {
139 ; LA32-LABEL: orn_i16:
140 ; LA32:       # %bb.0:
141 ; LA32-NEXT:    orn $a0, $a0, $a1
142 ; LA32-NEXT:    ret
144 ; LA64-LABEL: orn_i16:
145 ; LA64:       # %bb.0:
146 ; LA64-NEXT:    orn $a0, $a0, $a1
147 ; LA64-NEXT:    ret
148   %neg = xor i16 %b, -1
149   %or = or i16 %neg, %a
150   ret i16 %or
153 define i32 @orn_i32(i32 %a, i32 %b) nounwind {
154 ; LA32-LABEL: orn_i32:
155 ; LA32:       # %bb.0:
156 ; LA32-NEXT:    orn $a0, $a0, $a1
157 ; LA32-NEXT:    ret
159 ; LA64-LABEL: orn_i32:
160 ; LA64:       # %bb.0:
161 ; LA64-NEXT:    orn $a0, $a0, $a1
162 ; LA64-NEXT:    ret
163   %neg = xor i32 %b, -1
164   %or = or i32 %neg, %a
165   ret i32 %or
168 define i64 @orn_i64(i64 %a, i64 %b) nounwind {
169 ; LA32-LABEL: orn_i64:
170 ; LA32:       # %bb.0:
171 ; LA32-NEXT:    orn $a0, $a0, $a2
172 ; LA32-NEXT:    orn $a1, $a1, $a3
173 ; LA32-NEXT:    ret
175 ; LA64-LABEL: orn_i64:
176 ; LA64:       # %bb.0:
177 ; LA64-NEXT:    orn $a0, $a0, $a1
178 ; LA64-NEXT:    ret
179   %neg = xor i64 %b, -1
180   %or = or i64 %neg, %a
181   ret i64 %or
184 define i8 @andn_i8(i8 %a, i8 %b) nounwind {
185 ; LA32-LABEL: andn_i8:
186 ; LA32:       # %bb.0:
187 ; LA32-NEXT:    andn $a0, $a0, $a1
188 ; LA32-NEXT:    ret
190 ; LA64-LABEL: andn_i8:
191 ; LA64:       # %bb.0:
192 ; LA64-NEXT:    andn $a0, $a0, $a1
193 ; LA64-NEXT:    ret
194   %neg = xor i8 %b, -1
195   %and = and i8 %neg, %a
196   ret i8 %and
199 define i16 @andn_i16(i16 %a, i16 %b) nounwind {
200 ; LA32-LABEL: andn_i16:
201 ; LA32:       # %bb.0:
202 ; LA32-NEXT:    andn $a0, $a0, $a1
203 ; LA32-NEXT:    ret
205 ; LA64-LABEL: andn_i16:
206 ; LA64:       # %bb.0:
207 ; LA64-NEXT:    andn $a0, $a0, $a1
208 ; LA64-NEXT:    ret
209   %neg = xor i16 %b, -1
210   %and = and i16 %neg, %a
211   ret i16 %and
214 define i32 @andn_i32(i32 %a, i32 %b) nounwind {
215 ; LA32-LABEL: andn_i32:
216 ; LA32:       # %bb.0:
217 ; LA32-NEXT:    andn $a0, $a0, $a1
218 ; LA32-NEXT:    ret
220 ; LA64-LABEL: andn_i32:
221 ; LA64:       # %bb.0:
222 ; LA64-NEXT:    andn $a0, $a0, $a1
223 ; LA64-NEXT:    ret
224   %neg = xor i32 %b, -1
225   %and = and i32 %neg, %a
226   ret i32 %and
229 define i64 @andn_i64(i64 %a, i64 %b) nounwind {
230 ; LA32-LABEL: andn_i64:
231 ; LA32:       # %bb.0:
232 ; LA32-NEXT:    andn $a0, $a0, $a2
233 ; LA32-NEXT:    andn $a1, $a1, $a3
234 ; LA32-NEXT:    ret
236 ; LA64-LABEL: andn_i64:
237 ; LA64:       # %bb.0:
238 ; LA64-NEXT:    andn $a0, $a0, $a1
239 ; LA64-NEXT:    ret
240   %neg = xor i64 %b, -1
241   %and = and i64 %neg, %a
242   ret i64 %and