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
This commit is contained in:
Jozef Lawrynowicz 2018-12-18 10:29:42 +00:00 committed by Jozef Lawrynowicz
parent 5d54c79858
commit 6a30d8c0a6
2 changed files with 14 additions and 2 deletions

View File

@ -1,3 +1,10 @@
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.
2018-12-18 Wei Xiao <wei3.xiao@intel.com>
* config/i386/driver-i386.c (host_detect_local_cpu): Detect cascadelake.

View File

@ -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. */