diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2017-02-24 23:35:18 +0100 |
---|---|---|
committer | Sandra Loosemore <sandra@gcc.gnu.org> | 2017-02-24 17:35:18 -0500 |
commit | 039f4db92051767d931d131a5ec2c7633061a2ed (patch) | |
tree | ed6039601e79f32a051b87a579fcd18d0f7f780c /gcc/config/nios2 | |
parent | da3243b2b6c29514a0550cfcd4055fdf13c448f3 (diff) | |
download | gcc-039f4db92051767d931d131a5ec2c7633061a2ed.zip gcc-039f4db92051767d931d131a5ec2c7633061a2ed.tar.gz gcc-039f4db92051767d931d131a5ec2c7633061a2ed.tar.bz2 |
nios2.c (nios2_simple_const_p): Returns false if the argument isn't a CONST_INT.
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.
Co-Authored-By: Sandra Loosemore <sandra@codesourcery.com>
From-SVN: r245724
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 e1b0372..2fc9a08 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; } |