diff options
author | Eric Christopher <echristo@apple.com> | 2010-03-06 10:50:38 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2010-03-06 10:50:38 +0000 |
commit | a7fb58f5f5b24be9f3ed5eadcf10ad024b810859 (patch) | |
tree | 88cdd46e4a6927ad5cf071bcd4ba9eda4e07eec2 /llvm/test/Transforms/InstCombine | |
parent | b0759be4d07b3dec03b527fe3b50260d6c6d6e86 (diff) | |
download | bcm5719-llvm-a7fb58f5f5b24be9f3ed5eadcf10ad024b810859.tar.gz bcm5719-llvm-a7fb58f5f5b24be9f3ed5eadcf10ad024b810859.zip |
Migrate _chk call lowering from SimplifyLibCalls to InstCombine. Stub
out the remainder of the calls that we should lower in some way and
move the tests to the new correct directory. Fix up tests that are now
optimized more than they were before by -instcombine.
llvm-svn: 97875
Diffstat (limited to 'llvm/test/Transforms/InstCombine')
-rw-r--r-- | llvm/test/Transforms/InstCombine/memset_chk.ll | 18 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/objsize.ll | 4 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/strcpy_chk.ll | 12 |
3 files changed, 32 insertions, 2 deletions
diff --git a/llvm/test/Transforms/InstCombine/memset_chk.ll b/llvm/test/Transforms/InstCombine/memset_chk.ll new file mode 100644 index 00000000000..5a4e6d9e84f --- /dev/null +++ b/llvm/test/Transforms/InstCombine/memset_chk.ll @@ -0,0 +1,18 @@ +; RUN: opt < %s -instcombine -S | FileCheck %s +; rdar://7719085 + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" + +%struct.data = type { [100 x i32], [100 x i32], [1024 x i8] } + +define i32 @t() nounwind ssp { +; CHECK: @t +; CHECK: @llvm.memset.i64 +entry: + %0 = alloca %struct.data, align 8 ; <%struct.data*> [#uses=1] + %1 = bitcast %struct.data* %0 to i8* ; <i8*> [#uses=1] + %2 = call i8* @__memset_chk(i8* %1, i32 0, i64 1824, i64 1824) nounwind ; <i8*> [#uses=0] + ret i32 0 +} + +declare i8* @__memset_chk(i8*, i32, i64, i64) nounwind diff --git a/llvm/test/Transforms/InstCombine/objsize.ll b/llvm/test/Transforms/InstCombine/objsize.ll index bf1a37f975d..57dc2fd0544 100644 --- a/llvm/test/Transforms/InstCombine/objsize.ll +++ b/llvm/test/Transforms/InstCombine/objsize.ll @@ -91,7 +91,7 @@ bb11: %1 = bitcast float* %0 to i8* ; <i8*> [#uses=1] %2 = call i32 @llvm.objectsize.i32(i8* %1, i1 false) ; <i32> [#uses=1] %3 = call i8* @__memcpy_chk(i8* undef, i8* undef, i32 512, i32 %2) nounwind ; <i8*> [#uses=0] -; CHECK: @__memcpy_chk +; CHECK: unreachable unreachable bb12: @@ -113,7 +113,7 @@ entry: %1 = bitcast %struct.data* %0 to i8* %2 = call i64 @llvm.objectsize.i64(i8* %1, i1 false) nounwind ; CHECK-NOT: @llvm.objectsize -; CHECK: @__memset_chk(i8* %1, i32 0, i64 1824, i64 1824) +; CHECK: @llvm.memset.i64(i8* %1, i8 0, i64 1824, i32 8) %3 = call i8* @__memset_chk(i8* %1, i32 0, i64 1824, i64 %2) nounwind ret i32 0 } diff --git a/llvm/test/Transforms/InstCombine/strcpy_chk.ll b/llvm/test/Transforms/InstCombine/strcpy_chk.ll new file mode 100644 index 00000000000..a20a13c78b2 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/strcpy_chk.ll @@ -0,0 +1,12 @@ +; RUN: opt < %s -instcombine -S | FileCheck %s +@a = common global [60 x i8] zeroinitializer, align 1 ; <[60 x i8]*> [#uses=1] +@.str = private constant [8 x i8] c"abcdefg\00" ; <[8 x i8]*> [#uses=1] + +define i8* @foo() nounwind { +; CHECK: @foo +; CHECK-NEXT: call i8* @strcpy + %call = call i8* @__strcpy_chk(i8* getelementptr inbounds ([60 x i8]* @a, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8]* @.str, i32 0, i32 0), i32 60) ; <i8*> [#uses=1] + ret i8* %call +} + +declare i8* @__strcpy_chk(i8*, i8*, i32) nounwind |