aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2018-10-18 12:34:13 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2018-10-18 05:34:13 -0700
commitaff3ce41c4abecead6d05a0422d912468d2c893c (patch)
tree1ea36513884c85291ccff09c1dcc32556eb845db /gcc
parent200045a924f5b3442950ab923070b23f5085b397 (diff)
downloadgcc-aff3ce41c4abecead6d05a0422d912468d2c893c.zip
gcc-aff3ce41c4abecead6d05a0422d912468d2c893c.tar.gz
gcc-aff3ce41c4abecead6d05a0422d912468d2c893c.tar.bz2
Call simplify_gen_subreg to simplify subreg of vec_merge
Simplify (subreg (vec_merge (X) (vector) (const_int ((1 << N) | M))) (N * sizeof (outermode))) to (subreg (X) (N * sizeof (outermode))) * simplify-rtx.c (simplify_subreg): Call simplify_gen_subreg to simplify subreg of vec_merge. From-SVN: r265267
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/simplify-rtx.c13
2 files changed, 12 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2cc497e..87519ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-10-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ * simplify-rtx.c (simplify_subreg): Call simplify_gen_subreg
+ to simplify subreg of vec_merge.
+
2018-10-18 Richard Biener <rguenther@suse.de>
* config/i386/i386.c: Fix costing of vector FMA.
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index b0cf3bb..ccf9216 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -6601,20 +6601,21 @@ simplify_subreg (machine_mode outermode, rtx op,
return NULL_RTX;
}
- /* Return X for
- (subreg (vec_merge (vec_duplicate X)
+ /* Simplify
+ (subreg (vec_merge (X)
(vector)
(const_int ((1 << N) | M)))
- (N * sizeof (X)))
+ (N * sizeof (outermode)))
+ to
+ (subreg (X) (N * sizeof (outermode)))
*/
unsigned int idx;
if (constant_multiple_p (byte, GET_MODE_SIZE (outermode), &idx)
&& GET_CODE (op) == VEC_MERGE
- && GET_CODE (XEXP (op, 0)) == VEC_DUPLICATE
- && GET_MODE (XEXP (XEXP (op, 0), 0)) == outermode
+ && GET_MODE_INNER (innermode) == outermode
&& CONST_INT_P (XEXP (op, 2))
&& (UINTVAL (XEXP (op, 2)) & (HOST_WIDE_INT_1U << idx)) != 0)
- return XEXP (XEXP (op, 0), 0);
+ return simplify_gen_subreg (outermode, XEXP (op, 0), innermode, byte);
/* A SUBREG resulting from a zero extension may fold to zero if
it extracts higher bits that the ZERO_EXTEND's source bits. */