http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55845



Uros Bizjak <ubizjak at gmail dot com> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |bonzini at gnu dot org



--- Comment #9 from Uros Bizjak <ubizjak at gmail dot com> 2013-01-06 13:23:54 
UTC ---

It is try_head_merge_bb that moves unspec_volatile to the wrong place. However,

the core of the problem lies in can_move_insns_accross, which does not

special-case unspec_volatiles.



The untested df-problems.c patch that fixes the failing testcase:



--cut here--

Index: df-problems.c

===================================================================

--- df-problems.c       (revision 194945)

+++ df-problems.c       (working copy)

@@ -3916,6 +3916,10 @@ can_move_insns_across (rtx from, rtx to, rtx acros

        break;

       if (NONDEBUG_INSN_P (insn))

        {

+         /* Do not move unspec_volatile insns.  */

+         if (GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE)

+           break;

+

          if (may_trap_or_fault_p (PATTERN (insn))

              && (trapping_insns_in_across || other_branch_live != NULL))

            break;

--cut here--



Adding Paolo B. to CC.

Reply via email to