@@ -12,11 +12,12 @@ declare ptr @memchr(ptr, i32, i64)
12
12
13
13
define zeroext i1 @strchr_to_memchr_n_equals_len (i32 %c ) {
14
14
; CHECK-LABEL: @strchr_to_memchr_n_equals_len(
15
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[C:%.*]], 0
16
- ; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[C]], -97
17
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i32 [[TMP2]], 26
18
- ; CHECK-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]]
19
- ; CHECK-NEXT: ret i1 [[TMP4]]
15
+ ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
16
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[TMP1]], 0
17
+ ; CHECK-NEXT: [[TMP3:%.*]] = add i8 [[TMP1]], -97
18
+ ; CHECK-NEXT: [[TMP4:%.*]] = icmp ult i8 [[TMP3]], 26
19
+ ; CHECK-NEXT: [[TMP5:%.*]] = or i1 [[TMP2]], [[TMP4]]
20
+ ; CHECK-NEXT: ret i1 [[TMP5]]
20
21
;
21
22
%call = tail call ptr @strchr (ptr nonnull dereferenceable (27 ) @.str , i32 %c )
22
23
%cmp = icmp ne ptr %call , null
@@ -38,9 +39,10 @@ define zeroext i1 @memchr_n_equals_len(i32 %c) {
38
39
39
40
define zeroext i1 @memchr_n_less_than_len (i32 %c ) {
40
41
; CHECK-LABEL: @memchr_n_less_than_len(
41
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[C:%.*]], -97
42
- ; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i32 [[TMP1]], 15
43
- ; CHECK-NEXT: ret i1 [[TMP2]]
42
+ ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
43
+ ; CHECK-NEXT: [[TMP2:%.*]] = add i8 [[TMP1]], -97
44
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i8 [[TMP2]], 15
45
+ ; CHECK-NEXT: ret i1 [[TMP3]]
44
46
;
45
47
%call = tail call ptr @memchr (ptr @.str , i32 %c , i64 15 )
46
48
%cmp = icmp ne ptr %call , null
@@ -50,11 +52,12 @@ define zeroext i1 @memchr_n_less_than_len(i32 %c) {
50
52
51
53
define zeroext i1 @memchr_n_more_than_len (i32 %c ) {
52
54
; CHECK-LABEL: @memchr_n_more_than_len(
53
- ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[C:%.*]], 0
54
- ; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[C]], -97
55
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i32 [[TMP2]], 26
56
- ; CHECK-NEXT: [[TMP4:%.*]] = or i1 [[TMP1]], [[TMP3]]
57
- ; CHECK-NEXT: ret i1 [[TMP4]]
55
+ ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
56
+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[TMP1]], 0
57
+ ; CHECK-NEXT: [[TMP3:%.*]] = add i8 [[TMP1]], -97
58
+ ; CHECK-NEXT: [[TMP4:%.*]] = icmp ult i8 [[TMP3]], 26
59
+ ; CHECK-NEXT: [[TMP5:%.*]] = or i1 [[TMP2]], [[TMP4]]
60
+ ; CHECK-NEXT: ret i1 [[TMP5]]
58
61
;
59
62
%call = tail call ptr @memchr (ptr @.str , i32 %c , i64 30 )
60
63
%cmp = icmp ne ptr %call , null
@@ -114,12 +117,13 @@ define zeroext i1 @memchr_n_equals_len2_minsize(i32 %c) minsize {
114
117
; Positive test - 2 non-contiguous ranges
115
118
define zeroext i1 @strchr_to_memchr_2_non_cont_ranges (i32 %c ) {
116
119
; CHECK-LABEL: @strchr_to_memchr_2_non_cont_ranges(
117
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[C:%.*]], -97
118
- ; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i32 [[TMP1]], 6
119
- ; CHECK-NEXT: [[TMP3:%.*]] = add i32 [[C]], -109
120
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ult i32 [[TMP3]], 3
121
- ; CHECK-NEXT: [[TMP5:%.*]] = or i1 [[TMP2]], [[TMP4]]
122
- ; CHECK-NEXT: ret i1 [[TMP5]]
120
+ ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
121
+ ; CHECK-NEXT: [[TMP2:%.*]] = add i8 [[TMP1]], -97
122
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i8 [[TMP2]], 6
123
+ ; CHECK-NEXT: [[TMP4:%.*]] = add i8 [[TMP1]], -109
124
+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp ult i8 [[TMP4]], 3
125
+ ; CHECK-NEXT: [[TMP6:%.*]] = or i1 [[TMP3]], [[TMP5]]
126
+ ; CHECK-NEXT: ret i1 [[TMP6]]
123
127
;
124
128
%call = tail call ptr @memchr (ptr @.str.2 , i32 %c , i64 9 )
125
129
%cmp = icmp ne ptr %call , null
@@ -129,12 +133,13 @@ define zeroext i1 @strchr_to_memchr_2_non_cont_ranges(i32 %c) {
129
133
; Positive test - 2 non-contiguous ranges with char duplication
130
134
define zeroext i1 @strchr_to_memchr_2_non_cont_ranges_char_dup (i32 %c ) {
131
135
; CHECK-LABEL: @strchr_to_memchr_2_non_cont_ranges_char_dup(
132
- ; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[C:%.*]], -97
133
- ; CHECK-NEXT: [[TMP2:%.*]] = icmp ult i32 [[TMP1]], 3
134
- ; CHECK-NEXT: [[TMP3:%.*]] = add i32 [[C]], -109
135
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ult i32 [[TMP3]], 2
136
- ; CHECK-NEXT: [[TMP5:%.*]] = or i1 [[TMP2]], [[TMP4]]
137
- ; CHECK-NEXT: ret i1 [[TMP5]]
136
+ ; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
137
+ ; CHECK-NEXT: [[TMP2:%.*]] = add i8 [[TMP1]], -97
138
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i8 [[TMP2]], 3
139
+ ; CHECK-NEXT: [[TMP4:%.*]] = add i8 [[TMP1]], -109
140
+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp ult i8 [[TMP4]], 2
141
+ ; CHECK-NEXT: [[TMP6:%.*]] = or i1 [[TMP3]], [[TMP5]]
142
+ ; CHECK-NEXT: ret i1 [[TMP6]]
138
143
;
139
144
%call = tail call ptr @memchr (ptr @.str.4 , i32 %c , i64 6 )
140
145
%cmp = icmp ne ptr %call , null
0 commit comments