xref: /llvm-project/llvm/test/CodeGen/RISCV/or-is-add.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
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