diff options
| -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 +}  | 

