diff options
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1250d26..358a616 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3168,8 +3168,7 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags) /* Two conversions are equal only if signedness and modes match. */ switch (TREE_CODE (arg0)) { - case NOP_EXPR: - case CONVERT_EXPR: + CASE_CONVERT: case FIX_TRUNC_EXPR: if (TYPE_UNSIGNED (TREE_TYPE (arg0)) != TYPE_UNSIGNED (TREE_TYPE (arg1))) @@ -3904,8 +3903,7 @@ decode_field_reference (tree exp, HOST_WIDE_INT *pbitsize, /* We are interested in the bare arrangement of bits, so strip everything that doesn't affect the machine mode. However, record the type of the outermost expression if it may matter below. */ - if (TREE_CODE (exp) == NOP_EXPR - || TREE_CODE (exp) == CONVERT_EXPR + if (CONVERT_EXPR_P (exp) || TREE_CODE (exp) == NON_LVALUE_EXPR) outer_type = TREE_TYPE (exp); STRIP_NOPS (exp); @@ -4316,7 +4314,7 @@ make_range (tree exp, int *pin_p, tree *plow, tree *phigh, exp = arg0; continue; - case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR: + CASE_CONVERT: case NON_LVALUE_EXPR: if (TYPE_PRECISION (arg0_type) > TYPE_PRECISION (exp_type)) break; @@ -5728,7 +5726,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type, fold_convert (ctype, c), 0); break; - case CONVERT_EXPR: case NON_LVALUE_EXPR: case NOP_EXPR: + CASE_CONVERT: case NON_LVALUE_EXPR: /* If op0 is an expression ... */ if ((COMPARISON_CLASS_P (op0) || UNARY_CLASS_P (op0) @@ -6804,8 +6802,7 @@ fold_sign_changed_comparison (enum tree_code code, tree type, tree arg0_inner; tree inner_type, outer_type; - if (TREE_CODE (arg0) != NOP_EXPR - && TREE_CODE (arg0) != CONVERT_EXPR) + if (!CONVERT_EXPR_P (arg0)) return NULL_TREE; outer_type = TREE_TYPE (arg0); @@ -6830,8 +6827,7 @@ fold_sign_changed_comparison (enum tree_code code, tree type, return NULL_TREE; if (TREE_CODE (arg1) != INTEGER_CST - && !((TREE_CODE (arg1) == NOP_EXPR - || TREE_CODE (arg1) == CONVERT_EXPR) + && !(CONVERT_EXPR_P (arg1) && TREE_TYPE (TREE_OPERAND (arg1, 0)) == inner_type)) return NULL_TREE; @@ -7726,9 +7722,8 @@ fold_unary (enum tree_code code, tree type, tree op0) return fold_convert (type, op0); return NULL_TREE; - case NOP_EXPR: + CASE_CONVERT: case FLOAT_EXPR: - case CONVERT_EXPR: case FIX_TRUNC_EXPR: if (TREE_TYPE (op0) == type) return op0; @@ -7740,8 +7735,7 @@ fold_unary (enum tree_code code, tree type, tree op0) TREE_OPERAND (op0, 1)); /* Handle cases of two conversions in a row. */ - if (TREE_CODE (op0) == NOP_EXPR - || TREE_CODE (op0) == CONVERT_EXPR) + if (CONVERT_EXPR_P (op0)) { tree inside_type = TREE_TYPE (TREE_OPERAND (op0, 0)); tree inter_type = TREE_TYPE (op0); @@ -7936,8 +7930,7 @@ fold_unary (enum tree_code code, tree type, tree op0) if (INTEGRAL_TYPE_P (type) && TREE_CODE (op0) == BIT_NOT_EXPR && INTEGRAL_TYPE_P (TREE_TYPE (op0)) - && (TREE_CODE (TREE_OPERAND (op0, 0)) == NOP_EXPR - || TREE_CODE (TREE_OPERAND (op0, 0)) == CONVERT_EXPR) + && CONVERT_EXPR_P (TREE_OPERAND (op0, 0)) && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (op0))) { tem = TREE_OPERAND (TREE_OPERAND (op0, 0), 0); @@ -7993,8 +7986,7 @@ fold_unary (enum tree_code code, tree type, tree op0) return fold_convert (type, op0); /* Strip inner integral conversions that do not change the precision. */ - if ((TREE_CODE (op0) == NOP_EXPR - || TREE_CODE (op0) == CONVERT_EXPR) + if (CONVERT_EXPR_P (op0) && (INTEGRAL_TYPE_P (TREE_TYPE (op0)) || POINTER_TYPE_P (TREE_TYPE (op0))) && (INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (op0, 0))) @@ -8911,8 +8903,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1) } if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE - && (TREE_CODE (arg0) == NOP_EXPR - || TREE_CODE (arg0) == CONVERT_EXPR)) + && CONVERT_EXPR_P (arg0)) { /* If we are widening one operand of an integer comparison, see if the other operand is similarly being widened. Perhaps we @@ -12666,8 +12657,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) if ((code == LT_EXPR || code == GE_EXPR) && TYPE_UNSIGNED (TREE_TYPE (arg0)) - && (TREE_CODE (arg1) == NOP_EXPR - || TREE_CODE (arg1) == CONVERT_EXPR) + && CONVERT_EXPR_P (arg1) && TREE_CODE (TREE_OPERAND (arg1, 0)) == LSHIFT_EXPR && integer_onep (TREE_OPERAND (TREE_OPERAND (arg1, 0), 0))) return |