[llvm] r258218 - add tests to show missing memset/malloc optimizations (PR25892)

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 19 15:07:10 PST 2016


Author: spatel
Date: Tue Jan 19 17:07:10 2016
New Revision: 258218

URL: http://llvm.org/viewvc/llvm-project?rev=258218&view=rev
Log:
add tests to show missing memset/malloc optimizations (PR25892)

Modified:
    llvm/trunk/test/Transforms/InstCombine/memset-1.ll
    llvm/trunk/test/Transforms/InstCombine/memset_chk-1.ll

Modified: llvm/trunk/test/Transforms/InstCombine/memset-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/memset-1.ll?rev=258218&r1=258217&r2=258218&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/memset-1.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/memset-1.ll Tue Jan 19 17:07:10 2016
@@ -15,3 +15,40 @@ define i8* @test_simplify1(i8* %mem, i32
   ret i8* %ret
 ; CHECK: ret i8* %mem
 }
+
+; FIXME: memset(malloc(x), 0, x) -> calloc(1, x)
+
+define float* @pr25892(i32 %size) #0 {
+entry:
+  %call = tail call i8* @malloc(i32 %size) #1
+  %cmp = icmp eq i8* %call, null
+  br i1 %cmp, label %cleanup, label %if.end
+if.end:
+  %bc = bitcast i8* %call to float*
+  %call2 = tail call i8* @memset(i8* nonnull %call, i32 0, i32 %size) #1
+  br label %cleanup
+cleanup:
+  %retval.0 = phi float* [ %bc, %if.end ], [ null, %entry ]
+  ret float* %retval.0
+
+; CHECK-LABEL: @pr25892(
+; CHECK:       entry:
+; CHECK-NEXT:    %call = tail call i8* @malloc(i32 %size) #1
+; CHECK-NEXT:    %cmp = icmp eq i8* %call, null
+; CHECK-NEXT:    br i1 %cmp, label %cleanup, label %if.end
+; CHECK:       if.end: 
+; CHECK-NEXT:    %bc = bitcast i8* %call to float*
+; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull %call, i8 0, i32 %size, i32 1, i1 false)
+; CHECK-NEXT:    br label %cleanup
+; CHECK:       cleanup:
+; CHECK-NEXT:    %retval.0 = phi float* [ %bc, %if.end ], [ null, %entry ]
+; CHECK-NEXT:    ret float* %retval.0
+}
+
+declare noalias i8* @malloc(i32) #1
+declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) #2
+
+attributes #0 = { nounwind ssp uwtable }
+attributes #1 = { nounwind }
+attributes #2 = { nounwind readnone }
+

Modified: llvm/trunk/test/Transforms/InstCombine/memset_chk-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/memset_chk-1.ll?rev=258218&r1=258217&r2=258218&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/memset_chk-1.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/memset_chk-1.ll Tue Jan 19 17:07:10 2016
@@ -90,3 +90,41 @@ declare i64 @strlen(i8* nocapture)
 declare i64 @llvm.objectsize.i64.p0i8(i8*, i1)
 
 declare i8* @__memset_chk(i8*, i32, i64, i64)
+
+; FIXME: memset(malloc(x), 0, x) -> calloc(1, x)
+
+define float* @pr25892(i64 %size) #0 {
+entry:
+  %call = tail call i8* @malloc(i64 %size) #1
+  %cmp = icmp eq i8* %call, null
+  br i1 %cmp, label %cleanup, label %if.end
+if.end:
+  %bc = bitcast i8* %call to float*
+  %call2 = tail call i64 @llvm.objectsize.i64.p0i8(i8* nonnull %call, i1 false)
+  %call3 = tail call i8* @__memset_chk(i8* nonnull %call, i32 0, i64 %size, i64 %call2) #1
+  br label %cleanup
+cleanup:
+  %retval.0 = phi float* [ %bc, %if.end ], [ null, %entry ]
+  ret float* %retval.0
+
+; CHECK-LABEL: @pr25892(
+; CHECK:       entry:
+; CHECK-NEXT:    %call = tail call i8* @malloc(i64 %size)
+; CHECK-NEXT:    %cmp = icmp eq i8* %call, null
+; CHECK-NEXT:    br i1 %cmp, label %cleanup, label %if.end
+; CHECK:       if.end:
+; CHECK-NEXT:    %bc = bitcast i8* %call to float*
+; CHECK-NEXT:    %call2 = tail call i64 @llvm.objectsize.i64.p0i8(i8* nonnull %call, i1 false)
+; CHECK-NEXT:    %call3 = tail call i8* @__memset_chk(i8* nonnull %call, i32 0, i64 %size, i64 %call2)
+; CHECK-NEXT:    br label %cleanup
+; CHECK:       cleanup:
+; CHECK-NEXT:    %retval.0 = phi float* [ %bc, %if.end ], [ null, %entry ]
+; CHECK-NEXT:    ret float* %retval.0
+}
+
+declare noalias i8* @malloc(i64) #1
+
+attributes #0 = { nounwind ssp uwtable }
+attributes #1 = { nounwind }
+attributes #2 = { nounwind readnone }
+




More information about the llvm-commits mailing list