mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-25 19:26:10 +08:00
re PR tree-optimization/44562 (ICE: in get_alias_set, at alias.c:716 with -flto -fstrict-aliasing -fgraphite-identity)
2010-08-25 Richard Guenther <rguenther@suse.de> PR lto/44562 * lto-streamer.c (lto_record_common_node): Do not mess with TYPE_CANONICAL when not in lto. * gimple.c (gimple_register_type): Likewise. * gcc.dg/graphite/id-27.c: New testcase. * gcc.dg/lto/20100825-1_0.c: Likewise. From-SVN: r163545
This commit is contained in:
parent
a2c0ed2ee9
commit
1cf01301ac
@ -1,3 +1,10 @@
|
||||
2010-08-25 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR lto/44562
|
||||
* lto-streamer.c (lto_record_common_node): Do not mess with
|
||||
TYPE_CANONICAL when not in lto.
|
||||
* gimple.c (gimple_register_type): Likewise.
|
||||
|
||||
2010-08-25 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/45316
|
||||
|
11
gcc/gimple.c
11
gcc/gimple.c
@ -4215,8 +4215,9 @@ gimple_register_type (tree t)
|
||||
gcc_assert (TYPE_P (t));
|
||||
|
||||
/* In TYPE_CANONICAL we cache the result of gimple_register_type.
|
||||
It is initially set to NULL during LTO streaming. */
|
||||
if (TYPE_CANONICAL (t))
|
||||
It is initially set to NULL during LTO streaming.
|
||||
But do not mess with TYPE_CANONICAL when not in WPA or link phase. */
|
||||
if (in_lto_p && TYPE_CANONICAL (t))
|
||||
return TYPE_CANONICAL (t);
|
||||
|
||||
/* Always register the main variant first. This is important so we
|
||||
@ -4282,12 +4283,14 @@ gimple_register_type (tree t)
|
||||
TYPE_NEXT_REF_TO (t) = NULL_TREE;
|
||||
}
|
||||
|
||||
TYPE_CANONICAL (t) = new_type;
|
||||
if (in_lto_p)
|
||||
TYPE_CANONICAL (t) = new_type;
|
||||
t = new_type;
|
||||
}
|
||||
else
|
||||
{
|
||||
TYPE_CANONICAL (t) = t;
|
||||
if (in_lto_p)
|
||||
TYPE_CANONICAL (t) = t;
|
||||
*slot = (void *) t;
|
||||
}
|
||||
|
||||
|
@ -524,7 +524,8 @@ lto_record_common_node (tree *nodep, VEC(tree, heap) **common_nodes,
|
||||
{
|
||||
/* Type merging will get confused by the canonical types as they
|
||||
are set by the middle-end. */
|
||||
TYPE_CANONICAL (node) = NULL_TREE;
|
||||
if (in_lto_p)
|
||||
TYPE_CANONICAL (node) = NULL_TREE;
|
||||
*nodep = node = gimple_register_type (node);
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2010-08-25 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR lto/44562
|
||||
* gcc.dg/graphite/id-27.c: New testcase.
|
||||
* gcc.dg/lto/20100825-1_0.c: Likewise.
|
||||
|
||||
2010-08-25 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/45316
|
||||
|
17
gcc/testsuite/gcc.dg/graphite/id-27.c
Normal file
17
gcc/testsuite/gcc.dg/graphite/id-27.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-options "-O2 -fgraphite-identity -flto" { target lto } } */
|
||||
|
||||
typedef long ll;
|
||||
void foo (int n, ll *p)
|
||||
{
|
||||
while (n--)
|
||||
*p += *p;
|
||||
}
|
||||
|
||||
typedef long long lll;
|
||||
void bar (int n, lll *p)
|
||||
{
|
||||
while (n--)
|
||||
*p += *p;
|
||||
}
|
||||
|
||||
int main() { return 0; }
|
57
gcc/testsuite/gcc.dg/lto/20100825-1_0.c
Normal file
57
gcc/testsuite/gcc.dg/lto/20100825-1_0.c
Normal file
@ -0,0 +1,57 @@
|
||||
/* { dg-lto-do link } */
|
||||
/* { dg-lto-options { { -O3 -flto } } } */
|
||||
|
||||
typedef unsigned int UINT32;
|
||||
typedef unsigned long long UINT64;
|
||||
typedef struct { UINT64 w[2]; } UINT128;
|
||||
void _bid_to_dpd128 (UINT128 *, UINT128 *);
|
||||
static const int short_recip_scale[] = {
|
||||
1,
|
||||
65 - 64,
|
||||
69 - 64,
|
||||
71 - 64,
|
||||
75 - 64,
|
||||
78 - 64,
|
||||
81 - 64,
|
||||
85 - 64,
|
||||
88 - 64,
|
||||
91 - 64,
|
||||
95 - 64,
|
||||
98 - 64,
|
||||
101 - 64,
|
||||
105 - 64,
|
||||
108 - 64,
|
||||
111 - 64,
|
||||
115 - 64,
|
||||
118 - 64
|
||||
};
|
||||
|
||||
void _bid_to_dpd128 (UINT128 *, UINT128 *);
|
||||
|
||||
void
|
||||
_bid_to_dpd128 (UINT128 *pres, UINT128 *px) {
|
||||
UINT128 res;
|
||||
unsigned int comb;
|
||||
UINT128 bcoeff;
|
||||
UINT128 BH;
|
||||
UINT64 BL, d109;
|
||||
unsigned int amount;
|
||||
UINT128 x = *px;
|
||||
|
||||
comb = (x.w[1] ) >> 46;
|
||||
if ((comb & 0x1e000) == 0x1e000) {
|
||||
res = x;
|
||||
} else {
|
||||
bcoeff.w[1] = (x.w[1] & 0x0001ffffffffffffull);
|
||||
bcoeff.w[0] = x.w[0];
|
||||
amount = 9;
|
||||
BH.w[0] = (BH.w[0] >> amount) | (BH.w[1] << (64 - amount));
|
||||
BL = bcoeff.w[0] - BH.w[0] * 1000000000000000000ull;
|
||||
d109 = 0x3333333333333334ull;
|
||||
{ UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2; CXH = (BH.w[0]) >> 32; CXL = (UINT32)(BH.w[0]); CYH = (d109) >> 32; CYL = (UINT32)(d109); PM = CXH*CYL; PH = CXH*CYH; PL = CXL*CYL; PM2 = CXL*CYH; PH += (PM>>32); PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); };
|
||||
{ UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2; CXH = (BL) >> 32; CXL = (UINT32)(BL); CYH = (d109) >> 32; CYL = (UINT32)(d109); PM = CXH*CYL; PH = CXH*CYH; PL = CXL*CYL; PM2 = CXL*CYH; PH += (PM>>32); PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); };
|
||||
}
|
||||
*pres = res;
|
||||
}
|
||||
|
||||
int main() { return 0; }
|
Loading…
Reference in New Issue
Block a user