Fix xxeval predicates (PR 99921).
authorMichael Meissner <meissner@linux.ibm.com>
Fri, 13 Aug 2021 23:43:27 +0000 (19:43 -0400)
committerMichael Meissner <meissner@linux.ibm.com>
Fri, 13 Aug 2021 23:43:27 +0000 (19:43 -0400)
I noticed that the xxeval built-in function used the altivec_register_operand
predicate.  Since it takes vsx registers, this might force the register
allocate to issue a move when it could use a traditional floating point
register.  This patch fixes that.

2021-08-13  Michael Meissner  <meissner@linux.ibm.com>

gcc/
PR target/99921
* config/rs6000/altivec.md (xxeval): Use register_predicate
instead of altivec_register_predicate.

gcc/config/rs6000/altivec.md

index d70c17e..fd86c30 100644 (file)
 
 (define_insn "xxeval"
   [(set (match_operand:V2DI 0 "register_operand" "=wa")
-       (unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "wa")
-                     (match_operand:V2DI 2 "altivec_register_operand" "wa")
-                     (match_operand:V2DI 3 "altivec_register_operand" "wa")
+       (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "wa")
+                     (match_operand:V2DI 2 "register_operand" "wa")
+                     (match_operand:V2DI 3 "register_operand" "wa")
                      (match_operand:QI 4 "u8bit_cint_operand" "n")]
                     UNSPEC_XXEVAL))]
    "TARGET_POWER10"