@@ -9,28 +9,18 @@ declare ptr @memchr(ptr, i32, i64)
99define i1 @test_memchr_null (i32 %x ) {
1010; CHECK-LABEL: define i1 @test_memchr_null(
1111; CHECK-SAME: i32 [[X:%.*]]) {
12- ; CHECK-NEXT: [[ENTRY:.*]]:
12+ ; CHECK-NEXT: [[ENTRY:.*:]]
1313; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
14- ; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
15- ; CHECK-NEXT: i8 48, label %[[MEMCHR_CASE:.*]]
16- ; CHECK-NEXT: i8 49, label %[[MEMCHR_CASE1:.*]]
17- ; CHECK-NEXT: i8 0, label %[[MEMCHR_CASE2:.*]]
18- ; CHECK-NEXT: i8 50, label %[[MEMCHR_CASE3:.*]]
19- ; CHECK-NEXT: ]
20- ; CHECK: [[MEMCHR_CASE]]:
21- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS:.*]]
22- ; CHECK: [[MEMCHR_CASE1]]:
23- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
24- ; CHECK: [[MEMCHR_CASE2]]:
25- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
26- ; CHECK: [[MEMCHR_CASE3]]:
27- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
28- ; CHECK: [[MEMCHR_SUCCESS]]:
29- ; CHECK-NEXT: [[MEMCHR_IDX:%.*]] = phi i64 [ 0, %[[MEMCHR_CASE]] ], [ 1, %[[MEMCHR_CASE1]] ], [ 2, %[[MEMCHR_CASE2]] ], [ 3, %[[MEMCHR_CASE3]] ]
30- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr @str, i64 [[MEMCHR_IDX]]
31- ; CHECK-NEXT: br label %[[ENTRY_SPLIT]]
32- ; CHECK: [[ENTRY_SPLIT]]:
33- ; CHECK-NEXT: [[MEMCHR4:%.*]] = phi ptr [ null, %[[ENTRY]] ], [ [[TMP1]], %[[MEMCHR_SUCCESS]] ]
14+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 48, [[TMP0]]
15+ ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], ptr @str, ptr null
16+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 49, [[TMP0]]
17+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], ptr getelementptr (i8, ptr @str, i64 1), ptr [[TMP2]]
18+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i8 0, [[TMP0]]
19+ ; CHECK-NEXT: [[TMP6:%.*]] = select i1 [[TMP5]], ptr getelementptr (i8, ptr @str, i64 2), ptr [[TMP4]]
20+ ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i8 50, [[TMP0]]
21+ ; CHECK-NEXT: [[TMP8:%.*]] = select i1 [[TMP7]], ptr getelementptr (i8, ptr @str, i64 3), ptr [[TMP6]]
22+ ; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i8 0, [[TMP0]]
23+ ; CHECK-NEXT: [[MEMCHR4:%.*]] = select i1 [[TMP9]], ptr getelementptr (i8, ptr @str, i64 4), ptr [[TMP8]]
3424; CHECK-NEXT: [[ISNULL:%.*]] = icmp eq ptr [[MEMCHR4]], null
3525; CHECK-NEXT: ret i1 [[ISNULL]]
3626;
@@ -43,28 +33,18 @@ entry:
4333define ptr @test_memchr (i32 %x ) {
4434; CHECK-LABEL: define ptr @test_memchr(
4535; CHECK-SAME: i32 [[X:%.*]]) {
46- ; CHECK-NEXT: [[ENTRY:.*]]:
36+ ; CHECK-NEXT: [[ENTRY:.*:]]
4737; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
48- ; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
49- ; CHECK-NEXT: i8 48, label %[[MEMCHR_CASE:.*]]
50- ; CHECK-NEXT: i8 49, label %[[MEMCHR_CASE1:.*]]
51- ; CHECK-NEXT: i8 0, label %[[MEMCHR_CASE2:.*]]
52- ; CHECK-NEXT: i8 50, label %[[MEMCHR_CASE3:.*]]
53- ; CHECK-NEXT: ]
54- ; CHECK: [[MEMCHR_CASE]]:
55- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS:.*]]
56- ; CHECK: [[MEMCHR_CASE1]]:
57- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
58- ; CHECK: [[MEMCHR_CASE2]]:
59- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
60- ; CHECK: [[MEMCHR_CASE3]]:
61- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
62- ; CHECK: [[MEMCHR_SUCCESS]]:
63- ; CHECK-NEXT: [[MEMCHR_IDX:%.*]] = phi i64 [ 0, %[[MEMCHR_CASE]] ], [ 1, %[[MEMCHR_CASE1]] ], [ 2, %[[MEMCHR_CASE2]] ], [ 3, %[[MEMCHR_CASE3]] ]
64- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr @str, i64 [[MEMCHR_IDX]]
65- ; CHECK-NEXT: br label %[[ENTRY_SPLIT]]
66- ; CHECK: [[ENTRY_SPLIT]]:
67- ; CHECK-NEXT: [[MEMCHR4:%.*]] = phi ptr [ null, %[[ENTRY]] ], [ [[TMP1]], %[[MEMCHR_SUCCESS]] ]
38+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 48, [[TMP0]]
39+ ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], ptr @str, ptr null
40+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 49, [[TMP0]]
41+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], ptr getelementptr (i8, ptr @str, i64 1), ptr [[TMP2]]
42+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i8 0, [[TMP0]]
43+ ; CHECK-NEXT: [[TMP6:%.*]] = select i1 [[TMP5]], ptr getelementptr (i8, ptr @str, i64 2), ptr [[TMP4]]
44+ ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i8 50, [[TMP0]]
45+ ; CHECK-NEXT: [[TMP8:%.*]] = select i1 [[TMP7]], ptr getelementptr (i8, ptr @str, i64 3), ptr [[TMP6]]
46+ ; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i8 0, [[TMP0]]
47+ ; CHECK-NEXT: [[MEMCHR4:%.*]] = select i1 [[TMP9]], ptr getelementptr (i8, ptr @str, i64 4), ptr [[TMP8]]
6848; CHECK-NEXT: ret ptr [[MEMCHR4]]
6949;
7050entry:
@@ -75,25 +55,14 @@ entry:
7555define ptr @test_memchr_smaller_n (i32 %x ) {
7656; CHECK-LABEL: define ptr @test_memchr_smaller_n(
7757; CHECK-SAME: i32 [[X:%.*]]) {
78- ; CHECK-NEXT: [[ENTRY:.*]]:
58+ ; CHECK-NEXT: [[ENTRY:.*:]]
7959; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
80- ; CHECK-NEXT: switch i8 [[TMP0]], label %[[ENTRY_SPLIT:.*]] [
81- ; CHECK-NEXT: i8 48, label %[[MEMCHR_CASE:.*]]
82- ; CHECK-NEXT: i8 49, label %[[MEMCHR_CASE1:.*]]
83- ; CHECK-NEXT: i8 0, label %[[MEMCHR_CASE2:.*]]
84- ; CHECK-NEXT: ]
85- ; CHECK: [[MEMCHR_CASE]]:
86- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS:.*]]
87- ; CHECK: [[MEMCHR_CASE1]]:
88- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
89- ; CHECK: [[MEMCHR_CASE2]]:
90- ; CHECK-NEXT: br label %[[MEMCHR_SUCCESS]]
91- ; CHECK: [[MEMCHR_SUCCESS]]:
92- ; CHECK-NEXT: [[MEMCHR_IDX:%.*]] = phi i64 [ 0, %[[MEMCHR_CASE]] ], [ 1, %[[MEMCHR_CASE1]] ], [ 2, %[[MEMCHR_CASE2]] ]
93- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr @str, i64 [[MEMCHR_IDX]]
94- ; CHECK-NEXT: br label %[[ENTRY_SPLIT]]
95- ; CHECK: [[ENTRY_SPLIT]]:
96- ; CHECK-NEXT: [[MEMCHR3:%.*]] = phi ptr [ null, %[[ENTRY]] ], [ [[TMP1]], %[[MEMCHR_SUCCESS]] ]
60+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 48, [[TMP0]]
61+ ; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP1]], ptr @str, ptr null
62+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 49, [[TMP0]]
63+ ; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], ptr getelementptr (i8, ptr @str, i64 1), ptr [[TMP2]]
64+ ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i8 0, [[TMP0]]
65+ ; CHECK-NEXT: [[MEMCHR3:%.*]] = select i1 [[TMP5]], ptr getelementptr (i8, ptr @str, i64 2), ptr [[TMP4]]
9766; CHECK-NEXT: ret ptr [[MEMCHR3]]
9867;
9968entry:
@@ -119,7 +88,26 @@ define ptr @test_memchr_non_constant(i32 %x, ptr %str) {
11988; CHECK-LABEL: define ptr @test_memchr_non_constant(
12089; CHECK-SAME: i32 [[X:%.*]], ptr [[STR:%.*]]) {
12190; CHECK-NEXT: [[ENTRY:.*:]]
122- ; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr [[STR]], i32 [[X]], i64 5)
91+ ; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[X]] to i8
92+ ; CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[STR]], align 1
93+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[TMP1]], [[TMP0]]
94+ ; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], ptr [[STR]], ptr null
95+ ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[STR]], i64 1
96+ ; CHECK-NEXT: [[TMP5:%.*]] = load i8, ptr [[TMP4]], align 1
97+ ; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i8 [[TMP5]], [[TMP0]]
98+ ; CHECK-NEXT: [[TMP7:%.*]] = select i1 [[TMP6]], ptr [[TMP4]], ptr [[TMP3]]
99+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[STR]], i64 2
100+ ; CHECK-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
101+ ; CHECK-NEXT: [[TMP10:%.*]] = icmp eq i8 [[TMP9]], [[TMP0]]
102+ ; CHECK-NEXT: [[TMP11:%.*]] = select i1 [[TMP10]], ptr [[TMP8]], ptr [[TMP7]]
103+ ; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[STR]], i64 3
104+ ; CHECK-NEXT: [[TMP13:%.*]] = load i8, ptr [[TMP12]], align 1
105+ ; CHECK-NEXT: [[TMP14:%.*]] = icmp eq i8 [[TMP13]], [[TMP0]]
106+ ; CHECK-NEXT: [[TMP15:%.*]] = select i1 [[TMP14]], ptr [[TMP12]], ptr [[TMP11]]
107+ ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i8, ptr [[STR]], i64 4
108+ ; CHECK-NEXT: [[TMP17:%.*]] = load i8, ptr [[TMP16]], align 1
109+ ; CHECK-NEXT: [[TMP18:%.*]] = icmp eq i8 [[TMP17]], [[TMP0]]
110+ ; CHECK-NEXT: [[MEMCHR:%.*]] = select i1 [[TMP18]], ptr [[TMP16]], ptr [[TMP15]]
123111; CHECK-NEXT: ret ptr [[MEMCHR]]
124112;
125113entry:
@@ -130,8 +118,7 @@ entry:
130118define ptr @test_memchr_constant_ch () {
131119; CHECK-LABEL: define ptr @test_memchr_constant_ch() {
132120; CHECK-NEXT: [[ENTRY:.*:]]
133- ; CHECK-NEXT: [[MEMCHR:%.*]] = call ptr @memchr(ptr @str, i32 49, i64 5)
134- ; CHECK-NEXT: ret ptr [[MEMCHR]]
121+ ; CHECK-NEXT: ret ptr getelementptr (i8, ptr @str, i64 1)
135122;
136123entry:
137124 %memchr = call ptr @memchr (ptr @str , i32 49 , i64 5 )
0 commit comments