From: Michael Matz Date: Tue, 25 Aug 2009 13:31:56 +0000 (+0000) Subject: expr.c (expand_expr_real_1): New local treeop0... X-Git-Tag: upstream/12.2.0~97722 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b32e7cdb5df3f84bfdc0dc683f7c94adf76043cf;p=platform%2Fupstream%2Fgcc.git expr.c (expand_expr_real_1): New local treeop0... * expr.c (expand_expr_real_1): New local treeop0, treeop1, treeop2 initialized with first three operands of the full expression. Substitute all TREE_OPERAND (exp, [012]) calls with them. From-SVN: r151078 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1a3905e..bb5e0b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-08-25 Michael Matz + + * expr.c (expand_expr_real_1): New local treeop0, treeop1, + treeop2 initialized with first three operands of the full expression. + Substitute all TREE_OPERAND (exp, [012]) calls with them. + 2009-08-25 Kai Tietz * gcc/gthr-win32.h (__UNUSED_PARAM): Define, if not already present. diff --git a/gcc/expr.c b/gcc/expr.c index 6805cdc..7e316b5 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7220,6 +7220,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, gimple subexp0_def, subexp1_def; tree top0, top1; location_t loc = EXPR_LOCATION (exp); + tree treeop0, treeop1, treeop2; #define REDUCE_BIT_FIELD(expr) (reduce_bit_field \ ? reduce_to_bit_field_precision ((expr), \ target, \ @@ -7230,6 +7231,17 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, mode = TYPE_MODE (type); unsignedp = TYPE_UNSIGNED (type); + treeop0 = treeop1 = treeop2 = NULL_TREE; + if (!VL_EXP_CLASS_P (exp)) + switch (TREE_CODE_LENGTH (code)) + { + default: + case 3: treeop2 = TREE_OPERAND (exp, 2); + case 2: treeop1 = TREE_OPERAND (exp, 1); + case 1: treeop0 = TREE_OPERAND (exp, 0); + case 0: break; + } + ignore = (target == const0_rtx || ((CONVERT_EXPR_CODE_P (code) || code == COND_EXPR || code == VIEW_CONVERT_EXPR) @@ -7268,22 +7280,22 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (TREE_CODE_CLASS (code) == tcc_unary || code == COMPONENT_REF || code == INDIRECT_REF) - return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, + return expand_expr (treeop0, const0_rtx, VOIDmode, modifier); else if (TREE_CODE_CLASS (code) == tcc_binary || TREE_CODE_CLASS (code) == tcc_comparison || code == ARRAY_REF || code == ARRAY_RANGE_REF) { - expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, modifier); - expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, modifier); + expand_expr (treeop0, const0_rtx, VOIDmode, modifier); + expand_expr (treeop1, const0_rtx, VOIDmode, modifier); return const0_rtx; } else if (code == BIT_FIELD_REF) { - expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, modifier); - expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, modifier); - expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, modifier); + expand_expr (treeop0, const0_rtx, VOIDmode, modifier); + expand_expr (treeop1, const0_rtx, VOIDmode, modifier); + expand_expr (treeop2, const0_rtx, VOIDmode, modifier); return const0_rtx; } @@ -7524,7 +7536,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case SAVE_EXPR: { - tree val = TREE_OPERAND (exp, 0); + tree val = treeop0; rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl); if (!SAVE_EXPR_RESOLVED_P (exp)) @@ -7539,7 +7551,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, VAR_DECL, NULL, TREE_TYPE (exp)); DECL_ARTIFICIAL (val) = 1; DECL_IGNORED_P (val) = 1; - TREE_OPERAND (exp, 0) = val; + treeop0 = val; + TREE_OPERAND (exp, 0) = treeop0; SAVE_EXPR_RESOLVED_P (exp) = 1; if (!CONSTANT_P (ret)) @@ -7551,10 +7564,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } case GOTO_EXPR: - if (TREE_CODE (TREE_OPERAND (exp, 0)) == LABEL_DECL) - expand_goto (TREE_OPERAND (exp, 0)); + if (TREE_CODE (treeop0) == LABEL_DECL) + expand_goto (treeop0); else - expand_computed_goto (TREE_OPERAND (exp, 0)); + expand_computed_goto (treeop0); return const0_rtx; case CONSTRUCTOR: @@ -7577,7 +7590,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case ALIGN_INDIRECT_REF: case INDIRECT_REF: { - tree exp1 = TREE_OPERAND (exp, 0); + tree exp1 = treeop0; if (modifier != EXPAND_WRITE) { @@ -7645,8 +7658,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case ARRAY_REF: { - tree array = TREE_OPERAND (exp, 0); - tree index = TREE_OPERAND (exp, 1); + tree array = treeop0; + tree index = treeop1; /* Fold an expression like: "foo"[2]. This is not done in fold so it won't happen inside &. @@ -7736,7 +7749,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, tree index1 = index; tree low_bound = array_ref_low_bound (exp); index1 = fold_convert_loc (loc, sizetype, - TREE_OPERAND (exp, 1)); + treeop1); /* Optimize the special-case of a zero lower bound. @@ -7772,14 +7785,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case COMPONENT_REF: /* If the operand is a CONSTRUCTOR, we can just extract the appropriate field if it is present. */ - if (TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR) + if (TREE_CODE (treeop0) == CONSTRUCTOR) { unsigned HOST_WIDE_INT idx; tree field, value; - FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0)), + FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (treeop0), idx, field, value) - if (field == TREE_OPERAND (exp, 1) + if (field == treeop1 /* We can normally use the value of the field in the CONSTRUCTOR. However, if this is a bitfield in an integral mode that we can fit in a HOST_WIDE_INT, @@ -8159,18 +8172,18 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case PAREN_EXPR: CASE_CONVERT: - if (TREE_OPERAND (exp, 0) == error_mark_node) + if (treeop0 == error_mark_node) return const0_rtx; if (TREE_CODE (type) == UNION_TYPE) { - tree valtype = TREE_TYPE (TREE_OPERAND (exp, 0)); + tree valtype = TREE_TYPE (treeop0); /* If both input and output are BLKmode, this conversion isn't doing anything except possibly changing memory attribute. */ if (mode == BLKmode && TYPE_MODE (valtype) == BLKmode) { - rtx result = expand_expr (TREE_OPERAND (exp, 0), target, tmode, + rtx result = expand_expr (treeop0, target, tmode, modifier); result = copy_rtx (result); @@ -8188,7 +8201,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (MEM_P (target)) /* Store data into beginning of memory target. */ - store_expr (TREE_OPERAND (exp, 0), + store_expr (treeop0, adjust_address (target, TYPE_MODE (valtype), 0), modifier == EXPAND_STACK_PARM, false); @@ -8200,10 +8213,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Store this field into a union of the proper type. */ store_field (target, MIN ((int_size_in_bytes (TREE_TYPE - (TREE_OPERAND (exp, 0))) + (treeop0)) * BITS_PER_UNIT), (HOST_WIDE_INT) GET_MODE_BITSIZE (mode)), - 0, TYPE_MODE (valtype), TREE_OPERAND (exp, 0), + 0, TYPE_MODE (valtype), treeop0, type, 0, false); } @@ -8211,22 +8224,22 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return target; } - if (mode == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) + if (mode == TYPE_MODE (TREE_TYPE (treeop0))) { - op0 = expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode, + op0 = expand_expr (treeop0, target, VOIDmode, modifier); /* If the signedness of the conversion differs and OP0 is a promoted SUBREG, clear that indication since we now have to do the proper extension. */ - if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))) != unsignedp + if (TYPE_UNSIGNED (TREE_TYPE (treeop0)) != unsignedp && GET_CODE (op0) == SUBREG) SUBREG_PROMOTED_VAR_P (op0) = 0; return REDUCE_BIT_FIELD (op0); } - op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, + op0 = expand_expr (treeop0, NULL_RTX, mode, modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier); if (GET_MODE (op0) == mode) ; @@ -8234,7 +8247,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* If OP0 is a constant, just convert it into the proper mode. */ else if (CONSTANT_P (op0)) { - tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); + tree inner_type = TREE_TYPE (treeop0); enum machine_mode inner_mode = TYPE_MODE (inner_type); if (modifier == EXPAND_INITIALIZER) @@ -8252,11 +8265,11 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, else if (target == 0) op0 = convert_to_mode (mode, op0, TYPE_UNSIGNED (TREE_TYPE - (TREE_OPERAND (exp, 0)))); + (treeop0))); else { convert_move (target, op0, - TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); + TYPE_UNSIGNED (TREE_TYPE (treeop0))); op0 = target; } @@ -8269,8 +8282,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, temporary by fetching an inner memory reference. */ if (mode == BLKmode && TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) == INTEGER_CST - && TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))) != BLKmode - && handled_component_p (TREE_OPERAND (exp, 0))) + && TYPE_MODE (TREE_TYPE (treeop0)) != BLKmode + && handled_component_p (treeop0)) { enum machine_mode mode1; HOST_WIDE_INT bitsize, bitpos; @@ -8278,7 +8291,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, int unsignedp; int volatilep = 0; tree tem - = get_inner_reference (TREE_OPERAND (exp, 0), &bitsize, &bitpos, + = get_inner_reference (treeop0, &bitsize, &bitpos, &offset, &mode1, &unsignedp, &volatilep, true); rtx orig_op0; @@ -8318,7 +8331,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (op0 == orig_op0) op0 = copy_rtx (op0); - set_mem_attributes (op0, TREE_OPERAND (exp, 0), 0); + set_mem_attributes (op0, treeop0, 0); if (REG_P (XEXP (op0, 0))) mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0)); @@ -8328,7 +8341,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } if (!op0) - op0 = expand_expr (TREE_OPERAND (exp, 0), + op0 = expand_expr (treeop0, NULL_RTX, VOIDmode, modifier); /* If the input and output modes are both the same, we are done. */ @@ -8348,7 +8361,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, other. */ else if (SCALAR_INT_MODE_P (GET_MODE (op0)) && SCALAR_INT_MODE_P (mode)) op0 = convert_modes (mode, GET_MODE (op0), op0, - TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); + TYPE_UNSIGNED (TREE_TYPE (treeop0))); /* As a last resort, spill op0 to memory, and reload it in a different mode. */ else if (!MEM_P (op0)) @@ -8357,7 +8370,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, are going to be changing the mode of the MEM, don't call force_const_mem for constants because we don't allow pool constants to change mode. */ - tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); + tree inner_type = TREE_TYPE (treeop0); gcc_assert (!TREE_ADDRESSABLE (exp)); @@ -8385,7 +8398,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, && mode != BLKmode && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode)) { - tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); + tree inner_type = TREE_TYPE (treeop0); HOST_WIDE_INT temp_size = MAX (int_size_in_bytes (inner_type), (HOST_WIDE_INT) GET_MODE_SIZE (mode)); @@ -8419,18 +8432,15 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Make sure to sign-extend the sizetype offset in a POINTER_PLUS_EXPR if sizetype precision is smaller than pointer precision. */ if (TYPE_PRECISION (sizetype) < TYPE_PRECISION (type)) - exp - = build2 (PLUS_EXPR, type, - TREE_OPERAND (exp, 0), - fold_convert_loc (loc, type, - fold_convert_loc (loc, ssizetype, - TREE_OPERAND (exp, 1)))); + treeop1 = fold_convert_loc (loc, type, + fold_convert_loc (loc, ssizetype, + treeop1)); case PLUS_EXPR: /* Check if this is a case for multiplication and addition. */ if ((TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == FIXED_POINT_TYPE) - && (subexp0_def = get_def_for_expr (TREE_OPERAND (exp, 0), + && (subexp0_def = get_def_for_expr (treeop0, MULT_EXPR))) { tree subsubexp0, subsubexp1; @@ -8468,7 +8478,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, { expand_operands (top0, top1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); - op2 = expand_expr (TREE_OPERAND (exp, 1), subtarget, + op2 = expand_expr (treeop1, subtarget, VOIDmode, EXPAND_NORMAL); temp = expand_ternary_op (mode, this_optab, op0, op1, op2, target, unsignedp); @@ -8489,17 +8499,17 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, sp, ap, or fp is our second argument, in which case we must swap the innermost first argument and our second argument. */ - if (TREE_CODE (TREE_OPERAND (exp, 0)) == PLUS_EXPR - && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 1)) == INTEGER_CST - && TREE_CODE (TREE_OPERAND (exp, 1)) == VAR_DECL - && (DECL_RTL (TREE_OPERAND (exp, 1)) == frame_pointer_rtx - || DECL_RTL (TREE_OPERAND (exp, 1)) == stack_pointer_rtx - || DECL_RTL (TREE_OPERAND (exp, 1)) == arg_pointer_rtx)) + if (TREE_CODE (treeop0) == PLUS_EXPR + && TREE_CODE (TREE_OPERAND (treeop0, 1)) == INTEGER_CST + && TREE_CODE (treeop1) == VAR_DECL + && (DECL_RTL (treeop1) == frame_pointer_rtx + || DECL_RTL (treeop1) == stack_pointer_rtx + || DECL_RTL (treeop1) == arg_pointer_rtx)) { - tree t = TREE_OPERAND (exp, 1); + tree t = treeop1; - TREE_OPERAND (exp, 1) = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); - TREE_OPERAND (TREE_OPERAND (exp, 0), 0) = t; + treeop1 = TREE_OPERAND (treeop0, 0); + TREE_OPERAND (treeop0, 0) = t; } /* If the result is to be ptr_mode and we are adding an integer to @@ -8515,40 +8525,40 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, { if (modifier == EXPAND_STACK_PARM) target = 0; - if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST + if (TREE_CODE (treeop0) == INTEGER_CST && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT - && TREE_CONSTANT (TREE_OPERAND (exp, 1))) + && TREE_CONSTANT (treeop1)) { rtx constant_part; - op1 = expand_expr (TREE_OPERAND (exp, 1), subtarget, VOIDmode, + op1 = expand_expr (treeop1, subtarget, VOIDmode, EXPAND_SUM); /* Use immed_double_const to ensure that the constant is truncated according to the mode of OP1, then sign extended to a HOST_WIDE_INT. Using the constant directly can result in non-canonical RTL in a 64x32 cross compile. */ constant_part - = immed_double_const (TREE_INT_CST_LOW (TREE_OPERAND (exp, 0)), + = immed_double_const (TREE_INT_CST_LOW (treeop0), (HOST_WIDE_INT) 0, - TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 1)))); + TYPE_MODE (TREE_TYPE (treeop1))); op1 = plus_constant (op1, INTVAL (constant_part)); if (modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER) op1 = force_operand (op1, target); return REDUCE_BIT_FIELD (op1); } - else if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST + else if (TREE_CODE (treeop1) == INTEGER_CST && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT - && TREE_CONSTANT (TREE_OPERAND (exp, 0))) + && TREE_CONSTANT (treeop0)) { rtx constant_part; - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, + op0 = expand_expr (treeop0, subtarget, VOIDmode, (modifier == EXPAND_INITIALIZER ? EXPAND_INITIALIZER : EXPAND_SUM)); if (! CONSTANT_P (op0)) { - op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, + op1 = expand_expr (treeop1, NULL_RTX, VOIDmode, modifier); /* Return a PLUS if modifier says it's OK. */ if (modifier == EXPAND_SUM @@ -8561,9 +8571,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, to a HOST_WIDE_INT. Using the constant directly can result in non-canonical RTL in a 64x32 cross compile. */ constant_part - = immed_double_const (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)), + = immed_double_const (TREE_INT_CST_LOW (treeop1), (HOST_WIDE_INT) 0, - TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))); + TYPE_MODE (TREE_TYPE (treeop0))); op0 = plus_constant (op0, INTVAL (constant_part)); if (modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER) op0 = force_operand (op0, target); @@ -8578,7 +8588,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if ((modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER) || mode != ptr_mode) { - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, EXPAND_NORMAL); if (op0 == const0_rtx) return op1; @@ -8587,7 +8597,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, goto binop2; } - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, modifier); return REDUCE_BIT_FIELD (simplify_gen_binary (PLUS, mode, op0, op1)); @@ -8595,7 +8605,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Check if this is a case for multiplication and subtraction. */ if ((TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == FIXED_POINT_TYPE) - && (subexp1_def = get_def_for_expr (TREE_OPERAND (exp, 1), + && (subexp1_def = get_def_for_expr (treeop1, MULT_EXPR))) { tree subsubexp0, subsubexp1; @@ -8633,7 +8643,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, { expand_operands (top0, top1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); - op2 = expand_expr (TREE_OPERAND (exp, 0), subtarget, + op2 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_NORMAL); temp = expand_ternary_op (mode, this_optab, op0, op1, op2, target, unsignedp); @@ -8649,10 +8659,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Handle difference of two symbolic constants, for the sake of an initializer. */ if ((modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) - && really_constant_p (TREE_OPERAND (exp, 0)) - && really_constant_p (TREE_OPERAND (exp, 1))) + && really_constant_p (treeop0) + && really_constant_p (treeop1)) { - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, modifier); /* If the last operand is a CONST_INT, use plus_constant of @@ -8671,7 +8681,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, || mode != ptr_mode) goto binop; - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, modifier); /* Convert A - const to A + (-const). */ @@ -8693,22 +8703,22 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* If first operand is constant, swap them. Thus the following special case checks need only check the second operand. */ - if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST) + if (TREE_CODE (treeop0) == INTEGER_CST) { - tree t1 = TREE_OPERAND (exp, 0); - TREE_OPERAND (exp, 0) = TREE_OPERAND (exp, 1); - TREE_OPERAND (exp, 1) = t1; + tree t1 = treeop0; + treeop0 = treeop1; + treeop1 = t1; } /* Attempt to return something suitable for generating an indexed address, for machines that support that. */ if (modifier == EXPAND_SUM && mode == ptr_mode - && host_integerp (TREE_OPERAND (exp, 1), 0)) + && host_integerp (treeop1, 0)) { - tree exp1 = TREE_OPERAND (exp, 1); + tree exp1 = treeop1; - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, + op0 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_SUM); if (!REG_P (op0)) @@ -8729,8 +8739,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, in that narrower type with a result in the desired type, do it that way, and avoid the explicit type-conversion. */ - subexp0 = TREE_OPERAND (exp, 0); - subexp1 = TREE_OPERAND (exp, 1); + subexp0 = treeop0; + subexp1 = treeop1; subexp0_def = get_def_for_expr (subexp0, NOP_EXPR); subexp1_def = get_def_for_expr (subexp1, NOP_EXPR); top0 = top1 = NULL_TREE; @@ -8848,7 +8858,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Possible optimization: compute the dividend with EXPAND_SUM then if the divisor is constant can optimize the case where some terms of the dividend have coeffs divisible by it. */ - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, EXPAND_NORMAL); return expand_divmod (0, code, mode, op0, op1, target, unsignedp); @@ -8861,17 +8871,17 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case ROUND_MOD_EXPR: if (modifier == EXPAND_STACK_PARM) target = 0; - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, EXPAND_NORMAL); return expand_divmod (1, code, mode, op0, op1, target, unsignedp); case FIXED_CONVERT_EXPR: - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); if (target == 0 || modifier == EXPAND_STACK_PARM) target = gen_reg_rtx (mode); - if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == INTEGER_TYPE - && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))) + if ((TREE_CODE (TREE_TYPE (treeop0)) == INTEGER_TYPE + && TYPE_UNSIGNED (TREE_TYPE (treeop0))) || (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type))) expand_fixed_convert (target, op0, 1, TYPE_SATURATING (type)); else @@ -8879,27 +8889,27 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return target; case FIX_TRUNC_EXPR: - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); if (target == 0 || modifier == EXPAND_STACK_PARM) target = gen_reg_rtx (mode); expand_fix (target, op0, unsignedp); return target; case FLOAT_EXPR: - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); if (target == 0 || modifier == EXPAND_STACK_PARM) target = gen_reg_rtx (mode); /* expand_float can't figure out what to do if FROM has VOIDmode. So give it the correct mode. With -O, cse will optimize this. */ if (GET_MODE (op0) == VOIDmode) - op0 = copy_to_mode_reg (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))), + op0 = copy_to_mode_reg (TYPE_MODE (TREE_TYPE (treeop0)), op0); expand_float (target, op0, - TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); + TYPE_UNSIGNED (TREE_TYPE (treeop0))); return target; case NEGATE_EXPR: - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, + op0 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_NORMAL); if (modifier == EXPAND_STACK_PARM) target = 0; @@ -8911,7 +8921,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return REDUCE_BIT_FIELD (temp); case ABS_EXPR: - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, + op0 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_NORMAL); if (modifier == EXPAND_STACK_PARM) target = 0; @@ -8926,7 +8936,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return op0; return expand_abs (mode, op0, target, unsignedp, - safe_from_p (target, TREE_OPERAND (exp, 0), 1)); + safe_from_p (target, treeop0, 1)); case MAX_EXPR: case MIN_EXPR: @@ -8938,7 +8948,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, || (REG_P (target) && REGNO (target) < FIRST_PSEUDO_REGISTER)) target = gen_reg_rtx (mode); - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, target, &op0, &op1, EXPAND_NORMAL); /* First try to do it with a special MIN or MAX instruction. @@ -9044,7 +9054,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return target; case BIT_NOT_EXPR: - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, + op0 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_NORMAL); if (modifier == EXPAND_STACK_PARM) target = 0; @@ -9095,13 +9105,13 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (ALL_FIXED_POINT_MODE_P (mode)) goto binop; - if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) + if (! safe_from_p (subtarget, treeop1, 1)) subtarget = 0; if (modifier == EXPAND_STACK_PARM) target = 0; - op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, + op0 = expand_expr (treeop0, subtarget, VOIDmode, EXPAND_NORMAL); - temp = expand_shift (code, mode, op0, TREE_OPERAND (exp, 1), target, + temp = expand_shift (code, mode, op0, treeop1, target, unsignedp); if (code == LSHIFT_EXPR) temp = REDUCE_BIT_FIELD (temp); @@ -9139,7 +9149,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (! ignore && (target == 0 || modifier == EXPAND_STACK_PARM - || ! safe_from_p (target, exp, 1) + || ! safe_from_p (target, treeop0, 1) + || ! safe_from_p (target, treeop1, 1) /* Make sure we don't have a hard reg (such as function's return value) live across basic blocks, if not optimizing. */ || (!optimize && REG_P (target) @@ -9161,7 +9172,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case TRUTH_NOT_EXPR: if (modifier == EXPAND_STACK_PARM) target = 0; - op0 = expand_expr (TREE_OPERAND (exp, 0), target, + op0 = expand_expr (treeop0, target, VOIDmode, EXPAND_NORMAL); /* The parser is careful to generate TRUTH_NOT_EXPR only with operands that are always zero or one. */ @@ -9185,7 +9196,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* A COND_EXPR with its type being VOID_TYPE represents a conditional jump and is handled in expand_gimple_cond_expr. */ - gcc_assert (!VOID_TYPE_P (TREE_TYPE (exp))); + gcc_assert (!VOID_TYPE_P (type)); /* Note that COND_EXPRs whose type is a structure or union are required to be constructed to contain assignments of @@ -9194,8 +9205,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, gcc_assert (!TREE_ADDRESSABLE (type) && !ignore - && TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node - && TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node); + && TREE_TYPE (treeop1) != void_type_node + && TREE_TYPE (treeop2) != void_type_node); /* If we are not to produce a result, we have no target. Otherwise, if a target was specified use it; it will not be used as an @@ -9204,7 +9215,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, if (modifier != EXPAND_STACK_PARM && original_target - && safe_from_p (original_target, TREE_OPERAND (exp, 0), 1) + && safe_from_p (original_target, treeop0, 1) && GET_MODE (original_target) == mode #ifdef HAVE_conditional_move && (! can_conditionally_move_p (mode) @@ -9219,15 +9230,15 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, NO_DEFER_POP; op0 = gen_label_rtx (); op1 = gen_label_rtx (); - jumpifnot (TREE_OPERAND (exp, 0), op0); - store_expr (TREE_OPERAND (exp, 1), temp, + jumpifnot (treeop0, op0); + store_expr (treeop1, temp, modifier == EXPAND_STACK_PARM, false); emit_jump_insn (gen_jump (op1)); emit_barrier (); emit_label (op0); - store_expr (TREE_OPERAND (exp, 2), temp, + store_expr (treeop2, temp, modifier == EXPAND_STACK_PARM, false); @@ -9241,8 +9252,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case MODIFY_EXPR: { - tree lhs = TREE_OPERAND (exp, 0); - tree rhs = TREE_OPERAND (exp, 1); + tree lhs = treeop0; + tree rhs = treeop1; gcc_assert (ignore); /* Check for |= or &= of a bitfield of size one into another bitfield @@ -9278,10 +9289,10 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } case RETURN_EXPR: - if (!TREE_OPERAND (exp, 0)) + if (!treeop0) expand_null_return (); else - expand_return (TREE_OPERAND (exp, 0)); + expand_return (treeop0); return const0_rtx; case ADDR_EXPR: @@ -9289,11 +9300,11 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case COMPLEX_EXPR: /* Get the rtx code of the operands. */ - op0 = expand_normal (TREE_OPERAND (exp, 0)); - op1 = expand_normal (TREE_OPERAND (exp, 1)); + op0 = expand_normal (treeop0); + op1 = expand_normal (treeop1); if (!target) - target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp))); + target = gen_reg_rtx (TYPE_MODE (type)); /* Move the real (op0) and imaginary (op1) parts to their location. */ write_complex_part (target, op0, false); @@ -9302,11 +9313,11 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return target; case REALPART_EXPR: - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); return read_complex_part (op0, false); case IMAGPART_EXPR: - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); return read_complex_part (op0, true); case RESX_EXPR: @@ -9354,7 +9365,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return const0_rtx; case LABEL_EXPR: - expand_label (TREE_OPERAND (exp, 0)); + expand_label (treeop0); return const0_rtx; case ASM_EXPR: @@ -9364,14 +9375,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case WITH_SIZE_EXPR: /* WITH_SIZE_EXPR expands to its first argument. The caller should have pulled out the size to use in whatever context it needed. */ - return expand_expr_real (TREE_OPERAND (exp, 0), original_target, tmode, + return expand_expr_real (treeop0, original_target, tmode, modifier, alt_rtl); case REALIGN_LOAD_EXPR: { - tree oprnd0 = TREE_OPERAND (exp, 0); - tree oprnd1 = TREE_OPERAND (exp, 1); - tree oprnd2 = TREE_OPERAND (exp, 2); + tree oprnd0 = treeop0; + tree oprnd1 = treeop1; + tree oprnd2 = treeop2; rtx op2; this_optab = optab_for_tree_code (code, type, optab_default); @@ -9385,9 +9396,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case DOT_PROD_EXPR: { - tree oprnd0 = TREE_OPERAND (exp, 0); - tree oprnd1 = TREE_OPERAND (exp, 1); - tree oprnd2 = TREE_OPERAND (exp, 2); + tree oprnd0 = treeop0; + tree oprnd1 = treeop1; + tree oprnd2 = treeop2; rtx op2; expand_operands (oprnd0, oprnd1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); @@ -9399,8 +9410,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case WIDEN_SUM_EXPR: { - tree oprnd0 = TREE_OPERAND (exp, 0); - tree oprnd1 = TREE_OPERAND (exp, 1); + tree oprnd0 = treeop0; + tree oprnd1 = treeop1; expand_operands (oprnd0, oprnd1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); target = expand_widen_pattern_expr (exp, op0, NULL_RTX, op1, @@ -9412,7 +9423,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case REDUC_MIN_EXPR: case REDUC_PLUS_EXPR: { - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); this_optab = optab_for_tree_code (code, type, optab_default); temp = expand_unop (mode, this_optab, op0, target, unsignedp); gcc_assert (temp); @@ -9422,7 +9433,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_EXTRACT_EVEN_EXPR: case VEC_EXTRACT_ODD_EXPR: { - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); this_optab = optab_for_tree_code (code, type, optab_default); temp = expand_binop (mode, this_optab, op0, op1, target, unsignedp, @@ -9434,7 +9445,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_INTERLEAVE_HIGH_EXPR: case VEC_INTERLEAVE_LOW_EXPR: { - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); this_optab = optab_for_tree_code (code, type, optab_default); temp = expand_binop (mode, this_optab, op0, op1, target, unsignedp, @@ -9453,7 +9464,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_UNPACK_HI_EXPR: case VEC_UNPACK_LO_EXPR: { - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); this_optab = optab_for_tree_code (code, type, optab_default); temp = expand_widen_pattern_expr (exp, op0, NULL_RTX, NULL_RTX, target, unsignedp); @@ -9464,14 +9475,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_UNPACK_FLOAT_HI_EXPR: case VEC_UNPACK_FLOAT_LO_EXPR: { - op0 = expand_normal (TREE_OPERAND (exp, 0)); + op0 = expand_normal (treeop0); /* The signedness is determined from input operand. */ this_optab = optab_for_tree_code (code, - TREE_TYPE (TREE_OPERAND (exp, 0)), + TREE_TYPE (treeop0), optab_default); temp = expand_widen_pattern_expr (exp, op0, NULL_RTX, NULL_RTX, - target, TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); + target, TYPE_UNSIGNED (TREE_TYPE (treeop0))); gcc_assert (temp); return temp; @@ -9480,8 +9491,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_WIDEN_MULT_HI_EXPR: case VEC_WIDEN_MULT_LO_EXPR: { - tree oprnd0 = TREE_OPERAND (exp, 0); - tree oprnd1 = TREE_OPERAND (exp, 1); + tree oprnd0 = treeop0; + tree oprnd1 = treeop1; expand_operands (oprnd0, oprnd1, NULL_RTX, &op0, &op1, EXPAND_NORMAL); target = expand_widen_pattern_expr (exp, op0, op1, NULL_RTX, @@ -9493,7 +9504,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case VEC_PACK_TRUNC_EXPR: case VEC_PACK_SAT_EXPR: case VEC_PACK_FIX_TRUNC_EXPR: - mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))); + mode = TYPE_MODE (TREE_TYPE (treeop0)); goto binop; case COMPOUND_LITERAL_EXPR: @@ -9523,7 +9534,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* Here to do an ordinary binary operator. */ binop: - expand_operands (TREE_OPERAND (exp, 0), TREE_OPERAND (exp, 1), + expand_operands (treeop0, treeop1, subtarget, &op0, &op1, EXPAND_NORMAL); binop2: this_optab = optab_for_tree_code (code, type, optab_default);