]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
S/390: Fix failing RTL check in s390_canonicalize_comparison
authorIlya Leoshkevich <iii@linux.ibm.com>
Wed, 6 Nov 2019 10:10:04 +0000 (10:10 +0000)
committerIlya Leoshkevich <iii@gcc.gnu.org>
Wed, 6 Nov 2019 10:10:04 +0000 (10:10 +0000)
The new sigfpe-eh.c fails with

    internal compiler error: RTL check: expected elt 0 type 'e' or 'u', have 'w' (rtx const_int)

This is most likely due to a typo: XEXP (*op1, 0) was used, when
XEXP (*op0, 1) was intended.  This did not cause any user-visible
problems, because reversed_comparison_code_parts ignores the
respective argument, and the release compiler is built without RTL
checks.

gcc/ChangeLog:

2019-11-06  Ilya Leoshkevich  <iii@linux.ibm.com>

* config/s390/s390.c (s390_canonicalize_comparison): Use XEXP
(*op0, 1) instead of XEXP (*op1, 0).

gcc/testsuite/ChangeLog:

2019-11-06  Ilya Leoshkevich  <iii@linux.ibm.com>

* gcc.target/s390/sigfpe-eh.c: New test.

From-SVN: r277874

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/sigfpe-eh.c [new file with mode: 0644]

index 4a24d37df06e37aa16345d8dc6f3a04d4e81eff8..5690dd9566f1c6551f08ee2043db7865a928f2c3 100644 (file)
@@ -1,3 +1,9 @@
+2019-11-06  Ilya Leoshkevich  <iii@linux.ibm.com>
+       Backport from mainline
+
+       * config/s390/s390.c (s390_canonicalize_comparison): Use XEXP
+       (*op0, 1) instead of XEXP (*op1, 0).
+
 2019-11-05  Segher Boessenkool  <segher@kernel.crashing.org>
 
        Backport from trunk
index 081b67d8dab524972de10a5ae228dd8511e6de00..db3f94978ec3073a5e9603bc1dffebf91e8eff93 100644 (file)
@@ -1788,7 +1788,7 @@ s390_canonicalize_comparison (int *code, rtx *op0, rtx *op1,
       if (*code == EQ)
        new_code = reversed_comparison_code_parts (GET_CODE (*op0),
                                                   XEXP (*op0, 0),
-                                                  XEXP (*op1, 0), NULL);
+                                                  XEXP (*op0, 1), NULL);
       else
        new_code = GET_CODE (*op0);
 
index 7a0bedbfb309e2139a00b33b2c2082088d8448d1..b88ed2e8e91adf2dfa1516dbb9bf3e5082676eef 100644 (file)
@@ -1,3 +1,8 @@
+2019-11-06  Ilya Leoshkevich  <iii@linux.ibm.com>
+
+       Backport from mainline
+       * gcc.target/s390/sigfpe-eh.c: New test.
+
 2019-11-05  Andreas Krebbel  <krebbel@linux.ibm.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/s390/sigfpe-eh.c b/gcc/testsuite/gcc.target/s390/sigfpe-eh.c
new file mode 100644 (file)
index 0000000..52b0bf3
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=z196 -O2 -fexceptions -fnon-call-exceptions" } */
+
+extern float f (void);
+extern float g (void);
+
+float h (float x, float y)
+{
+  return x < y ? f () : g ();
+}