@@ -8,10 +8,9 @@ declare void @use_i32(i32 %x)
8
8
define ptr @test_last_elem_from_ptr (ptr noundef readnone %x0 , i64 noundef %x1 ) {
9
9
; CHECK-LABEL: test_last_elem_from_ptr:
10
10
; CHECK: // %bb.0:
11
- ; CHECK-NEXT: add x8, x0, x1
12
- ; CHECK-NEXT: cmp x1, #0
13
- ; CHECK-NEXT: sub x8, x8, #1
14
- ; CHECK-NEXT: csel x0, xzr, x8, eq
11
+ ; CHECK-NEXT: subs x8, x1, #1
12
+ ; CHECK-NEXT: add x8, x8, x0
13
+ ; CHECK-NEXT: csel x0, xzr, x8, lo
15
14
; CHECK-NEXT: ret
16
15
%cmp = icmp eq i64 %x1 , 0
17
16
%add.ptr = getelementptr inbounds nuw i8 , ptr %x0 , i64 %x1
@@ -23,10 +22,9 @@ define ptr @test_last_elem_from_ptr(ptr noundef readnone %x0, i64 noundef %x1) {
23
22
define i32 @test_eq0_sub_add_i32 (i32 %x0 , i32 %x1 ) {
24
23
; CHECK-LABEL: test_eq0_sub_add_i32:
25
24
; CHECK: // %bb.0:
26
- ; CHECK-NEXT: add w8, w0, w1
27
- ; CHECK-NEXT: cmp w1, #0
28
- ; CHECK-NEXT: sub w8, w8, #1
29
- ; CHECK-NEXT: csel w0, wzr, w8, eq
25
+ ; CHECK-NEXT: subs w8, w1, #1
26
+ ; CHECK-NEXT: add w8, w8, w0
27
+ ; CHECK-NEXT: csel w0, wzr, w8, lo
30
28
; CHECK-NEXT: ret
31
29
%cmp = icmp eq i32 %x1 , 0
32
30
%add = add nuw i32 %x0 , %x1
@@ -38,9 +36,8 @@ define i32 @test_eq0_sub_add_i32(i32 %x0, i32 %x1) {
38
36
define i32 @test_ule7_sub_add_i32 (i32 %x0 , i32 %x1 ) {
39
37
; CHECK-LABEL: test_ule7_sub_add_i32:
40
38
; CHECK: // %bb.0:
41
- ; CHECK-NEXT: add w8, w0, w1
42
- ; CHECK-NEXT: cmp w1, #8
43
- ; CHECK-NEXT: sub w8, w8, #8
39
+ ; CHECK-NEXT: subs w8, w1, #8
40
+ ; CHECK-NEXT: add w8, w8, w0
44
41
; CHECK-NEXT: csel w0, wzr, w8, lo
45
42
; CHECK-NEXT: ret
46
43
%cmp = icmp ule i32 %x1 , 7
@@ -53,10 +50,9 @@ define i32 @test_ule7_sub_add_i32(i32 %x0, i32 %x1) {
53
50
define i32 @test_ule0_sub_add_i32 (i32 %x0 , i32 %x1 ) {
54
51
; CHECK-LABEL: test_ule0_sub_add_i32:
55
52
; CHECK: // %bb.0:
56
- ; CHECK-NEXT: add w8, w0, w1
57
- ; CHECK-NEXT: cmp w1, #0
58
- ; CHECK-NEXT: sub w8, w8, #1
59
- ; CHECK-NEXT: csel w0, wzr, w8, eq
53
+ ; CHECK-NEXT: subs w8, w1, #1
54
+ ; CHECK-NEXT: add w8, w8, w0
55
+ ; CHECK-NEXT: csel w0, wzr, w8, lo
60
56
; CHECK-NEXT: ret
61
57
%cmp = icmp ule i32 %x1 , 0
62
58
%add = add i32 %x0 , %x1
@@ -68,9 +64,8 @@ define i32 @test_ule0_sub_add_i32(i32 %x0, i32 %x1) {
68
64
define i32 @test_ultminus2_sub_add_i32 (i32 %x0 , i32 %x1 ) {
69
65
; CHECK-LABEL: test_ultminus2_sub_add_i32:
70
66
; CHECK: // %bb.0:
71
- ; CHECK-NEXT: add w8, w0, w1
72
- ; CHECK-NEXT: cmn w1, #2
73
- ; CHECK-NEXT: add w8, w8, #2
67
+ ; CHECK-NEXT: adds w8, w1, #2
68
+ ; CHECK-NEXT: add w8, w8, w0
74
69
; CHECK-NEXT: csel w0, wzr, w8, lo
75
70
; CHECK-NEXT: ret
76
71
%cmp = icmp ult i32 %x1 , -2
@@ -83,10 +78,9 @@ define i32 @test_ultminus2_sub_add_i32(i32 %x0, i32 %x1) {
83
78
define i32 @test_ne0_sub_add_i32 (i32 %x0 , i32 %x1 ) {
84
79
; CHECK-LABEL: test_ne0_sub_add_i32:
85
80
; CHECK: // %bb.0:
86
- ; CHECK-NEXT: add w8, w0, w1
87
- ; CHECK-NEXT: cmp w1, #0
88
- ; CHECK-NEXT: sub w8, w8, #1
89
- ; CHECK-NEXT: csel w0, w8, wzr, ne
81
+ ; CHECK-NEXT: subs w8, w1, #1
82
+ ; CHECK-NEXT: add w8, w8, w0
83
+ ; CHECK-NEXT: csel w0, w8, wzr, hs
90
84
; CHECK-NEXT: ret
91
85
%cmp = icmp ne i32 %x1 , 0
92
86
%add = add i32 %x0 , %x1
@@ -98,10 +92,9 @@ define i32 @test_ne0_sub_add_i32(i32 %x0, i32 %x1) {
98
92
define i32 @test_ugt7_sub_add_i32 (i32 %x0 , i32 %x1 ) {
99
93
; CHECK-LABEL: test_ugt7_sub_add_i32:
100
94
; CHECK: // %bb.0:
101
- ; CHECK-NEXT: add w8, w0, w1
102
- ; CHECK-NEXT: cmp w1, #7
103
- ; CHECK-NEXT: sub w8, w8, #8
104
- ; CHECK-NEXT: csel w0, wzr, w8, hi
95
+ ; CHECK-NEXT: subs w8, w1, #8
96
+ ; CHECK-NEXT: add w8, w8, w0
97
+ ; CHECK-NEXT: csel w0, wzr, w8, hs
105
98
; CHECK-NEXT: ret
106
99
%cmp = icmp ugt i32 %x1 , 7
107
100
%add = add i32 %x0 , %x1
@@ -113,10 +106,9 @@ define i32 @test_ugt7_sub_add_i32(i32 %x0, i32 %x1) {
113
106
define i32 @test_eq0_sub_addcomm_i32 (i32 %x0 , i32 %x1 ) {
114
107
; CHECK-LABEL: test_eq0_sub_addcomm_i32:
115
108
; CHECK: // %bb.0:
116
- ; CHECK-NEXT: add w8, w1, w0
117
- ; CHECK-NEXT: cmp w1, #0
118
- ; CHECK-NEXT: sub w8, w8, #1
119
- ; CHECK-NEXT: csel w0, wzr, w8, eq
109
+ ; CHECK-NEXT: subs w8, w1, #1
110
+ ; CHECK-NEXT: add w8, w8, w0
111
+ ; CHECK-NEXT: csel w0, wzr, w8, lo
120
112
; CHECK-NEXT: ret
121
113
%cmp = icmp eq i32 %x1 , 0
122
114
%add = add i32 %x1 , %x0
@@ -128,10 +120,9 @@ define i32 @test_eq0_sub_addcomm_i32(i32 %x0, i32 %x1) {
128
120
define i32 @test_eq0_subcomm_add_i32 (i32 %x0 , i32 %x1 ) {
129
121
; CHECK-LABEL: test_eq0_subcomm_add_i32:
130
122
; CHECK: // %bb.0:
131
- ; CHECK-NEXT: add w8, w0, w1
132
- ; CHECK-NEXT: cmp w1, #0
133
- ; CHECK-NEXT: sub w8, w8, #1
134
- ; CHECK-NEXT: csel w0, wzr, w8, eq
123
+ ; CHECK-NEXT: subs w8, w1, #1
124
+ ; CHECK-NEXT: add w8, w8, w0
125
+ ; CHECK-NEXT: csel w0, wzr, w8, lo
135
126
; CHECK-NEXT: ret
136
127
%cmp = icmp eq i32 %x1 , 0
137
128
%add = add i32 %x0 , %x1
@@ -143,21 +134,16 @@ define i32 @test_eq0_subcomm_add_i32(i32 %x0, i32 %x1) {
143
134
define i32 @test_eq0_multi_use_sub_i32 (i32 %x0 , i32 %x1 ) {
144
135
; CHECK-LABEL: test_eq0_multi_use_sub_i32:
145
136
; CHECK: // %bb.0:
146
- ; CHECK-NEXT: str x30, [sp, #-32]! // 8-byte Folded Spill
147
- ; CHECK-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill
148
- ; CHECK-NEXT: .cfi_def_cfa_offset 32
137
+ ; CHECK-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
138
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
149
139
; CHECK-NEXT: .cfi_offset w19, -8
150
- ; CHECK-NEXT: .cfi_offset w20, -16
151
- ; CHECK-NEXT: .cfi_offset w30, -32
152
- ; CHECK-NEXT: add w8, w0, w1
153
- ; CHECK-NEXT: mov w19, w1
154
- ; CHECK-NEXT: sub w20, w8, #1
155
- ; CHECK-NEXT: mov w0, w20
140
+ ; CHECK-NEXT: .cfi_offset w30, -16
141
+ ; CHECK-NEXT: subs w8, w1, #1
142
+ ; CHECK-NEXT: add w0, w8, w0
143
+ ; CHECK-NEXT: csel w19, wzr, w0, lo
156
144
; CHECK-NEXT: bl use_i32
157
- ; CHECK-NEXT: cmp w19, #0
158
- ; CHECK-NEXT: csel w0, wzr, w20, eq
159
- ; CHECK-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload
160
- ; CHECK-NEXT: ldr x30, [sp], #32 // 8-byte Folded Reload
145
+ ; CHECK-NEXT: mov w0, w19
146
+ ; CHECK-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
161
147
; CHECK-NEXT: ret
162
148
%cmp = icmp eq i32 %x1 , 0
163
149
%add = add nuw i32 %x0 , %x1
0 commit comments