aboutsummaryrefslogtreecommitdiff
path: root/gcc/predict.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-08-07 13:59:13 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-08-07 11:59:13 +0000
commit806562fd6269a3d7e0651d5bbf9085c7708fb5cd (patch)
treeeaa3b52796a56d33f60e9066a720a28f86390a1f /gcc/predict.c
parentea2329d170827cf9d321324844035a4a2dcfec96 (diff)
downloadgcc-806562fd6269a3d7e0651d5bbf9085c7708fb5cd.zip
gcc-806562fd6269a3d7e0651d5bbf9085c7708fb5cd.tar.gz
gcc-806562fd6269a3d7e0651d5bbf9085c7708fb5cd.tar.bz2
Add malloc predictor (PR middle-end/83023).
2018-08-07 Martin Liska <mliska@suse.cz> PR middle-end/83023 * predict.c (expr_expected_value_1): Handle DECL_IS_MALLOC, BUILT_IN_REALLOC and DECL_IS_OPERATOR_NEW. * predict.def (PRED_MALLOC_NONNULL): New predictor. * doc/extend.texi: Document that malloc attribute adds hit to compiler. 2018-08-07 Martin Liska <mliska@suse.cz> PR middle-end/83023 * gcc.dg/predict-16.c: New test. * g++.dg/predict-1.C: New test. From-SVN: r263355
Diffstat (limited to 'gcc/predict.c')
-rw-r--r--gcc/predict.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/predict.c b/gcc/predict.c
index a6769ed..96ae10f 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -2380,6 +2380,14 @@ expr_expected_value_1 (tree type, tree op0, enum tree_code code,
}
return NULL;
}
+
+ if (DECL_IS_MALLOC (decl) || DECL_IS_OPERATOR_NEW (decl))
+ {
+ if (predictor)
+ *predictor = PRED_MALLOC_NONNULL;
+ return boolean_true_node;
+ }
+
if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
switch (DECL_FUNCTION_CODE (decl))
{
@@ -2414,6 +2422,10 @@ expr_expected_value_1 (tree type, tree op0, enum tree_code code,
if (predictor)
*predictor = PRED_COMPARE_AND_SWAP;
return boolean_true_node;
+ case BUILT_IN_REALLOC:
+ if (predictor)
+ *predictor = PRED_MALLOC_NONNULL;
+ return boolean_true_node;
default:
break;
}