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