RFC: Patch for switch elimination (PR 54742)

Jeff Law law@redhat.com
Tue Aug 12 18:31:00 GMT 2014


On 08/12/14 11:46, Steve Ellcey wrote:
> After talking to Jeff Law at the GCC Cauldron I have updated my switch
> shortcut plugin pass to try and address this optimization in the hopes of
> getting it added to GCC as a static pass.  I fixed the code to build with
> the various C++ changes that have been happening in GCC but the current
> version I have included in this email is not working yet.  When I run it
> on coremark I get errors like:
>
> core_state.c: In function 'core_bench_state':
> core_state.c:43:8: error: size of loop 16 should be 13, not 5
>   ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
>          ^
> core_state.c:43:8: error: bb 15 does not belong to loop 16
> core_state.c:43:8: error: bb 113 does not belong to loop 16
> core_state.c:43:8: error: bb 118 does not belong to loop 16
> core_state.c:43:8: error: bb 117 does not belong to loop 16
> (etc)
>
> Apparently there have been some changes to the loop information that
> is built since GCC 4.9.  I had hoped that adding a call to fix_loop_structure
> after recalculating the dominance information would fix this but it didn't.
>
> Does anyone have any ideas on how to fix up the loop information that my
> optimization has messed as it duplicates blocks?  I tried adding a call
> 'loop_optimizer_init (LOOPS_NORMAL)' before the fix_loop_structure but that
> did not seem to have any affect.
Try setting the header & latch fields for the loop structure to NULL, 
then call loops_set_state (LOOPS_NEED_FIXUP).

Jeff



More information about the Gcc-patches mailing list