diff options
author | Jozef Lawrynowicz <jozef.l@mittosystems.com> | 2018-12-18 10:29:42 +0000 |
---|---|---|
committer | Jozef Lawrynowicz <jozefl@gcc.gnu.org> | 2018-12-18 10:29:42 +0000 |
commit | 6a30d8c0a687baae0cea91ca6b3adbed32e84471 (patch) | |
tree | 607914228c83b59a14b9a63a326be1978d4bab94 /gcc/combine.c | |
parent | 5d54c79858656d7fe58cd1387f766dbf23fc04be (diff) | |
download | gcc-6a30d8c0a687baae0cea91ca6b3adbed32e84471.zip gcc-6a30d8c0a687baae0cea91ca6b3adbed32e84471.tar.gz gcc-6a30d8c0a687baae0cea91ca6b3adbed32e84471.tar.bz2 |
combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits of src in nonzero_bits_mode if...
2018-12-18 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* combine.c (update_rsp_from_reg_equal): Only look for the nonzero bits
of src in nonzero_bits_mode if the mode of src is MODE_INT and
HWI_COMPUTABLE.
(reg_nonzero_bits_for_combine): Add clarification to comment.
From-SVN: r267227
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 220c3a4..a1d6e2d 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -1698,9 +1698,13 @@ update_rsp_from_reg_equal (reg_stat_type *rsp, rtx_insn *insn, const_rtx set, /* Don't call nonzero_bits if it cannot change anything. */ if (rsp->nonzero_bits != HOST_WIDE_INT_M1U) { - bits = nonzero_bits (src, nonzero_bits_mode); + machine_mode mode = GET_MODE (x); + if (GET_MODE_CLASS (mode) == MODE_INT + && HWI_COMPUTABLE_MODE_P (mode)) + mode = nonzero_bits_mode; + bits = nonzero_bits (src, mode); if (reg_equal && bits) - bits &= nonzero_bits (reg_equal, nonzero_bits_mode); + bits &= nonzero_bits (reg_equal, mode); rsp->nonzero_bits |= bits; } @@ -10225,6 +10229,7 @@ simplify_and_const_int (rtx x, scalar_int_mode mode, rtx varop, /* Given a REG X of mode XMODE, compute which bits in X can be nonzero. We don't care about bits outside of those defined in MODE. + We DO care about all the bits in MODE, even if XMODE is smaller than MODE. For most X this is simply GET_MODE_MASK (GET_MODE (MODE)), but if X is a shift, AND, or zero_extract, we can do better. */ |