1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes 2; RUN: opt -attributor -enable-new-pm=0 -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=1 -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=1 -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; IS__TUNIT____: Function Attrs: nofree noreturn nosync nounwind readnone willreturn 15; IS__TUNIT____-LABEL: define {{[^@]+}}@main 16; IS__TUNIT____-SAME: () [[ATTR0:#.*]] { 17; IS__TUNIT____-NEXT: entry: 18; IS__TUNIT____-NEXT: ret i32 123 19; 20; IS__CGSCC____: Function Attrs: nofree norecurse noreturn nosync nounwind readnone willreturn 21; IS__CGSCC____-LABEL: define {{[^@]+}}@main 22; IS__CGSCC____-SAME: () [[ATTR0:#.*]] { 23; IS__CGSCC____-NEXT: entry: 24; IS__CGSCC____-NEXT: ret i32 123 25; 26entry: 27 %call2 = tail call i32 @wwrite(i64 0) nounwind 28 ret i32 %call2 29} 30 31define internal i32 @wwrite(i64 %i) nounwind readnone { 32; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn 33; IS__CGSCC____-LABEL: define {{[^@]+}}@wwrite 34; IS__CGSCC____-SAME: () [[ATTR1:#.*]] { 35; IS__CGSCC____-NEXT: entry: 36; IS__CGSCC____-NEXT: switch i64 0, label [[SW_DEFAULT:%.*]] [ 37; IS__CGSCC____-NEXT: i64 3, label [[RETURN:%.*]] 38; IS__CGSCC____-NEXT: i64 10, label [[RETURN]] 39; IS__CGSCC____-NEXT: ] 40; IS__CGSCC____: sw.default: 41; IS__CGSCC____-NEXT: ret i32 undef 42; IS__CGSCC____: return: 43; IS__CGSCC____-NEXT: unreachable 44; 45entry: 46 switch i64 %i, label %sw.default [ 47 i64 3, label %return 48 i64 10, label %return 49 ] 50 51sw.default: 52 ret i32 123 53 54return: 55 ret i32 0 56} 57