On Tue, Mar 6, 2018 at 2:28 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Tue, Mar 6, 2018 at 1:00 PM, Prathamesh Kulkarni > <prathamesh.kulka...@linaro.org> wrote: >> Hi, >> For the following test-case, >> >> int a; >> >> __attribute__((noinline)) >> static void foo() >> { >> a = 3; >> } >> >> int main() >> { >> a = 4; >> foo (); >> return a; >> } >> >> I assume it's safe to remove "a = 4" since 'a' would be overwritten >> by call to foo ? >> IIUC, ipa-reference pass does mod/ref analysis to compute side-effects >> of function call, >> so could we perhaps use ipa_reference_get_not_written_global() in dse >> pass to check if a global variable will be killed on call to a >> function ? If not, I suppose we could write a similar ipa pass that >> computes the set of killed global variables per function but I am not >> sure if that's the correct approach. > > Do you think the situation happens often enough to make this worthwhile? There is one probably more useful case. Program may use global flags controlling how it does (heavy) computation. Such flags are only set couple of times in execution time. It would be useful if we can (IPA) propagate flags into computation heavy functions by versioning (if necessary). For example:
int flag = 1; void foo () { //heavy computation wrto to flag } void main() { flag = 2; foo(); flag = 1; foo(); } Of course this may only be useful for LTO. Thanks, bin > > ipa-reference doesn't compute must-def, only may-def and may-use IIRC. > > Richard. > >> Thanks, >> Prathamesh