xref: /llvm-project/llvm/test/CodeGen/PowerPC/p10-setbcr-ri.ll (revision 5403c59c608c08c8ecd4303763f08eb046eb5e4d)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \
3; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
4; RUN:     --check-prefixes=CHECK,CHECK-LE
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \
6; RUN:     -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \
7; RUN:     --check-prefixes=CHECK,CHECK-BE
8
9; This file does not contain many test cases involving comparisons and logical
10; comparisons (cmplwi, cmpldi). This is because alternative code is generated
11; when there is a compare (logical or not), followed by a sign or zero extend.
12; This codegen will be re-evaluated at a later time on whether or not it should
13; be emitted on P10.
14
15@globalVal = common dso_local local_unnamed_addr global i8 0, align 1
16@globalVal2 = common dso_local local_unnamed_addr global i32 0, align 4
17@globalVal3 = common dso_local local_unnamed_addr global i64 0, align 8
18@globalVal4 = common dso_local local_unnamed_addr global i16 0, align 2
19
20define dso_local signext i32 @setbcr1(i8 %a) {
21; CHECK-LABEL: setbcr1:
22; CHECK:       # %bb.0: # %entry
23; CHECK-NEXT:    clrlwi r3, r3, 24
24; CHECK-NEXT:    cmpwi r3, 1
25; CHECK-NEXT:    setbcr r3, eq
26; CHECK-NEXT:    blr
27entry:
28  %cmp = icmp ne i8 %a, 1
29  %conv = zext i1 %cmp to i32
30  ret i32 %conv
31}
32
33define dso_local signext i32 @setbcr2(i32 %a) {
34; CHECK-LABEL: setbcr2:
35; CHECK:       # %bb.0: # %entry
36; CHECK-NEXT:    cmpwi r3, 1
37; CHECK-NEXT:    setbcr r3, eq
38; CHECK-NEXT:    blr
39entry:
40  %cmp = icmp ne i32 %a, 1
41  %conv = zext i1 %cmp to i32
42  ret i32 %conv
43}
44
45define dso_local signext i32 @setbcr3(i64 %a) {
46; CHECK-LABEL: setbcr3:
47; CHECK:       # %bb.0: # %entry
48; CHECK-NEXT:    cmpdi r3, 1
49; CHECK-NEXT:    setbcr r3, eq
50; CHECK-NEXT:    blr
51entry:
52  %cmp = icmp ne i64 %a, 1
53  %conv = zext i1 %cmp to i32
54  ret i32 %conv
55}
56
57define dso_local signext i32 @setbcr4(i16 %a) {
58; CHECK-LABEL: setbcr4:
59; CHECK:       # %bb.0: # %entry
60; CHECK-NEXT:    clrlwi r3, r3, 16
61; CHECK-NEXT:    cmpwi r3, 1
62; CHECK-NEXT:    setbcr r3, eq
63; CHECK-NEXT:    blr
64entry:
65  %cmp = icmp ne i16 %a, 1
66  %conv = zext i1 %cmp to i32
67  ret i32 %conv
68}
69
70define signext i64 @setbcr5(i8 %a) {
71; CHECK-LABEL: setbcr5:
72; CHECK:       # %bb.0: # %entry
73; CHECK-NEXT:    clrlwi r3, r3, 24
74; CHECK-NEXT:    cmpwi r3, 1
75; CHECK-NEXT:    setbcr r3, eq
76; CHECK-NEXT:    blr
77entry:
78  %cmp = icmp ne i8 %a, 1
79  %conv = zext i1 %cmp to i64
80  ret i64 %conv
81}
82
83define signext i64 @setbcr6(i32 %a) {
84; CHECK-LABEL: setbcr6:
85; CHECK:       # %bb.0: # %entry
86; CHECK-NEXT:    cmpwi r3, 1
87; CHECK-NEXT:    setbcr r3, eq
88; CHECK-NEXT:    blr
89entry:
90  %cmp = icmp ne i32 %a, 1
91  %conv = zext i1 %cmp to i64
92  ret i64 %conv
93}
94
95define signext i64 @setbcr7(i64 %a) {
96; CHECK-LABEL: setbcr7:
97; CHECK:       # %bb.0: # %entry
98; CHECK-NEXT:    cmpdi r3, 1
99; CHECK-NEXT:    setbcr r3, eq
100; CHECK-NEXT:    blr
101entry:
102  %cmp = icmp ne i64 %a, 1
103  %conv = zext i1 %cmp to i64
104  ret i64 %conv
105}
106
107define signext i64 @setbcr8(i16 %a) {
108; CHECK-LABEL: setbcr8:
109; CHECK:       # %bb.0: # %entry
110; CHECK-NEXT:    clrlwi r3, r3, 16
111; CHECK-NEXT:    cmpwi r3, 1
112; CHECK-NEXT:    setbcr r3, eq
113; CHECK-NEXT:    blr
114entry:
115  %cmp = icmp ne i16 %a, 1
116  %conv = zext i1 %cmp to i64
117  ret i64 %conv
118}
119
120define dso_local void @setbcr9(i8 %a) {
121; CHECK-LE-LABEL: setbcr9:
122; CHECK-LE:       # %bb.0: # %entry
123; CHECK-LE-NEXT:    clrlwi r3, r3, 24
124; CHECK-LE-NEXT:    cmpwi r3, 1
125; CHECK-LE-NEXT:    setbcr r3, eq
126; CHECK-LE-NEXT:    pstb r3, globalVal@PCREL(0), 1
127; CHECK-LE-NEXT:    blr
128;
129; CHECK-BE-LABEL: setbcr9:
130; CHECK-BE:       # %bb.0: # %entry
131; CHECK-BE-NEXT:    clrlwi r3, r3, 24
132; CHECK-BE-NEXT:    addis r4, r2, globalVal@toc@ha
133; CHECK-BE-NEXT:    cmpwi r3, 1
134; CHECK-BE-NEXT:    setbcr r3, eq
135; CHECK-BE-NEXT:    stb r3, globalVal@toc@l(r4)
136; CHECK-BE-NEXT:    blr
137entry:
138  %cmp = icmp ne i8 %a, 1
139  %conv1 = zext i1 %cmp to i8
140  store i8 %conv1, ptr @globalVal, align 1
141  ret void
142}
143
144define dso_local void @setbcr10(i32 %a) {
145; CHECK-LE-LABEL: setbcr10:
146; CHECK-LE:       # %bb.0: # %entry
147; CHECK-LE-NEXT:    cmpwi r3, 1
148; CHECK-LE-NEXT:    setbcr r3, eq
149; CHECK-LE-NEXT:    pstw r3, globalVal2@PCREL(0), 1
150; CHECK-LE-NEXT:    blr
151;
152; CHECK-BE-LABEL: setbcr10:
153; CHECK-BE:       # %bb.0: # %entry
154; CHECK-BE-NEXT:    cmpwi r3, 1
155; CHECK-BE-NEXT:    addis r4, r2, globalVal2@toc@ha
156; CHECK-BE-NEXT:    setbcr r3, eq
157; CHECK-BE-NEXT:    stw r3, globalVal2@toc@l(r4)
158; CHECK-BE-NEXT:    blr
159entry:
160  %cmp = icmp ne i32 %a, 1
161  %conv1 = zext i1 %cmp to i32
162  store i32 %conv1, ptr @globalVal2, align 4
163  ret void
164}
165
166define dso_local void @setbcr11(i64 %a) {
167; CHECK-LE-LABEL: setbcr11:
168; CHECK-LE:       # %bb.0: # %entry
169; CHECK-LE-NEXT:    cmpdi r3, 1
170; CHECK-LE-NEXT:    setbcr r3, eq
171; CHECK-LE-NEXT:    pstd r3, globalVal3@PCREL(0), 1
172; CHECK-LE-NEXT:    blr
173;
174; CHECK-BE-LABEL: setbcr11:
175; CHECK-BE:       # %bb.0: # %entry
176; CHECK-BE-NEXT:    cmpdi r3, 1
177; CHECK-BE-NEXT:    addis r4, r2, globalVal3@toc@ha
178; CHECK-BE-NEXT:    setbcr r3, eq
179; CHECK-BE-NEXT:    std r3, globalVal3@toc@l(r4)
180; CHECK-BE-NEXT:    blr
181entry:
182  %cmp = icmp ne i64 %a, 1
183  %conv1 = zext i1 %cmp to i64
184  store i64 %conv1, ptr @globalVal3, align 8
185  ret void
186}
187
188define dso_local void @setbcr12(i16 %a) {
189; CHECK-LE-LABEL: setbcr12:
190; CHECK-LE:       # %bb.0: # %entry
191; CHECK-LE-NEXT:    clrlwi r3, r3, 16
192; CHECK-LE-NEXT:    cmpwi r3, 1
193; CHECK-LE-NEXT:    setbcr r3, eq
194; CHECK-LE-NEXT:    psth r3, globalVal4@PCREL(0), 1
195; CHECK-LE-NEXT:    blr
196;
197; CHECK-BE-LABEL: setbcr12:
198; CHECK-BE:       # %bb.0: # %entry
199; CHECK-BE-NEXT:    clrlwi r3, r3, 16
200; CHECK-BE-NEXT:    addis r4, r2, globalVal4@toc@ha
201; CHECK-BE-NEXT:    cmpwi r3, 1
202; CHECK-BE-NEXT:    setbcr r3, eq
203; CHECK-BE-NEXT:    sth r3, globalVal4@toc@l(r4)
204; CHECK-BE-NEXT:    blr
205entry:
206  %cmp = icmp ne i16 %a, 1
207  %conv1 = zext i1 %cmp to i16
208  store i16 %conv1, ptr @globalVal4, align 2
209  ret void
210}
211
212