]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Make compute_operand_range a tail call.
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 5 Jul 2023 18:26:00 +0000 (14:26 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Wed, 5 Jul 2023 23:06:31 +0000 (19:06 -0400)
Tweak the routine so it is making a tail call.

* gimple-range-gori.cc (compute_operand_range): Convert to a tail
call.

gcc/gimple-range-gori.cc

index b036ed56f023fc2e28e238f1dab5fbb2b2f69902..6dc15a0ce3fd52aea8b7fbee222b9f843ae2269f 100644 (file)
@@ -725,36 +725,34 @@ gori_compute::compute_operand_range (vrange &r, gimple *stmt,
                             op1_trange, op1_frange, op2_trange, op2_frange);
       if (idx)
        tracer.trailer (idx, "compute_operand", res, name, r);
+      return res;
     }
   // Follow the appropriate operands now.
-  else if (op1_in_chain && op2_in_chain)
-    res = compute_operand1_and_operand2_range (r, handler, lhs, name, src,
-                                              vrel_ptr);
-  else if (op1_in_chain)
+  if (op1_in_chain && op2_in_chain)
+    return compute_operand1_and_operand2_range (r, handler, lhs, name, src,
+                                               vrel_ptr);
+  Value_Range vr;
+  gimple *src_stmt;
+  if (op1_in_chain)
     {
-      Value_Range vr (TREE_TYPE (op1));
+      vr.set_type (TREE_TYPE (op1));
       if (!compute_operand1_range (vr, handler, lhs, src, vrel_ptr))
        return false;
-      gimple *src_stmt = SSA_NAME_DEF_STMT (op1);
-      gcc_checking_assert (src_stmt);
-      // Then feed this range back as the LHS of the defining statement.
-      return compute_operand_range (r, src_stmt, vr, name, src, vrel_ptr);
+      src_stmt = SSA_NAME_DEF_STMT (op1);
     }
-  else if (op2_in_chain)
+  else
     {
-      Value_Range vr (TREE_TYPE (op2));
+      gcc_checking_assert (op2_in_chain);
+      vr.set_type (TREE_TYPE (op2));
       if (!compute_operand2_range (vr, handler, lhs, src, vrel_ptr))
        return false;
-      gimple *src_stmt = SSA_NAME_DEF_STMT (op2);
-      gcc_checking_assert (src_stmt);
-      // Then feed this range back as the LHS of the defining statement.
-      return compute_operand_range (r, src_stmt, vr, name, src, vrel_ptr);
+      src_stmt = SSA_NAME_DEF_STMT (op2);
     }
-  else
-    gcc_unreachable ();
 
+  gcc_checking_assert (src_stmt);
+  // Then feed this range back as the LHS of the defining statement.
+  return compute_operand_range (r, src_stmt, vr, name, src, vrel_ptr);
   // If neither operand is derived, this statement tells us nothing.
-  return res;
 }