xref: /llvm-project/llvm/test/CodeGen/LoongArch/not.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
4
5define 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
10;
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
18}
19
20define 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
25;
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
33}
34
35define 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
40;
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
48}
49
50define 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
56;
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
64}
65
66define 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
71;
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
78}
79
80define 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
85;
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
92}
93
94define 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
99;
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
106}
107
108define 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
114;
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
121}
122
123define 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
128;
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
136}
137
138define 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
143;
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
151}
152
153define 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
158;
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
166}
167
168define 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
174;
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
182}
183
184define 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
189;
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
197}
198
199define 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
204;
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
212}
213
214define 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
219;
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
227}
228
229define 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
235;
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
243}
244