aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2018-07-17 18:42:42 +0000
committerAndreas Schwab <schwab@gcc.gnu.org>2018-07-17 18:42:42 +0000
commit0d7afd5d27bd51ec843a5fb78046c12ca4b9796f (patch)
treefbc295be8a426a5f438b28267c3c604ceaa61d7d /gcc
parenta7385f1c0eb0986f7d6bc68ea3f26e5a96f50c80 (diff)
downloadgcc-0d7afd5d27bd51ec843a5fb78046c12ca4b9796f.zip
gcc-0d7afd5d27bd51ec843a5fb78046c12ca4b9796f.tar.gz
gcc-0d7afd5d27bd51ec843a5fb78046c12ca4b9796f.tar.bz2
Fix invalid cc_status after [const_][us]mulsi3_highpart
* config/m68k/m68k.md (umulsi3_highpart+1, const_umulsi3_highpart) (smulsi3_highpart+1, const_smulsi3_highpart): Add CC_STATUS_INIT. testsuite/: * gcc.target/m68k/mulsi_highpart.c: New test. From-SVN: r262835
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/m68k/m68k.md20
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/m68k/mulsi_highpart.c8
4 files changed, 33 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 27f8a72..2e72421 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-07-17 Andreas Schwab <schwab@linux-m68k.org>
+
+ * config/m68k/m68k.md (umulsi3_highpart+1, const_umulsi3_highpart)
+ (smulsi3_highpart+1, const_smulsi3_highpart): Add CC_STATUS_INIT.
+
2018-07-17 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (arc_label_align): Use align_labels instead of
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index a28e3cd..88335cd 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -3240,7 +3240,10 @@
(const_int 32))))
(clobber (match_operand:SI 1 "register_operand" "=d"))]
"TARGET_68020 && !TUNE_68060 && !TARGET_COLDFIRE"
- "mulu%.l %3,%0:%1")
+{
+ CC_STATUS_INIT;
+ return "mulu%.l %3,%0:%1";
+})
(define_insn "const_umulsi3_highpart"
[(set (match_operand:SI 0 "register_operand" "=d")
@@ -3251,7 +3254,10 @@
(const_int 32))))
(clobber (match_operand:SI 1 "register_operand" "=d"))]
"TARGET_68020 && !TUNE_68060 && !TARGET_COLDFIRE"
- "mulu%.l %3,%0:%1")
+{
+ CC_STATUS_INIT;
+ return "mulu%.l %3,%0:%1";
+})
(define_expand "smulsi3_highpart"
[(parallel
@@ -3283,7 +3289,10 @@
(const_int 32))))
(clobber (match_operand:SI 1 "register_operand" "=d"))]
"TARGET_68020 && !TUNE_68060 && !TARGET_COLDFIRE"
- "muls%.l %3,%0:%1")
+{
+ CC_STATUS_INIT;
+ return "muls%.l %3,%0:%1";
+})
(define_insn "const_smulsi3_highpart"
[(set (match_operand:SI 0 "register_operand" "=d")
@@ -3294,7 +3303,10 @@
(const_int 32))))
(clobber (match_operand:SI 1 "register_operand" "=d"))]
"TARGET_68020 && !TUNE_68060 && !TARGET_COLDFIRE"
- "muls%.l %3,%0:%1")
+{
+ CC_STATUS_INIT;
+ return "muls%.l %3,%0:%1";
+})
(define_expand "mul<mode>3"
[(set (match_operand:FP 0 "nonimmediate_operand" "")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 11936ee..b099439 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-17 Andreas Schwab <schwab@linux-m68k.org>
+
+ * gcc.target/m68k/mulsi_highpart.c: New test.
+
2018-07-17 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/cpp/pr61854-c90.c (foo): Expect a note, rather than error.
diff --git a/gcc/testsuite/gcc.target/m68k/mulsi_highpart.c b/gcc/testsuite/gcc.target/m68k/mulsi_highpart.c
new file mode 100644
index 0000000..f17586e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/mulsi_highpart.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -m68020" } */
+/* Don't optimize away a compare after [us]mulsi_highpart. */
+/* { dg-final { scan-assembler {tst\.?l} } } */
+int cmp (unsigned int a, unsigned int b)
+{
+ return (a > 0xffffffff / b);
+}