re PR target/67967 (ICE in i386_pe_seh_unwind_emit)
authorUros Bizjak <ubizjak@gmail.com>
Wed, 14 Oct 2015 21:18:19 +0000 (23:18 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 14 Oct 2015 21:18:19 +0000 (23:18 +0200)
PR target/67967
* config/i386/i386.c (ix86_emit_save_reg_using_mov): Do not add
REG_CFA_EXPRESSION to aligned SSE stores.

From-SVN: r228826

gcc/ChangeLog
gcc/config/i386/i386.c

index 7c64fa8e92e5e6acc2283ba136ae39eb93011a4e..8b6ed9a040e55be33d1c9d1a46f11e6a5a2acab1 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-14  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/67967
+       * config/i386/i386.c (ix86_emit_save_reg_using_mov): Do not add
+       REG_CFA_EXPRESSION to aligned SSE stores.
+
 2015-10-14  Jeff Law  <law@redhat.com>
 
        * tree-ssa-threadupdate.c (thread_through_all_blocks): Bump
index a2314e75ee67f143d0fdb7bed9c068a3bdd63c0b..ebe2b0aa8abbdf2eb243b52865237a342b3ac706 100644 (file)
@@ -11612,6 +11612,7 @@ ix86_emit_save_reg_using_mov (machine_mode mode, unsigned int regno,
 {
   struct machine_function *m = cfun->machine;
   rtx reg = gen_rtx_REG (mode, regno);
+  rtx unspec = NULL_RTX;
   rtx mem, addr, base, insn;
   unsigned int align;
 
@@ -11626,13 +11627,9 @@ ix86_emit_save_reg_using_mov (machine_mode mode, unsigned int regno,
      In case INCOMING_STACK_BOUNDARY is misaligned, we have
      to emit unaligned store.  */
   if (mode == V4SFmode && align < 128)
-    {
-      rtx unspec = gen_rtx_UNSPEC (mode, gen_rtvec (1, reg), UNSPEC_STOREU);
-      insn = emit_insn (gen_rtx_SET (mem, unspec));
-    }
-  else
-    insn = emit_insn (gen_rtx_SET (mem, reg));
+    unspec = gen_rtx_UNSPEC (mode, gen_rtvec (1, reg), UNSPEC_STOREU);
 
+  insn = emit_insn (gen_rtx_SET (mem, unspec ? unspec : reg));
   RTX_FRAME_RELATED_P (insn) = 1;
 
   base = addr;
@@ -11679,7 +11676,7 @@ ix86_emit_save_reg_using_mov (machine_mode mode, unsigned int regno,
       mem = gen_rtx_MEM (mode, addr);
       add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (mem, reg));
     }
-  else
+  else if (unspec)
     add_reg_note (insn, REG_CFA_EXPRESSION, gen_rtx_SET (mem, reg));
 }