1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals 2; RUN: opt -attributor -enable-new-pm=0 -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM 3; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM 4; RUN: opt -attributor-cgscc -enable-new-pm=0 -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM 5; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM 6; PR5596 7 8; IPSCCP should propagate the 0 argument, eliminate the switch, and propagate 9; the result. 10 11; FIXME: Remove obsolete calls/instructions 12 13define i32 @main() noreturn nounwind { 14; CHECK: Function Attrs: nofree norecurse noreturn nosync nounwind readnone willreturn 15; CHECK-LABEL: define {{[^@]+}}@main 16; CHECK-SAME: () #[[ATTR0:[0-9]+]] { 17; CHECK-NEXT: entry: 18; CHECK-NEXT: ret i32 123 19; 20entry: 21 %call2 = tail call i32 @wwrite(i64 0) nounwind 22 ret i32 %call2 23} 24 25define internal i32 @wwrite(i64 %i) nounwind readnone { 26; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 27; IS__CGSCC____-LABEL: define {{[^@]+}}@wwrite 28; IS__CGSCC____-SAME: () #[[ATTR1:[0-9]+]] { 29; IS__CGSCC____-NEXT: entry: 30; IS__CGSCC____-NEXT: switch i64 0, label [[SW_DEFAULT:%.*]] [ 31; IS__CGSCC____-NEXT: i64 3, label [[RETURN:%.*]] 32; IS__CGSCC____-NEXT: i64 10, label [[RETURN]] 33; IS__CGSCC____-NEXT: ] 34; IS__CGSCC____: sw.default: 35; IS__CGSCC____-NEXT: ret i32 undef 36; IS__CGSCC____: return: 37; IS__CGSCC____-NEXT: unreachable 38; 39entry: 40 switch i64 %i, label %sw.default [ 41 i64 3, label %return 42 i64 10, label %return 43 ] 44 45sw.default: 46 ret i32 123 47 48return: 49 ret i32 0 50} 51;. 52; IS__TUNIT____: attributes #[[ATTR0]] = { nofree norecurse noreturn nosync nounwind readnone willreturn } 53;. 54; IS__CGSCC____: attributes #[[ATTR0]] = { nofree norecurse noreturn nosync nounwind readnone willreturn } 55; IS__CGSCC____: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn } 56;. 57