On 02/03/2017 01:03 PM, Walter Lee wrote:
Hi,

In looking at PR 79365 I found that the problem is actually in the
combiner.  The combiner sometimes applies scalar optimizations to
vector context where they are invalid.  i.e. (a > b) >> 1 can optimize
to 0 if ">" is a scalar op but not if it is a vector op.  The reason
this shows up on tile* and not other architectures is because tile*
uses the same register file for both scalars and vectors, so the
combiner sees these mixed mode expressions on tile* that would go
through memory on other architectures.

I have found two places where this improper optimization occurs.
Patch below.

Ok to commit?
Walter, now that the trunk is open, it's a good time to address this issue.

Thanks,

Walter

diff --git a/gcc/combine.c b/gcc/combine.c
index 28133ff..8f2615e 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -7267,6 +7267,7 @@ expand_field_assignment (const_rtx x)
        else if (GET_CODE (SET_DEST (x)) == SUBREG
             /* We need SUBREGs to compute nonzero_bits properly.  */
             && nonzero_sign_valid
+           && !VECTOR_MODE_P (GET_MODE (SET_DEST (x)))
             && (((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
               + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
             == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
@@ -13030,6 +13031,7 @@ record_dead_and_set_regs_1 (rtx dest, const_rtx setter, void *data)
      record_value_for_reg (dest, record_dead_insn, SET_SRC (setter));
        else if (GET_CODE (setter) == SET
             && GET_CODE (SET_DEST (setter)) == SUBREG
+           && !VECTOR_MODE_P (GET_MODE (SET_DEST (setter)))
             && SUBREG_REG (SET_DEST (setter)) == dest
             && GET_MODE_PRECISION (GET_MODE (dest)) <= BITS_PER_WORD
             && subreg_lowpart_p (SET_DEST (setter)))
Segher's comments still apply.  Specifically:

Use SCALAR_INT_MODE_P rather than !VECTOR_MODE_P and please add testcases to the testsuite. It is fine to put the testcases in gcc.target if they are tile specific.

Please repost after making those changes.

Thanks,
Jeff

Reply via email to