sra: Only verify sizes of scalar accesses (PR 93845)
the testcase is another example - in addition to recent PR 93516 - where the SRA access verifier is confused by the fact that get_ref_base_extent can return different sizes for the same type, depending whether they are COMPONENT_REF or not. In the previous bug I decided to keep the verifier check for aggregate type even though it is not really important and instead avoid easily detectable type-within-the-same-type situation. This testcase is however a result of a fairly random looking type cast and so cannot be handled in the same way. Because the check is not really important for aggregates, this patch simply disables it for non-register types. 2020-02-21 Martin Jambor <mjambor@suse.cz> PR tree-optimization/93845 * tree-sra.c (verify_sra_access_forest): Only test access size of scalar types. testsuite/ * g++.dg/tree-ssa/pr93845.C: New test.
This commit is contained in:
parent
3abfd4f341
commit
4d6bf96b58
4 changed files with 43 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-02-21 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/93845
|
||||
* tree-sra.c (verify_sra_access_forest): Only test access size of
|
||||
scalar types.
|
||||
|
||||
2020-02-21 Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
* config/gcn/gcn.c (gcn_hard_regno_mode_ok): Align VGPR pairs.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-02-21 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/93845
|
||||
* g++.dg/tree-ssa/pr93845.C: New test.
|
||||
|
||||
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* gcc.target/aarch64/sve/rsqrt_1.c: New test.
|
||||
|
|
30
gcc/testsuite/g++.dg/tree-ssa/pr93845.C
Normal file
30
gcc/testsuite/g++.dg/tree-ssa/pr93845.C
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1" } */
|
||||
|
||||
struct g;
|
||||
struct h {
|
||||
g *operator->();
|
||||
};
|
||||
class i {
|
||||
void *a;
|
||||
int b;
|
||||
|
||||
public:
|
||||
template <typename f> f j() { return *static_cast<f *>(this); }
|
||||
};
|
||||
struct k : i {};
|
||||
struct l : k {};
|
||||
struct m {
|
||||
i n();
|
||||
i o(l, l, int);
|
||||
};
|
||||
struct g {
|
||||
void m_fn4(k);
|
||||
};
|
||||
h a;
|
||||
i b;
|
||||
i m::n() {
|
||||
l c, d, e = o(d, c, 0).j<l>();
|
||||
a->m_fn4(e);
|
||||
return b;
|
||||
}
|
|
@ -2355,7 +2355,8 @@ verify_sra_access_forest (struct access *root)
|
|||
gcc_assert (offset == access->offset);
|
||||
gcc_assert (access->grp_unscalarizable_region
|
||||
|| size == max_size);
|
||||
gcc_assert (max_size == access->size);
|
||||
gcc_assert (!is_gimple_reg_type (access->type)
|
||||
|| max_size == access->size);
|
||||
gcc_assert (reverse == access->reverse);
|
||||
|
||||
if (access->first_child)
|
||||
|
|
Loading…
Add table
Reference in a new issue