On Tue, Mar 6, 2018 at 2:28 PM, Richard Biener
> On Tue, Mar 6, 2018 at 1:00 PM, Prathamesh Kulkarni
> <prathamesh.kulka...@linaro.org> wrote:
>> For the following test-case,
>> int a;
>> 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
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
flag = 2;
flag = 1;
Of course this may only be useful for LTO.
> ipa-reference doesn't compute must-def, only may-def and may-use IIRC.