xref: /llvm-project/llvm/test/Transforms/CodeGenPrepare/RISCV/convert-to-eqz.ll (revision ab12bba0aad800c1805eca2ea937da958c1854c8)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2; RUN: opt -codegenprepare -S -mtriple=riscv64 < %s | FileCheck %s
3
4define i8 @hoist_add(i8 %x) {
5; CHECK-LABEL: define i8 @hoist_add(
6; CHECK-SAME: i8 [[X:%.*]]) {
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    [[INC:%.*]] = add i8 [[X]], 1
9; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i8 [[INC]], 0
10; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN:%.*]]
11; CHECK:       if.then:
12; CHECK-NEXT:    br label [[EXIT]]
13; CHECK:       exit:
14; CHECK-NEXT:    [[RETVAL:%.*]] = phi i8 [ [[INC]], [[IF_THEN]] ], [ -1, [[ENTRY:%.*]] ]
15; CHECK-NEXT:    ret i8 [[RETVAL]]
16;
17entry:
18  %cmp = icmp eq i8 %x, -1
19  br i1 %cmp, label %exit, label %if.then
20
21if.then:
22  %inc = add nuw nsw i8 %x, 1
23  br label %exit
24
25exit:
26  %retval = phi i8 [ %inc, %if.then ], [ -1, %entry ]
27  ret i8 %retval
28}
29
30define i8 @hoist_lshr(i8 %x) {
31; CHECK-LABEL: define i8 @hoist_lshr(
32; CHECK-SAME: i8 [[X:%.*]]) {
33; CHECK-NEXT:  entry:
34; CHECK-NEXT:    [[INC:%.*]] = lshr i8 [[X]], 3
35; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i8 [[INC]], 0
36; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN:%.*]]
37; CHECK:       if.then:
38; CHECK-NEXT:    br label [[EXIT]]
39; CHECK:       exit:
40; CHECK-NEXT:    [[RETVAL:%.*]] = phi i8 [ [[INC]], [[IF_THEN]] ], [ -1, [[ENTRY:%.*]] ]
41; CHECK-NEXT:    ret i8 [[RETVAL]]
42;
43entry:
44  %cmp = icmp ult i8 %x, 8
45  br i1 %cmp, label %exit, label %if.then
46
47if.then:
48  %inc = lshr exact i8 %x, 3
49  br label %exit
50
51exit:
52  %retval = phi i8 [ %inc, %if.then ], [ -1, %entry ]
53  ret i8 %retval
54}
55
56define i8 @nomove_add(i8 %x) {
57; CHECK-LABEL: define i8 @nomove_add(
58; CHECK-SAME: i8 [[X:%.*]]) {
59; CHECK-NEXT:  entry:
60; CHECK-NEXT:    [[INC:%.*]] = add i8 [[X]], 1
61; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i8 [[INC]], 0
62; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN:%.*]]
63; CHECK:       if.then:
64; CHECK-NEXT:    br label [[EXIT]]
65; CHECK:       exit:
66; CHECK-NEXT:    [[RETVAL:%.*]] = phi i8 [ [[INC]], [[IF_THEN]] ], [ -1, [[ENTRY:%.*]] ]
67; CHECK-NEXT:    ret i8 [[RETVAL]]
68;
69entry:
70  %inc = add nuw nsw i8 %x, 1
71  %cmp = icmp eq i8 %x, -1
72  br i1 %cmp, label %exit, label %if.then
73
74if.then:
75  br label %exit
76
77exit:
78  %retval = phi i8 [ %inc, %if.then ], [ -1, %entry ]
79  ret i8 %retval
80}
81