ssa: Fix up maybe_rewrite_mem_ref_base complex type handling [PR116034]
The folding into REALPART_EXPR is correct, used only when the mem_offset is zero, but for IMAGPART_EXPR it didn't check the exact offset value (just that it is not 0). The following patch fixes that by using IMAGPART_EXPR only if the offset is right and using BITFIELD_REF or whatever else otherwise. 2024-07-23 Jakub Jelinek <jakub@redhat.com> Andrew Pinski <quic_apinski@quicinc.com> PR tree-optimization/116034 * tree-ssa.cc (maybe_rewrite_mem_ref_base): Only use IMAGPART_EXPR if MEM_REF offset is equal to element type size. * gcc.dg/pr116034.c: New test. (cherry picked from commit b9cefd67a2a464a3c9413e6b3f28e7dc7a9ef162)
This commit is contained in:
parent
81f356f9f7
commit
084768c865
2 changed files with 26 additions and 1 deletions
22
gcc/testsuite/gcc.dg/pr116034.c
Normal file
22
gcc/testsuite/gcc.dg/pr116034.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* PR tree-optimization/116034 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O1 -fno-strict-aliasing" } */
|
||||
|
||||
int g;
|
||||
|
||||
static inline int
|
||||
foo (_Complex unsigned short c)
|
||||
{
|
||||
__builtin_memmove (&g, 1 + (char *) &c, 2);
|
||||
return g;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (__SIZEOF_SHORT__ == 2
|
||||
&& __CHAR_BIT__ == 8
|
||||
&& (foo (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 0x100 : 1)
|
||||
!= (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 1 : 0x100)))
|
||||
__builtin_abort ();
|
||||
}
|
|
@ -1506,7 +1506,10 @@ maybe_rewrite_mem_ref_base (tree *tp, bitmap suitable_for_renaming)
|
|||
}
|
||||
else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE
|
||||
&& useless_type_conversion_p (TREE_TYPE (*tp),
|
||||
TREE_TYPE (TREE_TYPE (sym))))
|
||||
TREE_TYPE (TREE_TYPE (sym)))
|
||||
&& (integer_zerop (TREE_OPERAND (*tp, 1))
|
||||
|| tree_int_cst_equal (TREE_OPERAND (*tp, 1),
|
||||
TYPE_SIZE_UNIT (TREE_TYPE (*tp)))))
|
||||
{
|
||||
*tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1))
|
||||
? REALPART_EXPR : IMAGPART_EXPR,
|
||||
|
|
Loading…
Add table
Reference in a new issue