xref: /llvm-project/llvm/test/CodeGen/AArch64/aarch64-icmp-opt.ll (revision ec864a537160288a9cf7aea965cf33b0851d6d55)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -O3 -mtriple=aarch64 %s -o - | FileCheck %s
3
4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5target triple = "aarch64-unknown-linux-gnu"
6
7define i32 @sub_icmp_i32(i32 %0, i32 %1) {
8; CHECK-LABEL: sub_icmp_i32:
9; CHECK:       // %bb.0:
10; CHECK-NEXT:    subs w0, w0, w1
11; CHECK-NEXT:    b.le .LBB0_2
12; CHECK-NEXT:  // %bb.1:
13; CHECK-NEXT:    b _Z2f2i
14; CHECK-NEXT:  .LBB0_2:
15; CHECK-NEXT:    b _Z2f1i
16  %3 = sub nsw i32 %0, %1
17  %4 = icmp slt i32 %3, 1
18  br i1 %4, label %5, label %7
19
205:
21  %6 = tail call i32 @_Z2f1i(i32 %3)
22  br label %9
23
247:
25  %8 = tail call i32 @_Z2f2i(i32 %3)
26  br label %9
27
289:
29  %10 = phi i32 [ %6, %5 ], [ %8, %7 ]
30  ret i32 %10
31}
32
33
34
35define i64 @sub_icmp_i64(i64 %0, i64 %1) {
36; CHECK-LABEL: sub_icmp_i64:
37; CHECK:       // %bb.0:
38; CHECK-NEXT:    subs x0, x0, x1
39; CHECK-NEXT:    b.le .LBB1_2
40; CHECK-NEXT:  // %bb.1:
41; CHECK-NEXT:    b _Z2f4l
42; CHECK-NEXT:  .LBB1_2:
43; CHECK-NEXT:    b _Z2f3l
44  %3 = sub nsw i64 %0, %1
45  %4 = icmp slt i64 %3, 1
46  br i1 %4, label %5, label %7
47
485:
49  %6 = tail call i64 @_Z2f3l(i64 %3)
50  br label %9
51
527:
53  %8 = tail call i64 @_Z2f4l(i64 %3)
54  br label %9
55
569:
57  %10 = phi i64 [ %6, %5 ], [ %8, %7 ]
58  ret i64 %10
59}
60
61define i64 @add_i64(i64 %0, i64 %1) {
62; CHECK-LABEL: add_i64:
63; CHECK:       // %bb.0:
64; CHECK-NEXT:    adds x0, x1, x0
65; CHECK-NEXT:    b.le .LBB2_2
66; CHECK-NEXT:  // %bb.1:
67; CHECK-NEXT:    b _Z2f4l
68; CHECK-NEXT:  .LBB2_2:
69; CHECK-NEXT:    b _Z2f3l
70  %3 = add nsw i64 %1, %0
71  %4 = icmp slt i64 %3, 1
72  br i1 %4, label %5, label %7
73
745:
75  %6 = tail call i64 @_Z2f3l(i64 %3)
76  br label %9
77
787:
79  %8 = tail call i64 @_Z2f4l(i64 %3)
80  br label %9
81
829:
83  %10 = phi i64 [ %6, %5 ], [ %8, %7 ]
84  ret i64 %10
85}
86
87define i32 @add_i32(i32 %0, i32 %1) {
88; CHECK-LABEL: add_i32:
89; CHECK:       // %bb.0:
90; CHECK-NEXT:    adds w0, w1, w0
91; CHECK-NEXT:    b.le .LBB3_2
92; CHECK-NEXT:  // %bb.1:
93; CHECK-NEXT:    b _Z2f4l
94; CHECK-NEXT:  .LBB3_2:
95; CHECK-NEXT:    b _Z2f3l
96  %3 = add nsw i32 %1, %0
97  %4 = icmp slt i32 %3, 1
98  br i1 %4, label %5, label %7
99
1005:
101  %6 = tail call i32 @_Z2f3l(i32 %3)
102  br label %9
103
1047:
105  %8 = tail call i32 @_Z2f4l(i32 %3)
106  br label %9
107
1089:
109  %10 = phi i32 [ %6, %5 ], [ %8, %7 ]
110  ret i32 %10
111}
112
113
114
115declare i32 @_Z2f1i(i32)
116declare i32 @_Z2f2i(i32)
117declare i64 @_Z2f3l(i64)
118declare i64 @_Z2f4l(i64)
119