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