+2019-10-20 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386-protos.h (ix86_pre_reload_split): Declare.
+ * config/i386/i386.c (ix86_pre_reload_split): New function.
+ * config/i386/i386.md (*fix_trunc<mode>_i387_1, *add<mode>3_eq,
+ *add<mode>3_ne, *add<mode>3_eq_0, *add<mode>3_ne_0, *add<mode>3_eq,
+ *add<mode>3_ne, *add<mode>3_eq_1, *add<mode>3_eq_0, *add<mode>3_ne_0,
+ *anddi3_doubleword, *andndi3_doubleword, *<code>di3_doubleword,
+ *one_cmpldi2_doubleword, *ashl<dwi>3_doubleword_mask,
+ *ashl<dwi>3_doubleword_mask_1, *ashl<mode>3_mask, *ashl<mode>3_mask_1,
+ *<shift_insn><mode>3_mask, *<shift_insn><mode>3_mask_1,
+ *<shift_insn><dwi>3_doubleword_mask,
+ *<shift_insn><dwi>3_doubleword_mask_1, *<rotate_insn><mode>3_mask,
+ *<rotate_insn><mode>3_mask_1, *<btsc><mode>_mask, *<btsc><mode>_mask_1,
+ *btr<mode>_mask, *btr<mode>_mask_1, *jcc_bt<mode>, *jcc_bt<mode>_1,
+ *jcc_bt<mode>_mask, *popcounthi2_1, frndintxf2_<rounding>,
+ *fist<mode>2_<rounding>_1, *<code><mode>3_1, *<code>di3_doubleword):
+ Use ix86_pre_reload_split instead of can_create_pseudo_p in condition.
+ * config/i386/sse.md (*sse4_1_<code>v8qiv8hi2<mask_name>_2,
+ *avx2_<code>v8qiv8si2<mask_name>_2,
+ *sse4_1_<code>v4qiv4si2<mask_name>_2,
+ *sse4_1_<code>v4hiv4si2<mask_name>_2,
+ *avx512f_<code>v8qiv8di2<mask_name>_2,
+ *avx2_<code>v4qiv4di2<mask_name>_2, *avx2_<code>v4hiv4di2<mask_name>_2,
+ *sse4_1_<code>v2hiv2di2<mask_name>_2,
+ *sse4_1_<code>v2siv2di2<mask_name>_2, sse4_2_pcmpestr,
+ sse4_2_pcmpistr): Likewise.
+
2019-10-20 Gerald Pfeifer <gerald@pfeifer.com>
* doc/install.texi (Configuration, --enable-objc-gc): hboehm.info
&& !TARGET_FISTTP
&& !(SSE_FLOAT_MODE_P (GET_MODE (operands[1]))
&& (TARGET_64BIT || <MODE>mode != DImode))
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(match_operand:SWI 2 "<general_operand>")))
(clobber (reg:CC FLAGS_REG))]
"ix86_binary_operator_ok (PLUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
&& (<MODE>mode != DImode
|| INTVAL (operands[2]) != HOST_WIDE_INT_C (-0x80000000))
&& ix86_binary_operator_ok (PLUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(match_operand:SWI 1 "<general_operand>")))
(clobber (reg:CC FLAGS_REG))]
"ix86_unary_operator_ok (PLUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(match_operand:SWI 1 "<general_operand>")))
(clobber (reg:CC FLAGS_REG))]
"ix86_unary_operator_ok (PLUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(match_operand:SWI 2 "<general_operand>")))
(clobber (reg:CC FLAGS_REG))]
"ix86_binary_operator_ok (MINUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
&& (<MODE>mode != DImode
|| INTVAL (operands[2]) != HOST_WIDE_INT_C (-0x80000000))
&& ix86_binary_operator_ok (MINUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
&& (<MODE>mode != DImode
|| INTVAL (operands[2]) != HOST_WIDE_INT_C (-0x80000000))
&& ix86_binary_operator_ok (MINUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(eq:SWI (match_operand 2 "int_nonimmediate_operand") (const_int 0))))
(clobber (reg:CC FLAGS_REG))]
"ix86_unary_operator_ok (MINUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(ne:SWI (match_operand 2 "int_nonimmediate_operand") (const_int 0))))
(clobber (reg:CC FLAGS_REG))]
"ix86_unary_operator_ok (MINUS, <MODE>mode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CC FLAGS_REG)
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2
&& ix86_binary_operator_ok (AND, DImode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(match_operand:DI 2 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#")
(define_split
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2
&& ix86_binary_operator_ok (<CODE>, DImode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(not:DI (match_operand:DI 1 "nonimmediate_operand")))]
"!TARGET_64BIT && TARGET_STV && TARGET_SSE2
&& ix86_unary_operator_ok (NOT, DImode, operands)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(match_operand:SI 3 "const_int_operand")) 0)))
(clobber (reg:CC FLAGS_REG))]
"(INTVAL (operands[3]) & (<MODE_SIZE> * BITS_PER_UNIT)) == 0
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
(match_operand:QI 3 "const_int_operand"))))
(clobber (reg:CC FLAGS_REG))]
"(INTVAL (operands[3]) & (<MODE_SIZE> * BITS_PER_UNIT)) == 0
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (ASHIFT, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (ASHIFT, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
(match_operand:SI 3 "const_int_operand")) 0)))
(clobber (reg:CC FLAGS_REG))]
"(INTVAL (operands[3]) & (<MODE_SIZE> * BITS_PER_UNIT)) == 0
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
(match_operand:QI 3 "const_int_operand"))))
(clobber (reg:CC FLAGS_REG))]
"(INTVAL (operands[3]) & (<MODE_SIZE> * BITS_PER_UNIT)) == 0
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"TARGET_USE_BT
&& (INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"TARGET_USE_BT
&& (INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"TARGET_USE_BT
&& (INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
"TARGET_USE_BT
&& (INTVAL (operands[2]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(parallel
&& INTVAL (operands[2])
>= (optimize_function_for_size_p (cfun) ? 8 : 32))
: !memory_operand (operands[1], <MODE>mode))
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CCC FLAGS_REG)
(pc)))
(clobber (reg:CC FLAGS_REG))]
"(TARGET_USE_BT || optimize_function_for_size_p (cfun))
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CCC FLAGS_REG)
"(TARGET_USE_BT || optimize_function_for_size_p (cfun))
&& (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
== GET_MODE_BITSIZE (<MODE>mode)-1
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (reg:CCC FLAGS_REG)
(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand"))))
(clobber (reg:CC FLAGS_REG))]
"TARGET_POPCNT
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(clobber (reg:CC FLAGS_REG))]
"TARGET_USE_FANCY_MATH_387
&& (flag_fp_int_builtin_inexact || !flag_trapping_math)
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(clobber (reg:CC FLAGS_REG))]
"TARGET_USE_FANCY_MATH_387
&& flag_unsafe_math_optimizations
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(match_operand:MAXMIN_IMODE 2 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))]
"(TARGET_64BIT || <MODE>mode != DImode) && TARGET_STV
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(match_operand:DI 2 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT && TARGET_STV && TARGET_AVX512VL
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)]))))]
"TARGET_SSE4_1 && <mask_avx512bw_condition> && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)]))))]
"TARGET_AVX2 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(parallel [(const_int 0) (const_int 1)
(const_int 2) (const_int 3)]))))]
"TARGET_SSE4_1 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(parallel [(const_int 0) (const_int 1)
(const_int 2) (const_int 3)]))))]
"TARGET_SSE4_1 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(const_int 2) (const_int 3)
(const_int 4) (const_int 5)
(const_int 6) (const_int 7)]))))]
- "TARGET_AVX512F && can_create_pseudo_p ()"
+ "TARGET_AVX512F && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(parallel [(const_int 0) (const_int 1)
(const_int 2) (const_int 3)]))))]
"TARGET_AVX2 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(parallel [(const_int 0) (const_int 1)
(const_int 2) (const_int 3)]))))]
"TARGET_AVX2 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(const_int 1)) 0)
(parallel [(const_int 0) (const_int 1)]))))]
"TARGET_SSE4_1 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(const_int 0)) 0)
(parallel [(const_int 0) (const_int 1)]))))]
"TARGET_SSE4_1 && <mask_avx512vl_condition>
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(set (match_dup 0)
(match_dup 6)]
UNSPEC_PCMPESTR))]
"TARGET_SSE4_2
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]
(match_dup 4)]
UNSPEC_PCMPISTR))]
"TARGET_SSE4_2
- && can_create_pseudo_p ()"
+ && ix86_pre_reload_split ()"
"#"
"&& 1"
[(const_int 0)]