diff options
author | Richard Biener <rguenther@suse.de> | 2014-01-08 08:59:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-01-08 08:59:29 +0000 |
commit | 0bd34ae42178978a45a5ad947f10a66d41d68f77 (patch) | |
tree | 094682c8d689ea456ddeaee532cbdfeba9f2278a | |
parent | 3c92da9027c684296d644deb2cf3e6316ed3c867 (diff) | |
download | gcc-0bd34ae42178978a45a5ad947f10a66d41d68f77.zip gcc-0bd34ae42178978a45a5ad947f10a66d41d68f77.tar.gz gcc-0bd34ae42178978a45a5ad947f10a66d41d68f77.tar.bz2 |
re PR middle-end/59471 (ICE using vector extensions (non-top-level BIT_FIELD_REF, IMAGPART_EXPR or REALPART_EXPR))
2014-01-08 Richard Biener <rguenther@suse.de>
PR middle-end/59471
* gimplify.c (gimplify_expr): Gimplify register-register type
VIEW_CONVERT_EXPRs to separate stmts.
* gcc.dg/pr59471.c: New testcase.
From-SVN: r206420
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr59471.c | 16 |
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 986ffaf..1f7c1a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59471 + * gimplify.c (gimplify_expr): Gimplify register-register type + VIEW_CONVERT_EXPRs to separate stmts. + 2014-01-07 Jeff Law <law@redhat.com> PR middle-end/53623 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index a6e0c75..202d084 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7373,12 +7373,22 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, TREE_TYPE (*expr_p)); break; + case VIEW_CONVERT_EXPR: + if (is_gimple_reg_type (TREE_TYPE (*expr_p)) + && is_gimple_reg_type (TREE_TYPE (TREE_OPERAND (*expr_p, 0)))) + { + ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, + post_p, is_gimple_val, fb_rvalue); + recalculate_side_effects (*expr_p); + break; + } + /* Fallthru. */ + case ARRAY_REF: case ARRAY_RANGE_REF: case REALPART_EXPR: case IMAGPART_EXPR: case COMPONENT_REF: - case VIEW_CONVERT_EXPR: ret = gimplify_compound_lval (expr_p, pre_p, post_p, fallback ? fallback : fb_rvalue); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 442eb03..3ebbab4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59471 + * gcc.dg/pr59471.c: New testcase. + 2014-01-07 Jeff Law <law@redhat.com> PR middle-end/53623 diff --git a/gcc/testsuite/gcc.dg/pr59471.c b/gcc/testsuite/gcc.dg/pr59471.c new file mode 100644 index 0000000..8ff7136 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59471.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +typedef unsigned char uint8x4_t +__attribute__ ((__vector_size__ (4))); + +typedef unsigned short uint16x8_t +__attribute__ ((__vector_size__ (16))); + +typedef unsigned int uint32x4_t +__attribute__ ((__vector_size__ (16))); + +uint8x4_t +foo (uint16x8_t x) +{ + return (uint8x4_t) ((uint32x4_t) x)[0]; +} |