PR target/55929
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jan 2013 19:49:17 +0000 (19:49 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jan 2013 19:49:17 +0000 (19:49 +0000)
* config/i386/i386.md (xbegin): Use %eax as a temporary register.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195094 138bc75d-0d04-0410-961f-82ee72b054a4

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

index dc65d88..17554bd 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 95a52cd..8fd1f91 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;
 })