From 3403a1a9597dd6f853c25aff2290a16d3a9c9d00 Mon Sep 17 00:00:00 2001 From: Anatoly Sokolov Date: Fri, 31 Jul 2015 00:25:29 +0300 Subject: [PATCH] Use lowpart_subreg instead of simplify_gen_subreg From-SVN: r226417 --- gcc/ChangeLog | 13 +++++++++++++ gcc/cfgexpand.c | 19 +++++-------------- gcc/combine.c | 4 +--- gcc/emit-rtl.c | 5 +---- gcc/expr.c | 4 +--- gcc/loop-iv.c | 11 ----------- gcc/rtl.h | 5 +---- gcc/simplify-rtx.c | 15 ++++++++++++--- 8 files changed, 34 insertions(+), 42 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index af6b1b44f0b..1eca23df1e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2015-07-30 Anatoly Sokolov + + * rtl.h (lowpart_subreg): Move in file. + * loop-iv.c (lowpart_subreg): Move to... + * simplify-rtx.c (lowpart_subreg): ...here. + (simplify_binary_operation_1): Use lowpart_subreg instead of + simplify_gen_subreg. + * expr.c (expand_expr_real_2): Ditto. + * emit-rtl.c (gen_lowpart_common): Ditto. + * combine.c (gen_lowpart_for_combine): Ditto. + * cfgexpand.c (convert_debug_memory_address, expand_debug_expr, + expand_debug_source_expr): Ditto. + 2015-07-30 Richard Sandiford * builtins.c (HAVE_atomic_clear, gen_atomic_clear): Delete. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index a047632ef75..8ff79abf691 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -3632,9 +3632,7 @@ convert_debug_memory_address (machine_mode mode, rtx x, return x; if (GET_MODE_PRECISION (mode) < GET_MODE_PRECISION (xmode)) - x = simplify_gen_subreg (mode, x, xmode, - subreg_lowpart_offset - (mode, xmode)); + x = lowpart_subreg (mode, x, xmode); else if (POINTERS_EXTEND_UNSIGNED > 0) x = gen_rtx_ZERO_EXTEND (mode, x); else if (!POINTERS_EXTEND_UNSIGNED) @@ -3850,9 +3848,7 @@ expand_debug_expr (tree exp) if (SCALAR_INT_MODE_P (opmode) && (GET_MODE_PRECISION (opmode) < GET_MODE_PRECISION (inner_mode))) - op1 = simplify_gen_subreg (opmode, op1, inner_mode, - subreg_lowpart_offset (opmode, - inner_mode)); + op1 = lowpart_subreg (opmode, op1, inner_mode); } break; default: @@ -4011,9 +4007,7 @@ expand_debug_expr (tree exp) } else if (CONSTANT_P (op0) || GET_MODE_PRECISION (mode) <= GET_MODE_PRECISION (inner_mode)) - op0 = simplify_gen_subreg (mode, op0, inner_mode, - subreg_lowpart_offset (mode, - inner_mode)); + op0 = lowpart_subreg (mode, op0, inner_mode); else if (UNARY_CLASS_P (exp) ? TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))) : unsignedp) @@ -4141,9 +4135,7 @@ expand_debug_expr (tree exp) offmode = TYPE_MODE (TREE_TYPE (offset)); if (addrmode != offmode) - op1 = simplify_gen_subreg (addrmode, op1, offmode, - subreg_lowpart_offset (addrmode, - offmode)); + op1 = lowpart_subreg (addrmode, op1, offmode); /* Don't use offset_address here, we don't need a recognizable address, and we don't want to generate @@ -4868,8 +4860,7 @@ expand_debug_source_expr (tree exp) } else if (CONSTANT_P (op0) || GET_MODE_BITSIZE (mode) <= GET_MODE_BITSIZE (inner_mode)) - op0 = simplify_gen_subreg (mode, op0, inner_mode, - subreg_lowpart_offset (mode, inner_mode)); + op0 = lowpart_subreg (mode, op0, inner_mode); else if (TYPE_UNSIGNED (TREE_TYPE (exp))) op0 = simplify_gen_unary (ZERO_EXTEND, mode, op0, inner_mode); else diff --git a/gcc/combine.c b/gcc/combine.c index e47cbc4552b..4a92f55c8a0 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11194,10 +11194,8 @@ gen_lowpart_for_combine (machine_mode omode, rtx x) include an explicit SUBREG or we may simplify it further in combine. */ else { - int offset = 0; rtx res; - offset = subreg_lowpart_offset (omode, imode); if (imode == VOIDmode) { imode = int_mode_for_mode (omode); @@ -11205,7 +11203,7 @@ gen_lowpart_for_combine (machine_mode omode, rtx x) if (x == NULL) goto fail; } - res = simplify_gen_subreg (omode, x, imode, offset); + res = lowpart_subreg (omode, x, imode); if (res) return res; } diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index caa33b81f62..d211e6b0ce5 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -1377,7 +1377,6 @@ gen_lowpart_common (machine_mode mode, rtx x) { int msize = GET_MODE_SIZE (mode); int xsize; - int offset = 0; machine_mode innermode; /* Unfortunately, this routine doesn't take a parameter for the mode of X, @@ -1405,8 +1404,6 @@ gen_lowpart_common (machine_mode mode, rtx x) if (SCALAR_FLOAT_MODE_P (mode) && msize > xsize) return 0; - offset = subreg_lowpart_offset (mode, innermode); - if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND) && (GET_MODE_CLASS (mode) == MODE_INT || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT)) @@ -1429,7 +1426,7 @@ gen_lowpart_common (machine_mode mode, rtx x) else if (GET_CODE (x) == SUBREG || REG_P (x) || GET_CODE (x) == CONCAT || GET_CODE (x) == CONST_VECTOR || CONST_DOUBLE_AS_FLOAT_P (x) || CONST_SCALAR_INT_P (x)) - return simplify_gen_subreg (mode, x, innermode, offset); + return lowpart_subreg (mode, x, innermode); /* Otherwise, we can't do this. */ return 0; diff --git a/gcc/expr.c b/gcc/expr.c index 899a42c7e7b..46084c2efec 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8137,9 +8137,7 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode, inner_mode = TYPE_MODE (inner_type); if (modifier == EXPAND_INITIALIZER) - op0 = simplify_gen_subreg (mode, op0, inner_mode, - subreg_lowpart_offset (mode, - inner_mode)); + op0 = lowpart_subreg (mode, op0, inner_mode); else op0= convert_modes (mode, inner_mode, op0, TYPE_UNSIGNED (inner_type)); diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c index cafde4ab83b..6e9cc8cf09e 100644 --- a/gcc/loop-iv.c +++ b/gcc/loop-iv.c @@ -205,17 +205,6 @@ dump_iv_info (FILE *file, struct rtx_iv *iv) fprintf (file, " (first special)"); } -/* Generates a subreg to get the least significant part of EXPR (in mode - INNER_MODE) to OUTER_MODE. */ - -rtx -lowpart_subreg (machine_mode outer_mode, rtx expr, - machine_mode inner_mode) -{ - return simplify_gen_subreg (outer_mode, expr, inner_mode, - subreg_lowpart_offset (outer_mode, inner_mode)); -} - static void check_iv_ref_table_size (void) { diff --git a/gcc/rtl.h b/gcc/rtl.h index f363ed42160..5e0239740a5 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -2731,10 +2731,6 @@ extern rtx immed_double_const (HOST_WIDE_INT, HOST_WIDE_INT, machine_mode); #endif -/* In loop-iv.c */ - -extern rtx lowpart_subreg (machine_mode, rtx, machine_mode); - /* In varasm.c */ extern rtx force_const_mem (machine_mode, rtx); @@ -2866,6 +2862,7 @@ extern rtx simplify_subreg (machine_mode, rtx, machine_mode, unsigned int); extern rtx simplify_gen_subreg (machine_mode, rtx, machine_mode, unsigned int); +extern rtx lowpart_subreg (machine_mode, rtx, machine_mode); extern rtx simplify_replace_fn_rtx (rtx, const_rtx, rtx (*fn) (rtx, const_rtx, void *), void *); extern rtx simplify_replace_rtx (rtx, const_rtx, rtx); diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 1f603711cf7..ad003d83cd5 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3224,9 +3224,7 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, GET_MODE (SUBREG_REG (op0)), XEXP (SUBREG_REG (op0), 0), tmp); - return simplify_gen_subreg (mode, tmp, inner_mode, - subreg_lowpart_offset (mode, - inner_mode)); + return lowpart_subreg (mode, tmp, inner_mode); } canonicalize_shift: if (SHIFT_COUNT_TRUNCATED && CONST_INT_P (op1)) @@ -6027,6 +6025,17 @@ simplify_gen_subreg (machine_mode outermode, rtx op, return NULL_RTX; } +/* Generates a subreg to get the least significant part of EXPR (in mode + INNER_MODE) to OUTER_MODE. */ + +rtx +lowpart_subreg (machine_mode outer_mode, rtx expr, + machine_mode inner_mode) +{ + return simplify_gen_subreg (outer_mode, expr, inner_mode, + subreg_lowpart_offset (outer_mode, inner_mode)); +} + /* Simplify X, an rtx expression. Return the simplified expression or NULL if no simplifications -- 2.30.2