diff options
author | sandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-02-24 22:35:18 +0000 |
---|---|---|
committer | sandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-02-24 22:35:18 +0000 |
commit | 6af3f2419ecad247057c281f2bdee5c9785eba59 (patch) | |
tree | ed6039601e79f32a051b87a579fcd18d0f7f780c /gcc/config/nios2 | |
parent | 758b15525c540bf53da336813a4a5269af99b5c0 (diff) | |
download | gcc-6af3f2419ecad247057c281f2bdee5c9785eba59.tar.gz |
2017-02-24 Segher Boessenkool <segher@kernel.crashing.org>
Sandra Loosemore <sandra@codesourcery.com>
gcc/
* config/nios2/nios2.c (nios2_simple_const_p): Returns false if the
argument isn't a CONST_INT.
(nios2_alternate_compare_const): Assert op is a CONST_INT.
(nios2_valid_compare_const_p): Assert op is a CONST_INT.
(nios2_validate_compare): Bypass alternate compare logic if *op2
is not a CONST_INT.
(ldstwm_operation_p): Return false if first_base is not a REG or
if first_offset is not a CONST_INT.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@245724 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/nios2')
-rw-r--r-- | gcc/config/nios2/nios2.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc/config/nios2/nios2.c b/gcc/config/nios2/nios2.c index e1b0372f4a9..2fc9a080402 100644 --- a/gcc/config/nios2/nios2.c +++ b/gcc/config/nios2/nios2.c @@ -1416,6 +1416,8 @@ nios2_option_override (void) static bool nios2_simple_const_p (const_rtx cst) { + if (!CONST_INT_P (cst)) + return false; HOST_WIDE_INT val = INTVAL (cst); return SMALL_INT (val) || SMALL_INT_UNSIGNED (val) || UPPER16_INT (val); } @@ -1753,6 +1755,8 @@ nios2_alternate_compare_const (enum rtx_code code, rtx op, enum rtx_code *alt_code, rtx *alt_op, machine_mode mode) { + gcc_assert (CONST_INT_P (op)); + HOST_WIDE_INT opval = INTVAL (op); enum rtx_code scode = signed_condition (code); bool dec_p = (scode == LT || scode == GE); @@ -1788,6 +1792,7 @@ nios2_alternate_compare_const (enum rtx_code code, rtx op, static bool nios2_valid_compare_const_p (enum rtx_code code, rtx op) { + gcc_assert (CONST_INT_P (op)); switch (code) { case EQ: case NE: case GE: case LT: @@ -1846,7 +1851,7 @@ nios2_validate_compare (machine_mode mode, rtx *cmp, rtx *op1, rtx *op2) if (GET_MODE_CLASS (mode) == MODE_FLOAT) return nios2_validate_fpu_compare (mode, cmp, op1, op2, true); - if (!reg_or_0_operand (*op2, mode)) + if (CONST_INT_P (*op2) && *op2 != const0_rtx) { /* Create alternate constant compare. */ nios2_alternate_compare_const (code, *op2, &alt_code, &alt_op2, mode); @@ -1878,8 +1883,11 @@ nios2_validate_compare (machine_mode mode, rtx *cmp, rtx *op1, rtx *op2) code = alt_code; *op2 = alt_op2; } - *op2 = force_reg (SImode, *op2); + *op2 = force_reg (mode, *op2); } + else if (!reg_or_0_operand (*op2, mode)) + *op2 = force_reg (mode, *op2); + check_rebuild_cmp: if (code == GT || code == GTU || code == LE || code == LEU) { @@ -4558,6 +4566,8 @@ ldstwm_operation_p (rtx op, bool load_p) if (!split_mem_address (XEXP (mem, 0), &first_base, &first_offset)) return false; + if (!REG_P (first_base) || !CONST_INT_P (first_offset)) + return false; base_reg = first_base; inc_p = INTVAL (first_offset) >= 0; } |