126b832a9SDaniel Mokeev; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 226b832a9SDaniel Mokeev; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 326b832a9SDaniel Mokeev; RUN: | FileCheck %s -check-prefixes=CHECK,RV32I 426b832a9SDaniel Mokeev; RUN: llc -mtriple=riscv32 -mattr=+zbb -verify-machineinstrs < %s \ 526b832a9SDaniel Mokeev; RUN: | FileCheck %s -check-prefixes=CHECK,RV32ZBB 626b832a9SDaniel Mokeev 726b832a9SDaniel Mokeevdefine i32 @orc_b_i32_mul255(i32 %x) nounwind { 826b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_mul255: 926b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 1026b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 4112 1126b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 257 1226b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 1326b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 8 1426b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 1526b832a9SDaniel Mokeev; RV32I-NEXT: ret 1626b832a9SDaniel Mokeev; 1726b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_mul255: 1826b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 1926b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 4112 2026b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 257 2126b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 2226b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 2326b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 2426b832a9SDaniel Mokeeventry: 2526b832a9SDaniel Mokeev %and = and i32 %x, 16843009 2626b832a9SDaniel Mokeev %mul = mul nuw nsw i32 %and, 255 2726b832a9SDaniel Mokeev ret i32 %mul 2826b832a9SDaniel Mokeev} 2926b832a9SDaniel Mokeev 3026b832a9SDaniel Mokeev 3126b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_lsb(i32 %x) { 3226b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_lsb: 3326b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 3426b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 4112 3526b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 257 3626b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 3726b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 8 3826b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 3926b832a9SDaniel Mokeev; RV32I-NEXT: ret 4026b832a9SDaniel Mokeev; 4126b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_lsb: 4226b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 4326b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 4112 4426b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 257 4526b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 4626b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 4726b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 4826b832a9SDaniel Mokeeventry: 4926b832a9SDaniel Mokeev %and = and i32 %x, 16843009 5026b832a9SDaniel Mokeev %sub = mul nuw i32 %and, 255 5126b832a9SDaniel Mokeev ret i32 %sub 5226b832a9SDaniel Mokeev} 5326b832a9SDaniel Mokeev 5426b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_lsb_preshifted(i32 %x){ 5526b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_lsb_preshifted: 5626b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 5726b832a9SDaniel Mokeev; RV32I-NEXT: srli a0, a0, 11 5826b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 16 5926b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 257 6026b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 6126b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 8 6226b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 6326b832a9SDaniel Mokeev; RV32I-NEXT: ret 6426b832a9SDaniel Mokeev; 6526b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_lsb_preshifted: 6626b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 6726b832a9SDaniel Mokeev; RV32ZBB-NEXT: srli a0, a0, 11 6826b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 16 6926b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 257 7026b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 7126b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 7226b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 7326b832a9SDaniel Mokeeventry: 7426b832a9SDaniel Mokeev %shr = lshr i32 %x, 11 7526b832a9SDaniel Mokeev %and = and i32 %shr, 16843009 7626b832a9SDaniel Mokeev %sub = mul nuw i32 %and, 255 7726b832a9SDaniel Mokeev ret i32 %sub 7826b832a9SDaniel Mokeev} 7926b832a9SDaniel Mokeev 8026b832a9SDaniel Mokeev 8126b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b1(i32 %x) { 8226b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_b1: 8326b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 8426b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 8224 8526b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 514 8626b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 8726b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 7 8826b832a9SDaniel Mokeev; RV32I-NEXT: srli a0, a0, 1 8926b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 9026b832a9SDaniel Mokeev; RV32I-NEXT: ret 9126b832a9SDaniel Mokeev; 9226b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_b1: 9326b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 9426b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 8224 9526b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 514 9626b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 9726b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 9826b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 9926b832a9SDaniel Mokeeventry: 10026b832a9SDaniel Mokeev %and = and i32 %x, 33686018 10126b832a9SDaniel Mokeev %shl = shl i32 %and, 7 10226b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 1 10326b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 10426b832a9SDaniel Mokeev ret i32 %sub 10526b832a9SDaniel Mokeev} 10626b832a9SDaniel Mokeev 10726b832a9SDaniel Mokeev 10826b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b2(i32 %x) { 10926b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_b2: 11026b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 11126b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 16448 11226b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 1028 11326b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 11426b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 6 11526b832a9SDaniel Mokeev; RV32I-NEXT: srli a0, a0, 2 11626b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 11726b832a9SDaniel Mokeev; RV32I-NEXT: ret 11826b832a9SDaniel Mokeev; 11926b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_b2: 12026b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 12126b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 16448 12226b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 1028 12326b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 12426b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 12526b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 12626b832a9SDaniel Mokeeventry: 12726b832a9SDaniel Mokeev %and = and i32 %x, 67372036 12826b832a9SDaniel Mokeev %shl = shl i32 %and, 6 12926b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 2 13026b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 13126b832a9SDaniel Mokeev ret i32 %sub 13226b832a9SDaniel Mokeev} 13326b832a9SDaniel Mokeev 13426b832a9SDaniel Mokeev 13526b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b3(i32 %x) { 13626b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b3: 13726b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 13826b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 24672 13926b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, 1542 14026b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 14126b832a9SDaniel Mokeev; CHECK-NEXT: slli a1, a0, 5 14226b832a9SDaniel Mokeev; CHECK-NEXT: srli a0, a0, 3 14326b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a1, a0 14426b832a9SDaniel Mokeev; CHECK-NEXT: ret 14526b832a9SDaniel Mokeeventry: 14626b832a9SDaniel Mokeev %and = and i32 %x, 101058054 14726b832a9SDaniel Mokeev %shl = shl nuw i32 %and, 5 14826b832a9SDaniel Mokeev %shr = lshr i32 %and, 3 14926b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 15026b832a9SDaniel Mokeev ret i32 %sub 15126b832a9SDaniel Mokeev} 15226b832a9SDaniel Mokeev 15326b832a9SDaniel Mokeev 15426b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b4(i32 %x) { 15526b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b4: 15626b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 15726b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 32897 15826b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, -2040 15926b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 16026b832a9SDaniel Mokeev; CHECK-NEXT: slli a1, a0, 4 16126b832a9SDaniel Mokeev; CHECK-NEXT: srli a0, a0, 4 16226b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a1, a0 16326b832a9SDaniel Mokeev; CHECK-NEXT: ret 16426b832a9SDaniel Mokeeventry: 16526b832a9SDaniel Mokeev %and = and i32 %x, 134744072 16626b832a9SDaniel Mokeev %shl = shl nuw i32 %and, 4 16726b832a9SDaniel Mokeev %shr = lshr i32 %and, 4 16826b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 16926b832a9SDaniel Mokeev ret i32 %sub 17026b832a9SDaniel Mokeev} 17126b832a9SDaniel Mokeev 17226b832a9SDaniel Mokeev 17326b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b5(i32 %x) { 17426b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b5: 17526b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 17626b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 65793 17726b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, 16 17826b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 17926b832a9SDaniel Mokeev; CHECK-NEXT: slli a1, a0, 3 18026b832a9SDaniel Mokeev; CHECK-NEXT: srli a0, a0, 5 18126b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a1, a0 18226b832a9SDaniel Mokeev; CHECK-NEXT: ret 18326b832a9SDaniel Mokeeventry: 18426b832a9SDaniel Mokeev %and = and i32 %x, 269488144 18526b832a9SDaniel Mokeev %shl = shl nuw i32 %and, 3 18626b832a9SDaniel Mokeev %shr = lshr i32 %and, 5 18726b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 18826b832a9SDaniel Mokeev ret i32 %sub 18926b832a9SDaniel Mokeev} 19026b832a9SDaniel Mokeev 19126b832a9SDaniel Mokeev 19226b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b6(i32 %x) { 19326b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b6: 19426b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 19526b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 131586 19626b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, 32 19726b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 19826b832a9SDaniel Mokeev; CHECK-NEXT: slli a1, a0, 2 19926b832a9SDaniel Mokeev; CHECK-NEXT: srli a0, a0, 6 20026b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a1, a0 20126b832a9SDaniel Mokeev; CHECK-NEXT: ret 20226b832a9SDaniel Mokeeventry: 20326b832a9SDaniel Mokeev %and = and i32 %x, 538976288 20426b832a9SDaniel Mokeev %shl = shl nuw i32 %and, 2 20526b832a9SDaniel Mokeev %shr = lshr i32 %and, 6 20626b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 20726b832a9SDaniel Mokeev ret i32 %sub 20826b832a9SDaniel Mokeev} 20926b832a9SDaniel Mokeev 21026b832a9SDaniel Mokeev 21126b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b7(i32 %x) { 21226b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b7: 21326b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 21426b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 263172 21526b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, 64 21626b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 21726b832a9SDaniel Mokeev; CHECK-NEXT: slli a1, a0, 1 21826b832a9SDaniel Mokeev; CHECK-NEXT: srli a0, a0, 7 21926b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a1, a0 22026b832a9SDaniel Mokeev; CHECK-NEXT: ret 22126b832a9SDaniel Mokeeventry: 22226b832a9SDaniel Mokeev %and = and i32 %x, 1077952576 22326b832a9SDaniel Mokeev %shl = shl nuw i32 %and, 1 22426b832a9SDaniel Mokeev %shr = lshr i32 %and, 7 22526b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 22626b832a9SDaniel Mokeev ret i32 %sub 22726b832a9SDaniel Mokeev} 22826b832a9SDaniel Mokeev 22926b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b1_shl_used(i32 %x, ptr %arr) { 23026b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_b1_shl_used: 23126b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 23226b832a9SDaniel Mokeev; RV32I-NEXT: lui a2, 8224 23326b832a9SDaniel Mokeev; RV32I-NEXT: addi a2, a2, 514 23426b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a2 23526b832a9SDaniel Mokeev; RV32I-NEXT: slli a2, a0, 7 23626b832a9SDaniel Mokeev; RV32I-NEXT: srli a3, a0, 1 23726b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a2, a3 23826b832a9SDaniel Mokeev; RV32I-NEXT: sw a3, 0(a1) 23926b832a9SDaniel Mokeev; RV32I-NEXT: ret 24026b832a9SDaniel Mokeev; 24126b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_b1_shl_used: 24226b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 24326b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a2, 8224 24426b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a2, a2, 514 24526b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a2 24626b832a9SDaniel Mokeev; RV32ZBB-NEXT: srli a2, a0, 1 24726b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 24826b832a9SDaniel Mokeev; RV32ZBB-NEXT: sw a2, 0(a1) 24926b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 25026b832a9SDaniel Mokeeventry: 25126b832a9SDaniel Mokeev %and = and i32 %x, 33686018 25226b832a9SDaniel Mokeev %shl = shl i32 %and, 7 25326b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 1 25426b832a9SDaniel Mokeev store i32 %shr, ptr %arr, align 4 25526b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 25626b832a9SDaniel Mokeev ret i32 %sub 25726b832a9SDaniel Mokeev} 25826b832a9SDaniel Mokeev 25926b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b1_srl_used(i32 %x, ptr %arr) { 26026b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_b1_srl_used: 26126b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 26226b832a9SDaniel Mokeev; RV32I-NEXT: lui a2, 8224 26326b832a9SDaniel Mokeev; RV32I-NEXT: addi a2, a2, 514 26426b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a2 26526b832a9SDaniel Mokeev; RV32I-NEXT: slli a2, a0, 7 26626b832a9SDaniel Mokeev; RV32I-NEXT: srli a0, a0, 1 26726b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a2, a0 26826b832a9SDaniel Mokeev; RV32I-NEXT: sw a2, 0(a1) 26926b832a9SDaniel Mokeev; RV32I-NEXT: ret 27026b832a9SDaniel Mokeev; 27126b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_b1_srl_used: 27226b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 27326b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a2, 8224 27426b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a2, a2, 514 27526b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a2 27626b832a9SDaniel Mokeev; RV32ZBB-NEXT: slli a2, a0, 7 27726b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 27826b832a9SDaniel Mokeev; RV32ZBB-NEXT: sw a2, 0(a1) 27926b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 28026b832a9SDaniel Mokeeventry: 28126b832a9SDaniel Mokeev %and = and i32 %x, 33686018 28226b832a9SDaniel Mokeev %shl = shl i32 %and, 7 28326b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 1 28426b832a9SDaniel Mokeev store i32 %shl, ptr %arr, align 4 28526b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 28626b832a9SDaniel Mokeev ret i32 %sub 28726b832a9SDaniel Mokeev} 28826b832a9SDaniel Mokeev 28926b832a9SDaniel Mokeev 29026b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b1_not_used(i32 %x, ptr %arr) { 29126b832a9SDaniel Mokeev; RV32I-LABEL: orc_b_i32_sub_shl8x_x_b1_not_used: 29226b832a9SDaniel Mokeev; RV32I: # %bb.0: # %entry 29326b832a9SDaniel Mokeev; RV32I-NEXT: lui a1, 8224 29426b832a9SDaniel Mokeev; RV32I-NEXT: addi a1, a1, 514 29526b832a9SDaniel Mokeev; RV32I-NEXT: and a0, a0, a1 29626b832a9SDaniel Mokeev; RV32I-NEXT: slli a1, a0, 7 29726b832a9SDaniel Mokeev; RV32I-NEXT: srli a0, a0, 1 29826b832a9SDaniel Mokeev; RV32I-NEXT: sub a0, a1, a0 29926b832a9SDaniel Mokeev; RV32I-NEXT: ret 30026b832a9SDaniel Mokeev; 30126b832a9SDaniel Mokeev; RV32ZBB-LABEL: orc_b_i32_sub_shl8x_x_b1_not_used: 30226b832a9SDaniel Mokeev; RV32ZBB: # %bb.0: # %entry 30326b832a9SDaniel Mokeev; RV32ZBB-NEXT: lui a1, 8224 30426b832a9SDaniel Mokeev; RV32ZBB-NEXT: addi a1, a1, 514 30526b832a9SDaniel Mokeev; RV32ZBB-NEXT: and a0, a0, a1 30626b832a9SDaniel Mokeev; RV32ZBB-NEXT: orc.b a0, a0 30726b832a9SDaniel Mokeev; RV32ZBB-NEXT: ret 30826b832a9SDaniel Mokeeventry: 30926b832a9SDaniel Mokeev %and = and i32 %x, 33686018 31026b832a9SDaniel Mokeev %shl = shl i32 %and, 7 31126b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 1 31226b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 31326b832a9SDaniel Mokeev ret i32 %sub 31426b832a9SDaniel Mokeev} 31526b832a9SDaniel Mokeev 31626b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_shl_used(i32 %x, ptr %arr){ 31726b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_shl_used: 31826b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 31926b832a9SDaniel Mokeev; CHECK-NEXT: lui a2, 4112 32026b832a9SDaniel Mokeev; CHECK-NEXT: addi a2, a2, 257 32126b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a2 32226b832a9SDaniel Mokeev; CHECK-NEXT: slli a2, a0, 8 32326b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a2, a0 32426b832a9SDaniel Mokeev; CHECK-NEXT: sw a2, 0(a1) 32526b832a9SDaniel Mokeev; CHECK-NEXT: ret 32626b832a9SDaniel Mokeeventry: 32726b832a9SDaniel Mokeev %and = and i32 %x, 16843009 32826b832a9SDaniel Mokeev %shl = shl i32 %and, 8 32926b832a9SDaniel Mokeev store i32 %shl, ptr %arr, align 4 33026b832a9SDaniel Mokeev %sub = mul nuw i32 %and, 255 33126b832a9SDaniel Mokeev ret i32 %sub 33226b832a9SDaniel Mokeev} 33326b832a9SDaniel Mokeev 33426b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_shl8x_x_b1_both_used(i32 %x, ptr %arr) { 33526b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_shl8x_x_b1_both_used: 33626b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 33726b832a9SDaniel Mokeev; CHECK-NEXT: lui a2, 8224 33826b832a9SDaniel Mokeev; CHECK-NEXT: addi a2, a2, 514 33926b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a2 34026b832a9SDaniel Mokeev; CHECK-NEXT: slli a2, a0, 7 34126b832a9SDaniel Mokeev; CHECK-NEXT: srli a3, a0, 1 34226b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a2, a3 343*8b46d402SCraig Topper; CHECK-NEXT: sw a2, 0(a1) 34426b832a9SDaniel Mokeev; CHECK-NEXT: sw a3, 4(a1) 34526b832a9SDaniel Mokeev; CHECK-NEXT: ret 34626b832a9SDaniel Mokeeventry: 34726b832a9SDaniel Mokeev %and = and i32 %x, 33686018 34826b832a9SDaniel Mokeev %shl = shl i32 %and, 7 34926b832a9SDaniel Mokeev %shr = lshr exact i32 %and, 1 35026b832a9SDaniel Mokeev store i32 %shl, ptr %arr, align 4 35126b832a9SDaniel Mokeev %arrayidx1 = getelementptr inbounds i8, ptr %arr, i32 4 35226b832a9SDaniel Mokeev store i32 %shr, ptr %arrayidx1, align 4 35326b832a9SDaniel Mokeev %sub = sub nsw i32 %shl, %shr 35426b832a9SDaniel Mokeev ret i32 %sub 35526b832a9SDaniel Mokeev} 35626b832a9SDaniel Mokeev 35726b832a9SDaniel Mokeev 35826b832a9SDaniel Mokeevdefine i32 @orc_b_i32_sub_x_shr8x(i32 %x) { 35926b832a9SDaniel Mokeev; CHECK-LABEL: orc_b_i32_sub_x_shr8x: 36026b832a9SDaniel Mokeev; CHECK: # %bb.0: # %entry 36126b832a9SDaniel Mokeev; CHECK-NEXT: lui a1, 4112 36226b832a9SDaniel Mokeev; CHECK-NEXT: addi a1, a1, 257 36326b832a9SDaniel Mokeev; CHECK-NEXT: and a0, a0, a1 36426b832a9SDaniel Mokeev; CHECK-NEXT: srli a1, a0, 8 36526b832a9SDaniel Mokeev; CHECK-NEXT: sub a0, a0, a1 36626b832a9SDaniel Mokeev; CHECK-NEXT: ret 36726b832a9SDaniel Mokeeventry: 36826b832a9SDaniel Mokeev %and = and i32 %x, 16843009 36926b832a9SDaniel Mokeev %shr = lshr i32 %and, 8 37026b832a9SDaniel Mokeev %sub = sub nsw i32 %and, %shr 37126b832a9SDaniel Mokeev ret i32 %sub 37226b832a9SDaniel Mokeev} 373