No magic bullet for the insn-recog.c testcase I'm looking at but quite obvious and should save half of the canon_true_dependence calls for blocks that end up non-transparent.
Now one of the main weakness of compute_transp is that we call it for all expressions but for the MEM case it's certainly not interesting to know whether it is transparent in _all_ blocks but just a subset (dependent on the actual transform we do - either where it's available or where its anticipated). Committed as obvious. Richard. 2014-02-12 Richard Biener <rguent...@suse.de> * gcse.c (compute_transp): break from loop over canon_modify_mem_list when we found a dependence. Index: gcc/gcse.c =================================================================== *** gcc/gcse.c (revision 207718) --- gcc/gcse.c (working copy) *************** compute_transp (const_rtx x, int indx, s *** 1735,1741 **** if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, x, x_addr)) ! bitmap_clear_bit (bmap[bb_index], indx); } } } --- 1735,1744 ---- if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, x, x_addr)) ! { ! bitmap_clear_bit (bmap[bb_index], indx); ! break; ! } } } }