> This exposed a couple of similar bugs in cse.c and postreload-gcse.c: the > code was effectively treating a basic block with a single, abnormal > incoming edge as if the edge was normal. I've installed the following refined fix, after testing on i586-suse-linux and sparc-sun-solaris2.10. Most EDGE_ABNORMAL edges can very likely be treated normally here, for example EH edges when call-saved registers are considered. The only really problematic ones are EDGE_ABNORMAL_CALL edges when there is a non-local label in the function, because even call-saved registers are not guaranteed to be preserved in this case. 2011-06-02 Eric Botcazou * cse.c (cse_find_path): Refine change to exclude EDGE_ABNORMAL_CALL edges only, when there is a non-local label in the function. * postreload-gcse.c (bb_has_well_behaved_predecessors): Likewise. -- Eric Botcazou