diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-06-25 07:37:30 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-06-25 07:37:30 +0000 |
| commit | bb53d23ef8127b0be819b730e5094bd1d4b8e515 (patch) | |
| tree | 625378805831c8775357f4cc7ff0f2eb834a7511 | |
| parent | 1fea77c6fc6ab0d5557078656be6c54eba769b42 (diff) | |
| download | bcm5719-llvm-bb53d23ef8127b0be819b730e5094bd1d4b8e515.tar.gz bcm5719-llvm-bb53d23ef8127b0be819b730e5094bd1d4b8e515.zip | |
[InstSimplify] Replace calls to null with undef
Calling null is undefined behavior, we can simplify the resulting value
to undef.
llvm-svn: 273777
| -rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 3 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/call.ll | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 746b7409dfe..b52ffeebe61 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -4009,7 +4009,8 @@ static Value *SimplifyCall(Value *V, IterTy ArgBegin, IterTy ArgEnd, FunctionType *FTy = cast<FunctionType>(Ty); // call undef -> undef - if (isa<UndefValue>(V)) + // call null -> undef + if (isa<UndefValue>(V) || isa<ConstantPointerNull>(V)) return UndefValue::get(FTy->getReturnType()); Function *F = dyn_cast<Function>(V); diff --git a/llvm/test/Transforms/InstSimplify/call.ll b/llvm/test/Transforms/InstSimplify/call.ll index b360ecb8434..814f1f21aca 100644 --- a/llvm/test/Transforms/InstSimplify/call.ll +++ b/llvm/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) |

