aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-11-29 10:41:36 +0100
committerRichard Biener <rguenther@suse.de>2022-11-29 12:59:23 +0100
commit063ba138eaa15ceecf23a24906e0e19be98d509d (patch)
tree4fffaf937ce836595671f1db45b14b257b55ab0a /gcc
parentffabce849033e57ebaf60029822b81e981681c21 (diff)
downloadgcc-063ba138eaa15ceecf23a24906e0e19be98d509d.zip
gcc-063ba138eaa15ceecf23a24906e0e19be98d509d.tar.gz
gcc-063ba138eaa15ceecf23a24906e0e19be98d509d.tar.bz2
tree-optimization/106995 - if-conversion and vanishing loops
When we version loops for vectorization during if-conversion it can happen that either loop vanishes because we run some VN and CFG cleanup. If the to-be vectorized part vanishes we already redirect the versioning condition to the original loop. The following does the same in case the original loop vanishes as happened for the testcase in the bug in the past (but no longer). PR tree-optimization/106995 * tree-if-conv.cc (pass_if_conversion::execute): Also redirect the versioning condition to the original loop if this very loop vanished during CFG cleanup.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-if-conv.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc
index 34bb507..64b20b4 100644
--- a/gcc/tree-if-conv.cc
+++ b/gcc/tree-if-conv.cc
@@ -3761,7 +3761,8 @@ pass_if_conversion::execute (function *fun)
if (!gimple_bb (g))
continue;
unsigned ifcvt_loop = tree_to_uhwi (gimple_call_arg (g, 0));
- if (!get_loop (fun, ifcvt_loop))
+ unsigned orig_loop = tree_to_uhwi (gimple_call_arg (g, 1));
+ if (!get_loop (fun, ifcvt_loop) || !get_loop (fun, orig_loop))
{
if (dump_file)
fprintf (dump_file, "If-converted loop vanished\n");