From: David Majnemer Date: Sat, 25 Jun 2016 07:37:30 +0000 (+0000) Subject: [InstSimplify] Replace calls to null with undef X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=35fad14a3189fb7ab2ae6e437335729f974d3c12;p=llvm [InstSimplify] Replace calls to null with undef Calling null is undefined behavior, we can simplify the resulting value to undef. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273777 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index 746b7409dfe..b52ffeebe61 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -4009,7 +4009,8 @@ static Value *SimplifyCall(Value *V, IterTy ArgBegin, IterTy ArgEnd, FunctionType *FTy = cast(Ty); // call undef -> undef - if (isa(V)) + // call null -> undef + if (isa(V) || isa(V)) return UndefValue::get(FTy->getReturnType()); Function *F = dyn_cast(V); diff --git a/test/Transforms/InstSimplify/call.ll b/test/Transforms/InstSimplify/call.ll index b360ecb8434..814f1f21aca 100644 --- a/test/Transforms/InstSimplify/call.ll +++ b/test/Transforms/InstSimplify/call.ll @@ -187,4 +187,20 @@ cast.end: ; preds = %cast.notnull, %entr ; CHECK: br i1 %cmp, label %cast.end, label %cast.notnull } +define i32 @call_null() { +entry: + %call = call i32 null() + ret i32 %call +} +; CHECK-LABEL: define i32 @call_null( +; CHECK: ret i32 undef + +define i32 @call_undef() { +entry: + %call = call i32 undef() + ret i32 %call +} +; CHECK-LABEL: define i32 @call_undef( +; CHECK: ret i32 undef + declare noalias i8* @malloc(i64)