Add a prepare_pch_save target hook
Richard Sandiford
rdsandiford@googlemail.com
Mon Dec 5 09:14:00 GMT 2011
Mike Stump <mikestump@comcast.net> writes:
> On Dec 4, 2011, at 4:02 AM, Richard Sandiford <rdsandiford@googlemail.com> wrote:
>> A while back I added the target_globals structure, to allow a backend
>> to switch between two very different ISA modes without paying the full
>> target_reinit penalty each time. This made a huge difference to compile
>> time, but had a drawback: the target_globals structure contained both
>> GGC and non-GGC data. This meant that secondary target_globals structures
>> like mips16_globals couldn't be saved correctly in PCH files.
>
>> + /* We are called in a context where the current MIPS16 vs. non-MIPS16
>> + setting should be irrelevant. The question then is: which setting
>> + makes most sense at load time?
>> +
>> + The PCH is loaded before the first token is read. We should never
>> + have switched into MIPS16 mode by that point,
>
> If there is any way to say:
>
> #pragma mips16
>
> to globally switch state into mips16 mode, then I believe the patch is
> wrong.
The global switching of state happens when we start to compile a function,
which means we must have seen a C token. The target_globals state is
non-MIPS16 up until then, even if -mips16 is passed on the command line,
or if the command line is changed by pragmas.
Besides, I think:
#pragma GCC optimize ...X...
#include "foo.h"
breaks the PCH contract if X is incompatible with the flags used at
the beginning of the PCH compilation.
Richard
More information about the Gcc-patches
mailing list