diff mbox series

[powerpc] Fix speculation barrier and group nop to emit target register names.

Message ID 8E1C034C-7935-4D83-810C-08A600310FB0@sandoe.co.uk
State New
Headers show
Series [powerpc] Fix speculation barrier and group nop to emit target register names. | expand

Commit Message

Iain Sandoe Jan. 12, 2019, 1:28 p.m. UTC
Hi,

The current implementation of “speculation_barrier” and “group_end_nop” insns emit hard-wired register names which causes tests using them to fail on Darwin, at least, which uses “rNN” instead of “NN”.

The patch makes the register names for these insns use the operand output mechanism to substitute the appropriate variant when needed.

tested on powerpc-darwin9 and powerpc64-linux.

OK for trunk?
Iain

gcc/

	* config/rs6000/rs6000.md (group_end_nop): Emit
	insn register names using operand format, rather than
	hard-wired.  (speculation_barrier): Likewise.

Comments

Segher Boessenkool Jan. 18, 2019, 11:09 p.m. UTC | #1
Hi Iain,

On Sat, Jan 12, 2019 at 01:28:05PM +0000, Iain Sandoe wrote:
> The current implementation of “speculation_barrier” and “group_end_nop” insns emit hard-wired register names which causes tests using them to fail on Darwin, at least, which uses “rNN” instead of “NN”.
> 
> The patch makes the register names for these insns use the operand output mechanism to substitute the appropriate variant when needed.

This is fine for trunk and all backports you may need/want.

Thanks,


Segher


> 	* config/rs6000/rs6000.md (group_end_nop): Emit
> 	insn register names using operand format, rather than
> 	hard-wired.  (speculation_barrier): Likewise.

[ Get your mail client not to mess up changelogs? ;-) ]
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 56364e0..86badc2 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -12494,15 +12494,18 @@ 
   [(unspec [(const_int 0)] UNSPEC_GRP_END_NOP)]
   ""
 {
-  if (rs6000_tune == PROCESSOR_POWER6)
-    return "ori 1,1,0";
-  return "ori 2,2,0";
+  operands[0] = gen_rtx_REG (Pmode,
+			     rs6000_tune == PROCESSOR_POWER6 ? 1 : 2);
+  return "ori %0,%0,0";
 })
 
 (define_insn "speculation_barrier"
   [(unspec_volatile:BLK [(const_int 0)] UNSPECV_SPEC_BARRIER)]
   ""
-  "ori 31,31,0")
+{
+  operands[0] = gen_rtx_REG (Pmode, 31);
+  return "ori %0,%0,0";
+})
 
 ;; Define the subtract-one-and-jump insns, starting with the template
 ;; so loop.c knows what to generate.