aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2020-09-02 18:00:35 +0200
committerIlya Leoshkevich <iii@linux.ibm.com>2020-09-16 14:16:34 +0200
commit2cab2431d519b8ce951829624c882dd24485bde8 (patch)
tree18b7c7a43b77e73079d71e8048eb4209e0f90e83
parentd66f83c25b1e37b5b6d60a368366269ff7c5260b (diff)
downloadgcc-2cab2431d519b8ce951829624c882dd24485bde8.zip
gcc-2cab2431d519b8ce951829624c882dd24485bde8.tar.gz
gcc-2cab2431d519b8ce951829624c882dd24485bde8.tar.bz2
IBM Z: Fix *vec_tf_to_v1tf constraints
Certain alternatives of *vec_tf_to_v1tf use "v" constraint for its TFmode source operand. Therefore it is assigned to VEC_REGS class, and when it is reloaded using *movtf_64, whose relevant alternatives need FP_REGS, LRA loops and ICE happens. The reason is that register class mismatch causes LRA to emit another reload, which triggers this issue again. Fix by using "f" constraint, which is more appropriate for FP register pairs anyway. gcc/ChangeLog: 2020-09-02 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/vector.md(*vec_tf_to_v1tf): Use "f" instead of "v" for the source operand.
-rw-r--r--gcc/config/s390/vector.md2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index 131bbda..2573b7d 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -567,7 +567,7 @@
; single vector register.
(define_insn "*vec_tf_to_v1tf"
[(set (match_operand:V1TF 0 "nonimmediate_operand" "=v,v,R,v,v")
- (vec_duplicate:V1TF (match_operand:TF 1 "general_operand" "v,R,v,G,d")))]
+ (vec_duplicate:V1TF (match_operand:TF 1 "general_operand" "f,R,f,G,d")))]
"TARGET_VX"
"@
vmrhg\t%v0,%1,%N1