179d6e9c7SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 279d6e9c7SCraig Topper; RUN: llc < %s -mtriple=riscv32 | FileCheck %s --check-prefixes=RV32 379d6e9c7SCraig Topper; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefixes=RV64 479d6e9c7SCraig Topper 579d6e9c7SCraig Topperdefine signext i32 @test1(i32 signext %x) { 679d6e9c7SCraig Topper; RV32-LABEL: test1: 779d6e9c7SCraig Topper; RV32: # %bb.0: 879d6e9c7SCraig Topper; RV32-NEXT: slli a0, a0, 1 979d6e9c7SCraig Topper; RV32-NEXT: addi a0, a0, 1 1079d6e9c7SCraig Topper; RV32-NEXT: ret 1179d6e9c7SCraig Topper; 1279d6e9c7SCraig Topper; RV64-LABEL: test1: 1379d6e9c7SCraig Topper; RV64: # %bb.0: 1479d6e9c7SCraig Topper; RV64-NEXT: slliw a0, a0, 1 1579d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 1 1679d6e9c7SCraig Topper; RV64-NEXT: ret 1779d6e9c7SCraig Topper %a = shl i32 %x, 1 1879d6e9c7SCraig Topper %b = or i32 %a, 1 1979d6e9c7SCraig Topper ret i32 %b 2079d6e9c7SCraig Topper} 2179d6e9c7SCraig Topper 2279d6e9c7SCraig Topperdefine i64 @test2(i64 %x) { 2379d6e9c7SCraig Topper; RV32-LABEL: test2: 2479d6e9c7SCraig Topper; RV32: # %bb.0: 2579d6e9c7SCraig Topper; RV32-NEXT: andi a0, a0, -4 2679d6e9c7SCraig Topper; RV32-NEXT: addi a0, a0, 2 2779d6e9c7SCraig Topper; RV32-NEXT: ret 2879d6e9c7SCraig Topper; 2979d6e9c7SCraig Topper; RV64-LABEL: test2: 3079d6e9c7SCraig Topper; RV64: # %bb.0: 3179d6e9c7SCraig Topper; RV64-NEXT: andi a0, a0, -4 3279d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 2 3379d6e9c7SCraig Topper; RV64-NEXT: ret 3479d6e9c7SCraig Topper %a = and i64 %x, -4 3579d6e9c7SCraig Topper %b = or i64 %a, 2 3679d6e9c7SCraig Topper ret i64 %b 3779d6e9c7SCraig Topper} 3879d6e9c7SCraig Topper 3979d6e9c7SCraig Topperdefine signext i32 @test3(i32 signext %x) { 4079d6e9c7SCraig Topper; RV32-LABEL: test3: 4179d6e9c7SCraig Topper; RV32: # %bb.0: 4279d6e9c7SCraig Topper; RV32-NEXT: slli a0, a0, 3 4379d6e9c7SCraig Topper; RV32-NEXT: addi a0, a0, 6 4479d6e9c7SCraig Topper; RV32-NEXT: ret 4579d6e9c7SCraig Topper; 4679d6e9c7SCraig Topper; RV64-LABEL: test3: 4779d6e9c7SCraig Topper; RV64: # %bb.0: 4879d6e9c7SCraig Topper; RV64-NEXT: slliw a0, a0, 3 4979d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 6 5079d6e9c7SCraig Topper; RV64-NEXT: ret 5179d6e9c7SCraig Topper %a = shl i32 %x, 3 5279d6e9c7SCraig Topper %b = add i32 %a, 6 5379d6e9c7SCraig Topper ret i32 %b 5479d6e9c7SCraig Topper} 5579d6e9c7SCraig Topper 5679d6e9c7SCraig Topperdefine i64 @test4(i64 %x) { 5779d6e9c7SCraig Topper; RV32-LABEL: test4: 5879d6e9c7SCraig Topper; RV32: # %bb.0: 5979d6e9c7SCraig Topper; RV32-NEXT: srli a2, a0, 28 6079d6e9c7SCraig Topper; RV32-NEXT: slli a1, a1, 4 6179d6e9c7SCraig Topper; RV32-NEXT: slli a0, a0, 4 62*9122c523SPengcheng Wang; RV32-NEXT: or a1, a1, a2 6379d6e9c7SCraig Topper; RV32-NEXT: addi a0, a0, 13 6479d6e9c7SCraig Topper; RV32-NEXT: ret 6579d6e9c7SCraig Topper; 6679d6e9c7SCraig Topper; RV64-LABEL: test4: 6779d6e9c7SCraig Topper; RV64: # %bb.0: 6879d6e9c7SCraig Topper; RV64-NEXT: slli a0, a0, 4 6979d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 13 7079d6e9c7SCraig Topper; RV64-NEXT: ret 7179d6e9c7SCraig Topper %a = shl i64 %x, 4 7279d6e9c7SCraig Topper %b = add i64 %a, 13 7379d6e9c7SCraig Topper ret i64 %b 7479d6e9c7SCraig Topper} 7579d6e9c7SCraig Topper 7679d6e9c7SCraig Topperdefine signext i32 @test5(i32 signext %x) { 7779d6e9c7SCraig Topper; RV32-LABEL: test5: 7879d6e9c7SCraig Topper; RV32: # %bb.0: 7979d6e9c7SCraig Topper; RV32-NEXT: srli a0, a0, 24 8079d6e9c7SCraig Topper; RV32-NEXT: addi a0, a0, 256 8179d6e9c7SCraig Topper; RV32-NEXT: ret 8279d6e9c7SCraig Topper; 8379d6e9c7SCraig Topper; RV64-LABEL: test5: 8479d6e9c7SCraig Topper; RV64: # %bb.0: 8579d6e9c7SCraig Topper; RV64-NEXT: srliw a0, a0, 24 8679d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 256 8779d6e9c7SCraig Topper; RV64-NEXT: ret 8879d6e9c7SCraig Topper %a = lshr i32 %x, 24 8979d6e9c7SCraig Topper %b = xor i32 %a, 256 9079d6e9c7SCraig Topper ret i32 %b 9179d6e9c7SCraig Topper} 9279d6e9c7SCraig Topper 9379d6e9c7SCraig Topperdefine i64 @test6(i64 %x) { 9479d6e9c7SCraig Topper; RV32-LABEL: test6: 9579d6e9c7SCraig Topper; RV32: # %bb.0: 9679d6e9c7SCraig Topper; RV32-NEXT: srli a1, a1, 22 9779d6e9c7SCraig Topper; RV32-NEXT: addi a0, a1, 1024 9879d6e9c7SCraig Topper; RV32-NEXT: li a1, 0 9979d6e9c7SCraig Topper; RV32-NEXT: ret 10079d6e9c7SCraig Topper; 10179d6e9c7SCraig Topper; RV64-LABEL: test6: 10279d6e9c7SCraig Topper; RV64: # %bb.0: 10379d6e9c7SCraig Topper; RV64-NEXT: srli a0, a0, 54 10479d6e9c7SCraig Topper; RV64-NEXT: addi a0, a0, 1024 10579d6e9c7SCraig Topper; RV64-NEXT: ret 10679d6e9c7SCraig Topper %a = lshr i64 %x, 54 10779d6e9c7SCraig Topper %b = xor i64 %a, 1024 10879d6e9c7SCraig Topper ret i64 %b 10979d6e9c7SCraig Topper} 1108a980911SCraig Topper 1118a980911SCraig Topperdefine signext i32 @test7(i32 signext %x) { 1128a980911SCraig Topper; RV32-LABEL: test7: 1138a980911SCraig Topper; RV32: # %bb.0: 1148a980911SCraig Topper; RV32-NEXT: addi a0, a0, 1 1158a980911SCraig Topper; RV32-NEXT: ret 1168a980911SCraig Topper; 1178a980911SCraig Topper; RV64-LABEL: test7: 1188a980911SCraig Topper; RV64: # %bb.0: 1198a980911SCraig Topper; RV64-NEXT: ori a0, a0, 1 1208a980911SCraig Topper; RV64-NEXT: ret 1218a980911SCraig Topper %a = or disjoint i32 %x, 1 1228a980911SCraig Topper ret i32 %a 1238a980911SCraig Topper} 124