re PR target/82618 (Inefficient double-word subtraction on x86_64)
PR target/82618 * config/i386/i386.md (sub to cmp): New peephole2 pattern. testsuite/ChangeLog: PR target/82618 * gcc.target/i386/pr82618.c: New test. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r253905
This commit is contained in:
parent
158ec0181d
commit
d4e7de5811
4 changed files with 40 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2017-10-19 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/82618
|
||||
* config/i386/i386.md (sub to cmp): New peephole2 pattern.
|
||||
|
||||
2017-10-19 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
PR rtl-optimization/82395
|
||||
|
|
|
@ -6766,6 +6766,17 @@
|
|||
[(set_attr "type" "alu")
|
||||
(set_attr "mode" "<MODE>")])
|
||||
|
||||
(define_peephole2
|
||||
[(parallel
|
||||
[(set (reg:CC FLAGS_REG)
|
||||
(compare:CC (match_operand:SWI 0 "general_reg_operand")
|
||||
(match_operand:SWI 1 "general_gr_operand")))
|
||||
(set (match_dup 0)
|
||||
(minus:SWI (match_dup 0) (match_dup 1)))])]
|
||||
"find_regno_note (peep2_next_insn (0), REG_UNUSED, REGNO (operands[0])) != 0"
|
||||
[(set (reg:CC FLAGS_REG)
|
||||
(compare:CC (match_dup 0) (match_dup 1)))])
|
||||
|
||||
(define_insn "*subsi_3_zext"
|
||||
[(set (reg FLAGS_REG)
|
||||
(compare (match_operand:SI 1 "register_operand" "0")
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2017-10-18 Uros Bizjak <ubizjak@gmail.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/82618
|
||||
* gcc.target/i386/pr82618.c: New test.
|
||||
|
||||
2017-10-19 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR tree-optimization/82596
|
||||
|
|
18
gcc/testsuite/gcc.target/i386/pr82618.c
Normal file
18
gcc/testsuite/gcc.target/i386/pr82618.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* PR target/82618 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#ifdef __SIZEOF_INT128__
|
||||
typedef unsigned __int128 U;
|
||||
typedef unsigned long long H;
|
||||
#else
|
||||
typedef unsigned long long U;
|
||||
typedef unsigned int H;
|
||||
#endif
|
||||
|
||||
H f0 (U x, U y)
|
||||
{
|
||||
return (x - y) >> (__CHAR_BIT__ * sizeof (H));
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler {\mcmp} } } */
|
Loading…
Add table
Reference in a new issue