summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2015-07-30 21:25:29 +0000
committeraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2015-07-30 21:25:29 +0000
commita8a727ad2906469fcdc91382dcad1426499797be (patch)
tree7d30b2fde4a0cf5ac3d5774d1ff65ab67f3ba134
parente880695cc6c65706bfee51b184444826a6a1e179 (diff)
downloadgcc-a8a727ad2906469fcdc91382dcad1426499797be.tar.gz
Use lowpart_subreg instead of simplify_gen_subreg
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226417 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/cfgexpand.c19
-rw-r--r--gcc/combine.c4
-rw-r--r--gcc/emit-rtl.c5
-rw-r--r--gcc/expr.c4
-rw-r--r--gcc/loop-iv.c11
-rw-r--r--gcc/rtl.h5
-rw-r--r--gcc/simplify-rtx.c15
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 <aesok@post.ru>
+
+ * 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 <richard.sandiford@arm.com>
* 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