http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35964 Index: gcc-4.3.0/gcc/regrename.c =================================================================== --- gcc-4.3.0.orig/gcc/regrename.c 2008-05-28 08:31:15.000000000 -0700 +++ gcc-4.3.0/gcc/regrename.c 2008-05-28 08:34:00.000000000 -0700 @@ -782,6 +782,10 @@ || (predicated && recog_data.operand_type[i] == OP_OUT)) recog_data.operand_type[i] = OP_INOUT; } + /* Unshare dup_loc RTL */ + for (i = 0; i < recog_data.n_dups; i++) + *recog_data.dup_loc[i] = copy_rtx(*recog_data.dup_loc[i]); + /* Step 1: Close chains for which we have overlapping reads. */ for (i = 0; i < n_ops; i++) @@ -813,7 +817,7 @@ OP_IN, 0); for (i = 0; i < recog_data.n_dups; i++) - *recog_data.dup_loc[i] = copy_rtx (old_dups[i]); + *recog_data.dup_loc[i] = old_dups[i]; for (i = 0; i < n_ops; i++) *recog_data.operand_loc[i] = old_operands[i]; if (recog_data.n_dups)