diff options
author | Richard Biener <rguenther@suse.de> | 2023-06-26 11:21:43 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-06-26 12:59:06 +0200 |
commit | ab6eac20f00761695c69b555f6b0a026bc25770d (patch) | |
tree | 2b0129d2ea859db3bf13648b4a9d431381883c1e | |
parent | 78da7a4278a1417f1060fd8f664291026e5856fb (diff) | |
download | gcc-ab6eac20f00761695c69b555f6b0a026bc25770d.zip gcc-ab6eac20f00761695c69b555f6b0a026bc25770d.tar.gz gcc-ab6eac20f00761695c69b555f6b0a026bc25770d.tar.bz2 |
tree-optimization/110392 - ICE with predicate analysis
Feeding not optimized IL can result in predicate normalization
to simplify things so a predicate can get true or false. The
following re-orders the early exit in that case to come after
simplification and normalization to take care of that.
PR tree-optimization/110392
* gimple-predicate-analysis.cc (uninit_analysis::is_use_guarded):
Do early exits on true/false predicate only after normalization.
-rw-r--r-- | gcc/gimple-predicate-analysis.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/gimple-predicate-analysis.cc b/gcc/gimple-predicate-analysis.cc index 7f20f81..373163b 100644 --- a/gcc/gimple-predicate-analysis.cc +++ b/gcc/gimple-predicate-analysis.cc @@ -2216,11 +2216,11 @@ uninit_analysis::is_use_guarded (gimple *use_stmt, basic_block use_bb, return false; use_preds.simplify (use_stmt, /*is_use=*/true); + use_preds.normalize (use_stmt, /*is_use=*/true); if (use_preds.is_false ()) return true; if (use_preds.is_true ()) return false; - use_preds.normalize (use_stmt, /*is_use=*/true); /* Try to prune the dead incoming phi edges. */ if (!overlap (phi, opnds, visited, use_preds)) @@ -2238,11 +2238,11 @@ uninit_analysis::is_use_guarded (gimple *use_stmt, basic_block use_bb, return false; m_phi_def_preds.simplify (phi); + m_phi_def_preds.normalize (phi); if (m_phi_def_preds.is_false ()) return false; if (m_phi_def_preds.is_true ()) return true; - m_phi_def_preds.normalize (phi); } /* Return true if the predicate guarding the valid definition (i.e., |