]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix PR92950: Wrong code emitted for movv1qi
authorAndreas Krebbel <krebbel@linux.ibm.com>
Tue, 17 Dec 2019 08:37:26 +0000 (08:37 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Tue, 17 Dec 2019 08:37:26 +0000 (08:37 +0000)
The backend emits 16 bit memory loads for single element character
vector.  As a result the character will not be right justified in the
GPR.

gcc/ChangeLog:

2019-12-17  Andreas Krebbel  <krebbel@linux.ibm.com>

Backport from mainline
2019-12-16  Andreas Krebbel  <krebbel@linux.ibm.com>

PR target/92950
* config/s390/vector.md ("mov<mode>" for V_8): Replace lh, lhy,
and lhrl with llc.

gcc/testsuite/ChangeLog:

2019-12-17  Andreas Krebbel  <krebbel@linux.ibm.com>

Backport from mainline
2019-12-16  Andreas Krebbel  <krebbel@linux.ibm.com>

PR target/92950
* gcc.target/s390/vector/pr92950.c: New test.

From-SVN: r279453

gcc/ChangeLog
gcc/config/s390/vector.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/vector/pr92950.c [new file with mode: 0644]

index 2e934af4794fc501151bc4514f43fed352f4c071..7f354be427b8547540db0b571311bee1a25afa5c 100644 (file)
@@ -1,3 +1,12 @@
+2019-12-17  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       Backport from mainline
+       2019-12-16  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       PR target/92950
+       * config/s390/vector.md ("mov<mode>" for V_8): Replace lh, lhy,
+       and lhrl with llc.
+
 2019-12-12  Vineet Gupta  <vgupta@synopsys.com>
 
        Backport from mainline
index 21cc76534b114f52d49f2423243233b990e0a2b1..6ca503b0d4427c9677d2776c4de38d2d6cbffb4f 100644 (file)
 ; However, this would probably be slower.
 
 (define_insn "mov<mode>"
-  [(set (match_operand:V_8 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  S,  Q,  S,  d,  d,d,d,d,R,T")
-        (match_operand:V_8 1 "general_operand"      " v,d,v,R,v,j00,jm1,jyy,jxx,d,j00,j00,jm1,jm1,j00,jm1,R,T,b,d,d"))]
-  ""
+  [(set (match_operand:V_8 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  S,  Q,  S,  d,  d,d,R,T")
+        (match_operand:V_8 1 "general_operand"      " v,d,v,R,v,j00,jm1,jyy,jxx,d,j00,j00,jm1,jm1,j00,jm1,T,d,d"))]
+  "TARGET_VX"
   "@
    vlr\t%v0,%v1
    vlvgb\t%v0,%1,0
    mviy\t%0,-1
    lhi\t%0,0
    lhi\t%0,-1
-   lh\t%0,%1
-   lhy\t%0,%1
-   lhrl\t%0,%1
+   llc\t%0,%1
    stc\t%1,%0
    stcy\t%1,%0"
-  [(set_attr "op_type"      "VRR,VRS,VRS,VRX,VRX,VRI,VRI,VRI,VRI,RR,SI,SIY,SI,SIY,RI,RI,RX,RXY,RIL,RX,RXY")])
+  [(set_attr "op_type"      "VRR,VRS,VRS,VRX,VRX,VRI,VRI,VRI,VRI,RR,SI,SIY,SI,SIY,RI,RI,RXY,RX,RXY")])
 
 (define_insn "mov<mode>"
   [(set (match_operand:V_16 0 "nonimmediate_operand" "=v,v,d,v,R,  v,  v,  v,  v,d,  Q,  Q,  d,  d,d,d,d,R,T,b")
index 3ec5f55852b1fce42bc2a8da2a0f902d4b458399..dcee8381c861d00c082dfe68f061c620abc310a5 100644 (file)
@@ -1,3 +1,11 @@
+2019-12-17  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       Backport from mainline
+       2019-12-16  Andreas Krebbel  <krebbel@linux.ibm.com>
+
+       PR target/92950
+       * gcc.target/s390/vector/pr92950.c: New test.
+
 2019-12-12  Harald Anlauf  <anlauf@gmx.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/s390/vector/pr92950.c b/gcc/testsuite/gcc.target/s390/vector/pr92950.c
new file mode 100644 (file)
index 0000000..5084ce9
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -march=z13" } */
+
+struct a {
+  int b;
+  char c;
+};
+struct a d = {1, 16};
+struct a *e = &d;
+
+int f = 0;
+
+int main() {
+  struct a g = {0, 0 };
+  f = 0;
+
+  for (; f <= 1; f++) {
+    g = d;
+    *e = g;
+  }
+
+  if (d.c != 16)
+    __builtin_abort();
+}