From 2575024c21b803674a4fc18cf312509f97fe5686 Mon Sep 17 00:00:00 2001 From: Geert Bosch Date: Fri, 7 Nov 2008 09:39:38 +0000 Subject: [PATCH] trans.c (build_binary_op_trapv): Avoid emitting overflow check for constant result. * gcc-interface/trans.c (build_binary_op_trapv): Avoid emitting overflow check for constant result. From-SVN: r141666 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/trans.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f9d899309ba..68f0623539d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2008-11-07 Geert Bosch + + * gcc-interface/trans.c (build_binary_op_trapv): Avoid emitting + overflow check for constant result. + 2008-11-07 Geert Bosch * gcc-interface/trans.c (build_binary_op_trapv): Use more efficient diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 5d56ef84cb1..aca7167bae0 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -6146,6 +6146,10 @@ build_binary_op_trapv (enum tree_code code, gnu_expr = build_binary_op (code, gnu_type, lhs, rhs); + /* If we can fold the expression to a constant, just return it. + The caller will deal with overflow, no need to generate a check. */ + if (TREE_CONSTANT (gnu_expr)) return gnu_expr; + check = fold_build3 (COND_EXPR, integer_type_node, rhs_lt_zero, check_neg, check_pos);