aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.cc
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2023-05-19 18:21:59 +0000
committerAndrew Pinski <apinski@marvell.com>2023-05-20 05:04:48 +0000
commit3b537ab625ee7dac4f1d601b55b5b623d61d1119 (patch)
tree7a8160bf8d7641f1c4b5fa508daf96e9f0811035 /gcc/expr.cc
parent8f4929df23f1952190530dd81e980dd447fe8773 (diff)
downloadgcc-3b537ab625ee7dac4f1d601b55b5b623d61d1119.zip
gcc-3b537ab625ee7dac4f1d601b55b5b623d61d1119.tar.gz
gcc-3b537ab625ee7dac4f1d601b55b5b623d61d1119.tar.bz2
Use get_def_for_expr in fold_single_bit_test
The code in fold_single_bit_test, checks if the inner was a right shift and improve the bitnum based on that. But since the inner will always be a SSA_NAME at this point, the code is dead. Move it over to use the helper function get_def_for_expr instead. gcc/ChangeLog: * expr.cc (fold_single_bit_test): Use get_def_for_expr instead of checking the inner's code.
Diffstat (limited to 'gcc/expr.cc')
-rw-r--r--gcc/expr.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 6221b69..a61772b 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -12920,6 +12920,7 @@ fold_single_bit_test (location_t loc, enum tree_code code,
int ops_unsigned;
tree signed_type, unsigned_type, intermediate_type;
tree one;
+ gimple *inner_def;
/* First, see if we can fold the single bit test into a sign-bit
test. */
@@ -12939,14 +12940,14 @@ fold_single_bit_test (location_t loc, enum tree_code code,
/* If INNER is a right shift of a constant and it plus BITNUM does
not overflow, adjust BITNUM and INNER. */
- if (TREE_CODE (inner) == RSHIFT_EXPR
- && TREE_CODE (TREE_OPERAND (inner, 1)) == INTEGER_CST
+ if ((inner_def = get_def_for_expr (inner, RSHIFT_EXPR))
+ && TREE_CODE (gimple_assign_rhs2 (inner_def)) == INTEGER_CST
&& bitnum < TYPE_PRECISION (type)
- && wi::ltu_p (wi::to_wide (TREE_OPERAND (inner, 1)),
+ && wi::ltu_p (wi::to_wide (gimple_assign_rhs2 (inner_def)),
TYPE_PRECISION (type) - bitnum))
{
- bitnum += tree_to_uhwi (TREE_OPERAND (inner, 1));
- inner = TREE_OPERAND (inner, 0);
+ bitnum += tree_to_uhwi (gimple_assign_rhs2 (inner_def));
+ inner = gimple_assign_rhs1 (inner_def);
}
/* If we are going to be able to omit the AND below, we must do our