instcombine shouldn't delete all null checks for mallocs.

This fixes PR5130.

llvm-svn: 83290
This commit is contained in:
Chris Lattner 2009-10-05 02:47:47 +00:00
parent 2c0a4fb325
commit 513b66b237
2 changed files with 21 additions and 2 deletions

View File

@ -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()));

View File

@ -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
}