xref: /llvm-project/llvm/test/CodeGen/RISCV/bittest.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1e68257fcSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2181dcbd3SCraig Topper; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
30f6b0461SSimon Pilgrim; RUN:   | FileCheck %s -check-prefixes=CHECK,RV32,RV32I
4e68257fcSCraig Topper; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
50f6b0461SSimon Pilgrim; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64,RV64I
6181dcbd3SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+zbs -verify-machineinstrs < %s \
7181dcbd3SCraig Topper; RUN:   | FileCheck %s -check-prefixes=CHECK,ZBS,RV32,RV32ZBS
8e68257fcSCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+zbs -verify-machineinstrs < %s \
9181dcbd3SCraig Topper; RUN:   | FileCheck %s -check-prefixes=CHECK,ZBS,RV64,RV64ZBS
1004a2baf5SPhilipp Tomsich; RUN: llc -mtriple=riscv32 -mattr=+xtheadbs -verify-machineinstrs < %s \
1104a2baf5SPhilipp Tomsich; RUN:   | FileCheck %s -check-prefixes=CHECK,XTHEADBS,RV32,RV32XTHEADBS
1204a2baf5SPhilipp Tomsich; RUN: llc -mtriple=riscv64 -mattr=+xtheadbs -verify-machineinstrs < %s \
1304a2baf5SPhilipp Tomsich; RUN:   | FileCheck %s -check-prefixes=CHECK,XTHEADBS,RV64,RV64XTHEADBS
14e68257fcSCraig Topper
15e68257fcSCraig Topperdefine signext i32 @bittest_7_i32(i32 signext %a) nounwind {
16181dcbd3SCraig Topper; CHECK-LABEL: bittest_7_i32:
17181dcbd3SCraig Topper; CHECK:       # %bb.0:
18181dcbd3SCraig Topper; CHECK-NEXT:    andi a0, a0, 128
19181dcbd3SCraig Topper; CHECK-NEXT:    seqz a0, a0
20181dcbd3SCraig Topper; CHECK-NEXT:    ret
21e68257fcSCraig Topper  %shr = lshr i32 %a, 7
22e68257fcSCraig Topper  %not = xor i32 %shr, -1
23e68257fcSCraig Topper  %and = and i32 %not, 1
24e68257fcSCraig Topper  ret i32 %and
25e68257fcSCraig Topper}
26e68257fcSCraig Topper
27e68257fcSCraig Topperdefine signext i32 @bittest_10_i32(i32 signext %a) nounwind {
28181dcbd3SCraig Topper; CHECK-LABEL: bittest_10_i32:
29181dcbd3SCraig Topper; CHECK:       # %bb.0:
30181dcbd3SCraig Topper; CHECK-NEXT:    andi a0, a0, 1024
31181dcbd3SCraig Topper; CHECK-NEXT:    seqz a0, a0
32181dcbd3SCraig Topper; CHECK-NEXT:    ret
33e68257fcSCraig Topper  %shr = lshr i32 %a, 10
34e68257fcSCraig Topper  %not = xor i32 %shr, -1
35e68257fcSCraig Topper  %and = and i32 %not, 1
36e68257fcSCraig Topper  ret i32 %and
37e68257fcSCraig Topper}
38e68257fcSCraig Topper
39e68257fcSCraig Topperdefine signext i32 @bittest_11_i32(i32 signext %a) nounwind {
400f6b0461SSimon Pilgrim; RV32I-LABEL: bittest_11_i32:
410f6b0461SSimon Pilgrim; RV32I:       # %bb.0:
420f6b0461SSimon Pilgrim; RV32I-NEXT:    not a0, a0
430f6b0461SSimon Pilgrim; RV32I-NEXT:    slli a0, a0, 20
440f6b0461SSimon Pilgrim; RV32I-NEXT:    srli a0, a0, 31
450f6b0461SSimon Pilgrim; RV32I-NEXT:    ret
460f6b0461SSimon Pilgrim;
470f6b0461SSimon Pilgrim; RV64I-LABEL: bittest_11_i32:
480f6b0461SSimon Pilgrim; RV64I:       # %bb.0:
490f6b0461SSimon Pilgrim; RV64I-NEXT:    not a0, a0
500f6b0461SSimon Pilgrim; RV64I-NEXT:    slli a0, a0, 52
510f6b0461SSimon Pilgrim; RV64I-NEXT:    srli a0, a0, 63
520f6b0461SSimon Pilgrim; RV64I-NEXT:    ret
53e68257fcSCraig Topper;
54181dcbd3SCraig Topper; ZBS-LABEL: bittest_11_i32:
55181dcbd3SCraig Topper; ZBS:       # %bb.0:
560f6b0461SSimon Pilgrim; ZBS-NEXT:    not a0, a0
57181dcbd3SCraig Topper; ZBS-NEXT:    bexti a0, a0, 11
58181dcbd3SCraig Topper; ZBS-NEXT:    ret
5904a2baf5SPhilipp Tomsich;
6004a2baf5SPhilipp Tomsich; XTHEADBS-LABEL: bittest_11_i32:
6104a2baf5SPhilipp Tomsich; XTHEADBS:       # %bb.0:
6204a2baf5SPhilipp Tomsich; XTHEADBS-NEXT:    not a0, a0
6304a2baf5SPhilipp Tomsich; XTHEADBS-NEXT:    th.tst a0, a0, 11
6404a2baf5SPhilipp Tomsich; XTHEADBS-NEXT:    ret
65e68257fcSCraig Topper  %shr = lshr i32 %a, 11
66e68257fcSCraig Topper  %not = xor i32 %shr, -1
67e68257fcSCraig Topper  %and = and i32 %not, 1
68e68257fcSCraig Topper  ret i32 %and
69e68257fcSCraig Topper}
70e68257fcSCraig Topper
71e68257fcSCraig Topperdefine signext i32 @bittest_31_i32(i32 signext %a) nounwind {
72181dcbd3SCraig Topper; RV32-LABEL: bittest_31_i32:
73181dcbd3SCraig Topper; RV32:       # %bb.0:
74181dcbd3SCraig Topper; RV32-NEXT:    not a0, a0
75181dcbd3SCraig Topper; RV32-NEXT:    srli a0, a0, 31
76181dcbd3SCraig Topper; RV32-NEXT:    ret
77e68257fcSCraig Topper;
78181dcbd3SCraig Topper; RV64-LABEL: bittest_31_i32:
79181dcbd3SCraig Topper; RV64:       # %bb.0:
80181dcbd3SCraig Topper; RV64-NEXT:    not a0, a0
81181dcbd3SCraig Topper; RV64-NEXT:    srliw a0, a0, 31
82181dcbd3SCraig Topper; RV64-NEXT:    ret
83e68257fcSCraig Topper  %shr = lshr i32 %a, 31
84e68257fcSCraig Topper  %not = xor i32 %shr, -1
85e68257fcSCraig Topper  %and = and i32 %not, 1
86e68257fcSCraig Topper  ret i32 %and
87e68257fcSCraig Topper}
88e68257fcSCraig Topper
89e68257fcSCraig Topperdefine i64 @bittest_7_i64(i64 %a) nounwind {
90181dcbd3SCraig Topper; RV32-LABEL: bittest_7_i64:
91181dcbd3SCraig Topper; RV32:       # %bb.0:
92181dcbd3SCraig Topper; RV32-NEXT:    andi a0, a0, 128
93181dcbd3SCraig Topper; RV32-NEXT:    seqz a0, a0
94181dcbd3SCraig Topper; RV32-NEXT:    li a1, 0
95181dcbd3SCraig Topper; RV32-NEXT:    ret
96e68257fcSCraig Topper;
97181dcbd3SCraig Topper; RV64-LABEL: bittest_7_i64:
98181dcbd3SCraig Topper; RV64:       # %bb.0:
99181dcbd3SCraig Topper; RV64-NEXT:    andi a0, a0, 128
100181dcbd3SCraig Topper; RV64-NEXT:    seqz a0, a0
101181dcbd3SCraig Topper; RV64-NEXT:    ret
102e68257fcSCraig Topper  %shr = lshr i64 %a, 7
103e68257fcSCraig Topper  %not = xor i64 %shr, -1
104e68257fcSCraig Topper  %and = and i64 %not, 1
105e68257fcSCraig Topper  ret i64 %and
106e68257fcSCraig Topper}
107e68257fcSCraig Topper
108e68257fcSCraig Topperdefine i64 @bittest_10_i64(i64 %a) nounwind {
109181dcbd3SCraig Topper; RV32-LABEL: bittest_10_i64:
110181dcbd3SCraig Topper; RV32:       # %bb.0:
111181dcbd3SCraig Topper; RV32-NEXT:    andi a0, a0, 1024
112181dcbd3SCraig Topper; RV32-NEXT:    seqz a0, a0
113181dcbd3SCraig Topper; RV32-NEXT:    li a1, 0
114181dcbd3SCraig Topper; RV32-NEXT:    ret
115e68257fcSCraig Topper;
116181dcbd3SCraig Topper; RV64-LABEL: bittest_10_i64:
117181dcbd3SCraig Topper; RV64:       # %bb.0:
118181dcbd3SCraig Topper; RV64-NEXT:    andi a0, a0, 1024
119181dcbd3SCraig Topper; RV64-NEXT:    seqz a0, a0
120181dcbd3SCraig Topper; RV64-NEXT:    ret
121e68257fcSCraig Topper  %shr = lshr i64 %a, 10
122e68257fcSCraig Topper  %not = xor i64 %shr, -1
123e68257fcSCraig Topper  %and = and i64 %not, 1
124e68257fcSCraig Topper  ret i64 %and
125e68257fcSCraig Topper}
126e68257fcSCraig Topper
127e68257fcSCraig Topperdefine i64 @bittest_11_i64(i64 %a) nounwind {
128181dcbd3SCraig Topper; RV32I-LABEL: bittest_11_i64:
129181dcbd3SCraig Topper; RV32I:       # %bb.0:
130181dcbd3SCraig Topper; RV32I-NEXT:    not a0, a0
1310f6b0461SSimon Pilgrim; RV32I-NEXT:    slli a0, a0, 20
1320f6b0461SSimon Pilgrim; RV32I-NEXT:    srli a0, a0, 31
133181dcbd3SCraig Topper; RV32I-NEXT:    li a1, 0
134181dcbd3SCraig Topper; RV32I-NEXT:    ret
135181dcbd3SCraig Topper;
136e68257fcSCraig Topper; RV64I-LABEL: bittest_11_i64:
137e68257fcSCraig Topper; RV64I:       # %bb.0:
138e68257fcSCraig Topper; RV64I-NEXT:    not a0, a0
1390f6b0461SSimon Pilgrim; RV64I-NEXT:    slli a0, a0, 52
1400f6b0461SSimon Pilgrim; RV64I-NEXT:    srli a0, a0, 63
141e68257fcSCraig Topper; RV64I-NEXT:    ret
142e68257fcSCraig Topper;
143181dcbd3SCraig Topper; RV32ZBS-LABEL: bittest_11_i64:
144181dcbd3SCraig Topper; RV32ZBS:       # %bb.0:
1450f6b0461SSimon Pilgrim; RV32ZBS-NEXT:    not a0, a0
146181dcbd3SCraig Topper; RV32ZBS-NEXT:    bexti a0, a0, 11
147181dcbd3SCraig Topper; RV32ZBS-NEXT:    li a1, 0
148181dcbd3SCraig Topper; RV32ZBS-NEXT:    ret
149181dcbd3SCraig Topper;
150e68257fcSCraig Topper; RV64ZBS-LABEL: bittest_11_i64:
151e68257fcSCraig Topper; RV64ZBS:       # %bb.0:
1520f6b0461SSimon Pilgrim; RV64ZBS-NEXT:    not a0, a0
153e68257fcSCraig Topper; RV64ZBS-NEXT:    bexti a0, a0, 11
154e68257fcSCraig Topper; RV64ZBS-NEXT:    ret
15504a2baf5SPhilipp Tomsich;
15604a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bittest_11_i64:
15704a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
15804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    not a0, a0
15904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    th.tst a0, a0, 11
16004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    li a1, 0
16104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
16204a2baf5SPhilipp Tomsich;
16304a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_11_i64:
16404a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
16504a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    not a0, a0
16604a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    th.tst a0, a0, 11
16704a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
168e68257fcSCraig Topper  %shr = lshr i64 %a, 11
169e68257fcSCraig Topper  %not = xor i64 %shr, -1
170e68257fcSCraig Topper  %and = and i64 %not, 1
171e68257fcSCraig Topper  ret i64 %and
172e68257fcSCraig Topper}
173e68257fcSCraig Topper
174e68257fcSCraig Topperdefine i64 @bittest_31_i64(i64 %a) nounwind {
175181dcbd3SCraig Topper; RV32-LABEL: bittest_31_i64:
176181dcbd3SCraig Topper; RV32:       # %bb.0:
177181dcbd3SCraig Topper; RV32-NEXT:    not a0, a0
178181dcbd3SCraig Topper; RV32-NEXT:    srli a0, a0, 31
179181dcbd3SCraig Topper; RV32-NEXT:    li a1, 0
180181dcbd3SCraig Topper; RV32-NEXT:    ret
181181dcbd3SCraig Topper;
18254716084SAlex Bradbury; RV64I-LABEL: bittest_31_i64:
18354716084SAlex Bradbury; RV64I:       # %bb.0:
18454716084SAlex Bradbury; RV64I-NEXT:    not a0, a0
18554716084SAlex Bradbury; RV64I-NEXT:    srliw a0, a0, 31
18654716084SAlex Bradbury; RV64I-NEXT:    ret
18754716084SAlex Bradbury;
18854716084SAlex Bradbury; RV64ZBS-LABEL: bittest_31_i64:
18954716084SAlex Bradbury; RV64ZBS:       # %bb.0:
19054716084SAlex Bradbury; RV64ZBS-NEXT:    not a0, a0
19154716084SAlex Bradbury; RV64ZBS-NEXT:    bexti a0, a0, 31
19254716084SAlex Bradbury; RV64ZBS-NEXT:    ret
19304a2baf5SPhilipp Tomsich;
19404a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_31_i64:
19504a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
19604a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    not a0, a0
19704a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    th.tst a0, a0, 31
19804a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
199e68257fcSCraig Topper  %shr = lshr i64 %a, 31
200e68257fcSCraig Topper  %not = xor i64 %shr, -1
201e68257fcSCraig Topper  %and = and i64 %not, 1
202e68257fcSCraig Topper  ret i64 %and
203e68257fcSCraig Topper}
204e68257fcSCraig Topper
205e68257fcSCraig Topperdefine i64 @bittest_32_i64(i64 %a) nounwind {
206181dcbd3SCraig Topper; RV32-LABEL: bittest_32_i64:
207181dcbd3SCraig Topper; RV32:       # %bb.0:
208181dcbd3SCraig Topper; RV32-NEXT:    not a0, a1
209181dcbd3SCraig Topper; RV32-NEXT:    andi a0, a0, 1
210181dcbd3SCraig Topper; RV32-NEXT:    li a1, 0
211181dcbd3SCraig Topper; RV32-NEXT:    ret
212181dcbd3SCraig Topper;
213e68257fcSCraig Topper; RV64I-LABEL: bittest_32_i64:
214e68257fcSCraig Topper; RV64I:       # %bb.0:
215e68257fcSCraig Topper; RV64I-NEXT:    not a0, a0
2160f6b0461SSimon Pilgrim; RV64I-NEXT:    slli a0, a0, 31
2170f6b0461SSimon Pilgrim; RV64I-NEXT:    srli a0, a0, 63
218e68257fcSCraig Topper; RV64I-NEXT:    ret
219e68257fcSCraig Topper;
220e68257fcSCraig Topper; RV64ZBS-LABEL: bittest_32_i64:
221e68257fcSCraig Topper; RV64ZBS:       # %bb.0:
2220f6b0461SSimon Pilgrim; RV64ZBS-NEXT:    not a0, a0
223e68257fcSCraig Topper; RV64ZBS-NEXT:    bexti a0, a0, 32
224e68257fcSCraig Topper; RV64ZBS-NEXT:    ret
22504a2baf5SPhilipp Tomsich;
22604a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_32_i64:
22704a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
22804a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    not a0, a0
22904a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    th.tst a0, a0, 32
23004a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
231e68257fcSCraig Topper  %shr = lshr i64 %a, 32
232e68257fcSCraig Topper  %not = xor i64 %shr, -1
233e68257fcSCraig Topper  %and = and i64 %not, 1
234e68257fcSCraig Topper  ret i64 %and
235e68257fcSCraig Topper}
236e68257fcSCraig Topper
237e68257fcSCraig Topperdefine i64 @bittest_63_i64(i64 %a) nounwind {
238181dcbd3SCraig Topper; RV32-LABEL: bittest_63_i64:
239181dcbd3SCraig Topper; RV32:       # %bb.0:
240181dcbd3SCraig Topper; RV32-NEXT:    not a0, a1
241181dcbd3SCraig Topper; RV32-NEXT:    srli a0, a0, 31
242181dcbd3SCraig Topper; RV32-NEXT:    li a1, 0
243181dcbd3SCraig Topper; RV32-NEXT:    ret
244e68257fcSCraig Topper;
245181dcbd3SCraig Topper; RV64-LABEL: bittest_63_i64:
246181dcbd3SCraig Topper; RV64:       # %bb.0:
247181dcbd3SCraig Topper; RV64-NEXT:    not a0, a0
248181dcbd3SCraig Topper; RV64-NEXT:    srli a0, a0, 63
249181dcbd3SCraig Topper; RV64-NEXT:    ret
250e68257fcSCraig Topper  %shr = lshr i64 %a, 63
251e68257fcSCraig Topper  %not = xor i64 %shr, -1
252e68257fcSCraig Topper  %and = and i64 %not, 1
253e68257fcSCraig Topper  ret i64 %and
254e68257fcSCraig Topper}
2550ebb02b9SCraig Topper
2560ebb02b9SCraig Topper; Make sure we use (andi (srl X, Y), 1) or bext.
2570ebb02b9SCraig Topperdefine i1 @bittest_constant_by_var_shr_i32(i32 signext %b) nounwind {
2580ebb02b9SCraig Topper; RV32I-LABEL: bittest_constant_by_var_shr_i32:
2590ebb02b9SCraig Topper; RV32I:       # %bb.0:
2600ebb02b9SCraig Topper; RV32I-NEXT:    lui a1, 301408
2610ebb02b9SCraig Topper; RV32I-NEXT:    addi a1, a1, 722
2620ebb02b9SCraig Topper; RV32I-NEXT:    srl a0, a1, a0
2630ebb02b9SCraig Topper; RV32I-NEXT:    andi a0, a0, 1
2640ebb02b9SCraig Topper; RV32I-NEXT:    ret
2650ebb02b9SCraig Topper;
2660ebb02b9SCraig Topper; RV64I-LABEL: bittest_constant_by_var_shr_i32:
2670ebb02b9SCraig Topper; RV64I:       # %bb.0:
2680ebb02b9SCraig Topper; RV64I-NEXT:    lui a1, 301408
26986240751SPhilip Reames; RV64I-NEXT:    addi a1, a1, 722
2700ebb02b9SCraig Topper; RV64I-NEXT:    srlw a0, a1, a0
2710ebb02b9SCraig Topper; RV64I-NEXT:    andi a0, a0, 1
2720ebb02b9SCraig Topper; RV64I-NEXT:    ret
2730ebb02b9SCraig Topper;
2740ebb02b9SCraig Topper; RV32ZBS-LABEL: bittest_constant_by_var_shr_i32:
2750ebb02b9SCraig Topper; RV32ZBS:       # %bb.0:
2760ebb02b9SCraig Topper; RV32ZBS-NEXT:    lui a1, 301408
2770ebb02b9SCraig Topper; RV32ZBS-NEXT:    addi a1, a1, 722
2780ebb02b9SCraig Topper; RV32ZBS-NEXT:    bext a0, a1, a0
2790ebb02b9SCraig Topper; RV32ZBS-NEXT:    ret
2800ebb02b9SCraig Topper;
2810ebb02b9SCraig Topper; RV64ZBS-LABEL: bittest_constant_by_var_shr_i32:
2820ebb02b9SCraig Topper; RV64ZBS:       # %bb.0:
2830ebb02b9SCraig Topper; RV64ZBS-NEXT:    lui a1, 301408
2840ebb02b9SCraig Topper; RV64ZBS-NEXT:    addiw a1, a1, 722
2850ebb02b9SCraig Topper; RV64ZBS-NEXT:    bext a0, a1, a0
2860ebb02b9SCraig Topper; RV64ZBS-NEXT:    ret
28704a2baf5SPhilipp Tomsich;
28804a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bittest_constant_by_var_shr_i32:
28904a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
29004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    lui a1, 301408
29104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    addi a1, a1, 722
29204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srl a0, a1, a0
29304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    andi a0, a0, 1
29404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
29504a2baf5SPhilipp Tomsich;
29604a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_constant_by_var_shr_i32:
29704a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
29804a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    lui a1, 301408
29986240751SPhilip Reames; RV64XTHEADBS-NEXT:    addi a1, a1, 722
30004a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    srlw a0, a1, a0
30104a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    andi a0, a0, 1
30204a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
3030ebb02b9SCraig Topper  %shl = lshr i32 1234567890, %b
3040ebb02b9SCraig Topper  %and = and i32 %shl, 1
3050ebb02b9SCraig Topper  %cmp = icmp ne i32 %and, 0
3060ebb02b9SCraig Topper  ret i1 %cmp
3070ebb02b9SCraig Topper}
3080ebb02b9SCraig Topper
3090ebb02b9SCraig Topper; Make sure we use (andi (srl X, Y), 1) or bext.
3100ebb02b9SCraig Topperdefine i1 @bittest_constant_by_var_shl_i32(i32 signext %b) nounwind {
3110ebb02b9SCraig Topper; RV32I-LABEL: bittest_constant_by_var_shl_i32:
3120ebb02b9SCraig Topper; RV32I:       # %bb.0:
3130ebb02b9SCraig Topper; RV32I-NEXT:    lui a1, 301408
3140ebb02b9SCraig Topper; RV32I-NEXT:    addi a1, a1, 722
3150ebb02b9SCraig Topper; RV32I-NEXT:    srl a0, a1, a0
3160ebb02b9SCraig Topper; RV32I-NEXT:    andi a0, a0, 1
3170ebb02b9SCraig Topper; RV32I-NEXT:    ret
3180ebb02b9SCraig Topper;
3190ebb02b9SCraig Topper; RV64I-LABEL: bittest_constant_by_var_shl_i32:
3200ebb02b9SCraig Topper; RV64I:       # %bb.0:
3210ebb02b9SCraig Topper; RV64I-NEXT:    lui a1, 301408
32286240751SPhilip Reames; RV64I-NEXT:    addi a1, a1, 722
3230ebb02b9SCraig Topper; RV64I-NEXT:    srlw a0, a1, a0
3240ebb02b9SCraig Topper; RV64I-NEXT:    andi a0, a0, 1
3250ebb02b9SCraig Topper; RV64I-NEXT:    ret
3260ebb02b9SCraig Topper;
3270ebb02b9SCraig Topper; RV32ZBS-LABEL: bittest_constant_by_var_shl_i32:
3280ebb02b9SCraig Topper; RV32ZBS:       # %bb.0:
3290ebb02b9SCraig Topper; RV32ZBS-NEXT:    lui a1, 301408
3300ebb02b9SCraig Topper; RV32ZBS-NEXT:    addi a1, a1, 722
3310ebb02b9SCraig Topper; RV32ZBS-NEXT:    bext a0, a1, a0
3320ebb02b9SCraig Topper; RV32ZBS-NEXT:    ret
3330ebb02b9SCraig Topper;
3340ebb02b9SCraig Topper; RV64ZBS-LABEL: bittest_constant_by_var_shl_i32:
3350ebb02b9SCraig Topper; RV64ZBS:       # %bb.0:
3360ebb02b9SCraig Topper; RV64ZBS-NEXT:    lui a1, 301408
3370ebb02b9SCraig Topper; RV64ZBS-NEXT:    addiw a1, a1, 722
3380ebb02b9SCraig Topper; RV64ZBS-NEXT:    bext a0, a1, a0
3390ebb02b9SCraig Topper; RV64ZBS-NEXT:    ret
34004a2baf5SPhilipp Tomsich;
34104a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bittest_constant_by_var_shl_i32:
34204a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
34304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    lui a1, 301408
34404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    addi a1, a1, 722
34504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srl a0, a1, a0
34604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    andi a0, a0, 1
34704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
34804a2baf5SPhilipp Tomsich;
34904a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_constant_by_var_shl_i32:
35004a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
35104a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    lui a1, 301408
35286240751SPhilip Reames; RV64XTHEADBS-NEXT:    addi a1, a1, 722
35304a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    srlw a0, a1, a0
35404a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    andi a0, a0, 1
35504a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
3560ebb02b9SCraig Topper  %shl = shl i32 1, %b
3570ebb02b9SCraig Topper  %and = and i32 %shl, 1234567890
3580ebb02b9SCraig Topper  %cmp = icmp ne i32 %and, 0
3590ebb02b9SCraig Topper  ret i1 %cmp
3600ebb02b9SCraig Topper}
3610ebb02b9SCraig Topper
3620ebb02b9SCraig Topper; Make sure we use (andi (srl X, Y), 1) or bext.
3630ebb02b9SCraig Topperdefine i1 @bittest_constant_by_var_shr_i64(i64 %b) nounwind {
3640ebb02b9SCraig Topper; RV32-LABEL: bittest_constant_by_var_shr_i64:
3650ebb02b9SCraig Topper; RV32:       # %bb.0:
3660ebb02b9SCraig Topper; RV32-NEXT:    lui a1, 301408
3670ebb02b9SCraig Topper; RV32-NEXT:    addi a1, a1, 722
3681c41d0cbSPhilip Reames; RV32-NEXT:    srl a1, a1, a0
3691c41d0cbSPhilip Reames; RV32-NEXT:    addi a0, a0, -32
370b6ea46feSLiaoChunyu; RV32-NEXT:    srli a0, a0, 31
3711c41d0cbSPhilip Reames; RV32-NEXT:    and a0, a0, a1
3720ebb02b9SCraig Topper; RV32-NEXT:    ret
3730ebb02b9SCraig Topper;
3740ebb02b9SCraig Topper; RV64I-LABEL: bittest_constant_by_var_shr_i64:
3750ebb02b9SCraig Topper; RV64I:       # %bb.0:
3760ebb02b9SCraig Topper; RV64I-NEXT:    lui a1, 301408
3770ebb02b9SCraig Topper; RV64I-NEXT:    addiw a1, a1, 722
3780ebb02b9SCraig Topper; RV64I-NEXT:    srl a0, a1, a0
3790ebb02b9SCraig Topper; RV64I-NEXT:    andi a0, a0, 1
3800ebb02b9SCraig Topper; RV64I-NEXT:    ret
3810ebb02b9SCraig Topper;
3820ebb02b9SCraig Topper; RV64ZBS-LABEL: bittest_constant_by_var_shr_i64:
3830ebb02b9SCraig Topper; RV64ZBS:       # %bb.0:
3840ebb02b9SCraig Topper; RV64ZBS-NEXT:    lui a1, 301408
3850ebb02b9SCraig Topper; RV64ZBS-NEXT:    addiw a1, a1, 722
3860ebb02b9SCraig Topper; RV64ZBS-NEXT:    bext a0, a1, a0
3870ebb02b9SCraig Topper; RV64ZBS-NEXT:    ret
38804a2baf5SPhilipp Tomsich;
38904a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_constant_by_var_shr_i64:
39004a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
39104a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    lui a1, 301408
39204a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    addiw a1, a1, 722
39304a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    srl a0, a1, a0
39404a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    andi a0, a0, 1
39504a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
3960ebb02b9SCraig Topper  %shl = lshr i64 1234567890, %b
3970ebb02b9SCraig Topper  %and = and i64 %shl, 1
3980ebb02b9SCraig Topper  %cmp = icmp ne i64 %and, 0
3990ebb02b9SCraig Topper  ret i1 %cmp
4000ebb02b9SCraig Topper}
4010ebb02b9SCraig Topper
4020ebb02b9SCraig Topper; Make sure we use (andi (srl X, Y), 1) or bext.
4030ebb02b9SCraig Topperdefine i1 @bittest_constant_by_var_shl_i64(i64 %b) nounwind {
4040ebb02b9SCraig Topper; RV32-LABEL: bittest_constant_by_var_shl_i64:
4050ebb02b9SCraig Topper; RV32:       # %bb.0:
4060ebb02b9SCraig Topper; RV32-NEXT:    lui a1, 301408
4070ebb02b9SCraig Topper; RV32-NEXT:    addi a1, a1, 722
4081c41d0cbSPhilip Reames; RV32-NEXT:    srl a1, a1, a0
4091c41d0cbSPhilip Reames; RV32-NEXT:    addi a0, a0, -32
410b6ea46feSLiaoChunyu; RV32-NEXT:    srli a0, a0, 31
4111c41d0cbSPhilip Reames; RV32-NEXT:    and a0, a0, a1
4120ebb02b9SCraig Topper; RV32-NEXT:    ret
4130ebb02b9SCraig Topper;
4140ebb02b9SCraig Topper; RV64I-LABEL: bittest_constant_by_var_shl_i64:
4150ebb02b9SCraig Topper; RV64I:       # %bb.0:
4160ebb02b9SCraig Topper; RV64I-NEXT:    lui a1, 301408
4170ebb02b9SCraig Topper; RV64I-NEXT:    addiw a1, a1, 722
4180ebb02b9SCraig Topper; RV64I-NEXT:    srl a0, a1, a0
4190ebb02b9SCraig Topper; RV64I-NEXT:    andi a0, a0, 1
4200ebb02b9SCraig Topper; RV64I-NEXT:    ret
4210ebb02b9SCraig Topper;
4220ebb02b9SCraig Topper; RV64ZBS-LABEL: bittest_constant_by_var_shl_i64:
4230ebb02b9SCraig Topper; RV64ZBS:       # %bb.0:
4240ebb02b9SCraig Topper; RV64ZBS-NEXT:    lui a1, 301408
4250ebb02b9SCraig Topper; RV64ZBS-NEXT:    addiw a1, a1, 722
4260ebb02b9SCraig Topper; RV64ZBS-NEXT:    bext a0, a1, a0
4270ebb02b9SCraig Topper; RV64ZBS-NEXT:    ret
42804a2baf5SPhilipp Tomsich;
42904a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_constant_by_var_shl_i64:
43004a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
43104a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    lui a1, 301408
43204a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    addiw a1, a1, 722
43304a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    srl a0, a1, a0
43404a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    andi a0, a0, 1
43504a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
4360ebb02b9SCraig Topper  %shl = shl i64 1, %b
4370ebb02b9SCraig Topper  %and = and i64 %shl, 1234567890
4380ebb02b9SCraig Topper  %cmp = icmp ne i64 %and, 0
4390ebb02b9SCraig Topper  ret i1 %cmp
4400ebb02b9SCraig Topper}
4410ebb02b9SCraig Topper
4420ebb02b9SCraig Topper; We want to use (andi (srl X, Y), 1) or bext before the beqz.
4430ebb02b9SCraig Topperdefine void @bittest_switch(i32 signext %0) {
4440ebb02b9SCraig Topper; RV32I-LABEL: bittest_switch:
4450ebb02b9SCraig Topper; RV32I:       # %bb.0:
4460ebb02b9SCraig Topper; RV32I-NEXT:    li a1, 31
4470ebb02b9SCraig Topper; RV32I-NEXT:    bltu a1, a0, .LBB14_3
4480ebb02b9SCraig Topper; RV32I-NEXT:  # %bb.1:
4490ebb02b9SCraig Topper; RV32I-NEXT:    lui a1, 524291
4500ebb02b9SCraig Topper; RV32I-NEXT:    addi a1, a1, 768
4510ebb02b9SCraig Topper; RV32I-NEXT:    srl a0, a1, a0
4520ebb02b9SCraig Topper; RV32I-NEXT:    andi a0, a0, 1
4530ebb02b9SCraig Topper; RV32I-NEXT:    beqz a0, .LBB14_3
4540ebb02b9SCraig Topper; RV32I-NEXT:  # %bb.2:
455eabaee0cSFangrui Song; RV32I-NEXT:    tail bar
4560ebb02b9SCraig Topper; RV32I-NEXT:  .LBB14_3:
4570ebb02b9SCraig Topper; RV32I-NEXT:    ret
4580ebb02b9SCraig Topper;
4590ebb02b9SCraig Topper; RV64I-LABEL: bittest_switch:
4600ebb02b9SCraig Topper; RV64I:       # %bb.0:
4610ebb02b9SCraig Topper; RV64I-NEXT:    li a1, 31
4620ebb02b9SCraig Topper; RV64I-NEXT:    bltu a1, a0, .LBB14_3
4630ebb02b9SCraig Topper; RV64I-NEXT:  # %bb.1:
4640ebb02b9SCraig Topper; RV64I-NEXT:    lui a1, 2048
4650ebb02b9SCraig Topper; RV64I-NEXT:    addiw a1, a1, 51
4660ebb02b9SCraig Topper; RV64I-NEXT:    slli a1, a1, 8
4670ebb02b9SCraig Topper; RV64I-NEXT:    srl a0, a1, a0
4680ebb02b9SCraig Topper; RV64I-NEXT:    andi a0, a0, 1
4690ebb02b9SCraig Topper; RV64I-NEXT:    beqz a0, .LBB14_3
4700ebb02b9SCraig Topper; RV64I-NEXT:  # %bb.2:
471eabaee0cSFangrui Song; RV64I-NEXT:    tail bar
4720ebb02b9SCraig Topper; RV64I-NEXT:  .LBB14_3:
4730ebb02b9SCraig Topper; RV64I-NEXT:    ret
4740ebb02b9SCraig Topper;
4750ebb02b9SCraig Topper; RV32ZBS-LABEL: bittest_switch:
4760ebb02b9SCraig Topper; RV32ZBS:       # %bb.0:
4770ebb02b9SCraig Topper; RV32ZBS-NEXT:    li a1, 31
4780ebb02b9SCraig Topper; RV32ZBS-NEXT:    bltu a1, a0, .LBB14_3
4790ebb02b9SCraig Topper; RV32ZBS-NEXT:  # %bb.1:
4800ebb02b9SCraig Topper; RV32ZBS-NEXT:    lui a1, 524291
4810ebb02b9SCraig Topper; RV32ZBS-NEXT:    addi a1, a1, 768
4820ebb02b9SCraig Topper; RV32ZBS-NEXT:    bext a0, a1, a0
4830ebb02b9SCraig Topper; RV32ZBS-NEXT:    beqz a0, .LBB14_3
4840ebb02b9SCraig Topper; RV32ZBS-NEXT:  # %bb.2:
485eabaee0cSFangrui Song; RV32ZBS-NEXT:    tail bar
4860ebb02b9SCraig Topper; RV32ZBS-NEXT:  .LBB14_3:
4870ebb02b9SCraig Topper; RV32ZBS-NEXT:    ret
4880ebb02b9SCraig Topper;
4890ebb02b9SCraig Topper; RV64ZBS-LABEL: bittest_switch:
4900ebb02b9SCraig Topper; RV64ZBS:       # %bb.0:
4910ebb02b9SCraig Topper; RV64ZBS-NEXT:    li a1, 31
4920ebb02b9SCraig Topper; RV64ZBS-NEXT:    bltu a1, a0, .LBB14_3
4930ebb02b9SCraig Topper; RV64ZBS-NEXT:  # %bb.1:
4940ebb02b9SCraig Topper; RV64ZBS-NEXT:    lui a1, 2048
4950ebb02b9SCraig Topper; RV64ZBS-NEXT:    addiw a1, a1, 51
4960ebb02b9SCraig Topper; RV64ZBS-NEXT:    slli a1, a1, 8
4970ebb02b9SCraig Topper; RV64ZBS-NEXT:    bext a0, a1, a0
4980ebb02b9SCraig Topper; RV64ZBS-NEXT:    beqz a0, .LBB14_3
4990ebb02b9SCraig Topper; RV64ZBS-NEXT:  # %bb.2:
500eabaee0cSFangrui Song; RV64ZBS-NEXT:    tail bar
5010ebb02b9SCraig Topper; RV64ZBS-NEXT:  .LBB14_3:
5020ebb02b9SCraig Topper; RV64ZBS-NEXT:    ret
50304a2baf5SPhilipp Tomsich;
50404a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bittest_switch:
50504a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
50604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    li a1, 31
50704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    bltu a1, a0, .LBB14_3
50804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
50904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    lui a1, 524291
51004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    addi a1, a1, 768
51104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srl a0, a1, a0
51204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    andi a0, a0, 1
51304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    beqz a0, .LBB14_3
51404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.2:
515eabaee0cSFangrui Song; RV32XTHEADBS-NEXT:    tail bar
51604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB14_3:
51704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
51804a2baf5SPhilipp Tomsich;
51904a2baf5SPhilipp Tomsich; RV64XTHEADBS-LABEL: bittest_switch:
52004a2baf5SPhilipp Tomsich; RV64XTHEADBS:       # %bb.0:
52104a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    li a1, 31
52204a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    bltu a1, a0, .LBB14_3
52304a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:  # %bb.1:
52404a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    lui a1, 2048
52504a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    addiw a1, a1, 51
52604a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    slli a1, a1, 8
52704a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    srl a0, a1, a0
52804a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    andi a0, a0, 1
52904a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    beqz a0, .LBB14_3
53004a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:  # %bb.2:
531eabaee0cSFangrui Song; RV64XTHEADBS-NEXT:    tail bar
53204a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:  .LBB14_3:
53304a2baf5SPhilipp Tomsich; RV64XTHEADBS-NEXT:    ret
5340ebb02b9SCraig Topper  switch i32 %0, label %3 [
5350ebb02b9SCraig Topper    i32 8, label %2
5360ebb02b9SCraig Topper    i32 9, label %2
5370ebb02b9SCraig Topper    i32 12, label %2
5380ebb02b9SCraig Topper    i32 13, label %2
5390ebb02b9SCraig Topper    i32 31, label %2
5400ebb02b9SCraig Topper  ]
5410ebb02b9SCraig Topper
5420ebb02b9SCraig Topper2:
5430ebb02b9SCraig Topper  tail call void @bar()
5440ebb02b9SCraig Topper  br label %3
5450ebb02b9SCraig Topper
5460ebb02b9SCraig Topper3:
5470ebb02b9SCraig Topper  ret void
5480ebb02b9SCraig Topper}
5490ebb02b9SCraig Topper
5500ebb02b9SCraig Topperdeclare void @bar()
5518983db15SCraig Topper
5528983db15SCraig Topperdefine signext i32 @bit_10_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
5538983db15SCraig Topper; CHECK-LABEL: bit_10_z_select_i32:
5548983db15SCraig Topper; CHECK:       # %bb.0:
5558983db15SCraig Topper; CHECK-NEXT:    andi a3, a0, 1024
5568983db15SCraig Topper; CHECK-NEXT:    mv a0, a1
5578983db15SCraig Topper; CHECK-NEXT:    beqz a3, .LBB15_2
5588983db15SCraig Topper; CHECK-NEXT:  # %bb.1:
5598983db15SCraig Topper; CHECK-NEXT:    mv a0, a2
5608983db15SCraig Topper; CHECK-NEXT:  .LBB15_2:
5618983db15SCraig Topper; CHECK-NEXT:    ret
5628983db15SCraig Topper  %1 = and i32 %a, 1024
5638983db15SCraig Topper  %2 = icmp eq i32 %1, 0
5648983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
5658983db15SCraig Topper  ret i32 %3
5668983db15SCraig Topper}
5678983db15SCraig Topper
5688983db15SCraig Topperdefine signext i32 @bit_10_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
569add17fc8SCraig Topper; RV32-LABEL: bit_10_nz_select_i32:
570add17fc8SCraig Topper; RV32:       # %bb.0:
571add17fc8SCraig Topper; RV32-NEXT:    slli a3, a0, 21
572add17fc8SCraig Topper; RV32-NEXT:    mv a0, a1
573add17fc8SCraig Topper; RV32-NEXT:    bltz a3, .LBB16_2
574add17fc8SCraig Topper; RV32-NEXT:  # %bb.1:
575add17fc8SCraig Topper; RV32-NEXT:    mv a0, a2
576add17fc8SCraig Topper; RV32-NEXT:  .LBB16_2:
577add17fc8SCraig Topper; RV32-NEXT:    ret
5788983db15SCraig Topper;
579add17fc8SCraig Topper; RV64-LABEL: bit_10_nz_select_i32:
580add17fc8SCraig Topper; RV64:       # %bb.0:
581add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 53
582add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
583add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB16_2
584add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
585add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
586add17fc8SCraig Topper; RV64-NEXT:  .LBB16_2:
587add17fc8SCraig Topper; RV64-NEXT:    ret
5888983db15SCraig Topper  %1 = and i32 %a, 1024
5898983db15SCraig Topper  %2 = icmp ne i32 %1, 0
5908983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
5918983db15SCraig Topper  ret i32 %3
5928983db15SCraig Topper}
5938983db15SCraig Topper
5948983db15SCraig Topperdefine signext i32 @bit_11_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
5958983db15SCraig Topper; RV32-LABEL: bit_11_z_select_i32:
5968983db15SCraig Topper; RV32:       # %bb.0:
5978983db15SCraig Topper; RV32-NEXT:    slli a3, a0, 20
5988983db15SCraig Topper; RV32-NEXT:    mv a0, a1
5998983db15SCraig Topper; RV32-NEXT:    bgez a3, .LBB17_2
6008983db15SCraig Topper; RV32-NEXT:  # %bb.1:
6018983db15SCraig Topper; RV32-NEXT:    mv a0, a2
6028983db15SCraig Topper; RV32-NEXT:  .LBB17_2:
6038983db15SCraig Topper; RV32-NEXT:    ret
6048983db15SCraig Topper;
6058983db15SCraig Topper; RV64-LABEL: bit_11_z_select_i32:
6068983db15SCraig Topper; RV64:       # %bb.0:
6078983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 52
6088983db15SCraig Topper; RV64-NEXT:    mv a0, a1
6098983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB17_2
6108983db15SCraig Topper; RV64-NEXT:  # %bb.1:
6118983db15SCraig Topper; RV64-NEXT:    mv a0, a2
6128983db15SCraig Topper; RV64-NEXT:  .LBB17_2:
6138983db15SCraig Topper; RV64-NEXT:    ret
6148983db15SCraig Topper  %1 = and i32 %a, 2048
6158983db15SCraig Topper  %2 = icmp eq i32 %1, 0
6168983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
6178983db15SCraig Topper  ret i32 %3
6188983db15SCraig Topper}
6198983db15SCraig Topper
6208983db15SCraig Topperdefine signext i32 @bit_11_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
621add17fc8SCraig Topper; RV32-LABEL: bit_11_nz_select_i32:
622add17fc8SCraig Topper; RV32:       # %bb.0:
623add17fc8SCraig Topper; RV32-NEXT:    slli a3, a0, 20
624add17fc8SCraig Topper; RV32-NEXT:    mv a0, a1
625add17fc8SCraig Topper; RV32-NEXT:    bltz a3, .LBB18_2
626add17fc8SCraig Topper; RV32-NEXT:  # %bb.1:
627add17fc8SCraig Topper; RV32-NEXT:    mv a0, a2
628add17fc8SCraig Topper; RV32-NEXT:  .LBB18_2:
629add17fc8SCraig Topper; RV32-NEXT:    ret
6308983db15SCraig Topper;
631add17fc8SCraig Topper; RV64-LABEL: bit_11_nz_select_i32:
632add17fc8SCraig Topper; RV64:       # %bb.0:
633add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 52
634add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
635add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB18_2
636add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
637add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
638add17fc8SCraig Topper; RV64-NEXT:  .LBB18_2:
639add17fc8SCraig Topper; RV64-NEXT:    ret
6408983db15SCraig Topper  %1 = and i32 %a, 2048
6418983db15SCraig Topper  %2 = icmp ne i32 %1, 0
6428983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
6438983db15SCraig Topper  ret i32 %3
6448983db15SCraig Topper}
6458983db15SCraig Topper
6468983db15SCraig Topperdefine signext i32 @bit_20_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
6478983db15SCraig Topper; RV32-LABEL: bit_20_z_select_i32:
6488983db15SCraig Topper; RV32:       # %bb.0:
6498983db15SCraig Topper; RV32-NEXT:    slli a3, a0, 11
6508983db15SCraig Topper; RV32-NEXT:    mv a0, a1
6518983db15SCraig Topper; RV32-NEXT:    bgez a3, .LBB19_2
6528983db15SCraig Topper; RV32-NEXT:  # %bb.1:
6538983db15SCraig Topper; RV32-NEXT:    mv a0, a2
6548983db15SCraig Topper; RV32-NEXT:  .LBB19_2:
6558983db15SCraig Topper; RV32-NEXT:    ret
6568983db15SCraig Topper;
6578983db15SCraig Topper; RV64-LABEL: bit_20_z_select_i32:
6588983db15SCraig Topper; RV64:       # %bb.0:
6598983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 43
6608983db15SCraig Topper; RV64-NEXT:    mv a0, a1
6618983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB19_2
6628983db15SCraig Topper; RV64-NEXT:  # %bb.1:
6638983db15SCraig Topper; RV64-NEXT:    mv a0, a2
6648983db15SCraig Topper; RV64-NEXT:  .LBB19_2:
6658983db15SCraig Topper; RV64-NEXT:    ret
6668983db15SCraig Topper  %1 = and i32 %a, 1048576
6678983db15SCraig Topper  %2 = icmp eq i32 %1, 0
6688983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
6698983db15SCraig Topper  ret i32 %3
6708983db15SCraig Topper}
6718983db15SCraig Topper
6728983db15SCraig Topperdefine signext i32 @bit_20_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
673add17fc8SCraig Topper; RV32-LABEL: bit_20_nz_select_i32:
674add17fc8SCraig Topper; RV32:       # %bb.0:
675add17fc8SCraig Topper; RV32-NEXT:    slli a3, a0, 11
676add17fc8SCraig Topper; RV32-NEXT:    mv a0, a1
677add17fc8SCraig Topper; RV32-NEXT:    bltz a3, .LBB20_2
678add17fc8SCraig Topper; RV32-NEXT:  # %bb.1:
679add17fc8SCraig Topper; RV32-NEXT:    mv a0, a2
680add17fc8SCraig Topper; RV32-NEXT:  .LBB20_2:
681add17fc8SCraig Topper; RV32-NEXT:    ret
6828983db15SCraig Topper;
683add17fc8SCraig Topper; RV64-LABEL: bit_20_nz_select_i32:
684add17fc8SCraig Topper; RV64:       # %bb.0:
685add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 43
686add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
687add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB20_2
688add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
689add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
690add17fc8SCraig Topper; RV64-NEXT:  .LBB20_2:
691add17fc8SCraig Topper; RV64-NEXT:    ret
6928983db15SCraig Topper  %1 = and i32 %a, 1048576
6938983db15SCraig Topper  %2 = icmp ne i32 %1, 0
6948983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
6958983db15SCraig Topper  ret i32 %3
6968983db15SCraig Topper}
6978983db15SCraig Topper
6988983db15SCraig Topperdefine signext i32 @bit_31_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
6998983db15SCraig Topper; RV32-LABEL: bit_31_z_select_i32:
7008983db15SCraig Topper; RV32:       # %bb.0:
7018983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB21_2
7028983db15SCraig Topper; RV32-NEXT:  # %bb.1:
7038983db15SCraig Topper; RV32-NEXT:    mv a1, a2
7048983db15SCraig Topper; RV32-NEXT:  .LBB21_2:
7058983db15SCraig Topper; RV32-NEXT:    mv a0, a1
7068983db15SCraig Topper; RV32-NEXT:    ret
7078983db15SCraig Topper;
7088983db15SCraig Topper; RV64-LABEL: bit_31_z_select_i32:
7098983db15SCraig Topper; RV64:       # %bb.0:
7108983db15SCraig Topper; RV64-NEXT:    lui a3, 524288
7118983db15SCraig Topper; RV64-NEXT:    and a3, a0, a3
7128983db15SCraig Topper; RV64-NEXT:    mv a0, a1
7138983db15SCraig Topper; RV64-NEXT:    beqz a3, .LBB21_2
7148983db15SCraig Topper; RV64-NEXT:  # %bb.1:
7158983db15SCraig Topper; RV64-NEXT:    mv a0, a2
7168983db15SCraig Topper; RV64-NEXT:  .LBB21_2:
7178983db15SCraig Topper; RV64-NEXT:    ret
7188983db15SCraig Topper  %1 = and i32 %a, 2147483648
7198983db15SCraig Topper  %2 = icmp eq i32 %1, 0
7208983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
7218983db15SCraig Topper  ret i32 %3
7228983db15SCraig Topper}
7238983db15SCraig Topper
7248983db15SCraig Topperdefine signext i32 @bit_31_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
7258983db15SCraig Topper; RV32-LABEL: bit_31_nz_select_i32:
7268983db15SCraig Topper; RV32:       # %bb.0:
7278983db15SCraig Topper; RV32-NEXT:    srli a3, a0, 31
7288983db15SCraig Topper; RV32-NEXT:    mv a0, a1
7298983db15SCraig Topper; RV32-NEXT:    bnez a3, .LBB22_2
7308983db15SCraig Topper; RV32-NEXT:  # %bb.1:
7318983db15SCraig Topper; RV32-NEXT:    mv a0, a2
7328983db15SCraig Topper; RV32-NEXT:  .LBB22_2:
7338983db15SCraig Topper; RV32-NEXT:    ret
7348983db15SCraig Topper;
7358983db15SCraig Topper; RV64-LABEL: bit_31_nz_select_i32:
7368983db15SCraig Topper; RV64:       # %bb.0:
7378983db15SCraig Topper; RV64-NEXT:    lui a3, 524288
7388983db15SCraig Topper; RV64-NEXT:    and a3, a0, a3
7398983db15SCraig Topper; RV64-NEXT:    mv a0, a1
7408983db15SCraig Topper; RV64-NEXT:    bnez a3, .LBB22_2
7418983db15SCraig Topper; RV64-NEXT:  # %bb.1:
7428983db15SCraig Topper; RV64-NEXT:    mv a0, a2
7438983db15SCraig Topper; RV64-NEXT:  .LBB22_2:
7448983db15SCraig Topper; RV64-NEXT:    ret
7458983db15SCraig Topper  %1 = and i32 %a, 2147483648
7468983db15SCraig Topper  %2 = icmp ne i32 %1, 0
7478983db15SCraig Topper  %3 = select i1 %2, i32 %b, i32 %c
7488983db15SCraig Topper  ret i32 %3
7498983db15SCraig Topper}
7508983db15SCraig Topper
7518983db15SCraig Topperdefine i64 @bit_10_z_select_i64(i64 %a, i64 %b, i64 %c) {
7528983db15SCraig Topper; RV32-LABEL: bit_10_z_select_i64:
7538983db15SCraig Topper; RV32:       # %bb.0:
7548983db15SCraig Topper; RV32-NEXT:    mv a1, a3
755*9122c523SPengcheng Wang; RV32-NEXT:    andi a3, a0, 1024
7568983db15SCraig Topper; RV32-NEXT:    mv a0, a2
757*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB23_2
7588983db15SCraig Topper; RV32-NEXT:  # %bb.1:
7598983db15SCraig Topper; RV32-NEXT:    mv a0, a4
7608983db15SCraig Topper; RV32-NEXT:    mv a1, a5
7618983db15SCraig Topper; RV32-NEXT:  .LBB23_2:
7628983db15SCraig Topper; RV32-NEXT:    ret
7638983db15SCraig Topper;
7648983db15SCraig Topper; RV64-LABEL: bit_10_z_select_i64:
7658983db15SCraig Topper; RV64:       # %bb.0:
7668983db15SCraig Topper; RV64-NEXT:    andi a3, a0, 1024
7678983db15SCraig Topper; RV64-NEXT:    mv a0, a1
7688983db15SCraig Topper; RV64-NEXT:    beqz a3, .LBB23_2
7698983db15SCraig Topper; RV64-NEXT:  # %bb.1:
7708983db15SCraig Topper; RV64-NEXT:    mv a0, a2
7718983db15SCraig Topper; RV64-NEXT:  .LBB23_2:
7728983db15SCraig Topper; RV64-NEXT:    ret
7738983db15SCraig Topper  %1 = and i64 %a, 1024
7748983db15SCraig Topper  %2 = icmp eq i64 %1, 0
7758983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
7768983db15SCraig Topper  ret i64 %3
7778983db15SCraig Topper}
7788983db15SCraig Topper
7798983db15SCraig Topperdefine i64 @bit_10_nz_select_i64(i64 %a, i64 %b, i64 %c) {
7808983db15SCraig Topper; RV32I-LABEL: bit_10_nz_select_i64:
7818983db15SCraig Topper; RV32I:       # %bb.0:
7828983db15SCraig Topper; RV32I-NEXT:    mv a1, a3
783*9122c523SPengcheng Wang; RV32I-NEXT:    slli a0, a0, 21
784*9122c523SPengcheng Wang; RV32I-NEXT:    srli a3, a0, 31
7858983db15SCraig Topper; RV32I-NEXT:    mv a0, a2
786*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a3, .LBB24_2
7878983db15SCraig Topper; RV32I-NEXT:  # %bb.1:
7888983db15SCraig Topper; RV32I-NEXT:    mv a0, a4
7898983db15SCraig Topper; RV32I-NEXT:    mv a1, a5
7908983db15SCraig Topper; RV32I-NEXT:  .LBB24_2:
7918983db15SCraig Topper; RV32I-NEXT:    ret
7928983db15SCraig Topper;
793add17fc8SCraig Topper; RV64-LABEL: bit_10_nz_select_i64:
794add17fc8SCraig Topper; RV64:       # %bb.0:
795add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 53
796add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
797add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB24_2
798add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
799add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
800add17fc8SCraig Topper; RV64-NEXT:  .LBB24_2:
801add17fc8SCraig Topper; RV64-NEXT:    ret
8028983db15SCraig Topper;
8038983db15SCraig Topper; RV32ZBS-LABEL: bit_10_nz_select_i64:
8048983db15SCraig Topper; RV32ZBS:       # %bb.0:
8058983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a3
806*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bexti a3, a0, 10
8078983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a2
808*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bnez a3, .LBB24_2
8098983db15SCraig Topper; RV32ZBS-NEXT:  # %bb.1:
8108983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a4
8118983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a5
8128983db15SCraig Topper; RV32ZBS-NEXT:  .LBB24_2:
8138983db15SCraig Topper; RV32ZBS-NEXT:    ret
81404a2baf5SPhilipp Tomsich;
81504a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_10_nz_select_i64:
81604a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
81704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a3
818*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    th.tst a3, a0, 10
81904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
820*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    bnez a3, .LBB24_2
82104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
82204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
82304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a5
82404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB24_2:
82504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
8268983db15SCraig Topper  %1 = and i64 %a, 1024
8278983db15SCraig Topper  %2 = icmp ne i64 %1, 0
8288983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
8298983db15SCraig Topper  ret i64 %3
8308983db15SCraig Topper}
8318983db15SCraig Topper
8328983db15SCraig Topperdefine i64 @bit_11_z_select_i64(i64 %a, i64 %b, i64 %c) {
8338983db15SCraig Topper; RV32-LABEL: bit_11_z_select_i64:
8348983db15SCraig Topper; RV32:       # %bb.0:
8358983db15SCraig Topper; RV32-NEXT:    mv a1, a3
836*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 20
8378983db15SCraig Topper; RV32-NEXT:    mv a0, a2
838*9122c523SPengcheng Wang; RV32-NEXT:    bgez a3, .LBB25_2
8398983db15SCraig Topper; RV32-NEXT:  # %bb.1:
8408983db15SCraig Topper; RV32-NEXT:    mv a0, a4
8418983db15SCraig Topper; RV32-NEXT:    mv a1, a5
8428983db15SCraig Topper; RV32-NEXT:  .LBB25_2:
8438983db15SCraig Topper; RV32-NEXT:    ret
8448983db15SCraig Topper;
8458983db15SCraig Topper; RV64-LABEL: bit_11_z_select_i64:
8468983db15SCraig Topper; RV64:       # %bb.0:
8478983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 52
8488983db15SCraig Topper; RV64-NEXT:    mv a0, a1
8498983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB25_2
8508983db15SCraig Topper; RV64-NEXT:  # %bb.1:
8518983db15SCraig Topper; RV64-NEXT:    mv a0, a2
8528983db15SCraig Topper; RV64-NEXT:  .LBB25_2:
8538983db15SCraig Topper; RV64-NEXT:    ret
8548983db15SCraig Topper  %1 = and i64 %a, 2048
8558983db15SCraig Topper  %2 = icmp eq i64 %1, 0
8568983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
8578983db15SCraig Topper  ret i64 %3
8588983db15SCraig Topper}
8598983db15SCraig Topper
8608983db15SCraig Topperdefine i64 @bit_11_nz_select_i64(i64 %a, i64 %b, i64 %c) {
8618983db15SCraig Topper; RV32I-LABEL: bit_11_nz_select_i64:
8628983db15SCraig Topper; RV32I:       # %bb.0:
8638983db15SCraig Topper; RV32I-NEXT:    mv a1, a3
864*9122c523SPengcheng Wang; RV32I-NEXT:    slli a0, a0, 20
865*9122c523SPengcheng Wang; RV32I-NEXT:    srli a3, a0, 31
8668983db15SCraig Topper; RV32I-NEXT:    mv a0, a2
867*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a3, .LBB26_2
8688983db15SCraig Topper; RV32I-NEXT:  # %bb.1:
8698983db15SCraig Topper; RV32I-NEXT:    mv a0, a4
8708983db15SCraig Topper; RV32I-NEXT:    mv a1, a5
8718983db15SCraig Topper; RV32I-NEXT:  .LBB26_2:
8728983db15SCraig Topper; RV32I-NEXT:    ret
8738983db15SCraig Topper;
874add17fc8SCraig Topper; RV64-LABEL: bit_11_nz_select_i64:
875add17fc8SCraig Topper; RV64:       # %bb.0:
876add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 52
877add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
878add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB26_2
879add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
880add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
881add17fc8SCraig Topper; RV64-NEXT:  .LBB26_2:
882add17fc8SCraig Topper; RV64-NEXT:    ret
8838983db15SCraig Topper;
8848983db15SCraig Topper; RV32ZBS-LABEL: bit_11_nz_select_i64:
8858983db15SCraig Topper; RV32ZBS:       # %bb.0:
8868983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a3
887*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bexti a3, a0, 11
8888983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a2
889*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bnez a3, .LBB26_2
8908983db15SCraig Topper; RV32ZBS-NEXT:  # %bb.1:
8918983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a4
8928983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a5
8938983db15SCraig Topper; RV32ZBS-NEXT:  .LBB26_2:
8948983db15SCraig Topper; RV32ZBS-NEXT:    ret
89504a2baf5SPhilipp Tomsich;
89604a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_11_nz_select_i64:
89704a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
89804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a3
899*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    th.tst a3, a0, 11
90004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
901*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    bnez a3, .LBB26_2
90204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
90304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
90404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a5
90504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB26_2:
90604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
9078983db15SCraig Topper  %1 = and i64 %a, 2048
9088983db15SCraig Topper  %2 = icmp ne i64 %1, 0
9098983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
9108983db15SCraig Topper  ret i64 %3
9118983db15SCraig Topper}
9128983db15SCraig Topper
9138983db15SCraig Topperdefine i64 @bit_20_z_select_i64(i64 %a, i64 %b, i64 %c) {
9148983db15SCraig Topper; RV32-LABEL: bit_20_z_select_i64:
9158983db15SCraig Topper; RV32:       # %bb.0:
9168983db15SCraig Topper; RV32-NEXT:    mv a1, a3
917*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 11
9188983db15SCraig Topper; RV32-NEXT:    mv a0, a2
919*9122c523SPengcheng Wang; RV32-NEXT:    bgez a3, .LBB27_2
9208983db15SCraig Topper; RV32-NEXT:  # %bb.1:
9218983db15SCraig Topper; RV32-NEXT:    mv a0, a4
9228983db15SCraig Topper; RV32-NEXT:    mv a1, a5
9238983db15SCraig Topper; RV32-NEXT:  .LBB27_2:
9248983db15SCraig Topper; RV32-NEXT:    ret
9258983db15SCraig Topper;
9268983db15SCraig Topper; RV64-LABEL: bit_20_z_select_i64:
9278983db15SCraig Topper; RV64:       # %bb.0:
9288983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 43
9298983db15SCraig Topper; RV64-NEXT:    mv a0, a1
9308983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB27_2
9318983db15SCraig Topper; RV64-NEXT:  # %bb.1:
9328983db15SCraig Topper; RV64-NEXT:    mv a0, a2
9338983db15SCraig Topper; RV64-NEXT:  .LBB27_2:
9348983db15SCraig Topper; RV64-NEXT:    ret
9358983db15SCraig Topper  %1 = and i64 %a, 1048576
9368983db15SCraig Topper  %2 = icmp eq i64 %1, 0
9378983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
9388983db15SCraig Topper  ret i64 %3
9398983db15SCraig Topper}
9408983db15SCraig Topper
9418983db15SCraig Topperdefine i64 @bit_20_nz_select_i64(i64 %a, i64 %b, i64 %c) {
9428983db15SCraig Topper; RV32I-LABEL: bit_20_nz_select_i64:
9438983db15SCraig Topper; RV32I:       # %bb.0:
9448983db15SCraig Topper; RV32I-NEXT:    mv a1, a3
945*9122c523SPengcheng Wang; RV32I-NEXT:    slli a0, a0, 11
946*9122c523SPengcheng Wang; RV32I-NEXT:    srli a3, a0, 31
9478983db15SCraig Topper; RV32I-NEXT:    mv a0, a2
948*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a3, .LBB28_2
9498983db15SCraig Topper; RV32I-NEXT:  # %bb.1:
9508983db15SCraig Topper; RV32I-NEXT:    mv a0, a4
9518983db15SCraig Topper; RV32I-NEXT:    mv a1, a5
9528983db15SCraig Topper; RV32I-NEXT:  .LBB28_2:
9538983db15SCraig Topper; RV32I-NEXT:    ret
9548983db15SCraig Topper;
955add17fc8SCraig Topper; RV64-LABEL: bit_20_nz_select_i64:
956add17fc8SCraig Topper; RV64:       # %bb.0:
957add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 43
958add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
959add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB28_2
960add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
961add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
962add17fc8SCraig Topper; RV64-NEXT:  .LBB28_2:
963add17fc8SCraig Topper; RV64-NEXT:    ret
9648983db15SCraig Topper;
9658983db15SCraig Topper; RV32ZBS-LABEL: bit_20_nz_select_i64:
9668983db15SCraig Topper; RV32ZBS:       # %bb.0:
9678983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a3
968*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bexti a3, a0, 20
9698983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a2
970*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bnez a3, .LBB28_2
9718983db15SCraig Topper; RV32ZBS-NEXT:  # %bb.1:
9728983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a4
9738983db15SCraig Topper; RV32ZBS-NEXT:    mv a1, a5
9748983db15SCraig Topper; RV32ZBS-NEXT:  .LBB28_2:
9758983db15SCraig Topper; RV32ZBS-NEXT:    ret
97604a2baf5SPhilipp Tomsich;
97704a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_20_nz_select_i64:
97804a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
97904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a3
980*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    th.tst a3, a0, 20
98104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
982*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    bnez a3, .LBB28_2
98304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
98404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
98504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a1, a5
98604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB28_2:
98704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
9888983db15SCraig Topper  %1 = and i64 %a, 1048576
9898983db15SCraig Topper  %2 = icmp ne i64 %1, 0
9908983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
9918983db15SCraig Topper  ret i64 %3
9928983db15SCraig Topper}
9938983db15SCraig Topper
9948983db15SCraig Topperdefine i64 @bit_31_z_select_i64(i64 %a, i64 %b, i64 %c) {
9958983db15SCraig Topper; RV32-LABEL: bit_31_z_select_i64:
9968983db15SCraig Topper; RV32:       # %bb.0:
9978983db15SCraig Topper; RV32-NEXT:    mv a1, a3
9988983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB29_2
9998983db15SCraig Topper; RV32-NEXT:  # %bb.1:
10008983db15SCraig Topper; RV32-NEXT:    mv a2, a4
10018983db15SCraig Topper; RV32-NEXT:    mv a1, a5
10028983db15SCraig Topper; RV32-NEXT:  .LBB29_2:
10038983db15SCraig Topper; RV32-NEXT:    mv a0, a2
10048983db15SCraig Topper; RV32-NEXT:    ret
10058983db15SCraig Topper;
10068983db15SCraig Topper; RV64-LABEL: bit_31_z_select_i64:
10078983db15SCraig Topper; RV64:       # %bb.0:
10088983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 32
10098983db15SCraig Topper; RV64-NEXT:    mv a0, a1
10108983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB29_2
10118983db15SCraig Topper; RV64-NEXT:  # %bb.1:
10128983db15SCraig Topper; RV64-NEXT:    mv a0, a2
10138983db15SCraig Topper; RV64-NEXT:  .LBB29_2:
10148983db15SCraig Topper; RV64-NEXT:    ret
10158983db15SCraig Topper  %1 = and i64 %a, 2147483648
10168983db15SCraig Topper  %2 = icmp eq i64 %1, 0
10178983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
10188983db15SCraig Topper  ret i64 %3
10198983db15SCraig Topper}
10208983db15SCraig Topper
10218983db15SCraig Topperdefine i64 @bit_31_nz_select_i64(i64 %a, i64 %b, i64 %c) {
10228983db15SCraig Topper; RV32-LABEL: bit_31_nz_select_i64:
10238983db15SCraig Topper; RV32:       # %bb.0:
10248983db15SCraig Topper; RV32-NEXT:    mv a1, a3
1025*9122c523SPengcheng Wang; RV32-NEXT:    srli a3, a0, 31
10268983db15SCraig Topper; RV32-NEXT:    mv a0, a2
1027*9122c523SPengcheng Wang; RV32-NEXT:    bnez a3, .LBB30_2
10288983db15SCraig Topper; RV32-NEXT:  # %bb.1:
10298983db15SCraig Topper; RV32-NEXT:    mv a0, a4
10308983db15SCraig Topper; RV32-NEXT:    mv a1, a5
10318983db15SCraig Topper; RV32-NEXT:  .LBB30_2:
10328983db15SCraig Topper; RV32-NEXT:    ret
10338983db15SCraig Topper;
10348983db15SCraig Topper; RV64-LABEL: bit_31_nz_select_i64:
10358983db15SCraig Topper; RV64:       # %bb.0:
1036add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 32
10378983db15SCraig Topper; RV64-NEXT:    mv a0, a1
1038add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB30_2
10398983db15SCraig Topper; RV64-NEXT:  # %bb.1:
10408983db15SCraig Topper; RV64-NEXT:    mv a0, a2
10418983db15SCraig Topper; RV64-NEXT:  .LBB30_2:
10428983db15SCraig Topper; RV64-NEXT:    ret
10438983db15SCraig Topper  %1 = and i64 %a, 2147483648
10448983db15SCraig Topper  %2 = icmp ne i64 %1, 0
10458983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
10468983db15SCraig Topper  ret i64 %3
10478983db15SCraig Topper}
10488983db15SCraig Topper
10498983db15SCraig Topperdefine i64 @bit_32_z_select_i64(i64 %a, i64 %b, i64 %c) {
10508983db15SCraig Topper; RV32-LABEL: bit_32_z_select_i64:
10518983db15SCraig Topper; RV32:       # %bb.0:
1052*9122c523SPengcheng Wang; RV32-NEXT:    andi a1, a1, 1
10538983db15SCraig Topper; RV32-NEXT:    mv a0, a2
1054*9122c523SPengcheng Wang; RV32-NEXT:    beqz a1, .LBB31_2
10558983db15SCraig Topper; RV32-NEXT:  # %bb.1:
10568983db15SCraig Topper; RV32-NEXT:    mv a0, a4
1057*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
10588983db15SCraig Topper; RV32-NEXT:  .LBB31_2:
1059*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
10608983db15SCraig Topper; RV32-NEXT:    ret
10618983db15SCraig Topper;
10628983db15SCraig Topper; RV64-LABEL: bit_32_z_select_i64:
10638983db15SCraig Topper; RV64:       # %bb.0:
10648983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 31
10658983db15SCraig Topper; RV64-NEXT:    mv a0, a1
10668983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB31_2
10678983db15SCraig Topper; RV64-NEXT:  # %bb.1:
10688983db15SCraig Topper; RV64-NEXT:    mv a0, a2
10698983db15SCraig Topper; RV64-NEXT:  .LBB31_2:
10708983db15SCraig Topper; RV64-NEXT:    ret
10718983db15SCraig Topper  %1 = and i64 %a, 4294967296
10728983db15SCraig Topper  %2 = icmp eq i64 %1, 0
10738983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
10748983db15SCraig Topper  ret i64 %3
10758983db15SCraig Topper}
10768983db15SCraig Topper
10778983db15SCraig Topperdefine i64 @bit_32_nz_select_i64(i64 %a, i64 %b, i64 %c) {
10788983db15SCraig Topper; RV32-LABEL: bit_32_nz_select_i64:
10798983db15SCraig Topper; RV32:       # %bb.0:
1080*9122c523SPengcheng Wang; RV32-NEXT:    andi a1, a1, 1
10818983db15SCraig Topper; RV32-NEXT:    mv a0, a2
1082*9122c523SPengcheng Wang; RV32-NEXT:    bnez a1, .LBB32_2
10838983db15SCraig Topper; RV32-NEXT:  # %bb.1:
10848983db15SCraig Topper; RV32-NEXT:    mv a0, a4
1085*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
10868983db15SCraig Topper; RV32-NEXT:  .LBB32_2:
1087*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
10888983db15SCraig Topper; RV32-NEXT:    ret
10898983db15SCraig Topper;
1090add17fc8SCraig Topper; RV64-LABEL: bit_32_nz_select_i64:
1091add17fc8SCraig Topper; RV64:       # %bb.0:
1092add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 31
1093add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
1094add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB32_2
1095add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
1096add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
1097add17fc8SCraig Topper; RV64-NEXT:  .LBB32_2:
1098add17fc8SCraig Topper; RV64-NEXT:    ret
10998983db15SCraig Topper  %1 = and i64 %a, 4294967296
11008983db15SCraig Topper  %2 = icmp ne i64 %1, 0
11018983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
11028983db15SCraig Topper  ret i64 %3
11038983db15SCraig Topper}
11048983db15SCraig Topper
11058983db15SCraig Topperdefine i64 @bit_55_z_select_i64(i64 %a, i64 %b, i64 %c) {
11068983db15SCraig Topper; RV32-LABEL: bit_55_z_select_i64:
11078983db15SCraig Topper; RV32:       # %bb.0:
1108*9122c523SPengcheng Wang; RV32-NEXT:    slli a1, a1, 8
11098983db15SCraig Topper; RV32-NEXT:    mv a0, a2
1110*9122c523SPengcheng Wang; RV32-NEXT:    bgez a1, .LBB33_2
11118983db15SCraig Topper; RV32-NEXT:  # %bb.1:
11128983db15SCraig Topper; RV32-NEXT:    mv a0, a4
1113*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
11148983db15SCraig Topper; RV32-NEXT:  .LBB33_2:
1115*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
11168983db15SCraig Topper; RV32-NEXT:    ret
11178983db15SCraig Topper;
11188983db15SCraig Topper; RV64-LABEL: bit_55_z_select_i64:
11198983db15SCraig Topper; RV64:       # %bb.0:
11208983db15SCraig Topper; RV64-NEXT:    slli a3, a0, 8
11218983db15SCraig Topper; RV64-NEXT:    mv a0, a1
11228983db15SCraig Topper; RV64-NEXT:    bgez a3, .LBB33_2
11238983db15SCraig Topper; RV64-NEXT:  # %bb.1:
11248983db15SCraig Topper; RV64-NEXT:    mv a0, a2
11258983db15SCraig Topper; RV64-NEXT:  .LBB33_2:
11268983db15SCraig Topper; RV64-NEXT:    ret
11278983db15SCraig Topper  %1 = and i64 %a, 36028797018963968
11288983db15SCraig Topper  %2 = icmp eq i64 %1, 0
11298983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
11308983db15SCraig Topper  ret i64 %3
11318983db15SCraig Topper}
11328983db15SCraig Topper
11338983db15SCraig Topperdefine i64 @bit_55_nz_select_i64(i64 %a, i64 %b, i64 %c) {
11348983db15SCraig Topper; RV32I-LABEL: bit_55_nz_select_i64:
11358983db15SCraig Topper; RV32I:       # %bb.0:
1136a2b5b584SCraig Topper; RV32I-NEXT:    slli a1, a1, 8
1137*9122c523SPengcheng Wang; RV32I-NEXT:    srli a1, a1, 31
11388983db15SCraig Topper; RV32I-NEXT:    mv a0, a2
1139*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB34_2
11408983db15SCraig Topper; RV32I-NEXT:  # %bb.1:
11418983db15SCraig Topper; RV32I-NEXT:    mv a0, a4
1142*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
11438983db15SCraig Topper; RV32I-NEXT:  .LBB34_2:
1144*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
11458983db15SCraig Topper; RV32I-NEXT:    ret
11468983db15SCraig Topper;
1147add17fc8SCraig Topper; RV64-LABEL: bit_55_nz_select_i64:
1148add17fc8SCraig Topper; RV64:       # %bb.0:
1149add17fc8SCraig Topper; RV64-NEXT:    slli a3, a0, 8
1150add17fc8SCraig Topper; RV64-NEXT:    mv a0, a1
1151add17fc8SCraig Topper; RV64-NEXT:    bltz a3, .LBB34_2
1152add17fc8SCraig Topper; RV64-NEXT:  # %bb.1:
1153add17fc8SCraig Topper; RV64-NEXT:    mv a0, a2
1154add17fc8SCraig Topper; RV64-NEXT:  .LBB34_2:
1155add17fc8SCraig Topper; RV64-NEXT:    ret
11568983db15SCraig Topper;
11578983db15SCraig Topper; RV32ZBS-LABEL: bit_55_nz_select_i64:
11588983db15SCraig Topper; RV32ZBS:       # %bb.0:
1159*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bexti a1, a1, 23
11608983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a2
1161*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bnez a1, .LBB34_2
11628983db15SCraig Topper; RV32ZBS-NEXT:  # %bb.1:
11638983db15SCraig Topper; RV32ZBS-NEXT:    mv a0, a4
1164*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a3, a5
11658983db15SCraig Topper; RV32ZBS-NEXT:  .LBB34_2:
1166*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a1, a3
11678983db15SCraig Topper; RV32ZBS-NEXT:    ret
116804a2baf5SPhilipp Tomsich;
116904a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_55_nz_select_i64:
117004a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
1171*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    th.tst a1, a1, 23
117204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
1173*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    bnez a1, .LBB34_2
117404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
117504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
1176*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a3, a5
117704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB34_2:
1178*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a1, a3
117904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
11808983db15SCraig Topper  %1 = and i64 %a, 36028797018963968
11818983db15SCraig Topper  %2 = icmp ne i64 %1, 0
11828983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
11838983db15SCraig Topper  ret i64 %3
11848983db15SCraig Topper}
11858983db15SCraig Topper
11868983db15SCraig Topperdefine i64 @bit_63_z_select_i64(i64 %a, i64 %b, i64 %c) {
11878983db15SCraig Topper; RV32-LABEL: bit_63_z_select_i64:
11888983db15SCraig Topper; RV32:       # %bb.0:
11898983db15SCraig Topper; RV32-NEXT:    mv a0, a2
11908983db15SCraig Topper; RV32-NEXT:    bgez a1, .LBB35_2
11918983db15SCraig Topper; RV32-NEXT:  # %bb.1:
11928983db15SCraig Topper; RV32-NEXT:    mv a0, a4
11938983db15SCraig Topper; RV32-NEXT:    mv a3, a5
11948983db15SCraig Topper; RV32-NEXT:  .LBB35_2:
11958983db15SCraig Topper; RV32-NEXT:    mv a1, a3
11968983db15SCraig Topper; RV32-NEXT:    ret
11978983db15SCraig Topper;
11988983db15SCraig Topper; RV64-LABEL: bit_63_z_select_i64:
11998983db15SCraig Topper; RV64:       # %bb.0:
12008983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB35_2
12018983db15SCraig Topper; RV64-NEXT:  # %bb.1:
12028983db15SCraig Topper; RV64-NEXT:    mv a1, a2
12038983db15SCraig Topper; RV64-NEXT:  .LBB35_2:
12048983db15SCraig Topper; RV64-NEXT:    mv a0, a1
12058983db15SCraig Topper; RV64-NEXT:    ret
12068983db15SCraig Topper  %1 = and i64 %a, 9223372036854775808
12078983db15SCraig Topper  %2 = icmp eq i64 %1, 0
12088983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
12098983db15SCraig Topper  ret i64 %3
12108983db15SCraig Topper}
12118983db15SCraig Topper
12128983db15SCraig Topperdefine i64 @bit_63_nz_select_i64(i64 %a, i64 %b, i64 %c) {
12138983db15SCraig Topper; RV32-LABEL: bit_63_nz_select_i64:
12148983db15SCraig Topper; RV32:       # %bb.0:
1215*9122c523SPengcheng Wang; RV32-NEXT:    srli a1, a1, 31
12168983db15SCraig Topper; RV32-NEXT:    mv a0, a2
1217*9122c523SPengcheng Wang; RV32-NEXT:    bnez a1, .LBB36_2
12188983db15SCraig Topper; RV32-NEXT:  # %bb.1:
12198983db15SCraig Topper; RV32-NEXT:    mv a0, a4
1220*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
12218983db15SCraig Topper; RV32-NEXT:  .LBB36_2:
1222*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
12238983db15SCraig Topper; RV32-NEXT:    ret
12248983db15SCraig Topper;
12258983db15SCraig Topper; RV64-LABEL: bit_63_nz_select_i64:
12268983db15SCraig Topper; RV64:       # %bb.0:
12278983db15SCraig Topper; RV64-NEXT:    srli a3, a0, 63
12288983db15SCraig Topper; RV64-NEXT:    mv a0, a1
12298983db15SCraig Topper; RV64-NEXT:    bnez a3, .LBB36_2
12308983db15SCraig Topper; RV64-NEXT:  # %bb.1:
12318983db15SCraig Topper; RV64-NEXT:    mv a0, a2
12328983db15SCraig Topper; RV64-NEXT:  .LBB36_2:
12338983db15SCraig Topper; RV64-NEXT:    ret
12348983db15SCraig Topper  %1 = and i64 %a, 9223372036854775808
12358983db15SCraig Topper  %2 = icmp ne i64 %1, 0
12368983db15SCraig Topper  %3 = select i1 %2, i64 %b, i64 %c
12378983db15SCraig Topper  ret i64 %3
12388983db15SCraig Topper}
12398983db15SCraig Topper
12408983db15SCraig Topperdefine void @bit_10_z_branch_i32(i32 signext %0) {
12418983db15SCraig Topper; CHECK-LABEL: bit_10_z_branch_i32:
12428983db15SCraig Topper; CHECK:       # %bb.0:
12438983db15SCraig Topper; CHECK-NEXT:    andi a0, a0, 1024
12448983db15SCraig Topper; CHECK-NEXT:    bnez a0, .LBB37_2
12458983db15SCraig Topper; CHECK-NEXT:  # %bb.1:
1246eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
12478983db15SCraig Topper; CHECK-NEXT:  .LBB37_2:
12488983db15SCraig Topper; CHECK-NEXT:    ret
12498983db15SCraig Topper  %2 = and i32 %0, 1024
12508983db15SCraig Topper  %3 = icmp eq i32 %2, 0
12518983db15SCraig Topper  br i1 %3, label %4, label %5
12528983db15SCraig Topper
12538983db15SCraig Topper4:
12548983db15SCraig Topper  tail call void @bar()
12558983db15SCraig Topper  br label %5
12568983db15SCraig Topper
12578983db15SCraig Topper5:
12588983db15SCraig Topper  ret void
12598983db15SCraig Topper}
12608983db15SCraig Topper
12618983db15SCraig Topperdefine void @bit_10_nz_branch_i32(i32 signext %0) {
12628983db15SCraig Topper; CHECK-LABEL: bit_10_nz_branch_i32:
12638983db15SCraig Topper; CHECK:       # %bb.0:
12648983db15SCraig Topper; CHECK-NEXT:    andi a0, a0, 1024
12658983db15SCraig Topper; CHECK-NEXT:    beqz a0, .LBB38_2
12668983db15SCraig Topper; CHECK-NEXT:  # %bb.1:
1267eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
12688983db15SCraig Topper; CHECK-NEXT:  .LBB38_2:
12698983db15SCraig Topper; CHECK-NEXT:    ret
12708983db15SCraig Topper  %2 = and i32 %0, 1024
12718983db15SCraig Topper  %3 = icmp ne i32 %2, 0
12728983db15SCraig Topper  br i1 %3, label %4, label %5
12738983db15SCraig Topper
12748983db15SCraig Topper4:
12758983db15SCraig Topper  tail call void @bar()
12768983db15SCraig Topper  br label %5
12778983db15SCraig Topper
12788983db15SCraig Topper5:
12798983db15SCraig Topper  ret void
12808983db15SCraig Topper}
12818983db15SCraig Topper
12828983db15SCraig Topperdefine void @bit_11_z_branch_i32(i32 signext %0) {
12838983db15SCraig Topper; RV32-LABEL: bit_11_z_branch_i32:
12848983db15SCraig Topper; RV32:       # %bb.0:
12858983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 20
12868983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB39_2
12878983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1288eabaee0cSFangrui Song; RV32-NEXT:    tail bar
12898983db15SCraig Topper; RV32-NEXT:  .LBB39_2:
12908983db15SCraig Topper; RV32-NEXT:    ret
12918983db15SCraig Topper;
12928983db15SCraig Topper; RV64-LABEL: bit_11_z_branch_i32:
12938983db15SCraig Topper; RV64:       # %bb.0:
12948983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 52
12958983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB39_2
12968983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1297eabaee0cSFangrui Song; RV64-NEXT:    tail bar
12988983db15SCraig Topper; RV64-NEXT:  .LBB39_2:
12998983db15SCraig Topper; RV64-NEXT:    ret
13008983db15SCraig Topper  %2 = and i32 %0, 2048
13018983db15SCraig Topper  %3 = icmp eq i32 %2, 0
13028983db15SCraig Topper  br i1 %3, label %4, label %5
13038983db15SCraig Topper
13048983db15SCraig Topper4:
13058983db15SCraig Topper  tail call void @bar()
13068983db15SCraig Topper  br label %5
13078983db15SCraig Topper
13088983db15SCraig Topper5:
13098983db15SCraig Topper  ret void
13108983db15SCraig Topper}
13118983db15SCraig Topper
13128983db15SCraig Topperdefine void @bit_11_nz_branch_i32(i32 signext %0) {
13138983db15SCraig Topper; RV32-LABEL: bit_11_nz_branch_i32:
13148983db15SCraig Topper; RV32:       # %bb.0:
13158983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 20
13168983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB40_2
13178983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1318eabaee0cSFangrui Song; RV32-NEXT:    tail bar
13198983db15SCraig Topper; RV32-NEXT:  .LBB40_2:
13208983db15SCraig Topper; RV32-NEXT:    ret
13218983db15SCraig Topper;
13228983db15SCraig Topper; RV64-LABEL: bit_11_nz_branch_i32:
13238983db15SCraig Topper; RV64:       # %bb.0:
13248983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 52
13258983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB40_2
13268983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1327eabaee0cSFangrui Song; RV64-NEXT:    tail bar
13288983db15SCraig Topper; RV64-NEXT:  .LBB40_2:
13298983db15SCraig Topper; RV64-NEXT:    ret
13308983db15SCraig Topper  %2 = and i32 %0, 2048
13318983db15SCraig Topper  %3 = icmp ne i32 %2, 0
13328983db15SCraig Topper  br i1 %3, label %4, label %5
13338983db15SCraig Topper
13348983db15SCraig Topper4:
13358983db15SCraig Topper  tail call void @bar()
13368983db15SCraig Topper  br label %5
13378983db15SCraig Topper
13388983db15SCraig Topper5:
13398983db15SCraig Topper  ret void
13408983db15SCraig Topper}
13418983db15SCraig Topper
13428983db15SCraig Topperdefine void @bit_24_z_branch_i32(i32 signext %0) {
13438983db15SCraig Topper; RV32-LABEL: bit_24_z_branch_i32:
13448983db15SCraig Topper; RV32:       # %bb.0:
13458983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 7
13468983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB41_2
13478983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1348eabaee0cSFangrui Song; RV32-NEXT:    tail bar
13498983db15SCraig Topper; RV32-NEXT:  .LBB41_2:
13508983db15SCraig Topper; RV32-NEXT:    ret
13518983db15SCraig Topper;
13528983db15SCraig Topper; RV64-LABEL: bit_24_z_branch_i32:
13538983db15SCraig Topper; RV64:       # %bb.0:
13548983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 39
13558983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB41_2
13568983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1357eabaee0cSFangrui Song; RV64-NEXT:    tail bar
13588983db15SCraig Topper; RV64-NEXT:  .LBB41_2:
13598983db15SCraig Topper; RV64-NEXT:    ret
13608983db15SCraig Topper  %2 = and i32 %0, 16777216
13618983db15SCraig Topper  %3 = icmp eq i32 %2, 0
13628983db15SCraig Topper  br i1 %3, label %4, label %5
13638983db15SCraig Topper
13648983db15SCraig Topper4:
13658983db15SCraig Topper  tail call void @bar()
13668983db15SCraig Topper  br label %5
13678983db15SCraig Topper
13688983db15SCraig Topper5:
13698983db15SCraig Topper  ret void
13708983db15SCraig Topper}
13718983db15SCraig Topper
13728983db15SCraig Topperdefine void @bit_24_nz_branch_i32(i32 signext %0) {
13738983db15SCraig Topper; RV32-LABEL: bit_24_nz_branch_i32:
13748983db15SCraig Topper; RV32:       # %bb.0:
13758983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 7
13768983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB42_2
13778983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1378eabaee0cSFangrui Song; RV32-NEXT:    tail bar
13798983db15SCraig Topper; RV32-NEXT:  .LBB42_2:
13808983db15SCraig Topper; RV32-NEXT:    ret
13818983db15SCraig Topper;
13828983db15SCraig Topper; RV64-LABEL: bit_24_nz_branch_i32:
13838983db15SCraig Topper; RV64:       # %bb.0:
13848983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 39
13858983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB42_2
13868983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1387eabaee0cSFangrui Song; RV64-NEXT:    tail bar
13888983db15SCraig Topper; RV64-NEXT:  .LBB42_2:
13898983db15SCraig Topper; RV64-NEXT:    ret
13908983db15SCraig Topper  %2 = and i32 %0, 16777216
13918983db15SCraig Topper  %3 = icmp ne i32 %2, 0
13928983db15SCraig Topper  br i1 %3, label %4, label %5
13938983db15SCraig Topper
13948983db15SCraig Topper4:
13958983db15SCraig Topper  tail call void @bar()
13968983db15SCraig Topper  br label %5
13978983db15SCraig Topper
13988983db15SCraig Topper5:
13998983db15SCraig Topper  ret void
14008983db15SCraig Topper}
14018983db15SCraig Topper
14028983db15SCraig Topperdefine void @bit_31_z_branch_i32(i32 signext %0) {
14038983db15SCraig Topper; RV32-LABEL: bit_31_z_branch_i32:
14048983db15SCraig Topper; RV32:       # %bb.0:
14058983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB43_2
14068983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1407eabaee0cSFangrui Song; RV32-NEXT:    tail bar
14088983db15SCraig Topper; RV32-NEXT:  .LBB43_2:
14098983db15SCraig Topper; RV32-NEXT:    ret
14108983db15SCraig Topper;
14118983db15SCraig Topper; RV64-LABEL: bit_31_z_branch_i32:
14128983db15SCraig Topper; RV64:       # %bb.0:
14138983db15SCraig Topper; RV64-NEXT:    lui a1, 524288
14148983db15SCraig Topper; RV64-NEXT:    and a0, a0, a1
14158983db15SCraig Topper; RV64-NEXT:    bnez a0, .LBB43_2
14168983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1417eabaee0cSFangrui Song; RV64-NEXT:    tail bar
14188983db15SCraig Topper; RV64-NEXT:  .LBB43_2:
14198983db15SCraig Topper; RV64-NEXT:    ret
14208983db15SCraig Topper  %2 = and i32 %0, 2147483648
14218983db15SCraig Topper  %3 = icmp eq i32 %2, 0
14228983db15SCraig Topper  br i1 %3, label %4, label %5
14238983db15SCraig Topper
14248983db15SCraig Topper4:
14258983db15SCraig Topper  tail call void @bar()
14268983db15SCraig Topper  br label %5
14278983db15SCraig Topper
14288983db15SCraig Topper5:
14298983db15SCraig Topper  ret void
14308983db15SCraig Topper}
14318983db15SCraig Topper
14328983db15SCraig Topperdefine void @bit_31_nz_branch_i32(i32 signext %0) {
14338983db15SCraig Topper; RV32-LABEL: bit_31_nz_branch_i32:
14348983db15SCraig Topper; RV32:       # %bb.0:
14358983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB44_2
14368983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1437eabaee0cSFangrui Song; RV32-NEXT:    tail bar
14388983db15SCraig Topper; RV32-NEXT:  .LBB44_2:
14398983db15SCraig Topper; RV32-NEXT:    ret
14408983db15SCraig Topper;
14418983db15SCraig Topper; RV64-LABEL: bit_31_nz_branch_i32:
14428983db15SCraig Topper; RV64:       # %bb.0:
14438983db15SCraig Topper; RV64-NEXT:    lui a1, 524288
14448983db15SCraig Topper; RV64-NEXT:    and a0, a0, a1
14458983db15SCraig Topper; RV64-NEXT:    beqz a0, .LBB44_2
14468983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1447eabaee0cSFangrui Song; RV64-NEXT:    tail bar
14488983db15SCraig Topper; RV64-NEXT:  .LBB44_2:
14498983db15SCraig Topper; RV64-NEXT:    ret
14508983db15SCraig Topper  %2 = and i32 %0, 2147483648
14518983db15SCraig Topper  %3 = icmp ne i32 %2, 0
14528983db15SCraig Topper  br i1 %3, label %4, label %5
14538983db15SCraig Topper
14548983db15SCraig Topper4:
14558983db15SCraig Topper  tail call void @bar()
14568983db15SCraig Topper  br label %5
14578983db15SCraig Topper
14588983db15SCraig Topper5:
14598983db15SCraig Topper  ret void
14608983db15SCraig Topper}
14618983db15SCraig Topper
14628983db15SCraig Topperdefine void @bit_10_z_branch_i64(i64 %0) {
14638983db15SCraig Topper; CHECK-LABEL: bit_10_z_branch_i64:
14648983db15SCraig Topper; CHECK:       # %bb.0:
14658983db15SCraig Topper; CHECK-NEXT:    andi a0, a0, 1024
14668983db15SCraig Topper; CHECK-NEXT:    bnez a0, .LBB45_2
14678983db15SCraig Topper; CHECK-NEXT:  # %bb.1:
1468eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
14698983db15SCraig Topper; CHECK-NEXT:  .LBB45_2:
14708983db15SCraig Topper; CHECK-NEXT:    ret
14718983db15SCraig Topper  %2 = and i64 %0, 1024
14728983db15SCraig Topper  %3 = icmp eq i64 %2, 0
14738983db15SCraig Topper  br i1 %3, label %4, label %5
14748983db15SCraig Topper
14758983db15SCraig Topper4:
14768983db15SCraig Topper  tail call void @bar()
14778983db15SCraig Topper  br label %5
14788983db15SCraig Topper
14798983db15SCraig Topper5:
14808983db15SCraig Topper  ret void
14818983db15SCraig Topper}
14828983db15SCraig Topper
14838983db15SCraig Topperdefine void @bit_10_nz_branch_i64(i64 %0) {
14848983db15SCraig Topper; CHECK-LABEL: bit_10_nz_branch_i64:
14858983db15SCraig Topper; CHECK:       # %bb.0:
14868983db15SCraig Topper; CHECK-NEXT:    andi a0, a0, 1024
14878983db15SCraig Topper; CHECK-NEXT:    beqz a0, .LBB46_2
14888983db15SCraig Topper; CHECK-NEXT:  # %bb.1:
1489eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
14908983db15SCraig Topper; CHECK-NEXT:  .LBB46_2:
14918983db15SCraig Topper; CHECK-NEXT:    ret
14928983db15SCraig Topper  %2 = and i64 %0, 1024
14938983db15SCraig Topper  %3 = icmp ne i64 %2, 0
14948983db15SCraig Topper  br i1 %3, label %4, label %5
14958983db15SCraig Topper
14968983db15SCraig Topper4:
14978983db15SCraig Topper  tail call void @bar()
14988983db15SCraig Topper  br label %5
14998983db15SCraig Topper
15008983db15SCraig Topper5:
15018983db15SCraig Topper  ret void
15028983db15SCraig Topper}
15038983db15SCraig Topper
15048983db15SCraig Topperdefine void @bit_11_z_branch_i64(i64 %0) {
15058983db15SCraig Topper; RV32-LABEL: bit_11_z_branch_i64:
15068983db15SCraig Topper; RV32:       # %bb.0:
15078983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 20
15088983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB47_2
15098983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1510eabaee0cSFangrui Song; RV32-NEXT:    tail bar
15118983db15SCraig Topper; RV32-NEXT:  .LBB47_2:
15128983db15SCraig Topper; RV32-NEXT:    ret
15138983db15SCraig Topper;
15148983db15SCraig Topper; RV64-LABEL: bit_11_z_branch_i64:
15158983db15SCraig Topper; RV64:       # %bb.0:
15168983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 52
15178983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB47_2
15188983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1519eabaee0cSFangrui Song; RV64-NEXT:    tail bar
15208983db15SCraig Topper; RV64-NEXT:  .LBB47_2:
15218983db15SCraig Topper; RV64-NEXT:    ret
15228983db15SCraig Topper  %2 = and i64 %0, 2048
15238983db15SCraig Topper  %3 = icmp eq i64 %2, 0
15248983db15SCraig Topper  br i1 %3, label %4, label %5
15258983db15SCraig Topper
15268983db15SCraig Topper4:
15278983db15SCraig Topper  tail call void @bar()
15288983db15SCraig Topper  br label %5
15298983db15SCraig Topper
15308983db15SCraig Topper5:
15318983db15SCraig Topper  ret void
15328983db15SCraig Topper}
15338983db15SCraig Topper
15348983db15SCraig Topperdefine void @bit_11_nz_branch_i64(i64 %0) {
15358983db15SCraig Topper; RV32-LABEL: bit_11_nz_branch_i64:
15368983db15SCraig Topper; RV32:       # %bb.0:
15378983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 20
15388983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB48_2
15398983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1540eabaee0cSFangrui Song; RV32-NEXT:    tail bar
15418983db15SCraig Topper; RV32-NEXT:  .LBB48_2:
15428983db15SCraig Topper; RV32-NEXT:    ret
15438983db15SCraig Topper;
15448983db15SCraig Topper; RV64-LABEL: bit_11_nz_branch_i64:
15458983db15SCraig Topper; RV64:       # %bb.0:
15468983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 52
15478983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB48_2
15488983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1549eabaee0cSFangrui Song; RV64-NEXT:    tail bar
15508983db15SCraig Topper; RV64-NEXT:  .LBB48_2:
15518983db15SCraig Topper; RV64-NEXT:    ret
15528983db15SCraig Topper  %2 = and i64 %0, 2048
15538983db15SCraig Topper  %3 = icmp ne i64 %2, 0
15548983db15SCraig Topper  br i1 %3, label %4, label %5
15558983db15SCraig Topper
15568983db15SCraig Topper4:
15578983db15SCraig Topper  tail call void @bar()
15588983db15SCraig Topper  br label %5
15598983db15SCraig Topper
15608983db15SCraig Topper5:
15618983db15SCraig Topper  ret void
15628983db15SCraig Topper}
15638983db15SCraig Topper
15648983db15SCraig Topperdefine void @bit_24_z_branch_i64(i64 %0) {
15658983db15SCraig Topper; RV32-LABEL: bit_24_z_branch_i64:
15668983db15SCraig Topper; RV32:       # %bb.0:
15678983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 7
15688983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB49_2
15698983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1570eabaee0cSFangrui Song; RV32-NEXT:    tail bar
15718983db15SCraig Topper; RV32-NEXT:  .LBB49_2:
15728983db15SCraig Topper; RV32-NEXT:    ret
15738983db15SCraig Topper;
15748983db15SCraig Topper; RV64-LABEL: bit_24_z_branch_i64:
15758983db15SCraig Topper; RV64:       # %bb.0:
15768983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 39
15778983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB49_2
15788983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1579eabaee0cSFangrui Song; RV64-NEXT:    tail bar
15808983db15SCraig Topper; RV64-NEXT:  .LBB49_2:
15818983db15SCraig Topper; RV64-NEXT:    ret
15828983db15SCraig Topper  %2 = and i64 %0, 16777216
15838983db15SCraig Topper  %3 = icmp eq i64 %2, 0
15848983db15SCraig Topper  br i1 %3, label %4, label %5
15858983db15SCraig Topper
15868983db15SCraig Topper4:
15878983db15SCraig Topper  tail call void @bar()
15888983db15SCraig Topper  br label %5
15898983db15SCraig Topper
15908983db15SCraig Topper5:
15918983db15SCraig Topper  ret void
15928983db15SCraig Topper}
15938983db15SCraig Topper
15948983db15SCraig Topperdefine void @bit_24_nz_branch_i64(i64 %0) {
15958983db15SCraig Topper; RV32-LABEL: bit_24_nz_branch_i64:
15968983db15SCraig Topper; RV32:       # %bb.0:
15978983db15SCraig Topper; RV32-NEXT:    slli a0, a0, 7
15988983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB50_2
15998983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1600eabaee0cSFangrui Song; RV32-NEXT:    tail bar
16018983db15SCraig Topper; RV32-NEXT:  .LBB50_2:
16028983db15SCraig Topper; RV32-NEXT:    ret
16038983db15SCraig Topper;
16048983db15SCraig Topper; RV64-LABEL: bit_24_nz_branch_i64:
16058983db15SCraig Topper; RV64:       # %bb.0:
16068983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 39
16078983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB50_2
16088983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1609eabaee0cSFangrui Song; RV64-NEXT:    tail bar
16108983db15SCraig Topper; RV64-NEXT:  .LBB50_2:
16118983db15SCraig Topper; RV64-NEXT:    ret
16128983db15SCraig Topper  %2 = and i64 %0, 16777216
16138983db15SCraig Topper  %3 = icmp ne i64 %2, 0
16148983db15SCraig Topper  br i1 %3, label %4, label %5
16158983db15SCraig Topper
16168983db15SCraig Topper4:
16178983db15SCraig Topper  tail call void @bar()
16188983db15SCraig Topper  br label %5
16198983db15SCraig Topper
16208983db15SCraig Topper5:
16218983db15SCraig Topper  ret void
16228983db15SCraig Topper}
16238983db15SCraig Topper
16248983db15SCraig Topperdefine void @bit_31_z_branch_i64(i64 %0) {
16258983db15SCraig Topper; RV32-LABEL: bit_31_z_branch_i64:
16268983db15SCraig Topper; RV32:       # %bb.0:
16278983db15SCraig Topper; RV32-NEXT:    bltz a0, .LBB51_2
16288983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1629eabaee0cSFangrui Song; RV32-NEXT:    tail bar
16308983db15SCraig Topper; RV32-NEXT:  .LBB51_2:
16318983db15SCraig Topper; RV32-NEXT:    ret
16328983db15SCraig Topper;
16338983db15SCraig Topper; RV64-LABEL: bit_31_z_branch_i64:
16348983db15SCraig Topper; RV64:       # %bb.0:
16358983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 32
16368983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB51_2
16378983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1638eabaee0cSFangrui Song; RV64-NEXT:    tail bar
16398983db15SCraig Topper; RV64-NEXT:  .LBB51_2:
16408983db15SCraig Topper; RV64-NEXT:    ret
16418983db15SCraig Topper  %2 = and i64 %0, 2147483648
16428983db15SCraig Topper  %3 = icmp eq i64 %2, 0
16438983db15SCraig Topper  br i1 %3, label %4, label %5
16448983db15SCraig Topper
16458983db15SCraig Topper4:
16468983db15SCraig Topper  tail call void @bar()
16478983db15SCraig Topper  br label %5
16488983db15SCraig Topper
16498983db15SCraig Topper5:
16508983db15SCraig Topper  ret void
16518983db15SCraig Topper}
16528983db15SCraig Topper
16538983db15SCraig Topperdefine void @bit_31_nz_branch_i64(i64 %0) {
16548983db15SCraig Topper; RV32-LABEL: bit_31_nz_branch_i64:
16558983db15SCraig Topper; RV32:       # %bb.0:
16568983db15SCraig Topper; RV32-NEXT:    bgez a0, .LBB52_2
16578983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1658eabaee0cSFangrui Song; RV32-NEXT:    tail bar
16598983db15SCraig Topper; RV32-NEXT:  .LBB52_2:
16608983db15SCraig Topper; RV32-NEXT:    ret
16618983db15SCraig Topper;
16628983db15SCraig Topper; RV64-LABEL: bit_31_nz_branch_i64:
16638983db15SCraig Topper; RV64:       # %bb.0:
16648983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 32
16658983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB52_2
16668983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1667eabaee0cSFangrui Song; RV64-NEXT:    tail bar
16688983db15SCraig Topper; RV64-NEXT:  .LBB52_2:
16698983db15SCraig Topper; RV64-NEXT:    ret
16708983db15SCraig Topper  %2 = and i64 %0, 2147483648
16718983db15SCraig Topper  %3 = icmp ne i64 %2, 0
16728983db15SCraig Topper  br i1 %3, label %4, label %5
16738983db15SCraig Topper
16748983db15SCraig Topper4:
16758983db15SCraig Topper  tail call void @bar()
16768983db15SCraig Topper  br label %5
16778983db15SCraig Topper
16788983db15SCraig Topper5:
16798983db15SCraig Topper  ret void
16808983db15SCraig Topper}
16818983db15SCraig Topper
16828983db15SCraig Topperdefine void @bit_32_z_branch_i64(i64 %0) {
16838983db15SCraig Topper; RV32-LABEL: bit_32_z_branch_i64:
16848983db15SCraig Topper; RV32:       # %bb.0:
1685df7ab6a5SCraig Topper; RV32-NEXT:    andi a1, a1, 1
1686df7ab6a5SCraig Topper; RV32-NEXT:    bnez a1, .LBB53_2
16878983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1688eabaee0cSFangrui Song; RV32-NEXT:    tail bar
16898983db15SCraig Topper; RV32-NEXT:  .LBB53_2:
16908983db15SCraig Topper; RV32-NEXT:    ret
16918983db15SCraig Topper;
16928983db15SCraig Topper; RV64-LABEL: bit_32_z_branch_i64:
16938983db15SCraig Topper; RV64:       # %bb.0:
16948983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 31
16958983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB53_2
16968983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1697eabaee0cSFangrui Song; RV64-NEXT:    tail bar
16988983db15SCraig Topper; RV64-NEXT:  .LBB53_2:
16998983db15SCraig Topper; RV64-NEXT:    ret
17008983db15SCraig Topper  %2 = and i64 %0, 4294967296
17018983db15SCraig Topper  %3 = icmp eq i64 %2, 0
17028983db15SCraig Topper  br i1 %3, label %4, label %5
17038983db15SCraig Topper
17048983db15SCraig Topper4:
17058983db15SCraig Topper  tail call void @bar()
17068983db15SCraig Topper  br label %5
17078983db15SCraig Topper
17088983db15SCraig Topper5:
17098983db15SCraig Topper  ret void
17108983db15SCraig Topper}
17118983db15SCraig Topper
17128983db15SCraig Topperdefine void @bit_32_nz_branch_i64(i64 %0) {
17138983db15SCraig Topper; RV32-LABEL: bit_32_nz_branch_i64:
17148983db15SCraig Topper; RV32:       # %bb.0:
1715df7ab6a5SCraig Topper; RV32-NEXT:    andi a1, a1, 1
1716df7ab6a5SCraig Topper; RV32-NEXT:    beqz a1, .LBB54_2
17178983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1718eabaee0cSFangrui Song; RV32-NEXT:    tail bar
17198983db15SCraig Topper; RV32-NEXT:  .LBB54_2:
17208983db15SCraig Topper; RV32-NEXT:    ret
17218983db15SCraig Topper;
17228983db15SCraig Topper; RV64-LABEL: bit_32_nz_branch_i64:
17238983db15SCraig Topper; RV64:       # %bb.0:
17248983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 31
17258983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB54_2
17268983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1727eabaee0cSFangrui Song; RV64-NEXT:    tail bar
17288983db15SCraig Topper; RV64-NEXT:  .LBB54_2:
17298983db15SCraig Topper; RV64-NEXT:    ret
17308983db15SCraig Topper  %2 = and i64 %0, 4294967296
17318983db15SCraig Topper  %3 = icmp ne i64 %2, 0
17328983db15SCraig Topper  br i1 %3, label %4, label %5
17338983db15SCraig Topper
17348983db15SCraig Topper4:
17358983db15SCraig Topper  tail call void @bar()
17368983db15SCraig Topper  br label %5
17378983db15SCraig Topper
17388983db15SCraig Topper5:
17398983db15SCraig Topper  ret void
17408983db15SCraig Topper}
17418983db15SCraig Topper
17428983db15SCraig Topperdefine void @bit_62_z_branch_i64(i64 %0) {
17438983db15SCraig Topper; RV32-LABEL: bit_62_z_branch_i64:
17448983db15SCraig Topper; RV32:       # %bb.0:
1745a2b5b584SCraig Topper; RV32-NEXT:    slli a1, a1, 1
1746a2b5b584SCraig Topper; RV32-NEXT:    bltz a1, .LBB55_2
17478983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1748eabaee0cSFangrui Song; RV32-NEXT:    tail bar
17498983db15SCraig Topper; RV32-NEXT:  .LBB55_2:
17508983db15SCraig Topper; RV32-NEXT:    ret
17518983db15SCraig Topper;
17528983db15SCraig Topper; RV64-LABEL: bit_62_z_branch_i64:
17538983db15SCraig Topper; RV64:       # %bb.0:
17548983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 1
17558983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB55_2
17568983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1757eabaee0cSFangrui Song; RV64-NEXT:    tail bar
17588983db15SCraig Topper; RV64-NEXT:  .LBB55_2:
17598983db15SCraig Topper; RV64-NEXT:    ret
17608983db15SCraig Topper  %2 = and i64 %0, 4611686018427387904
17618983db15SCraig Topper  %3 = icmp eq i64 %2, 0
17628983db15SCraig Topper  br i1 %3, label %4, label %5
17638983db15SCraig Topper
17648983db15SCraig Topper4:
17658983db15SCraig Topper  tail call void @bar()
17668983db15SCraig Topper  br label %5
17678983db15SCraig Topper
17688983db15SCraig Topper5:
17698983db15SCraig Topper  ret void
17708983db15SCraig Topper}
17718983db15SCraig Topper
17728983db15SCraig Topperdefine void @bit_62_nz_branch_i64(i64 %0) {
17738983db15SCraig Topper; RV32-LABEL: bit_62_nz_branch_i64:
17748983db15SCraig Topper; RV32:       # %bb.0:
1775a2b5b584SCraig Topper; RV32-NEXT:    slli a1, a1, 1
1776a2b5b584SCraig Topper; RV32-NEXT:    bgez a1, .LBB56_2
17778983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1778eabaee0cSFangrui Song; RV32-NEXT:    tail bar
17798983db15SCraig Topper; RV32-NEXT:  .LBB56_2:
17808983db15SCraig Topper; RV32-NEXT:    ret
17818983db15SCraig Topper;
17828983db15SCraig Topper; RV64-LABEL: bit_62_nz_branch_i64:
17838983db15SCraig Topper; RV64:       # %bb.0:
17848983db15SCraig Topper; RV64-NEXT:    slli a0, a0, 1
17858983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB56_2
17868983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1787eabaee0cSFangrui Song; RV64-NEXT:    tail bar
17888983db15SCraig Topper; RV64-NEXT:  .LBB56_2:
17898983db15SCraig Topper; RV64-NEXT:    ret
17908983db15SCraig Topper  %2 = and i64 %0, 4611686018427387904
17918983db15SCraig Topper  %3 = icmp ne i64 %2, 0
17928983db15SCraig Topper  br i1 %3, label %4, label %5
17938983db15SCraig Topper
17948983db15SCraig Topper4:
17958983db15SCraig Topper  tail call void @bar()
17968983db15SCraig Topper  br label %5
17978983db15SCraig Topper
17988983db15SCraig Topper5:
17998983db15SCraig Topper  ret void
18008983db15SCraig Topper}
18018983db15SCraig Topper
18028983db15SCraig Topperdefine void @bit_63_z_branch_i64(i64 %0) {
18038983db15SCraig Topper; RV32-LABEL: bit_63_z_branch_i64:
18048983db15SCraig Topper; RV32:       # %bb.0:
18058983db15SCraig Topper; RV32-NEXT:    bltz a1, .LBB57_2
18068983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1807eabaee0cSFangrui Song; RV32-NEXT:    tail bar
18088983db15SCraig Topper; RV32-NEXT:  .LBB57_2:
18098983db15SCraig Topper; RV32-NEXT:    ret
18108983db15SCraig Topper;
18118983db15SCraig Topper; RV64-LABEL: bit_63_z_branch_i64:
18128983db15SCraig Topper; RV64:       # %bb.0:
18138983db15SCraig Topper; RV64-NEXT:    bltz a0, .LBB57_2
18148983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1815eabaee0cSFangrui Song; RV64-NEXT:    tail bar
18168983db15SCraig Topper; RV64-NEXT:  .LBB57_2:
18178983db15SCraig Topper; RV64-NEXT:    ret
18188983db15SCraig Topper  %2 = and i64 %0, 9223372036854775808
18198983db15SCraig Topper  %3 = icmp eq i64 %2, 0
18208983db15SCraig Topper  br i1 %3, label %4, label %5
18218983db15SCraig Topper
18228983db15SCraig Topper4:
18238983db15SCraig Topper  tail call void @bar()
18248983db15SCraig Topper  br label %5
18258983db15SCraig Topper
18268983db15SCraig Topper5:
18278983db15SCraig Topper  ret void
18288983db15SCraig Topper}
18298983db15SCraig Topper
18308983db15SCraig Topperdefine void @bit_63_nz_branch_i64(i64 %0) {
18318983db15SCraig Topper; RV32-LABEL: bit_63_nz_branch_i64:
18328983db15SCraig Topper; RV32:       # %bb.0:
18338983db15SCraig Topper; RV32-NEXT:    bgez a1, .LBB58_2
18348983db15SCraig Topper; RV32-NEXT:  # %bb.1:
1835eabaee0cSFangrui Song; RV32-NEXT:    tail bar
18368983db15SCraig Topper; RV32-NEXT:  .LBB58_2:
18378983db15SCraig Topper; RV32-NEXT:    ret
18388983db15SCraig Topper;
18398983db15SCraig Topper; RV64-LABEL: bit_63_nz_branch_i64:
18408983db15SCraig Topper; RV64:       # %bb.0:
18418983db15SCraig Topper; RV64-NEXT:    bgez a0, .LBB58_2
18428983db15SCraig Topper; RV64-NEXT:  # %bb.1:
1843eabaee0cSFangrui Song; RV64-NEXT:    tail bar
18448983db15SCraig Topper; RV64-NEXT:  .LBB58_2:
18458983db15SCraig Topper; RV64-NEXT:    ret
18468983db15SCraig Topper  %2 = and i64 %0, 9223372036854775808
18478983db15SCraig Topper  %3 = icmp ne i64 %2, 0
18488983db15SCraig Topper  br i1 %3, label %4, label %5
18498983db15SCraig Topper
18508983db15SCraig Topper4:
18518983db15SCraig Topper  tail call void @bar()
18528983db15SCraig Topper  br label %5
18538983db15SCraig Topper
18548983db15SCraig Topper5:
18558983db15SCraig Topper  ret void
18568983db15SCraig Topper}
18575fcdf762SLiaoChunyu
18585fcdf762SLiaoChunyudefine signext i32 @bit_10_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
18595fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_z_select_i32:
18605fcdf762SLiaoChunyu; CHECK:       # %bb.0:
18615fcdf762SLiaoChunyu; CHECK-NEXT:    andi a3, a0, 1023
18625fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
18635fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a3, .LBB59_2
18645fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
18655fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a2
18665fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB59_2:
18675fcdf762SLiaoChunyu; CHECK-NEXT:    ret
18685fcdf762SLiaoChunyu  %1 = and i32 %a, 1023
18695fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
18705fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
18715fcdf762SLiaoChunyu  ret i32 %3
18725fcdf762SLiaoChunyu}
18735fcdf762SLiaoChunyu
18745fcdf762SLiaoChunyudefine signext i32 @bit_10_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
18755fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_nz_select_i32:
18765fcdf762SLiaoChunyu; CHECK:       # %bb.0:
18775fcdf762SLiaoChunyu; CHECK-NEXT:    andi a3, a0, 1023
18785fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
18795fcdf762SLiaoChunyu; CHECK-NEXT:    bnez a3, .LBB60_2
18805fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
18815fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a2
18825fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB60_2:
18835fcdf762SLiaoChunyu; CHECK-NEXT:    ret
18845fcdf762SLiaoChunyu  %1 = and i32 %a, 1023
18855fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
18865fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
18875fcdf762SLiaoChunyu  ret i32 %3
18885fcdf762SLiaoChunyu}
18895fcdf762SLiaoChunyu
18905fcdf762SLiaoChunyudefine signext i32 @bit_11_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
18915fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_z_select_i32:
18925fcdf762SLiaoChunyu; CHECK:       # %bb.0:
18935fcdf762SLiaoChunyu; CHECK-NEXT:    andi a3, a0, 2047
18945fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
18955fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a3, .LBB61_2
18965fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
18975fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a2
18985fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB61_2:
18995fcdf762SLiaoChunyu; CHECK-NEXT:    ret
19005fcdf762SLiaoChunyu  %1 = and i32 %a, 2047
19015fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
19025fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
19035fcdf762SLiaoChunyu  ret i32 %3
19045fcdf762SLiaoChunyu}
19055fcdf762SLiaoChunyu
19065fcdf762SLiaoChunyudefine signext i32 @bit_11_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
19075fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_nz_select_i32:
19085fcdf762SLiaoChunyu; CHECK:       # %bb.0:
19095fcdf762SLiaoChunyu; CHECK-NEXT:    andi a3, a0, 2047
19105fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
19115fcdf762SLiaoChunyu; CHECK-NEXT:    bnez a3, .LBB62_2
19125fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
19135fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a2
19145fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB62_2:
19155fcdf762SLiaoChunyu; CHECK-NEXT:    ret
19165fcdf762SLiaoChunyu  %1 = and i32 %a, 2047
19175fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
19185fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
19195fcdf762SLiaoChunyu  ret i32 %3
19205fcdf762SLiaoChunyu}
19215fcdf762SLiaoChunyu
19225fcdf762SLiaoChunyudefine signext i32 @bit_16_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
19235fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_z_select_i32:
19245fcdf762SLiaoChunyu; RV32:       # %bb.0:
19255fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 16
19265fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
19275fcdf762SLiaoChunyu; RV32-NEXT:    beqz a3, .LBB63_2
19285fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
19295fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
19305fcdf762SLiaoChunyu; RV32-NEXT:  .LBB63_2:
19315fcdf762SLiaoChunyu; RV32-NEXT:    ret
19325fcdf762SLiaoChunyu;
19335fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_z_select_i32:
19345fcdf762SLiaoChunyu; RV64:       # %bb.0:
19355fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 48
19365fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
19375fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB63_2
19385fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
19395fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
19405fcdf762SLiaoChunyu; RV64-NEXT:  .LBB63_2:
19415fcdf762SLiaoChunyu; RV64-NEXT:    ret
19425fcdf762SLiaoChunyu  %1 = and i32 %a, 65535
19435fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
19445fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
19455fcdf762SLiaoChunyu  ret i32 %3
19465fcdf762SLiaoChunyu}
19475fcdf762SLiaoChunyu
19485fcdf762SLiaoChunyudefine signext i32 @bit_16_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
19495fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_nz_select_i32:
19505fcdf762SLiaoChunyu; RV32:       # %bb.0:
19515fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 16
19525fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
19535fcdf762SLiaoChunyu; RV32-NEXT:    bnez a3, .LBB64_2
19545fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
19555fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
19565fcdf762SLiaoChunyu; RV32-NEXT:  .LBB64_2:
19575fcdf762SLiaoChunyu; RV32-NEXT:    ret
19585fcdf762SLiaoChunyu;
19595fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_nz_select_i32:
19605fcdf762SLiaoChunyu; RV64:       # %bb.0:
19615fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 48
19625fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
19635fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB64_2
19645fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
19655fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
19665fcdf762SLiaoChunyu; RV64-NEXT:  .LBB64_2:
19675fcdf762SLiaoChunyu; RV64-NEXT:    ret
19685fcdf762SLiaoChunyu  %1 = and i32 %a, 65535
19695fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
19705fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
19715fcdf762SLiaoChunyu  ret i32 %3
19725fcdf762SLiaoChunyu}
19735fcdf762SLiaoChunyu
19745fcdf762SLiaoChunyudefine signext i32 @bit_20_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
19755fcdf762SLiaoChunyu; RV32-LABEL: bit_20_1_z_select_i32:
19765fcdf762SLiaoChunyu; RV32:       # %bb.0:
19775fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 12
19785fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
19795fcdf762SLiaoChunyu; RV32-NEXT:    beqz a3, .LBB65_2
19805fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
19815fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
19825fcdf762SLiaoChunyu; RV32-NEXT:  .LBB65_2:
19835fcdf762SLiaoChunyu; RV32-NEXT:    ret
19845fcdf762SLiaoChunyu;
19855fcdf762SLiaoChunyu; RV64-LABEL: bit_20_1_z_select_i32:
19865fcdf762SLiaoChunyu; RV64:       # %bb.0:
19875fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 44
19885fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
19895fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB65_2
19905fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
19915fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
19925fcdf762SLiaoChunyu; RV64-NEXT:  .LBB65_2:
19935fcdf762SLiaoChunyu; RV64-NEXT:    ret
19945fcdf762SLiaoChunyu  %1 = and i32 %a, 1048575
19955fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
19965fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
19975fcdf762SLiaoChunyu  ret i32 %3
19985fcdf762SLiaoChunyu}
19995fcdf762SLiaoChunyu
20005fcdf762SLiaoChunyudefine signext i32 @bit_20_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
20015fcdf762SLiaoChunyu; RV32-LABEL: bit_20_1_nz_select_i32:
20025fcdf762SLiaoChunyu; RV32:       # %bb.0:
20035fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 12
20045fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
20055fcdf762SLiaoChunyu; RV32-NEXT:    bnez a3, .LBB66_2
20065fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
20075fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
20085fcdf762SLiaoChunyu; RV32-NEXT:  .LBB66_2:
20095fcdf762SLiaoChunyu; RV32-NEXT:    ret
20105fcdf762SLiaoChunyu;
20115fcdf762SLiaoChunyu; RV64-LABEL: bit_20_1_nz_select_i32:
20125fcdf762SLiaoChunyu; RV64:       # %bb.0:
20135fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 44
20145fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
20155fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB66_2
20165fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
20175fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
20185fcdf762SLiaoChunyu; RV64-NEXT:  .LBB66_2:
20195fcdf762SLiaoChunyu; RV64-NEXT:    ret
20205fcdf762SLiaoChunyu  %1 = and i32 %a, 1048575
20215fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
20225fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
20235fcdf762SLiaoChunyu  ret i32 %3
20245fcdf762SLiaoChunyu}
20255fcdf762SLiaoChunyu
20265fcdf762SLiaoChunyudefine signext i32 @bit_31_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
20275fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_z_select_i32:
20285fcdf762SLiaoChunyu; RV32:       # %bb.0:
20295fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 1
20305fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
20315fcdf762SLiaoChunyu; RV32-NEXT:    beqz a3, .LBB67_2
20325fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
20335fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
20345fcdf762SLiaoChunyu; RV32-NEXT:  .LBB67_2:
20355fcdf762SLiaoChunyu; RV32-NEXT:    ret
20365fcdf762SLiaoChunyu;
20375fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_z_select_i32:
20385fcdf762SLiaoChunyu; RV64:       # %bb.0:
20395fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 33
20405fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
20415fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB67_2
20425fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
20435fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
20445fcdf762SLiaoChunyu; RV64-NEXT:  .LBB67_2:
20455fcdf762SLiaoChunyu; RV64-NEXT:    ret
20465fcdf762SLiaoChunyu  %1 = and i32 %a, 2147483647
20475fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
20485fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
20495fcdf762SLiaoChunyu  ret i32 %3
20505fcdf762SLiaoChunyu}
20515fcdf762SLiaoChunyu
20525fcdf762SLiaoChunyudefine signext i32 @bit_31_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
20535fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_nz_select_i32:
20545fcdf762SLiaoChunyu; RV32:       # %bb.0:
20555fcdf762SLiaoChunyu; RV32-NEXT:    slli a3, a0, 1
20565fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a1
20575fcdf762SLiaoChunyu; RV32-NEXT:    bnez a3, .LBB68_2
20585fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
20595fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
20605fcdf762SLiaoChunyu; RV32-NEXT:  .LBB68_2:
20615fcdf762SLiaoChunyu; RV32-NEXT:    ret
20625fcdf762SLiaoChunyu;
20635fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_nz_select_i32:
20645fcdf762SLiaoChunyu; RV64:       # %bb.0:
20655fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 33
20665fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
20675fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB68_2
20685fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
20695fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
20705fcdf762SLiaoChunyu; RV64-NEXT:  .LBB68_2:
20715fcdf762SLiaoChunyu; RV64-NEXT:    ret
20725fcdf762SLiaoChunyu  %1 = and i32 %a, 2147483647
20735fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
20745fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
20755fcdf762SLiaoChunyu  ret i32 %3
20765fcdf762SLiaoChunyu}
20775fcdf762SLiaoChunyu
20785fcdf762SLiaoChunyudefine signext i32 @bit_32_1_z_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
20795fcdf762SLiaoChunyu; CHECK-LABEL: bit_32_1_z_select_i32:
20805fcdf762SLiaoChunyu; CHECK:       # %bb.0:
20815fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB69_2
20825fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
20835fcdf762SLiaoChunyu; CHECK-NEXT:    mv a1, a2
20845fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB69_2:
20855fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
20865fcdf762SLiaoChunyu; CHECK-NEXT:    ret
20875fcdf762SLiaoChunyu  %1 = and i32 %a, 4294967295
20885fcdf762SLiaoChunyu  %2 = icmp eq i32 %1, 0
20895fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
20905fcdf762SLiaoChunyu  ret i32 %3
20915fcdf762SLiaoChunyu}
20925fcdf762SLiaoChunyu
20935fcdf762SLiaoChunyudefine signext i32 @bit_32_1_nz_select_i32(i32 signext %a, i32 signext %b, i32 signext %c) {
20945fcdf762SLiaoChunyu; CHECK-LABEL: bit_32_1_nz_select_i32:
20955fcdf762SLiaoChunyu; CHECK:       # %bb.0:
20965fcdf762SLiaoChunyu; CHECK-NEXT:    bnez a0, .LBB70_2
20975fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
20985fcdf762SLiaoChunyu; CHECK-NEXT:    mv a1, a2
20995fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB70_2:
21005fcdf762SLiaoChunyu; CHECK-NEXT:    mv a0, a1
21015fcdf762SLiaoChunyu; CHECK-NEXT:    ret
21025fcdf762SLiaoChunyu  %1 = and i32 %a, 4294967295
21035fcdf762SLiaoChunyu  %2 = icmp ne i32 %1, 0
21045fcdf762SLiaoChunyu  %3 = select i1 %2, i32 %b, i32 %c
21055fcdf762SLiaoChunyu  ret i32 %3
21065fcdf762SLiaoChunyu}
21075fcdf762SLiaoChunyu
21085fcdf762SLiaoChunyudefine i64 @bit_10_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
21095fcdf762SLiaoChunyu; RV32-LABEL: bit_10_1_z_select_i64:
21105fcdf762SLiaoChunyu; RV32:       # %bb.0:
21115fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2112*9122c523SPengcheng Wang; RV32-NEXT:    andi a3, a0, 1023
21135fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2114*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB71_2
21155fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
21165fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
21175fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
21185fcdf762SLiaoChunyu; RV32-NEXT:  .LBB71_2:
21195fcdf762SLiaoChunyu; RV32-NEXT:    ret
21205fcdf762SLiaoChunyu;
21215fcdf762SLiaoChunyu; RV64-LABEL: bit_10_1_z_select_i64:
21225fcdf762SLiaoChunyu; RV64:       # %bb.0:
21235fcdf762SLiaoChunyu; RV64-NEXT:    andi a3, a0, 1023
21245fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
21255fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB71_2
21265fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
21275fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
21285fcdf762SLiaoChunyu; RV64-NEXT:  .LBB71_2:
21295fcdf762SLiaoChunyu; RV64-NEXT:    ret
21305fcdf762SLiaoChunyu  %1 = and i64 %a, 1023
21315fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
21325fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
21335fcdf762SLiaoChunyu  ret i64 %3
21345fcdf762SLiaoChunyu}
21355fcdf762SLiaoChunyu
21365fcdf762SLiaoChunyudefine i64 @bit_10_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
21375fcdf762SLiaoChunyu; RV32-LABEL: bit_10_1_nz_select_i64:
21385fcdf762SLiaoChunyu; RV32:       # %bb.0:
21395fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2140*9122c523SPengcheng Wang; RV32-NEXT:    andi a3, a0, 1023
21415fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2142*9122c523SPengcheng Wang; RV32-NEXT:    bnez a3, .LBB72_2
21435fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
21445fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
21455fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
21465fcdf762SLiaoChunyu; RV32-NEXT:  .LBB72_2:
21475fcdf762SLiaoChunyu; RV32-NEXT:    ret
21485fcdf762SLiaoChunyu;
21495fcdf762SLiaoChunyu; RV64-LABEL: bit_10_1_nz_select_i64:
21505fcdf762SLiaoChunyu; RV64:       # %bb.0:
21515fcdf762SLiaoChunyu; RV64-NEXT:    andi a3, a0, 1023
21525fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
21535fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB72_2
21545fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
21555fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
21565fcdf762SLiaoChunyu; RV64-NEXT:  .LBB72_2:
21575fcdf762SLiaoChunyu; RV64-NEXT:    ret
21585fcdf762SLiaoChunyu  %1 = and i64 %a, 1023
21595fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
21605fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
21615fcdf762SLiaoChunyu  ret i64 %3
21625fcdf762SLiaoChunyu}
21635fcdf762SLiaoChunyu
21645fcdf762SLiaoChunyudefine i64 @bit_11_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
21655fcdf762SLiaoChunyu; RV32-LABEL: bit_11_1_z_select_i64:
21665fcdf762SLiaoChunyu; RV32:       # %bb.0:
21675fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2168*9122c523SPengcheng Wang; RV32-NEXT:    andi a3, a0, 2047
21695fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2170*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB73_2
21715fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
21725fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
21735fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
21745fcdf762SLiaoChunyu; RV32-NEXT:  .LBB73_2:
21755fcdf762SLiaoChunyu; RV32-NEXT:    ret
21765fcdf762SLiaoChunyu;
21775fcdf762SLiaoChunyu; RV64-LABEL: bit_11_1_z_select_i64:
21785fcdf762SLiaoChunyu; RV64:       # %bb.0:
21795fcdf762SLiaoChunyu; RV64-NEXT:    andi a3, a0, 2047
21805fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
21815fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB73_2
21825fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
21835fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
21845fcdf762SLiaoChunyu; RV64-NEXT:  .LBB73_2:
21855fcdf762SLiaoChunyu; RV64-NEXT:    ret
21865fcdf762SLiaoChunyu  %1 = and i64 %a, 2047
21875fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
21885fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
21895fcdf762SLiaoChunyu  ret i64 %3
21905fcdf762SLiaoChunyu}
21915fcdf762SLiaoChunyu
21925fcdf762SLiaoChunyudefine i64 @bit_11_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
21935fcdf762SLiaoChunyu; RV32-LABEL: bit_11_1_nz_select_i64:
21945fcdf762SLiaoChunyu; RV32:       # %bb.0:
21955fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2196*9122c523SPengcheng Wang; RV32-NEXT:    andi a3, a0, 2047
21975fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2198*9122c523SPengcheng Wang; RV32-NEXT:    bnez a3, .LBB74_2
21995fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
22005fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
22015fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
22025fcdf762SLiaoChunyu; RV32-NEXT:  .LBB74_2:
22035fcdf762SLiaoChunyu; RV32-NEXT:    ret
22045fcdf762SLiaoChunyu;
22055fcdf762SLiaoChunyu; RV64-LABEL: bit_11_1_nz_select_i64:
22065fcdf762SLiaoChunyu; RV64:       # %bb.0:
22075fcdf762SLiaoChunyu; RV64-NEXT:    andi a3, a0, 2047
22085fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
22095fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB74_2
22105fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
22115fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
22125fcdf762SLiaoChunyu; RV64-NEXT:  .LBB74_2:
22135fcdf762SLiaoChunyu; RV64-NEXT:    ret
22145fcdf762SLiaoChunyu  %1 = and i64 %a, 2047
22155fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
22165fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
22175fcdf762SLiaoChunyu  ret i64 %3
22185fcdf762SLiaoChunyu}
22195fcdf762SLiaoChunyu
22205fcdf762SLiaoChunyudefine i64 @bit_16_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
22215fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_z_select_i64:
22225fcdf762SLiaoChunyu; RV32:       # %bb.0:
22235fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2224*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 16
22255fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2226*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB75_2
22275fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
22285fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
22295fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
22305fcdf762SLiaoChunyu; RV32-NEXT:  .LBB75_2:
22315fcdf762SLiaoChunyu; RV32-NEXT:    ret
22325fcdf762SLiaoChunyu;
22335fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_z_select_i64:
22345fcdf762SLiaoChunyu; RV64:       # %bb.0:
22355fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 48
22365fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
22375fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB75_2
22385fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
22395fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
22405fcdf762SLiaoChunyu; RV64-NEXT:  .LBB75_2:
22415fcdf762SLiaoChunyu; RV64-NEXT:    ret
22425fcdf762SLiaoChunyu  %1 = and i64 %a, 65535
22435fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
22445fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
22455fcdf762SLiaoChunyu  ret i64 %3
22465fcdf762SLiaoChunyu}
22475fcdf762SLiaoChunyu
22485fcdf762SLiaoChunyudefine i64 @bit_16_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
22495fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_nz_select_i64:
22505fcdf762SLiaoChunyu; RV32:       # %bb.0:
22515fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
22525fcdf762SLiaoChunyu; RV32-NEXT:    bnez a0, .LBB76_2
22535fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
22545fcdf762SLiaoChunyu; RV32-NEXT:    mv a2, a4
22555fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
22565fcdf762SLiaoChunyu; RV32-NEXT:  .LBB76_2:
22575fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
22585fcdf762SLiaoChunyu; RV32-NEXT:    ret
22595fcdf762SLiaoChunyu;
22605fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_nz_select_i64:
22615fcdf762SLiaoChunyu; RV64:       # %bb.0:
22625fcdf762SLiaoChunyu; RV64-NEXT:    sext.w a3, a0
22635fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
22645fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB76_2
22655fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
22665fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
22675fcdf762SLiaoChunyu; RV64-NEXT:  .LBB76_2:
22685fcdf762SLiaoChunyu; RV64-NEXT:    ret
22695fcdf762SLiaoChunyu  %1 = and i64 %a, 4294967295
22705fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
22715fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
22725fcdf762SLiaoChunyu  ret i64 %3
22735fcdf762SLiaoChunyu}
22745fcdf762SLiaoChunyu
22755fcdf762SLiaoChunyu
22765fcdf762SLiaoChunyudefine i64 @bit_20_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
22775fcdf762SLiaoChunyu; RV32-LABEL: bit_20_1_z_select_i64:
22785fcdf762SLiaoChunyu; RV32:       # %bb.0:
22795fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2280*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 12
22815fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2282*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB77_2
22835fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
22845fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
22855fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
22865fcdf762SLiaoChunyu; RV32-NEXT:  .LBB77_2:
22875fcdf762SLiaoChunyu; RV32-NEXT:    ret
22885fcdf762SLiaoChunyu;
22895fcdf762SLiaoChunyu; RV64-LABEL: bit_20_1_z_select_i64:
22905fcdf762SLiaoChunyu; RV64:       # %bb.0:
22915fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 44
22925fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
22935fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB77_2
22945fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
22955fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
22965fcdf762SLiaoChunyu; RV64-NEXT:  .LBB77_2:
22975fcdf762SLiaoChunyu; RV64-NEXT:    ret
22985fcdf762SLiaoChunyu  %1 = and i64 %a, 1048575
22995fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
23005fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
23015fcdf762SLiaoChunyu  ret i64 %3
23025fcdf762SLiaoChunyu}
23035fcdf762SLiaoChunyu
23045fcdf762SLiaoChunyudefine i64 @bit_20_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
23055fcdf762SLiaoChunyu; RV32-LABEL: bit_20_1_nz_select_i64:
23065fcdf762SLiaoChunyu; RV32:       # %bb.0:
23075fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2308*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 12
23095fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2310*9122c523SPengcheng Wang; RV32-NEXT:    bnez a3, .LBB78_2
23115fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
23125fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
23135fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
23145fcdf762SLiaoChunyu; RV32-NEXT:  .LBB78_2:
23155fcdf762SLiaoChunyu; RV32-NEXT:    ret
23165fcdf762SLiaoChunyu;
23175fcdf762SLiaoChunyu; RV64-LABEL: bit_20_1_nz_select_i64:
23185fcdf762SLiaoChunyu; RV64:       # %bb.0:
23195fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 44
23205fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
23215fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB78_2
23225fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
23235fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
23245fcdf762SLiaoChunyu; RV64-NEXT:  .LBB78_2:
23255fcdf762SLiaoChunyu; RV64-NEXT:    ret
23265fcdf762SLiaoChunyu  %1 = and i64 %a, 1048575
23275fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
23285fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
23295fcdf762SLiaoChunyu  ret i64 %3
23305fcdf762SLiaoChunyu}
23315fcdf762SLiaoChunyu
23325fcdf762SLiaoChunyudefine i64 @bit_31_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
23335fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_z_select_i64:
23345fcdf762SLiaoChunyu; RV32:       # %bb.0:
23355fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2336*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 1
23375fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2338*9122c523SPengcheng Wang; RV32-NEXT:    beqz a3, .LBB79_2
23395fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
23405fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
23415fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
23425fcdf762SLiaoChunyu; RV32-NEXT:  .LBB79_2:
23435fcdf762SLiaoChunyu; RV32-NEXT:    ret
23445fcdf762SLiaoChunyu;
23455fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_z_select_i64:
23465fcdf762SLiaoChunyu; RV64:       # %bb.0:
23475fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 33
23485fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
23495fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB79_2
23505fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
23515fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
23525fcdf762SLiaoChunyu; RV64-NEXT:  .LBB79_2:
23535fcdf762SLiaoChunyu; RV64-NEXT:    ret
23545fcdf762SLiaoChunyu  %1 = and i64 %a, 2147483647
23555fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
23565fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
23575fcdf762SLiaoChunyu  ret i64 %3
23585fcdf762SLiaoChunyu}
23595fcdf762SLiaoChunyu
23605fcdf762SLiaoChunyudefine i64 @bit_31_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
23615fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_nz_select_i64:
23625fcdf762SLiaoChunyu; RV32:       # %bb.0:
23635fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
2364*9122c523SPengcheng Wang; RV32-NEXT:    slli a3, a0, 1
23655fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2366*9122c523SPengcheng Wang; RV32-NEXT:    bnez a3, .LBB80_2
23675fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
23685fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
23695fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
23705fcdf762SLiaoChunyu; RV32-NEXT:  .LBB80_2:
23715fcdf762SLiaoChunyu; RV32-NEXT:    ret
23725fcdf762SLiaoChunyu;
23735fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_nz_select_i64:
23745fcdf762SLiaoChunyu; RV64:       # %bb.0:
23755fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 33
23765fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
23775fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB80_2
23785fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
23795fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
23805fcdf762SLiaoChunyu; RV64-NEXT:  .LBB80_2:
23815fcdf762SLiaoChunyu; RV64-NEXT:    ret
23825fcdf762SLiaoChunyu  %1 = and i64 %a, 2147483647
23835fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
23845fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
23855fcdf762SLiaoChunyu  ret i64 %3
23865fcdf762SLiaoChunyu}
23875fcdf762SLiaoChunyu
23885fcdf762SLiaoChunyudefine i64 @bit_32_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
23895fcdf762SLiaoChunyu; RV32-LABEL: bit_32_1_z_select_i64:
23905fcdf762SLiaoChunyu; RV32:       # %bb.0:
23915fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
23925fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB81_2
23935fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
23945fcdf762SLiaoChunyu; RV32-NEXT:    mv a2, a4
23955fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
23965fcdf762SLiaoChunyu; RV32-NEXT:  .LBB81_2:
23975fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
23985fcdf762SLiaoChunyu; RV32-NEXT:    ret
23995fcdf762SLiaoChunyu;
24005fcdf762SLiaoChunyu; RV64-LABEL: bit_32_1_z_select_i64:
24015fcdf762SLiaoChunyu; RV64:       # %bb.0:
24025fcdf762SLiaoChunyu; RV64-NEXT:    sext.w a3, a0
24035fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
24045fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB81_2
24055fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
24065fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
24075fcdf762SLiaoChunyu; RV64-NEXT:  .LBB81_2:
24085fcdf762SLiaoChunyu; RV64-NEXT:    ret
24095fcdf762SLiaoChunyu  %1 = and i64 %a, 4294967295
24105fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
24115fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
24125fcdf762SLiaoChunyu  ret i64 %3
24135fcdf762SLiaoChunyu}
24145fcdf762SLiaoChunyu
24155fcdf762SLiaoChunyudefine i64 @bit_32_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
24165fcdf762SLiaoChunyu; RV32-LABEL: bit_32_1_nz_select_i64:
24175fcdf762SLiaoChunyu; RV32:       # %bb.0:
24185fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a3
24195fcdf762SLiaoChunyu; RV32-NEXT:    bnez a0, .LBB82_2
24205fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
24215fcdf762SLiaoChunyu; RV32-NEXT:    mv a2, a4
24225fcdf762SLiaoChunyu; RV32-NEXT:    mv a1, a5
24235fcdf762SLiaoChunyu; RV32-NEXT:  .LBB82_2:
24245fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
24255fcdf762SLiaoChunyu; RV32-NEXT:    ret
24265fcdf762SLiaoChunyu;
24275fcdf762SLiaoChunyu; RV64-LABEL: bit_32_1_nz_select_i64:
24285fcdf762SLiaoChunyu; RV64:       # %bb.0:
24295fcdf762SLiaoChunyu; RV64-NEXT:    sext.w a3, a0
24305fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
24315fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB82_2
24325fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
24335fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
24345fcdf762SLiaoChunyu; RV64-NEXT:  .LBB82_2:
24355fcdf762SLiaoChunyu; RV64-NEXT:    ret
24365fcdf762SLiaoChunyu  %1 = and i64 %a, 4294967295
24375fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
24385fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
24395fcdf762SLiaoChunyu  ret i64 %3
24405fcdf762SLiaoChunyu}
24415fcdf762SLiaoChunyu
24425fcdf762SLiaoChunyudefine i64 @bit_55_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
24435fcdf762SLiaoChunyu; RV32-LABEL: bit_55_1_z_select_i64:
24445fcdf762SLiaoChunyu; RV32:       # %bb.0:
24455fcdf762SLiaoChunyu; RV32-NEXT:    slli a1, a1, 9
24465fcdf762SLiaoChunyu; RV32-NEXT:    srli a1, a1, 9
2447*9122c523SPengcheng Wang; RV32-NEXT:    or a1, a0, a1
24485fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2449*9122c523SPengcheng Wang; RV32-NEXT:    beqz a1, .LBB83_2
24505fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
24515fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
2452*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
24535fcdf762SLiaoChunyu; RV32-NEXT:  .LBB83_2:
2454*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
24555fcdf762SLiaoChunyu; RV32-NEXT:    ret
24565fcdf762SLiaoChunyu;
24575fcdf762SLiaoChunyu; RV64-LABEL: bit_55_1_z_select_i64:
24585fcdf762SLiaoChunyu; RV64:       # %bb.0:
24595fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 9
24605fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
24615fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB83_2
24625fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
24635fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
24645fcdf762SLiaoChunyu; RV64-NEXT:  .LBB83_2:
24655fcdf762SLiaoChunyu; RV64-NEXT:    ret
24665fcdf762SLiaoChunyu  %1 = and i64 %a, 36028797018963967
24675fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
24685fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
24695fcdf762SLiaoChunyu  ret i64 %3
24705fcdf762SLiaoChunyu}
24715fcdf762SLiaoChunyu
24725fcdf762SLiaoChunyudefine i64 @bit_55_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
24735fcdf762SLiaoChunyu; RV32-LABEL: bit_55_1_nz_select_i64:
24745fcdf762SLiaoChunyu; RV32:       # %bb.0:
24755fcdf762SLiaoChunyu; RV32-NEXT:    slli a1, a1, 9
24765fcdf762SLiaoChunyu; RV32-NEXT:    srli a1, a1, 9
2477*9122c523SPengcheng Wang; RV32-NEXT:    or a1, a0, a1
24785fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2479*9122c523SPengcheng Wang; RV32-NEXT:    bnez a1, .LBB84_2
24805fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
24815fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
2482*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
24835fcdf762SLiaoChunyu; RV32-NEXT:  .LBB84_2:
2484*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
24855fcdf762SLiaoChunyu; RV32-NEXT:    ret
24865fcdf762SLiaoChunyu;
24875fcdf762SLiaoChunyu; RV64-LABEL: bit_55_1_nz_select_i64:
24885fcdf762SLiaoChunyu; RV64:       # %bb.0:
24895fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 9
24905fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
24915fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB84_2
24925fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
24935fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
24945fcdf762SLiaoChunyu; RV64-NEXT:  .LBB84_2:
24955fcdf762SLiaoChunyu; RV64-NEXT:    ret
24965fcdf762SLiaoChunyu  %1 = and i64 %a, 36028797018963967
24975fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
24985fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
24995fcdf762SLiaoChunyu  ret i64 %3
25005fcdf762SLiaoChunyu}
25015fcdf762SLiaoChunyu
25025fcdf762SLiaoChunyudefine i64 @bit_63_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
25035fcdf762SLiaoChunyu; RV32I-LABEL: bit_63_1_z_select_i64:
25045fcdf762SLiaoChunyu; RV32I:       # %bb.0:
25055fcdf762SLiaoChunyu; RV32I-NEXT:    slli a1, a1, 1
25065fcdf762SLiaoChunyu; RV32I-NEXT:    srli a1, a1, 1
2507*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
25085fcdf762SLiaoChunyu; RV32I-NEXT:    mv a0, a2
2509*9122c523SPengcheng Wang; RV32I-NEXT:    beqz a1, .LBB85_2
25105fcdf762SLiaoChunyu; RV32I-NEXT:  # %bb.1:
25115fcdf762SLiaoChunyu; RV32I-NEXT:    mv a0, a4
2512*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
25135fcdf762SLiaoChunyu; RV32I-NEXT:  .LBB85_2:
2514*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
25155fcdf762SLiaoChunyu; RV32I-NEXT:    ret
25165fcdf762SLiaoChunyu;
25175fcdf762SLiaoChunyu; RV64-LABEL: bit_63_1_z_select_i64:
25185fcdf762SLiaoChunyu; RV64:       # %bb.0:
25195fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 1
25205fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
25215fcdf762SLiaoChunyu; RV64-NEXT:    beqz a3, .LBB85_2
25225fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
25235fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
25245fcdf762SLiaoChunyu; RV64-NEXT:  .LBB85_2:
25255fcdf762SLiaoChunyu; RV64-NEXT:    ret
25265fcdf762SLiaoChunyu;
25275fcdf762SLiaoChunyu; RV32ZBS-LABEL: bit_63_1_z_select_i64:
25285fcdf762SLiaoChunyu; RV32ZBS:       # %bb.0:
25295fcdf762SLiaoChunyu; RV32ZBS-NEXT:    bclri a1, a1, 31
2530*9122c523SPengcheng Wang; RV32ZBS-NEXT:    or a1, a0, a1
25315fcdf762SLiaoChunyu; RV32ZBS-NEXT:    mv a0, a2
2532*9122c523SPengcheng Wang; RV32ZBS-NEXT:    beqz a1, .LBB85_2
25335fcdf762SLiaoChunyu; RV32ZBS-NEXT:  # %bb.1:
25345fcdf762SLiaoChunyu; RV32ZBS-NEXT:    mv a0, a4
2535*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a3, a5
25365fcdf762SLiaoChunyu; RV32ZBS-NEXT:  .LBB85_2:
2537*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a1, a3
25385fcdf762SLiaoChunyu; RV32ZBS-NEXT:    ret
253904a2baf5SPhilipp Tomsich;
254004a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_63_1_z_select_i64:
254104a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
254204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    slli a1, a1, 1
254304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srli a1, a1, 1
2544*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    or a1, a0, a1
254504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
2546*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    beqz a1, .LBB85_2
254704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
254804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
2549*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a3, a5
255004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB85_2:
2551*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a1, a3
255204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
25535fcdf762SLiaoChunyu  %1 = and i64 %a, 9223372036854775807
25545fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
25555fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
25565fcdf762SLiaoChunyu  ret i64 %3
25575fcdf762SLiaoChunyu}
25585fcdf762SLiaoChunyu
25595fcdf762SLiaoChunyudefine i64 @bit_63_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
25605fcdf762SLiaoChunyu; RV32I-LABEL: bit_63_1_nz_select_i64:
25615fcdf762SLiaoChunyu; RV32I:       # %bb.0:
25625fcdf762SLiaoChunyu; RV32I-NEXT:    slli a1, a1, 1
25635fcdf762SLiaoChunyu; RV32I-NEXT:    srli a1, a1, 1
2564*9122c523SPengcheng Wang; RV32I-NEXT:    or a1, a0, a1
25655fcdf762SLiaoChunyu; RV32I-NEXT:    mv a0, a2
2566*9122c523SPengcheng Wang; RV32I-NEXT:    bnez a1, .LBB86_2
25675fcdf762SLiaoChunyu; RV32I-NEXT:  # %bb.1:
25685fcdf762SLiaoChunyu; RV32I-NEXT:    mv a0, a4
2569*9122c523SPengcheng Wang; RV32I-NEXT:    mv a3, a5
25705fcdf762SLiaoChunyu; RV32I-NEXT:  .LBB86_2:
2571*9122c523SPengcheng Wang; RV32I-NEXT:    mv a1, a3
25725fcdf762SLiaoChunyu; RV32I-NEXT:    ret
25735fcdf762SLiaoChunyu;
25745fcdf762SLiaoChunyu; RV64-LABEL: bit_63_1_nz_select_i64:
25755fcdf762SLiaoChunyu; RV64:       # %bb.0:
25765fcdf762SLiaoChunyu; RV64-NEXT:    slli a3, a0, 1
25775fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
25785fcdf762SLiaoChunyu; RV64-NEXT:    bnez a3, .LBB86_2
25795fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
25805fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a2
25815fcdf762SLiaoChunyu; RV64-NEXT:  .LBB86_2:
25825fcdf762SLiaoChunyu; RV64-NEXT:    ret
25835fcdf762SLiaoChunyu;
25845fcdf762SLiaoChunyu; RV32ZBS-LABEL: bit_63_1_nz_select_i64:
25855fcdf762SLiaoChunyu; RV32ZBS:       # %bb.0:
25865fcdf762SLiaoChunyu; RV32ZBS-NEXT:    bclri a1, a1, 31
2587*9122c523SPengcheng Wang; RV32ZBS-NEXT:    or a1, a0, a1
25885fcdf762SLiaoChunyu; RV32ZBS-NEXT:    mv a0, a2
2589*9122c523SPengcheng Wang; RV32ZBS-NEXT:    bnez a1, .LBB86_2
25905fcdf762SLiaoChunyu; RV32ZBS-NEXT:  # %bb.1:
25915fcdf762SLiaoChunyu; RV32ZBS-NEXT:    mv a0, a4
2592*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a3, a5
25935fcdf762SLiaoChunyu; RV32ZBS-NEXT:  .LBB86_2:
2594*9122c523SPengcheng Wang; RV32ZBS-NEXT:    mv a1, a3
25955fcdf762SLiaoChunyu; RV32ZBS-NEXT:    ret
259604a2baf5SPhilipp Tomsich;
259704a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_63_1_nz_select_i64:
259804a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
259904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    slli a1, a1, 1
260004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srli a1, a1, 1
2601*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    or a1, a0, a1
260204a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a2
2603*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    bnez a1, .LBB86_2
260404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
260504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    mv a0, a4
2606*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a3, a5
260704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB86_2:
2608*9122c523SPengcheng Wang; RV32XTHEADBS-NEXT:    mv a1, a3
260904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
26105fcdf762SLiaoChunyu  %1 = and i64 %a, 9223372036854775807
26115fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
26125fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
26135fcdf762SLiaoChunyu  ret i64 %3
26145fcdf762SLiaoChunyu}
26155fcdf762SLiaoChunyu
26165fcdf762SLiaoChunyudefine i64 @bit_64_1_z_select_i64(i64 %a, i64 %b, i64 %c) {
26175fcdf762SLiaoChunyu; RV32-LABEL: bit_64_1_z_select_i64:
26185fcdf762SLiaoChunyu; RV32:       # %bb.0:
2619*9122c523SPengcheng Wang; RV32-NEXT:    or a1, a0, a1
26205fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2621*9122c523SPengcheng Wang; RV32-NEXT:    beqz a1, .LBB87_2
26225fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
26235fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
2624*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
26255fcdf762SLiaoChunyu; RV32-NEXT:  .LBB87_2:
2626*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
26275fcdf762SLiaoChunyu; RV32-NEXT:    ret
26285fcdf762SLiaoChunyu;
26295fcdf762SLiaoChunyu; RV64-LABEL: bit_64_1_z_select_i64:
26305fcdf762SLiaoChunyu; RV64:       # %bb.0:
26315fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB87_2
26325fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
26335fcdf762SLiaoChunyu; RV64-NEXT:    mv a1, a2
26345fcdf762SLiaoChunyu; RV64-NEXT:  .LBB87_2:
26355fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
26365fcdf762SLiaoChunyu; RV64-NEXT:    ret
26375fcdf762SLiaoChunyu  %1 = and i64 %a, 18446744073709551615
26385fcdf762SLiaoChunyu  %2 = icmp eq i64 %1, 0
26395fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
26405fcdf762SLiaoChunyu  ret i64 %3
26415fcdf762SLiaoChunyu}
26425fcdf762SLiaoChunyu
26435fcdf762SLiaoChunyudefine i64 @bit_64_1_nz_select_i64(i64 %a, i64 %b, i64 %c) {
26445fcdf762SLiaoChunyu; RV32-LABEL: bit_64_1_nz_select_i64:
26455fcdf762SLiaoChunyu; RV32:       # %bb.0:
2646*9122c523SPengcheng Wang; RV32-NEXT:    or a1, a0, a1
26475fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a2
2648*9122c523SPengcheng Wang; RV32-NEXT:    bnez a1, .LBB88_2
26495fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
26505fcdf762SLiaoChunyu; RV32-NEXT:    mv a0, a4
2651*9122c523SPengcheng Wang; RV32-NEXT:    mv a3, a5
26525fcdf762SLiaoChunyu; RV32-NEXT:  .LBB88_2:
2653*9122c523SPengcheng Wang; RV32-NEXT:    mv a1, a3
26545fcdf762SLiaoChunyu; RV32-NEXT:    ret
26555fcdf762SLiaoChunyu;
26565fcdf762SLiaoChunyu; RV64-LABEL: bit_64_1_nz_select_i64:
26575fcdf762SLiaoChunyu; RV64:       # %bb.0:
26585fcdf762SLiaoChunyu; RV64-NEXT:    bnez a0, .LBB88_2
26595fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
26605fcdf762SLiaoChunyu; RV64-NEXT:    mv a1, a2
26615fcdf762SLiaoChunyu; RV64-NEXT:  .LBB88_2:
26625fcdf762SLiaoChunyu; RV64-NEXT:    mv a0, a1
26635fcdf762SLiaoChunyu; RV64-NEXT:    ret
26645fcdf762SLiaoChunyu  %1 = and i64 %a, 18446744073709551615
26655fcdf762SLiaoChunyu  %2 = icmp ne i64 %1, 0
26665fcdf762SLiaoChunyu  %3 = select i1 %2, i64 %b, i64 %c
26675fcdf762SLiaoChunyu  ret i64 %3
26685fcdf762SLiaoChunyu}
26695fcdf762SLiaoChunyu
26705fcdf762SLiaoChunyudefine void @bit_10_1_z_branch_i32(i32 signext %0) {
26715fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_z_branch_i32:
26725fcdf762SLiaoChunyu; CHECK:       # %bb.0:
26735fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 1023
26745fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB89_2
26755fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
26765fcdf762SLiaoChunyu; CHECK-NEXT:    ret
26775fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB89_2:
2678eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
26795fcdf762SLiaoChunyu  %2 = and i32 %0, 1023
26805fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
26815fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
26825fcdf762SLiaoChunyu
26835fcdf762SLiaoChunyu4:
26845fcdf762SLiaoChunyu  tail call void @bar()
26855fcdf762SLiaoChunyu  br label %5
26865fcdf762SLiaoChunyu
26875fcdf762SLiaoChunyu5:
26885fcdf762SLiaoChunyu  ret void
26895fcdf762SLiaoChunyu}
26905fcdf762SLiaoChunyu
26915fcdf762SLiaoChunyudefine void @bit_10_1_nz_branch_i32(i32 signext %0) {
26925fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_nz_branch_i32:
26935fcdf762SLiaoChunyu; CHECK:       # %bb.0:
26945fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 1023
26955fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB90_2
26965fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
2697eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
26985fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB90_2:
26995fcdf762SLiaoChunyu; CHECK-NEXT:    ret
27005fcdf762SLiaoChunyu  %2 = and i32 %0, 1023
27015fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
27025fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
27035fcdf762SLiaoChunyu
27045fcdf762SLiaoChunyu4:
27055fcdf762SLiaoChunyu  tail call void @bar()
27065fcdf762SLiaoChunyu  br label %5
27075fcdf762SLiaoChunyu
27085fcdf762SLiaoChunyu5:
27095fcdf762SLiaoChunyu  ret void
27105fcdf762SLiaoChunyu}
27115fcdf762SLiaoChunyu
27125fcdf762SLiaoChunyudefine void @bit_11_1_z_branch_i32(i32 signext %0) {
27135fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_z_branch_i32:
27145fcdf762SLiaoChunyu; CHECK:       # %bb.0:
27155fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 2047
27165fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB91_2
27175fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
27185fcdf762SLiaoChunyu; CHECK-NEXT:    ret
27195fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB91_2:
2720eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
27215fcdf762SLiaoChunyu  %2 = and i32 %0, 2047
27225fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
27235fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
27245fcdf762SLiaoChunyu
27255fcdf762SLiaoChunyu4:
27265fcdf762SLiaoChunyu  tail call void @bar()
27275fcdf762SLiaoChunyu  br label %5
27285fcdf762SLiaoChunyu
27295fcdf762SLiaoChunyu5:
27305fcdf762SLiaoChunyu  ret void
27315fcdf762SLiaoChunyu}
27325fcdf762SLiaoChunyu
27335fcdf762SLiaoChunyudefine void @bit_11_1_nz_branch_i32(i32 signext %0) {
27345fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_nz_branch_i32:
27355fcdf762SLiaoChunyu; CHECK:       # %bb.0:
27365fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 2047
27375fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB92_2
27385fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
2739eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
27405fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB92_2:
27415fcdf762SLiaoChunyu; CHECK-NEXT:    ret
27425fcdf762SLiaoChunyu  %2 = and i32 %0, 2047
27435fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
27445fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
27455fcdf762SLiaoChunyu
27465fcdf762SLiaoChunyu4:
27475fcdf762SLiaoChunyu  tail call void @bar()
27485fcdf762SLiaoChunyu  br label %5
27495fcdf762SLiaoChunyu
27505fcdf762SLiaoChunyu5:
27515fcdf762SLiaoChunyu  ret void
27525fcdf762SLiaoChunyu}
27535fcdf762SLiaoChunyu
27545fcdf762SLiaoChunyudefine void @bit_16_1_z_branch_i32(i32 signext %0) {
27555fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_z_branch_i32:
27565fcdf762SLiaoChunyu; RV32:       # %bb.0:
27575fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 16
27585fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB93_2
27595fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
27605fcdf762SLiaoChunyu; RV32-NEXT:    ret
27615fcdf762SLiaoChunyu; RV32-NEXT:  .LBB93_2:
2762eabaee0cSFangrui Song; RV32-NEXT:    tail bar
27635fcdf762SLiaoChunyu;
27645fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_z_branch_i32:
27655fcdf762SLiaoChunyu; RV64:       # %bb.0:
27665fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 48
27675fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB93_2
27685fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
27695fcdf762SLiaoChunyu; RV64-NEXT:    ret
27705fcdf762SLiaoChunyu; RV64-NEXT:  .LBB93_2:
2771eabaee0cSFangrui Song; RV64-NEXT:    tail bar
27725fcdf762SLiaoChunyu  %2 = and i32 %0, 65535
27735fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
27745fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
27755fcdf762SLiaoChunyu
27765fcdf762SLiaoChunyu4:
27775fcdf762SLiaoChunyu  tail call void @bar()
27785fcdf762SLiaoChunyu  br label %5
27795fcdf762SLiaoChunyu
27805fcdf762SLiaoChunyu5:
27815fcdf762SLiaoChunyu  ret void
27825fcdf762SLiaoChunyu}
27835fcdf762SLiaoChunyu
27845fcdf762SLiaoChunyudefine void @bit_16_1_nz_branch_i32(i32 signext %0) {
27855fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_nz_branch_i32:
27865fcdf762SLiaoChunyu; RV32:       # %bb.0:
27875fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 16
27885fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB94_2
27895fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
2790eabaee0cSFangrui Song; RV32-NEXT:    tail bar
27915fcdf762SLiaoChunyu; RV32-NEXT:  .LBB94_2:
27925fcdf762SLiaoChunyu; RV32-NEXT:    ret
27935fcdf762SLiaoChunyu;
27945fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_nz_branch_i32:
27955fcdf762SLiaoChunyu; RV64:       # %bb.0:
27965fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 48
27975fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB94_2
27985fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
2799eabaee0cSFangrui Song; RV64-NEXT:    tail bar
28005fcdf762SLiaoChunyu; RV64-NEXT:  .LBB94_2:
28015fcdf762SLiaoChunyu; RV64-NEXT:    ret
28025fcdf762SLiaoChunyu  %2 = and i32 %0, 65535
28035fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
28045fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
28055fcdf762SLiaoChunyu
28065fcdf762SLiaoChunyu4:
28075fcdf762SLiaoChunyu  tail call void @bar()
28085fcdf762SLiaoChunyu  br label %5
28095fcdf762SLiaoChunyu
28105fcdf762SLiaoChunyu5:
28115fcdf762SLiaoChunyu  ret void
28125fcdf762SLiaoChunyu}
28135fcdf762SLiaoChunyu
28145fcdf762SLiaoChunyudefine void @bit_24_1_z_branch_i32(i32 signext %0) {
28155fcdf762SLiaoChunyu; RV32-LABEL: bit_24_1_z_branch_i32:
28165fcdf762SLiaoChunyu; RV32:       # %bb.0:
28175fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 8
28185fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB95_2
28195fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
28205fcdf762SLiaoChunyu; RV32-NEXT:    ret
28215fcdf762SLiaoChunyu; RV32-NEXT:  .LBB95_2:
2822eabaee0cSFangrui Song; RV32-NEXT:    tail bar
28235fcdf762SLiaoChunyu;
28245fcdf762SLiaoChunyu; RV64-LABEL: bit_24_1_z_branch_i32:
28255fcdf762SLiaoChunyu; RV64:       # %bb.0:
28265fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 40
28275fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB95_2
28285fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
28295fcdf762SLiaoChunyu; RV64-NEXT:    ret
28305fcdf762SLiaoChunyu; RV64-NEXT:  .LBB95_2:
2831eabaee0cSFangrui Song; RV64-NEXT:    tail bar
28325fcdf762SLiaoChunyu  %2 = and i32 %0, 16777215
28335fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
28345fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
28355fcdf762SLiaoChunyu
28365fcdf762SLiaoChunyu4:
28375fcdf762SLiaoChunyu  tail call void @bar()
28385fcdf762SLiaoChunyu  br label %5
28395fcdf762SLiaoChunyu
28405fcdf762SLiaoChunyu5:
28415fcdf762SLiaoChunyu  ret void
28425fcdf762SLiaoChunyu}
28435fcdf762SLiaoChunyu
28445fcdf762SLiaoChunyudefine void @bit_24_1_nz_branch_i32(i32 signext %0) {
28455fcdf762SLiaoChunyu; RV32-LABEL: bit_24_1_nz_branch_i32:
28465fcdf762SLiaoChunyu; RV32:       # %bb.0:
28475fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 8
28485fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB96_2
28495fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
2850eabaee0cSFangrui Song; RV32-NEXT:    tail bar
28515fcdf762SLiaoChunyu; RV32-NEXT:  .LBB96_2:
28525fcdf762SLiaoChunyu; RV32-NEXT:    ret
28535fcdf762SLiaoChunyu;
28545fcdf762SLiaoChunyu; RV64-LABEL: bit_24_1_nz_branch_i32:
28555fcdf762SLiaoChunyu; RV64:       # %bb.0:
28565fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 40
28575fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB96_2
28585fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
2859eabaee0cSFangrui Song; RV64-NEXT:    tail bar
28605fcdf762SLiaoChunyu; RV64-NEXT:  .LBB96_2:
28615fcdf762SLiaoChunyu; RV64-NEXT:    ret
28625fcdf762SLiaoChunyu  %2 = and i32 %0, 16777215
28635fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
28645fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
28655fcdf762SLiaoChunyu
28665fcdf762SLiaoChunyu4:
28675fcdf762SLiaoChunyu  tail call void @bar()
28685fcdf762SLiaoChunyu  br label %5
28695fcdf762SLiaoChunyu
28705fcdf762SLiaoChunyu5:
28715fcdf762SLiaoChunyu  ret void
28725fcdf762SLiaoChunyu}
28735fcdf762SLiaoChunyu
28745fcdf762SLiaoChunyudefine void @bit_31_1_z_branch_i32(i32 signext %0) {
28755fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_z_branch_i32:
28765fcdf762SLiaoChunyu; RV32:       # %bb.0:
28775fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 1
28785fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB97_2
28795fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
28805fcdf762SLiaoChunyu; RV32-NEXT:    ret
28815fcdf762SLiaoChunyu; RV32-NEXT:  .LBB97_2:
2882eabaee0cSFangrui Song; RV32-NEXT:    tail bar
28835fcdf762SLiaoChunyu;
28845fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_z_branch_i32:
28855fcdf762SLiaoChunyu; RV64:       # %bb.0:
28865fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 33
28875fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB97_2
28885fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
28895fcdf762SLiaoChunyu; RV64-NEXT:    ret
28905fcdf762SLiaoChunyu; RV64-NEXT:  .LBB97_2:
2891eabaee0cSFangrui Song; RV64-NEXT:    tail bar
28925fcdf762SLiaoChunyu  %2 = and i32 %0, 2147483647
28935fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
28945fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
28955fcdf762SLiaoChunyu
28965fcdf762SLiaoChunyu4:
28975fcdf762SLiaoChunyu  tail call void @bar()
28985fcdf762SLiaoChunyu  br label %5
28995fcdf762SLiaoChunyu
29005fcdf762SLiaoChunyu5:
29015fcdf762SLiaoChunyu  ret void
29025fcdf762SLiaoChunyu}
29035fcdf762SLiaoChunyu
29045fcdf762SLiaoChunyudefine void @bit_31_1_nz_branch_i32(i32 signext %0) {
29055fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_nz_branch_i32:
29065fcdf762SLiaoChunyu; RV32:       # %bb.0:
29075fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 1
29085fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB98_2
29095fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
2910eabaee0cSFangrui Song; RV32-NEXT:    tail bar
29115fcdf762SLiaoChunyu; RV32-NEXT:  .LBB98_2:
29125fcdf762SLiaoChunyu; RV32-NEXT:    ret
29135fcdf762SLiaoChunyu;
29145fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_nz_branch_i32:
29155fcdf762SLiaoChunyu; RV64:       # %bb.0:
29165fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 33
29175fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB98_2
29185fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
2919eabaee0cSFangrui Song; RV64-NEXT:    tail bar
29205fcdf762SLiaoChunyu; RV64-NEXT:  .LBB98_2:
29215fcdf762SLiaoChunyu; RV64-NEXT:    ret
29225fcdf762SLiaoChunyu  %2 = and i32 %0, 2147483647
29235fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
29245fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
29255fcdf762SLiaoChunyu
29265fcdf762SLiaoChunyu4:
29275fcdf762SLiaoChunyu  tail call void @bar()
29285fcdf762SLiaoChunyu  br label %5
29295fcdf762SLiaoChunyu
29305fcdf762SLiaoChunyu5:
29315fcdf762SLiaoChunyu  ret void
29325fcdf762SLiaoChunyu}
29335fcdf762SLiaoChunyu
29345fcdf762SLiaoChunyudefine void @bit_32_1_z_branch_i32(i32 signext %0) {
29355fcdf762SLiaoChunyu; CHECK-LABEL: bit_32_1_z_branch_i32:
29365fcdf762SLiaoChunyu; CHECK:       # %bb.0:
29375fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB99_2
29385fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
29395fcdf762SLiaoChunyu; CHECK-NEXT:    ret
29405fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB99_2:
2941eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
29425fcdf762SLiaoChunyu  %2 = and i32 %0, 4294967295
29435fcdf762SLiaoChunyu  %3 = icmp eq i32 %2, 0
29445fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
29455fcdf762SLiaoChunyu
29465fcdf762SLiaoChunyu4:
29475fcdf762SLiaoChunyu  tail call void @bar()
29485fcdf762SLiaoChunyu  br label %5
29495fcdf762SLiaoChunyu
29505fcdf762SLiaoChunyu5:
29515fcdf762SLiaoChunyu  ret void
29525fcdf762SLiaoChunyu}
29535fcdf762SLiaoChunyu
29545fcdf762SLiaoChunyudefine void @bit_32_1_nz_branch_i32(i32 signext %0) {
29555fcdf762SLiaoChunyu; CHECK-LABEL: bit_32_1_nz_branch_i32:
29565fcdf762SLiaoChunyu; CHECK:       # %bb.0:
29575fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB100_2
29585fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
2959eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
29605fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB100_2:
29615fcdf762SLiaoChunyu; CHECK-NEXT:    ret
29625fcdf762SLiaoChunyu  %2 = and i32 %0, 4294967295
29635fcdf762SLiaoChunyu  %3 = icmp ne i32 %2, 0
29645fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
29655fcdf762SLiaoChunyu
29665fcdf762SLiaoChunyu4:
29675fcdf762SLiaoChunyu  tail call void @bar()
29685fcdf762SLiaoChunyu  br label %5
29695fcdf762SLiaoChunyu
29705fcdf762SLiaoChunyu5:
29715fcdf762SLiaoChunyu  ret void
29725fcdf762SLiaoChunyu}
29735fcdf762SLiaoChunyu
29745fcdf762SLiaoChunyu
29755fcdf762SLiaoChunyudefine void @bit_10_1_z_branch_i64(i64 %0) {
29765fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_z_branch_i64:
29775fcdf762SLiaoChunyu; CHECK:       # %bb.0:
29785fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 1023
29795fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB101_2
29805fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
29815fcdf762SLiaoChunyu; CHECK-NEXT:    ret
29825fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB101_2:
2983eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
29845fcdf762SLiaoChunyu  %2 = and i64 %0, 1023
29855fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
29865fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
29875fcdf762SLiaoChunyu
29885fcdf762SLiaoChunyu4:
29895fcdf762SLiaoChunyu  tail call void @bar()
29905fcdf762SLiaoChunyu  br label %5
29915fcdf762SLiaoChunyu
29925fcdf762SLiaoChunyu5:
29935fcdf762SLiaoChunyu  ret void
29945fcdf762SLiaoChunyu}
29955fcdf762SLiaoChunyu
29965fcdf762SLiaoChunyudefine void @bit_10_1_nz_branch_i64(i64 %0) {
29975fcdf762SLiaoChunyu; CHECK-LABEL: bit_10_1_nz_branch_i64:
29985fcdf762SLiaoChunyu; CHECK:       # %bb.0:
29995fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 1023
30005fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB102_2
30015fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
3002eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
30035fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB102_2:
30045fcdf762SLiaoChunyu; CHECK-NEXT:    ret
30055fcdf762SLiaoChunyu  %2 = and i64 %0, 1023
30065fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
30075fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
30085fcdf762SLiaoChunyu
30095fcdf762SLiaoChunyu4:
30105fcdf762SLiaoChunyu  tail call void @bar()
30115fcdf762SLiaoChunyu  br label %5
30125fcdf762SLiaoChunyu
30135fcdf762SLiaoChunyu5:
30145fcdf762SLiaoChunyu  ret void
30155fcdf762SLiaoChunyu}
30165fcdf762SLiaoChunyu
30175fcdf762SLiaoChunyudefine void @bit_11_1_z_branch_i64(i64 %0) {
30185fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_z_branch_i64:
30195fcdf762SLiaoChunyu; CHECK:       # %bb.0:
30205fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 2047
30215fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB103_2
30225fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
30235fcdf762SLiaoChunyu; CHECK-NEXT:    ret
30245fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB103_2:
3025eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
30265fcdf762SLiaoChunyu  %2 = and i64 %0, 2047
30275fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
30285fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
30295fcdf762SLiaoChunyu
30305fcdf762SLiaoChunyu4:
30315fcdf762SLiaoChunyu  tail call void @bar()
30325fcdf762SLiaoChunyu  br label %5
30335fcdf762SLiaoChunyu
30345fcdf762SLiaoChunyu5:
30355fcdf762SLiaoChunyu  ret void
30365fcdf762SLiaoChunyu}
30375fcdf762SLiaoChunyu
30385fcdf762SLiaoChunyudefine void @bit_11_1_nz_branch_i64(i64 %0) {
30395fcdf762SLiaoChunyu; CHECK-LABEL: bit_11_1_nz_branch_i64:
30405fcdf762SLiaoChunyu; CHECK:       # %bb.0:
30415fcdf762SLiaoChunyu; CHECK-NEXT:    andi a0, a0, 2047
30425fcdf762SLiaoChunyu; CHECK-NEXT:    beqz a0, .LBB104_2
30435fcdf762SLiaoChunyu; CHECK-NEXT:  # %bb.1:
3044eabaee0cSFangrui Song; CHECK-NEXT:    tail bar
30455fcdf762SLiaoChunyu; CHECK-NEXT:  .LBB104_2:
30465fcdf762SLiaoChunyu; CHECK-NEXT:    ret
30475fcdf762SLiaoChunyu  %2 = and i64 %0, 2047
30485fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
30495fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
30505fcdf762SLiaoChunyu
30515fcdf762SLiaoChunyu4:
30525fcdf762SLiaoChunyu  tail call void @bar()
30535fcdf762SLiaoChunyu  br label %5
30545fcdf762SLiaoChunyu
30555fcdf762SLiaoChunyu5:
30565fcdf762SLiaoChunyu  ret void
30575fcdf762SLiaoChunyu}
30585fcdf762SLiaoChunyu
30595fcdf762SLiaoChunyudefine void @bit_16_1_z_branch_i64(i64 %0) {
30605fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_z_branch_i64:
30615fcdf762SLiaoChunyu; RV32:       # %bb.0:
30625fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 16
30635fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB105_2
30645fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
30655fcdf762SLiaoChunyu; RV32-NEXT:    ret
30665fcdf762SLiaoChunyu; RV32-NEXT:  .LBB105_2:
3067eabaee0cSFangrui Song; RV32-NEXT:    tail bar
30685fcdf762SLiaoChunyu;
30695fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_z_branch_i64:
30705fcdf762SLiaoChunyu; RV64:       # %bb.0:
30715fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 48
30725fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB105_2
30735fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
30745fcdf762SLiaoChunyu; RV64-NEXT:    ret
30755fcdf762SLiaoChunyu; RV64-NEXT:  .LBB105_2:
3076eabaee0cSFangrui Song; RV64-NEXT:    tail bar
30775fcdf762SLiaoChunyu  %2 = and i64 %0, 65535
30785fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
30795fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
30805fcdf762SLiaoChunyu
30815fcdf762SLiaoChunyu4:
30825fcdf762SLiaoChunyu  tail call void @bar()
30835fcdf762SLiaoChunyu  br label %5
30845fcdf762SLiaoChunyu
30855fcdf762SLiaoChunyu5:
30865fcdf762SLiaoChunyu  ret void
30875fcdf762SLiaoChunyu}
30885fcdf762SLiaoChunyu
30895fcdf762SLiaoChunyudefine void @bit_16_1_nz_branch_i64(i64 %0) {
30905fcdf762SLiaoChunyu; RV32-LABEL: bit_16_1_nz_branch_i64:
30915fcdf762SLiaoChunyu; RV32:       # %bb.0:
30925fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 16
30935fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB106_2
30945fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3095eabaee0cSFangrui Song; RV32-NEXT:    tail bar
30965fcdf762SLiaoChunyu; RV32-NEXT:  .LBB106_2:
30975fcdf762SLiaoChunyu; RV32-NEXT:    ret
30985fcdf762SLiaoChunyu;
30995fcdf762SLiaoChunyu; RV64-LABEL: bit_16_1_nz_branch_i64:
31005fcdf762SLiaoChunyu; RV64:       # %bb.0:
31015fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 48
31025fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB106_2
31035fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3104eabaee0cSFangrui Song; RV64-NEXT:    tail bar
31055fcdf762SLiaoChunyu; RV64-NEXT:  .LBB106_2:
31065fcdf762SLiaoChunyu; RV64-NEXT:    ret
31075fcdf762SLiaoChunyu  %2 = and i64 %0, 65535
31085fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
31095fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
31105fcdf762SLiaoChunyu
31115fcdf762SLiaoChunyu4:
31125fcdf762SLiaoChunyu  tail call void @bar()
31135fcdf762SLiaoChunyu  br label %5
31145fcdf762SLiaoChunyu
31155fcdf762SLiaoChunyu5:
31165fcdf762SLiaoChunyu  ret void
31175fcdf762SLiaoChunyu}
31185fcdf762SLiaoChunyu
31195fcdf762SLiaoChunyudefine void @bit_24_1_z_branch_i64(i64 %0) {
31205fcdf762SLiaoChunyu; RV32-LABEL: bit_24_1_z_branch_i64:
31215fcdf762SLiaoChunyu; RV32:       # %bb.0:
31225fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 8
31235fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB107_2
31245fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
31255fcdf762SLiaoChunyu; RV32-NEXT:    ret
31265fcdf762SLiaoChunyu; RV32-NEXT:  .LBB107_2:
3127eabaee0cSFangrui Song; RV32-NEXT:    tail bar
31285fcdf762SLiaoChunyu;
31295fcdf762SLiaoChunyu; RV64-LABEL: bit_24_1_z_branch_i64:
31305fcdf762SLiaoChunyu; RV64:       # %bb.0:
31315fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 40
31325fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB107_2
31335fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
31345fcdf762SLiaoChunyu; RV64-NEXT:    ret
31355fcdf762SLiaoChunyu; RV64-NEXT:  .LBB107_2:
3136eabaee0cSFangrui Song; RV64-NEXT:    tail bar
31375fcdf762SLiaoChunyu  %2 = and i64 %0, 16777215
31385fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
31395fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
31405fcdf762SLiaoChunyu
31415fcdf762SLiaoChunyu4:
31425fcdf762SLiaoChunyu  tail call void @bar()
31435fcdf762SLiaoChunyu  br label %5
31445fcdf762SLiaoChunyu
31455fcdf762SLiaoChunyu5:
31465fcdf762SLiaoChunyu  ret void
31475fcdf762SLiaoChunyu}
31485fcdf762SLiaoChunyu
31495fcdf762SLiaoChunyudefine void @bit_24_1_nz_branch_i64(i64 %0) {
31505fcdf762SLiaoChunyu; RV32-LABEL: bit_24_1_nz_branch_i64:
31515fcdf762SLiaoChunyu; RV32:       # %bb.0:
31525fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 8
31535fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB108_2
31545fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3155eabaee0cSFangrui Song; RV32-NEXT:    tail bar
31565fcdf762SLiaoChunyu; RV32-NEXT:  .LBB108_2:
31575fcdf762SLiaoChunyu; RV32-NEXT:    ret
31585fcdf762SLiaoChunyu;
31595fcdf762SLiaoChunyu; RV64-LABEL: bit_24_1_nz_branch_i64:
31605fcdf762SLiaoChunyu; RV64:       # %bb.0:
31615fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 40
31625fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB108_2
31635fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3164eabaee0cSFangrui Song; RV64-NEXT:    tail bar
31655fcdf762SLiaoChunyu; RV64-NEXT:  .LBB108_2:
31665fcdf762SLiaoChunyu; RV64-NEXT:    ret
31675fcdf762SLiaoChunyu  %2 = and i64 %0, 16777215
31685fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
31695fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
31705fcdf762SLiaoChunyu
31715fcdf762SLiaoChunyu4:
31725fcdf762SLiaoChunyu  tail call void @bar()
31735fcdf762SLiaoChunyu  br label %5
31745fcdf762SLiaoChunyu
31755fcdf762SLiaoChunyu5:
31765fcdf762SLiaoChunyu  ret void
31775fcdf762SLiaoChunyu}
31785fcdf762SLiaoChunyu
31795fcdf762SLiaoChunyudefine void @bit_31_1_z_branch_i64(i64 %0) {
31805fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_z_branch_i64:
31815fcdf762SLiaoChunyu; RV32:       # %bb.0:
31825fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 1
31835fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB109_2
31845fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
31855fcdf762SLiaoChunyu; RV32-NEXT:    ret
31865fcdf762SLiaoChunyu; RV32-NEXT:  .LBB109_2:
3187eabaee0cSFangrui Song; RV32-NEXT:    tail bar
31885fcdf762SLiaoChunyu;
31895fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_z_branch_i64:
31905fcdf762SLiaoChunyu; RV64:       # %bb.0:
31915fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 33
31925fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB109_2
31935fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
31945fcdf762SLiaoChunyu; RV64-NEXT:    ret
31955fcdf762SLiaoChunyu; RV64-NEXT:  .LBB109_2:
3196eabaee0cSFangrui Song; RV64-NEXT:    tail bar
31975fcdf762SLiaoChunyu  %2 = and i64 %0, 2147483647
31985fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
31995fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
32005fcdf762SLiaoChunyu
32015fcdf762SLiaoChunyu4:
32025fcdf762SLiaoChunyu  tail call void @bar()
32035fcdf762SLiaoChunyu  br label %5
32045fcdf762SLiaoChunyu
32055fcdf762SLiaoChunyu5:
32065fcdf762SLiaoChunyu  ret void
32075fcdf762SLiaoChunyu}
32085fcdf762SLiaoChunyu
32095fcdf762SLiaoChunyudefine void @bit_31_1_nz_branch_i64(i64 %0) {
32105fcdf762SLiaoChunyu; RV32-LABEL: bit_31_1_nz_branch_i64:
32115fcdf762SLiaoChunyu; RV32:       # %bb.0:
32125fcdf762SLiaoChunyu; RV32-NEXT:    slli a0, a0, 1
32135fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB110_2
32145fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3215eabaee0cSFangrui Song; RV32-NEXT:    tail bar
32165fcdf762SLiaoChunyu; RV32-NEXT:  .LBB110_2:
32175fcdf762SLiaoChunyu; RV32-NEXT:    ret
32185fcdf762SLiaoChunyu;
32195fcdf762SLiaoChunyu; RV64-LABEL: bit_31_1_nz_branch_i64:
32205fcdf762SLiaoChunyu; RV64:       # %bb.0:
32215fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 33
32225fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB110_2
32235fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3224eabaee0cSFangrui Song; RV64-NEXT:    tail bar
32255fcdf762SLiaoChunyu; RV64-NEXT:  .LBB110_2:
32265fcdf762SLiaoChunyu; RV64-NEXT:    ret
32275fcdf762SLiaoChunyu  %2 = and i64 %0, 2147483647
32285fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
32295fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
32305fcdf762SLiaoChunyu
32315fcdf762SLiaoChunyu4:
32325fcdf762SLiaoChunyu  tail call void @bar()
32335fcdf762SLiaoChunyu  br label %5
32345fcdf762SLiaoChunyu
32355fcdf762SLiaoChunyu5:
32365fcdf762SLiaoChunyu  ret void
32375fcdf762SLiaoChunyu}
32385fcdf762SLiaoChunyu
32395fcdf762SLiaoChunyudefine void @bit_32_1_z_branch_i64(i64 %0) {
32405fcdf762SLiaoChunyu; RV32-LABEL: bit_32_1_z_branch_i64:
32415fcdf762SLiaoChunyu; RV32:       # %bb.0:
32425fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB111_2
32435fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
32445fcdf762SLiaoChunyu; RV32-NEXT:    ret
32455fcdf762SLiaoChunyu; RV32-NEXT:  .LBB111_2:
3246eabaee0cSFangrui Song; RV32-NEXT:    tail bar
32475fcdf762SLiaoChunyu;
32485fcdf762SLiaoChunyu; RV64-LABEL: bit_32_1_z_branch_i64:
32495fcdf762SLiaoChunyu; RV64:       # %bb.0:
32505fcdf762SLiaoChunyu; RV64-NEXT:    sext.w a0, a0
32515fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB111_2
32525fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
32535fcdf762SLiaoChunyu; RV64-NEXT:    ret
32545fcdf762SLiaoChunyu; RV64-NEXT:  .LBB111_2:
3255eabaee0cSFangrui Song; RV64-NEXT:    tail bar
32565fcdf762SLiaoChunyu  %2 = and i64 %0, 4294967295
32575fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
32585fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
32595fcdf762SLiaoChunyu
32605fcdf762SLiaoChunyu4:
32615fcdf762SLiaoChunyu  tail call void @bar()
32625fcdf762SLiaoChunyu  br label %5
32635fcdf762SLiaoChunyu
32645fcdf762SLiaoChunyu5:
32655fcdf762SLiaoChunyu  ret void
32665fcdf762SLiaoChunyu}
32675fcdf762SLiaoChunyu
32685fcdf762SLiaoChunyudefine void @bit_32_1_nz_branch_i64(i64 %0) {
32695fcdf762SLiaoChunyu; RV32-LABEL: bit_32_1_nz_branch_i64:
32705fcdf762SLiaoChunyu; RV32:       # %bb.0:
32715fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB112_2
32725fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3273eabaee0cSFangrui Song; RV32-NEXT:    tail bar
32745fcdf762SLiaoChunyu; RV32-NEXT:  .LBB112_2:
32755fcdf762SLiaoChunyu; RV32-NEXT:    ret
32765fcdf762SLiaoChunyu;
32775fcdf762SLiaoChunyu; RV64-LABEL: bit_32_1_nz_branch_i64:
32785fcdf762SLiaoChunyu; RV64:       # %bb.0:
32795fcdf762SLiaoChunyu; RV64-NEXT:    sext.w a0, a0
32805fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB112_2
32815fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3282eabaee0cSFangrui Song; RV64-NEXT:    tail bar
32835fcdf762SLiaoChunyu; RV64-NEXT:  .LBB112_2:
32845fcdf762SLiaoChunyu; RV64-NEXT:    ret
32855fcdf762SLiaoChunyu  %2 = and i64 %0, 4294967295
32865fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
32875fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
32885fcdf762SLiaoChunyu
32895fcdf762SLiaoChunyu4:
32905fcdf762SLiaoChunyu  tail call void @bar()
32915fcdf762SLiaoChunyu  br label %5
32925fcdf762SLiaoChunyu
32935fcdf762SLiaoChunyu5:
32945fcdf762SLiaoChunyu  ret void
32955fcdf762SLiaoChunyu}
32965fcdf762SLiaoChunyu
32975fcdf762SLiaoChunyudefine void @bit_62_1_z_branch_i64(i64 %0) {
32985fcdf762SLiaoChunyu; RV32-LABEL: bit_62_1_z_branch_i64:
32995fcdf762SLiaoChunyu; RV32:       # %bb.0:
33005fcdf762SLiaoChunyu; RV32-NEXT:    slli a1, a1, 2
33015fcdf762SLiaoChunyu; RV32-NEXT:    srli a1, a1, 2
33025fcdf762SLiaoChunyu; RV32-NEXT:    or a0, a0, a1
33035fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB113_2
33045fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
33055fcdf762SLiaoChunyu; RV32-NEXT:    ret
33065fcdf762SLiaoChunyu; RV32-NEXT:  .LBB113_2:
3307eabaee0cSFangrui Song; RV32-NEXT:    tail bar
33085fcdf762SLiaoChunyu;
33095fcdf762SLiaoChunyu; RV64-LABEL: bit_62_1_z_branch_i64:
33105fcdf762SLiaoChunyu; RV64:       # %bb.0:
33115fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 2
33125fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB113_2
33135fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
33145fcdf762SLiaoChunyu; RV64-NEXT:    ret
33155fcdf762SLiaoChunyu; RV64-NEXT:  .LBB113_2:
3316eabaee0cSFangrui Song; RV64-NEXT:    tail bar
33175fcdf762SLiaoChunyu  %2 = and i64 %0, 4611686018427387903
33185fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
33195fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
33205fcdf762SLiaoChunyu
33215fcdf762SLiaoChunyu4:
33225fcdf762SLiaoChunyu  tail call void @bar()
33235fcdf762SLiaoChunyu  br label %5
33245fcdf762SLiaoChunyu
33255fcdf762SLiaoChunyu5:
33265fcdf762SLiaoChunyu  ret void
33275fcdf762SLiaoChunyu}
33285fcdf762SLiaoChunyu
33295fcdf762SLiaoChunyudefine void @bit_62_1_nz_branch_i64(i64 %0) {
33305fcdf762SLiaoChunyu; RV32-LABEL: bit_62_1_nz_branch_i64:
33315fcdf762SLiaoChunyu; RV32:       # %bb.0:
33325fcdf762SLiaoChunyu; RV32-NEXT:    slli a1, a1, 2
33335fcdf762SLiaoChunyu; RV32-NEXT:    srli a1, a1, 2
33345fcdf762SLiaoChunyu; RV32-NEXT:    or a0, a0, a1
33355fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB114_2
33365fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3337eabaee0cSFangrui Song; RV32-NEXT:    tail bar
33385fcdf762SLiaoChunyu; RV32-NEXT:  .LBB114_2:
33395fcdf762SLiaoChunyu; RV32-NEXT:    ret
33405fcdf762SLiaoChunyu;
33415fcdf762SLiaoChunyu; RV64-LABEL: bit_62_1_nz_branch_i64:
33425fcdf762SLiaoChunyu; RV64:       # %bb.0:
33435fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 2
33445fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB114_2
33455fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3346eabaee0cSFangrui Song; RV64-NEXT:    tail bar
33475fcdf762SLiaoChunyu; RV64-NEXT:  .LBB114_2:
33485fcdf762SLiaoChunyu; RV64-NEXT:    ret
33495fcdf762SLiaoChunyu  %2 = and i64 %0, 4611686018427387903
33505fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
33515fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
33525fcdf762SLiaoChunyu
33535fcdf762SLiaoChunyu4:
33545fcdf762SLiaoChunyu  tail call void @bar()
33555fcdf762SLiaoChunyu  br label %5
33565fcdf762SLiaoChunyu
33575fcdf762SLiaoChunyu5:
33585fcdf762SLiaoChunyu  ret void
33595fcdf762SLiaoChunyu}
33605fcdf762SLiaoChunyu
33615fcdf762SLiaoChunyudefine void @bit_63_1_z_branch_i64(i64 %0) {
33625fcdf762SLiaoChunyu; RV32I-LABEL: bit_63_1_z_branch_i64:
33635fcdf762SLiaoChunyu; RV32I:       # %bb.0:
33645fcdf762SLiaoChunyu; RV32I-NEXT:    slli a1, a1, 1
33655fcdf762SLiaoChunyu; RV32I-NEXT:    srli a1, a1, 1
33665fcdf762SLiaoChunyu; RV32I-NEXT:    or a0, a0, a1
33675fcdf762SLiaoChunyu; RV32I-NEXT:    beqz a0, .LBB115_2
33685fcdf762SLiaoChunyu; RV32I-NEXT:  # %bb.1:
33695fcdf762SLiaoChunyu; RV32I-NEXT:    ret
33705fcdf762SLiaoChunyu; RV32I-NEXT:  .LBB115_2:
3371eabaee0cSFangrui Song; RV32I-NEXT:    tail bar
33725fcdf762SLiaoChunyu;
33735fcdf762SLiaoChunyu; RV64-LABEL: bit_63_1_z_branch_i64:
33745fcdf762SLiaoChunyu; RV64:       # %bb.0:
33755fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 1
33765fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB115_2
33775fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
33785fcdf762SLiaoChunyu; RV64-NEXT:    ret
33795fcdf762SLiaoChunyu; RV64-NEXT:  .LBB115_2:
3380eabaee0cSFangrui Song; RV64-NEXT:    tail bar
33815fcdf762SLiaoChunyu;
33825fcdf762SLiaoChunyu; RV32ZBS-LABEL: bit_63_1_z_branch_i64:
33835fcdf762SLiaoChunyu; RV32ZBS:       # %bb.0:
33845fcdf762SLiaoChunyu; RV32ZBS-NEXT:    bclri a1, a1, 31
33855fcdf762SLiaoChunyu; RV32ZBS-NEXT:    or a0, a0, a1
33865fcdf762SLiaoChunyu; RV32ZBS-NEXT:    beqz a0, .LBB115_2
33875fcdf762SLiaoChunyu; RV32ZBS-NEXT:  # %bb.1:
33885fcdf762SLiaoChunyu; RV32ZBS-NEXT:    ret
33895fcdf762SLiaoChunyu; RV32ZBS-NEXT:  .LBB115_2:
3390eabaee0cSFangrui Song; RV32ZBS-NEXT:    tail bar
339104a2baf5SPhilipp Tomsich;
339204a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_63_1_z_branch_i64:
339304a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
339404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    slli a1, a1, 1
339504a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srli a1, a1, 1
339604a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    or a0, a0, a1
339704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    beqz a0, .LBB115_2
339804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
339904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
340004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB115_2:
3401eabaee0cSFangrui Song; RV32XTHEADBS-NEXT:    tail bar
34025fcdf762SLiaoChunyu  %2 = and i64 %0, 9223372036854775807
34035fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
34045fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
34055fcdf762SLiaoChunyu
34065fcdf762SLiaoChunyu4:
34075fcdf762SLiaoChunyu  tail call void @bar()
34085fcdf762SLiaoChunyu  br label %5
34095fcdf762SLiaoChunyu
34105fcdf762SLiaoChunyu5:
34115fcdf762SLiaoChunyu  ret void
34125fcdf762SLiaoChunyu}
34135fcdf762SLiaoChunyu
34145fcdf762SLiaoChunyudefine void @bit_63_1_nz_branch_i64(i64 %0) {
34155fcdf762SLiaoChunyu; RV32I-LABEL: bit_63_1_nz_branch_i64:
34165fcdf762SLiaoChunyu; RV32I:       # %bb.0:
34175fcdf762SLiaoChunyu; RV32I-NEXT:    slli a1, a1, 1
34185fcdf762SLiaoChunyu; RV32I-NEXT:    srli a1, a1, 1
34195fcdf762SLiaoChunyu; RV32I-NEXT:    or a0, a0, a1
34205fcdf762SLiaoChunyu; RV32I-NEXT:    beqz a0, .LBB116_2
34215fcdf762SLiaoChunyu; RV32I-NEXT:  # %bb.1:
3422eabaee0cSFangrui Song; RV32I-NEXT:    tail bar
34235fcdf762SLiaoChunyu; RV32I-NEXT:  .LBB116_2:
34245fcdf762SLiaoChunyu; RV32I-NEXT:    ret
34255fcdf762SLiaoChunyu;
34265fcdf762SLiaoChunyu; RV64-LABEL: bit_63_1_nz_branch_i64:
34275fcdf762SLiaoChunyu; RV64:       # %bb.0:
34285fcdf762SLiaoChunyu; RV64-NEXT:    slli a0, a0, 1
34295fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB116_2
34305fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3431eabaee0cSFangrui Song; RV64-NEXT:    tail bar
34325fcdf762SLiaoChunyu; RV64-NEXT:  .LBB116_2:
34335fcdf762SLiaoChunyu; RV64-NEXT:    ret
34345fcdf762SLiaoChunyu;
34355fcdf762SLiaoChunyu; RV32ZBS-LABEL: bit_63_1_nz_branch_i64:
34365fcdf762SLiaoChunyu; RV32ZBS:       # %bb.0:
34375fcdf762SLiaoChunyu; RV32ZBS-NEXT:    bclri a1, a1, 31
34385fcdf762SLiaoChunyu; RV32ZBS-NEXT:    or a0, a0, a1
34395fcdf762SLiaoChunyu; RV32ZBS-NEXT:    beqz a0, .LBB116_2
34405fcdf762SLiaoChunyu; RV32ZBS-NEXT:  # %bb.1:
3441eabaee0cSFangrui Song; RV32ZBS-NEXT:    tail bar
34425fcdf762SLiaoChunyu; RV32ZBS-NEXT:  .LBB116_2:
34435fcdf762SLiaoChunyu; RV32ZBS-NEXT:    ret
344404a2baf5SPhilipp Tomsich;
344504a2baf5SPhilipp Tomsich; RV32XTHEADBS-LABEL: bit_63_1_nz_branch_i64:
344604a2baf5SPhilipp Tomsich; RV32XTHEADBS:       # %bb.0:
344704a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    slli a1, a1, 1
344804a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    srli a1, a1, 1
344904a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    or a0, a0, a1
345004a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    beqz a0, .LBB116_2
345104a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  # %bb.1:
3452eabaee0cSFangrui Song; RV32XTHEADBS-NEXT:    tail bar
345304a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:  .LBB116_2:
345404a2baf5SPhilipp Tomsich; RV32XTHEADBS-NEXT:    ret
34555fcdf762SLiaoChunyu  %2 = and i64 %0, 9223372036854775807
34565fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
34575fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
34585fcdf762SLiaoChunyu
34595fcdf762SLiaoChunyu4:
34605fcdf762SLiaoChunyu  tail call void @bar()
34615fcdf762SLiaoChunyu  br label %5
34625fcdf762SLiaoChunyu
34635fcdf762SLiaoChunyu5:
34645fcdf762SLiaoChunyu  ret void
34655fcdf762SLiaoChunyu}
34665fcdf762SLiaoChunyu
34675fcdf762SLiaoChunyudefine void @bit_64_1_z_branch_i64(i64 %0) {
34685fcdf762SLiaoChunyu; RV32-LABEL: bit_64_1_z_branch_i64:
34695fcdf762SLiaoChunyu; RV32:       # %bb.0:
34705fcdf762SLiaoChunyu; RV32-NEXT:    or a0, a0, a1
34715fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB117_2
34725fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
34735fcdf762SLiaoChunyu; RV32-NEXT:    ret
34745fcdf762SLiaoChunyu; RV32-NEXT:  .LBB117_2:
3475eabaee0cSFangrui Song; RV32-NEXT:    tail bar
34765fcdf762SLiaoChunyu;
34775fcdf762SLiaoChunyu; RV64-LABEL: bit_64_1_z_branch_i64:
34785fcdf762SLiaoChunyu; RV64:       # %bb.0:
34795fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB117_2
34805fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
34815fcdf762SLiaoChunyu; RV64-NEXT:    ret
34825fcdf762SLiaoChunyu; RV64-NEXT:  .LBB117_2:
3483eabaee0cSFangrui Song; RV64-NEXT:    tail bar
34845fcdf762SLiaoChunyu  %2 = and i64 %0, 18446744073709551615
34855fcdf762SLiaoChunyu  %3 = icmp eq i64 %2, 0
34865fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
34875fcdf762SLiaoChunyu
34885fcdf762SLiaoChunyu4:
34895fcdf762SLiaoChunyu  tail call void @bar()
34905fcdf762SLiaoChunyu  br label %5
34915fcdf762SLiaoChunyu
34925fcdf762SLiaoChunyu5:
34935fcdf762SLiaoChunyu  ret void
34945fcdf762SLiaoChunyu}
34955fcdf762SLiaoChunyu
34965fcdf762SLiaoChunyudefine void @bit_64_1_nz_branch_i64(i64 %0) {
34975fcdf762SLiaoChunyu; RV32-LABEL: bit_64_1_nz_branch_i64:
34985fcdf762SLiaoChunyu; RV32:       # %bb.0:
34995fcdf762SLiaoChunyu; RV32-NEXT:    or a0, a0, a1
35005fcdf762SLiaoChunyu; RV32-NEXT:    beqz a0, .LBB118_2
35015fcdf762SLiaoChunyu; RV32-NEXT:  # %bb.1:
3502eabaee0cSFangrui Song; RV32-NEXT:    tail bar
35035fcdf762SLiaoChunyu; RV32-NEXT:  .LBB118_2:
35045fcdf762SLiaoChunyu; RV32-NEXT:    ret
35055fcdf762SLiaoChunyu;
35065fcdf762SLiaoChunyu; RV64-LABEL: bit_64_1_nz_branch_i64:
35075fcdf762SLiaoChunyu; RV64:       # %bb.0:
35085fcdf762SLiaoChunyu; RV64-NEXT:    beqz a0, .LBB118_2
35095fcdf762SLiaoChunyu; RV64-NEXT:  # %bb.1:
3510eabaee0cSFangrui Song; RV64-NEXT:    tail bar
35115fcdf762SLiaoChunyu; RV64-NEXT:  .LBB118_2:
35125fcdf762SLiaoChunyu; RV64-NEXT:    ret
35135fcdf762SLiaoChunyu  %2 = and i64 %0, 18446744073709551615
35145fcdf762SLiaoChunyu  %3 = icmp ne i64 %2, 0
35155fcdf762SLiaoChunyu  br i1 %3, label %4, label %5
35165fcdf762SLiaoChunyu
35175fcdf762SLiaoChunyu4:
35185fcdf762SLiaoChunyu  tail call void @bar()
35195fcdf762SLiaoChunyu  br label %5
35205fcdf762SLiaoChunyu
35215fcdf762SLiaoChunyu5:
35225fcdf762SLiaoChunyu  ret void
35235fcdf762SLiaoChunyu}
3524