aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-fold.cc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-08-18 15:35:14 +0200
committerMartin Liska <mliska@suse.cz>2022-08-18 15:35:14 +0200
commitc4cf402822be5b52516a727e6b2abc923d1a9d52 (patch)
treed97b4c3407d27282cc3bcfda5a0052d37a325580 /gcc/gimple-range-fold.cc
parent87e8197e4012801477e3743601d6d6ead64e851c (diff)
parent03119249b9cfedb48e910b8df6a832b206cced2b (diff)
downloadgcc-c4cf402822be5b52516a727e6b2abc923d1a9d52.zip
gcc-c4cf402822be5b52516a727e6b2abc923d1a9d52.tar.gz
gcc-c4cf402822be5b52516a727e6b2abc923d1a9d52.tar.bz2
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'gcc/gimple-range-fold.cc')
-rw-r--r--gcc/gimple-range-fold.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index 689d827..b0b2210 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -1580,3 +1580,36 @@ fur_source::register_outgoing_edges (gcond *s, irange &lhs_range, edge e0, edge
}
}
}
+
+// Given stmt S, fill VEC, up to VEC_SIZE elements, with relevant ssa-names
+// on the statement. For efficiency, it is an error to not pass in enough
+// elements for the vector. Return the number of ssa-names.
+
+unsigned
+gimple_range_ssa_names (tree *vec, unsigned vec_size, gimple *stmt)
+{
+ tree ssa;
+ int count = 0;
+
+ if (range_op_handler (stmt))
+ {
+ gcc_checking_assert (vec_size >= 2);
+ if ((ssa = gimple_range_ssa_p (gimple_range_operand1 (stmt))))
+ vec[count++] = ssa;
+ if ((ssa = gimple_range_ssa_p (gimple_range_operand2 (stmt))))
+ vec[count++] = ssa;
+ }
+ else if (is_a<gassign *> (stmt)
+ && gimple_assign_rhs_code (stmt) == COND_EXPR)
+ {
+ gcc_checking_assert (vec_size >= 3);
+ gassign *st = as_a<gassign *> (stmt);
+ if ((ssa = gimple_range_ssa_p (gimple_assign_rhs1 (st))))
+ vec[count++] = ssa;
+ if ((ssa = gimple_range_ssa_p (gimple_assign_rhs2 (st))))
+ vec[count++] = ssa;
+ if ((ssa = gimple_range_ssa_p (gimple_assign_rhs3 (st))))
+ vec[count++] = ssa;
+ }
+ return count;
+}