Finding a relevant place for a custom GCC pass
Marc Glisse
marc.glisse@inria.fr
Mon Jan 6 06:24:00 GMT 2014
On Sun, 5 Jan 2014, Sandeep K Chaudhary wrote:
> Hi guys,
>
> I want to write a pass which can find the calculations performed on
> the right hand side of each statement. In the below example -
>
> VAR1 = 1;
> VAR1++;
> VAR1 = VAR1 + 5;
>
> I want to be able to capture the equivalent statements i.e.
>
> VAR1 = 1;
> VAR1 = 2;
> VAR1 = 7;
>
> To achieve this, I dumped various intermediate files using
> "-fdump-tree-all'. I looked at all of them manually and found that
> either the statements are non-evaluated (during initial stages) or
> they are completely optimized, hence losing the intermediate
> assignment calculations (during later stages). There is no pass which
> generates dumps related to the intermediate assignment calculations.
>
> I am not able to understand where I should aim to place my pass in
> order to achieve the above mentioned functionality. Initially, I had
> thought of writing IPA pass but I looked at 'copyprop' and 'forwprop'
> dumps and saw that everything is optimized to the last statement. I am
> not able to understand how a pass should be placed between GIMPLE
> stage and later stages so that intermediate calculations such as the
> ones mentioned above in the example, can be captured. Please provide
> suggestions and help regarding this.
Short answer: you can't.
You can either have your passe before ccp, and duplicate the functionality
of ccp, or you can hack the ccp pass to insert your code in it, but I
doubt there is a suitable plugin hook for that, so you may have to edit
gcc's source code directly.
If you compile with -g and look at debug statements, the information is
not completely lost after the pass that optimizes this to just VAR1 = 7,
but it still wouldn't be convenient to use that for your purpose.
--
Marc Glisse
More information about the Gcc-help
mailing list