xref: /llvm-project/llvm/test/CodeGen/RISCV/pr58511.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
100816714SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22e6bfa8eSCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+m | FileCheck %s
300816714SCraig Topper
400816714SCraig Topperdefine i32 @f(i1 %0, i32 %1, ptr %2) {
500816714SCraig Topper; CHECK-LABEL: f:
600816714SCraig Topper; CHECK:       # %bb.0: # %BB
7c9998ec1SJP Lehr; CHECK-NEXT:    slli a0, a0, 63
8a70d5e25SAmaury Séchet; CHECK-NEXT:    lui a3, 4097
9*9122c523SPengcheng Wang; CHECK-NEXT:    srai a0, a0, 63
10a70d5e25SAmaury Séchet; CHECK-NEXT:    addiw a3, a3, -2047
11c9998ec1SJP Lehr; CHECK-NEXT:    or a0, a0, a3
12a70d5e25SAmaury Séchet; CHECK-NEXT:    mul a1, a1, a3
1300816714SCraig Topper; CHECK-NEXT:    sw a1, 0(a2)
1400816714SCraig Topper; CHECK-NEXT:    ret
1500816714SCraig TopperBB:
1600816714SCraig Topper  %I = select i1 %0, i32 -1, i32 0
172e6bfa8eSCraig Topper  %I1 = mul i32 %1, 16779265
182e6bfa8eSCraig Topper  %I2 = or i32 16779265, %I
1900816714SCraig Topper  store i32 %I1, ptr %2
2000816714SCraig Topper  ret i32 %I2
2100816714SCraig Topper}
2200816714SCraig Topper
2300816714SCraig Topperdefine i32 @g(i1 %0, i32 %1, ptr %2) {
2400816714SCraig Topper; CHECK-LABEL: g:
2500816714SCraig Topper; CHECK:       # %bb.0: # %BB
26c9998ec1SJP Lehr; CHECK-NEXT:    andi a0, a0, 1
27a70d5e25SAmaury Séchet; CHECK-NEXT:    lui a3, 4097
28*9122c523SPengcheng Wang; CHECK-NEXT:    addi a0, a0, -1
29a70d5e25SAmaury Séchet; CHECK-NEXT:    addiw a3, a3, -2047
30c9998ec1SJP Lehr; CHECK-NEXT:    or a0, a0, a3
31a70d5e25SAmaury Séchet; CHECK-NEXT:    mul a1, a1, a3
3200816714SCraig Topper; CHECK-NEXT:    sw a1, 0(a2)
3300816714SCraig Topper; CHECK-NEXT:    ret
3400816714SCraig TopperBB:
3500816714SCraig Topper  %I = select i1 %0, i32 0, i32 -1
362e6bfa8eSCraig Topper  %I1 = mul i32 %1, 16779265
372e6bfa8eSCraig Topper  %I2 = or i32 16779265, %I
3800816714SCraig Topper  store i32 %I1, ptr %2
3900816714SCraig Topper  ret i32 %I2
4000816714SCraig Topper}
4100816714SCraig Topper
4200816714SCraig Topperdefine i32 @h(i1 %0, i32 %1, ptr %2) {
4300816714SCraig Topper; CHECK-LABEL: h:
4400816714SCraig Topper; CHECK:       # %bb.0: # %BB
452e6bfa8eSCraig Topper; CHECK-NEXT:    lui a3, 4097
462e6bfa8eSCraig Topper; CHECK-NEXT:    slli a0, a0, 63
47*9122c523SPengcheng Wang; CHECK-NEXT:    addiw a3, a3, -2047
482e6bfa8eSCraig Topper; CHECK-NEXT:    srai a0, a0, 63
49*9122c523SPengcheng Wang; CHECK-NEXT:    mul a1, a1, a3
502e6bfa8eSCraig Topper; CHECK-NEXT:    and a0, a0, a3
5100816714SCraig Topper; CHECK-NEXT:    sw a1, 0(a2)
5200816714SCraig Topper; CHECK-NEXT:    ret
5300816714SCraig TopperBB:
5400816714SCraig Topper  %I = select i1 %0, i32 -1, i32 0
552e6bfa8eSCraig Topper  %I1 = mul i32 %1, 16779265
562e6bfa8eSCraig Topper  %I2 = and i32 16779265, %I
5700816714SCraig Topper  store i32 %I1, ptr %2
5800816714SCraig Topper  ret i32 %I2
5900816714SCraig Topper}
6000816714SCraig Topper
6100816714SCraig Topperdefine i32 @i(i1 %0, i32 %1, ptr %2) {
6200816714SCraig Topper; CHECK-LABEL: i:
6300816714SCraig Topper; CHECK:       # %bb.0: # %BB
6400816714SCraig Topper; CHECK-NEXT:    andi a0, a0, 1
652e6bfa8eSCraig Topper; CHECK-NEXT:    lui a3, 4097
662e6bfa8eSCraig Topper; CHECK-NEXT:    addiw a3, a3, -2047
6700816714SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
68*9122c523SPengcheng Wang; CHECK-NEXT:    mul a1, a1, a3
6900816714SCraig Topper; CHECK-NEXT:    and a0, a0, a3
7000816714SCraig Topper; CHECK-NEXT:    sw a1, 0(a2)
7100816714SCraig Topper; CHECK-NEXT:    ret
7200816714SCraig TopperBB:
7300816714SCraig Topper  %I = select i1 %0, i32 0, i32 -1
742e6bfa8eSCraig Topper  %I1 = mul i32 %1, 16779265
752e6bfa8eSCraig Topper  %I2 = and i32 16779265, %I
7600816714SCraig Topper  store i32 %I1, ptr %2
7700816714SCraig Topper  ret i32 %I2
7800816714SCraig Topper}
79