[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / M68k / Arith / bitwise.ll
blobd5fe191ab1742faa9b2518709460905ab54288db
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s
4 ; op reg, reg
6 define zeroext i8 @andb(i8 zeroext %a, i8 zeroext %b) nounwind {
7 ; CHECK-LABEL: andb:
8 ; CHECK:       ; %bb.0:
9 ; CHECK-NEXT:    move.b (11,%sp), %d0
10 ; CHECK-NEXT:    move.b (7,%sp), %d1
11 ; CHECK-NEXT:    and.b %d0, %d1
12 ; CHECK-NEXT:    move.l %d1, %d0
13 ; CHECK-NEXT:    and.l #255, %d0
14 ; CHECK-NEXT:    rts
15   %1 = and i8 %a, %b
16   ret i8 %1
19 define zeroext i16 @andw(i16 zeroext %a, i16 zeroext %b) nounwind {
20 ; CHECK-LABEL: andw:
21 ; CHECK:       ; %bb.0:
22 ; CHECK-NEXT:    move.w (10,%sp), %d0
23 ; CHECK-NEXT:    move.w (6,%sp), %d1
24 ; CHECK-NEXT:    and.w %d0, %d1
25 ; CHECK-NEXT:    move.l %d1, %d0
26 ; CHECK-NEXT:    and.l #65535, %d0
27 ; CHECK-NEXT:    rts
28   %1 = and i16 %a, %b
29   ret i16 %1
32 define i32 @andl(i32 %a, i32 %b) nounwind {
33 ; CHECK-LABEL: andl:
34 ; CHECK:       ; %bb.0:
35 ; CHECK-NEXT:    move.l (8,%sp), %d1
36 ; CHECK-NEXT:    move.l (4,%sp), %d0
37 ; CHECK-NEXT:    and.l %d1, %d0
38 ; CHECK-NEXT:    rts
39   %1 = and i32 %a, %b
40   ret i32 %1
43 define zeroext i8 @orb(i8 zeroext %a, i8 zeroext %b) nounwind {
44 ; CHECK-LABEL: orb:
45 ; CHECK:       ; %bb.0:
46 ; CHECK-NEXT:    move.b (11,%sp), %d0
47 ; CHECK-NEXT:    move.b (7,%sp), %d1
48 ; CHECK-NEXT:    or.b %d0, %d1
49 ; CHECK-NEXT:    move.l %d1, %d0
50 ; CHECK-NEXT:    and.l #255, %d0
51 ; CHECK-NEXT:    rts
52   %1 = or i8 %a, %b
53   ret i8 %1
56 define zeroext i16 @orw(i16 zeroext %a, i16 zeroext %b) nounwind {
57 ; CHECK-LABEL: orw:
58 ; CHECK:       ; %bb.0:
59 ; CHECK-NEXT:    move.w (10,%sp), %d0
60 ; CHECK-NEXT:    move.w (6,%sp), %d1
61 ; CHECK-NEXT:    or.w %d0, %d1
62 ; CHECK-NEXT:    move.l %d1, %d0
63 ; CHECK-NEXT:    and.l #65535, %d0
64 ; CHECK-NEXT:    rts
65   %1 = or i16 %a, %b
66   ret i16 %1
69 define i32 @orl(i32 %a, i32 %b) nounwind {
70 ; CHECK-LABEL: orl:
71 ; CHECK:       ; %bb.0:
72 ; CHECK-NEXT:    move.l (8,%sp), %d1
73 ; CHECK-NEXT:    move.l (4,%sp), %d0
74 ; CHECK-NEXT:    or.l %d1, %d0
75 ; CHECK-NEXT:    rts
76   %1 = or i32 %a, %b
77   ret i32 %1
80 define zeroext i8 @eorb(i8 zeroext %a, i8 zeroext %b) nounwind {
81 ; CHECK-LABEL: eorb:
82 ; CHECK:       ; %bb.0:
83 ; CHECK-NEXT:    move.b (11,%sp), %d0
84 ; CHECK-NEXT:    move.b (7,%sp), %d1
85 ; CHECK-NEXT:    eor.b %d0, %d1
86 ; CHECK-NEXT:    move.l %d1, %d0
87 ; CHECK-NEXT:    and.l #255, %d0
88 ; CHECK-NEXT:    rts
89   %1 = xor i8 %a, %b
90   ret i8 %1
93 define zeroext i16 @eorw(i16 zeroext %a, i16 zeroext %b) nounwind {
94 ; CHECK-LABEL: eorw:
95 ; CHECK:       ; %bb.0:
96 ; CHECK-NEXT:    move.w (10,%sp), %d0
97 ; CHECK-NEXT:    move.w (6,%sp), %d1
98 ; CHECK-NEXT:    eor.w %d0, %d1
99 ; CHECK-NEXT:    move.l %d1, %d0
100 ; CHECK-NEXT:    and.l #65535, %d0
101 ; CHECK-NEXT:    rts
102   %1 = xor i16 %a, %b
103   ret i16 %1
106 define i32 @eorl(i32 %a, i32 %b) nounwind {
107 ; CHECK-LABEL: eorl:
108 ; CHECK:       ; %bb.0:
109 ; CHECK-NEXT:    move.l (8,%sp), %d1
110 ; CHECK-NEXT:    move.l (4,%sp), %d0
111 ; CHECK-NEXT:    eor.l %d1, %d0
112 ; CHECK-NEXT:    rts
113   %1 = xor i32 %a, %b
114   ret i32 %1
117 ; op reg, imm
118 ; For type i8 and i16, value is loaded from memory to avoid optimizing it to *.l
120 define void @andib(i8* %a) nounwind {
121 ; CHECK-LABEL: andib:
122 ; CHECK:       ; %bb.0:
123 ; CHECK-NEXT:    move.l (4,%sp), %a0
124 ; CHECK-NEXT:    move.b (%a0), %d0
125 ; CHECK-NEXT:    and.b #18, %d0
126 ; CHECK-NEXT:    move.b %d0, (%a0)
127 ; CHECK-NEXT:    rts
128   %1 = load i8, i8* %a
129   %2 = and i8 %1, 18
130   store i8 %2, i8* %a
131   ret void
134 define void @andiw(i16* %a) nounwind {
135 ; CHECK-LABEL: andiw:
136 ; CHECK:       ; %bb.0:
137 ; CHECK-NEXT:    move.l (4,%sp), %a0
138 ; CHECK-NEXT:    move.w (%a0), %d0
139 ; CHECK-NEXT:    and.w #4660, %d0
140 ; CHECK-NEXT:    move.w %d0, (%a0)
141 ; CHECK-NEXT:    rts
142   %1 = load i16, i16* %a
143   %2 = and i16 %1, 4660
144   store i16 %2, i16* %a
145   ret void
148 define i32 @andil(i32 %a) nounwind {
149 ; CHECK-LABEL: andil:
150 ; CHECK:       ; %bb.0:
151 ; CHECK-NEXT:    move.l (4,%sp), %d0
152 ; CHECK-NEXT:    and.l #305419896, %d0
153 ; CHECK-NEXT:    rts
154   %1 = and i32 %a, 305419896
155   ret i32 %1
158 define void @orib(i8* %a) nounwind {
159 ; CHECK-LABEL: orib:
160 ; CHECK:       ; %bb.0:
161 ; CHECK-NEXT:    move.l (4,%sp), %a0
162 ; CHECK-NEXT:    move.b (%a0), %d0
163 ; CHECK-NEXT:    or.b #18, %d0
164 ; CHECK-NEXT:    move.b %d0, (%a0)
165 ; CHECK-NEXT:    rts
166   %1 = load i8, i8* %a
167   %2 = or i8 %1, 18
168   store i8 %2, i8* %a
169   ret void
172 define void @oriw(i16* %a) nounwind {
173 ; CHECK-LABEL: oriw:
174 ; CHECK:       ; %bb.0:
175 ; CHECK-NEXT:    move.l (4,%sp), %a0
176 ; CHECK-NEXT:    move.w (%a0), %d0
177 ; CHECK-NEXT:    or.w #4660, %d0
178 ; CHECK-NEXT:    move.w %d0, (%a0)
179 ; CHECK-NEXT:    rts
180   %1 = load i16, i16* %a
181   %2 = or i16 %1, 4660
182   store i16 %2, i16* %a
183   ret void
186 define i32 @oril(i32 %a) nounwind {
187 ; CHECK-LABEL: oril:
188 ; CHECK:       ; %bb.0:
189 ; CHECK-NEXT:    move.l (4,%sp), %d0
190 ; CHECK-NEXT:    or.l #305419896, %d0
191 ; CHECK-NEXT:    rts
192   %1 = or i32 %a, 305419896
193   ret i32 %1
196 define void @eorib(i8* %a) nounwind {
197 ; CHECK-LABEL: eorib:
198 ; CHECK:       ; %bb.0:
199 ; CHECK-NEXT:    move.l (4,%sp), %a0
200 ; CHECK-NEXT:    move.b (%a0), %d0
201 ; CHECK-NEXT:    eori.b #18, %d0
202 ; CHECK-NEXT:    move.b %d0, (%a0)
203 ; CHECK-NEXT:    rts
204   %1 = load i8, i8* %a
205   %2 = xor i8 %1, 18
206   store i8 %2, i8* %a
207   ret void
210 define void @eoriw(i16* %a) nounwind {
211 ; CHECK-LABEL: eoriw:
212 ; CHECK:       ; %bb.0:
213 ; CHECK-NEXT:    move.l (4,%sp), %a0
214 ; CHECK-NEXT:    move.w (%a0), %d0
215 ; CHECK-NEXT:    eori.w #4660, %d0
216 ; CHECK-NEXT:    move.w %d0, (%a0)
217 ; CHECK-NEXT:    rts
218   %1 = load i16, i16* %a
219   %2 = xor i16 %1, 4660
220   store i16 %2, i16* %a
221   ret void
224 define i32 @eoril(i32 %a) nounwind {
225 ; CHECK-LABEL: eoril:
226 ; CHECK:       ; %bb.0:
227 ; CHECK-NEXT:    move.l (4,%sp), %d0
228 ; CHECK-NEXT:    eori.l #305419896, %d0
229 ; CHECK-NEXT:    rts
230   %1 = xor i32 %a, 305419896
231   ret i32 %1