diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-05 02:47:47 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-05 02:47:47 +0000 | 
| commit | 463716d5591acf1f20bb28e0faa3ad7a46dab05a (patch) | |
| tree | 5670d236c831b09ccc560c9638d47c1c3e029c0b | |
| parent | ff00c3562afa6eda35004b17f762044233db697c (diff) | |
| download | bcm5719-llvm-463716d5591acf1f20bb28e0faa3ad7a46dab05a.tar.gz bcm5719-llvm-463716d5591acf1f20bb28e0faa3ad7a46dab05a.zip  | |
instcombine shouldn't delete all null checks for mallocs.
This fixes PR5130.
llvm-svn: 83290
| -rw-r--r-- | llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 4 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/badmalloc.ll | 19 | 
2 files changed, 21 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 561527cbb46..fae8629cde6 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -5934,9 +5934,9 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {    // icmp <global/alloca*/null>, <global/alloca*/null> - Global/Stack value    // addresses never equal each other!  We already know that Op0 != Op1. -  if ((isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0) || isMalloc(Op0) || +  if ((isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0) ||          isa<ConstantPointerNull>(Op0)) && -      (isa<GlobalValue>(Op1) || isa<AllocaInst>(Op1) || isMalloc(Op1) || +      (isa<GlobalValue>(Op1) || isa<AllocaInst>(Op1) ||          isa<ConstantPointerNull>(Op1)))      return ReplaceInstUsesWith(I, ConstantInt::get(Type::getInt1Ty(*Context),                                                      !I.isTrueWhenEqual())); diff --git a/llvm/test/Transforms/InstCombine/badmalloc.ll b/llvm/test/Transforms/InstCombine/badmalloc.ll new file mode 100644 index 00000000000..cab23b5af59 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/badmalloc.ll @@ -0,0 +1,19 @@ +; RUN: opt < %s -instcombine -S | FileCheck %s + +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" +target triple = "x86_64-apple-darwin10.0" + +declare noalias i8* @malloc(i64) nounwind +declare void @free(i8*) + +; PR5130 +define i1 @test1() { +  %A = call noalias i8* @malloc(i64 4) nounwind +  %B = icmp eq i8* %A, null + +  call void @free(i8* %A) +  ret i1 %B + +; CHECK: @test1 +; CHECK: ret i1 %B +}  | 

