Fix an incorrect logic causing instcombine to miss some _chk -> non-chk transformations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99263 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2010-03-23 06:06:09 +00:00
parent 621f195243
commit 9d8f002d8f
2 changed files with 15 additions and 2 deletions

View File

@ -766,7 +766,7 @@ protected:
return SizeCI->getZExtValue() >=
GetStringLength(CI->getOperand(SizeArgOp));
if (ConstantInt *Arg = dyn_cast<ConstantInt>(CI->getOperand(SizeArgOp)))
return SizeCI->getZExtValue() <= Arg->getZExtValue();
return SizeCI->getZExtValue() >= Arg->getZExtValue();
}
return false;
}

View File

@ -118,6 +118,7 @@ entry:
ret i32 0
}
; rdar://7782496
@s = external global i8*
define void @test5(i32 %n) nounwind ssp {
@ -127,11 +128,23 @@ entry:
%1 = tail call i32 @llvm.objectsize.i32(i8* %0, i1 false)
%2 = load i8** @s, align 8
; CHECK-NOT: @llvm.objectsize
; CHECK: @__memcpy_chk(i8* %0, i8* %1, i32 10, i32 20)
; CHECK: @llvm.memcpy.i32(i8* %0, i8* %1, i32 10, i32 1)
%3 = tail call i8* @__memcpy_chk(i8* %0, i8* %2, i32 10, i32 %1) nounwind
ret void
}
define void @test6(i32 %n) nounwind ssp {
; CHECK: @test6
entry:
%0 = tail call noalias i8* @malloc(i32 20) nounwind
%1 = tail call i32 @llvm.objectsize.i32(i8* %0, i1 false)
%2 = load i8** @s, align 8
; CHECK-NOT: @llvm.objectsize
; CHECK: @__memcpy_chk(i8* %0, i8* %1, i32 30, i32 20)
%3 = tail call i8* @__memcpy_chk(i8* %0, i8* %2, i32 30, i32 %1) nounwind
ret void
}
declare i8* @__memset_chk(i8*, i32, i64, i64) nounwind
declare noalias i8* @malloc(i32) nounwind