[PATCH v2] gcc: do not apply store motion on loop with no exits.

2025-04-26 Thread Xin Wang
The temporary variable will not be wrote back to memory as there
is no exit of inifinite loop, so we prohibit applying store motion
on loops with no exits.

Signed-off-by: Xin Wang 

---
 gcc/tree-ssa-loop-im.cc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gcc/tree-ssa-loop-im.cc b/gcc/tree-ssa-loop-im.cc
index 225964c6215..de0450f5192 100644
--- a/gcc/tree-ssa-loop-im.cc
+++ b/gcc/tree-ssa-loop-im.cc
@@ -3355,6 +3355,9 @@ loop_suitable_for_sm (class loop *loop ATTRIBUTE_UNUSED,
   unsigned i;
   edge ex;
 
+  if (exits.is_empty())
+return false;
+
   FOR_EACH_VEC_ELT (exits, i, ex)
 if (ex->flags & (EDGE_ABNORMAL | EDGE_EH))
   return false;
-- 
2.25.1



[PATCH] gcc: do not apply store motion on loop with no exits. The temporary variable will not be wrote back to memory as there is no exit of inifinite loop, so we prohibit applying store motion on loo

2025-04-26 Thread Xin Wang
Signed-off-by: Xin Wang 

---
 gcc/tree-ssa-loop-im.cc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gcc/tree-ssa-loop-im.cc b/gcc/tree-ssa-loop-im.cc
index 225964c6215..de0450f5192 100644
--- a/gcc/tree-ssa-loop-im.cc
+++ b/gcc/tree-ssa-loop-im.cc
@@ -3355,6 +3355,9 @@ loop_suitable_for_sm (class loop *loop ATTRIBUTE_UNUSED,
   unsigned i;
   edge ex;
 
+  if (exits.is_empty())
+return false;
+
   FOR_EACH_VEC_ELT (exits, i, ex)
 if (ex->flags & (EDGE_ABNORMAL | EDGE_EH))
   return false;
-- 
2.25.1