[see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55030 comments 11 and 13 ] gcc/ 2013-05-26 Mikael Pettersson PR middle-end/55030 Revert: 2012-11-26 Hans-Peter Nilsson PR middle-end/55030 * dse.c (scan_insn): Where checking for blocking insns, use volatile_insn_p instead of manual check for volatile ASM. * cselib.c (cselib_process_insn): Ditto. --- gcc-4.8.0/gcc/cselib.c.~1~ 2013-01-10 21:38:27.000000000 +0100 +++ gcc-4.8.0/gcc/cselib.c 2013-05-26 14:32:14.071461498 +0200 @@ -2623,12 +2623,13 @@ cselib_process_insn (rtx insn) cselib_current_insn = insn; - /* Forget everything at a CODE_LABEL, a volatile insn, or a setjmp. */ + /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */ if ((LABEL_P (insn) || (CALL_P (insn) && find_reg_note (insn, REG_SETJMP, NULL)) || (NONJUMP_INSN_P (insn) - && volatile_insn_p (PATTERN (insn)))) + && GET_CODE (PATTERN (insn)) == ASM_OPERANDS + && MEM_VOLATILE_P (PATTERN (insn)))) && !cselib_preserve_constants) { cselib_reset_table (next_uid); --- gcc-4.8.0/gcc/dse.c.~1~ 2013-03-09 23:04:15.000000000 +0100 +++ gcc-4.8.0/gcc/dse.c 2013-05-26 14:32:14.071461498 +0200 @@ -2518,7 +2518,8 @@ scan_insn (bb_info_t bb_info, rtx insn) /* Cselib clears the table for this case, so we have to essentially do the same. */ if (NONJUMP_INSN_P (insn) - && volatile_insn_p (PATTERN (insn))) + && GET_CODE (PATTERN (insn)) == ASM_OPERANDS + && MEM_VOLATILE_P (PATTERN (insn))) { add_wild_read (bb_info); insn_info->cannot_delete = true;