diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2018-08-10 13:13:37 +0300 |
---|---|---|
committer | Alexander Monakov <amonakov@gcc.gnu.org> | 2018-08-10 13:13:37 +0300 |
commit | f80d6a178ed2043c6a9a4d8076cdc72d61b67b2b (patch) | |
tree | 071fafebc13d80caa575dbcf150e2a8767285740 /gcc | |
parent | 1e9168b27999c2f151e7169beabce4ee71d3eccc (diff) | |
download | gcc-f80d6a178ed2043c6a9a4d8076cdc72d61b67b2b.zip gcc-f80d6a178ed2043c6a9a4d8076cdc72d61b67b2b.tar.gz gcc-f80d6a178ed2043c6a9a4d8076cdc72d61b67b2b.tar.bz2 |
i386: do not use SImode mul-highpart on 64-bit (PR 82418)
PR target/82418
* config/i386/i386.md (<s>mul<mode>3_highpart): Use DWIH mode iterator
instead of SWI48.
testsuite/
* gcc.target/i386/pr82418.c: New test.
From-SVN: r263467
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr82418.c | 10 |
4 files changed, 26 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28e44cf4..710d164 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-08-10 Alexander Monakov <amonakov@ispras.ru> + + PR target/82418 + * config/i386/i386.md (<s>mul<mode>3_highpart): Use DWIH mode iterator + instead of SWI48. + 2018-08-10 Martin Liska <mliska@suse.cz> PR target/83610 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 73948c1..10783d3 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7792,16 +7792,16 @@ (set_attr "mode" "QI")]) (define_expand "<s>mul<mode>3_highpart" - [(parallel [(set (match_operand:SWI48 0 "register_operand") - (truncate:SWI48 + [(parallel [(set (match_operand:DWIH 0 "register_operand") + (truncate:DWIH (lshiftrt:<DWI> (mult:<DWI> (any_extend:<DWI> - (match_operand:SWI48 1 "nonimmediate_operand")) + (match_operand:DWIH 1 "nonimmediate_operand")) (any_extend:<DWI> - (match_operand:SWI48 2 "register_operand"))) + (match_operand:DWIH 2 "register_operand"))) (match_dup 3)))) - (clobber (match_scratch:SWI48 4)) + (clobber (match_scratch:DWIH 4)) (clobber (reg:CC FLAGS_REG))])] "" "operands[3] = GEN_INT (GET_MODE_BITSIZE (<MODE>mode));") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af9e9c1..174137e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-08-10 Alexander Monakov <amonakov@ispras.ru> + + PR target/82418 + * gcc.target/i386/pr82418.c: New test. + 2018-08-10 Martin Liska <mliska@suse.cz> PR target/83610 diff --git a/gcc/testsuite/gcc.target/i386/pr82418.c b/gcc/testsuite/gcc.target/i386/pr82418.c new file mode 100644 index 0000000..95a506d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82418.c @@ -0,0 +1,10 @@ +/* PR target/82418 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler "imul\[^\n\r]*1374389535" } } */ + +unsigned +f1(unsigned x) +{ + return x / 100; +} |