diff options
author | Martin Liska <mliska@suse.cz> | 2018-08-07 13:59:13 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-08-07 11:59:13 +0000 |
commit | 806562fd6269a3d7e0651d5bbf9085c7708fb5cd (patch) | |
tree | eaa3b52796a56d33f60e9066a720a28f86390a1f /gcc/predict.c | |
parent | ea2329d170827cf9d321324844035a4a2dcfec96 (diff) | |
download | gcc-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.c | 12 |
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; } |