@@ -33,8 +33,8 @@ define ptr @test_simplify1_tail(ptr %mem, i32 %val, i32 %size) {
3333
3434define ptr @test_simplify1_musttail (ptr %mem , i32 %val , i32 %size ) {
3535; CHECK-LABEL: @test_simplify1_musttail(
36- ; CHECK-NEXT: %ret = musttail call ptr @memset(ptr %mem , i32 %val , i32 %size )
37- ; CHECK-NEXT: ret ptr %ret
36+ ; CHECK-NEXT: [[RET:%.*]] = musttail call ptr @memset(ptr [[MEM:%.*]] , i32 [[VAL:%.*]] , i32 [[SIZE:%.*]] )
37+ ; CHECK-NEXT: ret ptr [[RET]]
3838;
3939 %ret = musttail call ptr @memset (ptr %mem , i32 %val , i32 %size )
4040 ret ptr %ret
@@ -44,8 +44,9 @@ define ptr @test_simplify1_musttail(ptr %mem, i32 %val, i32 %size) {
4444
4545define ptr @pr25892_lite (i32 %size ) #0 {
4646; CHECK-LABEL: @pr25892_lite(
47- ; CHECK-NEXT: [[CALL:%.*]] = call ptr @malloc(i32 [[SIZE:%.*]])
48- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false)
47+ ; CHECK-NEXT: [[CALL1:%.*]] = call ptr @malloc(i32 [[SIZE:%.*]]) #[[ATTR0:[0-9]+]]
48+ ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 1 [[CALL1]], i8 0, i32 [[SIZE]], i1 false) #[[ATTR0]]
49+ ; CHECK-NEXT: ret ptr [[CALL1]]
4950;
5051 %call1 = call ptr @malloc (i32 %size ) #1
5152 %call2 = call ptr @memset (ptr %call1 , i32 0 , i32 %size ) #1
@@ -71,8 +72,8 @@ define ptr @malloc_and_memset_intrinsic(i32 %n) #0 {
7172
7273define ptr @notmalloc_memset (i32 %size , ptr %notmalloc ) {
7374; CHECK-LABEL: @notmalloc_memset(
74- ; CHECK-NEXT: [[CALL1:%.*]] = call ptr [[NOTMALLOC:%.*]](i32 [[SIZE:%.*]]) [[ATTR0:#.* ]]
75- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 1 [[CALL1]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
75+ ; CHECK-NEXT: [[CALL1:%.*]] = call ptr [[NOTMALLOC:%.*]](i32 [[SIZE:%.*]]) # [[ATTR0]]
76+ ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 1 [[CALL1]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
7677; CHECK-NEXT: ret ptr [[CALL1]]
7778;
7879 %call1 = call ptr %notmalloc (i32 %size ) #1
@@ -86,11 +87,11 @@ define ptr @notmalloc_memset(i32 %size, ptr %notmalloc) {
8687define ptr @pr25892 (i32 %size ) #0 {
8788; CHECK-LABEL: @pr25892(
8889; CHECK-NEXT: entry:
89- ; CHECK-NEXT: [[CALL:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
90+ ; CHECK-NEXT: [[CALL:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) # [[ATTR0]]
9091; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[CALL]], null
9192; CHECK-NEXT: br i1 [[CMP]], label [[CLEANUP:%.*]], label [[IF_END:%.*]]
9293; CHECK: if.end:
93- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr nonnull align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
94+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr nonnull align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
9495; CHECK-NEXT: br label [[CLEANUP]]
9596; CHECK: cleanup:
9697; CHECK-NEXT: [[RETVAL_0:%.*]] = phi ptr [ [[CALL]], [[IF_END]] ], [ null, [[ENTRY:%.*]] ]
@@ -112,9 +113,9 @@ cleanup:
112113
113114define ptr @buffer_is_modified_then_memset (i32 %size ) {
114115; CHECK-LABEL: @buffer_is_modified_then_memset(
115- ; CHECK-NEXT: [[PTR:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
116+ ; CHECK-NEXT: [[PTR:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) # [[ATTR0]]
116117; CHECK-NEXT: store i8 1, ptr [[PTR]], align 1
117- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
118+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
118119; CHECK-NEXT: ret ptr [[PTR]]
119120;
120121 %ptr = tail call ptr @malloc (i32 %size ) #1
@@ -126,7 +127,7 @@ define ptr @buffer_is_modified_then_memset(i32 %size) {
126127define ptr @memset_size_select (i1 %b , ptr %ptr ) {
127128; CHECK-LABEL: @memset_size_select(
128129; CHECK-NEXT: [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
129- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(10) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
130+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(10) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
130131; CHECK-NEXT: ret ptr [[PTR]]
131132;
132133 %size = select i1 %b , i32 10 , i32 50
@@ -138,7 +139,7 @@ define ptr @memset_size_select(i1 %b, ptr %ptr) {
138139define ptr @memset_size_select2 (i1 %b , ptr %ptr ) {
139140; CHECK-LABEL: @memset_size_select2(
140141; CHECK-NEXT: [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
141- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(80) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
142+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(80) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
142143; CHECK-NEXT: ret ptr [[PTR]]
143144;
144145 %size = select i1 %b , i32 10 , i32 50
@@ -149,7 +150,7 @@ define ptr @memset_size_select2(i1 %b, ptr %ptr) {
149150define ptr @memset_size_select3 (i1 %b , ptr %ptr ) {
150151; CHECK-LABEL: @memset_size_select3(
151152; CHECK-NEXT: [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
152- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false)
153+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false)
153154; CHECK-NEXT: ret ptr [[PTR]]
154155;
155156 %size = select i1 %b , i32 10 , i32 50
@@ -160,7 +161,7 @@ define ptr @memset_size_select3(i1 %b, ptr %ptr) {
160161define ptr @memset_size_select4 (i1 %b , ptr %ptr ) {
161162; CHECK-LABEL: @memset_size_select4(
162163; CHECK-NEXT: [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
163- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
164+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
164165; CHECK-NEXT: ret ptr [[PTR]]
165166;
166167 %size = select i1 %b , i32 10 , i32 50
@@ -171,7 +172,7 @@ define ptr @memset_size_select4(i1 %b, ptr %ptr) {
171172define ptr @memset_size_ashr (i1 %b , ptr %ptr , i32 %v ) {
172173; CHECK-LABEL: @memset_size_ashr(
173174; CHECK-NEXT: [[SIZE:%.*]] = ashr i32 -2, [[V:%.*]]
174- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
175+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(1) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) # [[ATTR0]]
175176; CHECK-NEXT: ret ptr [[PTR]]
176177;
177178 %size = ashr i32 -2 , %v
@@ -181,7 +182,7 @@ define ptr @memset_size_ashr(i1 %b, ptr %ptr, i32 %v) {
181182
182183define ptr @memset_attrs1 (i1 %b , ptr %ptr , i32 %size ) {
183184; CHECK-LABEL: @memset_attrs1(
184- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
185+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) # [[ATTR0]]
185186; CHECK-NEXT: ret ptr [[PTR]]
186187;
187188 %memset = tail call ptr @memset (ptr dereferenceable_or_null (40 ) %ptr , i32 0 , i32 %size ) #1
@@ -192,7 +193,7 @@ define ptr @memset_attrs1(i1 %b, ptr %ptr, i32 %size) {
192193; do not change dereferenceable attribute
193194define ptr @memset_attrs2 (i1 %b , ptr %ptr , i32 %size ) {
194195; CHECK-LABEL: @memset_attrs2(
195- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
196+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) # [[ATTR0]]
196197; CHECK-NEXT: ret ptr [[PTR]]
197198;
198199 %memset = tail call ptr @memset (ptr nonnull dereferenceable (40 ) %ptr , i32 0 , i32 %size ) #1
@@ -202,7 +203,7 @@ define ptr @memset_attrs2(i1 %b, ptr %ptr, i32 %size) {
202203; size is unknown, just copy attrs, no changes in attrs
203204define ptr @memset_attrs3 (i1 %b , ptr %ptr , i32 %size ) {
204205; CHECK-LABEL: @memset_attrs3(
205- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
206+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) # [[ATTR0]]
206207; CHECK-NEXT: ret ptr [[PTR]]
207208;
208209 %memset = tail call ptr @memset (ptr nonnull dereferenceable_or_null (40 ) %ptr , i32 0 , i32 %size ) #1
@@ -212,7 +213,7 @@ define ptr @memset_attrs3(i1 %b, ptr %ptr, i32 %size) {
212213; be sure to drop nonnull since size is unknown and can be 0
213214define ptr @memset_attrs4 (i1 %b , ptr %ptr , i32 %size ) {
214215; CHECK-LABEL: @memset_attrs4(
215- ; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
216+ ; CHECK-NEXT: tail call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) # [[ATTR0]]
216217; CHECK-NEXT: ret ptr [[PTR]]
217218;
218219 %memset = tail call ptr @memset (ptr nonnull %ptr , i32 0 , i32 %size ) #1
0 commit comments