aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-fold.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-05-02 12:23:18 -0400
committerAndrew MacLeod <amacleod@redhat.com>2024-05-23 16:48:44 -0400
commitefc4255d4393cba3d2232a7152799e1b161c3062 (patch)
tree113ff1de18124d19daa97a8504ebb1520faec95c /gcc/gimple-range-fold.h
parent07441e41f5eb4d385e8ee7cfb50b5d71520bff74 (diff)
downloadgcc-efc4255d4393cba3d2232a7152799e1b161c3062.zip
gcc-efc4255d4393cba3d2232a7152799e1b161c3062.tar.gz
gcc-efc4255d4393cba3d2232a7152799e1b161c3062.tar.bz2
Add inferred ranges for range-ops based statements.
Gimple_range_fold contains some shorthand fold_range routines for easy user consumption of that range-ops interface, but there is no equivalent routines for op1_range and op2_range. This patch provides basic versions. Any range-op entry which has an op1_range or op2_range implemented can potentially also provide inferred ranges. This is a step towards PR 113879. Default is currently OFF for performance reasons as it dramtically increases the number of inferred ranges. PR tree-optimization/113879 * gimple-range-fold.cc (op1_range): New. (op2_range): New. * gimple-range-fold.h (op1_range): New prototypes. (op2_range): New prototypes. * gimple-range-infer.cc (gimple_infer_range::add_range): Do not add an inferred range if it is VARYING. (gimple_infer_range::gimple_infer_range): Add inferred ranges for any range-op statements if requested. * gimple-range-infer.h (gimple_infer_range): Add parameter.
Diffstat (limited to 'gcc/gimple-range-fold.h')
-rw-r--r--gcc/gimple-range-fold.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/gimple-range-fold.h b/gcc/gimple-range-fold.h
index 1925fb8..d974b01 100644
--- a/gcc/gimple-range-fold.h
+++ b/gcc/gimple-range-fold.h
@@ -43,6 +43,13 @@ bool fold_range (vrange &r, gimple *s, vrange &r1, vrange &r2,
bool fold_range (vrange &r, gimple *s, unsigned num_elements, vrange **vector,
range_query *q = NULL);
+// Calculate op1 on stmt S.
+bool op1_range (vrange &, gimple *s, range_query *q = NULL);
+bool op1_range (vrange &, gimple *s, const vrange &lhs, range_query *q = NULL);
+// Calculate op2 on stmt S.
+bool op2_range (vrange &, gimple *s, range_query *q = NULL);
+bool op2_range (vrange &, gimple *s, const vrange &lhs, range_query *q = NULL);
+
// This routine will return a relation trio for stmt S.
relation_trio fold_relations (gimple *s, range_query *q = NULL);