From 7f4b6d207c7b950f54cf32b06b2835e960ba8c77 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 8 Sep 2008 23:30:23 +0200 Subject: [PATCH] re PR middle-end/37414 (ICE with -ffast-math) PR middle-end/37414 * predict.c (optimize_function_for_size_p): Don't segfault if FUN is NULL. * fold-const.c (LOGICAL_OP_NON_SHORT_CIRCUIT, fold_truthop, tree_swap_operands_p): Don't test cfun != NULL before calling optimize_function_for_s*_p. * g++.dg/opt/init2.C: New test. From-SVN: r140122 --- gcc/ChangeLog | 9 +++++++++ gcc/fold-const.c | 6 +++--- gcc/predict.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/opt/init2.C | 6 ++++++ 5 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/opt/init2.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2242afc956e2..60ff6e93da52 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-09-08 Jakub Jelinek + + PR middle-end/37414 + * predict.c (optimize_function_for_size_p): Don't segfault if + FUN is NULL. + * fold-const.c (LOGICAL_OP_NON_SHORT_CIRCUIT, fold_truthop, + tree_swap_operands_p): Don't test cfun != NULL before calling + optimize_function_for_s*_p. + 2008-09-08 Eric Botcazou * ira-color.c (ira_reuse_stack_slot): Set slot_num on success at the diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 7c4c522b2c41..aea7a653b188 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -5110,7 +5110,7 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2) #ifndef LOGICAL_OP_NON_SHORT_CIRCUIT #define LOGICAL_OP_NON_SHORT_CIRCUIT \ - (BRANCH_COST (!cfun || optimize_function_for_speed_p (cfun), \ + (BRANCH_COST (optimize_function_for_speed_p (cfun), \ false) >= 2) #endif @@ -5359,7 +5359,7 @@ fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs) that can be merged. Avoid doing this if the RHS is a floating-point comparison since those can trap. */ - if (BRANCH_COST (!cfun || optimize_function_for_speed_p (cfun), + if (BRANCH_COST (optimize_function_for_speed_p (cfun), false) >= 2 && ! FLOAT_TYPE_P (TREE_TYPE (rl_arg)) && simple_operand_p (rl_arg) @@ -6682,7 +6682,7 @@ tree_swap_operands_p (const_tree arg0, const_tree arg1, bool reorder) if (TREE_CONSTANT (arg0)) return 1; - if (cfun && optimize_function_for_size_p (cfun)) + if (optimize_function_for_size_p (cfun)) return 0; if (reorder && flag_evaluation_order diff --git a/gcc/predict.c b/gcc/predict.c index b69934f47789..5ed6c431355e 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -203,7 +203,8 @@ bool optimize_function_for_size_p (struct function *fun) { return (optimize_size - || fun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED); + || (fun && (fun->function_frequency + == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED))); } /* Return true when current function should always be optimized for speed. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc1901501a96..f5aec0065f93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-09-08 Jakub Jelinek + PR middle-end/37414 + * g++.dg/opt/init2.C: New test. + PR middle-end/37337 * g++.dg/tree-ssa/pr37337.C: New test. diff --git a/gcc/testsuite/g++.dg/opt/init2.C b/gcc/testsuite/g++.dg/opt/init2.C new file mode 100644 index 000000000000..3c3bc939d762 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/init2.C @@ -0,0 +1,6 @@ +// PR middle-end/37414 +// { dg-do compile } +// { dg-options "-O2 -ffast-math" } + +double x = 6.0; +double y = x * x;