Fix test fails on powerpc-darwin.
authorIain Sandoe <iain@sandoe.co.uk>
Sun, 21 Apr 2019 08:25:44 +0000 (08:25 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Sun, 21 Apr 2019 08:25:44 +0000 (08:25 +0000)
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.

gcc/

2019-04-21  Iain Sandoe  <iain@sandoe.co.uk>

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

From-SVN: r270480

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 493aaeb84b65187e11ff3bbde092648352c833f6..8b09eecfbfe725e2a60561d5083425457c6677c1 100644 (file)
@@ -1,3 +1,9 @@
+2019-04-21  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/rs6000/rs6000.md (group_end_nop): Emit insn register
+       names using operand format, rather than hard-wired.
+       (speculation_barrier): Likewise.
+
 2019-04-19  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR tree-optimization/88055
index 6feaa10c15573425a0656b28fd8ba23d882ec293..ad80592765d047db68d61e64bb48a7ec0cf48ddd 100644 (file)
   [(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";
+})
 \f
 ;; Define the subtract-one-and-jump insns, starting with the template
 ;; so loop.c knows what to generate.