rs6000: Remove Ftrad, Fvsx, Fs; add s and sd
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 4 Jun 2019 23:30:43 +0000 (01:30 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 4 Jun 2019 23:30:43 +0000 (01:30 +0200)
This removes the <Ftrad>, <Fvsx>, and <Fs> mode attributes, and creates
new <sd> and <s> mode attributes instead.  <sd> is either "s" or "d",
depending on whether the mode is single-precision or double-precision
floating point; and <s> is either "s" or nothing.

* config/rs6000/rs6000.md (SFDF, SFDF2): Adjust comments.
(define_mode_attr sd): New.
(define_mode_attr s): New.
(define_mode_attr Ftrad): Delete.
(define_mode_attr Fvsx): Delete.
(define_mode_attr Fs): Delete.
(rest of file): Use the new mode attributes.
* config.rs6000/vsx.md: Use the new mode attributes.

From-SVN: r271931

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/vsx.md

index 00ca70e8211054d419c0d6de00eac0791c822768..fd0b9bffc52e68c9324bd73a1f1aaadb78cd7ea1 100644 (file)
@@ -1,3 +1,14 @@
+2019-06-04  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/rs6000/rs6000.md (SFDF, SFDF2): Adjust comments.
+       (define_mode_attr sd): New.
+       (define_mode_attr s): New.
+       (define_mode_attr Ftrad): Delete.
+       (define_mode_attr Fvsx): Delete.
+       (define_mode_attr Fs): Delete.
+       (rest of file): Use the new mode attributes.
+       * config.rs6000/vsx.md: Use the new mode attributes.
+
 2019-06-04  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * config/rs6000/vsx.md: Replace all <VSa> that are used with VSX_W
index f596987fb7495e385e0a9600b021ab1985686480..c0a7f7698bbfa78a1691f40893bc933631531a05 100644 (file)
 ; Iterator for reciprocal estimate instructions
 (define_mode_iterator RECIPF [SF DF V4SF V2DF])
 
-; Iterator for just SF/DF
+; SFmode or DFmode.
 (define_mode_iterator SFDF [SF DF])
 
-; Like SFDF, but a different name to match conditional move where the
-; comparison operands may be a different mode than the input operands.
+; And again, for when we need two FP modes in a pattern.
 (define_mode_iterator SFDF2 [SF DF])
 
+; A generic s/d attribute, for sp/dp for example.
+(define_mode_attr sd [(SF "s") (DF "d")])
+
+; "s" or nothing, for fmuls/fmul for example.
+(define_mode_attr s [(SF "s") (DF "")])
+
 ; Iterator for 128-bit floating point that uses the IBM double-double format
 (define_mode_iterator IBM128 [(IF "FLOAT128_IBM_P (IFmode)")
                              (TF "FLOAT128_IBM_P (TFmode)")])
 ; Iterator for ISA 3.0 supported floating point types
 (define_mode_iterator FP_ISA3 [SF DF])
 
-; SF/DF suffix for traditional floating instructions
-(define_mode_attr Ftrad                [(SF "s") (DF "")])
-
-; SF/DF suffix for VSX instructions
-(define_mode_attr Fvsx         [(SF "sp") (DF  "dp")])
-
 ; SF/DF constraint for arithmetic on traditional floating point registers
 (define_mode_attr Ff           [(SF "f") (DF "d") (DI "d")])
 
 ; Which isa is needed for those float instructions?
 (define_mode_attr Fisa         [(SF "p8v")  (DF "*") (DI "*")])
 
-; s/d suffix for things like sdiv/ddiv
-(define_mode_attr Fs           [(SF "s")  (DF "d")])
-
 ; FRE/FRES support
 (define_mode_attr Ffre         [(SF "fres") (DF "fre")])
 (define_mode_attr FFRE         [(SF "FRES") (DF "FRE")])
                   (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,wa")))]
   "TARGET_HARD_FLOAT"
   "@
-   fadd<Ftrad> %0,%1,%2
-   xsadd<Fvsx> %x0,%x1,%x2"
+   fadd<s> %0,%1,%2
+   xsadd<sd>p %x0,%x1,%x2"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>")])
 
                    (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,wa")))]
   "TARGET_HARD_FLOAT"
   "@
-   fsub<Ftrad> %0,%1,%2
-   xssub<Fvsx> %x0,%x1,%x2"
+   fsub<s> %0,%1,%2
+   xssub<sd>p %x0,%x1,%x2"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>")])
 
                   (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,wa")))]
   "TARGET_HARD_FLOAT"
   "@
-   fmul<Ftrad> %0,%1,%2
-   xsmul<Fvsx> %x0,%x1,%x2"
+   fmul<s> %0,%1,%2
+   xsmul<sd>p %x0,%x1,%x2"
   [(set_attr "type" "dmul")
    (set_attr "isa" "*,<Fisa>")])
 
                  (match_operand:SFDF 2 "gpc_reg_operand" "<Ff>,wa")))]
   "TARGET_HARD_FLOAT"
   "@
-   fdiv<Ftrad> %0,%1,%2
-   xsdiv<Fvsx> %x0,%x1,%x2"
-  [(set_attr "type" "<Fs>div")
+   fdiv<s> %0,%1,%2
+   xsdiv<sd>p %x0,%x1,%x2"
+  [(set_attr "type" "<sd>div")
    (set_attr "isa" "*,<Fisa>")])
 
 (define_insn "*sqrt<mode>2_internal"
        (sqrt:SFDF (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,wa")))]
   "TARGET_HARD_FLOAT && TARGET_PPC_GPOPT"
   "@
-   fsqrt<Ftrad> %0,%1
-   xssqrt<Fvsx> %x0,%x1"
-  [(set_attr "type" "<Fs>sqrt")
+   fsqrt<s> %0,%1
+   xssqrt<sd>p %x0,%x1"
+  [(set_attr "type" "<sd>sqrt")
    (set_attr "isa" "*,<Fisa>")])
 
 (define_expand "sqrt<mode>2"
 })
 
 ;; Floating point reciprocal approximation
-(define_insn "fre<Fs>"
+(define_insn "fre<sd>"
   [(set (match_operand:SFDF 0 "gpc_reg_operand" "=<Ff>,wa")
        (unspec:SFDF [(match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,wa")]
                     UNSPEC_FRES))]
   "TARGET_<FFRE>"
   "@
-   fre<Ftrad> %0,%1
-   xsre<Fvsx> %x0,%x1"
+   fre<s> %0,%1
+   xsre<sd>p %x0,%x1"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>")])
 
                     UNSPEC_RSQRT))]
   "RS6000_RECIP_HAVE_RSQRTE_P (<MODE>mode)"
   "@
-   frsqrte<Ftrad> %0,%1
-   xsrsqrte<Fvsx> %x0,%x1"
+   frsqrte<s> %0,%1
+   xsrsqrte<sd>p %x0,%x1"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>")])
 
    && (!avoiding_indexed_address_p (<MODE>mode)
        || !gpc_reg_operand (operands[2], Pmode))"
   "@
-   lf<Fs>ux %3,%0,%2
-   lf<Fs>u %3,%2(%0)"
+   lf<sd>ux %3,%0,%2
+   lf<sd>u %3,%2(%0)"
   [(set_attr "type" "fpload")
    (set_attr "update" "yes")
    (set_attr "indexed" "yes,no")
    && (!avoiding_indexed_address_p (<MODE>mode)
        || !gpc_reg_operand (operands[2], Pmode))"
   "@
-   stf<Fs>ux %3,%0,%2
-   stf<Fs>u %3,%2(%0)"
+   stf<sd>ux %3,%0,%2
+   stf<sd>u %3,%2(%0)"
   [(set_attr "type" "fpstore")
    (set_attr "update" "yes")
    (set_attr "indexed" "yes,no")
          (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,wa")))]
   "TARGET_HARD_FLOAT"
   "@
-   fmadd<Ftrad> %0,%1,%2,%3
-   xsmadda<Fvsx> %x0,%x1,%x2
-   xsmaddm<Fvsx> %x0,%x1,%x3"
+   fmadd<s> %0,%1,%2,%3
+   xsmadda<sd>p %x0,%x1,%x2
+   xsmaddm<sd>p %x0,%x1,%x3"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>,<Fisa>")])
 
         (neg:SFDF (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,wa"))))]
   "TARGET_HARD_FLOAT"
   "@
-   fmsub<Ftrad> %0,%1,%2,%3
-   xsmsuba<Fvsx> %x0,%x1,%x2
-   xsmsubm<Fvsx> %x0,%x1,%x3"
+   fmsub<s> %0,%1,%2,%3
+   xsmsuba<sd>p %x0,%x1,%x2
+   xsmsubm<sd>p %x0,%x1,%x3"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>,<Fisa>")])
 
          (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,wa"))))]
   "TARGET_HARD_FLOAT"
   "@
-   fnmadd<Ftrad> %0,%1,%2,%3
-   xsnmadda<Fvsx> %x0,%x1,%x2
-   xsnmaddm<Fvsx> %x0,%x1,%x3"
+   fnmadd<s> %0,%1,%2,%3
+   xsnmadda<sd>p %x0,%x1,%x2
+   xsnmaddm<sd>p %x0,%x1,%x3"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>,<Fisa>")])
 
           (match_operand:SFDF 3 "gpc_reg_operand" "<Ff>,0,wa")))))]
   "TARGET_HARD_FLOAT"
   "@
-   fnmsub<Ftrad> %0,%1,%2,%3
-   xsnmsuba<Fvsx> %x0,%x1,%x2
-   xsnmsubm<Fvsx> %x0,%x1,%x3"
+   fnmsub<s> %0,%1,%2,%3
+   xsnmsuba<sd>p %x0,%x1,%x2
+   xsnmsubm<sd>p %x0,%x1,%x3"
   [(set_attr "type" "fp")
    (set_attr "isa" "*,<Fisa>,<Fisa>")])
 \f
index d349091fb3a9fae7a70d560ecec9b0a8c53c3a49..0e04455bbb2ae50e372b9aa12fc43949cde6d0f6 100644 (file)
 ;;  (The lt bit is set if operand 1 is negative.  The eq bit is set
 ;;   if any of the conditions tested by operand 2 are satisfied.
 ;;   The gt and unordered bits are cleared to zero.)
-(define_expand "xststdc<Fvsx>"
+(define_expand "xststdc<sd>p"
   [(set (match_dup 3)
        (compare:CCFP
         (unspec:SFDF
 })
 
 ;; The VSX Scalar Test Negative Double- and Single-Precision
-(define_expand "xststdcneg<Fvsx>"
+(define_expand "xststdcneg<sd>p"
   [(set (match_dup 2)
        (compare:CCFP
         (unspec:SFDF
   "xststdcqp %0,%1,%2"
   [(set_attr "type" "fpcompare")])
 
-(define_insn "*xststdc<Fvsx>"
+(define_insn "*xststdc<sd>p"
   [(set (match_operand:CCFP 0 "" "=y")
        (compare:CCFP
         (unspec:SFDF [(match_operand:SFDF 1 "vsx_register_operand" "wa")
          UNSPEC_VSX_STSTDC)
         (match_operand:SI 3 "zero_constant" "j")))]
   "TARGET_P9_VECTOR"
-  "xststdc<Fvsx> %0,%x1,%2"
+  "xststdc<sd>p %0,%x1,%2"
   [(set_attr "type" "fpcompare")])
 
 ;; VSX Vector Extract Exponent Double and Single Precision