diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-12-02 17:51:08 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-12-02 17:51:08 +0000 |
commit | fddcfa5b84bf8a063e3e1347d787df5a36beceb2 (patch) | |
tree | 6044144f87e20cc2c9695e330d90f5a6162fe782 /gcc/fold-const.c | |
parent | c0e0174bbd7009d34e78484bbaa9e0353939819c (diff) | |
download | gcc-fddcfa5b84bf8a063e3e1347d787df5a36beceb2.zip gcc-fddcfa5b84bf8a063e3e1347d787df5a36beceb2.tar.gz gcc-fddcfa5b84bf8a063e3e1347d787df5a36beceb2.tar.bz2 |
Tighten check for vector types in fold_convertible_p (PR 92741)
In this PR, IPA-CP was misled into using NOP_EXPR rather than
VIEW_CONVERT_EXPR to reinterpret a vector of 4 shorts as a vector
of 2 ints. This tripped the tree-cfg.c assert I'd added in r278245.
2019-12-02 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR middle-end/92741
* fold-const.c (fold_convertible_p): Check vector types more
thoroughly.
gcc/testsuite/
PR middle-end/92741
* gcc.dg/pr92741.c: New test.
From-SVN: r278910
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 02daacd..d7a77a98 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2375,10 +2375,15 @@ fold_convertible_p (const_tree type, const_tree arg) case REAL_TYPE: case FIXED_POINT_TYPE: - case VECTOR_TYPE: case VOID_TYPE: return TREE_CODE (type) == TREE_CODE (orig); + case VECTOR_TYPE: + return (VECTOR_TYPE_P (orig) + && known_eq (TYPE_VECTOR_SUBPARTS (type), + TYPE_VECTOR_SUBPARTS (orig)) + && fold_convertible_p (TREE_TYPE (type), TREE_TYPE (orig))); + default: return false; } |