mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
tree-optimization/117417 - ICE with complex load optimization
When we decompose a complex load only used as real and imaginary parts we fail to honor IL constraints which are that a BIT_FIELD_REF of register type should be outermost in a ref. The following simply avoids the transform when the complex load has such a BIT_FIELD_REF. PR tree-optimization/117417 * tree-ssa-forwprop.cc (pass_forwprop::execute): Avoid decomposing BIT_FIELD_REF complex load. * gcc.dg/torture/pr117417.c: New testcase.
This commit is contained in:
parent
a552a808f0
commit
d976daa931
16
gcc/testsuite/gcc.dg/torture/pr117417.c
Normal file
16
gcc/testsuite/gcc.dg/torture/pr117417.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef __attribute__((__vector_size__ (8))) double V;
|
||||
int bar (int a, V *p)
|
||||
{
|
||||
V v;
|
||||
v = *p;
|
||||
a += *(_Complex short *) &v;
|
||||
return a;
|
||||
}
|
||||
V x;
|
||||
int
|
||||
foo ()
|
||||
{
|
||||
return bar (0, &x);
|
||||
}
|
@ -3687,8 +3687,8 @@ pass_forwprop::execute (function *fun)
|
||||
else if (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE
|
||||
&& gimple_assign_load_p (stmt)
|
||||
&& !gimple_has_volatile_ops (stmt)
|
||||
&& (TREE_CODE (gimple_assign_rhs1 (stmt))
|
||||
!= TARGET_MEM_REF)
|
||||
&& TREE_CODE (rhs) != TARGET_MEM_REF
|
||||
&& TREE_CODE (rhs) != BIT_FIELD_REF
|
||||
&& !stmt_can_throw_internal (fun, stmt))
|
||||
{
|
||||
/* Rewrite loads used only in real/imagpart extractions to
|
||||
|
Loading…
Reference in New Issue
Block a user