xref: /llvm-project/llvm/test/CodeGen/RISCV/fold-binop-into-select.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -mtriple=riscv64 < %s  | FileCheck  %s
3
4define i64 @fold_binop_into_select_0(i1 %c, i64 %x) {
5; CHECK-LABEL: fold_binop_into_select_0:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    addi a1, a1, -2
8; CHECK-NEXT:    slli a0, a0, 63
9; CHECK-NEXT:    srai a0, a0, 63
10; CHECK-NEXT:    and a0, a0, a1
11; CHECK-NEXT:    ret
12entry:
13  %select_ = select i1 %c, i64 %x, i64 2
14  %res = sub i64 %select_, 2
15  ret i64 %res
16}
17
18define i64 @fold_binop_into_select_1(i1 %c, i64 %x) {
19; CHECK-LABEL: fold_binop_into_select_1:
20; CHECK:       # %bb.0: # %entry
21; CHECK-NEXT:    andi a0, a0, 1
22; CHECK-NEXT:    addi a1, a1, -2
23; CHECK-NEXT:    addi a0, a0, -1
24; CHECK-NEXT:    and a0, a0, a1
25; CHECK-NEXT:    ret
26entry:
27  %select_ = select i1 %c, i64 2, i64 %x
28  %res = sub i64 %select_, 2
29  ret i64 %res
30}
31
32define i64 @fold_binop_into_select_2(i1 %c, i64 %x) {
33; CHECK-LABEL: fold_binop_into_select_2:
34; CHECK:       # %bb.0: # %entry
35; CHECK-NEXT:    li a2, 2
36; CHECK-NEXT:    slli a0, a0, 63
37; CHECK-NEXT:    sub a2, a2, a1
38; CHECK-NEXT:    srai a0, a0, 63
39; CHECK-NEXT:    and a0, a0, a2
40; CHECK-NEXT:    ret
41entry:
42  %select_ = select i1 %c, i64 %x, i64 2
43  %res = sub i64 2, %select_
44  ret i64 %res
45}
46
47define i64 @fold_binop_into_select_3(i1 %c, i64 %x) {
48; CHECK-LABEL: fold_binop_into_select_3:
49; CHECK:       # %bb.0: # %entry
50; CHECK-NEXT:    andi a0, a0, 1
51; CHECK-NEXT:    li a2, 2
52; CHECK-NEXT:    sub a2, a2, a1
53; CHECK-NEXT:    addi a0, a0, -1
54; CHECK-NEXT:    and a0, a0, a2
55; CHECK-NEXT:    ret
56entry:
57  %select_ = select i1 %c, i64 2, i64 %x
58  %res = sub i64 2, %select_
59  ret i64 %res
60}
61