xref: /aosp_15_r20/external/llvm/test/CodeGen/MSP430/bit.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=msp430 | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:16:32"
3*9880d681SAndroid Build Coastguard Workertarget triple = "msp430-generic-generic"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@foo8 = external global i8
6*9880d681SAndroid Build Coastguard Worker@bar8 = external global i8
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbrr(i8 %a, i8 %b) nounwind {
9*9880d681SAndroid Build Coastguard Worker	%t1 = and i8 %a, %b
10*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i8 %t1, 0
11*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i8
12*9880d681SAndroid Build Coastguard Worker	ret i8 %t3
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbrr:
15*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	r14, r15
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbri(i8 %a) nounwind {
18*9880d681SAndroid Build Coastguard Worker	%t1 = and i8 %a, 15
19*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i8 %t1, 0
20*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i8
21*9880d681SAndroid Build Coastguard Worker	ret i8 %t3
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbri:
24*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	#15, r15
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbir(i8 %a) nounwind {
27*9880d681SAndroid Build Coastguard Worker	%t1 = and i8 15, %a
28*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i8 %t1, 0
29*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i8
30*9880d681SAndroid Build Coastguard Worker	ret i8 %t3
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbir:
33*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	#15, r15
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbmi() nounwind {
36*9880d681SAndroid Build Coastguard Worker	%t1 = load i8, i8* @foo8
37*9880d681SAndroid Build Coastguard Worker	%t2 = and i8 %t1, 15
38*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i8 %t2, 0
39*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i8
40*9880d681SAndroid Build Coastguard Worker	ret i8 %t4
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbmi:
43*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	#15, &foo8
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbim() nounwind {
46*9880d681SAndroid Build Coastguard Worker	%t1 = load i8, i8* @foo8
47*9880d681SAndroid Build Coastguard Worker	%t2 = and i8 15, %t1
48*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i8 %t2, 0
49*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i8
50*9880d681SAndroid Build Coastguard Worker	ret i8 %t4
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbim:
53*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	#15, &foo8
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbrm(i8 %a) nounwind {
56*9880d681SAndroid Build Coastguard Worker	%t1 = load i8, i8* @foo8
57*9880d681SAndroid Build Coastguard Worker	%t2 = and i8 %a, %t1
58*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i8 %t2, 0
59*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i8
60*9880d681SAndroid Build Coastguard Worker	ret i8 %t4
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbrm:
63*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	&foo8, r15
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbmr(i8 %a) nounwind {
66*9880d681SAndroid Build Coastguard Worker	%t1 = load i8, i8* @foo8
67*9880d681SAndroid Build Coastguard Worker	%t2 = and i8 %t1, %a
68*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i8 %t2, 0
69*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i8
70*9880d681SAndroid Build Coastguard Worker	ret i8 %t4
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbmr:
73*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	r15, &foo8
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine i8 @bitbmm() nounwind {
76*9880d681SAndroid Build Coastguard Worker	%t1 = load i8, i8* @foo8
77*9880d681SAndroid Build Coastguard Worker	%t2 = load i8, i8* @bar8
78*9880d681SAndroid Build Coastguard Worker	%t3 = and i8 %t1, %t2
79*9880d681SAndroid Build Coastguard Worker	%t4 = icmp ne i8 %t3, 0
80*9880d681SAndroid Build Coastguard Worker	%t5 = zext i1 %t4 to i8
81*9880d681SAndroid Build Coastguard Worker	ret i8 %t5
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitbmm:
84*9880d681SAndroid Build Coastguard Worker; CHECK: bit.b	&bar8, &foo8
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker@foo16 = external global i16
87*9880d681SAndroid Build Coastguard Worker@bar16 = external global i16
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwrr(i16 %a, i16 %b) nounwind {
90*9880d681SAndroid Build Coastguard Worker	%t1 = and i16 %a, %b
91*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i16 %t1, 0
92*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i16
93*9880d681SAndroid Build Coastguard Worker	ret i16 %t3
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwrr:
96*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	r14, r15
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwri(i16 %a) nounwind {
99*9880d681SAndroid Build Coastguard Worker	%t1 = and i16 %a, 4080
100*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i16 %t1, 0
101*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i16
102*9880d681SAndroid Build Coastguard Worker	ret i16 %t3
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwri:
105*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	#4080, r15
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwir(i16 %a) nounwind {
108*9880d681SAndroid Build Coastguard Worker	%t1 = and i16 4080, %a
109*9880d681SAndroid Build Coastguard Worker	%t2 = icmp ne i16 %t1, 0
110*9880d681SAndroid Build Coastguard Worker	%t3 = zext i1 %t2 to i16
111*9880d681SAndroid Build Coastguard Worker	ret i16 %t3
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwir:
114*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	#4080, r15
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwmi() nounwind {
117*9880d681SAndroid Build Coastguard Worker	%t1 = load i16, i16* @foo16
118*9880d681SAndroid Build Coastguard Worker	%t2 = and i16 %t1, 4080
119*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i16 %t2, 0
120*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i16
121*9880d681SAndroid Build Coastguard Worker	ret i16 %t4
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwmi:
124*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	#4080, &foo16
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwim() nounwind {
127*9880d681SAndroid Build Coastguard Worker	%t1 = load i16, i16* @foo16
128*9880d681SAndroid Build Coastguard Worker	%t2 = and i16 4080, %t1
129*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i16 %t2, 0
130*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i16
131*9880d681SAndroid Build Coastguard Worker	ret i16 %t4
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwim:
134*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	#4080, &foo16
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwrm(i16 %a) nounwind {
137*9880d681SAndroid Build Coastguard Worker	%t1 = load i16, i16* @foo16
138*9880d681SAndroid Build Coastguard Worker	%t2 = and i16 %a, %t1
139*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i16 %t2, 0
140*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i16
141*9880d681SAndroid Build Coastguard Worker	ret i16 %t4
142*9880d681SAndroid Build Coastguard Worker}
143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwrm:
144*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	&foo16, r15
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwmr(i16 %a) nounwind {
147*9880d681SAndroid Build Coastguard Worker	%t1 = load i16, i16* @foo16
148*9880d681SAndroid Build Coastguard Worker	%t2 = and i16 %t1, %a
149*9880d681SAndroid Build Coastguard Worker	%t3 = icmp ne i16 %t2, 0
150*9880d681SAndroid Build Coastguard Worker	%t4 = zext i1 %t3 to i16
151*9880d681SAndroid Build Coastguard Worker	ret i16 %t4
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwmr:
154*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	r15, &foo16
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine i16 @bitwmm() nounwind {
157*9880d681SAndroid Build Coastguard Worker	%t1 = load i16, i16* @foo16
158*9880d681SAndroid Build Coastguard Worker	%t2 = load i16, i16* @bar16
159*9880d681SAndroid Build Coastguard Worker	%t3 = and i16 %t1, %t2
160*9880d681SAndroid Build Coastguard Worker	%t4 = icmp ne i16 %t3, 0
161*9880d681SAndroid Build Coastguard Worker	%t5 = zext i1 %t4 to i16
162*9880d681SAndroid Build Coastguard Worker	ret i16 %t5
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bitwmm:
165*9880d681SAndroid Build Coastguard Worker; CHECK: bit.w	&bar16, &foo16
166*9880d681SAndroid Build Coastguard Worker
167