This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: eliminate dead stores across functions
- From: William Cohen <wcohen at redhat dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>, Prathamesh Kulkarni <prathamesh dot kulkarni at linaro dot org>
- Cc: GCC Development <gcc at gcc dot gnu dot org>
- Date: Tue, 6 Mar 2018 11:49:41 -0500
- Subject: Re: eliminate dead stores across functions
- Authentication-results: sourceware.org; auth=none
- References: <CAAgBjMkcuch04W94DB06Vv7oYZQPLk2VRN5ALd_0Vt=CmzZ=-w@mail.gmail.com> <CAFiYyc0ZwKqyfX2hyFS+s7tB=gaEJ5OS1zq6BciDFLnn=ynM3w@mail.gmail.com>
On 03/06/2018 09:28 AM, Richard Biener wrote:
> On Tue, Mar 6, 2018 at 1:00 PM, Prathamesh Kulkarni
> <prathamesh.kulkarni@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?
>
> ipa-reference doesn't compute must-def, only may-def and may-use IIRC.
>
> Richard.
>
>> Thanks,
>> Prathamesh
This dead write optimization sounds similar to "DeadSpy: a tool to pinpoint program inefficiencies" by Milind Chabbi and John Mellor-Crummey of Rice University:
https://dl.acm.org/citation.cfm?id=2259033
The abstract says there were numerous dead writes in the SPEC 2006 gcc benchmark and eliminating those provided average 15% improvement in performance.
-Will