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