i386-features.c (general_scalar_chain::convert_insn): Revert 2019-08-14 change.
* config/i386/i386-features.c (general_scalar_chain::convert_insn) <case COMPARE>: Revert 2019-08-14 change. (convertible_comparison_p): Revert 2019-08-14 change. Return false for (TARGET_64BIT || mode != DImode). From-SVN: r274526
This commit is contained in:
parent
c7cf3a9bb0
commit
c839844a42
|
@ -1,3 +1,10 @@
|
||||||
|
2019-08-15 Uroš Bizjak <ubizjak@gmail.com>
|
||||||
|
|
||||||
|
* config/i386/i386-features.c (general_scalar_chain::convert_insn)
|
||||||
|
<case COMPARE>: Revert 2019-08-14 change.
|
||||||
|
(convertible_comparison_p): Revert 2019-08-14 change. Return false
|
||||||
|
for (TARGET_64BIT || mode != DImode).
|
||||||
|
|
||||||
2019-08-15 Aldy Hernandez <aldyh@redhat.com>
|
2019-08-15 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
* tree-vrp.c (value_range_base::set): Merge in code from
|
* tree-vrp.c (value_range_base::set): Merge in code from
|
||||||
|
@ -272,7 +279,7 @@
|
||||||
* config/i386/i386-expand.c (ix86_expand_vector_init_one_nonzero)
|
* config/i386/i386-expand.c (ix86_expand_vector_init_one_nonzero)
|
||||||
<case E_V8QImode>: Use vector_set path for
|
<case E_V8QImode>: Use vector_set path for
|
||||||
TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
|
TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
|
||||||
(ix86_expand_vector_init_one_nonzero) <case E_V8QImode>:
|
(ix86_expand_vector_init_one_var) <case E_V8QImode>:
|
||||||
Do not widen for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
|
Do not widen for TARGET_MMX_WITH_SSE && TARGET_SSE4_1.
|
||||||
|
|
||||||
2019-08-14 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
2019-08-14 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||||
|
|
|
@ -1030,11 +1030,11 @@ general_scalar_chain::convert_insn (rtx_insn *insn)
|
||||||
case COMPARE:
|
case COMPARE:
|
||||||
src = SUBREG_REG (XEXP (XEXP (src, 0), 0));
|
src = SUBREG_REG (XEXP (XEXP (src, 0), 0));
|
||||||
|
|
||||||
gcc_assert ((REG_P (src) && GET_MODE (src) == GET_MODE_INNER (vmode))
|
gcc_assert ((REG_P (src) && GET_MODE (src) == DImode)
|
||||||
|| (SUBREG_P (src) && GET_MODE (src) == vmode));
|
|| (SUBREG_P (src) && GET_MODE (src) == V2DImode));
|
||||||
|
|
||||||
if (REG_P (src))
|
if (REG_P (src))
|
||||||
subreg = gen_rtx_SUBREG (vmode, src, 0);
|
subreg = gen_rtx_SUBREG (V2DImode, src, 0);
|
||||||
else
|
else
|
||||||
subreg = copy_rtx_if_shared (src);
|
subreg = copy_rtx_if_shared (src);
|
||||||
emit_insn_before (gen_vec_interleave_lowv2di (copy_rtx_if_shared (subreg),
|
emit_insn_before (gen_vec_interleave_lowv2di (copy_rtx_if_shared (subreg),
|
||||||
|
@ -1273,8 +1273,12 @@ has_non_address_hard_reg (rtx_insn *insn)
|
||||||
(const_int 0 [0]))) */
|
(const_int 0 [0]))) */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
convertible_comparison_p (rtx_insn *insn, enum machine_mode mode)
|
convertible_comparison_p (rtx_insn *insn, machine_mode mode)
|
||||||
{
|
{
|
||||||
|
/* ??? Currently convertible for double-word DImode chain only. */
|
||||||
|
if (TARGET_64BIT || mode != DImode)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!TARGET_SSE4_1)
|
if (!TARGET_SSE4_1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1306,12 +1310,12 @@ convertible_comparison_p (rtx_insn *insn, enum machine_mode mode)
|
||||||
|
|
||||||
if (!SUBREG_P (op1)
|
if (!SUBREG_P (op1)
|
||||||
|| !SUBREG_P (op2)
|
|| !SUBREG_P (op2)
|
||||||
|| GET_MODE (op1) != mode
|
|| GET_MODE (op1) != SImode
|
||||||
|| GET_MODE (op2) != mode
|
|| GET_MODE (op2) != SImode
|
||||||
|| ((SUBREG_BYTE (op1) != 0
|
|| ((SUBREG_BYTE (op1) != 0
|
||||||
|| SUBREG_BYTE (op2) != GET_MODE_SIZE (mode))
|
|| SUBREG_BYTE (op2) != GET_MODE_SIZE (SImode))
|
||||||
&& (SUBREG_BYTE (op2) != 0
|
&& (SUBREG_BYTE (op2) != 0
|
||||||
|| SUBREG_BYTE (op1) != GET_MODE_SIZE (mode))))
|
|| SUBREG_BYTE (op1) != GET_MODE_SIZE (SImode))))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
op1 = SUBREG_REG (op1);
|
op1 = SUBREG_REG (op1);
|
||||||
|
@ -1319,13 +1323,13 @@ convertible_comparison_p (rtx_insn *insn, enum machine_mode mode)
|
||||||
|
|
||||||
if (op1 != op2
|
if (op1 != op2
|
||||||
|| !REG_P (op1)
|
|| !REG_P (op1)
|
||||||
|| GET_MODE (op1) != GET_MODE_WIDER_MODE (mode).else_blk ())
|
|| GET_MODE (op1) != DImode)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The DImode version of scalar_to_vector_candidate_p. */
|
/* The general version of scalar_to_vector_candidate_p. */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
general_scalar_to_vector_candidate_p (rtx_insn *insn, enum machine_mode mode)
|
general_scalar_to_vector_candidate_p (rtx_insn *insn, enum machine_mode mode)
|
||||||
|
@ -1344,7 +1348,7 @@ general_scalar_to_vector_candidate_p (rtx_insn *insn, enum machine_mode mode)
|
||||||
if (GET_CODE (src) == COMPARE)
|
if (GET_CODE (src) == COMPARE)
|
||||||
return convertible_comparison_p (insn, mode);
|
return convertible_comparison_p (insn, mode);
|
||||||
|
|
||||||
/* We are interested in DImode promotion only. */
|
/* We are interested in "mode" only. */
|
||||||
if ((GET_MODE (src) != mode
|
if ((GET_MODE (src) != mode
|
||||||
&& !CONST_INT_P (src))
|
&& !CONST_INT_P (src))
|
||||||
|| GET_MODE (dst) != mode)
|
|| GET_MODE (dst) != mode)
|
||||||
|
|
Loading…
Reference in New Issue