mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 22:51:06 +08:00
re PR tree-optimization/79034 (error: missing PHI def in verify_gimple_in_cfg)
2016-01-10 Richard Biener <rguenther@suse.de> PR tree-optimization/79034 * tree-call-cdce.c (shrink_wrap_one_built_in_call_with_conds): Propagate out degenerate PHIs in the joiner. * g++.dg/torture/pr79034.C: New testcase. From-SVN: r244274
This commit is contained in:
parent
a0843aedb8
commit
aae23693f8
@ -1,3 +1,9 @@
|
||||
2016-01-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/79034
|
||||
* tree-call-cdce.c (shrink_wrap_one_built_in_call_with_conds):
|
||||
Propagate out degenerate PHIs in the joiner.
|
||||
|
||||
2017-01-10 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* ipa-icf.c (sort_sem_items_by_decl_uid): New function.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-01-10 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/79034
|
||||
* g++.dg/torture/pr79034.C: New testcase.
|
||||
|
||||
2017-01-10 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* gcc.dg/ipa/ipa-icf-1.c: Change scanned pattern.
|
||||
|
52
gcc/testsuite/g++.dg/torture/pr79034.C
Normal file
52
gcc/testsuite/g++.dg/torture/pr79034.C
Normal file
@ -0,0 +1,52 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
extern "C" {
|
||||
float sqrtf(float);
|
||||
}
|
||||
|
||||
class T {
|
||||
public:
|
||||
float floats[1];
|
||||
|
||||
inline float length() const {
|
||||
return sqrtf(floats[0]);
|
||||
}
|
||||
};
|
||||
|
||||
void destruct(void *);
|
||||
|
||||
class Container {
|
||||
|
||||
T Ts[1];
|
||||
|
||||
public:
|
||||
~Container() {
|
||||
destruct((void *)Ts);
|
||||
}
|
||||
|
||||
T& operator[](int n) {
|
||||
return Ts[0];
|
||||
}
|
||||
};
|
||||
|
||||
void fill(Container&);
|
||||
|
||||
void doit()
|
||||
{
|
||||
Container data;
|
||||
float max = 10;
|
||||
|
||||
int i, j, k;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
for (j = 1; j < 10; j++) {
|
||||
if (max < 5)
|
||||
break;
|
||||
fill( data);
|
||||
max = data[0].length();
|
||||
for (k = 1; k < j; k++) {
|
||||
max = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -811,7 +811,18 @@ shrink_wrap_one_built_in_call_with_conds (gcall *bi_call, vec <gimple *> conds,
|
||||
if (EDGE_COUNT (join_tgt_in_edge_from_call->dest->preds) > 1)
|
||||
join_tgt_bb = split_edge (join_tgt_in_edge_from_call);
|
||||
else
|
||||
join_tgt_bb = join_tgt_in_edge_from_call->dest;
|
||||
{
|
||||
join_tgt_bb = join_tgt_in_edge_from_call->dest;
|
||||
/* We may have degenerate PHIs in the destination. Propagate
|
||||
those out. */
|
||||
for (gphi_iterator i = gsi_start_phis (join_tgt_bb); !gsi_end_p (i);)
|
||||
{
|
||||
gphi *phi = i.phi ();
|
||||
replace_uses_by (gimple_phi_result (phi),
|
||||
gimple_phi_arg_def (phi, 0));
|
||||
remove_phi_node (&i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user