Commit 070fa48b by Andreas Krebbel Committed by Andreas Krebbel

Fix PR92950: Wrong code emitted for movv1qi

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-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-16  Andreas Krebbel  <krebbel@linux.ibm.com>

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

From-SVN: r279410
parent 438fbf63
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-14 Martin Sebor <msebor@redhat.com>
* doc/extend.texi (attribute access): Correct typos.
......@@ -291,9 +291,9 @@
; 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
......@@ -311,12 +311,10 @@
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")
......
2019-12-16 Andreas Krebbel <krebbel@linux.ibm.com>
PR target/92950
* gcc.target/s390/vector/pr92950.c: New test.
2019-12-15 Andrew Pinski <apinski@marvell.com>
* gcc.c-torture/compile/bitfield-1.c: New test.
......
/* { dg-do run } */
/* { dg-options "-O3 -mzarch -march=z13 --save-temps" } */
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();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment