From: Segher Boessenkool Date: Fri, 24 Feb 2017 22:35:18 +0000 (+0100) Subject: nios2.c (nios2_simple_const_p): Returns false if the argument isn't a CONST_INT. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=039f4db92051767d931d131a5ec2c7633061a2ed;p=gcc.git nios2.c (nios2_simple_const_p): Returns false if the argument isn't a CONST_INT. 2017-02-24 Segher Boessenkool Sandra Loosemore 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 From-SVN: r245724 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0405ddfed75..e0f560d48d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2017-02-24 Segher Boessenkool + Sandra Loosemore + + * 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. + 2017-02-24 Segher Boessenkool * config/cris/cris.md: Use correct operand in a define_peephole2. 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; }