; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -passes=instcombine -S | FileCheck %s declare void @c(i32 noundef) declare void @d(ptr dereferenceable(1)) declare void @e(i32) declare void @f(ptr) define void @test1() { ; CHECK-LABEL: @test1( ; CHECK-NEXT: call void @c(i32 undef) ; CHECK-NEXT: ret void ; call void @c(i32 undef) ret void } define void @test2() { ; CHECK-LABEL: @test2( ; CHECK-NEXT: call void @c(i32 poison) ; CHECK-NEXT: ret void ; call void @c(i32 poison) ret void } define void @test3() { ; CHECK-LABEL: @test3( ; CHECK-NEXT: call void @e(i32 noundef undef) ; CHECK-NEXT: ret void ; call void @e(i32 noundef undef) ret void } define void @test4() { ; CHECK-LABEL: @test4( ; CHECK-NEXT: call void @e(i32 noundef poison) ; CHECK-NEXT: ret void ; call void @e(i32 noundef poison) ret void } define void @test5() { ; CHECK-LABEL: @test5( ; CHECK-NEXT: call void @d(ptr undef) ; CHECK-NEXT: ret void ; call void @d(ptr undef) ret void } define void @test6() { ; CHECK-LABEL: @test6( ; CHECK-NEXT: call void @d(ptr poison) ; CHECK-NEXT: ret void ; call void @d(ptr poison) ret void } define void @test7() { ; CHECK-LABEL: @test7( ; CHECK-NEXT: call void @f(ptr dereferenceable(1) undef) ; CHECK-NEXT: ret void ; call void @f(ptr dereferenceable(1) undef) ret void } define void @test8() { ; CHECK-LABEL: @test8( ; CHECK-NEXT: call void @f(ptr dereferenceable(1) poison) ; CHECK-NEXT: ret void ; call void @f(ptr dereferenceable(1) poison) ret void } define void @test_mismatched_call() { ; CHECK-LABEL: @test_mismatched_call( ; CHECK-NEXT: call void @e(i8 poison) ; CHECK-NEXT: ret void ; call void @e(i8 poison) ret void }