> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103211 > > --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- > Optimized dump differs for couple of functions in the same way: > > diff -u good bad > --- good 2021-11-12 17:42:36.995947103 +0100 > +++ bad 2021-11-12 17:41:56.728194961 +0100 > @@ -38,7 +38,6 @@ > > ;; Function abrt (abrt_, funcdef_no=10, decl_uid=4338, cgraph_uid=11, > symbol_order=10) (executed once) > > -Removing basic block 5 > __attribute__((fn spec (". "))) > void abrt () > { > @@ -350,7 +349,6 @@ > void setfm (integer(kind=4) * ipar) > { > <bb 2> [local count: 1073741824]: > - master.0.setfm (0, ipar_2(D)); [tail call] > return; > > } > > maybe the fnspec for master.0.setfm is bad? > > __attribute__((fn spec (". R w "))) > void master.0.setfm (integer(kind=8) __entry, integer(kind=4) * ipar) > { It looks more like pure/const discovery. You should be able to use -fdump-ipa-all -fdump-tree-all and grep "function found to be" either pure or const.
What is body of master.0.setfm. Does it look like it does nothing? "R" in fnspec means that arg 0 is only read directly and not derefernced. "w" means that it arg 1 is not escaping. Honza