1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
1
2
; RUN: opt -S -passes=aggressive-instcombine -strncmp-inline-threshold=3 < %s | FileCheck %s
2
3
3
4
declare i32 @strncmp (ptr nocapture , ptr nocapture , i64 )
@@ -7,23 +8,24 @@ declare i32 @strcmp(ptr nocapture, ptr nocapture)
7
8
@.str.1 = private unnamed_addr constant [2 x i8 ] c "a\00 " , align 1
8
9
9
10
define i32 @test_strncmp_1 (ptr nocapture readonly %s ) {
10
- ; CHECK-LABEL: @test_strncmp_1(
11
+ ; CHECK-LABEL: define i32 @test_strncmp_1(
12
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
11
13
; CHECK-NEXT: entry.before:
12
14
; CHECK-NEXT: br label [[SUB:%.*]]
13
15
; CHECK: sub:
14
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
16
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
15
17
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
16
18
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
17
19
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 97, [[TMP2]]
18
20
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
19
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB2 :%.*]], label [[SUB1:%.*]]
21
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
20
22
; CHECK: sub1:
21
23
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
22
24
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
23
25
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
24
26
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 98, [[TMP7]]
25
- ; CHECK-NEXT: br label [[SUB2 ]]
26
- ; CHECK: sub2 :
27
+ ; CHECK-NEXT: br label [[NE ]]
28
+ ; CHECK: ne :
27
29
; CHECK-NEXT: [[TMP9:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ]
28
30
; CHECK-NEXT: br label [[ENTRY:%.*]]
29
31
; CHECK: entry:
@@ -35,30 +37,31 @@ entry:
35
37
}
36
38
37
39
define i32 @test_strncmp_2 (ptr nocapture readonly %s ) {
38
- ; CHECK-LABEL: @test_strncmp_2(
40
+ ; CHECK-LABEL: define i32 @test_strncmp_2(
41
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
39
42
; CHECK-NEXT: entry.before:
40
43
; CHECK-NEXT: br label [[SUB:%.*]]
41
44
; CHECK: sub:
42
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
45
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
43
46
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
44
47
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
45
48
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 97, [[TMP2]]
46
49
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
47
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB3 :%.*]], label [[SUB1:%.*]]
50
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
48
51
; CHECK: sub1:
49
52
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
50
53
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
51
54
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
52
55
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 98, [[TMP7]]
53
56
; CHECK-NEXT: [[TMP9:%.*]] = icmp ne i32 [[TMP8]], 0
54
- ; CHECK-NEXT: br i1 [[TMP9]], label [[SUB3 ]], label [[SUB2:%.*]]
57
+ ; CHECK-NEXT: br i1 [[TMP9]], label [[NE ]], label [[SUB2:%.*]]
55
58
; CHECK: sub2:
56
59
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 2
57
60
; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
58
61
; CHECK-NEXT: [[TMP12:%.*]] = zext i8 [[TMP11]] to i32
59
62
; CHECK-NEXT: [[TMP13:%.*]] = sub i32 0, [[TMP12]]
60
- ; CHECK-NEXT: br label [[SUB3 ]]
61
- ; CHECK: sub3 :
63
+ ; CHECK-NEXT: br label [[NE ]]
64
+ ; CHECK: ne :
62
65
; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ], [ [[TMP13]], [[SUB2]] ]
63
66
; CHECK-NEXT: br label [[ENTRY:%.*]]
64
67
; CHECK: entry:
@@ -70,30 +73,31 @@ entry:
70
73
}
71
74
72
75
define i32 @test_strncmp_3 (ptr nocapture readonly %s ) {
73
- ; CHECK-LABEL: @test_strncmp_3(
76
+ ; CHECK-LABEL: define i32 @test_strncmp_3(
77
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
74
78
; CHECK-NEXT: entry.before:
75
79
; CHECK-NEXT: br label [[SUB:%.*]]
76
80
; CHECK: sub:
77
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
81
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
78
82
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
79
83
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
80
84
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 97, [[TMP2]]
81
85
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
82
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB3 :%.*]], label [[SUB1:%.*]]
86
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
83
87
; CHECK: sub1:
84
88
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
85
89
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
86
90
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
87
91
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 98, [[TMP7]]
88
92
; CHECK-NEXT: [[TMP9:%.*]] = icmp ne i32 [[TMP8]], 0
89
- ; CHECK-NEXT: br i1 [[TMP9]], label [[SUB3 ]], label [[SUB2:%.*]]
93
+ ; CHECK-NEXT: br i1 [[TMP9]], label [[NE ]], label [[SUB2:%.*]]
90
94
; CHECK: sub2:
91
95
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 2
92
96
; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
93
97
; CHECK-NEXT: [[TMP12:%.*]] = zext i8 [[TMP11]] to i32
94
98
; CHECK-NEXT: [[TMP13:%.*]] = sub i32 0, [[TMP12]]
95
- ; CHECK-NEXT: br label [[SUB3 ]]
96
- ; CHECK: sub3 :
99
+ ; CHECK-NEXT: br label [[NE ]]
100
+ ; CHECK: ne :
97
101
; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ], [ [[TMP13]], [[SUB2]] ]
98
102
; CHECK-NEXT: br label [[ENTRY:%.*]]
99
103
; CHECK: entry:
@@ -105,23 +109,24 @@ entry:
105
109
}
106
110
107
111
define i32 @test_strcmp_1 (ptr nocapture readonly %s ) {
108
- ; CHECK-LABEL: @test_strcmp_1(
112
+ ; CHECK-LABEL: define i32 @test_strcmp_1(
113
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
109
114
; CHECK-NEXT: entry.before:
110
115
; CHECK-NEXT: br label [[SUB:%.*]]
111
116
; CHECK: sub:
112
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
117
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
113
118
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
114
119
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
115
120
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 [[TMP2]], 97
116
121
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
117
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB2 :%.*]], label [[SUB1:%.*]]
122
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
118
123
; CHECK: sub1:
119
124
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
120
125
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
121
126
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
122
127
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 [[TMP7]], 0
123
- ; CHECK-NEXT: br label [[SUB2 ]]
124
- ; CHECK: sub2 :
128
+ ; CHECK-NEXT: br label [[NE ]]
129
+ ; CHECK: ne :
125
130
; CHECK-NEXT: [[TMP9:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ]
126
131
; CHECK-NEXT: br label [[ENTRY:%.*]]
127
132
; CHECK: entry:
@@ -133,30 +138,31 @@ entry:
133
138
}
134
139
135
140
define i32 @test_strcmp_2 (ptr nocapture readonly %s ) {
136
- ; CHECK-LABEL: @test_strcmp_2(
141
+ ; CHECK-LABEL: define i32 @test_strcmp_2(
142
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
137
143
; CHECK-NEXT: entry.before:
138
144
; CHECK-NEXT: br label [[SUB:%.*]]
139
145
; CHECK: sub:
140
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
146
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
141
147
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
142
148
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
143
149
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 [[TMP2]], 97
144
150
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
145
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB3 :%.*]], label [[SUB1:%.*]]
151
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
146
152
; CHECK: sub1:
147
153
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
148
154
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
149
155
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
150
156
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 [[TMP7]], 98
151
157
; CHECK-NEXT: [[TMP9:%.*]] = icmp ne i32 [[TMP8]], 0
152
- ; CHECK-NEXT: br i1 [[TMP9]], label [[SUB3 ]], label [[SUB2:%.*]]
158
+ ; CHECK-NEXT: br i1 [[TMP9]], label [[NE ]], label [[SUB2:%.*]]
153
159
; CHECK: sub2:
154
160
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 2
155
161
; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
156
162
; CHECK-NEXT: [[TMP12:%.*]] = zext i8 [[TMP11]] to i32
157
163
; CHECK-NEXT: [[TMP13:%.*]] = sub i32 [[TMP12]], 0
158
- ; CHECK-NEXT: br label [[SUB3 ]]
159
- ; CHECK: sub3 :
164
+ ; CHECK-NEXT: br label [[NE ]]
165
+ ; CHECK: ne :
160
166
; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ], [ [[TMP13]], [[SUB2]] ]
161
167
; CHECK-NEXT: br label [[ENTRY:%.*]]
162
168
; CHECK: entry:
@@ -168,30 +174,31 @@ entry:
168
174
}
169
175
170
176
define i32 @test_strcmp_3 (ptr nocapture readonly %s ) {
171
- ; CHECK-LABEL: @test_strcmp_3(
177
+ ; CHECK-LABEL: define i32 @test_strcmp_3(
178
+ ; CHECK-SAME: ptr nocapture readonly [[S:%.*]]) {
172
179
; CHECK-NEXT: entry.before:
173
180
; CHECK-NEXT: br label [[SUB:%.*]]
174
181
; CHECK: sub:
175
- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S:%.* ]], i64 0
182
+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 0
176
183
; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[TMP0]], align 1
177
184
; CHECK-NEXT: [[TMP2:%.*]] = zext i8 [[TMP1]] to i32
178
185
; CHECK-NEXT: [[TMP3:%.*]] = sub i32 97, [[TMP2]]
179
186
; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 0
180
- ; CHECK-NEXT: br i1 [[TMP4]], label [[SUB3 :%.*]], label [[SUB1:%.*]]
187
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[NE :%.*]], label [[SUB1:%.*]]
181
188
; CHECK: sub1:
182
189
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 1
183
190
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP5]], align 1
184
191
; CHECK-NEXT: [[TMP7:%.*]] = zext i8 [[TMP6]] to i32
185
192
; CHECK-NEXT: [[TMP8:%.*]] = sub i32 98, [[TMP7]]
186
193
; CHECK-NEXT: [[TMP9:%.*]] = icmp ne i32 [[TMP8]], 0
187
- ; CHECK-NEXT: br i1 [[TMP9]], label [[SUB3 ]], label [[SUB2:%.*]]
194
+ ; CHECK-NEXT: br i1 [[TMP9]], label [[NE ]], label [[SUB2:%.*]]
188
195
; CHECK: sub2:
189
196
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[S]], i64 2
190
197
; CHECK-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
191
198
; CHECK-NEXT: [[TMP12:%.*]] = zext i8 [[TMP11]] to i32
192
199
; CHECK-NEXT: [[TMP13:%.*]] = sub i32 0, [[TMP12]]
193
- ; CHECK-NEXT: br label [[SUB3 ]]
194
- ; CHECK: sub3 :
200
+ ; CHECK-NEXT: br label [[NE ]]
201
+ ; CHECK: ne :
195
202
; CHECK-NEXT: [[TMP14:%.*]] = phi i32 [ [[TMP3]], [[SUB]] ], [ [[TMP8]], [[SUB1]] ], [ [[TMP13]], [[SUB2]] ]
196
203
; CHECK-NEXT: br label [[ENTRY:%.*]]
197
204
; CHECK: entry:
0 commit comments