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