This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Committed] S/390: PR68015 Fix ICE in s390_emit_compare


Committed to head and GCC 5 branch

gcc/ChangeLog:

2015-10-22  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	PR target/68015
	* config/s390/s390.md (mov<mode>cc): Emit compare only if we don't
	already have a comparison result.

gcc/testsuite/ChangeLog:

2015-10-22  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	PR target/68015
	* gcc.target/s390/pr68015.c: New test.

diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 1822459..ea65c74 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -6108,8 +6108,13 @@
 			  (match_operand:GPR 2 "nonimmediate_operand" "")
 			  (match_operand:GPR 3 "nonimmediate_operand" "")))]
   "TARGET_Z196"
-  "operands[1] = s390_emit_compare (GET_CODE (operands[1]),
-                                    XEXP (operands[1], 0), XEXP (operands[1], 1));")
+{
+  /* Emit the comparison insn in case we do not already have a comparison result.  */
+  if (!s390_comparison (operands[1], VOIDmode))
+    operands[1] = s390_emit_compare (GET_CODE (operands[1]),
+				     XEXP (operands[1], 0),
+				     XEXP (operands[1], 1));
+})
 
 ; locr, loc, stoc, locgr, locg, stocg
 (define_insn_and_split "*mov<mode>cc"
diff --git a/gcc/testsuite/gcc.target/s390/pr68015.c b/gcc/testsuite/gcc.target/s390/pr68015.c
new file mode 100644
index 0000000..b0d1f35
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr68015.c
@@ -0,0 +1,24 @@
+/* { dg-compile } */
+/* { dg-options "-O2 -march=z196" } */
+
+extern long useme (long, ...);
+
+void
+foo (void)
+{
+  long secs = useme (41);
+  long utc_secs = useme (42);
+  long h, m;
+
+  utc_secs = useme (42);
+  h = secs / 3600;
+  m = secs / 60;
+  if (utc_secs >= 86400)
+    {
+      m = 59;
+      h--;
+      if (h < 0)
+	h = 23;
+    }
+  useme (h, m);
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]