aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-06-26 11:21:43 +0200
committerRichard Biener <rguenther@suse.de>2023-06-26 12:59:06 +0200
commitab6eac20f00761695c69b555f6b0a026bc25770d (patch)
tree2b0129d2ea859db3bf13648b4a9d431381883c1e
parent78da7a4278a1417f1060fd8f664291026e5856fb (diff)
downloadgcc-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.cc4
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.,