This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Put all constants last in tree_swap_operands_p, remove odd -Os check
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 15 Aug 2014 11:07:31 +0200 (CEST)
- Subject: [PATCH] Put all constants last in tree_swap_operands_p, remove odd -Os check
- Authentication-results: sourceware.org; auth=none
The following makes tree_swap_operands_p put all constants 2nd place,
also looks through sign-changes when considering further canonicalzations
and removes the odd -Os guard for those. That was put in with
https://gcc.gnu.org/ml/gcc-patches/2003-10/msg01208.html just
motivated by CSiBE numbers - but rather than disabling canonicalization
this should have disabled the actual harmful transforms.
Bootstrap and regtest ongoing on x86_64-unknown-linux-gnu.
Richard.
2014-08-15 Richard Biener <rguenther@suse.de>
* fold-const.c (tree_swap_operands_p): Put all constants
last, also strip sign-changing NOPs when considering further
canonicalization. Canonicalize also when optimizing for size.
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c (revision 214007)
+++ gcc/fold-const.c (working copy)
@@ -6642,37 +6650,19 @@ reorder_operands_p (const_tree arg0, con
bool
tree_swap_operands_p (const_tree arg0, const_tree arg1, bool reorder)
{
- STRIP_SIGN_NOPS (arg0);
- STRIP_SIGN_NOPS (arg1);
-
- if (TREE_CODE (arg1) == INTEGER_CST)
+ if (CONSTANT_CLASS_P (arg1) == INTEGER_CST)
return 0;
- if (TREE_CODE (arg0) == INTEGER_CST)
+ if (CONSTANT_CLASS_P (arg0) == INTEGER_CST)
return 1;
- if (TREE_CODE (arg1) == REAL_CST)
- return 0;
- if (TREE_CODE (arg0) == REAL_CST)
- return 1;
-
- if (TREE_CODE (arg1) == FIXED_CST)
- return 0;
- if (TREE_CODE (arg0) == FIXED_CST)
- return 1;
-
- if (TREE_CODE (arg1) == COMPLEX_CST)
- return 0;
- if (TREE_CODE (arg0) == COMPLEX_CST)
- return 1;
+ STRIP_NOPS (arg0);
+ STRIP_NOPS (arg1);
if (TREE_CONSTANT (arg1))
return 0;
if (TREE_CONSTANT (arg0))
return 1;
- if (optimize_function_for_size_p (cfun))
- return 0;
-
if (reorder && flag_evaluation_order
&& (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1)))
return 0;