aboutsummaryrefslogtreecommitdiff
path: root/gcc/print-tree.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-11-15 15:19:36 +0100
committerRichard Biener <rguenther@suse.de>2021-11-16 11:31:05 +0100
commitf98f373dd822b35c52356b753d528924e9f89678 (patch)
treea84767d9dadd877b6221017c09dd4e461917e46c /gcc/print-tree.c
parentd699f03720fce57b319276226ac4a463a8538e9f (diff)
downloadgcc-f98f373dd822b35c52356b753d528924e9f89678.zip
gcc-f98f373dd822b35c52356b753d528924e9f89678.tar.gz
gcc-f98f373dd822b35c52356b753d528924e9f89678.tar.bz2
tree-optimization/102880 - make PHI-OPT recognize more CFGs
This allows extra edges into the middle BB for the PHI-OPT transforms using replace_phi_edge_with_variable that do not end up moving stmts from that middle BB. This avoids regressing gcc.dg/tree-ssa/ssa-hoist-4.c with the actual fix for PR102880 where CFG cleanup has the choice to remove two forwarders and picks "the wrong" leading to if (a > b) / /\ / / <BB> / | # PHI <a, b> rather than if (a > b) | /\ | <BB> \ | / \ | # PHI <a, b, b> but it's relatively straight-forward to support extra edges into the middle-BB in paths ending in replace_phi_edge_with_variable and that do not require moving stmts. That's because we really only want to remove the edge from the condition to the middle BB. Of course actually doing that means updating dominators in non-trival ways which is why I kept the original code for the single edge case and simply defer to CFG cleanup by adjusting the condition for the complicated case. The testcase needs to be a GIMPLE one since it's quite unreliable to produce the desired CFG. 2021-11-15 Richard Biener <rguenther@suse.de> PR tree-optimization/102880 * tree-ssa-phiopt.c (tree_ssa_phiopt_worker): Push single_pred (bb1) condition to places that really need it. (match_simplify_replacement): Likewise. (value_replacement): Likewise. (replace_phi_edge_with_variable): Deal with extra edges into the middle BB. * gcc.dg/tree-ssa/phi-opt-26.c: New testcase.
Diffstat (limited to 'gcc/print-tree.c')
0 files changed, 0 insertions, 0 deletions