[aarch64-port-dev ] Fix a few problems in pipeline scheduling show by overnight tests

Edward Nevill edward.nevill at linaro.org
Mon Nov 3 14:56:13 UTC 2014


Hi,

The following patch fixes a couple of problems in the pipeline scheduling show up by the overnight tests.

- bytes_reverse_long needs an IRegL, not an iRegI
- overflowMulX_reg_branch needs pipe_serial otherwise it get confused and reschedules instructions across the branch.

I have also changed the 'iRegI src' in all bytes_reverse to 'iRegIorL2I src' for consistency.

All the best,
Ed.

--- CUT HERE ---
# HG changeset patch
# User Edward Nevill <ed at camswl.com>
# Date 1415026442 0
#      Mon Nov 03 14:54:02 2014 +0000
# Node ID 71547f5343652fa9899a772cae98138d950f0864
# Parent  788f964d727f063813c7a4d8c4b7254c33b5eeb1
Fix a few pipeline scheduling problems shown by overnight tests

diff -r 788f964d727f -r 71547f534365 src/cpu/aarch64/vm/aarch64.ad
--- a/src/cpu/aarch64/vm/aarch64.ad	Fri Oct 31 21:04:37 2014 +0000
+++ b/src/cpu/aarch64/vm/aarch64.ad	Mon Nov 03 14:54:02 2014 +0000
@@ -6229,7 +6229,7 @@
 // ============================================================================
 // BSWAP Instructions
 
-instruct bytes_reverse_int(iRegINoSp dst, iRegI src) %{
+instruct bytes_reverse_int(iRegINoSp dst, iRegIorL2I src) %{
   match(Set dst (ReverseBytesI src));
 
   ins_cost(INSN_COST);
@@ -6242,7 +6242,7 @@
   ins_pipe(ialu_reg);
 %}
 
-instruct bytes_reverse_long(iRegLNoSp dst, iRegI src) %{
+instruct bytes_reverse_long(iRegLNoSp dst, iRegL src) %{
   match(Set dst (ReverseBytesL src));
 
   ins_cost(INSN_COST);
@@ -6255,7 +6255,7 @@
   ins_pipe(ialu_reg);
 %}
 
-instruct bytes_reverse_unsigned_short(iRegINoSp dst, iRegI src) %{
+instruct bytes_reverse_unsigned_short(iRegINoSp dst, iRegIorL2I src) %{
   match(Set dst (ReverseBytesUS src));
 
   ins_cost(INSN_COST);
@@ -6268,7 +6268,7 @@
   ins_pipe(ialu_reg);
 %}
 
-instruct bytes_reverse_short(iRegINoSp dst, iRegI src) %{
+instruct bytes_reverse_short(iRegINoSp dst, iRegIorL2I src) %{
   match(Set dst (ReverseBytesS src));
 
   ins_cost(INSN_COST);
@@ -10955,7 +10955,7 @@
     __ br(cond == Assembler::VS ? Assembler::NE : Assembler::EQ, *L);
   %}
 
-  ins_pipe(pipe_slow);
+  ins_pipe(pipe_serial);
 %}
 
 instruct overflowMulL_reg(rFlagsReg cr, iRegL op1, iRegL op2)
@@ -11002,7 +11002,7 @@
     __ br(cond == Assembler::VS ? Assembler::NE : Assembler::EQ, *L);
   %}
 
-  ins_pipe(pipe_slow);
+  ins_pipe(pipe_serial);
 %}
 
 // ============================================================================
--- CUT HERE ---




More information about the aarch64-port-dev mailing list