xref: /llvm-project/llvm/test/CodeGen/RISCV/orc-b-patterns.ll (revision 8b46d40221f3c302e9c28e3ad7c79767f905a862)
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