aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2018-08-10 13:13:37 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2018-08-10 13:13:37 +0300
commitf80d6a178ed2043c6a9a4d8076cdc72d61b67b2b (patch)
tree071fafebc13d80caa575dbcf150e2a8767285740 /gcc
parent1e9168b27999c2f151e7169beabce4ee71d3eccc (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/i386.md10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr82418.c10
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;
+}