]> gcc.gnu.org Git - gcc.git/commitdiff
re PR target/55929 (lra-constraints-ICE while xg++ compile libitm with -Os)
authorUros Bizjak <uros@gcc.gnu.org>
Thu, 10 Jan 2013 19:49:17 +0000 (20:49 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 10 Jan 2013 19:49:17 +0000 (20:49 +0100)
PR target/55929
* config/i386/i386.md (xbegin): Use %eax as a temporary register.

From-SVN: r195094

gcc/ChangeLog
gcc/config/i386/i386.md

index dc65d88fea3d6c26685124e22d91711dd26a12e3..17554bde8da5da6f1491168f12b0b8ca46a8eb20 100644 (file)
@@ -5,8 +5,7 @@
 
 2013-01-10  Richard Biener  <rguenther@suse.de>
 
-       * builtins.c (expand_builtin_init_trampoline): Use
-       set_mem_attributes.
+       * builtins.c (expand_builtin_init_trampoline): Use set_mem_attributes.
 
 2013-01-10  Richard Biener  <rguenther@suse.de>
 
@@ -51,7 +50,8 @@
 2013-01-09  Jan Hubicka  <jh@suse.cz>
 
        PR lto/45375
-       * ipa-inline.c (ipa_inline): Remove extern inlines and virtual functions.
+       * ipa-inline.c (ipa_inline): Remove extern inlines and virtual
+       functions.
        * cgraphclones.c (cgraph_clone_node): Cpoy also LTO file data.
 
 2013-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
index 95a52cdd1a7981013f055332c0e7f00bee1a4d39..8fd1f915d90c6415ec6805934d3f3df224b593fa 100644 (file)
 
 (define_expand "xbegin"
   [(set (match_operand:SI 0 "register_operand")
-       (unspec_volatile:SI [(match_dup 1)] UNSPECV_XBEGIN))]
+       (unspec_volatile:SI [(const_int 0)] UNSPECV_XBEGIN))]
   "TARGET_RTM"
 {
   rtx label = gen_label_rtx ();
 
-  operands[1] = force_reg (SImode, constm1_rtx);
+  /* xbegin is emitted as jump_insn, so reload won't be able
+     to reload its operand.  Force the value into AX hard register.  */
+  rtx ax_reg = gen_rtx_REG (SImode, AX_REG);
+  emit_move_insn (ax_reg, constm1_rtx);
 
-  emit_jump_insn (gen_xbegin_1 (operands[1], label));
+  emit_jump_insn (gen_xbegin_1 (ax_reg, label));
 
   emit_label (label);
   LABEL_NUSES (label) = 1;
 
-  emit_move_insn (operands[0], operands[1]);
+  emit_move_insn (operands[0], ax_reg);
 
   DONE;
 })
This page took 0.085056 seconds and 5 git commands to generate.