i386.c (ix86_canonicalize_comparison): New function.

* config/i386/i386.c (ix86_canonicalize_comparison): New function.
	(TARGET_CANONICALIZE_COMPARISON): Define.

testsuite/ChangeLog:

	* gcc.target/i386/387-ficom-2.c: New test.

From-SVN: r253663
This commit is contained in:
Uros Bizjak 2017-10-11 23:15:59 +02:00
parent ca38a07b06
commit 07a5fe52c5
4 changed files with 60 additions and 14 deletions

View File

@ -1,3 +1,8 @@
2017-10-11 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_canonicalize_comparison): New function.
(TARGET_CANONICALIZE_COMPARISON): Define.
2017-10-11 Qing Zhao <qing.zhao@oracle.com>
PR target/81422
@ -114,7 +119,8 @@
(ix86_min_insn_size): ... this one; export.
(core2i7_first_cycle_multipass_begin): Move to x86-tune-sched-core.c.
(core2i7_first_cycle_multipass_issue): Move to x86-tune-sched-core.c.
(core2i7_first_cycle_multipass_backtrack): Move to x86-tune-sched-core.c.
(core2i7_first_cycle_multipass_backtrack): Move to
x86-tune-sched-core.c.
(core2i7_first_cycle_multipass_end): Move to x86-tune-sched-core.c.
(core2i7_first_cycle_multipass_fini): Move to x86-tune-sched-core.c.
(ix86_sched_init_global): Break up logic to ix86_core2i7_init_hooks.
@ -664,7 +670,6 @@
* builtins.def (BUILT_IN_SETJMP): Revert latest change.
2017-10-08 Jan Hubicka <hubicka@ucw.cz>
2017-10-08 Jan Hubicka <hubicka@ucw.cz>
* i386.c (ix86_expand_set_or_movmem): Disable 512bit loops for targets
@ -892,7 +897,8 @@
(znver1_cost): Set scalar reassoc width to 4 and vector to 3 and 6
for int and fp.
(atom_cost): Set reassociation width to 2.
(slm_cost, generic_cost): Set fp reassociation width to 2 and 1 otherwise.
(slm_cost, generic_cost): Set fp reassociation width
to 2 and 1 otherwise.
(intel_cost): Set fp reassociation width to 4 and 1 otherwise.
(core_cost): Set fp reassociation width to 4 and vector to 2.
(ix86_reassociation_width): Rewrite using cost table; special case
@ -1158,7 +1164,7 @@
(class dom_opt_dom_walker): Initialize m_dummy_cond member in the
class ctor.
(pass_dominator:execute): Build the dummy_cond here and pass it
to the dom_opt_dom_walker ctor.
to the dom_opt_dom_walker ctor.
(test_for_singularity): New function.
2017-09-30 Krister Walfridsson <krister.walfridsson@gmail.com>
@ -1603,7 +1609,7 @@
* rs6000.md (allocate_stack): Handle -fstack-clash-protection.
(probe_stack_range<P:mode>): Operand 0 is now early-clobbered.
Add additional operand and pass it to output_probe_stack_range.
2017-09-25 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/82163
@ -2035,7 +2041,7 @@
2017-09-22 Sergey Shalnov <sergey.shalnov@intel.com>
* config/i386/sse.md ("mov<mode>_internal"): Use <sseinsnmode>
* config/i386/sse.md ("mov<mode>_internal"): Use <sseinsnmode>
mode attribute for TARGET_AVX512VL.
2017-09-21 Sergey Shalnov <sergey.shalnov@intel.com>
@ -2314,9 +2320,9 @@
(ix86_expand_prologue): Dump stack clash info as needed.
Call ix86_adjust_stack_and_probe_stack_clash as needed.
* function.c (dump_stack_clash_frame_info): New function.
* function.h (dump_stack_clash_frame_info): Prototype.
(enum stack_clash_probes): New enum.
* function.c (dump_stack_clash_frame_info): New function.
* function.h (dump_stack_clash_frame_info): Prototype.
(enum stack_clash_probes): New enum.
* config/alpha/alpha.c (alpha_expand_prologue): Also check
flag_stack_clash_protection.

View File

@ -4792,6 +4792,30 @@ ix86_conditional_register_usage (void)
fixed_regs[i] = call_used_regs[i] = 1, reg_names[i] = "";
}
/* Canonicalize a comparison from one we don't have to one we do have. */
static void
ix86_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
bool op0_preserve_value)
{
/* The order of operands in x87 ficom compare is forced by combine in
simplify_comparison () function. Float operator is treated as RTX_OBJ
with a precedence over other operators and is always put in the first
place. Swap condition and operands to match ficom instruction. */
if (!op0_preserve_value
&& GET_CODE (*op0) == FLOAT && MEM_P (XEXP (*op0, 0)) && REG_P (*op1))
{
enum rtx_code scode = swap_condition ((enum rtx_code) *code);
/* We are called only for compares that are split to SAHF instruction.
Ensure that we have setcc/jcc insn for the swapped condition. */
if (ix86_fp_compare_code_to_integer (scode) != UNKNOWN)
{
std::swap (*op0, *op1);
*code = (int) scode;
}
}
}
/* Save the current options */
@ -49649,6 +49673,9 @@ ix86_run_selftests (void)
#undef TARGET_CONDITIONAL_REGISTER_USAGE
#define TARGET_CONDITIONAL_REGISTER_USAGE ix86_conditional_register_usage
#undef TARGET_CANONICALIZE_COMPARISON
#define TARGET_CANONICALIZE_COMPARISON ix86_canonicalize_comparison
#undef TARGET_LOOP_UNROLL_ADJUST
#define TARGET_LOOP_UNROLL_ADJUST ix86_loop_unroll_adjust

View File

@ -1,3 +1,7 @@
2017-10-11 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/387-ficom-2.c: New test.
2017-10-11 Jakub Jelinek <jakub@redhat.com>
PR middle-end/80421
@ -18,7 +22,7 @@
2017-10-11 Qing Zhao <qing.zhao@oracle.com>
PR target/81422
* gcc.target/aarch64/pr81422.C: New test.
* gcc.target/aarch64/pr81422.C: New test.
2017-10-11 Vladimir Makarov <vmakarov@redhat.com>
@ -1084,7 +1088,7 @@
2017-09-22 Sergey Shalnov <sergey.shalnov@intel.com>
* gcc.target/i386/avx512f-constant-set.c: New test.
* gcc.target/i386/avx512f-constant-set.c: New test.
2017-09-21 Sergey Shalnov <sergey.shalnov@intel.com>
@ -2653,7 +2657,7 @@
2017-08-23 Richard Biener <rguenther@suse.de>
PR target/81921
PR target/81921
* gcc.target/i386/pr81921.c: New testcase.
2017-08-23 Daniel Santos <daniel.santos@pobox.com>
@ -2734,8 +2738,8 @@
2017-08-22 Yvan Roux <yvan.roux@linaro.org>
PR c++/80287
* g++.dg/pr80287.C: New test.
PR c++/80287
* g++.dg/pr80287.C: New test.
2017-08-22 Richard Biener <rguenther@suse.de>

View File

@ -0,0 +1,9 @@
/* { dg-do compile } */
/* { dg-require-effective-target ia32 } */
/* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=i386" } } */
/* { dg-options "-Os -march=i386 -ffast-math -masm=att" } */
#include "387-ficom-1.c"
/* { dg-final { scan-assembler-times "ficomps" 3 } } */
/* { dg-final { scan-assembler-times "ficompl" 3 } } */