; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes ; RUN: opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-disable=false -attributor-max-iterations-verify -attributor-max-iterations=2 < %s | FileCheck %s ; PR5596 ; IPSCCP should propagate the 0 argument, eliminate the switch, and propagate ; the result. ; FIXME: Remove obsolete calls/instructions define i32 @main() noreturn nounwind { ; CHECK-LABEL: define {{[^@]+}}@main() ; CHECK-NEXT: entry: ; CHECK-NEXT: [[CALL2:%.*]] = tail call i32 @wwrite(i64 0) ; CHECK-NEXT: ret i32 123 ; entry: %call2 = tail call i32 @wwrite(i64 0) nounwind ret i32 %call2 } define internal i32 @wwrite(i64 %i) nounwind readnone { ; CHECK-LABEL: define {{[^@]+}}@wwrite ; CHECK-SAME: (i64 [[I:%.*]]) ; CHECK-NEXT: entry: ; CHECK-NEXT: switch i64 0, label [[SW_DEFAULT:%.*]] [ ; CHECK-NEXT: i64 3, label [[RETURN:%.*]] ; CHECK-NEXT: i64 10, label [[RETURN]] ; CHECK-NEXT: ] ; CHECK: sw.default: ; CHECK-NEXT: ret i32 123 ; CHECK: return: ; CHECK-NEXT: unreachable ; entry: switch i64 %i, label %sw.default [ i64 3, label %return i64 10, label %return ] sw.default: ret i32 123 return: ret i32 0 }