LCOV - code coverage report
Current view: top level - gcc/config/i386 - sse.md (source / functions) Hit Total Coverage
Test: gcc.info Lines: 14985 16141 92.8 %
Date: 2020-03-28 11:57:23 Functions: 2038 2706 75.3 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : ;; GCC machine description for SSE instructions
       2                 :            : ;; Copyright (C) 2005-2020 Free Software Foundation, Inc.
       3                 :            : ;;
       4                 :            : ;; This file is part of GCC.
       5                 :            : ;;
       6                 :            : ;; GCC is free software; you can redistribute it and/or modify
       7                 :            : ;; it under the terms of the GNU General Public License as published by
       8                 :            : ;; the Free Software Foundation; either version 3, or (at your option)
       9                 :            : ;; any later version.
      10                 :            : ;;
      11                 :            : ;; GCC is distributed in the hope that it will be useful,
      12                 :            : ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 :            : ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 :            : ;; GNU General Public License for more details.
      15                 :            : ;;
      16                 :            : ;; You should have received a copy of the GNU General Public License
      17                 :            : ;; along with GCC; see the file COPYING3.  If not see
      18                 :            : ;; <http://www.gnu.org/licenses/>.
      19                 :            : 
      20                 :            : (define_c_enum "unspec" [
      21                 :            :   ;; SSE
      22                 :            :   UNSPEC_MOVNT
      23                 :            : 
      24                 :            :   ;; SSE2
      25                 :            :   UNSPEC_MOVDI_TO_SSE
      26                 :            : 
      27                 :            :   ;; SSE3
      28                 :            :   UNSPEC_LDDQU
      29                 :            : 
      30                 :            :   ;; SSSE3
      31                 :            :   UNSPEC_PSHUFB
      32                 :            :   UNSPEC_PSIGN
      33                 :            :   UNSPEC_PALIGNR
      34                 :            : 
      35                 :            :   ;; For SSE4A support
      36                 :            :   UNSPEC_EXTRQI
      37                 :            :   UNSPEC_EXTRQ
      38                 :            :   UNSPEC_INSERTQI
      39                 :            :   UNSPEC_INSERTQ
      40                 :            : 
      41                 :            :   ;; For SSE4.1 support
      42                 :            :   UNSPEC_BLENDV
      43                 :            :   UNSPEC_INSERTPS
      44                 :            :   UNSPEC_DP
      45                 :            :   UNSPEC_MOVNTDQA
      46                 :            :   UNSPEC_MPSADBW
      47                 :            :   UNSPEC_PHMINPOSUW
      48                 :            :   UNSPEC_PTEST
      49                 :            : 
      50                 :            :   ;; For SSE4.2 support
      51                 :            :   UNSPEC_PCMPESTR
      52                 :            :   UNSPEC_PCMPISTR
      53                 :            : 
      54                 :            :   ;; For FMA4 support
      55                 :            :   UNSPEC_FMADDSUB
      56                 :            :   UNSPEC_XOP_UNSIGNED_CMP
      57                 :            :   UNSPEC_XOP_TRUEFALSE
      58                 :            :   UNSPEC_XOP_PERMUTE
      59                 :            :   UNSPEC_FRCZ
      60                 :            : 
      61                 :            :   ;; For AES support
      62                 :            :   UNSPEC_AESENC
      63                 :            :   UNSPEC_AESENCLAST
      64                 :            :   UNSPEC_AESDEC
      65                 :            :   UNSPEC_AESDECLAST
      66                 :            :   UNSPEC_AESIMC
      67                 :            :   UNSPEC_AESKEYGENASSIST
      68                 :            : 
      69                 :            :   ;; For PCLMUL support
      70                 :            :   UNSPEC_PCLMUL
      71                 :            : 
      72                 :            :   ;; For AVX support
      73                 :            :   UNSPEC_PCMP
      74                 :            :   UNSPEC_VPERMIL
      75                 :            :   UNSPEC_VPERMIL2
      76                 :            :   UNSPEC_VPERMIL2F128
      77                 :            :   UNSPEC_CAST
      78                 :            :   UNSPEC_VTESTP
      79                 :            :   UNSPEC_VCVTPH2PS
      80                 :            :   UNSPEC_VCVTPS2PH
      81                 :            : 
      82                 :            :   ;; For AVX2 support
      83                 :            :   UNSPEC_VPERMVAR
      84                 :            :   UNSPEC_VPERMTI
      85                 :            :   UNSPEC_GATHER
      86                 :            :   UNSPEC_VSIBADDR
      87                 :            : 
      88                 :            :   ;; For AVX512F support
      89                 :            :   UNSPEC_VPERMT2
      90                 :            :   UNSPEC_UNSIGNED_FIX_NOTRUNC
      91                 :            :   UNSPEC_UNSIGNED_PCMP
      92                 :            :   UNSPEC_TESTM
      93                 :            :   UNSPEC_TESTNM
      94                 :            :   UNSPEC_SCATTER
      95                 :            :   UNSPEC_RCP14
      96                 :            :   UNSPEC_RSQRT14
      97                 :            :   UNSPEC_FIXUPIMM
      98                 :            :   UNSPEC_SCALEF
      99                 :            :   UNSPEC_VTERNLOG
     100                 :            :   UNSPEC_GETEXP
     101                 :            :   UNSPEC_GETMANT
     102                 :            :   UNSPEC_ALIGN
     103                 :            :   UNSPEC_CONFLICT
     104                 :            :   UNSPEC_COMPRESS
     105                 :            :   UNSPEC_COMPRESS_STORE
     106                 :            :   UNSPEC_EXPAND
     107                 :            :   UNSPEC_MASKED_EQ
     108                 :            :   UNSPEC_MASKED_GT
     109                 :            : 
     110                 :            :   ;; Mask operations
     111                 :            :   UNSPEC_MASKOP
     112                 :            :   UNSPEC_KORTEST
     113                 :            :   UNSPEC_KTEST
     114                 :            : 
     115                 :            :   ;; For embed. rounding feature
     116                 :            :   UNSPEC_EMBEDDED_ROUNDING
     117                 :            : 
     118                 :            :   ;; For AVX512PF support
     119                 :            :   UNSPEC_GATHER_PREFETCH
     120                 :            :   UNSPEC_SCATTER_PREFETCH
     121                 :            : 
     122                 :            :   ;; For AVX512ER support
     123                 :            :   UNSPEC_EXP2
     124                 :            :   UNSPEC_RCP28
     125                 :            :   UNSPEC_RSQRT28
     126                 :            : 
     127                 :            :   ;; For SHA support
     128                 :            :   UNSPEC_SHA1MSG1
     129                 :            :   UNSPEC_SHA1MSG2
     130                 :            :   UNSPEC_SHA1NEXTE
     131                 :            :   UNSPEC_SHA1RNDS4
     132                 :            :   UNSPEC_SHA256MSG1
     133                 :            :   UNSPEC_SHA256MSG2
     134                 :            :   UNSPEC_SHA256RNDS2
     135                 :            : 
     136                 :            :   ;; For AVX512BW support
     137                 :            :   UNSPEC_DBPSADBW
     138                 :            :   UNSPEC_PMADDUBSW512
     139                 :            :   UNSPEC_PMADDWD512
     140                 :            :   UNSPEC_PSHUFHW
     141                 :            :   UNSPEC_PSHUFLW
     142                 :            :   UNSPEC_CVTINT2MASK
     143                 :            : 
     144                 :            :   ;; For AVX512DQ support
     145                 :            :   UNSPEC_REDUCE
     146                 :            :   UNSPEC_FPCLASS
     147                 :            :   UNSPEC_RANGE
     148                 :            : 
     149                 :            :   ;; For AVX512IFMA support
     150                 :            :   UNSPEC_VPMADD52LUQ
     151                 :            :   UNSPEC_VPMADD52HUQ
     152                 :            : 
     153                 :            :   ;; For AVX512VBMI support
     154                 :            :   UNSPEC_VPMULTISHIFT
     155                 :            : 
     156                 :            :   ;; For AVX5124FMAPS/AVX5124VNNIW support
     157                 :            :   UNSPEC_VP4FMADD
     158                 :            :   UNSPEC_VP4FNMADD
     159                 :            :   UNSPEC_VP4DPWSSD
     160                 :            :   UNSPEC_VP4DPWSSDS
     161                 :            : 
     162                 :            :   ;; For GFNI support
     163                 :            :   UNSPEC_GF2P8AFFINEINV
     164                 :            :   UNSPEC_GF2P8AFFINE
     165                 :            :   UNSPEC_GF2P8MUL
     166                 :            : 
     167                 :            :   ;; For AVX512VBMI2 support
     168                 :            :   UNSPEC_VPSHLD
     169                 :            :   UNSPEC_VPSHRD
     170                 :            :   UNSPEC_VPSHRDV
     171                 :            :   UNSPEC_VPSHLDV
     172                 :            : 
     173                 :            :   ;; For AVX512VNNI support
     174                 :            :   UNSPEC_VPMADDUBSWACCD
     175                 :            :   UNSPEC_VPMADDUBSWACCSSD
     176                 :            :   UNSPEC_VPMADDWDACCD
     177                 :            :   UNSPEC_VPMADDWDACCSSD
     178                 :            : 
     179                 :            :   ;; For VAES support
     180                 :            :   UNSPEC_VAESDEC
     181                 :            :   UNSPEC_VAESDECLAST
     182                 :            :   UNSPEC_VAESENC
     183                 :            :   UNSPEC_VAESENCLAST
     184                 :            : 
     185                 :            :   ;; For VPCLMULQDQ support
     186                 :            :   UNSPEC_VPCLMULQDQ
     187                 :            : 
     188                 :            :   ;; For AVX512BITALG support
     189                 :            :   UNSPEC_VPSHUFBIT
     190                 :            : 
     191                 :            :   ;; For VP2INTERSECT support
     192                 :            :   UNSPEC_VP2INTERSECT
     193                 :            : 
     194                 :            :   ;; For AVX512BF16 support
     195                 :            :   UNSPEC_VCVTNE2PS2BF16
     196                 :            :   UNSPEC_VCVTNEPS2BF16
     197                 :            :   UNSPEC_VDPBF16PS
     198                 :            : ])
     199                 :            : 
     200                 :            : (define_c_enum "unspecv" [
     201                 :            :   UNSPECV_LDMXCSR
     202                 :            :   UNSPECV_STMXCSR
     203                 :            :   UNSPECV_CLFLUSH
     204                 :            :   UNSPECV_MONITOR
     205                 :            :   UNSPECV_MWAIT
     206                 :            :   UNSPECV_VZEROALL
     207                 :            :   UNSPECV_VZEROUPPER
     208                 :            : ])
     209                 :            : 
     210                 :            : ;; All vector modes including V?TImode, used in move patterns.
     211                 :            : (define_mode_iterator VMOVE
     212                 :     292683 :   [(V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI
     213                 :      78361 :    (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI
     214                 :      50845 :    (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
     215                 :     114911 :    (V8DI "TARGET_AVX512F")  (V4DI "TARGET_AVX") V2DI
     216                 :     104174 :    (V4TI "TARGET_AVX512F") (V2TI "TARGET_AVX") V1TI
     217                 :    3844950 :    (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
     218                 :    7665940 :    (V8DF "TARGET_AVX512F")  (V4DF "TARGET_AVX") V2DF])
     219                 :   15578100 : 
     220                 :   15880000 : ;; All AVX-512{F,VL} vector modes. Supposed TARGET_AVX512F baseline.
     221                 :   17870400 : (define_mode_iterator V48_AVX512VL
     222                 :   17979700 :   [V16SI (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     223                 :   19126600 :    V8DI  (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")
     224                 :   12516300 :    V16SF (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     225                 :    7669700 :    V8DF  (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     226                 :        260 : 
     227                 :       2746 : ;; 1,2 byte AVX-512{BW,VL} vector modes. Supposed TARGET_AVX512BW baseline.
     228                 :       6897 : (define_mode_iterator VI12_AVX512VL
     229                 :       7745 :   [V64QI (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")
     230                 :       9953 :    V32HI (V16HI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")])
     231                 :      11388 : 
     232                 :       8640 : ;; Same iterator, but without supposed TARGET_AVX512BW
     233                 :       8047 : (define_mode_iterator VI12_AVX512VLBW
     234                 :      12240 :   [(V64QI "TARGET_AVX512BW") (V16QI "TARGET_AVX512VL")
     235                 :      12502 :    (V32QI "TARGET_AVX512VL && TARGET_AVX512BW") (V32HI "TARGET_AVX512BW")
     236                 :       7928 :    (V16HI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")])
     237                 :       7663 : 
     238                 :       3821 : (define_mode_iterator VI1_AVX512VL
     239                 :     229403 :   [V64QI (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")])
     240                 :     219946 : 
     241                 :      31587 : ;; All vector modes
     242                 :     217446 : (define_mode_iterator V
     243                 :      39743 :   [(V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI
     244                 :     280774 :    (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI
     245                 :      11883 :    (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
     246                 :      15407 :    (V8DI "TARGET_AVX512F")  (V4DI "TARGET_AVX") V2DI
     247                 :       2873 :    (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
     248                 :      46174 :    (V8DF "TARGET_AVX512F")  (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     249                 :       1326 : 
     250                 :       3642 : ;; All 128bit vector modes
     251                 :       4377 : (define_mode_iterator V_128
     252                 :     174054 :   [V16QI V8HI V4SI V2DI V4SF (V2DF "TARGET_SSE2")])
     253                 :       6097 : 
     254                 :        168 : ;; All 256bit vector modes
     255                 :      98646 : (define_mode_iterator V_256
     256                 :      29710 :   [V32QI V16HI V8SI V4DI V8SF V4DF])
     257                 :    1697870 : 
     258                 :       1847 : ;; All 128bit and 256bit vector modes
     259                 :        456 : (define_mode_iterator V_128_256
     260                 :         39 :   [V32QI V16QI V16HI V8HI V8SI V4SI V4DI V2DI V8SF V4SF V4DF V2DF])
     261                 :    1073790 : 
     262                 :      15650 : ;; All 512bit vector modes
     263                 :     712439 : (define_mode_iterator V_512 [V64QI V32HI V16SI V8DI V16SF V8DF])
     264                 :       9448 : 
     265                 :      11357 : ;; All 256bit and 512bit vector modes
     266                 :       1948 : (define_mode_iterator V_256_512
     267                 :       9368 :   [V32QI V16HI V8SI V4DI V8SF V4DF
     268                 :       9385 :    (V64QI "TARGET_AVX512F") (V32HI "TARGET_AVX512F") (V16SI "TARGET_AVX512F")
     269                 :      38947 :    (V8DI "TARGET_AVX512F") (V16SF "TARGET_AVX512F") (V8DF "TARGET_AVX512F")])
     270                 :      10146 : 
     271                 :            : ;; All vector float modes
     272                 :       1219 : (define_mode_iterator VF
     273                 :       3125 :   [(V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
     274                 :       4736 :    (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     275                 :       8625 : 
     276                 :        210 : ;; 128- and 256-bit float vector modes
     277                 :        204 : (define_mode_iterator VF_128_256
     278                 :     148382 :   [(V8SF "TARGET_AVX") V4SF
     279                 :     188170 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     280                 :      86546 : 
     281                 :       5562 : ;; All SFmode vector float modes
     282                 :    1000720 : (define_mode_iterator VF1
     283                 :      76768 :   [(V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF])
     284                 :      95006 : 
     285                 :     147319 : (define_mode_iterator VF1_AVX2
     286                 :      55800 :   [(V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX2") V4SF])
     287                 :       2265 : 
     288                 :      12490 : ;; 128- and 256-bit SF vector modes
     289                 :     124607 : (define_mode_iterator VF1_128_256
     290                 :        719 :   [(V8SF "TARGET_AVX") V4SF])
     291                 :       3443 : 
     292                 :     887894 : (define_mode_iterator VF1_128_256VL
     293                 :       1251 :   [V8SF (V4SF "TARGET_AVX512VL")])
     294                 :     103167 : 
     295                 :     221336 : ;; All DFmode vector float modes
     296                 :      56799 : (define_mode_iterator VF2
     297                 :        295 :   [(V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") V2DF])
     298                 :     877665 : 
     299                 :     878170 : ;; 128- and 256-bit DF vector modes
     300                 :       2323 : (define_mode_iterator VF2_128_256
     301                 :      20357 :   [(V4DF "TARGET_AVX") V2DF])
     302                 :       1022 : 
     303                 :   69661100 : (define_mode_iterator VF2_512_256
     304                 :        801 :   [(V8DF "TARGET_AVX512F") V4DF])
     305                 :        745 : 
     306                 :     982083 : (define_mode_iterator VF2_512_256VL
     307                 :       2343 :   [V8DF (V4DF "TARGET_AVX512VL")])
     308                 :        310 : 
     309                 :   55404400 : ;; All 128bit vector float modes
     310                 :        362 : (define_mode_iterator VF_128
     311                 :        231 :   [V4SF (V2DF "TARGET_SSE2")])
     312                 :       9751 : 
     313                 :       7034 : ;; All 256bit vector float modes
     314                 :      14079 : (define_mode_iterator VF_256
     315                 :     533218 :   [V8SF V4DF])
     316                 :       1712 : 
     317                 :       1160 : ;; All 512bit vector float modes
     318                 :       6221 : (define_mode_iterator VF_512
     319                 :       6363 :   [V16SF V8DF])
     320                 :      31256 : 
     321                 :      76049 : (define_mode_iterator VI48_AVX512VL
     322                 :       2229 :   [V16SI (V8SI  "TARGET_AVX512VL") (V4SI  "TARGET_AVX512VL")
     323                 :       8916 :    V8DI  (V4DI  "TARGET_AVX512VL") (V2DI  "TARGET_AVX512VL")])
     324                 :      35276 : 
     325                 :     183534 : (define_mode_iterator VF_AVX512VL
     326                 :      23681 :   [V16SF (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     327                 :      72017 :    V8DF (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     328                 :      19555 : 
     329                 :      23144 : (define_mode_iterator VF2_AVX512VL
     330                 :      10170 :   [V8DF (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     331                 :      11751 : 
     332                 :      18644 : (define_mode_iterator VF1_AVX512VL
     333                 :  263512480 :   [V16SF (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")])
     334                 :      66504 : 
     335                 :      13180 : ;; All vector integer modes
     336                 :      31772 : (define_mode_iterator VI
     337                 :     417446 :   [(V16SI "TARGET_AVX512F") (V8DI "TARGET_AVX512F")
     338                 :      11735 :    (V64QI "TARGET_AVX512BW") (V32QI "TARGET_AVX") V16QI
     339                 :      12669 :    (V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX") V8HI
     340                 :     936811 :    (V8SI "TARGET_AVX") V4SI
     341                 :   11163150 :    (V4DI "TARGET_AVX") V2DI])
     342                 :  263020000 : 
     343                 :      21423 : (define_mode_iterator VI_AVX2
     344                 :     127474 :   [(V64QI "TARGET_AVX512BW") (V32QI "TARGET_AVX2") V16QI
     345                 :     298236 :    (V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI
     346                 :     188384 :    (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX2") V4SI
     347                 :     299547 :    (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX2") V2DI])
     348                 :     712868 : 
     349                 :      21974 : ;; All QImode vector integer modes
     350                 :      80713 : (define_mode_iterator VI1
     351                 :     631170 :   [(V32QI "TARGET_AVX") V16QI])
     352                 :      22094 : 
     353                 :   10841800 : ;; All DImode vector integer modes
     354                 :      23135 : (define_mode_iterator V_AVX
     355                 :       6788 :   [V16QI V8HI V4SI V2DI V4SF V2DF
     356                 :       6168 :    (V32QI "TARGET_AVX") (V16HI "TARGET_AVX")
     357                 :    1655440 :    (V8SI "TARGET_AVX") (V4DI "TARGET_AVX")
     358                 :       6151 :    (V8SF "TARGET_AVX") (V4DF"TARGET_AVX")])
     359                 :     154235 : 
     360                 :      21139 : (define_mode_iterator VI48_AVX
     361                 :        697 :  [V4SI V2DI
     362                 :    9070930 :   (V8SI "TARGET_AVX") (V4DI "TARGET_AVX")])
     363                 :       5475 : 
     364                 :       1058 : (define_mode_iterator VI8
     365                 :      31104 :   [(V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") V2DI])
     366                 :        435 : 
     367                 :         39 : (define_mode_iterator VI8_FVL
     368                 :    8379930 :   [(V8DI "TARGET_AVX512F") V4DI (V2DI "TARGET_AVX512VL")])
     369                 :       1787 : 
     370                 :        539 : (define_mode_iterator VI8_AVX512VL
     371                 :      25841 :   [V8DI (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     372                 :      35745 : 
     373                 :        157 : (define_mode_iterator VI8_256_512
     374                 :        887 :   [V8DI (V4DI "TARGET_AVX512VL")])
     375                 :        883 : 
     376                 :        329 : (define_mode_iterator VI1_AVX2
     377                 :         55 :   [(V32QI "TARGET_AVX2") V16QI])
     378                 :        427 : 
     379                 :        334 : (define_mode_iterator VI1_AVX512
     380                 :        856 :   [(V64QI "TARGET_AVX512BW") (V32QI "TARGET_AVX2") V16QI])
     381                 :         68 : 
     382                 :       2709 : (define_mode_iterator VI1_AVX512F
     383                 :       2653 :   [(V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI])
     384                 :          0 : 
     385                 :       7507 : (define_mode_iterator VI2_AVX2
     386                 :        352 :   [(V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI])
     387                 :       2788 : 
     388                 :        982 : (define_mode_iterator VI2_AVX512F
     389                 :       1155 :   [(V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX2") V8HI])
     390                 :          4 : 
     391                 :      37166 : (define_mode_iterator VI4_AVX
     392                 :      41606 :   [(V8SI "TARGET_AVX") V4SI])
     393                 :      66858 : 
     394                 :            : (define_mode_iterator VI4_AVX2
     395                 :       7587 :   [(V8SI "TARGET_AVX2") V4SI])
     396                 :       7587 : 
     397                 :       7690 : (define_mode_iterator VI4_AVX512F
     398                 :         58 :   [(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX2") V4SI])
     399                 :       1109 : 
     400                 :            : (define_mode_iterator VI4_AVX512VL
     401                 :            :   [V16SI (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")])
     402                 :          2 : 
     403                 :      12788 : (define_mode_iterator VI48_AVX512F_AVX512VL
     404                 :      15112 :   [V4SI V8SI (V16SI "TARGET_AVX512F")
     405                 :          6 :    (V2DI "TARGET_AVX512VL") (V4DI "TARGET_AVX512VL") (V8DI "TARGET_AVX512F")])
     406                 :       1285 : 
     407                 :         26 : (define_mode_iterator VI2_AVX512VL
     408                 :        722 :   [(V8HI "TARGET_AVX512VL") (V16HI "TARGET_AVX512VL") V32HI])
     409                 :       1003 : 
     410                 :       3459 : (define_mode_iterator VI1_AVX512VL_F
     411                 :        649 :   [V32QI (V16QI "TARGET_AVX512VL") (V64QI "TARGET_AVX512F")])
     412                 :       1418 : 
     413                 :      19079 : (define_mode_iterator VI8_AVX2_AVX512BW
     414                 :      15075 :   [(V8DI "TARGET_AVX512BW") (V4DI "TARGET_AVX2") V2DI])
     415                 :     849716 : 
     416                 :       2850 : (define_mode_iterator VI8_AVX2
     417                 :       2848 :   [(V4DI "TARGET_AVX2") V2DI])
     418                 :       2028 : 
     419                 :      17180 : (define_mode_iterator VI8_AVX2_AVX512F
     420                 :      17692 :   [(V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX2") V2DI])
     421                 :     280997 : 
     422                 :     835318 : (define_mode_iterator VI8_AVX_AVX512F
     423                 :         38 :   [(V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX")])
     424                 :      45140 : 
     425                 :        224 : (define_mode_iterator VI4_128_8_256
     426                 :     790391 :   [V4SI V4DI])
     427                 :       8382 : 
     428                 :         79 : ;; All V8D* modes
     429                 :         33 : (define_mode_iterator V8FI
     430                 :      14240 :   [V8DF V8DI])
     431                 :         44 : 
     432                 :      32654 : ;; All V16S* modes
     433                 :      20740 : (define_mode_iterator V16FI
     434                 :      19853 :   [V16SF V16SI])
     435                 :      21676 : 
     436                 :      21676 : ;; ??? We should probably use TImode instead.
     437                 :      21676 : (define_mode_iterator VIMAX_AVX2_AVX512BW
     438                 :      19853 :   [(V4TI "TARGET_AVX512BW") (V2TI "TARGET_AVX2") V1TI])
     439                 :       1823 : 
     440                 :       1896 : ;; Suppose TARGET_AVX512BW as baseline
     441                 :         73 : (define_mode_iterator VIMAX_AVX512VL
     442                 :         73 :   [V4TI (V2TI "TARGET_AVX512VL") (V1TI "TARGET_AVX512VL")])
     443                 :       1823 : 
     444                 :      56101 : (define_mode_iterator VIMAX_AVX2
     445                 :      54278 :   [(V2TI "TARGET_AVX2") V1TI])
     446                 :       1829 : 
     447                 :            : ;; ??? This should probably be dropped in favor of VIMAX_AVX2_AVX512BW.
     448                 :        956 : (define_mode_iterator SSESCALARMODE
     449                 :      55480 :   [(V4TI "TARGET_AVX512BW") (V2TI "TARGET_AVX2") TI])
     450                 :      55480 : 
     451                 :      54524 : (define_mode_iterator VI12_AVX2
     452                 :         36 :   [(V64QI "TARGET_AVX512BW") (V32QI "TARGET_AVX2") V16QI
     453                 :         73 :    (V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI])
     454                 :        266 : 
     455                 :        204 : (define_mode_iterator VI24_AVX2
     456                 :       2760 :   [(V16HI "TARGET_AVX2") V8HI
     457                 :       2309 :    (V8SI "TARGET_AVX2") V4SI])
     458                 :       3943 : 
     459                 :        566 : (define_mode_iterator VI124_AVX2_24_AVX512F_1_AVX512BW
     460                 :         66 :   [(V64QI "TARGET_AVX512BW") (V32QI "TARGET_AVX2") V16QI
     461                 :         89 :    (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX2") V8HI
     462                 :        117 :    (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX2") V4SI])
     463                 :            : 
     464                 :         28 : (define_mode_iterator VI124_AVX2
     465                 :         28 :   [(V32QI "TARGET_AVX2") V16QI
     466                 :         30 :    (V16HI "TARGET_AVX2") V8HI
     467                 :          2 :    (V8SI "TARGET_AVX2") V4SI])
     468                 :          2 : 
     469                 :         58 : (define_mode_iterator VI2_AVX2_AVX512BW
     470                 :         58 :   [(V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI])
     471                 :         60 : 
     472                 :         60 : (define_mode_iterator VI248_AVX512VL
     473                 :         30 :   [V32HI V16SI V8DI
     474                 :         28 :    (V16HI "TARGET_AVX512VL") (V8SI "TARGET_AVX512VL")
     475                 :         28 :    (V4DI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")
     476                 :          0 :    (V4SI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     477                 :          0 : 
     478                 :       1268 : (define_mode_iterator VI48_AVX2
     479                 :       1268 :   [(V8SI "TARGET_AVX2") V4SI
     480                 :       1452 :    (V4DI "TARGET_AVX2") V2DI])
     481                 :        534 : 
     482                 :            : (define_mode_iterator VI248_AVX2
     483                 :            :   [(V16HI "TARGET_AVX2") V8HI
     484                 :       6224 :    (V8SI "TARGET_AVX2") V4SI
     485                 :       6315 :    (V4DI "TARGET_AVX2") V2DI])
     486                 :        393 : 
     487                 :        731 : (define_mode_iterator VI248_AVX2_8_AVX512F_24_AVX512BW
     488                 :        569 :   [(V32HI "TARGET_AVX512BW") (V16HI "TARGET_AVX2") V8HI
     489                 :            :    (V16SI "TARGET_AVX512BW") (V8SI "TARGET_AVX2") V4SI
     490                 :            :    (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX2") V2DI])
     491                 :            : 
     492                 :            : (define_mode_iterator VI248_AVX512BW
     493                 :            :   [(V32HI "TARGET_AVX512BW") V16SI V8DI])
     494                 :            : 
     495                 :        413 : (define_mode_iterator VI248_AVX512BW_AVX512VL
     496                 :        388 :   [(V32HI "TARGET_AVX512BW") 
     497                 :        729 :    (V4DI "TARGET_AVX512VL") V16SI V8DI])
     498                 :        194 : 
     499                 :        347 : ;; Suppose TARGET_AVX512VL as baseline
     500                 :        502 : (define_mode_iterator VI248_AVX512BW_1
     501                 :        303 :  [(V16HI "TARGET_AVX512BW") (V8HI "TARGET_AVX512BW")
     502                 :            :   V8SI V4SI
     503                 :       1880 :   V2DI])
     504                 :        322 :    
     505                 :       1517 : (define_mode_iterator VI248_AVX512BW_2
     506                 :        873 :  [(V16HI "TARGET_AVX512BW") (V8HI "TARGET_AVX512BW")
     507                 :            :   V8SI V4SI
     508                 :      10708 :   V4DI V2DI])
     509                 :        644 :    
     510                 :       8552 : (define_mode_iterator VI48_AVX512F
     511                 :       7264 :   [(V16SI "TARGET_AVX512F") V8SI V4SI
     512                 :        258 :    (V8DI "TARGET_AVX512F") V4DI V2DI])
     513                 :        773 : 
     514                 :            : (define_mode_iterator VI48_AVX_AVX512F
     515                 :       9061 :   [(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI
     516                 :       4756 :    (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") V2DI])
     517                 :       3497 : 
     518                 :       4466 : (define_mode_iterator VI12_AVX_AVX512F
     519                 :      38663 :   [ (V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") V16QI
     520                 :      25953 :     (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") V8HI])
     521                 :      43384 : 
     522                 :      31289 : (define_mode_iterator V48_AVX2
     523                 :       7284 :   [V4SF V2DF
     524                 :       1359 :    V8SF V4DF
     525                 :      48615 :    (V4SI "TARGET_AVX2") (V2DI "TARGET_AVX2")
     526                 :      51365 :    (V8SI "TARGET_AVX2") (V4DI "TARGET_AVX2")])
     527                 :       2164 : 
     528                 :       9422 : (define_mode_iterator VI1_AVX512VLBW
     529                 :      10042 :   [(V64QI "TARGET_AVX512BW") (V32QI  "TARGET_AVX512VL")
     530                 :       5380 :         (V16QI  "TARGET_AVX512VL")])
     531                 :        810 : 
     532                 :        174 : (define_mode_attr avx512
     533                 :       5108 :   [(V16QI "avx512vl") (V32QI "avx512vl") (V64QI "avx512bw")
     534                 :        542 :    (V8HI  "avx512vl") (V16HI  "avx512vl") (V32HI "avx512bw")
     535                 :        802 :    (V4SI  "avx512vl") (V8SI  "avx512vl") (V16SI "avx512f")
     536                 :       2201 :    (V2DI  "avx512vl") (V4DI  "avx512vl") (V8DI "avx512f")
     537                 :       1801 :    (V4SF "avx512vl") (V8SF "avx512vl") (V16SF "avx512f")
     538                 :       4236 :    (V2DF "avx512vl") (V4DF "avx512vl") (V8DF "avx512f")])
     539                 :       4424 : 
     540                 :       3948 : (define_mode_attr sse2_avx_avx512f
     541                 :        288 :   [(V16QI "sse2") (V32QI "avx") (V64QI "avx512f")
     542                 :       3948 :    (V8HI  "avx512vl") (V16HI  "avx512vl") (V32HI "avx512bw")
     543                 :         68 :    (V4SI  "sse2") (V8SI  "avx") (V16SI "avx512f")
     544                 :        183 :    (V2DI  "avx512vl") (V4DI  "avx512vl") (V8DI "avx512f")
     545                 :       2832 :    (V16SF "avx512f") (V8SF "avx") (V4SF "avx")
     546                 :       2419 :    (V8DF "avx512f") (V4DF "avx") (V2DF "avx")])
     547                 :       5251 : 
     548                 :        318 : (define_mode_attr sse2_avx2
     549                 :         76 :   [(V16QI "sse2") (V32QI "avx2") (V64QI "avx512bw")
     550                 :         41 :    (V8HI "sse2") (V16HI "avx2") (V32HI "avx512bw")
     551                 :         34 :    (V4SI "sse2") (V8SI "avx2") (V16SI "avx512f")
     552                 :      28982 :    (V2DI "sse2") (V4DI "avx2") (V8DI "avx512f")
     553                 :       1023 :    (V1TI "sse2") (V2TI "avx2") (V4TI "avx512bw")])
     554                 :       1135 : 
     555                 :       2113 : (define_mode_attr ssse3_avx2
     556                 :      67799 :    [(V16QI "ssse3") (V32QI "avx2") (V64QI "avx512bw")
     557                 :          7 :     (V4HI "ssse3") (V8HI "ssse3") (V16HI "avx2") (V32HI "avx512bw")
     558                 :          7 :     (V4SI "ssse3") (V8SI "avx2")
     559                 :      67792 :     (V2DI "ssse3") (V4DI "avx2")
     560                 :      67792 :     (TI "ssse3") (V2TI "avx2") (V4TI "avx512bw")])
     561                 :      21951 : 
     562                 :      45841 : (define_mode_attr sse4_1_avx2
     563                 :      12673 :    [(V16QI "sse4_1") (V32QI "avx2") (V64QI "avx512bw")
     564                 :      52348 :     (V8HI "sse4_1") (V16HI "avx2") (V32HI "avx512bw")
     565                 :      12673 :     (V4SI "sse4_1") (V8SI "avx2") (V16SI "avx512f")
     566                 :      39675 :     (V2DI "sse4_1") (V4DI "avx2") (V8DI "avx512dq")])
     567                 :      45823 : 
     568                 :      45823 : (define_mode_attr avx_avx2
     569                 :       6148 :   [(V4SF "avx") (V2DF "avx")
     570                 :      39675 :    (V8SF "avx") (V4DF "avx")
     571                 :      39675 :    (V4SI "avx2") (V2DI "avx2")
     572                 :       1431 :    (V8SI "avx2") (V4DI "avx2")])
     573                 :            : 
     574                 :        434 : (define_mode_attr vec_avx2
     575                 :        434 :   [(V16QI "vec") (V32QI "avx2")
     576                 :        415 :    (V8HI "vec") (V16HI "avx2")
     577                 :        415 :    (V4SI "vec") (V8SI "avx2")
     578                 :      46690 :    (V2DI "vec") (V4DI "avx2")])
     579                 :            : 
     580                 :      27689 : (define_mode_attr avx2_avx512
     581                 :      27689 :   [(V4SI "avx2") (V8SI "avx2") (V16SI "avx512f")
     582                 :      27689 :    (V2DI "avx2") (V4DI "avx2") (V8DI "avx512f")
     583                 :      27689 :    (V4SF "avx2") (V8SF "avx2") (V16SF "avx512f")
     584                 :      27689 :    (V2DF "avx2") (V4DF "avx2") (V8DF "avx512f")
     585                 :      27689 :    (V8HI "avx512vl") (V16HI "avx512vl") (V32HI "avx512bw")])
     586                 :      27689 : 
     587                 :            : (define_mode_attr shuffletype
     588                 :         60 :   [(V16SF "f") (V16SI "i") (V8DF "f") (V8DI "i")
     589                 :         60 :   (V8SF "f") (V8SI "i") (V4DF "f") (V4DI "i")
     590                 :         52 :   (V4SF "f") (V4SI "i") (V2DF "f") (V2DI "i")
     591                 :         52 :   (V32HI "i") (V16HI "i") (V8HI "i")
     592                 :         52 :   (V64QI "i") (V32QI "i") (V16QI "i")
     593                 :          0 :   (V4TI "i") (V2TI "i") (V1TI "i")])
     594                 :          0 : 
     595                 :         60 : (define_mode_attr ssequartermode
     596                 :            :   [(V16SF "V4SF") (V8DF "V2DF") (V16SI "V4SI") (V8DI "V2DI")])
     597                 :            : 
     598                 :            : (define_mode_attr ssequarterinsnmode
     599                 :            :   [(V16SF "V4SF") (V8DF "V2DF") (V16SI "TI") (V8DI "TI")])
     600                 :            : 
     601                 :            : (define_mode_attr vecmemsuffix
     602                 :            :   [(V16SF "{z}") (V8SF "{y}") (V4SF "{x}")
     603                 :            :    (V8DF "{z}") (V4DF "{y}") (V2DF "{x}")])
     604                 :            : 
     605                 :            : (define_mode_attr ssedoublemodelower
     606                 :            :   [(V16QI "v16hi") (V32QI "v32hi") (V64QI "v64hi")
     607                 :            :    (V8HI "v8si")   (V16HI "v16si") (V32HI "v32si")
     608                 :            :    (V4SI "v4di")   (V8SI "v8di")   (V16SI "v16di")])
     609                 :            : 
     610                 :            : (define_mode_attr ssedoublemode
     611                 :            :   [(V4SF "V8SF") (V8SF "V16SF") (V16SF "V32SF")
     612                 :            :    (V2DF "V4DF") (V4DF "V8DF") (V8DF "V16DF")
     613                 :            :    (V16QI "V16HI") (V32QI "V32HI") (V64QI "V64HI")
     614                 :            :    (V8HI "V8SI") (V16HI "V16SI") (V32HI "V32SI")
     615                 :            :    (V4SI "V4DI") (V8SI "V16SI") (V16SI "V32SI")
     616                 :            :    (V4DI "V8DI") (V8DI "V16DI")])
     617                 :            : 
     618                 :            : (define_mode_attr ssebytemode
     619                 :            :   [(V8DI "V64QI") (V4DI "V32QI") (V2DI "V16QI")
     620                 :            :    (V16SI "V64QI") (V8SI "V32QI") (V4SI "V16QI")])
     621                 :            : 
     622                 :            : ;; All 128bit vector integer modes
     623                 :            : (define_mode_iterator VI_128 [V16QI V8HI V4SI V2DI])
     624                 :            : 
     625                 :            : ;; All 256bit vector integer modes
     626                 :            : (define_mode_iterator VI_256 [V32QI V16HI V8SI V4DI])
     627                 :            : 
     628                 :            : ;; Various 128bit vector integer mode combinations
     629                 :            : (define_mode_iterator VI12_128 [V16QI V8HI])
     630                 :            : (define_mode_iterator VI14_128 [V16QI V4SI])
     631                 :            : (define_mode_iterator VI124_128 [V16QI V8HI V4SI])
     632                 :            : (define_mode_iterator VI24_128 [V8HI V4SI])
     633                 :            : (define_mode_iterator VI248_128 [V8HI V4SI V2DI])
     634                 :            : (define_mode_iterator VI48_128 [V4SI V2DI])
     635                 :            : 
     636                 :            : ;; Various 256bit and 512 vector integer mode combinations
     637                 :            : (define_mode_iterator VI124_256 [V32QI V16HI V8SI])
     638                 :            : (define_mode_iterator VI124_256_AVX512F_AVX512BW
     639                 :            :   [V32QI V16HI V8SI
     640                 :            :    (V64QI "TARGET_AVX512BW")
     641                 :            :    (V32HI "TARGET_AVX512BW")
     642                 :            :    (V16SI "TARGET_AVX512F")])
     643                 :            : (define_mode_iterator VI48_256 [V8SI V4DI])
     644                 :            : (define_mode_iterator VI48_512 [V16SI V8DI])
     645                 :            : (define_mode_iterator VI4_256_8_512 [V8SI V8DI])
     646                 :            : (define_mode_iterator VI_AVX512BW
     647                 :            :   [V16SI V8DI (V32HI "TARGET_AVX512BW") (V64QI "TARGET_AVX512BW")])
     648                 :          0 : 
     649                 :            : ;; Int-float size matches
     650                 :            : (define_mode_iterator VI4F_128 [V4SI V4SF])
     651                 :            : (define_mode_iterator VI8F_128 [V2DI V2DF])
     652                 :            : (define_mode_iterator VI4F_256 [V8SI V8SF])
     653                 :            : (define_mode_iterator VI8F_256 [V4DI V4DF])
     654                 :            : (define_mode_iterator VI4F_256_512
     655                 :        146 :   [V8SI V8SF
     656                 :        146 :    (V16SI "TARGET_AVX512F") (V16SF "TARGET_AVX512F")])
     657                 :        146 : (define_mode_iterator VI48F_256_512
     658                 :        292 :   [V8SI V8SF
     659                 :            :   (V16SI "TARGET_AVX512F") (V16SF "TARGET_AVX512F")
     660                 :        339 :   (V8DI  "TARGET_AVX512F") (V8DF  "TARGET_AVX512F")
     661                 :        210 :   (V4DI  "TARGET_AVX512VL") (V4DF  "TARGET_AVX512VL")])
     662                 :        215 : (define_mode_iterator VF48_I1248
     663                 :        130 :   [V16SI V16SF V8DI V8DF V32HI V64QI])
     664                 :       1058 : (define_mode_iterator VI48F
     665                 :       1498 :   [V16SI V16SF V8DI V8DF
     666                 :       1748 :    (V8SI "TARGET_AVX512VL") (V8SF "TARGET_AVX512VL")
     667                 :       1403 :    (V4DI "TARGET_AVX512VL") (V4DF "TARGET_AVX512VL")
     668                 :       1172 :    (V4SI "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     669                 :       1008 :    (V2DI "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     670                 :        184 : (define_mode_iterator VI48F_256 [V8SI V8SF V4DI V4DF])
     671                 :        980 : 
     672                 :       1973 : (define_mode_iterator VF_AVX512
     673                 :       1972 :   [(V4SF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")
     674                 :       2395 :    (V8SF "TARGET_AVX512VL") (V4DF "TARGET_AVX512VL")
     675                 :       1155 :    V16SF V8DF])
     676                 :        464 : 
     677                 :        581 : (define_mode_attr avx512bcst
     678                 :        779 :   [(V4SI "%{1to4%}") (V2DI "%{1to2%}")
     679                 :        892 :    (V8SI "%{1to8%}") (V4DI "%{1to4%}")
     680                 :        260 :    (V16SI "%{1to16%}") (V8DI "%{1to8%}")
     681                 :          0 :    (V4SF "%{1to4%}") (V2DF "%{1to2%}")
     682                 :          0 :    (V8SF "%{1to8%}") (V4DF "%{1to4%}")
     683                 :          0 :    (V16SF "%{1to16%}") (V8DF "%{1to8%}")])
     684                 :        942 : 
     685                 :          0 : ;; Mapping from float mode to required SSE level
     686                 :          0 : (define_mode_attr sse
     687                 :     205375 :   [(SF "sse") (DF "sse2")
     688                 :        942 :    (V4SF "sse") (V2DF "sse2")
     689                 :        942 :    (V16SF "avx512f") (V8SF "avx")
     690                 :        942 :    (V8DF "avx512f") (V4DF "avx")])
     691                 :     206317 : 
     692                 :     206317 : (define_mode_attr sse2
     693                 :     206317 :   [(V16QI "sse2") (V32QI "avx") (V64QI "avx512f")
     694                 :     206317 :    (V2DI "sse2") (V4DI "avx") (V8DI "avx512f")])
     695                 :     206317 : 
     696                 :     206317 : (define_mode_attr sse3
     697                 :     206317 :   [(V16QI "sse3") (V32QI "avx")])
     698                 :     206317 : 
     699                 :            : (define_mode_attr sse4_1
     700                 :     205454 :   [(V4SF "sse4_1") (V2DF "sse4_1")
     701                 :         79 :    (V8SF "avx") (V4DF "avx")
     702                 :     205454 :    (V8DF "avx512f")
     703                 :            :    (V4DI "avx") (V2DI "sse4_1")
     704                 :     205375 :    (V8SI "avx") (V4SI "sse4_1")
     705                 :     205375 :    (V16QI "sse4_1") (V32QI "avx")
     706                 :     205375 :    (V8HI "sse4_1") (V16HI "avx")])
     707                 :            : 
     708                 :     202656 : (define_mode_attr avxsizesuffix
     709                 :     202656 :   [(V64QI "512") (V32HI "512") (V16SI "512") (V8DI "512")
     710                 :     202656 :    (V32QI "256") (V16HI "256") (V8SI "256") (V4DI "256")
     711                 :            :    (V16QI "") (V8HI "") (V4SI "") (V2DI "")
     712                 :      54568 :    (V16SF "512") (V8DF "512")
     713                 :      54568 :    (V8SF "256") (V4DF "256")
     714                 :      54568 :    (V4SF "") (V2DF "")])
     715                 :            : 
     716                 :      54536 : ;; SSE instruction mode
     717                 :      54536 : (define_mode_attr sseinsnmode
     718                 :            :   [(V64QI "XI") (V32HI "XI") (V16SI "XI") (V8DI "XI") (V4TI "XI")
     719                 :      54280 :    (V32QI "OI") (V16HI "OI") (V8SI "OI") (V4DI "OI") (V2TI "OI")
     720                 :      54280 :    (V16QI "TI") (V8HI "TI") (V4SI "TI") (V2DI "TI") (V1TI "TI")
     721                 :            :    (V16SF "V16SF") (V8DF "V8DF")
     722                 :      48283 :    (V8SF "V8SF") (V4DF "V4DF")
     723                 :      48283 :    (V4SF "V4SF") (V2DF "V2DF")
     724                 :            :    (TI "TI")])
     725                 :      45353 : 
     726                 :      45353 : ;; Mapping of vector modes to corresponding mask size
     727                 :            : (define_mode_attr avx512fmaskmode
     728                 :        592 :   [(V64QI "DI") (V32QI "SI") (V16QI "HI")
     729                 :        592 :    (V32HI "SI") (V16HI "HI") (V8HI  "QI") (V4HI "QI")
     730                 :            :    (V16SI "HI") (V8SI  "QI") (V4SI  "QI")
     731                 :            :    (V8DI  "QI") (V4DI  "QI") (V2DI  "QI")
     732                 :            :    (V16SF "HI") (V8SF  "QI") (V4SF  "QI")
     733                 :            :    (V8DF  "QI") (V4DF  "QI") (V2DF  "QI")])
     734                 :            : 
     735                 :            : ;; Mapping of vector modes to corresponding mask size
     736                 :            : (define_mode_attr avx512fmaskmodelower
     737                 :            :   [(V64QI "di") (V32QI "si") (V16QI "hi")
     738                 :            :    (V32HI "si") (V16HI "hi") (V8HI  "qi") (V4HI "qi")
     739                 :            :    (V16SI "hi") (V8SI  "qi") (V4SI  "qi")
     740                 :            :    (V8DI  "qi") (V4DI  "qi") (V2DI  "qi")
     741                 :            :    (V16SF "hi") (V8SF  "qi") (V4SF  "qi")
     742                 :            :    (V8DF  "qi") (V4DF  "qi") (V2DF  "qi")])
     743                 :            : 
     744                 :            : ;; Mapping of vector modes to corresponding mask half size
     745                 :            : (define_mode_attr avx512fmaskhalfmode
     746                 :            :   [(V64QI "SI") (V32QI "HI") (V16QI "QI")
     747                 :            :    (V32HI "HI") (V16HI "QI") (V8HI  "QI") (V4HI "QI")
     748                 :            :    (V16SI "QI") (V8SI  "QI") (V4SI  "QI")
     749                 :            :    (V8DI  "QI") (V4DI  "QI") (V2DI  "QI")
     750                 :            :    (V16SF "QI") (V8SF  "QI") (V4SF  "QI")
     751                 :            :    (V8DF  "QI") (V4DF  "QI") (V2DF  "QI")])
     752                 :            : 
     753                 :            : ;; Mapping of vector float modes to an integer mode of the same size
     754                 :            : (define_mode_attr sseintvecmode
     755                 :            :   [(V16SF "V16SI") (V8DF  "V8DI")
     756                 :            :    (V8SF  "V8SI")  (V4DF  "V4DI")
     757                 :            :    (V4SF  "V4SI")  (V2DF  "V2DI")
     758                 :            :    (V16SI "V16SI") (V8DI  "V8DI")
     759                 :            :    (V8SI  "V8SI")  (V4DI  "V4DI")
     760                 :            :    (V4SI  "V4SI")  (V2DI  "V2DI")
     761                 :            :    (V16HI "V16HI") (V8HI  "V8HI")
     762                 :            :    (V32HI "V32HI") (V64QI "V64QI")
     763                 :            :    (V32QI "V32QI") (V16QI "V16QI")])
     764                 :            : 
     765                 :            : (define_mode_attr sseintvecmode2
     766                 :            :   [(V8DF "XI") (V4DF "OI") (V2DF "TI")
     767                 :            :    (V8SF "OI") (V4SF "TI")])
     768                 :            : 
     769                 :            : (define_mode_attr sseintvecmodelower
     770                 :            :   [(V16SF "v16si") (V8DF "v8di")
     771                 :            :    (V8SF "v8si") (V4DF "v4di")
     772                 :            :    (V4SF "v4si") (V2DF "v2di")
     773                 :            :    (V8SI "v8si") (V4DI "v4di")
     774                 :            :    (V4SI "v4si") (V2DI "v2di")
     775                 :            :    (V16HI "v16hi") (V8HI "v8hi")
     776                 :            :    (V32QI "v32qi") (V16QI "v16qi")])
     777                 :            : 
     778                 :            : ;; Mapping of vector modes to a vector mode of double size
     779                 :            : (define_mode_attr ssedoublevecmode
     780                 :            :   [(V32QI "V64QI") (V16HI "V32HI") (V8SI "V16SI") (V4DI "V8DI")
     781                 :            :    (V16QI "V32QI") (V8HI "V16HI") (V4SI "V8SI") (V2DI "V4DI")
     782                 :            :    (V8SF "V16SF") (V4DF "V8DF")
     783                 :            :    (V4SF "V8SF") (V2DF "V4DF")])
     784                 :            : 
     785                 :            : ;; Mapping of vector modes to a vector mode of half size
     786                 :            : (define_mode_attr ssehalfvecmode
     787                 :            :   [(V64QI "V32QI") (V32HI "V16HI") (V16SI "V8SI") (V8DI "V4DI") (V4TI "V2TI")
     788                 :            :    (V32QI "V16QI") (V16HI  "V8HI") (V8SI  "V4SI") (V4DI "V2DI")
     789                 :            :    (V16QI  "V8QI") (V8HI   "V4HI") (V4SI  "V2SI")
     790                 :            :    (V16SF "V8SF") (V8DF "V4DF")
     791                 :            :    (V8SF  "V4SF") (V4DF "V2DF")
     792                 :            :    (V4SF  "V2SF")])
     793                 :            : 
     794                 :            : (define_mode_attr ssehalfvecmodelower
     795                 :            :   [(V64QI "v32qi") (V32HI "v16hi") (V16SI "v8si") (V8DI "v4di") (V4TI "v2ti")
     796                 :            :    (V32QI "v16qi") (V16HI  "v8hi") (V8SI  "v4si") (V4DI "v2di")
     797                 :            :    (V16QI  "v8qi") (V8HI   "v4hi") (V4SI  "v2si")
     798                 :            :    (V16SF "v8sf") (V8DF "v4df")
     799                 :            :    (V8SF  "v4sf") (V4DF "v2df")
     800                 :            :    (V4SF  "v2sf")])
     801                 :            : 
     802                 :            : ;; Mapping of vector modes ti packed single mode of the same size
     803                 :            : (define_mode_attr ssePSmode
     804                 :            :   [(V16SI "V16SF") (V8DF "V16SF")
     805                 :            :    (V16SF "V16SF") (V8DI "V16SF")
     806                 :            :    (V64QI "V16SF") (V32QI "V8SF") (V16QI "V4SF")
     807                 :            :    (V32HI "V16SF") (V16HI "V8SF") (V8HI "V4SF")
     808                 :            :    (V8SI "V8SF") (V4SI "V4SF")
     809                 :            :    (V4DI "V8SF") (V2DI "V4SF")
     810                 :            :    (V4TI "V16SF") (V2TI "V8SF") (V1TI "V4SF")
     811                 :            :    (V8SF "V8SF") (V4SF "V4SF")
     812                 :            :    (V4DF "V8SF") (V2DF "V4SF")])
     813                 :            : 
     814                 :            : (define_mode_attr ssePSmode2
     815                 :            :   [(V8DI "V8SF") (V4DI "V4SF")])
     816                 :            : 
     817                 :            : ;; Mapping of vector modes back to the scalar modes
     818                 :            : (define_mode_attr ssescalarmode
     819                 :            :   [(V64QI "QI") (V32QI "QI") (V16QI "QI")
     820                 :            :    (V32HI "HI") (V16HI "HI") (V8HI "HI")
     821                 :            :    (V16SI "SI") (V8SI "SI")  (V4SI "SI")
     822                 :            :    (V8DI "DI")  (V4DI "DI")  (V2DI "DI")
     823                 :            :    (V16SF "SF") (V8SF "SF")  (V4SF "SF")
     824                 :            :    (V8DF "DF")  (V4DF "DF")  (V2DF "DF")
     825                 :            :    (V4TI "TI")  (V2TI "TI")])
     826                 :            : 
     827                 :            : ;; Mapping of vector modes back to the scalar modes
     828                 :            : (define_mode_attr ssescalarmodelower
     829                 :            :   [(V64QI "qi") (V32QI "qi") (V16QI "qi")
     830                 :            :    (V32HI "hi") (V16HI "hi") (V8HI "hi")
     831                 :            :    (V16SI "si") (V8SI "si")  (V4SI "si")
     832                 :            :    (V8DI "di")  (V4DI "di")  (V2DI "di")
     833                 :            :    (V16SF "sf") (V8SF "sf")  (V4SF "sf")
     834                 :            :    (V8DF "df")  (V4DF "df")  (V2DF "df")
     835                 :            :    (V4TI "ti")  (V2TI "ti")])
     836                 :            : 
     837                 :            : ;; Mapping of vector modes to the 128bit modes
     838                 :            : (define_mode_attr ssexmmmode
     839                 :            :   [(V64QI "V16QI") (V32QI "V16QI") (V16QI "V16QI")
     840                 :            :    (V32HI "V8HI")  (V16HI "V8HI") (V8HI "V8HI")
     841                 :            :    (V16SI "V4SI")  (V8SI "V4SI")  (V4SI "V4SI")
     842                 :            :    (V8DI "V2DI")   (V4DI "V2DI")  (V2DI "V2DI")
     843                 :            :    (V16SF "V4SF")  (V8SF "V4SF")  (V4SF "V4SF")
     844                 :            :    (V8DF "V2DF")   (V4DF "V2DF")  (V2DF "V2DF")])
     845                 :            : 
     846                 :            : ;; Pointer size override for scalar modes (Intel asm dialect)
     847                 :            : (define_mode_attr iptr
     848                 :            :   [(V64QI "b") (V32HI "w") (V16SI "k") (V8DI "q")
     849                 :            :    (V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
     850                 :            :    (V16QI "b") (V8HI "w") (V4SI "k") (V2DI "q")
     851                 :            :    (V16SF "k") (V8DF "q")
     852                 :            :    (V8SF "k") (V4DF "q")
     853                 :            :    (V4SF "k") (V2DF "q")
     854                 :            :    (SF "k") (DF "q")])
     855                 :            : 
     856                 :            : ;; Mapping of vector modes to VPTERNLOG suffix
     857                 :            : (define_mode_attr ternlogsuffix
     858                 :            :   [(V8DI "q") (V4DI "q") (V2DI "q")
     859                 :            :    (V16SI "d") (V8SI "d") (V4SI "d")
     860                 :            :    (V32HI "d") (V16HI "d") (V8HI "d")
     861                 :            :    (V64QI "d") (V32QI "d") (V16QI "d")])
     862                 :            : 
     863                 :            : ;; Number of scalar elements in each vector type
     864                 :            : (define_mode_attr ssescalarnum
     865                 :            :   [(V64QI "64") (V16SI "16") (V8DI "8")
     866                 :            :    (V32QI "32") (V16HI "16") (V8SI "8") (V4DI "4")
     867                 :            :    (V16QI "16") (V8HI "8") (V4SI "4") (V2DI "2")
     868                 :            :    (V16SF "16") (V8DF "8")
     869                 :            :    (V8SF "8") (V4DF "4")
     870                 :            :    (V4SF "4") (V2DF "2")])
     871                 :            : 
     872                 :            : ;; Mask of scalar elements in each vector type
     873                 :            : (define_mode_attr ssescalarnummask
     874                 :            :   [(V32QI "31") (V16HI "15") (V8SI "7") (V4DI "3")
     875                 :            :    (V16QI "15") (V8HI "7") (V4SI "3") (V2DI "1")
     876                 :            :    (V8SF "7") (V4DF "3")
     877                 :            :    (V4SF "3") (V2DF "1")])
     878                 :            : 
     879                 :            : (define_mode_attr ssescalarsize
     880                 :            :   [(V4TI  "64") (V2TI  "64") (V1TI  "64")
     881                 :            :    (V8DI  "64") (V4DI  "64") (V2DI  "64")
     882                 :            :    (V64QI "8") (V32QI "8") (V16QI "8")
     883                 :            :    (V32HI "16") (V16HI "16") (V8HI "16")
     884                 :            :    (V16SI "32") (V8SI "32") (V4SI "32")
     885                 :            :    (V16SF "32") (V8SF "32") (V4SF "32")
     886                 :            :    (V8DF "64") (V4DF "64") (V2DF "64")])
     887                 :            : 
     888                 :            : ;; SSE prefix for integer vector modes
     889                 :            : (define_mode_attr sseintprefix
     890                 :            :   [(V2DI  "p") (V2DF  "")
     891                 :            :    (V4DI  "p") (V4DF  "")
     892                 :            :    (V8DI  "p") (V8DF  "")
     893                 :            :    (V4SI  "p") (V4SF  "")
     894                 :            :    (V8SI  "p") (V8SF  "")
     895                 :            :    (V16SI "p") (V16SF "")
     896                 :            :    (V16QI "p") (V8HI "p")
     897                 :            :    (V32QI "p") (V16HI "p")
     898                 :            :    (V64QI "p") (V32HI "p")])
     899                 :            : 
     900                 :            : ;; SSE scalar suffix for vector modes
     901                 :            : (define_mode_attr ssescalarmodesuffix
     902                 :            :   [(SF "ss") (DF "sd")
     903                 :            :    (V16SF "ss") (V8DF "sd")
     904                 :            :    (V8SF "ss") (V4DF "sd")
     905                 :            :    (V4SF "ss") (V2DF "sd")
     906                 :            :    (V16SI "d") (V8DI "q")
     907                 :            :    (V8SI "d") (V4DI "q")
     908                 :            :    (V4SI "d") (V2DI "q")])
     909                 :            : 
     910                 :            : ;; Pack/unpack vector modes
     911                 :            : (define_mode_attr sseunpackmode
     912                 :            :   [(V16QI "V8HI") (V8HI "V4SI") (V4SI "V2DI")
     913                 :            :    (V32QI "V16HI") (V16HI "V8SI") (V8SI "V4DI")
     914                 :            :    (V32HI "V16SI") (V64QI "V32HI") (V16SI "V8DI")])
     915                 :            : 
     916                 :            : (define_mode_attr ssepackmode
     917                 :            :   [(V8HI "V16QI") (V4SI "V8HI") (V2DI "V4SI")
     918                 :            :    (V16HI "V32QI") (V8SI "V16HI") (V4DI "V8SI")
     919                 :            :    (V32HI "V64QI") (V16SI "V32HI") (V8DI "V16SI")])
     920                 :            : 
     921                 :            : ;; Mapping of the max integer size for xop rotate immediate constraint
     922                 :            : (define_mode_attr sserotatemax
     923                 :            :   [(V16QI "7") (V8HI "15") (V4SI "31") (V2DI "63")])
     924                 :            : 
     925                 :            : ;; Mapping of mode to cast intrinsic name
     926                 :            : (define_mode_attr castmode
     927                 :            :  [(V8SI "si") (V8SF "ps") (V4DF "pd")
     928                 :            :   (V16SI "si") (V16SF "ps") (V8DF "pd")])
     929                 :            : 
     930                 :            : ;; Instruction suffix for sign and zero extensions.
     931                 :            : (define_code_attr extsuffix [(sign_extend "sx") (zero_extend "zx")])
     932                 :            : 
     933                 :            : ;; i128 for integer vectors and TARGET_AVX2, f128 otherwise.
     934                 :            : ;; i64x4 or f64x4 for 512bit modes.
     935                 :            : (define_mode_attr i128
     936                 :            :   [(V16SF "f64x4") (V8SF "f128") (V8DF "f64x4") (V4DF "f128")
     937                 :            :    (V64QI "i64x4") (V32QI "%~128") (V32HI "i64x4") (V16HI "%~128")
     938                 :            :    (V16SI "i64x4") (V8SI "%~128") (V8DI "i64x4") (V4DI "%~128")])
     939                 :            : 
     940                 :            : ;; For 256-bit modes for TARGET_AVX512VL && TARGET_AVX512DQ
     941                 :            : ;; i32x4, f32x4, i64x2 or f64x2 suffixes.
     942                 :            : (define_mode_attr i128vldq
     943                 :            :   [(V8SF "f32x4") (V4DF "f64x2")
     944                 :            :    (V32QI "i32x4") (V16HI "i32x4") (V8SI "i32x4") (V4DI "i64x2")])
     945                 :            : 
     946                 :            : ;; Mix-n-match
     947                 :            : (define_mode_iterator AVX256MODE2P [V8SI V8SF V4DF])
     948                 :            : (define_mode_iterator AVX512MODE2P [V16SI V16SF V8DF])
     949                 :            : 
     950                 :            : ;; Mapping for dbpsabbw modes
     951                 :            : (define_mode_attr dbpsadbwmode
     952                 :            :   [(V32HI "V64QI") (V16HI "V32QI") (V8HI "V16QI")])
     953                 :            : 
     954                 :            : ;; Mapping suffixes for broadcast
     955                 :            : (define_mode_attr bcstscalarsuff
     956                 :            :   [(V64QI "b")  (V32QI "b") (V16QI "b")
     957                 :            :    (V32HI "w")  (V16HI "w") (V8HI "w")
     958                 :            :    (V16SI "d")  (V8SI "d")  (V4SI "d")
     959                 :            :    (V8DI "q")   (V4DI "q")  (V2DI "q")
     960                 :            :    (V16SF "ss") (V8SF "ss") (V4SF "ss")
     961                 :            :    (V8DF "sd")  (V4DF "sd") (V2DF "sd")])
     962                 :            : 
     963                 :            : ;; Tie mode of assembler operand to mode iterator
     964                 :            : (define_mode_attr xtg_mode
     965                 :            :   [(V16QI "x") (V8HI "x") (V4SI "x") (V2DI "x") (V4SF "x") (V2DF "x")
     966                 :            :    (V32QI "t") (V16HI "t") (V8SI "t") (V4DI "t") (V8SF "t") (V4DF "t")
     967                 :            :    (V64QI "g") (V32HI "g") (V16SI "g") (V8DI "g") (V16SF "g") (V8DF "g")])
     968                 :            : 
     969                 :            : ;; Half mask mode for unpacks
     970                 :            : (define_mode_attr HALFMASKMODE
     971                 :            :   [(DI "SI") (SI "HI")])
     972                 :            : 
     973                 :            : ;; Double mask mode for packs
     974                 :            : (define_mode_attr DOUBLEMASKMODE
     975                 :            :   [(HI "SI") (SI "DI")])
     976                 :            : 
     977                 :            : 
     978                 :            : ;; Include define_subst patterns for instructions with mask
     979                 :            : (include "subst.md")
     980                 :            : 
     981                 :            : ;; Patterns whose name begins with "sse{,2,3}_" are invoked by intrinsics.
     982                 :            : 
     983                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     984                 :            : ;;
     985                 :            : ;; Move patterns
     986                 :            : ;;
     987                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     988                 :            : 
     989                 :            : ;; All of these patterns are enabled for SSE1 as well as SSE2.
     990                 :            : ;; This is essential for maintaining stable calling conventions.
     991                 :            : 
     992                 :            : (define_expand "mov<mode>"
     993                 :            :   [(set (match_operand:VMOVE 0 "nonimmediate_operand")
     994                 :            :         (match_operand:VMOVE 1 "nonimmediate_operand"))]
     995                 :            :   "TARGET_SSE"
     996                 :    1614980 : {
     997                 :       5492 :   ix86_expand_vector_move (<MODE>mode, operands);
     998                 :    1614980 :   DONE;
     999                 :            : })
    1000                 :            : 
    1001                 :            : (define_insn "mov<mode>_internal"
    1002                 :            :   [(set (match_operand:VMOVE 0 "nonimmediate_operand"
    1003                 :            :          "=v,v ,v ,m")
    1004                 :            :         (match_operand:VMOVE 1 "nonimmediate_or_sse_const_operand"
    1005                 :            :          " C,BC,vm,v"))]
    1006                 :   26655800 :   "TARGET_SSE
    1007                 :   27625000 :    && (register_operand (operands[0], <MODE>mode)
    1008                 :    4595630 :        || register_operand (operands[1], <MODE>mode))"
    1009                 :    5227010 : {
    1010                 :    1294930 :   switch (get_attr_type (insn))
    1011                 :            :     {
    1012                 :    1217280 :     case TYPE_SSELOG1:
    1013                 :    1217280 :       return standard_sse_constant_opcode (insn, operands);
    1014                 :    1131820 : 
    1015                 :    4293740 :     case TYPE_SSEMOV:
    1016                 :    2826459 :       return ix86_output_ssemov (insn, operands);
    1017                 :            : 
    1018                 :     757795 :     default:
    1019                 :    1609490 :       gcc_unreachable ();
    1020                 :    1609490 :     }
    1021                 :    1609520 : }
    1022                 :    2367315 :   [(set_attr "type" "sselog1,sselog1,ssemov,ssemov")
    1023                 :     757825 :    (set_attr "prefix" "maybe_vex")
    1024                 :    2367285 :    (set (attr "mode")
    1025                 :    2051612 :         (cond [(match_test "TARGET_AVX")
    1026                 :     757825 :                  (const_string "<sseinsnmode>")
    1027                 :     757825 :                (ior (not (match_test "TARGET_SSE2"))
    1028                 :     757825 :                     (match_test "optimize_function_for_size_p (cfun)"))
    1029                 :     757825 :                  (const_string "V4SF")
    1030                 :    1155110 :                (and (match_test "<MODE>mode == V2DFmode")
    1031                 :     757795 :                     (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
    1032                 :     757795 :                  (const_string "V4SF")
    1033                 :     757795 :                (and (eq_attr "alternative" "3")
    1034                 :   13984295 :                     (match_test "TARGET_SSE_TYPELESS_STORES"))
    1035                 :            :                  (const_string "V4SF")
    1036                 :    9621396 :                (and (eq_attr "alternative" "0")
    1037                 :    1833896 :                     (match_test "TARGET_SSE_LOAD0_BY_PXOR"))
    1038                 :    5312906 :                  (const_string "TI")
    1039                 :     450716 :               ]
    1040                 :    2834150 :               (const_string "<sseinsnmode>")))
    1041                 :     252016 :    (set (attr "enabled")
    1042                 :   15254916 :         (cond [(and (match_test "<MODE_SIZE> == 16")
    1043                 :    4242106 :                     (eq_attr "alternative" "1"))
    1044                 :  178987000 :                  (symbol_ref "TARGET_SSE2")
    1045                 :  175776000 :                (and (match_test "<MODE_SIZE> == 32")
    1046                 :   20044200 :                     (eq_attr "alternative" "1"))
    1047                 :    9505959 :                  (symbol_ref "TARGET_AVX2")
    1048                 :   11627909 :               ]
    1049                 :  122587209 :               (symbol_ref "true")))])
    1050                 :        119 : 
    1051                 :       9070 : (define_insn "<avx512>_load<mode>_mask"
    1052                 :        119 :   [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v,v")
    1053                 :     102699 :         (vec_merge:V48_AVX512VL
    1054                 :     102580 :           (match_operand:V48_AVX512VL 1 "nonimmediate_operand" "v,m")
    1055                 :     102580 :           (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand" "0C,0C")
    1056                 :            :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk,Yk")))]
    1057                 :       5954 :   "TARGET_AVX512F"
    1058                 :       1764 : {
    1059                 :      36669 :   if (FLOAT_MODE_P (GET_MODE_INNER (<MODE>mode)))
    1060                 :      34296 :     {
    1061                 :      36335 :       if (misaligned_operand (operands[1], <MODE>mode))
    1062                 :       1324 :         return "vmovu<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1063                 :          0 :       else
    1064                 :        581 :         return "vmova<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1065                 :        210 :     }
    1066                 :        210 :   else
    1067                 :        210 :     {
    1068                 :       1049 :       if (misaligned_operand (operands[1], <MODE>mode))
    1069                 :            :         return "vmovdqu<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1070                 :            :       else
    1071                 :       6128 :         return "vmovdqa<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1072                 :       5405 :     }
    1073                 :       5405 : }
    1074                 :          0 :   [(set_attr "type" "ssemov")
    1075                 :            :    (set_attr "prefix" "evex")
    1076                 :            :    (set_attr "memory" "none,load")
    1077                 :       1790 :    (set_attr "mode" "<sseinsnmode>")])
    1078                 :        248 : 
    1079                 :        248 : (define_insn "<avx512>_load<mode>_mask"
    1080                 :     224727 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v,v")
    1081                 :        248 :         (vec_merge:VI12_AVX512VL
    1082                 :     224479 :           (match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v,m")
    1083                 :     224479 :           (match_operand:VI12_AVX512VL 2 "nonimm_or_0_operand" "0C,0C")
    1084                 :     224479 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk,Yk")))]
    1085                 :       1692 :   "TARGET_AVX512BW"
    1086                 :     224479 :   "vmovdqu<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    1087                 :     224479 :   [(set_attr "type" "ssemov")
    1088                 :        382 :    (set_attr "prefix" "evex")
    1089                 :     224861 :    (set_attr "memory" "none,load")
    1090                 :        382 :    (set_attr "mode" "<sseinsnmode>")])
    1091                 :       4497 : 
    1092                 :       4497 : (define_insn "avx512f_mov<ssescalarmodelower>_mask"
    1093                 :       8560 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    1094                 :            :         (vec_merge:VF_128
    1095                 :            :           (vec_merge:VF_128
    1096                 :            :             (match_operand:VF_128 2 "register_operand" "v")
    1097                 :            :             (match_operand:VF_128 3 "nonimm_or_0_operand" "0C")
    1098                 :          0 :             (match_operand:QI 4 "register_operand" "Yk"))
    1099                 :            :           (match_operand:VF_128 1 "register_operand" "v")
    1100                 :            :           (const_int 1)))]
    1101                 :      94398 :   "TARGET_AVX512F"
    1102                 :      94281 :   "vmov<ssescalarmodesuffix>\t{%2, %1, %0%{%4%}%N3|%0%{%4%}%N3, %1, %2}"
    1103                 :      94271 :   [(set_attr "type" "ssemov")
    1104                 :      94271 :    (set_attr "prefix" "evex")
    1105                 :      94453 :    (set_attr "mode" "<ssescalarmode>")])
    1106                 :      94453 : 
    1107                 :        182 : (define_expand "avx512f_load<mode>_mask"
    1108                 :            :   [(set (match_operand:<ssevecmode> 0 "register_operand")
    1109                 :            :         (vec_merge:<ssevecmode>
    1110                 :            :           (vec_merge:<ssevecmode>
    1111                 :            :             (vec_duplicate:<ssevecmode>
    1112                 :          1 :               (match_operand:MODEF 1 "memory_operand"))
    1113                 :            :             (match_operand:<ssevecmode> 2 "nonimm_or_0_operand")
    1114                 :            :             (match_operand:QI 3 "register_operand"))
    1115                 :     112906 :           (match_dup 4)
    1116                 :     112906 :           (const_int 1)))]
    1117                 :     112906 :   "TARGET_AVX512F"
    1118                 :         60 :   "operands[4] = CONST0_RTX (<ssevecmode>mode);")
    1119                 :            : 
    1120                 :            : (define_insn "*avx512f_load<mode>_mask"
    1121                 :         60 :   [(set (match_operand:<ssevecmode> 0 "register_operand" "=v")
    1122                 :         60 :         (vec_merge:<ssevecmode>
    1123                 :         60 :           (vec_merge:<ssevecmode>
    1124                 :         60 :             (vec_duplicate:<ssevecmode>
    1125                 :         60 :               (match_operand:MODEF 1 "memory_operand" "m"))
    1126                 :    1342130 :             (match_operand:<ssevecmode> 2 "nonimm_or_0_operand" "0C")
    1127                 :    1342130 :             (match_operand:QI 3 "register_operand" "Yk"))
    1128                 :    1342130 :           (match_operand:<ssevecmode> 4 "const0_operand" "C")
    1129                 :         60 :           (const_int 1)))]
    1130                 :        162 :   "TARGET_AVX512F"
    1131                 :         35 :   "vmov<ssescalarmodesuffix>\t{%1, %0%{%3%}%N2|%0%{3%}%N2, %1}"
    1132                 :     805428 :   [(set_attr "type" "ssemov")
    1133                 :            :    (set_attr "prefix" "evex")
    1134                 :        133 :    (set_attr "memory" "load")
    1135                 :        133 :    (set_attr "mode" "<MODE>")])
    1136                 :        133 : 
    1137                 :            : (define_insn "avx512f_store<mode>_mask"
    1138                 :          0 :   [(set (match_operand:MODEF 0 "memory_operand" "=m")
    1139                 :          0 :         (if_then_else:MODEF
    1140                 :          0 :           (and:QI (match_operand:QI 2 "register_operand" "Yk")
    1141                 :     189172 :                  (const_int 1))
    1142                 :     189172 :           (vec_select:MODEF
    1143                 :     189172 :             (match_operand:<ssevecmode> 1 "register_operand" "v")
    1144                 :     189112 :             (parallel [(const_int 0)]))
    1145                 :          0 :           (match_dup 0)))]
    1146                 :         49 :   "TARGET_AVX512F"
    1147                 :         13 :   "vmov<ssescalarmodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
    1148                 :         30 :   [(set_attr "type" "ssemov")
    1149                 :          0 :    (set_attr "prefix" "evex")
    1150                 :         39 :    (set_attr "memory" "store")
    1151                 :         60 :    (set_attr "mode" "<MODE>")])
    1152                 :         60 : 
    1153                 :      36831 : (define_insn "<avx512>_blendm<mode>"
    1154                 :      36831 :   [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v")
    1155                 :      36861 :         (vec_merge:V48_AVX512VL
    1156                 :         30 :           (match_operand:V48_AVX512VL 2 "nonimmediate_operand" "vm")
    1157                 :         30 :           (match_operand:V48_AVX512VL 1 "register_operand" "v")
    1158                 :         30 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))]
    1159                 :         30 :   "TARGET_AVX512F"
    1160                 :     877073 :   "v<sseintprefix>blendm<ssemodesuffix>\t{%2, %1, %0%{%3%}|%0%{%3%}, %1, %2}"
    1161                 :         30 :   [(set_attr "type" "ssemov")
    1162                 :            :    (set_attr "prefix" "evex")
    1163                 :       2276 :    (set_attr "mode" "<sseinsnmode>")])
    1164                 :      40830 : 
    1165                 :     915597 : (define_insn "<avx512>_blendm<mode>"
    1166                 :     916414 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v")
    1167                 :     877860 :         (vec_merge:VI12_AVX512VL
    1168                 :        817 :           (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    1169                 :     877043 :           (match_operand:VI12_AVX512VL 1 "register_operand" "v")
    1170                 :      36884 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))]
    1171                 :        762 :   "TARGET_AVX512BW"
    1172                 :       3139 :   "vpblendm<ssemodesuffix>\t{%2, %1, %0%{%3%}|%0%{%3%}, %1, %2}"
    1173                 :       2377 :   [(set_attr "type" "ssemov")
    1174                 :            :    (set_attr "prefix" "evex")
    1175                 :        861 :    (set_attr "mode" "<sseinsnmode>")])
    1176                 :      30587 : 
    1177                 :            : (define_insn "<avx512>_store<mode>_mask"
    1178                 :        479 :   [(set (match_operand:V48_AVX512VL 0 "memory_operand" "=m")
    1179                 :        479 :         (vec_merge:V48_AVX512VL
    1180                 :        479 :           (match_operand:V48_AVX512VL 1 "register_operand" "v")
    1181                 :          0 :           (match_dup 0)
    1182                 :        374 :           (match_operand:<avx512fmaskmode> 2 "register_operand" "Yk")))]
    1183                 :        923 :   "TARGET_AVX512F"
    1184                 :       1031 : {
    1185                 :        245 :   if (FLOAT_MODE_P (GET_MODE_INNER (<MODE>mode)))
    1186                 :            :     {
    1187                 :       2649 :       if (misaligned_operand (operands[0], <MODE>mode))
    1188                 :       2450 :         return "vmovu<ssemodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1189                 :       2450 :       else
    1190                 :         84 :         return "vmova<ssemodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1191                 :       2450 :     }
    1192                 :       2450 :   else
    1193                 :          0 :     {
    1194                 :       2695 :       if (misaligned_operand (operands[0], <MODE>mode))
    1195                 :       2450 :         return "vmovdqu<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1196                 :            :       else
    1197                 :       2026 :         return "vmovdqa<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1198                 :       1926 :     }
    1199                 :            : }
    1200                 :       1920 :   [(set_attr "type" "ssemov")
    1201                 :       1920 :    (set_attr "prefix" "evex")
    1202                 :       1920 :    (set_attr "memory" "store")
    1203                 :       2336 :    (set_attr "mode" "<sseinsnmode>")])
    1204                 :       1920 : 
    1205                 :          0 : (define_insn "<avx512>_store<mode>_mask"
    1206                 :          0 :   [(set (match_operand:VI12_AVX512VL 0 "memory_operand" "=m")
    1207                 :            :         (vec_merge:VI12_AVX512VL
    1208                 :            :           (match_operand:VI12_AVX512VL 1 "register_operand" "v")
    1209                 :            :           (match_dup 0)
    1210                 :          0 :           (match_operand:<avx512fmaskmode> 2 "register_operand" "Yk")))]
    1211                 :        229 :   "TARGET_AVX512BW"
    1212                 :        145 :   "vmovdqu<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
    1213                 :            :   [(set_attr "type" "ssemov")
    1214                 :          0 :    (set_attr "prefix" "evex")
    1215                 :        853 :    (set_attr "memory" "store")
    1216                 :        495 :    (set_attr "mode" "<sseinsnmode>")])
    1217                 :        358 : 
    1218                 :        351 : (define_insn "sse2_movq128"
    1219                 :        351 :   [(set (match_operand:V2DI 0 "register_operand" "=v")
    1220                 :        358 :         (vec_concat:V2DI
    1221                 :            :           (vec_select:DI
    1222                 :        358 :             (match_operand:V2DI 1 "nonimmediate_operand" "vm")
    1223                 :     715493 :             (parallel [(const_int 0)]))
    1224                 :     715135 :           (const_int 0)))]
    1225                 :     715480 :   "TARGET_SSE2"
    1226                 :        302 :   "%vmovq\t{%1, %0|%0, %q1}"
    1227                 :      30545 :   [(set_attr "type" "ssemov")
    1228                 :        302 :    (set_attr "prefix" "maybe_vex")
    1229                 :     715793 :    (set_attr "mode" "TI")])
    1230                 :        658 : 
    1231                 :        302 : ;; Move a DI from a 32-bit register pair (e.g. %edx:%eax) to an xmm.
    1232                 :        302 : ;; We'd rather avoid this entirely; if the 32-bit reg pair was loaded
    1233                 :        356 : ;; from memory, we'd prefer to load the memory directly into the %xmm
    1234                 :        256 : ;; register.  To facilitate this happy circumstance, this pattern won't
    1235                 :        356 : ;; split until after register allocation.  If the 64-bit value didn't
    1236                 :      30545 : ;; come from memory, this is the best we can do.  This is much better
    1237                 :            : ;; than storing %edx:%eax into a stack temporary and loading an %xmm
    1238                 :      14804 : ;; from there.
    1239                 :      14804 : 
    1240                 :      14804 : (define_insn_and_split "movdi_to_sse"
    1241                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=x,x,?x")
    1242                 :      13835 :         (unspec:V4SI [(match_operand:DI 1 "nonimmediate_operand" "r,m,r")]
    1243                 :      13835 :                      UNSPEC_MOVDI_TO_SSE))
    1244                 :      13835 :      (clobber (match_scratch:V4SI 2 "=X,X,&x"))]
    1245                 :          0 :   "!TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC"
    1246                 :          0 :   "#"
    1247                 :      13835 :   "&& reload_completed"
    1248                 :          0 :   [(const_int 0)]
    1249                 :       3878 : {
    1250                 :        171 :  if (register_operand (operands[1], DImode))
    1251                 :        106 :    {
    1252                 :        330 :       /* The DImode arrived in a pair of integral registers (e.g. %edx:%eax).
    1253                 :        363 :          Assemble the 64-bit DImode value in an xmm register.  */
    1254                 :        404 :       emit_insn (gen_sse2_loadld (operands[0], CONST0_RTX (V4SImode),
    1255                 :        378 :                                   gen_lowpart (SImode, operands[1])));
    1256                 :        350 :       if (TARGET_SSE4_1)
    1257                 :       1754 :         emit_insn (gen_sse4_1_pinsrd (operands[0], operands[0],
    1258                 :         58 :                                       gen_highpart (SImode, operands[1]),
    1259                 :      10496 :                                       GEN_INT (2)));
    1260                 :            :       else
    1261                 :            :         {
    1262                 :          0 :           emit_insn (gen_sse2_loadld (operands[2], CONST0_RTX (V4SImode),
    1263                 :            :                                       gen_highpart (SImode, operands[1])));
    1264                 :          0 :           emit_insn (gen_vec_interleave_lowv4si (operands[0], operands[0],
    1265                 :            :                                                  operands[2]));
    1266                 :            :         }
    1267                 :            :   }
    1268                 :          0 :  else if (memory_operand (operands[1], DImode))
    1269                 :          0 :    emit_insn (gen_vec_concatv2di (gen_lowpart (V2DImode, operands[0]),
    1270                 :            :                                   operands[1], const0_rtx));
    1271                 :            :  else
    1272                 :          0 :    gcc_unreachable ();
    1273                 :          0 :  DONE;
    1274                 :            : }
    1275                 :            :   [(set_attr "isa" "sse4,*,*")])
    1276                 :            : 
    1277                 :            : (define_split
    1278                 :            :   [(set (match_operand:V4SF 0 "register_operand")
    1279                 :            :         (match_operand:V4SF 1 "zero_extended_scalar_load_operand"))]
    1280                 :      17075 :   "TARGET_SSE && reload_completed"
    1281                 :       9174 :   [(set (match_dup 0)
    1282                 :            :         (vec_merge:V4SF
    1283                 :            :           (vec_duplicate:V4SF (match_dup 1))
    1284                 :     133308 :           (match_dup 2)
    1285                 :     133308 :           (const_int 1)))]
    1286                 :     111428 : {
    1287                 :     142482 :   operands[1] = gen_lowpart (SFmode, operands[1]);
    1288                 :      18348 :   operands[2] = CONST0_RTX (V4SFmode);
    1289                 :       9174 : })
    1290                 :       9174 : 
    1291                 :       9174 : (define_split
    1292                 :       9174 :   [(set (match_operand:V2DF 0 "register_operand")
    1293                 :          0 :         (match_operand:V2DF 1 "zero_extended_scalar_load_operand"))]
    1294                 :      34395 :   "TARGET_SSE2 && reload_completed"
    1295                 :      22425 :   [(set (match_dup 0) (vec_concat:V2DF (match_dup 1) (match_dup 2)))]
    1296                 :      22425 : {
    1297                 :      13251 :   operands[1] = gen_lowpart (DFmode, operands[1]);
    1298                 :       9174 :   operands[2] = CONST0_RTX (DFmode);
    1299                 :            : })
    1300                 :            : 
    1301                 :   55379600 : (define_expand "movmisalign<mode>"
    1302                 :   55392851 :   [(set (match_operand:VMOVE 0 "nonimmediate_operand")
    1303                 :      13251 :         (match_operand:VMOVE 1 "nonimmediate_operand"))]
    1304                 :     490269 :   "TARGET_SSE"
    1305                 :     490269 : {
    1306                 :     556952 :   ix86_expand_vector_move_misalign (<MODE>mode, operands);
    1307                 :      53432 :   DONE;
    1308                 :     459939 : })
    1309                 :            : 
    1310                 :      99172 : ;; Merge movsd/movhpd to movupd for TARGET_SSE_UNALIGNED_LOAD_OPTIMAL targets.
    1311                 :      99172 : (define_peephole2
    1312                 :      13251 :   [(set (match_operand:V2DF 0 "sse_reg_operand")
    1313                 :      13251 :         (vec_concat:V2DF (match_operand:DF 1 "memory_operand")
    1314                 :      26502 :                          (match_operand:DF 4 "const0_operand")))
    1315                 :      13251 :    (set (match_operand:V2DF 2 "sse_reg_operand")
    1316                 :      13251 :         (vec_concat:V2DF (vec_select:DF (match_dup 2)
    1317                 :      13251 :                                         (parallel [(const_int 0)]))
    1318                 :      13251 :                          (match_operand:DF 3 "memory_operand")))]
    1319                 :          0 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL
    1320                 :      13251 :    && ix86_operands_ok_for_move_multiple (operands, true, DFmode)"
    1321                 :          0 :   [(set (match_dup 2) (match_dup 5))]
    1322                 :          0 :   "operands[5] = adjust_address (operands[1], V2DFmode, 0);")
    1323                 :         36 : 
    1324                 :         36 : (define_peephole2
    1325                 :     317325 :   [(set (match_operand:DF 0 "sse_reg_operand")
    1326                 :     263929 :         (match_operand:DF 1 "memory_operand"))
    1327                 :     263929 :    (set (match_operand:V2DF 2 "sse_reg_operand")
    1328                 :     193228 :         (vec_concat:V2DF (match_operand:DF 4 "sse_reg_operand")
    1329                 :     174461 :                          (match_operand:DF 3 "memory_operand")))]
    1330                 :      54467 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL
    1331                 :      54467 :    && REGNO (operands[4]) == REGNO (operands[2])
    1332                 :      54153 :    && ix86_operands_ok_for_move_multiple (operands, true, DFmode)"
    1333                 :      54604 :   [(set (match_dup 2) (match_dup 5))]
    1334                 :         56 :   "operands[5] = adjust_address (operands[1], V2DFmode, 0);")
    1335                 :         42 : 
    1336                 :         14 : ;; Merge movlpd/movhpd to movupd for TARGET_SSE_UNALIGNED_STORE_OPTIMAL targets.
    1337                 :          0 : (define_peephole2
    1338                 :         42 :   [(set (match_operand:DF 0 "memory_operand")
    1339                 :         14 :         (vec_select:DF (match_operand:V2DF 1 "sse_reg_operand")
    1340                 :         14 :                        (parallel [(const_int 0)])))
    1341                 :         42 :    (set (match_operand:DF 2 "memory_operand")
    1342                 :         28 :         (vec_select:DF (match_operand:V2DF 3 "sse_reg_operand")
    1343                 :    2835978 :                        (parallel [(const_int 1)])))]
    1344                 :        506 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_STORE_OPTIMAL
    1345                 :        519 :    && ix86_operands_ok_for_move_multiple (operands, false, DFmode)"
    1346                 :        501 :   [(set (match_dup 4) (match_dup 1))]
    1347                 :    2835935 :   "operands[4] = adjust_address (operands[0], V2DFmode, 0);")
    1348                 :         47 : 
    1349                 :     703043 : (define_insn "<sse3>_lddqu<avxsizesuffix>"
    1350                 :     703062 :   [(set (match_operand:VI1 0 "register_operand" "=x")
    1351                 :     903051 :         (unspec:VI1 [(match_operand:VI1 1 "memory_operand" "m")]
    1352                 :   13428728 :                     UNSPEC_LDDQU))]
    1353                 :        115 :   "TARGET_SSE3"
    1354                 :         38 :   "%vlddqu\t{%1, %0|%0, %1}"
    1355                 :         33 :   [(set_attr "type" "ssemov")
    1356                 :         28 :    (set_attr "movu" "1")
    1357                 :   13428700 :    (set (attr "prefix_data16")
    1358                 :         28 :      (if_then_else
    1359                 :   13428710 :        (match_test "TARGET_AVX")
    1360                 :   13428705 :      (const_string "*")
    1361                 :          5 :      (const_string "0")))
    1362                 :        385 :    (set (attr "prefix_rep")
    1363                 :   13428705 :      (if_then_else
    1364                 :        291 :        (match_test "TARGET_AVX")
    1365                 :        286 :      (const_string "*")
    1366                 :     275850 :      (const_string "1")))
    1367                 :     275850 :    (set_attr "prefix" "maybe_vex")
    1368                 :     275905 :    (set_attr "mode" "<sseinsnmode>")])
    1369                 :          5 : 
    1370                 :     265502 : (define_insn "sse2_movnti<mode>"
    1371                 :     265502 :   [(set (match_operand:SWI48 0 "memory_operand" "=m")
    1372                 :     265502 :         (unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r")]
    1373                 :            :                       UNSPEC_MOVNT))]
    1374                 :         67 :   "TARGET_SSE2"
    1375                 :         43 :   "movnti\t{%1, %0|%0, %1}"
    1376                 :     117436 :   [(set_attr "type" "ssemov")
    1377                 :     117436 :    (set_attr "prefix_data16" "0")
    1378                 :         28 :    (set_attr "mode" "<MODE>")])
    1379                 :         28 : 
    1380                 :     117464 : (define_insn "<sse>_movnt<mode>"
    1381                 :         46 :   [(set (match_operand:VF 0 "memory_operand" "=m")
    1382                 :         56 :         (unspec:VF
    1383                 :     117436 :           [(match_operand:VF 1 "register_operand" "v")]
    1384                 :     117454 :           UNSPEC_MOVNT))]
    1385                 :         32 :   "TARGET_SSE"
    1386                 :      92850 :   "%vmovnt<ssemodesuffix>\t{%1, %0|%0, %1}"
    1387                 :      92844 :   [(set_attr "type" "ssemov")
    1388                 :            :    (set_attr "prefix" "maybe_vex")
    1389                 :      79509 :    (set_attr "mode" "<MODE>")])
    1390                 :         38 : 
    1391                 :      79505 : (define_insn "<sse2>_movnt<mode>"
    1392                 :         34 :   [(set (match_operand:VI8 0 "memory_operand" "=m")
    1393                 :         71 :         (unspec:VI8 [(match_operand:VI8 1 "register_operand" "v")]
    1394                 :      27897 :                     UNSPEC_MOVNT))]
    1395                 :      27929 :   "TARGET_SSE2"
    1396                 :          6 :   "%vmovntdq\t{%1, %0|%0, %1}"
    1397                 :      27897 :   [(set_attr "type" "ssecvt")
    1398                 :      27897 :    (set (attr "prefix_data16")
    1399                 :      77171 :      (if_then_else
    1400                 :            :        (match_test "TARGET_AVX")
    1401                 :            :      (const_string "*")
    1402                 :            :      (const_string "1")))
    1403                 :            :    (set_attr "prefix" "maybe_vex")
    1404                 :            :    (set_attr "mode" "<sseinsnmode>")])
    1405                 :       1997 : 
    1406                 :            : ; Expand patterns for non-temporal stores.  At the moment, only those
    1407                 :            : ; that directly map to insns are defined; it would be possible to
    1408                 :          0 : ; define patterns for other modes that would expand to several insns.
    1409                 :       1997 : 
    1410                 :       1997 : ;; Modes handled by storent patterns.
    1411                 :       1997 : (define_mode_iterator STORENT_MODE
    1412                 :       1997 :   [(DI "TARGET_SSE2 && TARGET_64BIT") (SI "TARGET_SSE2")
    1413                 :       1997 :    (SF "TARGET_SSE4A") (DF "TARGET_SSE4A")
    1414                 :       1997 :    (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") (V2DI "TARGET_SSE2")
    1415                 :       1997 :    (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
    1416                 :       1997 :    (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
    1417                 :       1997 : 
    1418                 :       1997 : (define_expand "storent<mode>"
    1419                 :       1997 :   [(set (match_operand:STORENT_MODE 0 "memory_operand")
    1420                 :       1997 :         (unspec:STORENT_MODE
    1421                 :            :           [(match_operand:STORENT_MODE 1 "register_operand")]
    1422                 :       1192 :           UNSPEC_MOVNT))]
    1423                 :       1192 :   "TARGET_SSE")
    1424                 :       1192 : 
    1425                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1426                 :       1192 : ;;
    1427                 :       1192 : ;; Mask operations
    1428                 :            : ;;
    1429                 :        918 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1430                 :        918 : 
    1431                 :        918 : ;; All integer modes with AVX512BW/DQ.
    1432                 :        918 : (define_mode_iterator SWI1248_AVX512BWDQ
    1433                 :        918 :   [(QI "TARGET_AVX512DQ") HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    1434                 :          0 : 
    1435                 :        296 : ;; All integer modes with AVX512BW, where HImode operation
    1436                 :        296 : ;; can be used instead of QImode.
    1437                 :        813 : (define_mode_iterator SWI1248_AVX512BW
    1438                 :         83 :   [QI HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    1439                 :          0 : 
    1440                 :    1682940 : ;; All integer modes with AVX512BW/DQ, even HImode requires DQ.
    1441                 :    1682650 : (define_mode_iterator SWI1248_AVX512BWDQ2
    1442                 :      29748 :   [(QI "TARGET_AVX512DQ") (HI "TARGET_AVX512DQ")
    1443                 :       2625 :    (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    1444                 :         60 : 
    1445                 :    1360740 : (define_expand "kmov<mskmodesuffix>"
    1446                 :        148 :   [(set (match_operand:SWI1248_AVX512BWDQ 0 "nonimmediate_operand")
    1447                 :        220 :         (match_operand:SWI1248_AVX512BWDQ 1 "nonimmediate_operand"))]
    1448                 :     866799 :   "TARGET_AVX512F
    1449                 :     673134 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))")
    1450                 :     864728 : 
    1451                 :    3940320 : (define_insn "k<code><mode>"
    1452                 :     338787 :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    1453                 :     547141 :         (any_logic:SWI1248_AVX512BW
    1454                 :         40 :           (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")
    1455                 :        567 :           (match_operand:SWI1248_AVX512BW 2 "register_operand" "k")))
    1456                 :        110 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1457                 :        621 :   "TARGET_AVX512F"
    1458                 :        188 : {
    1459                 :        151 :   if (get_attr_mode (insn) == MODE_HI)
    1460                 :         80 :     return "k<logic>w\t{%2, %1, %0|%0, %1, %2}";
    1461                 :     547275 :   else
    1462                 :        307 :     return "k<logic><mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    1463                 :     547075 : }
    1464                 :     547075 :   [(set_attr "type" "msklog")
    1465                 :     547075 :    (set_attr "prefix" "vex")
    1466                 :     547075 :    (set (attr "mode")
    1467                 :     547237 :      (cond [(and (match_test "<MODE>mode == QImode")
    1468                 :     547075 :                  (not (match_test "TARGET_AVX512DQ")))
    1469                 :     547075 :                (const_string "HI")
    1470                 :     547075 :            ]
    1471                 :     547075 :            (const_string "<MODE>")))])
    1472                 :     547075 : 
    1473                 :     542160 : (define_insn "kandn<mode>"
    1474                 :     752450 :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    1475                 :            :         (and:SWI1248_AVX512BW
    1476                 :     205375 :           (not:SWI1248_AVX512BW
    1477                 :     205375 :             (match_operand:SWI1248_AVX512BW 1 "register_operand" "k"))
    1478                 :            :           (match_operand:SWI1248_AVX512BW 2 "register_operand" "k")))
    1479                 :            :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1480                 :         32 :   "TARGET_AVX512F"
    1481                 :     503991 : {
    1482                 :     503978 :   if (get_attr_mode (insn) == MODE_HI)
    1483                 :            :     return "kandnw\t{%2, %1, %0|%0, %1, %2}";
    1484                 :         70 :   else
    1485                 :        103 :     return "kandn<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    1486                 :         70 : }
    1487                 :            :   [(set_attr "type" "msklog")
    1488                 :            :    (set_attr "prefix" "vex")
    1489                 :          0 :    (set (attr "mode")
    1490                 :         46 :      (cond [(and (match_test "<MODE>mode == QImode")
    1491                 :            :                  (not (match_test "TARGET_AVX512DQ")))
    1492                 :          0 :               (const_string "HI")
    1493                 :            :            ]
    1494                 :            :            (const_string "<MODE>")))])
    1495                 :            : 
    1496                 :            : (define_insn "kxnor<mode>"
    1497                 :            :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    1498                 :            :         (not:SWI1248_AVX512BW
    1499                 :            :           (xor:SWI1248_AVX512BW
    1500                 :            :             (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")
    1501                 :          0 :             (match_operand:SWI1248_AVX512BW 2 "register_operand" "k"))))
    1502                 :            :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1503                 :         32 :   "TARGET_AVX512F"
    1504                 :         45 : {
    1505                 :         33 :   if (get_attr_mode (insn) == MODE_HI)
    1506                 :            :     return "kxnorw\t{%2, %1, %0|%0, %1, %2}";
    1507                 :         66 :   else
    1508                 :         99 :     return "kxnor<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    1509                 :         66 : }
    1510                 :            :   [(set_attr "type" "msklog")
    1511                 :            :    (set_attr "prefix" "vex")
    1512                 :            :    (set (attr "mode")
    1513                 :         46 :      (cond [(and (match_test "<MODE>mode == QImode")
    1514                 :            :                  (not (match_test "TARGET_AVX512DQ")))
    1515                 :            :               (const_string "HI")
    1516                 :          0 :            ]
    1517                 :            :            (const_string "<MODE>")))])
    1518                 :            : 
    1519                 :            : (define_insn "knot<mode>"
    1520                 :            :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    1521                 :            :         (not:SWI1248_AVX512BW
    1522                 :            :           (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")))
    1523                 :            :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1524                 :         26 :   "TARGET_AVX512F"
    1525                 :         90 : {
    1526                 :         34 :   if (get_attr_mode (insn) == MODE_HI)
    1527                 :            :     return "knotw\t{%1, %0|%0, %1}";
    1528                 :         96 :   else
    1529                 :         85 :     return "knot<mskmodesuffix>\t{%1, %0|%0, %1}";
    1530                 :            : }
    1531                 :            :   [(set_attr "type" "msklog")
    1532                 :            :    (set_attr "prefix" "vex")
    1533                 :            :    (set (attr "mode")
    1534                 :         90 :      (cond [(and (match_test "<MODE>mode == QImode")
    1535                 :            :                  (not (match_test "TARGET_AVX512DQ")))
    1536                 :            :                (const_string "HI")
    1537                 :         56 :            ]
    1538                 :            :            (const_string "<MODE>")))])
    1539                 :            : 
    1540                 :            : (define_insn "kadd<mode>"
    1541                 :            :   [(set (match_operand:SWI1248_AVX512BWDQ2 0 "register_operand" "=k")
    1542                 :            :         (plus:SWI1248_AVX512BWDQ2
    1543                 :         44 :           (match_operand:SWI1248_AVX512BWDQ2 1 "register_operand" "k")
    1544                 :            :           (match_operand:SWI1248_AVX512BWDQ2 2 "register_operand" "k")))
    1545                 :            :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1546                 :         44 :   "TARGET_AVX512F"
    1547                 :            :   "kadd<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    1548                 :            :   [(set_attr "type" "msklog")
    1549                 :            :    (set_attr "prefix" "vex")
    1550                 :            :    (set_attr "mode" "<MODE>")])
    1551                 :            : 
    1552                 :         48 : ;; Mask variant shift mnemonics
    1553                 :            : (define_code_attr mshift [(ashift "shiftl") (lshiftrt "shiftr")])
    1554                 :            : 
    1555                 :         48 : (define_insn "k<code><mode>"
    1556                 :            :   [(set (match_operand:SWI1248_AVX512BWDQ 0 "register_operand" "=k")
    1557                 :            :         (any_lshift:SWI1248_AVX512BWDQ
    1558                 :            :           (match_operand:SWI1248_AVX512BWDQ 1 "register_operand" "k")
    1559                 :            :           (match_operand 2 "const_0_to_255_operand" "n")))
    1560                 :            :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    1561                 :        323 :   "TARGET_AVX512F"
    1562                 :            :   "k<mshift><mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    1563                 :            :   [(set_attr "type" "msklog")
    1564                 :          0 :    (set_attr "prefix" "vex")
    1565                 :         81 :    (set_attr "mode" "<MODE>")])
    1566                 :         81 : 
    1567                 :          0 : (define_insn "ktest<mode>"
    1568                 :          0 :   [(set (reg:CC FLAGS_REG)
    1569                 :          0 :         (unspec:CC
    1570                 :            :           [(match_operand:SWI1248_AVX512BWDQ2 0 "register_operand" "k")
    1571                 :            :            (match_operand:SWI1248_AVX512BWDQ2 1 "register_operand" "k")]
    1572                 :            :           UNSPEC_KTEST))]
    1573                 :            :   "TARGET_AVX512F"
    1574                 :            :   "ktest<mskmodesuffix>\t{%1, %0|%0, %1}"
    1575                 :            :   [(set_attr "mode" "<MODE>")
    1576                 :            :    (set_attr "type" "msklog")
    1577                 :            :    (set_attr "prefix" "vex")])
    1578                 :            : 
    1579                 :            : (define_insn "kortest<mode>"
    1580                 :            :   [(set (reg:CC FLAGS_REG)
    1581                 :            :         (unspec:CC
    1582                 :            :           [(match_operand:SWI1248_AVX512BWDQ 0 "register_operand" "k")
    1583                 :            :            (match_operand:SWI1248_AVX512BWDQ 1 "register_operand" "k")]
    1584                 :            :           UNSPEC_KORTEST))]
    1585                 :        173 :   "TARGET_AVX512F"
    1586                 :          0 :   "kortest<mskmodesuffix>\t{%1, %0|%0, %1}"
    1587                 :            :   [(set_attr "mode" "<MODE>")
    1588                 :            :    (set_attr "type" "msklog")
    1589                 :         80 :    (set_attr "prefix" "vex")])
    1590                 :         80 : 
    1591                 :            : (define_insn "kunpckhi"
    1592                 :            :   [(set (match_operand:HI 0 "register_operand" "=k")
    1593                 :            :         (ior:HI
    1594                 :            :           (ashift:HI
    1595                 :            :             (zero_extend:HI (match_operand:QI 1 "register_operand" "k"))
    1596                 :            :             (const_int 8))
    1597                 :            :           (zero_extend:HI (match_operand:QI 2 "register_operand" "k"))))]
    1598                 :        113 :   "TARGET_AVX512F"
    1599                 :          0 :   "kunpckbw\t{%2, %1, %0|%0, %1, %2}"
    1600                 :            :   [(set_attr "mode" "HI")
    1601                 :            :    (set_attr "type" "msklog")
    1602                 :            :    (set_attr "prefix" "vex")])
    1603                 :            : 
    1604                 :            : (define_insn "kunpcksi"
    1605                 :            :   [(set (match_operand:SI 0 "register_operand" "=k")
    1606                 :            :         (ior:SI
    1607                 :            :           (ashift:SI
    1608                 :            :             (zero_extend:SI (match_operand:HI 1 "register_operand" "k"))
    1609                 :            :             (const_int 16))
    1610                 :     234348 :           (zero_extend:SI (match_operand:HI 2 "register_operand" "k"))))]
    1611                 :         81 :   "TARGET_AVX512BW"
    1612                 :          0 :   "kunpckwd\t{%2, %1, %0|%0, %1, %2}"
    1613                 :     234348 :   [(set_attr "mode" "SI")])
    1614                 :            : 
    1615                 :       9419 : (define_insn "kunpckdi"
    1616                 :       9419 :   [(set (match_operand:DI 0 "register_operand" "=k")
    1617                 :        139 :         (ior:DI
    1618                 :            :           (ashift:DI
    1619                 :            :             (zero_extend:DI (match_operand:SI 1 "register_operand" "k"))
    1620                 :            :             (const_int 32))
    1621                 :            :           (zero_extend:DI (match_operand:SI 2 "register_operand" "k"))))]
    1622                 :        139 :   "TARGET_AVX512BW"
    1623                 :          2 :   "kunpckdq\t{%2, %1, %0|%0, %1, %2}"
    1624                 :            :   [(set_attr "mode" "DI")])
    1625                 :            : 
    1626                 :            : 
    1627                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1628                 :            : ;;
    1629                 :            : ;; Parallel floating point arithmetic
    1630                 :            : ;;
    1631                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1632                 :            : 
    1633                 :            : (define_expand "<code><mode>2"
    1634                 :     209433 :   [(set (match_operand:VF 0 "register_operand")
    1635                 :     209433 :         (absneg:VF
    1636                 :     209433 :           (match_operand:VF 1 "register_operand")))]
    1637                 :     209433 :   "TARGET_SSE"
    1638                 :       1902 :   "ix86_expand_fp_absneg_operator (<CODE>, <MODE>mode, operands); DONE;")
    1639                 :     169148 : 
    1640                 :     169148 : (define_insn_and_split "*<code><mode>2"
    1641                 :            :   [(set (match_operand:VF 0 "register_operand" "=x,x,v,v")
    1642                 :      64186 :         (absneg:VF
    1643                 :      64186 :           (match_operand:VF 1 "vector_operand" "0,  xBm,v, m")))
    1644                 :      64186 :    (use (match_operand:VF 2 "vector_operand"    "xBm,0,  vm,v"))]
    1645                 :       1046 :   "TARGET_SSE"
    1646                 :          0 :   "#"
    1647                 :         44 :   "&& reload_completed"
    1648                 :            :   [(set (match_dup 0) (match_dup 3))]
    1649                 :       2636 : {
    1650                 :       1461 :   enum rtx_code absneg_op = <CODE> == ABS ? AND : XOR;
    1651                 :       2592 : 
    1652                 :       3910 :   if (TARGET_AVX)
    1653                 :            :     {
    1654                 :       1136 :       if (MEM_P (operands[1]))
    1655                 :      16957 :         std::swap (operands[1], operands[2]);
    1656                 :      18330 :     }
    1657                 :          0 :   else
    1658                 :       1030 :    {
    1659                 :       1233 :      if (operands_match_p (operands[0], operands[2]))
    1660                 :       2953 :        std::swap (operands[1], operands[2]);
    1661                 :       1923 :    }
    1662                 :       2263 : 
    1663                 :       3593 :   operands[3]
    1664                 :       3581 :     = gen_rtx_fmt_ee (absneg_op, <MODE>mode, operands[1], operands[2]);
    1665                 :         12 : }
    1666                 :        323 :   [(set_attr "isa" "noavx,noavx,avx,avx")])
    1667                 :        323 : 
    1668                 :       1318 : (define_insn_and_split "*nabs<mode>2"
    1669                 :       1629 :   [(set (match_operand:VF 0 "register_operand" "=x,x,v,v")
    1670                 :       1318 :         (neg:VF
    1671                 :       1629 :           (abs:VF
    1672                 :       1629 :             (match_operand:VF 1 "vector_operand" "0,xBm,v,m"))))
    1673                 :       1318 :    (use (match_operand:VF 2 "vector_operand"    "xBm,0,vm,v"))]
    1674                 :       1318 :   "TARGET_SSE"
    1675                 :       1318 :   "#"
    1676                 :       1318 :   "&& reload_completed"
    1677                 :          0 :   [(set (match_dup 0) (match_dup 3))]
    1678                 :       1318 : {
    1679                 :       1318 :   if (TARGET_AVX)
    1680                 :       1318 :     {
    1681                 :          0 :       if (MEM_P (operands[1]))
    1682                 :          0 :         std::swap (operands[1], operands[2]);
    1683                 :          0 :     }
    1684                 :            :   else
    1685                 :            :    {
    1686                 :       1318 :      if (operands_match_p (operands[0], operands[2]))
    1687                 :          0 :        std::swap (operands[1], operands[2]);
    1688                 :      24226 :    }
    1689                 :      24226 : 
    1690                 :       1318 :   operands[3]
    1691                 :        139 :     = gen_rtx_fmt_ee (IOR, <MODE>mode, operands[1], operands[2]);
    1692                 :       1596 : }
    1693                 :       1318 :   [(set_attr "isa" "noavx,noavx,avx,avx")])
    1694                 :          0 : 
    1695                 :       1318 : (define_expand "<plusminus_insn><mode>3<mask_name><round_name>"
    1696                 :          0 :   [(set (match_operand:VF 0 "register_operand")
    1697                 :          0 :         (plusminus:VF
    1698                 :          0 :           (match_operand:VF 1 "<round_nimm_predicate>")
    1699                 :          0 :           (match_operand:VF 2 "<round_nimm_predicate>")))]
    1700                 :          0 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    1701                 :      26079 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    1702                 :          0 : 
    1703                 :          0 : (define_insn "*<plusminus_insn><mode>3<mask_name><round_name>"
    1704                 :      26079 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    1705                 :          0 :         (plusminus:VF
    1706                 :          0 :           (match_operand:VF 1 "<round_nimm_predicate>" "<comm>0,v")
    1707                 :      26079 :           (match_operand:VF 2 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    1708                 :     193327 :   "TARGET_SSE && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
    1709                 :     118910 :    && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    1710                 :        715 :   "@
    1711                 :      25593 :    <plusminus_mnemonic><ssemodesuffix>\t{%2, %0|%0, %2}
    1712                 :       1643 :    v<plusminus_mnemonic><ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    1713                 :          0 :   [(set_attr "isa" "noavx,avx")
    1714                 :       3216 :    (set_attr "type" "sseadd")
    1715                 :      25785 :    (set_attr "prefix" "<mask_prefix3>")
    1716                 :      26041 :    (set_attr "mode" "<MODE>")])
    1717                 :        995 : 
    1718                 :        253 : (define_insn "*sub<mode>3<mask_name>_bcst"
    1719                 :        253 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    1720                 :          0 :         (minus:VF_AVX512
    1721                 :          0 :           (match_operand:VF_AVX512 1 "register_operand" "v")
    1722                 :        445 :           (vec_duplicate:VF_AVX512
    1723                 :        192 :             (match_operand:<ssescalarmode> 2 "memory_operand" "m"))))]
    1724                 :        195 :   "TARGET_AVX512F
    1725                 :          4 :    && ix86_binary_operator_ok (MINUS, <MODE>mode, operands)
    1726                 :          2 :    && <mask_mode512bit_condition>"
    1727                 :          3 :   "vsub<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<avx512bcst>}"
    1728                 :        294 :   [(set_attr "prefix" "evex")
    1729                 :      21857 :    (set_attr "type" "sseadd")
    1730                 :        489 :    (set_attr "mode" "<MODE>")])
    1731                 :        195 : 
    1732                 :        198 : (define_insn "*add<mode>3<mask_name>_bcst"
    1733                 :      21563 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    1734                 :      21371 :         (plus:VF_AVX512
    1735                 :       4257 :           (vec_duplicate:VF_AVX512
    1736                 :       3084 :             (match_operand:<ssescalarmode> 1 "memory_operand" "m"))
    1737                 :        294 :           (match_operand:VF_AVX512 2 "register_operand" "v")))]
    1738                 :      21689 :   "TARGET_AVX512F
    1739                 :      21099 :    && ix86_binary_operator_ok (PLUS, <MODE>mode, operands)
    1740                 :       4259 :    && <mask_mode512bit_condition>"
    1741                 :       4556 :   "vadd<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<mask_operand3>|%0<mask_operand3>, %2, %1<avx512bcst>}"
    1742                 :       2892 :   [(set_attr "prefix" "evex")
    1743                 :       7443 :    (set_attr "type" "sseadd")
    1744                 :       7443 :    (set_attr "mode" "<MODE>")])
    1745                 :       4631 : 
    1746                 :        110 : ;; Standard scalar operation patterns which preserve the rest of the
    1747                 :        121 : ;; vector for combiner.
    1748                 :            : (define_insn "*<sse>_vm<plusminus_insn><mode>3"
    1749                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    1750                 :            :         (vec_merge:VF_128
    1751                 :            :           (vec_duplicate:VF_128
    1752                 :            :             (plusminus:<ssescalarmode>
    1753                 :            :               (vec_select:<ssescalarmode>
    1754                 :        398 :                 (match_operand:VF_128 1 "register_operand" "0,v")
    1755                 :            :                 (parallel [(const_int 0)]))
    1756                 :            :               (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")))
    1757                 :            :           (match_dup 1)
    1758                 :        398 :           (const_int 1)))]
    1759                 :          0 :   "TARGET_SSE"
    1760                 :          0 :   "@
    1761                 :        398 :    <plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    1762                 :        398 :    v<plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    1763                 :        413 :   [(set_attr "isa" "noavx,avx")
    1764                 :         15 :    (set_attr "type" "sseadd")
    1765                 :        398 :    (set_attr "prefix" "orig,vex")
    1766                 :            :    (set_attr "mode" "<ssescalarmode>")])
    1767                 :        204 : 
    1768                 :        204 : (define_insn "<sse>_vm<plusminus_insn><mode>3<mask_scalar_name><round_scalar_name>"
    1769                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    1770                 :        204 :         (vec_merge:VF_128
    1771                 :        204 :           (plusminus:VF_128
    1772                 :        204 :             (match_operand:VF_128 1 "register_operand" "0,v")
    1773                 :            :             (match_operand:VF_128 2 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    1774                 :        204 :           (match_dup 1)
    1775                 :        204 :           (const_int 1)))]
    1776                 :         68 :   "TARGET_SSE"
    1777                 :          0 :   "@
    1778                 :        204 :    <plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    1779                 :        204 :    v<plusminus_mnemonic><ssescalarmodesuffix>\t{<round_scalar_mask_op3>%2, %1, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %1, %<iptr>2<round_scalar_mask_op3>}"
    1780                 :        200 :   [(set_attr "isa" "noavx,avx")
    1781                 :       1077 :    (set_attr "type" "sseadd")
    1782                 :          4 :    (set_attr "prefix" "<round_scalar_prefix>")
    1783                 :        200 :    (set_attr "mode" "<ssescalarmode>")])
    1784                 :        200 : 
    1785                 :            : (define_expand "mul<mode>3<mask_name><round_name>"
    1786                 :         86 :   [(set (match_operand:VF 0 "register_operand")
    1787                 :         86 :         (mult:VF
    1788                 :            :           (match_operand:VF 1 "<round_nimm_predicate>")
    1789                 :         58 :           (match_operand:VF 2 "<round_nimm_predicate>")))]
    1790                 :         58 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    1791                 :        346 :   "ix86_fixup_binary_operands_no_copy (MULT, <MODE>mode, operands);")
    1792                 :            : 
    1793                 :         58 : (define_insn "*mul<mode>3<mask_name><round_name>"
    1794                 :      11457 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    1795                 :      11457 :         (mult:VF
    1796                 :      11457 :           (match_operand:VF 1 "<round_nimm_predicate>" "%0,v")
    1797                 :      11399 :           (match_operand:VF 2 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    1798                 :      74835 :   "TARGET_SSE
    1799                 :      76228 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))
    1800                 :        670 :    && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    1801                 :      16945 :   "@
    1802                 :        204 :    mul<ssemodesuffix>\t{%2, %0|%0, %2}
    1803                 :          0 :    vmul<ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    1804                 :       1488 :   [(set_attr "isa" "noavx,avx")
    1805                 :      12671 :    (set_attr "type" "ssemul")
    1806                 :      13903 :    (set_attr "prefix" "<mask_prefix3>")
    1807                 :        108 :    (set_attr "btver2_decode" "direct,double")
    1808                 :            :    (set_attr "mode" "<MODE>")])
    1809                 :            : 
    1810                 :            : (define_insn "*mul<mode>3<mask_name>_bcst"
    1811                 :          0 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    1812                 :         96 :         (mult:VF_AVX512
    1813                 :         96 :           (vec_duplicate:VF_AVX512
    1814                 :         96 :              (match_operand:<ssescalarmode> 1 "memory_operand" "m"))
    1815                 :            :           (match_operand:VF_AVX512 2 "register_operand" "v")))]
    1816                 :          4 :   "TARGET_AVX512F && <mask_mode512bit_condition>"
    1817                 :          2 :   "vmul<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<mask_operand3>|%0<mask_operand3>, %2, %1<<avx512bcst>>}"
    1818                 :        108 :   [(set_attr "prefix" "evex")
    1819                 :       6898 :    (set_attr "type" "ssemul")
    1820                 :        205 :    (set_attr "mode" "<MODE>")])
    1821                 :         97 : 
    1822                 :         97 : ;; Standard scalar operation patterns which preserve the rest of the
    1823                 :       6790 : ;; vector for combiner.
    1824                 :     115929 : (define_insn "*<sse>_vm<multdiv_mnemonic><mode>3"
    1825                 :     113461 :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    1826                 :         96 :         (vec_merge:VF_128
    1827                 :       2794 :           (vec_duplicate:VF_128
    1828                 :       6974 :             (multdiv:<ssescalarmode>
    1829                 :       6681 :               (vec_select:<ssescalarmode>
    1830                 :       4226 :                 (match_operand:VF_128 1 "register_operand" "0,v")
    1831                 :       4334 :                 (parallel [(const_int 0)]))
    1832                 :          0 :               (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")))
    1833                 :       4334 :           (match_dup 1)
    1834                 :       4334 :           (const_int 1)))]
    1835                 :       4339 :   "TARGET_SSE"
    1836                 :          0 :   "@
    1837                 :            :    <multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    1838                 :            :    v<multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    1839                 :          2 :   [(set_attr "isa" "noavx,avx")
    1840                 :          2 :    (set_attr "type" "sse<multdiv_mnemonic>")
    1841                 :            :    (set_attr "prefix" "orig,vex")
    1842                 :            :    (set_attr "btver2_decode" "direct,double")
    1843                 :            :    (set_attr "mode" "<ssescalarmode>")])
    1844                 :            : 
    1845                 :            : (define_insn "<sse>_vm<multdiv_mnemonic><mode>3<mask_scalar_name><round_scalar_name>"
    1846                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    1847                 :            :         (vec_merge:VF_128
    1848                 :            :           (multdiv:VF_128
    1849                 :            :             (match_operand:VF_128 1 "register_operand" "0,v")
    1850                 :            :             (match_operand:VF_128 2 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    1851                 :            :           (match_dup 1)
    1852                 :            :           (const_int 1)))]
    1853                 :         68 :   "TARGET_SSE"
    1854                 :          0 :   "@
    1855                 :            :    <multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    1856                 :            :    v<multdiv_mnemonic><ssescalarmodesuffix>\t{<round_scalar_mask_op3>%2, %1, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %1, %<iptr>2<round_scalar_mask_op3>}"
    1857                 :        528 :   [(set_attr "isa" "noavx,avx")
    1858                 :        528 :    (set_attr "type" "sse<multdiv_mnemonic>")
    1859                 :            :    (set_attr "prefix" "<round_scalar_prefix>")
    1860                 :            :    (set_attr "btver2_decode" "direct,double")
    1861                 :            :    (set_attr "mode" "<ssescalarmode>")])
    1862                 :            : 
    1863                 :            : (define_expand "div<mode>3"
    1864                 :            :   [(set (match_operand:VF2 0 "register_operand")
    1865                 :            :         (div:VF2 (match_operand:VF2 1 "register_operand")
    1866                 :            :                  (match_operand:VF2 2 "vector_operand")))]
    1867                 :            :   "TARGET_SSE2"
    1868                 :         13 :   "ix86_fixup_binary_operands_no_copy (DIV, <MODE>mode, operands);")
    1869                 :            : 
    1870                 :            : (define_expand "div<mode>3"
    1871                 :        148 :   [(set (match_operand:VF1 0 "register_operand")
    1872                 :        148 :         (div:VF1 (match_operand:VF1 1 "register_operand")
    1873                 :        148 :                  (match_operand:VF1 2 "vector_operand")))]
    1874                 :        148 :   "TARGET_SSE"
    1875                 :        684 : {
    1876                 :        684 :   ix86_fixup_binary_operands_no_copy (DIV, <MODE>mode, operands);
    1877                 :            : 
    1878                 :        148 :   if (TARGET_SSE_MATH
    1879                 :        536 :       && TARGET_RECIP_VEC_DIV
    1880                 :        536 :       && !optimize_insn_for_size_p ()
    1881                 :        535 :       && flag_finite_math_only && !flag_trapping_math
    1882                 :        722 :       && flag_unsafe_math_optimizations)
    1883                 :        148 :     {
    1884                 :         38 :       ix86_emit_swdivsf (operands[0], operands[1], operands[2], <MODE>mode);
    1885                 :         38 :       DONE;
    1886                 :            :     }
    1887                 :            : })
    1888                 :            : 
    1889                 :        154 : (define_insn "<sse>_div<mode>3<mask_name><round_name>"
    1890                 :        498 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    1891                 :        498 :         (div:VF
    1892                 :        498 :           (match_operand:VF 1 "register_operand" "0,v")
    1893                 :        652 :           (match_operand:VF 2 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    1894                 :       3900 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    1895                 :       3870 :   "@
    1896                 :        154 :    div<ssemodesuffix>\t{%2, %0|%0, %2}
    1897                 :        498 :    vdiv<ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    1898                 :        246 :   [(set_attr "isa" "noavx,avx")
    1899                 :        246 :    (set_attr "type" "ssediv")
    1900                 :         92 :    (set_attr "prefix" "<mask_prefix3>")
    1901                 :        498 :    (set_attr "mode" "<MODE>")])
    1902                 :        498 : 
    1903                 :        498 : (define_insn "*<avx512>_div<mode>3<mask_name>_bcst"
    1904                 :            :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    1905                 :            :         (div:VF_AVX512
    1906                 :            :           (match_operand:VF_AVX512 1 "register_operand" "v")
    1907                 :            :           (vec_duplicate:VF_AVX512
    1908                 :        517 :              (match_operand:<ssescalarmode> 2 "memory_operand" "m"))))]
    1909                 :          1 :   "TARGET_AVX512F && <mask_mode512bit_condition>"
    1910                 :          0 :   "vdiv<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<<avx512bcst>>}"
    1911                 :          0 :   [(set_attr "prefix" "evex")
    1912                 :        517 :     (set_attr "type" "ssediv")
    1913                 :        518 :    (set_attr "mode" "<MODE>")])
    1914                 :        518 : 
    1915                 :        518 : (define_insn "<sse>_rcp<mode>2"
    1916                 :        517 :   [(set (match_operand:VF1_128_256 0 "register_operand" "=x")
    1917                 :        517 :         (unspec:VF1_128_256
    1918                 :        517 :           [(match_operand:VF1_128_256 1 "vector_operand" "xBm")] UNSPEC_RCP))]
    1919                 :        182 :   "TARGET_SSE"
    1920                 :          0 :   "%vrcpps\t{%1, %0|%0, %1}"
    1921                 :         14 :   [(set_attr "type" "sse")
    1922                 :            :    (set_attr "atom_sse_attr" "rcp")
    1923                 :       4707 :    (set_attr "btver2_sse_attr" "rcp")
    1924                 :       2380 :    (set_attr "prefix" "maybe_vex")
    1925                 :       2380 :    (set_attr "mode" "<MODE>")])
    1926                 :       2380 : 
    1927                 :       2380 : (define_insn "sse_vmrcpv4sf2"
    1928                 :       2474 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    1929                 :       2605 :         (vec_merge:V4SF
    1930                 :        278 :           (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm,xm")]
    1931                 :       2362 :                        UNSPEC_RCP)
    1932                 :       2342 :           (match_operand:V4SF 2 "register_operand" "0,x")
    1933                 :       2342 :           (const_int 1)))]
    1934                 :       2365 :   "TARGET_SSE"
    1935                 :       2464 :   "@
    1936                 :            :    rcpss\t{%1, %0|%0, %k1}
    1937                 :         22 :    vrcpss\t{%1, %2, %0|%0, %2, %k1}"
    1938                 :         24 :   [(set_attr "isa" "noavx,avx")
    1939                 :       1160 :    (set_attr "type" "sse")
    1940                 :         22 :    (set_attr "atom_sse_attr" "rcp")
    1941                 :         24 :    (set_attr "btver2_sse_attr" "rcp")
    1942                 :        143 :    (set_attr "prefix" "orig,vex")
    1943                 :          2 :    (set_attr "mode" "SF")])
    1944                 :          2 : 
    1945                 :          2 : (define_insn "*sse_vmrcpv4sf2"
    1946                 :          2 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    1947                 :            :         (vec_merge:V4SF
    1948                 :            :           (vec_duplicate:V4SF
    1949                 :            :             (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm,xm")]
    1950                 :            :                          UNSPEC_RCP))
    1951                 :            :           (match_operand:V4SF 2 "register_operand" "0,x")
    1952                 :            :           (const_int 1)))]
    1953                 :          0 :   "TARGET_SSE"
    1954                 :          0 :   "@
    1955                 :            :    rcpss\t{%1, %0|%0, %1}
    1956                 :            :    vrcpss\t{%1, %2, %0|%0, %2, %1}"
    1957                 :          0 :   [(set_attr "isa" "noavx,avx")
    1958                 :          0 :    (set_attr "type" "sse")
    1959                 :            :    (set_attr "atom_sse_attr" "rcp")
    1960                 :            :    (set_attr "btver2_sse_attr" "rcp")
    1961                 :            :    (set_attr "prefix" "orig,vex")
    1962                 :            :    (set_attr "mode" "SF")])
    1963                 :            : 
    1964                 :            : (define_insn "<mask_codefor>rcp14<mode><mask_name>"
    1965                 :            :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    1966                 :            :         (unspec:VF_AVX512VL
    1967                 :            :           [(match_operand:VF_AVX512VL 1 "nonimmediate_operand" "vm")]
    1968                 :            :           UNSPEC_RCP14))]
    1969                 :         30 :   "TARGET_AVX512F"
    1970                 :          0 :   "vrcp14<ssemodesuffix>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    1971                 :            :   [(set_attr "type" "sse")
    1972                 :            :    (set_attr "prefix" "evex")
    1973                 :         30 :    (set_attr "mode" "<MODE>")])
    1974                 :         30 : 
    1975                 :            : (define_insn "srcp14<mode>"
    1976                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    1977                 :            :         (vec_merge:VF_128
    1978                 :            :           (unspec:VF_128
    1979                 :            :             [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    1980                 :            :             UNSPEC_RCP14)
    1981                 :            :           (match_operand:VF_128 2 "register_operand" "v")
    1982                 :            :           (const_int 1)))]
    1983                 :         30 :   "TARGET_AVX512F"
    1984                 :          0 :   "vrcp14<ssescalarmodesuffix>\t{%1, %2, %0|%0, %2, %<iptr>1}"
    1985                 :            :   [(set_attr "type" "sse")
    1986                 :            :    (set_attr "prefix" "evex")
    1987                 :         35 :    (set_attr "mode" "<MODE>")])
    1988                 :         35 : 
    1989                 :            : (define_insn "srcp14<mode>_mask"
    1990                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    1991                 :            :         (vec_merge:VF_128
    1992                 :            :           (vec_merge:VF_128
    1993                 :            :             (unspec:VF_128
    1994                 :            :               [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    1995                 :            :             UNSPEC_RCP14)
    1996                 :            :               (match_operand:VF_128 3 "nonimm_or_0_operand" "0C")
    1997                 :            :             (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk"))
    1998                 :            :           (match_operand:VF_128 2 "register_operand" "v")
    1999                 :            :           (const_int 1)))]
    2000                 :        111 :   "TARGET_AVX512F"
    2001                 :          4 :   "vrcp14<ssescalarmodesuffix>\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}"
    2002                 :            :   [(set_attr "type" "sse")
    2003                 :            :    (set_attr "prefix" "evex")
    2004                 :        115 :    (set_attr "mode" "<MODE>")])
    2005                 :        115 : 
    2006                 :        115 : (define_expand "sqrt<mode>2"
    2007                 :            :   [(set (match_operand:VF2 0 "register_operand")
    2008                 :            :         (sqrt:VF2 (match_operand:VF2 1 "vector_operand")))]
    2009                 :            :   "TARGET_SSE2")
    2010                 :            : 
    2011                 :            : (define_expand "sqrt<mode>2"
    2012                 :            :   [(set (match_operand:VF1 0 "register_operand")
    2013                 :            :         (sqrt:VF1 (match_operand:VF1 1 "vector_operand")))]
    2014                 :            :   "TARGET_SSE"
    2015                 :         24 : {
    2016                 :         24 :   if (TARGET_SSE_MATH
    2017                 :         24 :       && TARGET_RECIP_VEC_SQRT
    2018                 :         24 :       && !optimize_insn_for_size_p ()
    2019                 :         24 :       && flag_finite_math_only && !flag_trapping_math
    2020                 :         21 :       && flag_unsafe_math_optimizations)
    2021                 :            :     {
    2022                 :         19 :       ix86_emit_swsqrtsf (operands[0], operands[1], <MODE>mode, false);
    2023                 :         19 :       DONE;
    2024                 :            :     }
    2025                 :            : })
    2026                 :            : 
    2027                 :            : (define_insn "<sse>_sqrt<mode>2<mask_name><round_name>"
    2028                 :          5 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    2029                 :          5 :         (sqrt:VF (match_operand:VF 1 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    2030                 :        536 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    2031                 :         19 :   "@
    2032                 :            :    sqrt<ssemodesuffix>\t{%1, %0|%0, %1}
    2033                 :          5 :    vsqrt<ssemodesuffix>\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    2034                 :         56 :   [(set_attr "isa" "noavx,avx")
    2035                 :         56 :    (set_attr "type" "sse")
    2036                 :         58 :    (set_attr "atom_sse_attr" "sqrt")
    2037                 :         11 :    (set_attr "btver2_sse_attr" "sqrt")
    2038                 :         19 :    (set_attr "prefix" "maybe_vex")
    2039                 :            :    (set_attr "mode" "<MODE>")])
    2040                 :            : 
    2041                 :            : (define_insn "<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>"
    2042                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    2043                 :         33 :         (vec_merge:VF_128
    2044                 :            :           (sqrt:VF_128
    2045                 :            :             (match_operand:VF_128 1 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    2046                 :         33 :           (match_operand:VF_128 2 "register_operand" "0,v")
    2047                 :         33 :           (const_int 1)))]
    2048                 :         69 :   "TARGET_SSE"
    2049                 :        178 :   "@
    2050                 :         33 :    sqrt<ssescalarmodesuffix>\t{%1, %0|%0, %<iptr>1}
    2051                 :         22 :    vsqrt<ssescalarmodesuffix>\t{<round_scalar_mask_op3>%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %<iptr>1<round_scalar_mask_op3>}"
    2052                 :        309 :   [(set_attr "isa" "noavx,avx")
    2053                 :        309 :    (set_attr "type" "sse")
    2054                 :        309 :    (set_attr "atom_sse_attr" "sqrt")
    2055                 :            :    (set_attr "prefix" "<round_scalar_prefix>")
    2056                 :            :    (set_attr "btver2_sse_attr" "sqrt")
    2057                 :            :    (set_attr "mode" "<ssescalarmode>")])
    2058                 :            : 
    2059                 :            : (define_insn "*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>"
    2060                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    2061                 :            :         (vec_merge:VF_128
    2062                 :            :           (vec_duplicate:VF_128
    2063                 :            :             (sqrt:<ssescalarmode>
    2064                 :            :               (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "xm,<round_scalar_constraint>")))
    2065                 :            :           (match_operand:VF_128 2 "register_operand" "0,v")
    2066                 :            :           (const_int 1)))]
    2067                 :          6 :   "TARGET_SSE"
    2068                 :          0 :   "@
    2069                 :            :    sqrt<ssescalarmodesuffix>\t{%1, %0|%0, %1}
    2070                 :            :    vsqrt<ssescalarmodesuffix>\t{<round_scalar_mask_op3>%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %1<round_scalar_mask_op3>}"
    2071                 :          2 :   [(set_attr "isa" "noavx,avx")
    2072                 :          2 :    (set_attr "type" "sse")
    2073                 :          2 :    (set_attr "atom_sse_attr" "sqrt")
    2074                 :            :    (set_attr "prefix" "<round_scalar_prefix>")
    2075                 :            :    (set_attr "btver2_sse_attr" "sqrt")
    2076                 :            :    (set_attr "mode" "<ssescalarmode>")])
    2077                 :            : 
    2078                 :            : (define_expand "rsqrt<mode>2"
    2079                 :            :   [(set (match_operand:VF1_128_256 0 "register_operand")
    2080                 :            :         (unspec:VF1_128_256
    2081                 :            :           [(match_operand:VF1_128_256 1 "vector_operand")] UNSPEC_RSQRT))]
    2082                 :            :   "TARGET_SSE && TARGET_SSE_MATH"
    2083                 :         15 : {
    2084                 :         11 :   ix86_emit_swsqrtsf (operands[0], operands[1], <MODE>mode, true);
    2085                 :         15 :   DONE;
    2086                 :            : })
    2087                 :            : 
    2088                 :            : (define_expand "rsqrtv16sf2"
    2089                 :            :   [(set (match_operand:V16SF 0 "register_operand")
    2090                 :            :         (unspec:V16SF
    2091                 :            :           [(match_operand:V16SF 1 "vector_operand")]
    2092                 :            :           UNSPEC_RSQRT28))]
    2093                 :            :   "TARGET_AVX512ER && TARGET_SSE_MATH"
    2094                 :          2 : {
    2095                 :          2 :   ix86_emit_swsqrtsf (operands[0], operands[1], V16SFmode, true);
    2096                 :          2 :   DONE;
    2097                 :            : })
    2098                 :            : 
    2099                 :            : (define_insn "<sse>_rsqrt<mode>2"
    2100                 :            :   [(set (match_operand:VF1_128_256 0 "register_operand" "=x")
    2101                 :            :         (unspec:VF1_128_256
    2102                 :            :           [(match_operand:VF1_128_256 1 "vector_operand" "xBm")] UNSPEC_RSQRT))]
    2103                 :         90 :   "TARGET_SSE"
    2104                 :          0 :   "%vrsqrtps\t{%1, %0|%0, %1}"
    2105                 :            :   [(set_attr "type" "sse")
    2106                 :          6 :    (set_attr "prefix" "maybe_vex")
    2107                 :            :    (set_attr "mode" "<MODE>")])
    2108                 :            : 
    2109                 :          6 : (define_insn "<mask_codefor>rsqrt14<mode><mask_name>"
    2110                 :          6 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    2111                 :        118 :         (unspec:VF_AVX512VL
    2112                 :        118 :           [(match_operand:VF_AVX512VL 1 "nonimmediate_operand" "vm")]
    2113                 :        118 :           UNSPEC_RSQRT14))]
    2114                 :        118 :   "TARGET_AVX512F"
    2115                 :          0 :   "vrsqrt14<ssemodesuffix>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    2116                 :         15 :   [(set_attr "type" "sse")
    2117                 :         40 :    (set_attr "prefix" "evex")
    2118                 :         30 :    (set_attr "mode" "<MODE>")])
    2119                 :         30 : 
    2120                 :            : (define_insn "rsqrt14<mode>"
    2121                 :         25 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    2122                 :         25 :         (vec_merge:VF_128
    2123                 :         25 :           (unspec:VF_128
    2124                 :         25 :             [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    2125                 :         25 :             UNSPEC_RSQRT14)
    2126                 :         25 :           (match_operand:VF_128 2 "register_operand" "v")
    2127                 :         25 :           (const_int 1)))]
    2128                 :         30 :   "TARGET_AVX512F"
    2129                 :          0 :   "vrsqrt14<ssescalarmodesuffix>\t{%1, %2, %0|%0, %2, %<iptr>1}"
    2130                 :            :   [(set_attr "type" "sse")
    2131                 :            :    (set_attr "prefix" "evex")
    2132                 :         30 :    (set_attr "mode" "<MODE>")])
    2133                 :         30 : 
    2134                 :            : (define_insn "rsqrt14_<mode>_mask"
    2135                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    2136                 :            :         (vec_merge:VF_128
    2137                 :            :           (vec_merge:VF_128
    2138                 :            :             (unspec:VF_128
    2139                 :            :               [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    2140                 :            :               UNSPEC_RSQRT14)
    2141                 :            :               (match_operand:VF_128 3 "nonimm_or_0_operand" "0C")
    2142                 :            :               (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk"))
    2143                 :            :           (match_operand:VF_128 2 "register_operand" "v")
    2144                 :            :           (const_int 1)))]
    2145                 :        111 :   "TARGET_AVX512F"
    2146                 :          4 :   "vrsqrt14<ssescalarmodesuffix>\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}"
    2147                 :            :   [(set_attr "type" "sse")
    2148                 :            :    (set_attr "prefix" "evex")
    2149                 :        115 :    (set_attr "mode" "<MODE>")])
    2150                 :        115 : 
    2151                 :        115 : (define_insn "sse_vmrsqrtv4sf2"
    2152                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2153                 :            :         (vec_merge:V4SF
    2154                 :            :           (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm,xm")]
    2155                 :            :                        UNSPEC_RSQRT)
    2156                 :            :           (match_operand:V4SF 2 "register_operand" "0,x")
    2157                 :            :           (const_int 1)))]
    2158                 :         38 :   "TARGET_SSE"
    2159                 :        137 :   "@
    2160                 :            :    rsqrtss\t{%1, %0|%0, %k1}
    2161                 :            :    vrsqrtss\t{%1, %2, %0|%0, %2, %k1}"
    2162                 :       1406 :   [(set_attr "isa" "noavx,avx")
    2163                 :       1406 :    (set_attr "type" "sse")
    2164                 :            :    (set_attr "prefix" "orig,vex")
    2165                 :       1238 :    (set_attr "mode" "SF")])
    2166                 :       1238 : 
    2167                 :            : (define_insn "*sse_vmrsqrtv4sf2"
    2168                 :        215 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2169                 :        215 :         (vec_merge:V4SF
    2170                 :            :           (vec_duplicate:V4SF
    2171                 :        113 :             (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm,xm")]
    2172                 :        113 :                          UNSPEC_RSQRT))
    2173                 :        113 :           (match_operand:V4SF 2 "register_operand" "0,x")
    2174                 :            :           (const_int 1)))]
    2175                 :          0 :   "TARGET_SSE"
    2176                 :          0 :   "@
    2177                 :            :    rsqrtss\t{%1, %0|%0, %1}
    2178                 :            :    vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
    2179                 :            :   [(set_attr "isa" "noavx,avx")
    2180                 :            :    (set_attr "type" "sse")
    2181                 :            :    (set_attr "prefix" "orig,vex")
    2182                 :            :    (set_attr "mode" "SF")])
    2183                 :         16 : 
    2184                 :         16 : (define_expand "<code><mode>3<mask_name><round_saeonly_name>"
    2185                 :            :   [(set (match_operand:VF 0 "register_operand")
    2186                 :          3 :         (smaxmin:VF
    2187                 :          3 :           (match_operand:VF 1 "<round_saeonly_nimm_predicate>")
    2188                 :            :           (match_operand:VF 2 "<round_saeonly_nimm_predicate>")))]
    2189                 :          0 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_saeonly_mode512bit_condition>"
    2190                 :       1364 : {
    2191                 :         81 :   if (!flag_finite_math_only || flag_signed_zeros)
    2192                 :            :     {
    2193                 :       1302 :       operands[1] = force_reg (<MODE>mode, operands[1]);
    2194                 :       1302 :       emit_insn (gen_ieee_<maxmin_float><mode>3<mask_name><round_saeonly_name>
    2195                 :            :                  (operands[0], operands[1], operands[2]
    2196                 :            :                   <mask_operand_arg34>
    2197                 :            :                   <round_saeonly_mask_arg3>));
    2198                 :       1302 :       DONE;
    2199                 :            :     }
    2200                 :            :   else
    2201                 :         62 :     ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);
    2202                 :            : })
    2203                 :            : 
    2204                 :            : ;; These versions of the min/max patterns are intentionally ignorant of
    2205                 :         62 : ;; their behavior wrt -0.0 and NaN (via the commutative operand mark).
    2206                 :         62 : ;; Since both the tree-level MAX_EXPR and the rtl-level SMAX operator
    2207                 :         62 : ;; are undefined in this condition, we're certain this is correct.
    2208                 :         62 : 
    2209                 :         62 : (define_insn "*<code><mode>3<mask_name><round_saeonly_name>"
    2210                 :         62 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    2211                 :          0 :         (smaxmin:VF
    2212                 :         62 :           (match_operand:VF 1 "<round_saeonly_nimm_predicate>" "%0,v")
    2213                 :          0 :           (match_operand:VF 2 "<round_saeonly_nimm_predicate>" "xBm,<round_saeonly_constraint>")))]
    2214                 :        191 :   "TARGET_SSE
    2215                 :        783 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))
    2216                 :         62 :    && <mask_mode512bit_condition> && <round_saeonly_mode512bit_condition>"
    2217                 :         62 :   "@
    2218                 :         62 :    <maxmin_float><ssemodesuffix>\t{%2, %0|%0, %2}
    2219                 :            :    v<maxmin_float><ssemodesuffix>\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_saeonly_mask_op3>}"
    2220                 :          0 :   [(set_attr "isa" "noavx,avx")
    2221                 :          0 :    (set_attr "type" "sseadd")
    2222                 :          0 :    (set_attr "btver2_sse_attr" "maxmin")
    2223                 :          0 :    (set_attr "prefix" "<mask_prefix3>")
    2224                 :          0 :    (set_attr "mode" "<MODE>")])
    2225                 :          0 : 
    2226                 :            : ;; These versions of the min/max patterns implement exactly the operations
    2227                 :            : ;;   min = (op1 < op2 ? op1 : op2)
    2228                 :          0 : ;;   max = (!(op1 < op2) ? op1 : op2)
    2229                 :          0 : ;; Their operands are not commutative, and thus they may be used in the
    2230                 :       1198 : ;; presence of -0.0 and NaN.
    2231                 :          0 : 
    2232                 :        192 : (define_insn "ieee_<ieee_maxmin><mode>3<mask_name><round_saeonly_name>"
    2233                 :        211 :   [(set (match_operand:VF 0 "register_operand" "=x,v")
    2234                 :        953 :         (unspec:VF
    2235                 :        742 :           [(match_operand:VF 1 "register_operand" "0,v")
    2236                 :        141 :            (match_operand:VF 2 "<round_saeonly_nimm_predicate>" "xBm,<round_saeonly_constraint>")]
    2237                 :        192 :           IEEE_MAXMIN))]
    2238                 :       2262 :   "TARGET_SSE
    2239                 :       1025 :    && <mask_mode512bit_condition> && <round_saeonly_mode512bit_condition>"
    2240                 :        761 :   "@
    2241                 :        141 :    <ieee_maxmin><ssemodesuffix>\t{%2, %0|%0, %2}
    2242                 :         19 :    v<ieee_maxmin><ssemodesuffix>\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_saeonly_mask_op3>}"
    2243                 :         86 :   [(set_attr "isa" "noavx,avx")
    2244                 :        510 :    (set_attr "type" "sseadd")
    2245                 :        424 :    (set_attr "btver2_sse_attr" "maxmin")
    2246                 :        405 :    (set_attr "prefix" "<mask_prefix3>")
    2247                 :         19 :    (set_attr "mode" "<MODE>")])
    2248                 :         19 : 
    2249                 :         19 : ;; Standard scalar operation patterns which preserve the rest of the
    2250                 :         19 : ;; vector for combiner.
    2251                 :         19 : (define_insn "*ieee_<ieee_maxmin><mode>3"
    2252                 :         19 :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    2253                 :         19 :         (vec_merge:VF_128
    2254                 :         19 :           (vec_duplicate:VF_128
    2255                 :         19 :             (unspec:<ssescalarmode>
    2256                 :            :               [(vec_select:<ssescalarmode>
    2257                 :            :                  (match_operand:VF_128 1 "register_operand" "0,v")
    2258                 :            :                  (parallel [(const_int 0)]))
    2259                 :            :                (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")]
    2260                 :            :                IEEE_MAXMIN))
    2261                 :            :           (match_dup 1)
    2262                 :            :           (const_int 1)))]
    2263                 :          2 :   "TARGET_SSE"
    2264                 :         19 :   "@
    2265                 :         19 :    <ieee_maxmin><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    2266                 :         19 :    v<ieee_maxmin><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2267                 :          2 :   [(set_attr "isa" "noavx,avx")
    2268                 :          2 :    (set_attr "type" "sseadd")
    2269                 :            :    (set_attr "btver2_sse_attr" "maxmin")
    2270                 :            :    (set_attr "prefix" "orig,vex")
    2271                 :            :    (set_attr "mode" "<ssescalarmode>")])
    2272                 :         21 : 
    2273                 :            : (define_insn "<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    2274                 :         21 :   [(set (match_operand:VF_128 0 "register_operand" "=x,v")
    2275                 :         21 :         (vec_merge:VF_128
    2276                 :         21 :           (smaxmin:VF_128
    2277                 :         21 :             (match_operand:VF_128 1 "register_operand" "0,v")
    2278                 :         21 :             (match_operand:VF_128 2 "nonimmediate_operand" "xm,<round_saeonly_scalar_constraint>"))
    2279                 :         21 :          (match_dup 1)
    2280                 :         21 :          (const_int 1)))]
    2281                 :        135 :   "TARGET_SSE"
    2282                 :          0 :   "@
    2283                 :         21 :    <maxmin_float><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    2284                 :         21 :    v<maxmin_float><ssescalarmodesuffix>\t{<round_saeonly_scalar_mask_op3>%2, %1, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %1, %<iptr>2<round_saeonly_scalar_mask_op3>}"
    2285                 :        545 :   [(set_attr "isa" "noavx,avx")
    2286                 :        545 :    (set_attr "type" "sse")
    2287                 :         21 :    (set_attr "btver2_sse_attr" "maxmin")
    2288                 :         21 :    (set_attr "prefix" "<round_saeonly_scalar_prefix>")
    2289                 :         21 :    (set_attr "mode" "<ssescalarmode>")])
    2290                 :         21 : 
    2291                 :         21 : (define_insn "avx_addsubv4df3"
    2292                 :         21 :   [(set (match_operand:V4DF 0 "register_operand" "=x")
    2293                 :         21 :         (vec_merge:V4DF
    2294                 :         21 :           (minus:V4DF
    2295                 :         21 :             (match_operand:V4DF 1 "register_operand" "x")
    2296                 :         21 :             (match_operand:V4DF 2 "nonimmediate_operand" "xm"))
    2297                 :            :           (plus:V4DF (match_dup 1) (match_dup 2))
    2298                 :            :           (const_int 5)))]
    2299                 :         45 :   "TARGET_AVX"
    2300                 :          3 :   "vaddsubpd\t{%2, %1, %0|%0, %1, %2}"
    2301                 :            :   [(set_attr "type" "sseadd")
    2302                 :            :    (set_attr "prefix" "vex")
    2303                 :         83 :    (set_attr "mode" "V4DF")])
    2304                 :         83 : 
    2305                 :        104 : (define_insn "sse3_addsubv2df3"
    2306                 :         21 :   [(set (match_operand:V2DF 0 "register_operand" "=x,x")
    2307                 :         21 :         (vec_merge:V2DF
    2308                 :            :           (minus:V2DF
    2309                 :            :             (match_operand:V2DF 1 "register_operand" "0,x")
    2310                 :            :             (match_operand:V2DF 2 "vector_operand" "xBm,xm"))
    2311                 :            :           (plus:V2DF (match_dup 1) (match_dup 2))
    2312                 :            :           (const_int 1)))]
    2313                 :        534 :   "TARGET_SSE3"
    2314                 :        195 :   "@
    2315                 :         17 :    addsubpd\t{%2, %0|%0, %2}
    2316                 :         17 :    vaddsubpd\t{%2, %1, %0|%0, %1, %2}"
    2317                 :         78 :   [(set_attr "isa" "noavx,avx")
    2318                 :         78 :    (set_attr "type" "sseadd")
    2319                 :         78 :    (set_attr "atom_unit" "complex")
    2320                 :         17 :    (set_attr "prefix" "orig,vex")
    2321                 :         17 :    (set_attr "mode" "V2DF")])
    2322                 :         17 : 
    2323                 :          0 : (define_insn "avx_addsubv8sf3"
    2324                 :         17 :   [(set (match_operand:V8SF 0 "register_operand" "=x")
    2325                 :         17 :         (vec_merge:V8SF
    2326                 :         17 :           (minus:V8SF
    2327                 :         17 :             (match_operand:V8SF 1 "register_operand" "x")
    2328                 :         17 :             (match_operand:V8SF 2 "nonimmediate_operand" "xm"))
    2329                 :         17 :           (plus:V8SF (match_dup 1) (match_dup 2))
    2330                 :         17 :           (const_int 85)))]
    2331                 :         67 :   "TARGET_AVX"
    2332                 :         28 :   "vaddsubps\t{%2, %1, %0|%0, %1, %2}"
    2333                 :         17 :   [(set_attr "type" "sseadd")
    2334                 :         17 :    (set_attr "prefix" "vex")
    2335                 :         17 :    (set_attr "mode" "V8SF")])
    2336                 :         17 : 
    2337                 :         17 : (define_insn "sse3_addsubv4sf3"
    2338                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2339                 :            :         (vec_merge:V4SF
    2340                 :            :           (minus:V4SF
    2341                 :            :             (match_operand:V4SF 1 "register_operand" "0,x")
    2342                 :            :             (match_operand:V4SF 2 "vector_operand" "xBm,xm"))
    2343                 :          0 :           (plus:V4SF (match_dup 1) (match_dup 2))
    2344                 :          0 :           (const_int 5)))]
    2345                 :         54 :   "TARGET_SSE3"
    2346                 :         46 :   "@
    2347                 :         17 :    addsubps\t{%2, %0|%0, %2}
    2348                 :         17 :    vaddsubps\t{%2, %1, %0|%0, %1, %2}"
    2349                 :            :   [(set_attr "isa" "noavx,avx")
    2350                 :            :    (set_attr "type" "sseadd")
    2351                 :            :    (set_attr "prefix" "orig,vex")
    2352                 :            :    (set_attr "prefix_rep" "1,*")
    2353                 :        663 :    (set_attr "mode" "V4SF")])
    2354                 :        751 : 
    2355                 :        663 : (define_split
    2356                 :         88 :   [(set (match_operand:VF_128_256 0 "register_operand")
    2357                 :         88 :         (match_operator:VF_128_256 6 "addsub_vm_operator"
    2358                 :         88 :           [(minus:VF_128_256
    2359                 :         88 :              (match_operand:VF_128_256 1 "register_operand")
    2360                 :         88 :              (match_operand:VF_128_256 2 "vector_operand"))
    2361                 :         88 :            (plus:VF_128_256
    2362                 :         88 :              (match_operand:VF_128_256 3 "vector_operand")
    2363                 :         88 :              (match_operand:VF_128_256 4 "vector_operand"))
    2364                 :          0 :            (match_operand 5 "const_int_operand")]))]
    2365                 :        454 :   "TARGET_SSE3
    2366                 :        497 :    && can_create_pseudo_p ()
    2367                 :        233 :    && ((rtx_equal_p (operands[1], operands[3])
    2368                 :        228 :         && rtx_equal_p (operands[2], operands[4]))
    2369                 :         93 :        || (rtx_equal_p (operands[1], operands[4])
    2370                 :         93 :            && rtx_equal_p (operands[2], operands[3])))"
    2371                 :        167 :   [(set (match_dup 0)
    2372                 :        109 :         (vec_merge:VF_128_256
    2373                 :         88 :           (minus:VF_128_256 (match_dup 1) (match_dup 2))
    2374                 :        140 :           (plus:VF_128_256 (match_dup 1) (match_dup 2))
    2375                 :        140 :           (match_dup 5)))])
    2376                 :        157 : 
    2377                 :         88 : (define_split
    2378                 :         88 :   [(set (match_operand:VF_128_256 0 "register_operand")
    2379                 :            :         (match_operator:VF_128_256 6 "addsub_vm_operator"
    2380                 :            :           [(plus:VF_128_256
    2381                 :            :              (match_operand:VF_128_256 1 "vector_operand")
    2382                 :            :              (match_operand:VF_128_256 2 "vector_operand"))
    2383                 :            :            (minus:VF_128_256
    2384                 :            :              (match_operand:VF_128_256 3 "register_operand")
    2385                 :            :              (match_operand:VF_128_256 4 "vector_operand"))
    2386                 :            :            (match_operand 5 "const_int_operand")]))]
    2387                 :        105 :   "TARGET_SSE3
    2388                 :        105 :    && can_create_pseudo_p ()
    2389                 :        105 :    && ((rtx_equal_p (operands[1], operands[3])
    2390                 :         15 :         && rtx_equal_p (operands[2], operands[4]))
    2391                 :          2 :        || (rtx_equal_p (operands[1], operands[4])
    2392                 :          2 :            && rtx_equal_p (operands[2], operands[3])))"
    2393                 :          0 :   [(set (match_dup 0)
    2394                 :          9 :         (vec_merge:VF_128_256
    2395                 :          8 :           (minus:VF_128_256 (match_dup 3) (match_dup 4))
    2396                 :          0 :           (plus:VF_128_256 (match_dup 3) (match_dup 4))
    2397                 :          8 :           (match_dup 5)))]
    2398                 :         25 : {
    2399                 :          8 :   /* Negate mask bits to compensate for swapped PLUS and MINUS RTXes.  */
    2400                 :         25 :   operands[5]
    2401                 :         34 :     = GEN_INT (~INTVAL (operands[5])
    2402                 :          8 :                & ((HOST_WIDE_INT_1U << GET_MODE_NUNITS (<MODE>mode)) - 1));
    2403                 :          8 : })
    2404                 :          8 : 
    2405                 :          0 : (define_split
    2406                 :          8 :   [(set (match_operand:VF_128_256 0 "register_operand")
    2407                 :         17 :         (match_operator:VF_128_256 7 "addsub_vs_operator"
    2408                 :         17 :           [(vec_concat:<ssedoublemode>
    2409                 :         17 :              (minus:VF_128_256
    2410                 :         17 :                (match_operand:VF_128_256 1 "register_operand")
    2411                 :         17 :                (match_operand:VF_128_256 2 "vector_operand"))
    2412                 :         17 :              (plus:VF_128_256
    2413                 :         17 :                (match_operand:VF_128_256 3 "vector_operand")
    2414                 :         17 :                (match_operand:VF_128_256 4 "vector_operand")))
    2415                 :         17 :            (match_parallel 5 "addsub_vs_parallel"
    2416                 :         17 :              [(match_operand 6 "const_int_operand")])]))]
    2417                 :         17 :   "TARGET_SSE3
    2418                 :         23 :    && can_create_pseudo_p ()
    2419                 :          6 :    && ((rtx_equal_p (operands[1], operands[3])
    2420                 :          5 :         && rtx_equal_p (operands[2], operands[4]))
    2421                 :          1 :        || (rtx_equal_p (operands[1], operands[4])
    2422                 :          1 :            && rtx_equal_p (operands[2], operands[3])))"
    2423                 :          0 :   [(set (match_dup 0)
    2424                 :          0 :         (vec_merge:VF_128_256
    2425                 :            :           (minus:VF_128_256 (match_dup 1) (match_dup 2))
    2426                 :          6 :           (plus:VF_128_256 (match_dup 1) (match_dup 2))
    2427                 :         23 :           (match_dup 5)))]
    2428                 :         29 : {
    2429                 :         23 :   int i, nelt = XVECLEN (operands[5], 0);
    2430                 :          6 :   HOST_WIDE_INT ival = 0;
    2431                 :            : 
    2432                 :         30 :   for (i = 0; i < nelt; i++)
    2433                 :         48 :     if (INTVAL (XVECEXP (operands[5], 0, i)) < GET_MODE_NUNITS (<MODE>mode))
    2434                 :         12 :       ival |= HOST_WIDE_INT_1 << i;
    2435                 :          9 : 
    2436                 :          6 :   operands[5] = GEN_INT (ival);
    2437                 :          9 : })
    2438                 :          9 : 
    2439                 :          9 : (define_split
    2440                 :         15 :   [(set (match_operand:VF_128_256 0 "register_operand")
    2441                 :         15 :         (match_operator:VF_128_256 7 "addsub_vs_operator"
    2442                 :         15 :           [(vec_concat:<ssedoublemode>
    2443                 :         15 :              (plus:VF_128_256
    2444                 :          9 :                (match_operand:VF_128_256 1 "vector_operand")
    2445                 :          0 :                (match_operand:VF_128_256 2 "vector_operand"))
    2446                 :          9 :              (minus:VF_128_256
    2447                 :          6 :                (match_operand:VF_128_256 3 "register_operand")
    2448                 :          6 :                (match_operand:VF_128_256 4 "vector_operand")))
    2449                 :          6 :            (match_parallel 5 "addsub_vs_parallel"
    2450                 :          6 :              [(match_operand 6 "const_int_operand")])]))]
    2451                 :          6 :   "TARGET_SSE3
    2452                 :          6 :    && can_create_pseudo_p ()
    2453                 :          0 :    && ((rtx_equal_p (operands[1], operands[3])
    2454                 :          0 :         && rtx_equal_p (operands[2], operands[4]))
    2455                 :          0 :        || (rtx_equal_p (operands[1], operands[4])
    2456                 :          0 :            && rtx_equal_p (operands[2], operands[3])))"
    2457                 :          0 :   [(set (match_dup 0)
    2458                 :          0 :         (vec_merge:VF_128_256
    2459                 :            :           (minus:VF_128_256 (match_dup 3) (match_dup 4))
    2460                 :        152 :           (plus:VF_128_256 (match_dup 3) (match_dup 4))
    2461                 :        158 :           (match_dup 5)))]
    2462                 :        158 : {
    2463                 :          6 :   int i, nelt = XVECLEN (operands[5], 0);
    2464                 :          0 :   HOST_WIDE_INT ival = 0;
    2465                 :            : 
    2466                 :          0 :   for (i = 0; i < nelt; i++)
    2467                 :          0 :     if (INTVAL (XVECEXP (operands[5], 0, i)) >= GET_MODE_NUNITS (<MODE>mode))
    2468                 :          0 :       ival |= HOST_WIDE_INT_1 << i;
    2469                 :          6 : 
    2470                 :          0 :   operands[5] = GEN_INT (ival);
    2471                 :          6 : })
    2472                 :          6 : 
    2473                 :          6 : (define_insn "avx_h<plusminus_insn>v4df3"
    2474                 :          6 :   [(set (match_operand:V4DF 0 "register_operand" "=x")
    2475                 :          6 :         (vec_concat:V4DF
    2476                 :          6 :           (vec_concat:V2DF
    2477                 :          6 :             (plusminus:DF
    2478                 :          6 :               (vec_select:DF
    2479                 :          0 :                 (match_operand:V4DF 1 "register_operand" "x")
    2480                 :          6 :                 (parallel [(const_int 0)]))
    2481                 :          0 :               (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    2482                 :          0 :             (plusminus:DF
    2483                 :          0 :               (vec_select:DF
    2484                 :          0 :                 (match_operand:V4DF 2 "nonimmediate_operand" "xm")
    2485                 :          0 :                 (parallel [(const_int 0)]))
    2486                 :          0 :               (vec_select:DF (match_dup 2) (parallel [(const_int 1)]))))
    2487                 :            :           (vec_concat:V2DF
    2488                 :            :             (plusminus:DF
    2489                 :            :               (vec_select:DF (match_dup 1) (parallel [(const_int 2)]))
    2490                 :            :               (vec_select:DF (match_dup 1) (parallel [(const_int 3)])))
    2491                 :            :             (plusminus:DF
    2492                 :            :               (vec_select:DF (match_dup 2) (parallel [(const_int 2)]))
    2493                 :            :               (vec_select:DF (match_dup 2) (parallel [(const_int 3)]))))))]
    2494                 :         56 :   "TARGET_AVX"
    2495                 :          0 :   "vh<plusminus_mnemonic>pd\t{%2, %1, %0|%0, %1, %2}"
    2496                 :          0 :   [(set_attr "type" "sseadd")
    2497                 :          0 :    (set_attr "prefix" "vex")
    2498                 :         68 :    (set_attr "mode" "V4DF")])
    2499                 :         68 : 
    2500                 :            : (define_expand "sse3_haddv2df3"
    2501                 :            :   [(set (match_operand:V2DF 0 "register_operand")
    2502                 :         12 :         (vec_concat:V2DF
    2503                 :          0 :           (plus:DF
    2504                 :            :             (vec_select:DF
    2505                 :          0 :               (match_operand:V2DF 1 "register_operand")
    2506                 :         12 :               (parallel [(const_int 0)]))
    2507                 :          0 :             (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    2508                 :          0 :           (plus:DF
    2509                 :          0 :             (vec_select:DF
    2510                 :          0 :               (match_operand:V2DF 2 "vector_operand")
    2511                 :          0 :               (parallel [(const_int 0)]))
    2512                 :          0 :             (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]
    2513                 :          0 :   "TARGET_SSE3")
    2514                 :          0 : 
    2515                 :            : (define_insn "*sse3_haddv2df3"
    2516                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=x,x")
    2517                 :            :         (vec_concat:V2DF
    2518                 :            :           (plus:DF
    2519                 :            :             (vec_select:DF
    2520                 :            :               (match_operand:V2DF 1 "register_operand" "0,x")
    2521                 :            :               (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))
    2522                 :            :             (vec_select:DF
    2523                 :            :               (match_dup 1)
    2524                 :            :               (parallel [(match_operand:SI 4 "const_0_to_1_operand")])))
    2525                 :            :           (plus:DF
    2526                 :            :             (vec_select:DF
    2527                 :            :               (match_operand:V2DF 2 "vector_operand" "xBm,xm")
    2528                 :            :               (parallel [(match_operand:SI 5 "const_0_to_1_operand")]))
    2529                 :            :             (vec_select:DF
    2530                 :            :               (match_dup 2)
    2531                 :            :               (parallel [(match_operand:SI 6 "const_0_to_1_operand")])))))]
    2532                 :         44 :   "TARGET_SSE3
    2533                 :         44 :    && INTVAL (operands[3]) != INTVAL (operands[4])
    2534                 :       2808 :    && INTVAL (operands[5]) != INTVAL (operands[6])"
    2535                 :          0 :   "@
    2536                 :            :    haddpd\t{%2, %0|%0, %2}
    2537                 :       2764 :    vhaddpd\t{%2, %1, %0|%0, %1, %2}"
    2538                 :       3747 :   [(set_attr "isa" "noavx,avx")
    2539                 :       3747 :    (set_attr "type" "sseadd")
    2540                 :       2764 :    (set_attr "prefix" "orig,vex")
    2541                 :       2880 :    (set_attr "mode" "V2DF")])
    2542                 :       2880 : 
    2543                 :        116 : (define_insn "sse3_hsubv2df3"
    2544                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=x,x")
    2545                 :         49 :         (vec_concat:V2DF
    2546                 :         49 :           (minus:DF
    2547                 :         49 :             (vec_select:DF
    2548                 :            :               (match_operand:V2DF 1 "register_operand" "0,x")
    2549                 :         49 :               (parallel [(const_int 0)]))
    2550                 :         49 :             (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    2551                 :         49 :           (minus:DF
    2552                 :            :             (vec_select:DF
    2553                 :         49 :               (match_operand:V2DF 2 "vector_operand" "xBm,xm")
    2554                 :         49 :               (parallel [(const_int 0)]))
    2555                 :            :             (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]
    2556                 :         93 :   "TARGET_SSE3"
    2557                 :          0 :   "@
    2558                 :         49 :    hsubpd\t{%2, %0|%0, %2}
    2559                 :            :    vhsubpd\t{%2, %1, %0|%0, %1, %2}"
    2560                 :        269 :   [(set_attr "isa" "noavx,avx")
    2561                 :        269 :    (set_attr "type" "sseadd")
    2562                 :        221 :    (set_attr "prefix" "orig,vex")
    2563                 :         48 :    (set_attr "mode" "V2DF")])
    2564                 :         48 : 
    2565                 :         48 : (define_insn "*sse3_haddv2df3_low"
    2566                 :            :   [(set (match_operand:DF 0 "register_operand" "=x,x")
    2567                 :         48 :         (plus:DF
    2568                 :         48 :           (vec_select:DF
    2569                 :         48 :             (match_operand:V2DF 1 "register_operand" "0,x")
    2570                 :            :             (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))
    2571                 :         48 :           (vec_select:DF
    2572                 :         48 :             (match_dup 1)
    2573                 :         48 :             (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))))]
    2574                 :        159 :   "TARGET_SSE3
    2575                 :         41 :    && INTVAL (operands[2]) != INTVAL (operands[3])"
    2576                 :         56 :   "@
    2577                 :         48 :    haddpd\t{%0, %0|%0, %0}
    2578                 :         48 :    vhaddpd\t{%1, %1, %0|%0, %1, %1}"
    2579                 :            :   [(set_attr "isa" "noavx,avx")
    2580                 :         44 :    (set_attr "type" "sseadd1")
    2581                 :         44 :    (set_attr "prefix" "orig,vex")
    2582                 :         44 :    (set_attr "mode" "V2DF")])
    2583                 :            : 
    2584                 :         44 : (define_insn "*sse3_hsubv2df3_low"
    2585                 :         44 :   [(set (match_operand:DF 0 "register_operand" "=x,x")
    2586                 :            :         (minus:DF
    2587                 :         44 :           (vec_select:DF
    2588                 :         44 :             (match_operand:V2DF 1 "register_operand" "0,x")
    2589                 :         44 :             (parallel [(const_int 0)]))
    2590                 :    1369300 :           (vec_select:DF
    2591                 :    1369300 :             (match_dup 1)
    2592                 :    1369300 :             (parallel [(const_int 1)]))))]
    2593                 :          8 :   "TARGET_SSE3"
    2594                 :    1369300 :   "@
    2595                 :            :    hsubpd\t{%0, %0|%0, %0}
    2596                 :    1193350 :    vhsubpd\t{%1, %1, %0|%0, %1, %1}"
    2597                 :    1193350 :   [(set_attr "isa" "noavx,avx")
    2598                 :    1193350 :    (set_attr "type" "sseadd1")
    2599                 :    1193350 :    (set_attr "prefix" "orig,vex")
    2600                 :    1193350 :    (set_attr "mode" "V2DF")])
    2601                 :    1193350 : 
    2602                 :    1193350 : (define_insn "avx_h<plusminus_insn>v8sf3"
    2603                 :    2481560 :   [(set (match_operand:V8SF 0 "register_operand" "=x")
    2604                 :    1193350 :         (vec_concat:V8SF
    2605                 :    1193350 :           (vec_concat:V4SF
    2606                 :    1193350 :             (vec_concat:V2SF
    2607                 :    2481560 :               (plusminus:SF
    2608                 :    2481560 :                 (vec_select:SF
    2609                 :    2481560 :                   (match_operand:V8SF 1 "register_operand" "x")
    2610                 :    2481560 :                   (parallel [(const_int 0)]))
    2611                 :    1193350 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    2612                 :    1288210 :               (plusminus:SF
    2613                 :    2481530 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))
    2614                 :    1288210 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))
    2615                 :    1193320 :             (vec_concat:V2SF
    2616                 :    2085510 :               (plusminus:SF
    2617                 :    1193320 :                 (vec_select:SF
    2618                 :     892191 :                   (match_operand:V8SF 2 "nonimmediate_operand" "xm")
    2619                 :     908175 :                   (parallel [(const_int 0)]))
    2620                 :      15984 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))
    2621                 :      22849 :               (plusminus:SF
    2622                 :     892191 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))
    2623                 :            :                 (vec_select:SF (match_dup 2) (parallel [(const_int 3)])))))
    2624                 :      15920 :           (vec_concat:V4SF
    2625                 :      15920 :             (vec_concat:V2SF
    2626                 :      15920 :               (plusminus:SF
    2627                 :      15353 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 4)]))
    2628                 :      15353 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 5)])))
    2629                 :      13467 :               (plusminus:SF
    2630                 :      26455 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 6)]))
    2631                 :            :                 (vec_select:SF (match_dup 1) (parallel [(const_int 7)]))))
    2632                 :            :             (vec_concat:V2SF
    2633                 :            :               (plusminus:SF
    2634                 :            :                 (vec_select:SF (match_dup 2) (parallel [(const_int 4)]))
    2635                 :            :                 (vec_select:SF (match_dup 2) (parallel [(const_int 5)])))
    2636                 :            :               (plusminus:SF
    2637                 :            :                 (vec_select:SF (match_dup 2) (parallel [(const_int 6)]))
    2638                 :            :                 (vec_select:SF (match_dup 2) (parallel [(const_int 7)])))))))]
    2639                 :         56 :   "TARGET_AVX"
    2640                 :          0 :   "vh<plusminus_mnemonic>ps\t{%2, %1, %0|%0, %1, %2}"
    2641                 :            :   [(set_attr "type" "sseadd")
    2642                 :            :    (set_attr "prefix" "vex")
    2643                 :         86 :    (set_attr "mode" "V8SF")])
    2644                 :         86 : 
    2645                 :            : (define_insn "sse3_h<plusminus_insn>v4sf3"
    2646                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2647                 :            :         (vec_concat:V4SF
    2648                 :            :           (vec_concat:V2SF
    2649                 :            :             (plusminus:SF
    2650                 :            :               (vec_select:SF
    2651                 :            :                 (match_operand:V4SF 1 "register_operand" "0,x")
    2652                 :            :                 (parallel [(const_int 0)]))
    2653                 :            :               (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    2654                 :            :             (plusminus:SF
    2655                 :            :               (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))
    2656                 :            :               (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))
    2657                 :            :           (vec_concat:V2SF
    2658                 :            :             (plusminus:SF
    2659                 :            :               (vec_select:SF
    2660                 :            :                 (match_operand:V4SF 2 "vector_operand" "xBm,xm")
    2661                 :            :                 (parallel [(const_int 0)]))
    2662                 :            :               (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))
    2663                 :            :             (plusminus:SF
    2664                 :            :               (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))
    2665                 :            :               (vec_select:SF (match_dup 2) (parallel [(const_int 3)]))))))]
    2666                 :         68 :   "TARGET_SSE3"
    2667                 :          0 :   "@
    2668                 :            :    h<plusminus_mnemonic>ps\t{%2, %0|%0, %2}
    2669                 :            :    vh<plusminus_mnemonic>ps\t{%2, %1, %0|%0, %1, %2}"
    2670                 :         86 :   [(set_attr "isa" "noavx,avx")
    2671                 :         86 :    (set_attr "type" "sseadd")
    2672                 :            :    (set_attr "atom_unit" "complex")
    2673                 :            :    (set_attr "prefix" "orig,vex")
    2674                 :            :    (set_attr "prefix_rep" "1,*")
    2675                 :            :    (set_attr "mode" "V4SF")])
    2676                 :            : 
    2677                 :            : (define_mode_iterator REDUC_SSE_PLUS_MODE
    2678                 :            :  [(V2DF "TARGET_SSE") (V4SF "TARGET_SSE")])
    2679                 :            : 
    2680                 :            : (define_expand "reduc_plus_scal_<mode>"
    2681                 :            :  [(plus:REDUC_SSE_PLUS_MODE
    2682                 :            :    (match_operand:<ssescalarmode> 0 "register_operand")
    2683                 :            :    (match_operand:REDUC_SSE_PLUS_MODE 1 "register_operand"))]
    2684                 :            :  ""
    2685                 :       5525 : {
    2686                 :       2764 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    2687                 :       5525 :   ix86_expand_reduc (gen_add<mode>3, tmp, operands[1]);
    2688                 :       5525 :   emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
    2689                 :            :                                                         const0_rtx));
    2690                 :       5525 :   DONE;
    2691                 :            : })
    2692                 :            : 
    2693                 :            : (define_expand "reduc_plus_scal_v16qi"
    2694                 :            :  [(plus:V16QI
    2695                 :            :     (match_operand:QI 0 "register_operand")
    2696                 :            :     (match_operand:V16QI 1 "register_operand"))]
    2697                 :            :  "TARGET_SSE2"
    2698                 :        869 : {
    2699                 :       1738 :   rtx tmp = gen_reg_rtx (V1TImode);
    2700                 :        869 :   emit_insn (gen_sse2_lshrv1ti3 (tmp, gen_lowpart (V1TImode, operands[1]),
    2701                 :            :                                  GEN_INT (64)));
    2702                 :        869 :   rtx tmp2 = gen_reg_rtx (V16QImode);
    2703                 :        869 :   emit_insn (gen_addv16qi3 (tmp2, operands[1], gen_lowpart (V16QImode, tmp)));
    2704                 :        869 :   rtx tmp3 = gen_reg_rtx (V16QImode);
    2705                 :        869 :   emit_move_insn (tmp3, CONST0_RTX (V16QImode));
    2706                 :        869 :   rtx tmp4 = gen_reg_rtx (V2DImode);
    2707                 :        869 :   emit_insn (gen_sse2_psadbw (tmp4, tmp2, tmp3));
    2708                 :        869 :   tmp4 = gen_lowpart (V16QImode, tmp4);
    2709                 :       3630 :   emit_insn (gen_vec_extractv16qiqi (operands[0], tmp4, const0_rtx));
    2710                 :        869 :   DONE;
    2711                 :            : })
    2712                 :       3630 : 
    2713                 :       3630 : (define_mode_iterator REDUC_PLUS_MODE
    2714                 :       3630 :  [(V4DF "TARGET_AVX") (V8SF "TARGET_AVX")
    2715                 :       3630 :   (V8DF "TARGET_AVX512F") (V16SF "TARGET_AVX512F")
    2716                 :       3630 :   (V32QI "TARGET_AVX") (V64QI "TARGET_AVX512F")])
    2717                 :       3630 : 
    2718                 :            : (define_expand "reduc_plus_scal_<mode>"
    2719                 :            :  [(plus:REDUC_PLUS_MODE
    2720                 :            :    (match_operand:<ssescalarmode> 0 "register_operand")
    2721                 :            :    (match_operand:REDUC_PLUS_MODE 1 "register_operand"))]
    2722                 :            :  ""
    2723                 :       3210 : {
    2724                 :       6420 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    2725                 :       3210 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    2726                 :       3210 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    2727                 :       3210 :   rtx tmp3 = gen_lowpart (<ssehalfvecmode>mode, operands[1]);
    2728                 :       3210 :   emit_insn (gen_add<ssehalfvecmodelower>3 (tmp2, tmp, tmp3));
    2729                 :       3210 :   emit_insn (gen_reduc_plus_scal_<ssehalfvecmodelower> (operands[0], tmp2));
    2730                 :       3210 :   DONE;
    2731                 :            : })
    2732                 :       1198 : 
    2733                 :       1198 : ;; Modes handled by reduc_sm{in,ax}* patterns.
    2734                 :       1198 : (define_mode_iterator REDUC_SSE_SMINMAX_MODE
    2735                 :       1198 :   [(V4SF "TARGET_SSE") (V2DF "TARGET_SSE")
    2736                 :       1198 :    (V2DI "TARGET_SSE4_2") (V4SI "TARGET_SSE") (V8HI "TARGET_SSE")
    2737                 :       1198 :    (V16QI "TARGET_SSE")])
    2738                 :            : 
    2739                 :            : (define_expand "reduc_<code>_scal_<mode>"
    2740                 :            :   [(smaxmin:REDUC_SSE_SMINMAX_MODE
    2741                 :            :      (match_operand:<ssescalarmode> 0 "register_operand")
    2742                 :            :      (match_operand:REDUC_SSE_SMINMAX_MODE 1 "register_operand"))]
    2743                 :            :   ""
    2744                 :        429 : {
    2745                 :        858 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    2746                 :        429 :   ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
    2747                 :        429 :   emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
    2748                 :            :                                                         const0_rtx));
    2749                 :       2441 :   DONE;
    2750                 :            : })
    2751                 :            : 
    2752                 :       2031 : (define_mode_iterator REDUC_SMINMAX_MODE
    2753                 :       2031 :   [(V32QI "TARGET_AVX2") (V16HI "TARGET_AVX2")
    2754                 :       2031 :    (V8SI "TARGET_AVX2") (V4DI "TARGET_AVX2")
    2755                 :       2031 :    (V8SF "TARGET_AVX") (V4DF "TARGET_AVX")
    2756                 :       2031 :    (V64QI "TARGET_AVX512BW")
    2757                 :       2031 :    (V32HI "TARGET_AVX512BW") (V16SI "TARGET_AVX512F")
    2758                 :            :    (V8DI "TARGET_AVX512F") (V16SF "TARGET_AVX512F")
    2759                 :            :    (V8DF "TARGET_AVX512F")])
    2760                 :            : 
    2761                 :            : (define_expand "reduc_<code>_scal_<mode>"
    2762                 :            :   [(smaxmin:REDUC_SMINMAX_MODE
    2763                 :            :      (match_operand:<ssescalarmode> 0 "register_operand")
    2764                 :            :      (match_operand:REDUC_SMINMAX_MODE 1 "register_operand"))]
    2765                 :            :   ""
    2766                 :          5 : {
    2767                 :         10 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    2768                 :        415 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    2769                 :          5 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    2770                 :          5 :   emit_insn (gen_<code><ssehalfvecmodelower>3
    2771                 :          5 :     (tmp2, tmp, gen_lowpart (<ssehalfvecmode>mode, operands[1])));
    2772                 :        415 :   emit_insn (gen_reduc_<code>_scal_<ssehalfvecmodelower> (operands[0], tmp2));
    2773                 :          5 :   DONE;
    2774                 :        410 : })
    2775                 :        410 : 
    2776                 :        410 : (define_expand "reduc_<code>_scal_<mode>"
    2777                 :            :   [(umaxmin:VI_AVX512BW
    2778                 :            :      (match_operand:<ssescalarmode> 0 "register_operand")
    2779                 :            :      (match_operand:VI_AVX512BW 1 "register_operand"))]
    2780                 :            :   "TARGET_AVX512F"
    2781                 :          0 : {
    2782                 :          0 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    2783                 :          0 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    2784                 :          0 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    2785                 :          0 :   emit_insn (gen_<code><ssehalfvecmodelower>3
    2786                 :          0 :     (tmp2, tmp, gen_lowpart (<ssehalfvecmode>mode, operands[1])));
    2787                 :          0 :   emit_insn (gen_reduc_<code>_scal_<ssehalfvecmodelower> (operands[0], tmp2));
    2788                 :          0 :   DONE;
    2789                 :            : })
    2790                 :            : 
    2791                 :            : (define_expand "reduc_<code>_scal_<mode>"
    2792                 :          5 :   [(umaxmin:VI_256
    2793                 :            :      (match_operand:<ssescalarmode> 0 "register_operand")
    2794                 :            :      (match_operand:VI_256 1 "register_operand"))]
    2795                 :          5 :   "TARGET_AVX2"
    2796                 :          5 : {
    2797                 :         27 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    2798                 :         11 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    2799                 :         11 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    2800                 :         16 :   emit_insn (gen_<code><ssehalfvecmodelower>3
    2801                 :         11 :     (tmp2, tmp, gen_lowpart (<ssehalfvecmode>mode, operands[1])));
    2802                 :         11 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    2803                 :         11 :   ix86_expand_reduc (gen_<code><ssehalfvecmodelower>3, tmp3, tmp2);
    2804                 :         11 :   emit_insn (gen_vec_extract<ssehalfvecmodelower><ssescalarmodelower>
    2805                 :            :                 (operands[0], tmp3, const0_rtx));
    2806                 :         11 :   DONE;
    2807                 :          0 : })
    2808                 :            : 
    2809                 :            : (define_expand "reduc_umin_scal_v8hi"
    2810                 :          0 :   [(umin:V8HI
    2811                 :          0 :      (match_operand:HI 0 "register_operand")
    2812                 :          0 :      (match_operand:V8HI 1 "register_operand"))]
    2813                 :          0 :   "TARGET_SSE4_1"
    2814                 :          4 : {
    2815                 :          0 :   rtx tmp = gen_reg_rtx (V8HImode);
    2816                 :          4 :   ix86_expand_reduc (gen_uminv8hi3, tmp, operands[1]);
    2817                 :          4 :   emit_insn (gen_vec_extractv8hihi (operands[0], tmp, const0_rtx));
    2818                 :          4 :   DONE;
    2819                 :            : })
    2820                 :            : 
    2821                 :            : (define_insn "<mask_codefor>reducep<mode><mask_name>"
    2822                 :            :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    2823                 :            :         (unspec:VF_AVX512VL
    2824                 :         19 :           [(match_operand:VF_AVX512VL 1 "nonimmediate_operand" "vm")
    2825                 :         15 :            (match_operand:SI 2 "const_0_to_255_operand")]
    2826                 :            :           UNSPEC_REDUCE))]
    2827                 :         30 :   "TARGET_AVX512DQ"
    2828                 :         15 :   "vreduce<ssemodesuffix>\t{%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2}"
    2829                 :         15 :   [(set_attr "type" "sse")
    2830                 :         15 :    (set_attr "prefix" "evex")
    2831                 :        253 :    (set_attr "mode" "<MODE>")])
    2832                 :        253 : 
    2833                 :         15 : (define_insn "reduces<mode><mask_scalar_name>"
    2834                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    2835                 :            :         (vec_merge:VF_128
    2836                 :            :           (unspec:VF_128
    2837                 :         51 :             [(match_operand:VF_128 1 "register_operand" "v")
    2838                 :            :              (match_operand:VF_128 2 "nonimmediate_operand" "vm")
    2839                 :            :              (match_operand:SI 3 "const_0_to_255_operand")]
    2840                 :            :             UNSPEC_REDUCE)
    2841                 :            :           (match_dup 1)
    2842                 :         51 :           (const_int 1)))]
    2843                 :         76 :   "TARGET_AVX512DQ"
    2844                 :         55 :   "vreduce<ssescalarmodesuffix>\t{%3, %2, %1, %0<mask_scalar_operand4>|%0<mask_scalar_operand4>, %1, %<iptr>2, %3}"
    2845                 :         51 :   [(set_attr "type" "sse")
    2846                 :         51 :    (set_attr "prefix" "evex")
    2847                 :        180 :    (set_attr "mode" "<MODE>")])
    2848                 :        180 : 
    2849                 :        155 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2850                 :            : ;;
    2851                 :            : ;; Parallel floating point comparisons
    2852                 :            : ;;
    2853                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2854                 :            : 
    2855                 :            : (define_insn "avx_cmp<mode>3"
    2856                 :            :   [(set (match_operand:VF_128_256 0 "register_operand" "=x")
    2857                 :            :         (unspec:VF_128_256
    2858                 :            :           [(match_operand:VF_128_256 1 "register_operand" "x")
    2859                 :            :            (match_operand:VF_128_256 2 "nonimmediate_operand" "xm")
    2860                 :            :            (match_operand:SI 3 "const_0_to_31_operand" "n")]
    2861                 :            :           UNSPEC_PCMP))]
    2862                 :        144 :   "TARGET_AVX"
    2863                 :        620 :   "vcmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    2864                 :            :   [(set_attr "type" "ssecmp")
    2865                 :            :    (set_attr "length_immediate" "1")
    2866                 :        996 :    (set_attr "prefix" "vex")
    2867                 :        996 :    (set_attr "mode" "<MODE>")])
    2868                 :        996 : 
    2869                 :            : (define_insn "avx_vmcmp<mode>3"
    2870                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x")
    2871                 :            :         (vec_merge:VF_128
    2872                 :            :           (unspec:VF_128
    2873                 :            :             [(match_operand:VF_128 1 "register_operand" "x")
    2874                 :            :              (match_operand:VF_128 2 "nonimmediate_operand" "xm")
    2875                 :            :              (match_operand:SI 3 "const_0_to_31_operand" "n")]
    2876                 :            :             UNSPEC_PCMP)
    2877                 :            :          (match_dup 1)
    2878                 :            :          (const_int 1)))]
    2879                 :        125 :   "TARGET_AVX"
    2880                 :          0 :   "vcmp<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %3}"
    2881                 :            :   [(set_attr "type" "ssecmp")
    2882                 :            :    (set_attr "length_immediate" "1")
    2883                 :        125 :    (set_attr "prefix" "vex")
    2884                 :        125 :    (set_attr "mode" "<ssescalarmode>")])
    2885                 :            : 
    2886                 :            : (define_insn "*<sse>_maskcmp<mode>3_comm"
    2887                 :            :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    2888                 :            :         (match_operator:VF_128_256 3 "sse_comparison_operator"
    2889                 :            :           [(match_operand:VF_128_256 1 "register_operand" "%0,x")
    2890                 :            :            (match_operand:VF_128_256 2 "vector_operand" "xBm,xm")]))]
    2891                 :      23025 :   "TARGET_SSE
    2892                 :      25923 :    && GET_RTX_CLASS (GET_CODE (operands[3])) == RTX_COMM_COMPARE"
    2893                 :            :   "@
    2894                 :       2973 :    cmp%D3<ssemodesuffix>\t{%2, %0|%0, %2}
    2895                 :            :    vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2896                 :            :   [(set_attr "isa" "noavx,avx")
    2897                 :            :    (set_attr "type" "ssecmp")
    2898                 :            :    (set_attr "length_immediate" "1")
    2899                 :            :    (set_attr "prefix" "orig,vex")
    2900                 :            :    (set_attr "mode" "<MODE>")])
    2901                 :            : 
    2902                 :            : (define_insn "<sse>_maskcmp<mode>3"
    2903                 :            :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    2904                 :            :         (match_operator:VF_128_256 3 "sse_comparison_operator"
    2905                 :            :           [(match_operand:VF_128_256 1 "register_operand" "0,x")
    2906                 :            :            (match_operand:VF_128_256 2 "vector_operand" "xBm,xm")]))]
    2907                 :       1516 :   "TARGET_SSE"
    2908                 :            :   "@
    2909                 :            :    cmp%D3<ssemodesuffix>\t{%2, %0|%0, %2}
    2910                 :            :    vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2911                 :            :   [(set_attr "isa" "noavx,avx")
    2912                 :        353 :    (set_attr "type" "ssecmp")
    2913                 :        353 :    (set_attr "length_immediate" "1")
    2914                 :            :    (set_attr "prefix" "orig,vex")
    2915                 :        183 :    (set_attr "mode" "<MODE>")])
    2916                 :            : 
    2917                 :            : (define_insn "<sse>_vmmaskcmp<mode>3"
    2918                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    2919                 :            :         (vec_merge:VF_128
    2920                 :            :          (match_operator:VF_128 3 "sse_comparison_operator"
    2921                 :            :            [(match_operand:VF_128 1 "register_operand" "0,x")
    2922                 :            :             (match_operand:VF_128 2 "nonimmediate_operand" "xm,xm")])
    2923                 :            :          (match_dup 1)
    2924                 :            :          (const_int 1)))]
    2925                 :        364 :   "TARGET_SSE"
    2926                 :         81 :   "@
    2927                 :            :    cmp%D3<ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    2928                 :            :    vcmp%D3<ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %<iptr>2}"
    2929                 :        441 :   [(set_attr "isa" "noavx,avx")
    2930                 :        441 :    (set_attr "type" "ssecmp")
    2931                 :        441 :    (set_attr "length_immediate" "1,*")
    2932                 :            :    (set_attr "prefix" "orig,vex")
    2933                 :            :    (set_attr "mode" "<ssescalarmode>")])
    2934                 :            : 
    2935                 :            : (define_mode_attr cmp_imm_predicate
    2936                 :            :   [(V16SF "const_0_to_31_operand")  (V8DF "const_0_to_31_operand")
    2937                 :            :    (V16SI "const_0_to_7_operand")   (V8DI "const_0_to_7_operand")
    2938                 :            :    (V8SF "const_0_to_31_operand")   (V4DF "const_0_to_31_operand")
    2939                 :            :    (V8SI "const_0_to_7_operand")    (V4DI "const_0_to_7_operand")
    2940                 :            :    (V4SF "const_0_to_31_operand")   (V2DF "const_0_to_31_operand")
    2941                 :            :    (V4SI "const_0_to_7_operand")    (V2DI "const_0_to_7_operand")
    2942                 :            :    (V32HI "const_0_to_7_operand")   (V64QI "const_0_to_7_operand")
    2943                 :            :    (V16HI "const_0_to_7_operand")   (V32QI "const_0_to_7_operand")
    2944                 :            :    (V8HI "const_0_to_7_operand")    (V16QI "const_0_to_7_operand")])
    2945                 :            : 
    2946                 :            : (define_insn "<avx512>_cmp<mode>3<mask_scalar_merge_name><round_saeonly_name>"
    2947                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    2948                 :            :         (unspec:<avx512fmaskmode>
    2949                 :            :           [(match_operand:V48_AVX512VL 1 "register_operand" "v")
    2950                 :            :            (match_operand:V48_AVX512VL 2 "nonimmediate_operand" "<round_saeonly_constraint>")
    2951                 :            :            (match_operand:SI 3 "<cmp_imm_predicate>" "n")]
    2952                 :            :           UNSPEC_PCMP))]
    2953                 :       1059 :   "TARGET_AVX512F && <round_saeonly_mode512bit_condition>"
    2954                 :       1001 :   "v<sseintprefix>cmp<ssemodesuffix>\t{%3, <round_saeonly_mask_scalar_merge_op4>%2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2<round_saeonly_mask_scalar_merge_op4>, %3}"
    2955                 :            :   [(set_attr "type" "ssecmp")
    2956                 :            :    (set_attr "length_immediate" "1")
    2957                 :          2 :    (set_attr "prefix" "evex")
    2958                 :       2283 :    (set_attr "mode" "<sseinsnmode>")])
    2959                 :       2189 : 
    2960                 :       2118 : (define_insn "*<avx512>_cmp<mode>3<mask_scalar_merge_name><round_saeonly_name>"
    2961                 :       5645 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    2962                 :       1242 :         (match_operator:<avx512fmaskmode> 3 "ix86_comparison_int_operator"
    2963                 :       1242 :           [(match_operand:VI48_AVX512VL 1 "register_operand" "v")
    2964                 :       2486 :            (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "<round_saeonly_constraint>")]))]
    2965                 :        920 :   "TARGET_AVX512F && <round_saeonly_mode512bit_condition>"
    2966                 :        689 :   "vpcmp<ssemodesuffix>\t{%I3, <round_saeonly_mask_scalar_merge_op4>%2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2<round_saeonly_mask_scalar_merge_op4>, %I3}"
    2967                 :        806 :   [(set_attr "type" "ssecmp")
    2968                 :       1004 :    (set_attr "length_immediate" "1")
    2969                 :       1106 :    (set_attr "prefix" "evex")
    2970                 :        501 :    (set_attr "mode" "<sseinsnmode>")])
    2971                 :        164 : 
    2972                 :        352 : (define_insn "<avx512>_cmp<mode>3<mask_scalar_merge_name>"
    2973                 :         76 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    2974                 :        229 :         (unspec:<avx512fmaskmode>
    2975                 :          0 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    2976                 :         37 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    2977                 :        489 :            (match_operand:SI 3 "<cmp_imm_predicate>" "n")]
    2978                 :            :           UNSPEC_PCMP))]
    2979                 :        623 :   "TARGET_AVX512BW"
    2980                 :        121 :   "vpcmp<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    2981                 :        273 :   [(set_attr "type" "ssecmp")
    2982                 :        260 :    (set_attr "length_immediate" "1")
    2983                 :        723 :    (set_attr "prefix" "evex")
    2984                 :        723 :    (set_attr "mode" "<sseinsnmode>")])
    2985                 :        116 : 
    2986                 :        237 : (define_insn "*<avx512>_cmp<mode>3<mask_scalar_merge_name>"
    2987                 :        121 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    2988                 :       5932 :         (match_operator:<avx512fmaskmode> 3 "ix86_comparison_int_operator"
    2989                 :        195 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    2990                 :         79 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")]))]
    2991                 :       1068 :   "TARGET_AVX512BW"
    2992                 :         68 :   "vpcmp<ssemodesuffix>\t{%I3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %I3}"
    2993                 :        116 :   [(set_attr "type" "ssecmp")
    2994                 :         79 :    (set_attr "length_immediate" "1")
    2995                 :         79 :    (set_attr "prefix" "evex")
    2996                 :     104899 :    (set_attr "mode" "<sseinsnmode>")])
    2997                 :      94998 : 
    2998                 :         58 : (define_insn "<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    2999                 :      79638 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3000                 :       9851 :         (unspec:<avx512fmaskmode>
    3001                 :          0 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    3002                 :      10016 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    3003                 :            :            (match_operand:SI 3 "const_0_to_7_operand" "n")]
    3004                 :         40 :           UNSPEC_UNSIGNED_PCMP))]
    3005                 :        612 :   "TARGET_AVX512BW"
    3006                 :         38 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    3007                 :         38 :   [(set_attr "type" "ssecmp")
    3008                 :         78 :    (set_attr "length_immediate" "1")
    3009                 :     913165 :    (set_attr "prefix" "evex")
    3010                 :        798 :    (set_attr "mode" "<sseinsnmode>")])
    3011                 :    1536170 : 
    3012                 :    1536170 : (define_insn "*<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    3013                 :    1542400 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3014                 :       6238 :         (match_operator:<avx512fmaskmode> 3 "ix86_comparison_uns_operator"
    3015                 :       6238 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    3016                 :    1536170 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")]))]
    3017                 :    1536220 :   "TARGET_AVX512BW"
    3018                 :      57376 :   "vpcmpu<ssemodesuffix>\t{%I3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %I3}"
    3019                 :     632559 :   [(set_attr "type" "ssecmp")
    3020                 :      57367 :    (set_attr "length_immediate" "1")
    3021                 :      57122 :    (set_attr "prefix" "evex")
    3022                 :     689737 :    (set_attr "mode" "<sseinsnmode>")])
    3023                 :      67493 : 
    3024                 :      79069 : (define_insn "<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    3025                 :     547958 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3026                 :       4873 :         (unspec:<avx512fmaskmode>
    3027                 :        490 :           [(match_operand:VI48_AVX512VL 1 "register_operand" "v")
    3028                 :     163994 :            (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")
    3029                 :          0 :            (match_operand:SI 3 "const_0_to_7_operand" "n")]
    3030                 :     121868 :           UNSPEC_UNSIGNED_PCMP))]
    3031                 :        579 :   "TARGET_AVX512F"
    3032                 :         78 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    3033                 :         78 :   [(set_attr "type" "ssecmp")
    3034                 :         78 :    (set_attr "length_immediate" "1")
    3035                 :         78 :    (set_attr "prefix" "evex")
    3036                 :        629 :    (set_attr "mode" "<sseinsnmode>")])
    3037                 :            : 
    3038                 :            : (define_insn "*<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    3039                 :    1622880 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3040                 :    1542520 :         (match_operator:<avx512fmaskmode> 3 "ix86_comparison_uns_operator"
    3041                 :    1542520 :           [(match_operand:VI48_AVX512VL 1 "register_operand" "v")
    3042                 :    1542520 :            (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")]))]
    3043                 :        142 :   "TARGET_AVX512F"
    3044                 :        468 :   "vpcmpu<ssemodesuffix>\t{%I3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %I3}"
    3045                 :    1542520 :   [(set_attr "type" "ssecmp")
    3046                 :      80357 :    (set_attr "length_immediate" "1")
    3047                 :    1542610 :    (set_attr "prefix" "evex")
    3048                 :        102 :    (set_attr "mode" "<sseinsnmode>")])
    3049                 :         70 : 
    3050                 :        172 : (define_insn "avx512f_vmcmp<mode>3<round_saeonly_name>"
    3051                 :    1804440 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3052                 :     261923 :         (and:<avx512fmaskmode>
    3053                 :    1724080 :           (unspec:<avx512fmaskmode>
    3054                 :    2950950 :             [(match_operand:VF_128 1 "register_operand" "v")
    3055                 :     178098 :              (match_operand:VF_128 2 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    3056                 :      53379 :              (match_operand:SI 3 "const_0_to_31_operand" "n")]
    3057                 :      53379 :             UNSPEC_PCMP)
    3058                 :          0 :           (const_int 1)))]
    3059                 :         99 :   "TARGET_AVX512F"
    3060                 :      20136 :   "vcmp<ssescalarmodesuffix>\t{%3, <round_saeonly_op4>%2, %1, %0|%0, %1, %<iptr>2<round_saeonly_op4>, %3}"
    3061                 :            :   [(set_attr "type" "ssecmp")
    3062                 :            :    (set_attr "length_immediate" "1")
    3063                 :         99 :    (set_attr "prefix" "evex")
    3064                 :         99 :    (set_attr "mode" "<ssescalarmode>")])
    3065                 :            : 
    3066                 :            : (define_insn "avx512f_vmcmp<mode>3_mask<round_saeonly_name>"
    3067                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3068                 :            :         (and:<avx512fmaskmode>
    3069                 :            :           (unspec:<avx512fmaskmode>
    3070                 :            :             [(match_operand:VF_128 1 "register_operand" "v")
    3071                 :            :              (match_operand:VF_128 2 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    3072                 :            :              (match_operand:SI 3 "const_0_to_31_operand" "n")]
    3073                 :            :             UNSPEC_PCMP)
    3074                 :            :           (and:<avx512fmaskmode>
    3075                 :            :             (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")
    3076                 :            :             (const_int 1))))]
    3077                 :        139 :   "TARGET_AVX512F"
    3078                 :          0 :   "vcmp<ssescalarmodesuffix>\t{%3, <round_saeonly_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %<iptr>2<round_saeonly_op5>, %3}"
    3079                 :            :   [(set_attr "type" "ssecmp")
    3080                 :            :    (set_attr "length_immediate" "1")
    3081                 :        139 :    (set_attr "prefix" "evex")
    3082                 :        139 :    (set_attr "mode" "<ssescalarmode>")])
    3083                 :            : 
    3084                 :            : (define_insn "avx512f_maskcmp<mode>3"
    3085                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    3086                 :            :         (match_operator:<avx512fmaskmode> 3 "sse_comparison_operator"
    3087                 :            :           [(match_operand:VF_AVX512VL 1 "register_operand" "v")
    3088                 :            :            (match_operand:VF_AVX512VL 2 "nonimmediate_operand" "vm")]))]
    3089                 :         92 :   "TARGET_AVX512F"
    3090                 :            :   "vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    3091                 :            :   [(set_attr "type" "ssecmp")
    3092                 :            :    (set_attr "length_immediate" "1")
    3093                 :     380503 :    (set_attr "prefix" "evex")
    3094                 :     380503 :    (set_attr "mode" "<sseinsnmode>")])
    3095                 :     380503 : 
    3096                 :         26 : (define_insn "<sse>_<unord>comi<round_saeonly_name>"
    3097                 :     281682 :   [(set (reg:CCFP FLAGS_REG)
    3098                 :            :         (compare:CCFP
    3099                 :         24 :           (vec_select:MODEF
    3100                 :         24 :             (match_operand:<ssevecmode> 0 "register_operand" "v")
    3101                 :         21 :             (parallel [(const_int 0)]))
    3102                 :         33 :           (vec_select:MODEF
    3103                 :            :             (match_operand:<ssevecmode> 1 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    3104                 :            :             (parallel [(const_int 0)]))))]
    3105                 :        352 :   "SSE_FLOAT_MODE_P (<MODE>mode)"
    3106                 :         41 :   "%v<unord>comi<ssemodesuffix>\t{<round_saeonly_op2>%1, %0|%0, %<iptr>1<round_saeonly_op2>}"
    3107                 :            :   [(set_attr "type" "ssecomi")
    3108                 :            :    (set_attr "prefix" "maybe_vex")
    3109                 :        459 :    (set_attr "prefix_rep" "0")
    3110                 :        459 :    (set (attr "prefix_data16")
    3111                 :        447 :         (if_then_else (eq_attr "mode" "DF")
    3112                 :        447 :                       (const_string "1")
    3113                 :        902 :                       (const_string "0")))
    3114                 :        416 :    (set_attr "mode" "<MODE>")])
    3115                 :        416 : 
    3116                 :            : (define_expand "vec_cmp<mode><avx512fmaskmodelower>"
    3117                 :      12318 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    3118                 :      11084 :         (match_operator:<avx512fmaskmode> 1 ""
    3119                 :       1266 :           [(match_operand:V48_AVX512VL 2 "register_operand")
    3120                 :      12214 :            (match_operand:V48_AVX512VL 3 "nonimmediate_operand")]))]
    3121                 :      12110 :   "TARGET_AVX512F"
    3122                 :        368 : {
    3123                 :      12297 :   bool ok = ix86_expand_mask_vec_cmp (operands);
    3124                 :       1498 :   gcc_assert (ok);
    3125                 :      11140 :   DONE;
    3126                 :      10876 : })
    3127                 :       1084 : 
    3128                 :       1116 : (define_expand "vec_cmp<mode><avx512fmaskmodelower>"
    3129                 :        104 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    3130                 :        104 :         (match_operator:<avx512fmaskmode> 1 ""
    3131                 :       1116 :           [(match_operand:VI12_AVX512VL 2 "register_operand")
    3132                 :        136 :            (match_operand:VI12_AVX512VL 3 "nonimmediate_operand")]))]
    3133                 :       1084 :   "TARGET_AVX512BW"
    3134                 :       1174 : {
    3135                 :        148 :   bool ok = ix86_expand_mask_vec_cmp (operands);
    3136                 :         58 :   gcc_assert (ok);
    3137                 :       1174 :   DONE;
    3138                 :            : })
    3139                 :        882 : 
    3140                 :        882 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    3141                 :        882 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3142                 :        882 :         (match_operator:<sseintvecmode> 1 ""
    3143                 :        882 :           [(match_operand:VI_256 2 "register_operand")
    3144                 :            :            (match_operand:VI_256 3 "nonimmediate_operand")]))]
    3145                 :        441 :   "TARGET_AVX2"
    3146                 :        518 : {
    3147                 :        154 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3148                 :        517 :   gcc_assert (ok);
    3149                 :        314 :   DONE;
    3150                 :          0 : })
    3151                 :          0 : 
    3152                 :          0 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    3153                 :          0 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3154                 :        237 :         (match_operator:<sseintvecmode> 1 ""
    3155                 :        237 :           [(match_operand:VI124_128 2 "register_operand")
    3156                 :        237 :            (match_operand:VI124_128 3 "vector_operand")]))]
    3157                 :        237 :   "TARGET_SSE2"
    3158                 :        513 : {
    3159                 :        789 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3160                 :        276 :   gcc_assert (ok);
    3161                 :        550 :   DONE;
    3162                 :            : })
    3163                 :            : 
    3164                 :            : (define_expand "vec_cmpv2div2di"
    3165                 :            :   [(set (match_operand:V2DI 0 "register_operand")
    3166                 :         37 :         (match_operator:V2DI 1 ""
    3167                 :         37 :           [(match_operand:V2DI 2 "register_operand")
    3168                 :         37 :            (match_operand:V2DI 3 "vector_operand")]))]
    3169                 :         37 :   "TARGET_SSE4_2"
    3170                 :        108 : {
    3171                 :        179 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3172                 :         71 :   gcc_assert (ok);
    3173                 :        188 :   DONE;
    3174                 :            : })
    3175                 :            : 
    3176                 :            : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    3177                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3178                 :         80 :         (match_operator:<sseintvecmode> 1 ""
    3179                 :         80 :           [(match_operand:VF_256 2 "register_operand")
    3180                 :         80 :            (match_operand:VF_256 3 "nonimmediate_operand")]))]
    3181                 :         80 :   "TARGET_AVX"
    3182                 :        126 : {
    3183                 :        172 :   bool ok = ix86_expand_fp_vec_cmp (operands);
    3184                 :         46 :   gcc_assert (ok);
    3185                 :        467 :   DONE;
    3186                 :            : })
    3187                 :            : 
    3188                 :            : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    3189                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3190                 :        341 :         (match_operator:<sseintvecmode> 1 ""
    3191                 :        341 :           [(match_operand:VF_128 2 "register_operand")
    3192                 :        341 :            (match_operand:VF_128 3 "vector_operand")]))]
    3193                 :        341 :   "TARGET_SSE"
    3194                 :       4022 : {
    3195                 :       7703 :   bool ok = ix86_expand_fp_vec_cmp (operands);
    3196                 :       3681 :   gcc_assert (ok);
    3197                 :       4022 :   DONE;
    3198                 :            : })
    3199                 :            : 
    3200                 :            : (define_expand "vec_cmpu<mode><avx512fmaskmodelower>"
    3201                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    3202                 :         28 :         (match_operator:<avx512fmaskmode> 1 ""
    3203                 :         28 :           [(match_operand:VI48_AVX512VL 2 "register_operand")
    3204                 :         28 :            (match_operand:VI48_AVX512VL 3 "nonimmediate_operand")]))]
    3205                 :         28 :   "TARGET_AVX512F"
    3206                 :         79 : {
    3207                 :        130 :   bool ok = ix86_expand_mask_vec_cmp (operands);
    3208                 :         51 :   gcc_assert (ok);
    3209                 :        466 :   DONE;
    3210                 :            : })
    3211                 :            : 
    3212                 :            : (define_expand "vec_cmpu<mode><avx512fmaskmodelower>"
    3213                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    3214                 :        387 :         (match_operator:<avx512fmaskmode> 1 ""
    3215                 :        387 :           [(match_operand:VI12_AVX512VL 2 "register_operand")
    3216                 :        387 :            (match_operand:VI12_AVX512VL 3 "nonimmediate_operand")]))]
    3217                 :        387 :   "TARGET_AVX512BW"
    3218                 :        393 : {
    3219                 :        399 :   bool ok = ix86_expand_mask_vec_cmp (operands);
    3220                 :          6 :   gcc_assert (ok);
    3221                 :       3738 :   DONE;
    3222                 :            : })
    3223                 :            : 
    3224                 :            : (define_expand "vec_cmpu<mode><sseintvecmodelower>"
    3225                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3226                 :       3345 :         (match_operator:<sseintvecmode> 1 ""
    3227                 :       3345 :           [(match_operand:VI_256 2 "register_operand")
    3228                 :       3345 :            (match_operand:VI_256 3 "nonimmediate_operand")]))]
    3229                 :       3345 :   "TARGET_AVX2"
    3230                 :       3369 : {
    3231                 :       3393 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3232                 :         24 :   gcc_assert (ok);
    3233                 :       3393 :   DONE;
    3234                 :            : })
    3235                 :            : 
    3236                 :            : (define_expand "vec_cmpu<mode><sseintvecmodelower>"
    3237                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3238                 :         24 :         (match_operator:<sseintvecmode> 1 ""
    3239                 :         24 :           [(match_operand:VI124_128 2 "register_operand")
    3240                 :         24 :            (match_operand:VI124_128 3 "vector_operand")]))]
    3241                 :         24 :   "TARGET_SSE2"
    3242                 :         94 : {
    3243                 :        164 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3244                 :         70 :   gcc_assert (ok);
    3245                 :         94 :   DONE;
    3246                 :            : })
    3247                 :            : 
    3248                 :            : (define_expand "vec_cmpuv2div2di"
    3249                 :            :   [(set (match_operand:V2DI 0 "register_operand")
    3250                 :          0 :         (match_operator:V2DI 1 ""
    3251                 :          0 :           [(match_operand:V2DI 2 "register_operand")
    3252                 :          0 :            (match_operand:V2DI 3 "vector_operand")]))]
    3253                 :          0 :   "TARGET_SSE4_2"
    3254                 :         13 : {
    3255                 :         26 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3256                 :         13 :   gcc_assert (ok);
    3257                 :         37 :   DONE;
    3258                 :            : })
    3259                 :            : 
    3260                 :            : (define_expand "vec_cmpeqv2div2di"
    3261                 :            :   [(set (match_operand:V2DI 0 "register_operand")
    3262                 :         24 :         (match_operator:V2DI 1 ""
    3263                 :         24 :           [(match_operand:V2DI 2 "register_operand")
    3264                 :         24 :            (match_operand:V2DI 3 "vector_operand")]))]
    3265                 :         24 :   "TARGET_SSE4_1"
    3266                 :         24 : {
    3267                 :         24 :   bool ok = ix86_expand_int_vec_cmp (operands);
    3268                 :          0 :   gcc_assert (ok);
    3269                 :        107 :   DONE;
    3270                 :            : })
    3271                 :            : 
    3272                 :            : (define_expand "vcond<V_512:mode><VF_512:mode>"
    3273                 :            :   [(set (match_operand:V_512 0 "register_operand")
    3274                 :         83 :         (if_then_else:V_512
    3275                 :         83 :           (match_operator 3 ""
    3276                 :         83 :             [(match_operand:VF_512 4 "nonimmediate_operand")
    3277                 :         83 :              (match_operand:VF_512 5 "nonimmediate_operand")])
    3278                 :         83 :           (match_operand:V_512 1 "general_operand")
    3279                 :         83 :           (match_operand:V_512 2 "general_operand")))]
    3280                 :         83 :   "TARGET_AVX512F
    3281                 :         83 :    && (GET_MODE_NUNITS (<V_512:MODE>mode)
    3282                 :            :        == GET_MODE_NUNITS (<VF_512:MODE>mode))"
    3283                 :         22 : {
    3284                 :         44 :   bool ok = ix86_expand_fp_vcond (operands);
    3285                 :         22 :   gcc_assert (ok);
    3286                 :         22 :   DONE;
    3287                 :          0 : })
    3288                 :          0 : 
    3289                 :          0 : (define_expand "vcond<V_256:mode><VF_256:mode>"
    3290                 :          0 :   [(set (match_operand:V_256 0 "register_operand")
    3291                 :          0 :         (if_then_else:V_256
    3292                 :          0 :           (match_operator 3 ""
    3293                 :          0 :             [(match_operand:VF_256 4 "nonimmediate_operand")
    3294                 :            :              (match_operand:VF_256 5 "nonimmediate_operand")])
    3295                 :            :           (match_operand:V_256 1 "general_operand")
    3296                 :            :           (match_operand:V_256 2 "general_operand")))]
    3297                 :            :   "TARGET_AVX
    3298                 :            :    && (GET_MODE_NUNITS (<V_256:MODE>mode)
    3299                 :            :        == GET_MODE_NUNITS (<VF_256:MODE>mode))"
    3300                 :        897 : {
    3301                 :          0 :   bool ok = ix86_expand_fp_vcond (operands);
    3302                 :        897 :   gcc_assert (ok);
    3303                 :        897 :   DONE;
    3304                 :          0 : })
    3305                 :          0 : 
    3306                 :          0 : (define_expand "vcond<V_128:mode><VF_128:mode>"
    3307                 :          0 :   [(set (match_operand:V_128 0 "register_operand")
    3308                 :          0 :         (if_then_else:V_128
    3309                 :          0 :           (match_operator 3 ""
    3310                 :            :             [(match_operand:VF_128 4 "vector_operand")
    3311                 :            :              (match_operand:VF_128 5 "vector_operand")])
    3312                 :            :           (match_operand:V_128 1 "general_operand")
    3313                 :            :           (match_operand:V_128 2 "general_operand")))]
    3314                 :            :   "TARGET_SSE
    3315                 :            :    && (GET_MODE_NUNITS (<V_128:MODE>mode)
    3316                 :            :        == GET_MODE_NUNITS (<VF_128:MODE>mode))"
    3317                 :        662 : {
    3318                 :       1280 :   bool ok = ix86_expand_fp_vcond (operands);
    3319                 :        640 :   gcc_assert (ok);
    3320                 :        640 :   DONE;
    3321                 :            : })
    3322                 :            : 
    3323                 :            : (define_expand "vcond_mask_<mode><avx512fmaskmodelower>"
    3324                 :         22 :   [(set (match_operand:V48_AVX512VL 0 "register_operand")
    3325                 :         22 :         (vec_merge:V48_AVX512VL
    3326                 :         22 :           (match_operand:V48_AVX512VL 1 "nonimmediate_operand")
    3327                 :         22 :           (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand")
    3328                 :         22 :           (match_operand:<avx512fmaskmode> 3 "register_operand")))]
    3329                 :         22 :   "TARGET_AVX512F")
    3330                 :         22 : 
    3331                 :         22 : (define_expand "vcond_mask_<mode><avx512fmaskmodelower>"
    3332                 :         22 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand")
    3333                 :         22 :         (vec_merge:VI12_AVX512VL
    3334                 :        897 :           (match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
    3335                 :            :           (match_operand:VI12_AVX512VL 2 "nonimm_or_0_operand")
    3336                 :            :           (match_operand:<avx512fmaskmode> 3 "register_operand")))]
    3337                 :            :   "TARGET_AVX512BW")
    3338                 :            : 
    3339                 :            : ;; As vcondv4div4df and vcondv8siv8sf are enabled already with TARGET_AVX,
    3340                 :            : ;; and their condition can be folded late into a constant, we need to
    3341                 :        897 : ;; support vcond_mask_v4div4di and vcond_mask_v8siv8si for TARGET_AVX.
    3342                 :        897 : (define_mode_iterator VI_256_AVX2 [(V32QI "TARGET_AVX2") (V16HI "TARGET_AVX2")
    3343                 :        897 :                                    V8SI V4DI])
    3344                 :        897 : 
    3345                 :        897 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    3346                 :        897 :   [(set (match_operand:VI_256_AVX2 0 "register_operand")
    3347                 :        897 :         (vec_merge:VI_256_AVX2
    3348                 :        897 :           (match_operand:VI_256_AVX2 1 "nonimmediate_operand")
    3349                 :        897 :           (match_operand:VI_256_AVX2 2 "nonimm_or_0_operand")
    3350                 :        897 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    3351                 :        659 :   "TARGET_AVX"
    3352                 :         23 : {
    3353                 :         23 :   ix86_expand_sse_movcc (operands[0], operands[3],
    3354                 :            :                          operands[1], operands[2]);
    3355                 :         23 :   DONE;
    3356                 :         19 : })
    3357                 :            : 
    3358                 :        640 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    3359                 :        640 :   [(set (match_operand:VI124_128 0 "register_operand")
    3360                 :        640 :         (vec_merge:VI124_128
    3361                 :        640 :           (match_operand:VI124_128 1 "vector_operand")
    3362                 :        640 :           (match_operand:VI124_128 2 "nonimm_or_0_operand")
    3363                 :        640 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    3364                 :        640 :   "TARGET_SSE2"
    3365                 :       2731 : {
    3366                 :       2729 :   ix86_expand_sse_movcc (operands[0], operands[3],
    3367                 :        640 :                          operands[1], operands[2]);
    3368                 :       2089 :   DONE;
    3369                 :            : })
    3370                 :          2 : 
    3371                 :            : (define_expand "vcond_mask_v2div2di"
    3372                 :            :   [(set (match_operand:V2DI 0 "register_operand")
    3373                 :            :         (vec_merge:V2DI
    3374                 :            :           (match_operand:V2DI 1 "vector_operand")
    3375                 :            :           (match_operand:V2DI 2 "nonimm_or_0_operand")
    3376                 :            :           (match_operand:V2DI 3 "register_operand")))]
    3377                 :            :   "TARGET_SSE4_2"
    3378                 :         36 : {
    3379                 :         38 :   ix86_expand_sse_movcc (operands[0], operands[3],
    3380                 :         31 :                          operands[1], operands[2]);
    3381                 :         36 :   DONE;
    3382                 :            : })
    3383                 :            : 
    3384                 :          2 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    3385                 :         31 :   [(set (match_operand:VF_256 0 "register_operand")
    3386                 :         31 :         (vec_merge:VF_256
    3387                 :         31 :           (match_operand:VF_256 1 "nonimmediate_operand")
    3388                 :         31 :           (match_operand:VF_256 2 "nonimm_or_0_operand")
    3389                 :         31 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    3390                 :         31 :   "TARGET_AVX"
    3391                 :         43 : {
    3392                 :         31 :   ix86_expand_sse_movcc (operands[0], operands[3],
    3393                 :       2122 :                          operands[1], operands[2]);
    3394                 :         12 :   DONE;
    3395                 :            : })
    3396                 :            : 
    3397                 :            : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    3398                 :       2122 :   [(set (match_operand:VF_128 0 "register_operand")
    3399                 :       2114 :         (vec_merge:VF_128
    3400                 :       2114 :           (match_operand:VF_128 1 "vector_operand")
    3401                 :       2114 :           (match_operand:VF_128 2 "nonimm_or_0_operand")
    3402                 :       2114 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    3403                 :       2114 :   "TARGET_SSE"
    3404                 :       2160 : {
    3405                 :       2114 :   ix86_expand_sse_movcc (operands[0], operands[3],
    3406                 :          0 :                          operands[1], operands[2]);
    3407                 :         46 :   DONE;
    3408                 :            : })
    3409                 :            : 
    3410                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3411                 :          0 : ;;
    3412                 :          8 : ;; Parallel floating point logical operations
    3413                 :          0 : ;;
    3414                 :          0 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3415                 :          0 : 
    3416                 :          0 : (define_insn "<sse>_andnot<mode>3<mask_name>"
    3417                 :          0 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x,v,v")
    3418                 :          0 :         (and:VF_128_256
    3419                 :         54 :           (not:VF_128_256
    3420                 :            :             (match_operand:VF_128_256 1 "register_operand" "0,x,v,v"))
    3421                 :          0 :           (match_operand:VF_128_256 2 "vector_operand" "xBm,xm,vm,vm")))]
    3422                 :        538 :   "TARGET_SSE && <mask_avx512vl_condition>"
    3423                 :        430 : {
    3424                 :        380 :   char buf[128];
    3425                 :        380 :   const char *ops;
    3426                 :        560 :   const char *suffix;
    3427                 :        288 : 
    3428                 :        307 :   switch (which_alternative)
    3429                 :         54 :     {
    3430                 :         54 :     case 0:
    3431                 :         54 :       ops = "andn%s\t{%%2, %%0|%%0, %%2}";
    3432                 :         21 :       break;
    3433                 :        163 :     case 1:
    3434                 :        163 :     case 2:
    3435                 :        163 :     case 3:
    3436                 :        180 :       ops = "vandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    3437                 :        180 :       break;
    3438                 :          4 :     default:
    3439                 :         21 :       gcc_unreachable ();
    3440                 :          0 :     }
    3441                 :         21 : 
    3442                 :        347 :   switch (get_attr_mode (insn))
    3443                 :          4 :     {
    3444                 :          4 :     case MODE_V8SF:
    3445                 :            :     case MODE_V4SF:
    3446                 :            :       suffix = "ps";
    3447                 :            :       break;
    3448                 :          4 :     case MODE_OI:
    3449                 :          4 :     case MODE_TI:
    3450                 :            :       /* There is no vandnp[sd] in avx512f.  Use vpandn[qd].  */
    3451                 :          4 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    3452                 :          4 :       ops = "vpandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    3453                 :          4 :       break;
    3454                 :        131 :     default:
    3455                 :        131 :       suffix = "<ssemodesuffix>";
    3456                 :            :     }
    3457                 :            : 
    3458                 :        326 :   snprintf (buf, sizeof (buf), ops, suffix);
    3459                 :        326 :   output_asm_insn (buf, operands);
    3460                 :        326 :   return "";
    3461                 :            : }
    3462                 :            :   [(set_attr "isa" "noavx,avx,avx512dq,avx512f")
    3463                 :          0 :    (set_attr "type" "sselog")
    3464                 :            :    (set_attr "prefix" "orig,maybe_vex,evex,evex")
    3465                 :        315 :    (set (attr "mode")
    3466                 :            :         (cond [(and (match_test "<mask_applied>")
    3467                 :            :                     (and (eq_attr "alternative" "1")
    3468                 :          0 :                          (match_test "!TARGET_AVX512DQ")))
    3469                 :            :                  (const_string "<sseintvecmode2>")
    3470                 :            :                (eq_attr "alternative" "3")
    3471                 :            :                  (const_string "<sseintvecmode2>")
    3472                 :            :                (match_test "TARGET_AVX")
    3473                 :            :                  (const_string "<MODE>")
    3474                 :            :                (match_test "optimize_function_for_size_p (cfun)")
    3475                 :            :                  (const_string "V4SF")
    3476                 :            :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3477                 :         40 :                  (const_string "V4SF")
    3478                 :            :               ]
    3479                 :            :               (const_string "<MODE>")))])
    3480                 :            : 
    3481                 :            : (define_insn "<sse>_andnot<mode>3<mask_name>"
    3482                 :         40 :   [(set (match_operand:VF_512 0 "register_operand" "=v")
    3483                 :            :         (and:VF_512
    3484                 :            :           (not:VF_512
    3485                 :            :             (match_operand:VF_512 1 "register_operand" "v"))
    3486                 :            :           (match_operand:VF_512 2 "nonimmediate_operand" "vm")))]
    3487                 :         25 :   "TARGET_AVX512F"
    3488                 :         80 : {
    3489                 :         72 :   char buf[128];
    3490                 :         72 :   const char *ops;
    3491                 :        195 :   const char *suffix;
    3492                 :        123 : 
    3493                 :        195 :   suffix = "<ssemodesuffix>";
    3494                 :         72 :   ops = "";
    3495                 :            : 
    3496                 :          0 :   /* There is no vandnp[sd] in avx512f.  Use vpandn[qd].  */
    3497                 :          8 :   if (!TARGET_AVX512DQ)
    3498                 :            :     {
    3499                 :          0 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    3500                 :          0 :       ops = "p";
    3501                 :            :     }
    3502                 :            : 
    3503                 :         72 :   snprintf (buf, sizeof (buf),
    3504                 :            :             "v%sandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}",
    3505                 :          0 :             ops, suffix);
    3506                 :         72 :   output_asm_insn (buf, operands);
    3507                 :         72 :   return "";
    3508                 :            : }
    3509                 :            :   [(set_attr "type" "sselog")
    3510                 :          0 :    (set_attr "prefix" "evex")
    3511                 :            :    (set (attr "mode")
    3512                 :         92 :         (if_then_else (match_test "TARGET_AVX512DQ")
    3513                 :            :                       (const_string "<sseinsnmode>")
    3514                 :            :                       (const_string "XI")))])
    3515                 :            : 
    3516                 :            : (define_expand "<code><mode>3<mask_name>"
    3517                 :            :   [(set (match_operand:VF_128_256 0 "register_operand")
    3518                 :            :        (any_logic:VF_128_256
    3519                 :          6 :          (match_operand:VF_128_256 1 "vector_operand")
    3520                 :            :          (match_operand:VF_128_256 2 "vector_operand")))]
    3521                 :            :   "TARGET_SSE && <mask_avx512vl_condition>"
    3522                 :         17 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    3523                 :            : 
    3524                 :          6 : (define_expand "<code><mode>3<mask_name>"
    3525                 :        526 :   [(set (match_operand:VF_512 0 "register_operand")
    3526                 :        526 :        (any_logic:VF_512
    3527                 :        526 :          (match_operand:VF_512 1 "nonimmediate_operand")
    3528                 :        526 :          (match_operand:VF_512 2 "nonimmediate_operand")))]
    3529                 :        526 :   "TARGET_AVX512F"
    3530                 :        742 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    3531                 :        288 : 
    3532                 :        238 : (define_insn "*<code><mode>3<mask_name>"
    3533                 :        504 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x,v,v")
    3534                 :        504 :         (any_logic:VF_128_256
    3535                 :        216 :           (match_operand:VF_128_256 1 "vector_operand" "%0,x,v,v")
    3536                 :        526 :           (match_operand:VF_128_256 2 "vector_operand" "xBm,xm,vm,vm")))]
    3537                 :     100000 :   "TARGET_SSE && <mask_avx512vl_condition>
    3538                 :     101363 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    3539                 :      72541 : {
    3540                 :      71930 :   char buf[128];
    3541                 :      72146 :   const char *ops;
    3542                 :      73450 :   const char *suffix;
    3543                 :        957 : 
    3544                 :       1977 :   switch (which_alternative)
    3545                 :       1247 :     {
    3546                 :          0 :     case 0:
    3547                 :          2 :       ops = "<logic>%s\t{%%2, %%0|%%0, %%2}";
    3548                 :            :       break;
    3549                 :       2187 :     case 1:
    3550                 :       2408 :     case 2:
    3551                 :       2403 :     case 3:
    3552                 :       2117 :       ops = "v<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    3553                 :       2403 :       break;
    3554                 :        509 :     default:
    3555                 :        221 :       gcc_unreachable ();
    3556                 :        509 :     }
    3557                 :        288 : 
    3558                 :      72148 :   switch (get_attr_mode (insn))
    3559                 :        437 :     {
    3560                 :        221 :     case MODE_V8SF:
    3561                 :        216 :     case MODE_V4SF:
    3562                 :        218 :       suffix = "ps";
    3563                 :          0 :       break;
    3564                 :        246 :     case MODE_OI:
    3565                 :        244 :     case MODE_TI:
    3566                 :          2 :       /* There is no v<logic>p[sd] in avx512f.  Use vp<logic>[qd].  */
    3567                 :         30 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    3568                 :         28 :       ops = "vp<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    3569                 :         30 :       break;
    3570                 :      35973 :     default:
    3571                 :      35973 :       suffix = "<ssemodesuffix>";
    3572                 :            :     }
    3573                 :            : 
    3574                 :      71930 :   snprintf (buf, sizeof (buf), ops, suffix);
    3575                 :      71932 :   output_asm_insn (buf, operands);
    3576                 :      71930 :   return "";
    3577                 :            : }
    3578                 :            :   [(set_attr "isa" "noavx,avx,avx512dq,avx512f")
    3579                 :            :    (set_attr "type" "sselog")
    3580                 :          2 :    (set_attr "prefix" "orig,maybe_evex,evex,evex")
    3581                 :      71912 :    (set (attr "mode")
    3582                 :            :         (cond [(and (match_test "<mask_applied>")
    3583                 :            :                     (and (eq_attr "alternative" "1")
    3584                 :            :                          (match_test "!TARGET_AVX512DQ")))
    3585                 :            :                  (const_string "<sseintvecmode2>")
    3586                 :            :                (eq_attr "alternative" "3")
    3587                 :            :                  (const_string "<sseintvecmode2>")
    3588                 :            :                (match_test "TARGET_AVX")
    3589                 :          0 :                  (const_string "<MODE>")
    3590                 :            :                (match_test "optimize_function_for_size_p (cfun)")
    3591                 :            :                  (const_string "V4SF")
    3592                 :            :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3593                 :            :                  (const_string "V4SF")
    3594                 :          0 :               ]
    3595                 :            :               (const_string "<MODE>")))])
    3596                 :            : 
    3597                 :            : (define_insn "*<code><mode>3<mask_name>"
    3598                 :            :   [(set (match_operand:VF_512 0 "register_operand" "=v")
    3599                 :            :         (any_logic:VF_512
    3600                 :            :           (match_operand:VF_512 1 "nonimmediate_operand" "%v")
    3601                 :            :           (match_operand:VF_512 2 "nonimmediate_operand" "vm")))]
    3602                 :       1029 :   "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    3603                 :        521 : {
    3604                 :        272 :   char buf[128];
    3605                 :        272 :   const char *ops;
    3606                 :       2314 :   const char *suffix;
    3607                 :       1798 : 
    3608                 :       2636 :   suffix = "<ssemodesuffix>";
    3609                 :        665 :   ops = "";
    3610                 :          3 : 
    3611                 :          3 :   /* There is no v<logic>p[sd] in avx512f.  Use vp<logic>[dq].  */
    3612                 :         13 :   if (!TARGET_AVX512DQ)
    3613                 :          3 :     {
    3614                 :         23 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    3615                 :         23 :       ops = "p";
    3616                 :            :     }
    3617                 :            : 
    3618                 :        272 :   snprintf (buf, sizeof (buf),
    3619                 :            :            "v%s<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}",
    3620                 :            :            ops, suffix);
    3621                 :        272 :   output_asm_insn (buf, operands);
    3622                 :        272 :   return "";
    3623                 :            : }
    3624                 :            :   [(set_attr "type" "sselog")
    3625                 :            :    (set_attr "prefix" "evex")
    3626                 :            :    (set (attr "mode")
    3627                 :        781 :         (if_then_else (match_test "TARGET_AVX512DQ")
    3628                 :            :                       (const_string "<sseinsnmode>")
    3629                 :            :                       (const_string "XI")))])
    3630                 :            : 
    3631                 :            : (define_expand "copysign<mode>3"
    3632                 :            :   [(set (match_dup 4)
    3633                 :            :         (and:VF
    3634                 :            :           (not:VF (match_dup 3))
    3635                 :            :           (match_operand:VF 1 "vector_operand")))
    3636                 :            :    (set (match_dup 5)
    3637                 :            :         (and:VF (match_dup 3)
    3638                 :            :                 (match_operand:VF 2 "vector_operand")))
    3639                 :            :    (set (match_operand:VF 0 "register_operand")
    3640                 :            :         (ior:VF (match_dup 4) (match_dup 5)))]
    3641                 :            :   "TARGET_SSE"
    3642                 :         55 : {
    3643                 :          2 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, 1, 0);
    3644                 :            : 
    3645                 :         55 :   operands[4] = gen_reg_rtx (<MODE>mode);
    3646                 :         55 :   operands[5] = gen_reg_rtx (<MODE>mode);
    3647                 :            : })
    3648                 :            : 
    3649                 :            : (define_expand "xorsign<mode>3"
    3650                 :         55 :   [(set (match_dup 4)
    3651                 :         55 :         (and:VF (match_dup 3)
    3652                 :         55 :                 (match_operand:VF 2 "vector_operand")))
    3653                 :         55 :    (set (match_operand:VF 0 "register_operand")
    3654                 :         55 :         (xor:VF (match_dup 4)
    3655                 :         55 :                 (match_operand:VF 1 "vector_operand")))]
    3656                 :         55 :   "TARGET_SSE"
    3657                 :         57 : {
    3658                 :         59 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, 1, 0);
    3659                 :         55 : 
    3660                 :          2 :   operands[4] = gen_reg_rtx (<MODE>mode);
    3661                 :         55 : })
    3662                 :            : 
    3663                 :         55 : (define_expand "signbit<mode>2"
    3664                 :          2 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    3665                 :          2 :         (lshiftrt:<sseintvecmode>
    3666                 :          2 :           (subreg:<sseintvecmode>
    3667                 :          2 :             (match_operand:VF1_AVX2 1 "register_operand") 0)
    3668                 :         55 :           (match_dup 2)))]
    3669                 :          2 :   "TARGET_SSE2"
    3670                 :          4 :   "operands[2] = GEN_INT (GET_MODE_UNIT_BITSIZE (<MODE>mode)-1);")
    3671                 :          2 : 
    3672                 :         55 : ;; Also define scalar versions.  These are used for abs, neg, and
    3673                 :          3 : ;; conditional move.  Using subregs into vector modes causes register
    3674                 :          1 : ;; allocation lossage.  These patterns do not allow memory operands
    3675                 :          2 : ;; because the native instructions read the full 128-bits.
    3676                 :         55 : 
    3677                 :         55 : (define_insn "*andnot<mode>3"
    3678                 :         56 :   [(set (match_operand:MODEF 0 "register_operand" "=x,x,v,v")
    3679                 :          2 :         (and:MODEF
    3680                 :          1 :           (not:MODEF
    3681                 :            :             (match_operand:MODEF 1 "register_operand" "0,x,v,v"))
    3682                 :            :             (match_operand:MODEF 2 "register_operand" "x,x,v,v")))]
    3683                 :       1775 :   "SSE_FLOAT_MODE_P (<MODE>mode)"
    3684                 :        978 : {
    3685                 :        860 :   char buf[128];
    3686                 :        859 :   const char *ops;
    3687                 :       2925 :   const char *suffix
    3688                 :       2978 :     = (get_attr_mode (insn) == MODE_V4SF) ? "ps" : "<ssevecmodesuffix>";
    3689                 :       2119 : 
    3690                 :        860 :   switch (which_alternative)
    3691                 :         53 :     {
    3692                 :         53 :     case 0:
    3693                 :         54 :       ops = "andn%s\t{%%2, %%0|%%0, %%2}";
    3694                 :         55 :       break;
    3695                 :          0 :     case 1:
    3696                 :         53 :       ops = "vandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3697                 :          2 :       break;
    3698                 :          1 :     case 2:
    3699                 :          0 :       if (TARGET_AVX512DQ)
    3700                 :          3 :         ops = "vandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3701                 :          3 :       else
    3702                 :          3 :         {
    3703                 :          0 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    3704                 :          0 :           ops = "vpandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3705                 :            :         }
    3706                 :            :       break;
    3707                 :          0 :     case 3:
    3708                 :          0 :       if (TARGET_AVX512DQ)
    3709                 :            :         ops = "vandn%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3710                 :            :       else
    3711                 :            :         {
    3712                 :          0 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    3713                 :          0 :           ops = "vpandn%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3714                 :            :         }
    3715                 :            :       break;
    3716                 :          0 :     default:
    3717                 :          0 :       gcc_unreachable ();
    3718                 :            :     }
    3719                 :            : 
    3720                 :        858 :   snprintf (buf, sizeof (buf), ops, suffix);
    3721                 :        858 :   output_asm_insn (buf, operands);
    3722                 :        858 :   return "";
    3723                 :            : }
    3724                 :            :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f")
    3725                 :            :    (set_attr "type" "sselog")
    3726                 :            :    (set_attr "prefix" "orig,vex,evex,evex")
    3727                 :        373 :    (set (attr "mode")
    3728                 :            :         (cond [(eq_attr "alternative" "2")
    3729                 :            :                  (if_then_else (match_test "TARGET_AVX512DQ")
    3730                 :            :                                (const_string "<ssevecmode>")
    3731                 :            :                                (const_string "TI"))
    3732                 :            :                (eq_attr "alternative" "3")
    3733                 :            :                  (if_then_else (match_test "TARGET_AVX512DQ")
    3734                 :            :                                (const_string "<avx512fvecmode>")
    3735                 :            :                                (const_string "XI"))
    3736                 :            :                (match_test "TARGET_AVX")
    3737                 :            :                  (const_string "<ssevecmode>")
    3738                 :            :                (match_test "optimize_function_for_size_p (cfun)")
    3739                 :            :                  (const_string "V4SF")
    3740                 :            :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3741                 :            :                  (const_string "V4SF")
    3742                 :            :               ]
    3743                 :            :               (const_string "<ssevecmode>")))])
    3744                 :            : 
    3745                 :            : (define_insn "*andnottf3"
    3746                 :            :   [(set (match_operand:TF 0 "register_operand" "=x,x,v,v")
    3747                 :            :         (and:TF
    3748                 :            :           (not:TF (match_operand:TF 1 "register_operand" "0,x,v,v"))
    3749                 :            :           (match_operand:TF 2 "vector_operand" "xBm,xm,vm,v")))]
    3750                 :         34 :   "TARGET_SSE"
    3751                 :         34 : {
    3752                 :         34 :   char buf[128];
    3753                 :         34 :   const char *ops;
    3754                 :         34 :   const char *tmp
    3755                 :         34 :     = (which_alternative >= 2 ? "pandnq"
    3756                 :         34 :        : get_attr_mode (insn) == MODE_V4SF ? "andnps" : "pandn");
    3757                 :            : 
    3758                 :      27650 :   switch (which_alternative)
    3759                 :      27616 :     {
    3760                 :            :     case 0:
    3761                 :      45841 :       ops = "%s\t{%%2, %%0|%%0, %%2}";
    3762                 :      45841 :       break;
    3763                 :      45841 :     case 1:
    3764                 :      45841 :     case 2:
    3765                 :      45841 :       ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3766                 :      45841 :       break;
    3767                 :      45841 :     case 3:
    3768                 :      45841 :       ops = "v%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3769                 :      45841 :       break;
    3770                 :      45841 :     default:
    3771                 :      45841 :       gcc_unreachable ();
    3772                 :      45841 :     }
    3773                 :      45841 : 
    3774                 :      45875 :   snprintf (buf, sizeof (buf), ops, tmp);
    3775                 :      45875 :   output_asm_insn (buf, operands);
    3776                 :      45875 :   return "";
    3777                 :      45841 : }
    3778                 :      45841 :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f")
    3779                 :      45841 :    (set_attr "type" "sselog")
    3780                 :      45841 :    (set (attr "prefix_data16")
    3781                 :        791 :      (if_then_else
    3782                 :      39675 :        (and (eq_attr "alternative" "0")
    3783                 :      39675 :             (eq_attr "mode" "TI"))
    3784                 :      39675 :        (const_string "1")
    3785                 :      39675 :        (const_string "*")))
    3786                 :      39675 :    (set_attr "prefix" "orig,vex,evex,evex")
    3787                 :      39675 :    (set (attr "mode")
    3788                 :      39675 :         (cond [(eq_attr "alternative" "2")
    3789                 :            :                  (const_string "TI")
    3790                 :         15 :                (eq_attr "alternative" "3")
    3791                 :         15 :                  (const_string "XI")
    3792                 :            :                (match_test "TARGET_AVX")
    3793                 :         15 :                  (const_string "TI")
    3794                 :            :                (ior (not (match_test "TARGET_SSE2"))
    3795                 :          0 :                     (match_test "optimize_function_for_size_p (cfun)"))
    3796                 :          0 :                  (const_string "V4SF")
    3797                 :          0 :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3798                 :          0 :                  (const_string "V4SF")
    3799                 :            :               ]
    3800                 :            :               (const_string "TI")))])
    3801                 :            : 
    3802                 :            : (define_insn "*<code><mode>3"
    3803                 :            :   [(set (match_operand:MODEF 0 "register_operand" "=x,x,v,v")
    3804                 :            :         (any_logic:MODEF
    3805                 :            :           (match_operand:MODEF 1 "register_operand" "%0,x,v,v")
    3806                 :            :           (match_operand:MODEF 2 "register_operand" "x,x,v,v")))]
    3807                 :       4973 :   "SSE_FLOAT_MODE_P (<MODE>mode)"
    3808                 :       2261 : {
    3809                 :       2261 :   char buf[128];
    3810                 :       2261 :   const char *ops;
    3811                 :       9493 :   const char *suffix
    3812                 :       6937 :     = (get_attr_mode (insn) == MODE_V4SF) ? "ps" : "<ssevecmodesuffix>";
    3813                 :            : 
    3814                 :       2261 :   switch (which_alternative)
    3815                 :            :     {
    3816                 :            :     case 0:
    3817                 :            :       ops = "<logic>%s\t{%%2, %%0|%%0, %%2}";
    3818                 :            :       break;
    3819                 :          0 :     case 2:
    3820                 :          0 :       if (!TARGET_AVX512DQ)
    3821                 :            :         {
    3822                 :            :           suffix = <MODE>mode == DFmode ? "q" : "d";
    3823                 :            :           ops = "vp<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3824                 :            :           break;
    3825                 :            :         }
    3826                 :            :       /* FALLTHRU */
    3827                 :          0 :     case 1:
    3828                 :          0 :       ops = "v<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3829                 :          0 :       break;
    3830                 :          0 :     case 3:
    3831                 :          0 :       if (TARGET_AVX512DQ)
    3832                 :            :         ops = "v<logic>%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3833                 :            :       else
    3834                 :            :         {
    3835                 :          0 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    3836                 :          0 :           ops = "vp<logic>%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3837                 :            :         }
    3838                 :            :       break;
    3839                 :          0 :     default:
    3840                 :          0 :       gcc_unreachable ();
    3841                 :            :     }
    3842                 :            : 
    3843                 :       2261 :   snprintf (buf, sizeof (buf), ops, suffix);
    3844                 :       2261 :   output_asm_insn (buf, operands);
    3845                 :       2261 :   return "";
    3846                 :            : }
    3847                 :            :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f")
    3848                 :            :    (set_attr "type" "sselog")
    3849                 :            :    (set_attr "prefix" "orig,vex,evex,evex")
    3850                 :       2324 :    (set (attr "mode")
    3851                 :            :         (cond [(eq_attr "alternative" "2")
    3852                 :            :                  (if_then_else (match_test "TARGET_AVX512DQ")
    3853                 :            :                                (const_string "<ssevecmode>")
    3854                 :            :                                (const_string "TI"))
    3855                 :            :                (eq_attr "alternative" "3")
    3856                 :            :                  (if_then_else (match_test "TARGET_AVX512DQ")
    3857                 :            :                                (const_string "<avx512fvecmode>")
    3858                 :            :                                (const_string "XI"))
    3859                 :            :                (match_test "TARGET_AVX")
    3860                 :            :                  (const_string "<ssevecmode>")
    3861                 :            :                (match_test "optimize_function_for_size_p (cfun)")
    3862                 :            :                  (const_string "V4SF")
    3863                 :            :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3864                 :            :                  (const_string "V4SF")
    3865                 :            :               ]
    3866                 :            :               (const_string "<ssevecmode>")))])
    3867                 :            : 
    3868                 :            : (define_expand "<code>tf3"
    3869                 :            :   [(set (match_operand:TF 0 "register_operand")
    3870                 :            :         (any_logic:TF
    3871                 :            :           (match_operand:TF 1 "vector_operand")
    3872                 :            :           (match_operand:TF 2 "vector_operand")))]
    3873                 :            :   "TARGET_SSE"
    3874                 :          0 :   "ix86_fixup_binary_operands_no_copy (<CODE>, TFmode, operands);")
    3875                 :            : 
    3876                 :            : (define_insn "*<code>tf3"
    3877                 :          0 :   [(set (match_operand:TF 0 "register_operand" "=x,x,v,v")
    3878                 :          0 :         (any_logic:TF
    3879                 :          0 :           (match_operand:TF 1 "vector_operand" "%0,x,v,v")
    3880                 :          0 :           (match_operand:TF 2 "vector_operand" "xBm,xm,vm,v")))]
    3881                 :       2016 :   "TARGET_SSE && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    3882                 :       1292 : {
    3883                 :       1292 :   char buf[128];
    3884                 :       1292 :   const char *ops;
    3885                 :       1322 :   const char *tmp
    3886                 :        911 :     = (which_alternative >= 2 ? "p<logic>q"
    3887                 :       1287 :        : get_attr_mode (insn) == MODE_V4SF ? "<logic>ps" : "p<logic>");
    3888                 :          0 : 
    3889                 :       1292 :   switch (which_alternative)
    3890                 :          0 :     {
    3891                 :            :     case 0:
    3892                 :            :       ops = "%s\t{%%2, %%0|%%0, %%2}";
    3893                 :            :       break;
    3894                 :          9 :     case 1:
    3895                 :       3110 :     case 2:
    3896                 :          9 :       ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    3897                 :          9 :       break;
    3898                 :          0 :     case 3:
    3899                 :          0 :       ops = "v%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    3900                 :       3101 :       break;
    3901                 :          0 :     default:
    3902                 :          0 :       gcc_unreachable ();
    3903                 :          0 :     }
    3904                 :          0 : 
    3905                 :       1292 :   snprintf (buf, sizeof (buf), ops, tmp);
    3906                 :       1292 :   output_asm_insn (buf, operands);
    3907                 :       1292 :   return "";
    3908                 :            : }
    3909                 :       2733 :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f")
    3910                 :            :    (set_attr "type" "sselog")
    3911                 :            :    (set (attr "prefix_data16")
    3912                 :        438 :      (if_then_else
    3913                 :            :        (and (eq_attr "alternative" "0")
    3914                 :       2733 :             (eq_attr "mode" "TI"))
    3915                 :            :        (const_string "1")
    3916                 :            :        (const_string "*")))
    3917                 :            :    (set_attr "prefix" "orig,vex,evex,evex")
    3918                 :            :    (set (attr "mode")
    3919                 :            :         (cond [(eq_attr "alternative" "2")
    3920                 :            :                  (const_string "TI")
    3921                 :            :                (eq_attr "alternative" "3")
    3922                 :            :                  (const_string "QI")
    3923                 :        628 :                (match_test "TARGET_AVX")
    3924                 :            :                  (const_string "TI")
    3925                 :            :                (ior (not (match_test "TARGET_SSE2"))
    3926                 :            :                     (match_test "optimize_function_for_size_p (cfun)"))
    3927                 :            :                  (const_string "V4SF")
    3928                 :        628 :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    3929                 :            :                  (const_string "V4SF")
    3930                 :            :               ]
    3931                 :            :               (const_string "TI")))])
    3932                 :            : 
    3933                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3934                 :            : ;;
    3935                 :            : ;; FMA floating point multiply/accumulate instructions.  These include
    3936                 :            : ;; scalar versions of the instructions as well as vector versions.
    3937                 :        657 : ;;
    3938                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3939                 :            : 
    3940                 :            : ;; The standard names for scalar FMA are only available with SSE math enabled.
    3941                 :            : ;; CPUID bit AVX512F enables evex encoded scalar and 512-bit fma.  It doesn't
    3942                 :        657 : ;; care about FMA bit, so we enable fma for TARGET_AVX512F even when TARGET_FMA
    3943                 :            : ;; and TARGET_FMA4 are both false.
    3944                 :            : ;; TODO: In theory AVX512F does not automatically imply FMA, and without FMA
    3945                 :            : ;; one must force the EVEX encoding of the fma insns.  Ideally we'd improve
    3946                 :            : ;; GAS to allow proper prefix selection.  However, for the moment all hardware
    3947                 :            : ;; that supports AVX512F also supports FMA so we can ignore this for now.
    3948                 :            : (define_mode_iterator FMAMODEM
    3949                 :            :   [(SF "TARGET_SSE_MATH && (TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F)")
    3950                 :            :    (DF "TARGET_SSE_MATH && (TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F)")
    3951                 :        333 :    (V4SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3952                 :            :    (V2DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3953                 :            :    (V8SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3954                 :            :    (V4DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3955                 :            :    (V16SF "TARGET_AVX512F")
    3956                 :        333 :    (V8DF "TARGET_AVX512F")])
    3957                 :            : 
    3958                 :            : (define_expand "fma<mode>4"
    3959                 :            :   [(set (match_operand:FMAMODEM 0 "register_operand")
    3960                 :            :         (fma:FMAMODEM
    3961                 :            :           (match_operand:FMAMODEM 1 "nonimmediate_operand")
    3962                 :            :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    3963                 :            :           (match_operand:FMAMODEM 3 "nonimmediate_operand")))])
    3964                 :            : 
    3965                 :        350 : (define_expand "fms<mode>4"
    3966                 :            :   [(set (match_operand:FMAMODEM 0 "register_operand")
    3967                 :            :         (fma:FMAMODEM
    3968                 :            :           (match_operand:FMAMODEM 1 "nonimmediate_operand")
    3969                 :            :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    3970                 :        350 :           (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))])
    3971                 :            : 
    3972                 :            : (define_expand "fnma<mode>4"
    3973                 :            :   [(set (match_operand:FMAMODEM 0 "register_operand")
    3974                 :            :         (fma:FMAMODEM
    3975                 :            :           (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand"))
    3976                 :            :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    3977                 :            :           (match_operand:FMAMODEM 3 "nonimmediate_operand")))])
    3978                 :            : 
    3979                 :        228 : (define_expand "fnms<mode>4"
    3980                 :            :   [(set (match_operand:FMAMODEM 0 "register_operand")
    3981                 :            :         (fma:FMAMODEM
    3982                 :            :           (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand"))
    3983                 :            :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    3984                 :        228 :           (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))])
    3985                 :            : 
    3986                 :            : ;; The builtins for intrinsics are not constrained by SSE math enabled.
    3987                 :            : (define_mode_iterator FMAMODE_AVX512
    3988                 :            :  [(SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    3989                 :            :   (DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    3990                 :            :   (V4SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3991                 :            :   (V2DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3992                 :            :   (V8SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3993                 :        220 :   (V4DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    3994                 :            :   (V16SF "TARGET_AVX512F")
    3995                 :            :   (V8DF "TARGET_AVX512F")])
    3996                 :            : 
    3997                 :            : (define_mode_iterator FMAMODE
    3998                 :        220 :   [SF DF V4SF V2DF V8SF V4DF])
    3999                 :            : 
    4000                 :            : (define_expand "fma4i_fmadd_<mode>"
    4001                 :            :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    4002                 :            :         (fma:FMAMODE_AVX512
    4003                 :            :           (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand")
    4004                 :            :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    4005                 :            :           (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand")))])
    4006                 :            : 
    4007                 :       1210 : (define_expand "fma4i_fmsub_<mode>"
    4008                 :            :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    4009                 :            :         (fma:FMAMODE_AVX512
    4010                 :            :           (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand")
    4011                 :            :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    4012                 :       1210 :           (neg:FMAMODE_AVX512
    4013                 :            :             (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand"))))])
    4014                 :            : 
    4015                 :            : (define_expand "fma4i_fnmadd_<mode>"
    4016                 :            :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    4017                 :            :         (fma:FMAMODE_AVX512
    4018                 :            :           (neg:FMAMODE_AVX512
    4019                 :            :             (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand"))
    4020                 :            :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    4021                 :            :           (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand")))])
    4022                 :        721 : 
    4023                 :            : (define_expand "fma4i_fnmsub_<mode>"
    4024                 :            :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    4025                 :            :         (fma:FMAMODE_AVX512
    4026                 :            :           (neg:FMAMODE_AVX512
    4027                 :        721 :             (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand"))
    4028                 :            :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    4029                 :            :           (neg:FMAMODE_AVX512
    4030                 :            :             (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand"))))])
    4031                 :            : 
    4032                 :            : (define_expand "<avx512>_fmadd_<mode>_maskz<round_expand_name>"
    4033                 :            :   [(match_operand:VF_AVX512VL 0 "register_operand")
    4034                 :            :    (match_operand:VF_AVX512VL 1 "<round_expand_nimm_predicate>")
    4035                 :            :    (match_operand:VF_AVX512VL 2 "<round_expand_nimm_predicate>")
    4036                 :            :    (match_operand:VF_AVX512VL 3 "<round_expand_nimm_predicate>")
    4037                 :        372 :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    4038                 :            :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4039                 :         92 : {
    4040                 :         92 :   emit_insn (gen_fma_fmadd_<mode>_maskz_1<round_expand_name> (
    4041                 :            :     operands[0], operands[1], operands[2], operands[3],
    4042                 :        372 :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4043                 :         92 :   DONE;
    4044                 :            : })
    4045                 :            : 
    4046                 :            : (define_insn "*fma_fmadd_<mode>"
    4047                 :            :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    4048                 :            :         (fma:FMAMODE
    4049                 :            :           (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x")
    4050                 :            :           (match_operand:FMAMODE 2 "nonimmediate_operand" "vm,v,vm,x,m")
    4051                 :            :           (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x")))]
    4052                 :       9760 :   "TARGET_FMA || TARGET_FMA4"
    4053                 :            :   "@
    4054                 :      10065 :    vfmadd132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    4055                 :       8524 :    vfmadd213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4056                 :       7442 :    vfmadd231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    4057                 :      10471 :    vfmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4058                 :            :    vfmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4059                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4060                 :            :    (set_attr "type" "ssemuladd")
    4061                 :            :    (set_attr "mode" "<MODE>")])
    4062                 :            : 
    4063                 :            : ;; Suppose AVX-512F as baseline
    4064                 :            : (define_mode_iterator VF_SF_AVX512VL
    4065                 :            :   [SF V16SF (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
    4066                 :         86 :    DF V8DF (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
    4067                 :        303 : 
    4068                 :            : (define_insn "<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>"
    4069                 :      19983 :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4070                 :      20027 :         (fma:VF_SF_AVX512VL
    4071                 :      29366 :           (match_operand:VF_SF_AVX512VL 1 "<round_nimm_predicate>" "%0,0,v")
    4072                 :      14238 :           (match_operand:VF_SF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4073                 :      15726 :           (match_operand:VF_SF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0")))]
    4074                 :      33620 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4075                 :      23626 :   "@
    4076                 :      36030 :    vfmadd132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4077                 :      13640 :    vfmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4078                 :       6917 :    vfmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4079                 :      22722 :   [(set_attr "type" "ssemuladd")
    4080                 :      18896 :    (set_attr "mode" "<MODE>")])
    4081                 :        173 : 
    4082                 :      14979 : (define_insn "*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_1"
    4083                 :      14130 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    4084                 :      13647 :         (fma:VF_AVX512
    4085                 :      43374 :           (match_operand:VF_AVX512 1 "register_operand" "%0")
    4086                 :        941 :           (match_operand:VF_AVX512 2 "register_operand" "v")
    4087                 :       5205 :           (vec_duplicate:VF_AVX512
    4088                 :       5041 :             (match_operand:<ssescalarmode> 3 "memory_operand" "m"))))]
    4089                 :       3851 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4090                 :       7942 :   "vfmadd213<ssemodesuffix>\t{%3<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<avx512bcst>}"
    4091                 :         50 :   [(set_attr "type" "ssemuladd")
    4092                 :       3845 :    (set_attr "mode" "<MODE>")])
    4093                 :       3795 : 
    4094                 :       6439 : (define_insn "*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_2"
    4095                 :       6004 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4096                 :        217 :         (fma:VF_AVX512
    4097                 :        325 :           (vec_duplicate:VF_AVX512
    4098                 :       2183 :             (match_operand:<ssescalarmode> 1 "memory_operand" "m,m"))
    4099                 :       2503 :           (match_operand:VF_AVX512 2 "register_operand" "0,v")
    4100                 :       2398 :           (match_operand:VF_AVX512 3 "register_operand" "v,0")))]
    4101                 :       2195 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4102                 :       2291 :   "@
    4103                 :       2183 :    vfmadd132<ssemodesuffix>\t{%1<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %1<avx512bcst>}
    4104                 :       2288 :    vfmadd231<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %1<avx512bcst>}"
    4105                 :       2288 :   [(set_attr "type" "ssemuladd")
    4106                 :          0 :    (set_attr "mode" "<MODE>")])
    4107                 :          0 : 
    4108                 :         12 : (define_insn "*<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name>_bcst_3"
    4109                 :         12 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4110                 :          8 :         (fma:VF_AVX512
    4111                 :          8 :           (match_operand:VF_AVX512 1 "register_operand" "0,v")
    4112                 :        116 :           (vec_duplicate:VF_AVX512
    4113                 :            :             (match_operand:<ssescalarmode> 2 "memory_operand" "m,m"))
    4114                 :          0 :           (match_operand:VF_AVX512 3 "register_operand" "v,0")))]
    4115                 :          0 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4116                 :          0 :   "@
    4117                 :        108 :    vfmadd132<ssemodesuffix>\t{%2<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<avx512bcst>}
    4118                 :            :    vfmadd231<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<avx512bcst>}"
    4119                 :          0 :   [(set_attr "type" "ssemuladd")
    4120                 :          0 :    (set_attr "mode" "<MODE>")])
    4121                 :          0 : 
    4122                 :            : (define_insn "<avx512>_fmadd_<mode>_mask<round_name>"
    4123                 :          0 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4124                 :          0 :         (vec_merge:VF_AVX512VL
    4125                 :          0 :           (fma:VF_AVX512VL
    4126                 :          0 :             (match_operand:VF_AVX512VL 1 "register_operand" "0,0")
    4127                 :       1012 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4128                 :          0 :             (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
    4129                 :          0 :           (match_dup 1)
    4130                 :          0 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4131                 :        148 :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4132                 :       1012 :   "@
    4133                 :            :    vfmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4134                 :         22 :    vfmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4135                 :         22 :   [(set_attr "type" "ssemuladd")
    4136                 :        219 :    (set_attr "mode" "<MODE>")])
    4137                 :        217 : 
    4138                 :         20 : (define_insn "<avx512>_fmadd_<mode>_mask3<round_name>"
    4139                 :         20 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4140                 :            :         (vec_merge:VF_AVX512VL
    4141                 :            :           (fma:VF_AVX512VL
    4142                 :        833 :             (match_operand:VF_AVX512VL 1 "<round_nimm_predicate>" "%v")
    4143                 :            :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4144                 :            :             (match_operand:VF_AVX512VL 3 "register_operand" "0"))
    4145                 :            :           (match_dup 3)
    4146                 :            :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4147                 :        853 :   "TARGET_AVX512F"
    4148                 :          0 :   "vfmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4149                 :            :   [(set_attr "type" "ssemuladd")
    4150                 :            :    (set_attr "mode" "<MODE>")])
    4151                 :        236 : 
    4152                 :        236 : (define_insn "*fma_fmsub_<mode>"
    4153                 :            :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    4154                 :        226 :         (fma:FMAMODE
    4155                 :        226 :           (match_operand:FMAMODE   1 "nonimmediate_operand" "%0,0,v,x,x")
    4156                 :            :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    4157                 :        272 :           (neg:FMAMODE
    4158                 :        200 :             (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x"))))]
    4159                 :      11010 :   "TARGET_FMA || TARGET_FMA4"
    4160                 :            :   "@
    4161                 :       1546 :    vfmsub132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    4162                 :       1618 :    vfmsub213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4163                 :       1546 :    vfmsub231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    4164                 :       1546 :    vfmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4165                 :            :    vfmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4166                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4167                 :            :    (set_attr "type" "ssemuladd")
    4168                 :            :    (set_attr "mode" "<MODE>")])
    4169                 :            : 
    4170                 :            : (define_expand "<avx512>_fmsub_<mode>_maskz<round_expand_name>"
    4171                 :            :   [(match_operand:VF_AVX512VL 0 "register_operand")
    4172                 :         72 :    (match_operand:VF_AVX512VL 1 "<round_expand_nimm_predicate>")
    4173                 :            :    (match_operand:VF_AVX512VL 2 "<round_expand_nimm_predicate>")
    4174                 :            :    (match_operand:VF_AVX512VL 3 "<round_expand_nimm_predicate>")
    4175                 :            :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    4176                 :            :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4177                 :         72 : {
    4178                 :         92 :   emit_insn (gen_fma_fmsub_<mode>_maskz_1<round_expand_name> (
    4179                 :            :     operands[0], operands[1], operands[2], operands[3],
    4180                 :            :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4181                 :         92 :   DONE;
    4182                 :            : })
    4183                 :            : 
    4184                 :            : (define_insn "<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>"
    4185                 :            :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4186                 :            :         (fma:VF_SF_AVX512VL
    4187                 :        108 :           (match_operand:VF_SF_AVX512VL   1 "<round_nimm_predicate>" "%0,0,v")
    4188                 :            :           (match_operand:VF_SF_AVX512VL   2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4189                 :            :           (neg:VF_SF_AVX512VL
    4190                 :            :             (match_operand:VF_SF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0"))))]
    4191                 :       2044 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4192                 :        126 :   "@
    4193                 :            :    vfmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4194                 :            :    vfmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4195                 :          8 :    vfmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4196                 :       3494 :   [(set_attr "type" "ssemuladd")
    4197                 :       3317 :    (set_attr "mode" "<MODE>")])
    4198                 :       5585 : 
    4199                 :        131 : (define_insn "*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_1"
    4200                 :       2835 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    4201                 :       2704 :         (fma:VF_AVX512
    4202                 :       2820 :           (match_operand:VF_AVX512 1 "register_operand" "%0")
    4203                 :       5403 :           (match_operand:VF_AVX512 2 "register_operand" "v")
    4204                 :      27573 :           (neg:VF_AVX512
    4205                 :        484 :             (vec_duplicate:VF_AVX512
    4206                 :      27297 :               (match_operand:<ssescalarmode> 3 "memory_operand" "m")))))]
    4207                 :      27209 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4208                 :         47 :   "vfmsub213<ssemodesuffix>\t{%3<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<avx512bcst>}"
    4209                 :      18536 :   [(set_attr "type" "ssemuladd")
    4210                 :        208 :    (set_attr "mode" "<MODE>")])
    4211                 :        422 : 
    4212                 :          2 : (define_insn "*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_2"
    4213                 :      17908 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4214                 :        259 :         (fma:VF_AVX512
    4215                 :        148 :           (vec_duplicate:VF_AVX512
    4216                 :       7658 :             (match_operand:<ssescalarmode> 1 "memory_operand" "m,m"))
    4217                 :       6355 :           (match_operand:VF_AVX512 2 "register_operand" "0,v")
    4218                 :      13587 :           (neg:VF_AVX512
    4219                 :         96 :             (match_operand:VF_AVX512 3 "register_operand" "v,0"))))]
    4220                 :       6186 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4221                 :       4404 :   "@
    4222                 :       4364 :    vfmsub132<ssemodesuffix>\t{%1<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %1<avx512bcst>}
    4223                 :       6178 :    vfmsub231<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %1<avx512bcst>}"
    4224                 :         44 :   [(set_attr "type" "ssemuladd")
    4225                 :         48 :    (set_attr "mode" "<MODE>")])
    4226                 :         48 : 
    4227                 :         48 : (define_insn "*<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name>_bcst_3"
    4228                 :         48 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4229                 :       1124 :         (fma:VF_AVX512
    4230                 :       1124 :           (match_operand:VF_AVX512 1 "register_operand" "0,v")
    4231                 :       1124 :           (vec_duplicate:VF_AVX512
    4232                 :      21255 :             (match_operand:<ssescalarmode> 2 "memory_operand" "m,m"))
    4233                 :      20107 :           (neg:VF_AVX512
    4234                 :       1124 :             (match_operand:VF_AVX512 3 "nonimmediate_operand" "v,0"))))]
    4235                 :          0 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4236                 :          0 :   "@
    4237                 :       1148 :    vfmsub132<ssemodesuffix>\t{%2<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<avx512bcst>}
    4238                 :            :    vfmsub231<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<avx512bcst>}"
    4239                 :       1124 :   [(set_attr "type" "ssemuladd")
    4240                 :          0 :    (set_attr "mode" "<MODE>")])
    4241                 :     786120 : 
    4242                 :       1124 : (define_insn "<avx512>_fmsub_<mode>_mask<round_name>"
    4243                 :       1178 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4244                 :       1124 :         (vec_merge:VF_AVX512VL
    4245                 :     786174 :           (fma:VF_AVX512VL
    4246                 :     786512 :             (match_operand:VF_AVX512VL 1 "register_operand" "0,0")
    4247                 :     787200 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4248                 :     786512 :             (neg:VF_AVX512VL
    4249                 :       4366 :               (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
    4250                 :     781808 :           (match_dup 1)
    4251                 :        793 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4252                 :       1262 :   "TARGET_AVX512F"
    4253                 :     497120 :   "@
    4254                 :        721 :    vfmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4255                 :        110 :    vfmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4256                 :     154197 :   [(set_attr "type" "ssemuladd")
    4257                 :         18 :    (set_attr "mode" "<MODE>")])
    4258                 :         16 : 
    4259                 :     128082 : (define_insn "<avx512>_fmsub_<mode>_mask3<round_name>"
    4260                 :        108 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4261                 :        239 :         (vec_merge:VF_AVX512VL
    4262                 :       3168 :           (fma:VF_AVX512VL
    4263                 :       3619 :             (match_operand:VF_AVX512VL 1 "<round_nimm_predicate>" "%v")
    4264                 :       3219 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4265                 :          0 :             (neg:VF_AVX512VL
    4266                 :         50 :               (match_operand:VF_AVX512VL 3 "register_operand" "0")))
    4267                 :         50 :           (match_dup 3)
    4268                 :        450 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4269                 :         70 :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4270                 :         88 :   "vfmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4271                 :        249 :   [(set_attr "type" "ssemuladd")
    4272                 :        249 :    (set_attr "mode" "<MODE>")])
    4273                 :          0 : 
    4274                 :        236 : (define_insn "*fma_fnmadd_<mode>"
    4275                 :        249 :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    4276                 :        226 :         (fma:FMAMODE
    4277                 :        475 :           (neg:FMAMODE
    4278                 :          0 :             (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x"))
    4279                 :        300 :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    4280                 :        252 :           (match_operand:FMAMODE   3 "nonimmediate_operand" "v,vm,0,xm,x")))]
    4281                 :       6962 :   "TARGET_FMA || TARGET_FMA4"
    4282                 :            :   "@
    4283                 :       3399 :    vfnmadd132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    4284                 :        684 :    vfnmadd213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4285                 :        623 :    vfnmadd231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    4286                 :       3399 :    vfnmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4287                 :            :    vfnmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4288                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4289                 :            :    (set_attr "type" "ssemuladd")
    4290                 :            :    (set_attr "mode" "<MODE>")])
    4291                 :            : 
    4292                 :            : (define_expand "<avx512>_fnmadd_<mode>_maskz<round_expand_name>"
    4293                 :            :   [(match_operand:VF_AVX512VL 0 "register_operand")
    4294                 :            :    (match_operand:VF_AVX512VL 1 "<round_expand_nimm_predicate>")
    4295                 :         48 :    (match_operand:VF_AVX512VL 2 "<round_expand_nimm_predicate>")
    4296                 :            :    (match_operand:VF_AVX512VL 3 "<round_expand_nimm_predicate>")
    4297                 :            :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    4298                 :            :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4299                 :         92 : {
    4300                 :        140 :   emit_insn (gen_fma_fnmadd_<mode>_maskz_1<round_expand_name> (
    4301                 :            :     operands[0], operands[1], operands[2], operands[3],
    4302                 :            :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4303                 :         92 :   DONE;
    4304                 :            : })
    4305                 :            : 
    4306                 :            : (define_insn "<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>"
    4307                 :            :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4308                 :            :         (fma:VF_SF_AVX512VL
    4309                 :            :           (neg:VF_SF_AVX512VL
    4310                 :            :             (match_operand:VF_SF_AVX512VL 1 "<round_nimm_predicate>" "%0,0,v"))
    4311                 :         98 :           (match_operand:VF_SF_AVX512VL   2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4312                 :            :           (match_operand:VF_SF_AVX512VL   3 "<round_nimm_predicate>" "v,<round_constraint>,0")))]
    4313                 :       1457 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4314                 :       2788 :   "@
    4315                 :            :    vfnmadd132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4316                 :         98 :    vfnmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4317                 :         12 :    vfnmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4318                 :       5035 :   [(set_attr "type" "ssemuladd")
    4319                 :       4427 :    (set_attr "mode" "<MODE>")])
    4320                 :       8460 : 
    4321                 :        133 : (define_insn "*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_1"
    4322                 :       4059 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    4323                 :       2893 :         (fma:VF_AVX512
    4324                 :      10522 :           (neg:VF_AVX512
    4325                 :       6814 :             (match_operand:VF_AVX512 1 "register_operand" "%0"))
    4326                 :        426 :           (match_operand:VF_AVX512 2 "register_operand" "v")
    4327                 :       3455 :           (vec_duplicate:VF_AVX512
    4328                 :        213 :             (match_operand:<ssescalarmode> 3 "memory_operand" "m"))))]
    4329                 :       2881 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4330                 :       1700 :   "vfnmadd213<ssemodesuffix>\t{%3<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<avx512bcst>}"
    4331                 :       1653 :   [(set_attr "type" "ssemuladd")
    4332                 :       2971 :    (set_attr "mode" "<MODE>")])
    4333                 :        209 : 
    4334                 :        271 : (define_insn "*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_2"
    4335                 :          2 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4336                 :        293 :         (fma:VF_AVX512
    4337                 :        289 :           (neg:VF_AVX512
    4338                 :       1413 :             (vec_duplicate:VF_AVX512
    4339                 :        289 :               (match_operand:<ssescalarmode> 1 "memory_operand" "m,m")))
    4340                 :         44 :           (match_operand:VF_AVX512 2 "register_operand" "0,v")
    4341                 :         44 :           (match_operand:VF_AVX512 3 "register_operand" "v,0")))]
    4342                 :         96 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4343                 :         48 :   "@
    4344                 :         92 :    vfnmadd132<ssemodesuffix>\t{%1<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %1<avx512bcst>}
    4345                 :         92 :    vfnmadd231<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %1<avx512bcst>}"
    4346                 :         44 :   [(set_attr "type" "ssemuladd")
    4347                 :         48 :    (set_attr "mode" "<MODE>")])
    4348                 :          0 : 
    4349                 :         48 : (define_insn "*<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name>_bcst_3"
    4350                 :         52 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4351                 :          4 :         (fma:VF_AVX512
    4352                 :          4 :           (neg:VF_AVX512
    4353                 :          4 :             (match_operand:VF_AVX512 1 "register_operand" "0,v"))
    4354                 :            :           (vec_duplicate:VF_AVX512
    4355                 :          0 :             (match_operand:<ssescalarmode> 2 "memory_operand" "m,m"))
    4356                 :          0 :           (match_operand:VF_AVX512 3 "register_operand" "v,0")))]
    4357                 :          4 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4358                 :          0 :   "@
    4359                 :          0 :    vfnmadd132<ssemodesuffix>\t{%2<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<avx512bcst>}
    4360                 :          0 :    vfnmadd231<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<avx512bcst>}"
    4361                 :          0 :   [(set_attr "type" "ssemuladd")
    4362                 :          0 :    (set_attr "mode" "<MODE>")])
    4363                 :          0 : 
    4364                 :          0 : (define_insn "<avx512>_fnmadd_<mode>_mask<round_name>"
    4365                 :          0 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4366                 :          0 :         (vec_merge:VF_AVX512VL
    4367                 :          0 :           (fma:VF_AVX512VL
    4368                 :          0 :             (neg:VF_AVX512VL
    4369                 :            :               (match_operand:VF_AVX512VL 1 "register_operand" "0,0"))
    4370                 :          0 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4371                 :          0 :             (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
    4372                 :          0 :           (match_dup 1)
    4373                 :            :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4374                 :        147 :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4375                 :          0 :   "@
    4376                 :         86 :    vfnmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4377                 :         84 :    vfnmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4378                 :         84 :   [(set_attr "type" "ssemuladd")
    4379                 :        290 :    (set_attr "mode" "<MODE>")])
    4380                 :        204 : 
    4381                 :            : (define_insn "<avx512>_fnmadd_<mode>_mask3<round_name>"
    4382                 :            :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4383                 :            :         (vec_merge:VF_AVX512VL
    4384                 :            :           (fma:VF_AVX512VL
    4385                 :            :             (neg:VF_AVX512VL
    4386                 :            :               (match_operand:VF_AVX512VL 1 "<round_nimm_predicate>" "%v"))
    4387                 :            :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4388                 :            :             (match_operand:VF_AVX512VL 3 "register_operand" "0"))
    4389                 :          0 :           (match_dup 3)
    4390                 :            :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4391                 :         20 :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4392                 :         66 :   "vfnmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4393                 :            :   [(set_attr "type" "ssemuladd")
    4394                 :          0 :    (set_attr "mode" "<MODE>")])
    4395                 :          0 : 
    4396                 :        236 : (define_insn "*fma_fnmsub_<mode>"
    4397                 :            :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    4398                 :        226 :         (fma:FMAMODE
    4399                 :        413 :           (neg:FMAMODE
    4400                 :        200 :             (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x"))
    4401                 :        318 :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    4402                 :        209 :           (neg:FMAMODE
    4403                 :        286 :             (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x"))))]
    4404                 :       3184 :   "TARGET_FMA || TARGET_FMA4"
    4405                 :          0 :   "@
    4406                 :       1709 :    vfnmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4407                 :        113 :    vfnmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4408                 :        175 :    vfnmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}
    4409                 :       1935 :    vfnmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4410                 :        133 :    vfnmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4411                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4412                 :            :    (set_attr "type" "ssemuladd")
    4413                 :            :    (set_attr "mode" "<MODE>")])
    4414                 :            : 
    4415                 :            : (define_expand "<avx512>_fnmsub_<mode>_maskz<round_expand_name>"
    4416                 :            :   [(match_operand:VF_AVX512VL 0 "register_operand")
    4417                 :         49 :    (match_operand:VF_AVX512VL 1 "<round_expand_nimm_predicate>")
    4418                 :        679 :    (match_operand:VF_AVX512VL 2 "<round_expand_nimm_predicate>")
    4419                 :            :    (match_operand:VF_AVX512VL 3 "<round_expand_nimm_predicate>")
    4420                 :            :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    4421                 :            :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4422                 :        728 : {
    4423                 :        771 :   emit_insn (gen_fma_fnmsub_<mode>_maskz_1<round_expand_name> (
    4424                 :        679 :     operands[0], operands[1], operands[2], operands[3],
    4425                 :            :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4426                 :        749 :   DONE;
    4427                 :            : })
    4428                 :          0 : 
    4429                 :          0 : (define_insn "<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>"
    4430                 :          0 :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4431                 :         50 :         (fma:VF_SF_AVX512VL
    4432                 :            :           (neg:VF_SF_AVX512VL
    4433                 :            :             (match_operand:VF_SF_AVX512VL 1 "<round_nimm_predicate>" "%0,0,v"))
    4434                 :            :           (match_operand:VF_SF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4435                 :            :           (neg:VF_SF_AVX512VL
    4436                 :         50 :             (match_operand:VF_SF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0"))))]
    4437                 :         46 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4438                 :       1612 :   "@
    4439                 :            :    vfnmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4440                 :            :    vfnmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4441                 :         12 :    vfnmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4442                 :       1850 :   [(set_attr "type" "ssemuladd")
    4443                 :         23 :    (set_attr "mode" "<MODE>")])
    4444                 :       1516 : 
    4445                 :       1112 : (define_insn "*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_1"
    4446                 :       1151 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v")
    4447                 :       2444 :         (fma:VF_AVX512
    4448                 :         10 :           (neg:VF_AVX512
    4449                 :        426 :             (match_operand:VF_AVX512 1 "register_operand" "%0"))
    4450                 :        474 :           (match_operand:VF_AVX512 2 "register_operand" "v")
    4451                 :          5 :           (neg:VF_AVX512
    4452                 :          5 :             (vec_duplicate:VF_AVX512
    4453                 :        257 :               (match_operand:<ssescalarmode> 3 "memory_operand" "m")))))]
    4454                 :          4 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4455                 :          3 :   "vfnmsub213<ssemodesuffix>\t{%3<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<avx512bcst>}"
    4456                 :        209 :   [(set_attr "type" "ssemuladd")
    4457                 :        209 :    (set_attr "mode" "<MODE>")])
    4458                 :         85 : 
    4459                 :         50 : (define_insn "*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_2"
    4460                 :         46 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4461                 :        127 :         (fma:VF_AVX512
    4462                 :    3347764 :           (neg:VF_AVX512
    4463                 :        127 :             (vec_duplicate:VF_AVX512
    4464                 :    3347764 :               (match_operand:<ssescalarmode> 1 "memory_operand" "m,m")))
    4465                 :    3347842 :           (match_operand:VF_AVX512 2 "register_operand" "0,v")
    4466                 :         75 :           (neg:VF_AVX512
    4467                 :    3347842 :             (match_operand:VF_AVX512 3 "register_operand" "v,0"))))]
    4468                 :         96 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4469                 :         44 :   "@
    4470                 :    1325808 :    vfnmsub132<ssemodesuffix>\t{%1<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %1<avx512bcst>}
    4471                 :    1325808 :    vfnmsub231<ssemodesuffix>\t{%1<avx512bcst>, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %1<avx512bcst>}"
    4472                 :    1325808 :   [(set_attr "type" "ssemuladd")
    4473                 :         48 :    (set_attr "mode" "<MODE>")])
    4474                 :          0 : 
    4475                 :    1107000 : (define_insn "*<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name>_bcst_3"
    4476                 :       2834 :   [(set (match_operand:VF_AVX512 0 "register_operand" "=v,v")
    4477                 :     358815 :         (fma:VF_AVX512
    4478                 :     355981 :           (neg:VF_AVX512
    4479                 :     645910 :             (match_operand:VF_AVX512 1 "register_operand" "0,v"))
    4480                 :       2874 :           (vec_duplicate:VF_AVX512
    4481                 :            :             (match_operand:<ssescalarmode> 2 "memory_operand" "m,m"))
    4482                 :       2834 :           (neg:VF_AVX512
    4483                 :       2834 :             (match_operand:VF_AVX512 3 "register_operand" "v,0"))))]
    4484                 :          4 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition>"
    4485                 :          0 :   "@
    4486                 :     257227 :    vfnmsub132<ssemodesuffix>\t{%2<avx512bcst>, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<avx512bcst>}
    4487                 :          0 :    vfnmsub231<ssemodesuffix>\t{%2<avx512bcst>, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<avx512bcst>}"
    4488                 :       2834 :   [(set_attr "type" "ssemuladd")
    4489                 :          0 :    (set_attr "mode" "<MODE>")])
    4490                 :          0 : 
    4491                 :     257267 : (define_insn "<avx512>_fnmsub_<mode>_mask<round_name>"
    4492                 :       2834 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4493                 :     254401 :         (vec_merge:VF_AVX512VL
    4494                 :     256111 :           (fma:VF_AVX512VL
    4495                 :     256111 :             (neg:VF_AVX512VL
    4496                 :     252056 :               (match_operand:VF_AVX512VL 1 "register_operand" "0,0"))
    4497                 :       4095 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4498                 :       2385 :             (neg:VF_AVX512VL
    4499                 :     253726 :               (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
    4500                 :       2381 :           (match_dup 1)
    4501                 :       2377 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4502                 :     252163 :   "TARGET_AVX512F && <round_mode512bit_condition>"
    4503                 :          4 :   "@
    4504                 :       2399 :    vfnmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4505                 :         20 :    vfnmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4506                 :         20 :   [(set_attr "type" "ssemuladd")
    4507                 :      18294 :    (set_attr "mode" "<MODE>")])
    4508                 :      15751 : 
    4509                 :      15167 : (define_insn "<avx512>_fnmsub_<mode>_mask3<round_name>"
    4510                 :      21325 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4511                 :         12 :         (vec_merge:VF_AVX512VL
    4512                 :         12 :           (fma:VF_AVX512VL
    4513                 :       2377 :             (neg:VF_AVX512VL
    4514                 :          0 :               (match_operand:VF_AVX512VL 1 "<round_nimm_predicate>" "%v"))
    4515                 :          0 :             (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4516                 :       2377 :             (neg:VF_AVX512VL
    4517                 :         13 :               (match_operand:VF_AVX512VL 3 "register_operand" "0")))
    4518                 :          0 :           (match_dup 3)
    4519                 :       2377 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4520                 :         20 :   "TARGET_AVX512F"
    4521                 :          2 :   "vfnmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4522                 :       2390 :   [(set_attr "type" "ssemuladd")
    4523                 :         40 :    (set_attr "mode" "<MODE>")])
    4524                 :       2613 : 
    4525                 :       2613 : ;; FMA parallel floating point multiply addsub and subadd operations.
    4526                 :            : 
    4527                 :        226 : ;; It would be possible to represent these without the UNSPEC as
    4528                 :       2165 : ;;
    4529                 :        200 : ;; (vec_merge
    4530                 :        318 : ;;   (fma op1 op2 op3)
    4531                 :        302 : ;;   (fma op1 op2 (neg op3))
    4532                 :        314 : ;;   (merge-const))
    4533                 :            : ;;
    4534                 :        302 : ;; But this doesn't seem useful in practice.
    4535                 :        302 : 
    4536                 :            : (define_expand "fmaddsub_<mode>"
    4537                 :        314 :   [(set (match_operand:VF 0 "register_operand")
    4538                 :        302 :         (unspec:VF
    4539                 :       2719 :           [(match_operand:VF 1 "nonimmediate_operand")
    4540                 :        302 :            (match_operand:VF 2 "nonimmediate_operand")
    4541                 :        302 :            (match_operand:VF 3 "nonimmediate_operand")]
    4542                 :        302 :           UNSPEC_FMADDSUB))]
    4543                 :        302 :   "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    4544                 :        342 : 
    4545                 :            : (define_expand "<avx512>_fmaddsub_<mode>_maskz<round_expand_name>"
    4546                 :        302 :   [(match_operand:VF_AVX512VL 0 "register_operand")
    4547                 :        315 :    (match_operand:VF_AVX512VL 1 "<round_expand_nimm_predicate>")
    4548                 :        302 :    (match_operand:VF_AVX512VL 2 "<round_expand_nimm_predicate>")
    4549                 :        302 :    (match_operand:VF_AVX512VL 3 "<round_expand_nimm_predicate>")
    4550                 :        302 :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    4551                 :        302 :   "TARGET_AVX512F"
    4552                 :        315 : {
    4553                 :        184 :   emit_insn (gen_fma_fmaddsub_<mode>_maskz_1<round_expand_name> (
    4554                 :        136 :     operands[0], operands[1], operands[2], operands[3],
    4555                 :        136 :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4556                 :        320 :   DONE;
    4557                 :            : })
    4558                 :            : 
    4559                 :            : (define_insn "*fma_fmaddsub_<mode>"
    4560                 :            :   [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x")
    4561                 :          0 :         (unspec:VF_128_256
    4562                 :          0 :           [(match_operand:VF_128_256 1 "nonimmediate_operand" "%0,0,v,x,x")
    4563                 :          0 :            (match_operand:VF_128_256 2 "nonimmediate_operand" "vm,v,vm,x,m")
    4564                 :          0 :            (match_operand:VF_128_256 3 "nonimmediate_operand" "v,vm,0,xm,x")]
    4565                 :          0 :           UNSPEC_FMADDSUB))]
    4566                 :        416 :   "TARGET_FMA || TARGET_FMA4"
    4567                 :         12 :   "@
    4568                 :          0 :    vfmaddsub132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    4569                 :          0 :    vfmaddsub213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4570                 :          0 :    vfmaddsub231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    4571                 :          0 :    vfmaddsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4572                 :            :    vfmaddsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4573                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4574                 :            :    (set_attr "type" "ssemuladd")
    4575                 :            :    (set_attr "mode" "<MODE>")])
    4576                 :            : 
    4577                 :          0 : (define_insn "<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>"
    4578                 :            :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4579                 :            :         (unspec:VF_SF_AVX512VL
    4580                 :            :           [(match_operand:VF_SF_AVX512VL 1 "<round_nimm_predicate>" "%0,0,v")
    4581                 :            :            (match_operand:VF_SF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4582                 :          0 :            (match_operand:VF_SF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0")]
    4583                 :         88 :           UNSPEC_FMADDSUB))]
    4584                 :         26 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4585                 :         80 :   "@
    4586                 :            :    vfmaddsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4587                 :            :    vfmaddsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4588                 :         16 :    vfmaddsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4589                 :        392 :   [(set_attr "type" "ssemuladd")
    4590                 :        372 :    (set_attr "mode" "<MODE>")])
    4591                 :        314 : 
    4592                 :        314 : (define_insn "<avx512>_fmaddsub_<mode>_mask<round_name>"
    4593                 :        314 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4594                 :        320 :         (vec_merge:VF_AVX512VL
    4595                 :        404 :           (unspec:VF_AVX512VL
    4596                 :        768 :             [(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
    4597                 :        698 :              (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4598                 :        266 :              (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")]
    4599                 :        113 :             UNSPEC_FMADDSUB)
    4600                 :        763 :           (match_dup 1)
    4601                 :        124 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4602                 :        393 :   "TARGET_AVX512F"
    4603                 :        429 :   "@
    4604                 :         45 :    vfmaddsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4605                 :        349 :    vfmaddsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4606                 :        364 :   [(set_attr "type" "ssemuladd")
    4607                 :          0 :    (set_attr "mode" "<MODE>")])
    4608                 :            : 
    4609                 :            : (define_insn "<avx512>_fmaddsub_<mode>_mask3<round_name>"
    4610                 :            :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4611                 :            :         (vec_merge:VF_AVX512VL
    4612                 :         40 :           (unspec:VF_AVX512VL
    4613                 :            :             [(match_operand:VF_AVX512VL 1 "register_operand" "v")
    4614                 :            :              (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4615                 :            :              (match_operand:VF_AVX512VL 3 "register_operand" "0")]
    4616                 :            :             UNSPEC_FMADDSUB)
    4617                 :            :           (match_dup 3)
    4618                 :            :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4619                 :         20 :   "TARGET_AVX512F"
    4620                 :          0 :   "vfmaddsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4621                 :            :   [(set_attr "type" "ssemuladd")
    4622                 :          0 :    (set_attr "mode" "<MODE>")])
    4623                 :        390 : 
    4624                 :        390 : (define_insn "*fma_fmsubadd_<mode>"
    4625                 :            :   [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x")
    4626                 :        288 :         (unspec:VF_128_256
    4627                 :        288 :           [(match_operand:VF_128_256   1 "nonimmediate_operand" "%0,0,v,x,x")
    4628                 :        472 :            (match_operand:VF_128_256   2 "nonimmediate_operand" "vm,v,vm,x,m")
    4629                 :            :            (neg:VF_128_256
    4630                 :            :              (match_operand:VF_128_256 3 "nonimmediate_operand" "v,vm,0,xm,x"))]
    4631                 :            :           UNSPEC_FMADDSUB))]
    4632                 :        100 :   "TARGET_FMA || TARGET_FMA4"
    4633                 :         12 :   "@
    4634                 :          0 :    vfmsubadd132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    4635                 :          0 :    vfmsubadd213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4636                 :          0 :    vfmsubadd231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    4637                 :         13 :    vfmsubadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    4638                 :            :    vfmsubadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4639                 :            :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    4640                 :            :    (set_attr "type" "ssemuladd")
    4641                 :            :    (set_attr "mode" "<MODE>")])
    4642                 :         13 : 
    4643                 :            : (define_insn "<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>"
    4644                 :            :   [(set (match_operand:VF_SF_AVX512VL 0 "register_operand" "=v,v,v")
    4645                 :         40 :         (unspec:VF_SF_AVX512VL
    4646                 :            :           [(match_operand:VF_SF_AVX512VL   1 "<round_nimm_predicate>" "%0,0,v")
    4647                 :            :            (match_operand:VF_SF_AVX512VL   2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    4648                 :            :            (neg:VF_SF_AVX512VL
    4649                 :            :              (match_operand:VF_SF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0"))]
    4650                 :            :           UNSPEC_FMADDSUB))]
    4651                 :         43 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode512bit_condition>"
    4652                 :         24 :   "@
    4653                 :            :    vfmsubadd132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    4654                 :            :    vfmsubadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    4655                 :         12 :    vfmsubadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    4656                 :         24 :   [(set_attr "type" "ssemuladd")
    4657                 :         36 :    (set_attr "mode" "<MODE>")])
    4658                 :         44 : 
    4659                 :         44 : (define_insn "<avx512>_fmsubadd_<mode>_mask<round_name>"
    4660                 :         44 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v,v")
    4661                 :            :         (vec_merge:VF_AVX512VL
    4662                 :        238 :           (unspec:VF_AVX512VL
    4663                 :      11612 :             [(match_operand:VF_AVX512VL 1 "register_operand" "0,0")
    4664                 :      11374 :              (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    4665                 :       1242 :              (neg:VF_AVX512VL
    4666                 :       5454 :                (match_operand:VF_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))]
    4667                 :        263 :             UNSPEC_FMADDSUB)
    4668                 :       5136 :           (match_dup 1)
    4669                 :       5216 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    4670                 :        215 :   "TARGET_AVX512F"
    4671                 :          0 :   "@
    4672                 :        244 :    vfmsubadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    4673                 :        139 :    vfmsubadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    4674                 :         24 :   [(set_attr "type" "ssemuladd")
    4675                 :         40 :    (set_attr "mode" "<MODE>")])
    4676                 :         40 : 
    4677                 :       1004 : (define_insn "<avx512>_fmsubadd_<mode>_mask3<round_name>"
    4678                 :       1004 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    4679                 :       1004 :         (vec_merge:VF_AVX512VL
    4680                 :       1004 :           (unspec:VF_AVX512VL
    4681                 :            :             [(match_operand:VF_AVX512VL 1 "register_operand" "v")
    4682                 :        987 :              (match_operand:VF_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    4683                 :            :              (neg:VF_AVX512VL
    4684                 :         60 :                (match_operand:VF_AVX512VL 3 "register_operand" "0"))]
    4685                 :         60 :             UNSPEC_FMADDSUB)
    4686                 :         60 :           (match_dup 3)
    4687                 :         12 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    4688                 :         24 :   "TARGET_AVX512F"
    4689                 :          0 :   "vfmsubadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    4690                 :            :   [(set_attr "type" "ssemuladd")
    4691                 :          0 :    (set_attr "mode" "<MODE>")])
    4692                 :        172 : 
    4693                 :        172 : ;; FMA3 floating point scalar intrinsics. These merge result with
    4694                 :            : ;; high-order elements from the destination register.
    4695                 :        134 : 
    4696                 :        134 : (define_expand "fmai_vmfmadd_<mode><round_name>"
    4697                 :        148 :   [(set (match_operand:VF_128 0 "register_operand")
    4698                 :            :         (vec_merge:VF_128
    4699                 :            :           (fma:VF_128
    4700                 :            :             (match_operand:VF_128 1 "register_operand")
    4701                 :            :             (match_operand:VF_128 2 "<round_nimm_scalar_predicate>")
    4702                 :          0 :             (match_operand:VF_128 3 "<round_nimm_scalar_predicate>"))
    4703                 :            :           (match_dup 1)
    4704                 :            :           (const_int 1)))]
    4705                 :            :   "TARGET_FMA")
    4706                 :            : 
    4707                 :            : (define_expand "fmai_vmfmsub_<mode><round_name>"
    4708                 :         12 :   [(set (match_operand:VF_128 0 "register_operand")
    4709                 :            :         (vec_merge:VF_128
    4710                 :            :           (fma:VF_128
    4711                 :            :             (match_operand:VF_128 1 "register_operand")
    4712                 :          0 :             (match_operand:VF_128 2 "<round_nimm_scalar_predicate>")
    4713                 :         12 :             (neg:VF_128
    4714                 :            :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>")))
    4715                 :            :           (match_dup 1)
    4716                 :            :           (const_int 1)))]
    4717                 :          0 :   "TARGET_FMA")
    4718                 :            : 
    4719                 :            : (define_expand "fmai_vmfnmadd_<mode><round_name>"
    4720                 :            :   [(set (match_operand:VF_128 0 "register_operand")
    4721                 :            :         (vec_merge:VF_128
    4722                 :            :           (fma:VF_128
    4723                 :            :             (neg:VF_128
    4724                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>"))
    4725                 :            :             (match_operand:VF_128 1 "register_operand")
    4726                 :          0 :             (match_operand:VF_128 3 "<round_nimm_scalar_predicate>"))
    4727                 :          0 :           (match_dup 1)
    4728                 :            :           (const_int 1)))]
    4729                 :            :   "TARGET_FMA")
    4730                 :            : 
    4731                 :            : (define_expand "fmai_vmfnmsub_<mode><round_name>"
    4732                 :          0 :   [(set (match_operand:VF_128 0 "register_operand")
    4733                 :            :         (vec_merge:VF_128
    4734                 :            :           (fma:VF_128
    4735                 :            :             (neg:VF_128
    4736                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>"))
    4737                 :            :             (match_operand:VF_128 1 "register_operand")
    4738                 :            :             (neg:VF_128
    4739                 :            :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>")))
    4740                 :            :           (match_dup 1)
    4741                 :            :           (const_int 1)))]
    4742                 :            :   "TARGET_FMA")
    4743                 :          0 : 
    4744                 :            : (define_insn "*fmai_fmadd_<mode>"
    4745                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4746                 :            :         (vec_merge:VF_128
    4747                 :            :           (fma:VF_128
    4748                 :          0 :             (match_operand:VF_128 1 "register_operand" "0,0")
    4749                 :         12 :             (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>, v")
    4750                 :            :             (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4751                 :            :           (match_dup 1)
    4752                 :            :           (const_int 1)))]
    4753                 :        260 :   "TARGET_FMA || TARGET_AVX512F"
    4754                 :         13 :   "@
    4755                 :            :    vfmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, %<iptr>2<round_op4>}
    4756                 :            :    vfmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, %<iptr>3<round_op4>}"
    4757                 :        251 :   [(set_attr "type" "ssemuladd")
    4758                 :        251 :    (set_attr "mode" "<MODE>")])
    4759                 :        264 : 
    4760                 :            : (define_insn "*fmai_fmsub_<mode>"
    4761                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4762                 :            :         (vec_merge:VF_128
    4763                 :            :           (fma:VF_128
    4764                 :         13 :             (match_operand:VF_128   1 "register_operand" "0,0")
    4765                 :            :             (match_operand:VF_128   2 "<round_nimm_scalar_predicate>" "<round_constraint>,v")
    4766                 :            :             (neg:VF_128
    4767                 :          0 :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    4768                 :            :           (match_dup 1)
    4769                 :            :           (const_int 1)))]
    4770                 :         38 :   "TARGET_FMA || TARGET_AVX512F"
    4771                 :          1 :   "@
    4772                 :            :    vfmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, %<iptr>2<round_op4>}
    4773                 :          0 :    vfmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, %<iptr>3<round_op4>}"
    4774                 :         54 :   [(set_attr "type" "ssemuladd")
    4775                 :         66 :    (set_attr "mode" "<MODE>")])
    4776                 :         54 : 
    4777                 :            : (define_insn "*fmai_fnmadd_<mode><round_name>"
    4778                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4779                 :            :         (vec_merge:VF_128
    4780                 :         12 :           (fma:VF_128
    4781                 :            :             (neg:VF_128
    4782                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    4783                 :            :             (match_operand:VF_128   1 "register_operand" "0,0")
    4784                 :            :             (match_operand:VF_128   3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4785                 :            :           (match_dup 1)
    4786                 :            :           (const_int 1)))]
    4787                 :         28 :   "TARGET_FMA || TARGET_AVX512F"
    4788                 :          1 :   "@
    4789                 :            :    vfnmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, %<iptr>2<round_op4>}
    4790                 :         12 :    vfnmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, %<iptr>3<round_op4>}"
    4791                 :         62 :   [(set_attr "type" "ssemuladd")
    4792                 :         49 :    (set_attr "mode" "<MODE>")])
    4793                 :         49 : 
    4794                 :            : (define_insn "*fmai_fnmsub_<mode><round_name>"
    4795                 :         12 :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4796                 :         13 :         (vec_merge:VF_128
    4797                 :            :           (fma:VF_128
    4798                 :            :             (neg:VF_128
    4799                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    4800                 :            :             (match_operand:VF_128   1 "register_operand" "0,0")
    4801                 :            :             (neg:VF_128
    4802                 :            :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    4803                 :            :           (match_dup 1)
    4804                 :            :           (const_int 1)))]
    4805                 :         14 :   "TARGET_FMA || TARGET_AVX512F"
    4806                 :          1 :   "@
    4807                 :         12 :    vfnmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, %<iptr>2<round_op4>}
    4808                 :          0 :    vfnmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, %<iptr>3<round_op4>}"
    4809                 :         42 :   [(set_attr "type" "ssemuladd")
    4810                 :         42 :    (set_attr "mode" "<MODE>")])
    4811                 :         42 : 
    4812                 :         12 : (define_insn "avx512f_vmfmadd_<mode>_mask<round_name>"
    4813                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4814                 :          0 :         (vec_merge:VF_128
    4815                 :            :           (vec_merge:VF_128
    4816                 :            :             (fma:VF_128
    4817                 :            :               (match_operand:VF_128 1 "register_operand" "0,0")
    4818                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v")
    4819                 :            :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4820                 :            :             (match_dup 1)
    4821                 :            :             (match_operand:QI 4 "register_operand" "Yk,Yk"))
    4822                 :            :           (match_dup 1)
    4823                 :          0 :           (const_int 1)))]
    4824                 :         76 :   "TARGET_AVX512F"
    4825                 :            :   "@
    4826                 :            :    vfmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
    4827                 :            :    vfmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
    4828                 :         24 :   [(set_attr "type" "ssemuladd")
    4829                 :         24 :    (set_attr "mode" "<MODE>")])
    4830                 :          2 : 
    4831                 :         34 : (define_insn "avx512f_vmfmadd_<mode>_mask3<round_name>"
    4832                 :         22 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    4833                 :            :         (vec_merge:VF_128
    4834                 :         22 :           (vec_merge:VF_128
    4835                 :         22 :             (fma:VF_128
    4836                 :         34 :               (match_operand:VF_128 1 "<round_nimm_scalar_predicate>" "%v")
    4837                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>")
    4838                 :            :               (match_operand:VF_128 3 "register_operand" "0"))
    4839                 :          0 :             (match_dup 3)
    4840                 :            :             (match_operand:QI 4 "register_operand" "Yk"))
    4841                 :            :           (match_dup 3)
    4842                 :            :           (const_int 1)))]
    4843                 :         22 :   "TARGET_AVX512F"
    4844                 :          0 :   "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    4845                 :            :   [(set_attr "type" "ssemuladd")
    4846                 :            :    (set_attr "mode" "<MODE>")])
    4847                 :         81 : 
    4848                 :         81 : (define_expand "avx512f_vmfmadd_<mode>_maskz<round_expand_name>"
    4849                 :            :   [(match_operand:VF_128 0 "register_operand")
    4850                 :         60 :    (match_operand:VF_128 1 "<round_expand_nimm_predicate>")
    4851                 :         60 :    (match_operand:VF_128 2 "<round_expand_nimm_predicate>")
    4852                 :            :    (match_operand:VF_128 3 "<round_expand_nimm_predicate>")
    4853                 :         58 :    (match_operand:QI 4 "register_operand")]
    4854                 :         58 :   "TARGET_AVX512F"
    4855                 :        200 : {
    4856                 :        236 :   emit_insn (gen_avx512f_vmfmadd_<mode>_maskz_1<round_expand_name> (
    4857                 :         36 :     operands[0], operands[1], operands[2], operands[3],
    4858                 :         36 :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    4859                 :        200 :   DONE;
    4860                 :            : })
    4861                 :          0 : 
    4862                 :          0 : (define_insn "avx512f_vmfmadd_<mode>_maskz_1<round_name>"
    4863                 :          0 :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4864                 :          0 :         (vec_merge:VF_128
    4865                 :          0 :           (vec_merge:VF_128
    4866                 :          0 :             (fma:VF_128
    4867                 :          0 :               (match_operand:VF_128 1 "register_operand" "0,0")
    4868                 :          0 :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v")
    4869                 :          0 :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4870                 :            :             (match_operand:VF_128 4 "const0_operand" "C,C")
    4871                 :            :             (match_operand:QI 5 "register_operand" "Yk,Yk"))
    4872                 :            :           (match_dup 1)
    4873                 :            :           (const_int 1)))]
    4874                 :         52 :   "TARGET_AVX512F"
    4875                 :          1 :   "@
    4876                 :            :    vfmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
    4877                 :            :    vfmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
    4878                 :         41 :   [(set_attr "type" "ssemuladd")
    4879                 :         53 :    (set_attr "mode" "<MODE>")])
    4880                 :         41 : 
    4881                 :            : (define_insn "*avx512f_vmfmsub_<mode>_mask<round_name>"
    4882                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4883                 :            :         (vec_merge:VF_128
    4884                 :            :           (vec_merge:VF_128
    4885                 :            :             (fma:VF_128
    4886                 :        200 :               (match_operand:VF_128 1 "register_operand" "0,0")
    4887                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v")
    4888                 :            :               (neg:VF_128
    4889                 :            :                 (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    4890                 :            :             (match_dup 1)
    4891                 :            :             (match_operand:QI 4 "register_operand" "Yk,Yk"))
    4892                 :         36 :           (match_dup 1)
    4893                 :        200 :           (const_int 1)))]
    4894                 :        201 :   "TARGET_AVX512F"
    4895                 :        200 :   "@
    4896                 :        200 :    vfmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
    4897                 :        236 :    vfmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
    4898                 :        260 :   [(set_attr "type" "ssemuladd")
    4899                 :         60 :    (set_attr "mode" "<MODE>")])
    4900                 :        238 : 
    4901                 :        258 : (define_insn "avx512f_vmfmsub_<mode>_mask3<round_name>"
    4902                 :        222 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    4903                 :         36 :         (vec_merge:VF_128
    4904                 :         58 :           (vec_merge:VF_128
    4905                 :         58 :             (fma:VF_128
    4906                 :         22 :               (match_operand:VF_128 1 "<round_nimm_scalar_predicate>" "%v")
    4907                 :            :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>")
    4908                 :            :               (neg:VF_128
    4909                 :            :                 (match_operand:VF_128 3 "register_operand" "0")))
    4910                 :            :             (match_dup 3)
    4911                 :            :             (match_operand:QI 4 "register_operand" "Yk"))
    4912                 :            :           (match_dup 3)
    4913                 :            :           (const_int 1)))]
    4914                 :         22 :   "TARGET_AVX512F"
    4915                 :          0 :   "vfmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    4916                 :            :   [(set_attr "type" "ssemuladd")
    4917                 :          0 :    (set_attr "mode" "<MODE>")])
    4918                 :         46 : 
    4919                 :         46 : (define_insn "*avx512f_vmfmsub_<mode>_maskz_1<round_name>"
    4920                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4921                 :         25 :         (vec_merge:VF_128
    4922                 :         25 :           (vec_merge:VF_128
    4923                 :          0 :             (fma:VF_128
    4924                 :         23 :               (match_operand:VF_128 1 "register_operand" "0,0")
    4925                 :         23 :               (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v")
    4926                 :          0 :               (neg:VF_128
    4927                 :          1 :                 (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    4928                 :          1 :             (match_operand:VF_128 4 "const0_operand" "C,C")
    4929                 :          1 :             (match_operand:QI 5 "register_operand" "Yk,Yk"))
    4930                 :          0 :           (match_dup 1)
    4931                 :          0 :           (const_int 1)))]
    4932                 :          1 :   "TARGET_AVX512F"
    4933                 :          1 :   "@
    4934                 :            :    vfmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
    4935                 :            :    vfmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
    4936                 :          2 :   [(set_attr "type" "ssemuladd")
    4937                 :          2 :    (set_attr "mode" "<MODE>")])
    4938                 :          2 : 
    4939                 :            : (define_insn "*avx512f_vmfnmadd_<mode>_mask<round_name>"
    4940                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4941                 :            :         (vec_merge:VF_128
    4942                 :            :           (vec_merge:VF_128
    4943                 :            :             (fma:VF_128
    4944                 :            :               (neg:VF_128
    4945                 :            :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    4946                 :            :               (match_operand:VF_128 1 "register_operand" "0,0")
    4947                 :            :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4948                 :            :             (match_dup 1)
    4949                 :            :             (match_operand:QI 4 "register_operand" "Yk,Yk"))
    4950                 :            :           (match_dup 1)
    4951                 :            :           (const_int 1)))]
    4952                 :          2 :   "TARGET_AVX512F"
    4953                 :            :   "@
    4954                 :            :    vfnmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
    4955                 :            :    vfnmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
    4956                 :          2 :   [(set_attr "type" "ssemuladd")
    4957                 :          2 :    (set_attr "mode" "<MODE>")])
    4958                 :          1 : 
    4959                 :          1 : (define_insn "*avx512f_vmfnmadd_<mode>_mask3<round_name>"
    4960                 :          1 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    4961                 :            :         (vec_merge:VF_128
    4962                 :          1 :           (vec_merge:VF_128
    4963                 :          1 :             (fma:VF_128
    4964                 :          1 :               (neg:VF_128
    4965                 :            :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>"))
    4966                 :            :               (match_operand:VF_128 1 "<round_nimm_scalar_predicate>" "%v")
    4967                 :            :               (match_operand:VF_128 3 "register_operand" "0"))
    4968                 :            :             (match_dup 3)
    4969                 :            :             (match_operand:QI 4 "register_operand" "Yk"))
    4970                 :            :           (match_dup 3)
    4971                 :            :           (const_int 1)))]
    4972                 :          1 :   "TARGET_AVX512F"
    4973                 :          0 :   "vfnmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    4974                 :            :   [(set_attr "type" "ssemuladd")
    4975                 :            :    (set_attr "mode" "<MODE>")])
    4976                 :          7 : 
    4977                 :          7 : (define_insn "*avx512f_vmfnmadd_<mode>_maskz_1<round_name>"
    4978                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4979                 :          4 :         (vec_merge:VF_128
    4980                 :          4 :           (vec_merge:VF_128
    4981                 :            :             (fma:VF_128
    4982                 :          3 :               (neg:VF_128
    4983                 :          3 :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    4984                 :            :               (match_operand:VF_128 1 "register_operand" "0,0")
    4985                 :          2 :               (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>"))
    4986                 :          2 :             (match_operand:VF_128 4 "const0_operand" "C,C")
    4987                 :          2 :             (match_operand:QI 5 "register_operand" "Yk,Yk"))
    4988                 :            :           (match_dup 1)
    4989                 :            :           (const_int 1)))]
    4990                 :          2 :   "TARGET_AVX512F"
    4991                 :          1 :   "@
    4992                 :            :    vfnmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
    4993                 :            :    vfnmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
    4994                 :          3 :   [(set_attr "type" "ssemuladd")
    4995                 :          3 :    (set_attr "mode" "<MODE>")])
    4996                 :          3 : 
    4997                 :            : (define_insn "*avx512f_vmfnmsub_<mode>_mask<round_name>"
    4998                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    4999                 :            :         (vec_merge:VF_128
    5000                 :            :           (vec_merge:VF_128
    5001                 :            :             (fma:VF_128
    5002                 :            :               (neg:VF_128
    5003                 :            :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    5004                 :            :               (match_operand:VF_128 1 "register_operand" "0,0")
    5005                 :            :               (neg:VF_128
    5006                 :            :                 (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    5007                 :            :             (match_dup 1)
    5008                 :            :             (match_operand:QI 4 "register_operand" "Yk,Yk"))
    5009                 :            :           (match_dup 1)
    5010                 :            :           (const_int 1)))]
    5011                 :          1 :   "TARGET_AVX512F"
    5012                 :            :   "@
    5013                 :            :    vfnmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
    5014                 :            :    vfnmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
    5015                 :          2 :   [(set_attr "type" "ssemuladd")
    5016                 :          2 :    (set_attr "mode" "<MODE>")])
    5017                 :          1 : 
    5018                 :          1 : (define_insn "*avx512f_vmfnmsub_<mode>_mask3<round_name>"
    5019                 :          1 :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    5020                 :            :         (vec_merge:VF_128
    5021                 :          1 :           (vec_merge:VF_128
    5022                 :          1 :             (fma:VF_128
    5023                 :          1 :               (neg:VF_128
    5024                 :            :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>"))
    5025                 :            :               (match_operand:VF_128 1 "<round_nimm_scalar_predicate>" "%v")
    5026                 :            :               (neg:VF_128
    5027                 :            :                 (match_operand:VF_128 3 "register_operand" "0")))
    5028                 :            :             (match_dup 3)
    5029                 :            :             (match_operand:QI 4 "register_operand" "Yk"))
    5030                 :            :           (match_dup 3)
    5031                 :            :           (const_int 1)))]
    5032                 :          1 :   "TARGET_AVX512F"
    5033                 :          0 :   "vfnmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}"
    5034                 :            :   [(set_attr "type" "ssemuladd")
    5035                 :            :    (set_attr "mode" "<MODE>")])
    5036                 :          6 : 
    5037                 :          6 : (define_insn "*avx512f_vmfnmsub_<mode>_maskz_1<round_name>"
    5038                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v,v")
    5039                 :          3 :         (vec_merge:VF_128
    5040                 :          3 :           (vec_merge:VF_128
    5041                 :            :             (fma:VF_128
    5042                 :          2 :               (neg:VF_128
    5043                 :          2 :                 (match_operand:VF_128 2 "<round_nimm_scalar_predicate>" "<round_constraint>,v"))
    5044                 :            :               (match_operand:VF_128 1 "register_operand" "0,0")
    5045                 :          1 :               (neg:VF_128
    5046                 :          1 :                 (match_operand:VF_128 3 "<round_nimm_scalar_predicate>" "v,<round_constraint>")))
    5047                 :          1 :             (match_operand:VF_128 4 "const0_operand" "C,C")
    5048                 :            :             (match_operand:QI 5 "register_operand" "Yk,Yk"))
    5049                 :            :           (match_dup 1)
    5050                 :            :           (const_int 1)))]
    5051                 :          1 :   "TARGET_AVX512F"
    5052                 :          1 :   "@
    5053                 :            :    vfnmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
    5054                 :            :    vfnmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2, %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
    5055                 :          2 :   [(set_attr "type" "ssemuladd")
    5056                 :          2 :    (set_attr "mode" "<MODE>")])
    5057                 :          2 : 
    5058                 :            : ;; FMA4 floating point scalar intrinsics.  These write the
    5059                 :            : ;; entire destination register, with the high-order elements zeroed.
    5060                 :            : 
    5061                 :            : (define_expand "fma4i_vmfmadd_<mode>"
    5062                 :            :   [(set (match_operand:VF_128 0 "register_operand")
    5063                 :            :         (vec_merge:VF_128
    5064                 :            :           (fma:VF_128
    5065                 :            :             (match_operand:VF_128 1 "nonimmediate_operand")
    5066                 :            :             (match_operand:VF_128 2 "nonimmediate_operand")
    5067                 :            :             (match_operand:VF_128 3 "nonimmediate_operand"))
    5068                 :            :           (match_dup 4)
    5069                 :            :           (const_int 1)))]
    5070                 :            :   "TARGET_FMA4"
    5071                 :         72 :   "operands[4] = CONST0_RTX (<MODE>mode);")
    5072                 :            : 
    5073                 :            : (define_insn "*fma4i_vmfmadd_<mode>"
    5074                 :         72 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    5075                 :         72 :         (vec_merge:VF_128
    5076                 :         72 :           (fma:VF_128
    5077                 :         72 :             (match_operand:VF_128 1 "nonimmediate_operand" "%x,x")
    5078                 :         72 :             (match_operand:VF_128 2 "nonimmediate_operand" " x,m")
    5079                 :         72 :             (match_operand:VF_128 3 "nonimmediate_operand" "xm,x"))
    5080                 :         72 :           (match_operand:VF_128 4 "const0_operand")
    5081                 :         72 :           (const_int 1)))]
    5082                 :        154 :   "TARGET_FMA4"
    5083                 :         72 :   "vfmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}"
    5084                 :            :   [(set_attr "type" "ssemuladd")
    5085                 :         72 :    (set_attr "mode" "<MODE>")])
    5086                 :         94 : 
    5087                 :         94 : (define_insn "*fma4i_vmfmsub_<mode>"
    5088                 :         94 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    5089                 :            :         (vec_merge:VF_128
    5090                 :            :           (fma:VF_128
    5091                 :            :             (match_operand:VF_128 1 "nonimmediate_operand" "%x,x")
    5092                 :            :             (match_operand:VF_128 2 "nonimmediate_operand" " x,m")
    5093                 :         72 :             (neg:VF_128
    5094                 :         72 :               (match_operand:VF_128 3 "nonimmediate_operand" "xm,x")))
    5095                 :         72 :           (match_operand:VF_128 4 "const0_operand")
    5096                 :            :           (const_int 1)))]
    5097                 :         15 :   "TARGET_FMA4"
    5098                 :          0 :   "vfmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}"
    5099                 :            :   [(set_attr "type" "ssemuladd")
    5100                 :         36 :    (set_attr "mode" "<MODE>")])
    5101                 :        144 : 
    5102                 :         15 : (define_insn "*fma4i_vmfnmadd_<mode>"
    5103                 :        144 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    5104                 :        129 :         (vec_merge:VF_128
    5105                 :          0 :           (fma:VF_128
    5106                 :        129 :             (neg:VF_128
    5107                 :         36 :               (match_operand:VF_128 1 "nonimmediate_operand" "%x,x"))
    5108                 :         36 :             (match_operand:VF_128   2 "nonimmediate_operand" " x,m")
    5109                 :         36 :             (match_operand:VF_128   3 "nonimmediate_operand" "xm,x"))
    5110                 :         36 :           (match_operand:VF_128 4 "const0_operand")
    5111                 :         36 :           (const_int 1)))]
    5112                 :         46 :   "TARGET_FMA4"
    5113                 :         36 :   "vfnmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}"
    5114                 :            :   [(set_attr "type" "ssemuladd")
    5115                 :            :    (set_attr "mode" "<MODE>")])
    5116                 :         10 : 
    5117                 :         10 : (define_insn "*fma4i_vmfnmsub_<mode>"
    5118                 :         10 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    5119                 :            :         (vec_merge:VF_128
    5120                 :            :           (fma:VF_128
    5121                 :            :             (neg:VF_128
    5122                 :            :               (match_operand:VF_128 1 "nonimmediate_operand" "%x,x"))
    5123                 :            :             (match_operand:VF_128   2 "nonimmediate_operand" " x,m")
    5124                 :            :             (neg:VF_128
    5125                 :            :               (match_operand:VF_128   3 "nonimmediate_operand" "xm,x")))
    5126                 :            :           (match_operand:VF_128 4 "const0_operand")
    5127                 :            :           (const_int 1)))]
    5128                 :          5 :   "TARGET_FMA4"
    5129                 :          0 :   "vfnmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}"
    5130                 :            :   [(set_attr "type" "ssemuladd")
    5131                 :            :    (set_attr "mode" "<MODE>")])
    5132                 :          5 : 
    5133                 :          5 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5134                 :          5 : ;;
    5135                 :            : ;; Parallel single-precision floating point conversion operations
    5136                 :            : ;;
    5137                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5138                 :            : 
    5139                 :            : (define_insn_and_split "sse_cvtpi2ps"
    5140                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x,Yv")
    5141                 :            :         (vec_merge:V4SF
    5142                 :            :           (vec_duplicate:V4SF
    5143                 :            :             (float:V2SF (match_operand:V2SI 2 "register_mmxmem_operand" "ym,x,Yv")))
    5144                 :            :           (match_operand:V4SF 1 "register_operand" "0,0,Yv")
    5145                 :            :           (const_int 3)))
    5146                 :            :    (clobber (match_scratch:V4SF 3 "=X,x,Yv"))]
    5147                 :        297 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5148                 :        707 :   "@
    5149                 :         70 :    cvtpi2ps\t{%2, %0|%0, %2}
    5150                 :         70 :    #
    5151                 :      23362 :    #"
    5152                 :        258 :   "TARGET_SSE2 && reload_completed
    5153                 :      76160 :    && SSE_REG_P (operands[2])"
    5154                 :        182 :   [(const_int 0)]
    5155                 :        258 : {
    5156                 :      16534 :   rtx op2 = lowpart_subreg (V4SImode, operands[2],
    5157                 :        129 :                             GET_MODE (operands[2]));
    5158                 :      10544 :   /* Generate SSE2 cvtdq2ps.  */
    5159                 :        133 :   emit_insn (gen_floatv4siv4sf2 (operands[3], op2));
    5160                 :            : 
    5161                 :          0 :   /* Merge operands[3] with operands[0].  */
    5162                 :        129 :   rtx mask, op1;
    5163                 :     373210 :   if (TARGET_AVX)
    5164                 :          0 :     {
    5165                 :     373177 :       mask = gen_rtx_PARALLEL (VOIDmode,
    5166                 :     373081 :                                gen_rtvec (4, GEN_INT (0), GEN_INT (1),
    5167                 :     373081 :                                           GEN_INT (6), GEN_INT (7)));
    5168                 :     373177 :       op1 = gen_rtx_VEC_CONCAT (V8SFmode, operands[3], operands[1]);
    5169                 :     373177 :       op2 = gen_rtx_VEC_SELECT (V4SFmode, op1, mask);
    5170                 :         96 :       emit_insn (gen_rtx_SET (operands[0], op2));
    5171                 :          0 :     }
    5172                 :     284905 :   else
    5173                 :          0 :     {
    5174                 :          0 :       /* NB: SSE can only concatenate OP0 and OP3 to OP0.  */
    5175                 :         33 :       mask = gen_rtx_PARALLEL (VOIDmode,
    5176                 :       2588 :                                gen_rtvec (4, GEN_INT (2), GEN_INT (3),
    5177                 :            :                                           GEN_INT (4), GEN_INT (5)));
    5178                 :        392 :       op1 = gen_rtx_VEC_CONCAT (V8SFmode, operands[0], operands[3]);
    5179                 :        392 :       op2 = gen_rtx_VEC_SELECT (V4SFmode, op1, mask);
    5180                 :        222 :       emit_insn (gen_rtx_SET (operands[0], op2));
    5181                 :        548 : 
    5182                 :            :       /* Swap bits 0:63 with bits 64:127.  */
    5183                 :         33 :       mask = gen_rtx_PARALLEL (VOIDmode,
    5184                 :            :                                gen_rtvec (4, GEN_INT (2), GEN_INT (3),
    5185                 :            :                                           GEN_INT (0), GEN_INT (1)));
    5186                 :         66 :       rtx dest = lowpart_subreg (V4SImode, operands[0],
    5187                 :         33 :                                  GET_MODE (operands[0]));
    5188                 :         33 :       op1 = gen_rtx_VEC_SELECT (V4SImode, dest, mask);
    5189                 :         33 :       emit_insn (gen_rtx_SET (dest, op1));
    5190                 :            :     }
    5191                 :        129 :   DONE;
    5192                 :            : }
    5193                 :            :   [(set_attr "mmx_isa" "native,sse_noavx,avx")
    5194                 :            :    (set_attr "type" "ssecvt")
    5195                 :            :    (set_attr "mode" "V4SF")])
    5196                 :            : 
    5197                 :            : (define_insn "sse_cvtps2pi"
    5198                 :            :   [(set (match_operand:V2SI 0 "register_operand" "=y,Yv")
    5199                 :            :         (vec_select:V2SI
    5200                 :            :           (unspec:V4SI [(match_operand:V4SF 1 "register_mmxmem_operand" "xm,YvBm")]
    5201                 :            :                        UNSPEC_FIX_NOTRUNC)
    5202                 :            :           (parallel [(const_int 0) (const_int 1)])))]
    5203                 :        142 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5204                 :         33 :   "@
    5205                 :            :    cvtps2pi\t{%1, %0|%0, %q1}
    5206                 :          0 :    %vcvtps2dq\t{%1, %0|%0, %1}"
    5207                 :         51 :   [(set_attr "isa" "*,sse2")
    5208                 :         51 :    (set_attr "mmx_isa" "native,*")
    5209                 :         49 :    (set_attr "type" "ssecvt")
    5210                 :         47 :    (set_attr "unit" "mmx,*")
    5211                 :          4 :    (set_attr "mode" "DI")])
    5212                 :         47 : 
    5213                 :         47 : (define_insn "sse_cvttps2pi"
    5214                 :         47 :   [(set (match_operand:V2SI 0 "register_operand" "=y,Yv")
    5215                 :         47 :         (vec_select:V2SI
    5216                 :            :           (fix:V4SI (match_operand:V4SF 1 "register_mmxmem_operand" "xm,YvBm"))
    5217                 :            :           (parallel [(const_int 0) (const_int 1)])))]
    5218                 :         46 :   "(TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE"
    5219                 :          1 :   "@
    5220                 :            :    cvttps2pi\t{%1, %0|%0, %q1}
    5221                 :            :    %vcvttps2dq\t{%1, %0|%0, %1}"
    5222                 :            :   [(set_attr "isa" "*,sse2")
    5223                 :            :    (set_attr "mmx_isa" "native,*")
    5224                 :            :    (set_attr "type" "ssecvt")
    5225                 :            :    (set_attr "unit" "mmx,*")
    5226                 :            :    (set_attr "prefix_rep" "0")
    5227                 :            :    (set_attr "mode" "SF")])
    5228                 :      28822 : 
    5229                 :            : (define_insn "sse_cvtsi2ss<rex64namesuffix><round_name>"
    5230                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x,v")
    5231                 :            :         (vec_merge:V4SF
    5232                 :      28822 :           (vec_duplicate:V4SF
    5233                 :      28822 :             (float:SF (match_operand:SWI48 2 "<round_nimm_scalar_predicate>" "r,m,<round_constraint3>")))
    5234                 :      28822 :           (match_operand:V4SF 1 "register_operand" "0,0,v")
    5235                 :      28822 :           (const_int 1)))]
    5236                 :      10540 :   "TARGET_SSE"
    5237                 :          0 :   "@
    5238                 :      28822 :    cvtsi2ss<rex64suffix>\t{%2, %0|%0, %2}
    5239                 :      28822 :    cvtsi2ss<rex64suffix>\t{%2, %0|%0, %2}
    5240                 :       5607 :    vcvtsi2ss<rex64suffix>\t{%2, <round_op3>%1, %0|%0, %1<round_op3>, %2}"
    5241                 :       5607 :   [(set_attr "isa" "noavx,noavx,avx")
    5242                 :      20260 :    (set_attr "type" "sseicvt")
    5243                 :      20260 :    (set_attr "athlon_decode" "vector,double,*")
    5244                 :      20260 :    (set_attr "amdfam10_decode" "vector,double,*")
    5245                 :            :    (set_attr "bdver1_decode" "double,direct,*")
    5246                 :          0 :    (set_attr "btver2_decode" "double,double,double")
    5247                 :          0 :    (set_attr "znver1_decode" "double,double,double")
    5248                 :          0 :    (set (attr "length_vex")
    5249                 :          0 :         (if_then_else
    5250                 :      11611 :           (and (match_test "<MODE>mode == DImode")
    5251                 :            :                (eq_attr "alternative" "2"))
    5252                 :      93419 :           (const_string "4")
    5253                 :            :           (const_string "*")))
    5254                 :            :    (set (attr "prefix_rex")
    5255                 :            :         (if_then_else
    5256                 :     119431 :           (and (match_test "<MODE>mode == DImode")
    5257                 :            :                (eq_attr "alternative" "0,1"))
    5258                 :            :           (const_string "1")
    5259                 :            :           (const_string "*")))
    5260                 :            :    (set_attr "prefix" "orig,orig,maybe_evex")
    5261                 :            :    (set_attr "mode" "SF")])
    5262                 :            : 
    5263                 :            : (define_insn "sse_cvtss2si<rex64namesuffix><round_name>"
    5264                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5265                 :            :         (unspec:SWI48
    5266                 :            :           [(vec_select:SF
    5267                 :            :              (match_operand:V4SF 1 "<round_nimm_scalar_predicate>" "v,<round_constraint2>")
    5268                 :            :              (parallel [(const_int 0)]))]
    5269                 :            :           UNSPEC_FIX_NOTRUNC))]
    5270                 :         60 :   "TARGET_SSE"
    5271                 :          0 :   "%vcvtss2si<rex64suffix>\t{<round_op2>%1, %0|%0, %k1<round_op2>}"
    5272                 :            :   [(set_attr "type" "sseicvt")
    5273                 :            :    (set_attr "athlon_decode" "double,vector")
    5274                 :         71 :    (set_attr "bdver1_decode" "double,double")
    5275                 :         41 :    (set_attr "prefix_rep" "1")
    5276                 :            :    (set_attr "prefix" "maybe_vex")
    5277                 :            :    (set_attr "mode" "<MODE>")])
    5278                 :            : 
    5279                 :            : (define_insn "sse_cvtss2si<rex64namesuffix>_2"
    5280                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5281                 :            :         (unspec:SWI48 [(match_operand:SF 1 "nonimmediate_operand" "v,m")]
    5282                 :            :                       UNSPEC_FIX_NOTRUNC))]
    5283                 :         11 :   "TARGET_SSE"
    5284                 :          0 :   "%vcvtss2si<rex64suffix>\t{%1, %0|%0, %1}"
    5285                 :            :   [(set_attr "type" "sseicvt")
    5286                 :            :    (set_attr "athlon_decode" "double,vector")
    5287                 :          7 :    (set_attr "amdfam10_decode" "double,double")
    5288                 :          7 :    (set_attr "bdver1_decode" "double,double")
    5289                 :            :    (set_attr "prefix_rep" "1")
    5290                 :            :    (set_attr "prefix" "maybe_vex")
    5291                 :            :    (set_attr "mode" "<MODE>")])
    5292                 :            : 
    5293                 :            : (define_insn "sse_cvttss2si<rex64namesuffix><round_saeonly_name>"
    5294                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5295                 :            :         (fix:SWI48
    5296                 :            :           (vec_select:SF
    5297                 :            :             (match_operand:V4SF 1 "<round_saeonly_nimm_scalar_predicate>" "v,<round_saeonly_constraint>")
    5298                 :            :             (parallel [(const_int 0)]))))]
    5299                 :         66 :   "TARGET_SSE"
    5300                 :          0 :   "%vcvttss2si<rex64suffix>\t{<round_saeonly_op2>%1, %0|%0, %k1<round_saeonly_op2>}"
    5301                 :            :   [(set_attr "type" "sseicvt")
    5302                 :            :    (set_attr "athlon_decode" "double,vector")
    5303                 :         98 :    (set_attr "amdfam10_decode" "double,double")
    5304                 :         59 :    (set_attr "bdver1_decode" "double,double")
    5305                 :            :    (set_attr "prefix_rep" "1")
    5306                 :            :    (set_attr "prefix" "maybe_vex")
    5307                 :            :    (set_attr "mode" "<MODE>")])
    5308                 :            : 
    5309                 :            : (define_insn "cvtusi2<ssescalarmodesuffix>32<round_name>"
    5310                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    5311                 :            :         (vec_merge:VF_128
    5312                 :            :           (vec_duplicate:VF_128
    5313                 :            :             (unsigned_float:<ssescalarmode>
    5314                 :            :               (match_operand:SI 2 "<round_nimm_scalar_predicate>" "<round_constraint3>")))
    5315                 :            :           (match_operand:VF_128 1 "register_operand" "v")
    5316                 :            :           (const_int 1)))]
    5317                 :         20 :   "TARGET_AVX512F && <round_modev4sf_condition>"
    5318                 :          0 :   "vcvtusi2<ssescalarmodesuffix>{l}\t{%2, <round_op3>%1, %0|%0, %1<round_op3>, %2}"
    5319                 :            :   [(set_attr "type" "sseicvt")
    5320                 :            :    (set_attr "prefix" "evex")
    5321                 :         70 :    (set_attr "mode" "<ssescalarmode>")])
    5322                 :         70 : 
    5323                 :            : (define_insn "cvtusi2<ssescalarmodesuffix>64<round_name>"
    5324                 :            :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    5325                 :            :         (vec_merge:VF_128
    5326                 :            :           (vec_duplicate:VF_128
    5327                 :            :             (unsigned_float:<ssescalarmode>
    5328                 :            :               (match_operand:DI 2 "<round_nimm_scalar_predicate>" "<round_constraint3>")))
    5329                 :            :           (match_operand:VF_128 1 "register_operand" "v")
    5330                 :            :           (const_int 1)))]
    5331                 :            :   "TARGET_AVX512F && TARGET_64BIT"
    5332                 :          0 :   "vcvtusi2<ssescalarmodesuffix>{q}\t{%2, <round_op3>%1, %0|%0, %1<round_op3>, %2}"
    5333                 :            :   [(set_attr "type" "sseicvt")
    5334                 :            :    (set_attr "prefix" "evex")
    5335                 :         53 :    (set_attr "mode" "<ssescalarmode>")])
    5336                 :         53 : 
    5337                 :            : (define_insn "float<sseintvecmodelower><mode>2<mask_name><round_name>"
    5338                 :            :   [(set (match_operand:VF1 0 "register_operand" "=x,v")
    5339                 :         76 :         (float:VF1
    5340                 :         76 :           (match_operand:<sseintvecmode> 1 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    5341                 :        254 :   "TARGET_SSE2 && <mask_mode512bit_condition> && <round_mode512bit_condition>"
    5342                 :        349 :   "@
    5343                 :         38 :    cvtdq2ps\t{%1, %0|%0, %1}
    5344                 :            :    vcvtdq2ps\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5345                 :        160 :   [(set_attr "isa" "noavx,avx")
    5346                 :        160 :    (set_attr "type" "ssecvt")
    5347                 :        160 :    (set_attr "prefix" "maybe_vex")
    5348                 :            :    (set_attr "mode" "<sseinsnmode>")])
    5349                 :            : 
    5350                 :            : (define_insn "ufloat<sseintvecmodelower><mode>2<mask_name><round_name>"
    5351                 :            :   [(set (match_operand:VF1_AVX512VL 0 "register_operand" "=v")
    5352                 :            :         (unsigned_float:VF1_AVX512VL
    5353                 :            :           (match_operand:<sseintvecmode> 1 "nonimmediate_operand" "<round_constraint>")))]
    5354                 :          5 :   "TARGET_AVX512F"
    5355                 :          2 :   "vcvtudq2ps\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5356                 :            :   [(set_attr "type" "ssecvt")
    5357                 :            :    (set_attr "prefix" "evex")
    5358                 :         49 :    (set_attr "mode" "<MODE>")])
    5359                 :         49 : 
    5360                 :            : (define_expand "floatuns<sseintvecmodelower><mode>2"
    5361                 :         24 :   [(match_operand:VF1 0 "register_operand")
    5362                 :         24 :    (match_operand:<sseintvecmode> 1 "register_operand")]
    5363                 :            :   "TARGET_SSE2 && (<MODE>mode == V4SFmode || TARGET_AVX2)"
    5364                 :         40 : {
    5365                 :         40 :   if (<MODE>mode == V16SFmode)
    5366                 :          0 :     emit_insn (gen_ufloatv16siv16sf2 (operands[0], operands[1]));
    5367                 :            :   else
    5368                 :         40 :     if (TARGET_AVX512VL)
    5369                 :            :       {
    5370                 :          0 :         if (<MODE>mode == V4SFmode)
    5371                 :          0 :           emit_insn (gen_ufloatv4siv4sf2 (operands[0], operands[1]));
    5372                 :            :         else
    5373                 :          0 :           emit_insn (gen_ufloatv8siv8sf2 (operands[0], operands[1]));
    5374                 :            :       }
    5375                 :            :   else
    5376                 :         40 :     ix86_expand_vector_convert_uns_vsivsf (operands[0], operands[1]);
    5377                 :            : 
    5378                 :         40 :   DONE;
    5379                 :            : })
    5380                 :            : 
    5381                 :            : 
    5382                 :            : ;; For <sse2_avx_avx512f>_fix_notrunc<sf2simodelower><mode> insn pattern
    5383                 :            : (define_mode_attr sf2simodelower
    5384                 :            :   [(V16SI "v16sf") (V8SI "v8sf") (V4SI "v4sf")])
    5385                 :            : 
    5386                 :            : (define_insn "<sse2_avx_avx512f>_fix_notrunc<sf2simodelower><mode><mask_name>"
    5387                 :            :   [(set (match_operand:VI4_AVX 0 "register_operand" "=v")
    5388                 :            :         (unspec:VI4_AVX
    5389                 :            :           [(match_operand:<ssePSmode> 1 "vector_operand" "vBm")]
    5390                 :            :           UNSPEC_FIX_NOTRUNC))]
    5391                 :         38 :   "TARGET_SSE2 && <mask_mode512bit_condition>"
    5392                 :          0 :   "%vcvtps2dq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5393                 :            :   [(set_attr "type" "ssecvt")
    5394                 :            :    (set (attr "prefix_data16")
    5395                 :        157 :      (if_then_else
    5396                 :        197 :        (match_test "TARGET_AVX")
    5397                 :        157 :      (const_string "*")
    5398                 :            :      (const_string "1")))
    5399                 :         40 :    (set_attr "prefix" "maybe_vex")
    5400                 :         40 :    (set_attr "mode" "<sseinsnmode>")])
    5401                 :         40 : 
    5402                 :         40 : (define_insn "avx512f_fix_notruncv16sfv16si<mask_name><round_name>"
    5403                 :         40 :   [(set (match_operand:V16SI 0 "register_operand" "=v")
    5404                 :         40 :         (unspec:V16SI
    5405                 :            :           [(match_operand:V16SF 1 "<round_nimm_predicate>" "<round_constraint>")]
    5406                 :            :           UNSPEC_FIX_NOTRUNC))]
    5407                 :         11 :   "TARGET_AVX512F"
    5408                 :          3 :   "vcvtps2dq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5409                 :            :   [(set_attr "type" "ssecvt")
    5410                 :            :    (set_attr "prefix" "evex")
    5411                 :         14 :    (set_attr "mode" "XI")])
    5412                 :         14 : 
    5413                 :         14 : (define_insn "<mask_codefor><avx512>_ufix_notrunc<sf2simodelower><mode><mask_name><round_name>"
    5414                 :            :   [(set (match_operand:VI4_AVX512VL 0 "register_operand" "=v")
    5415                 :          8 :         (unspec:VI4_AVX512VL
    5416                 :            :           [(match_operand:<ssePSmode> 1 "nonimmediate_operand" "<round_constraint>")]
    5417                 :          4 :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    5418                 :          7 :   "TARGET_AVX512F"
    5419                 :          5 :   "vcvtps2udq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5420                 :            :   [(set_attr "type" "ssecvt")
    5421                 :            :    (set_attr "prefix" "evex")
    5422                 :         20 :    (set_attr "mode" "<sseinsnmode>")])
    5423                 :         20 : 
    5424                 :            : (define_insn "<mask_codefor>avx512dq_cvtps2qq<mode><mask_name><round_name>"
    5425                 :         15 :   [(set (match_operand:VI8_256_512 0 "register_operand" "=v")
    5426                 :         15 :         (unspec:VI8_256_512 [(match_operand:<ssePSmode2> 1 "nonimmediate_operand" "<round_constraint>")]
    5427                 :            :                      UNSPEC_FIX_NOTRUNC))]
    5428                 :        219 :   "TARGET_AVX512DQ && <round_mode512bit_condition>"
    5429                 :          1 :   "vcvtps2qq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5430                 :            :   [(set_attr "type" "ssecvt")
    5431                 :            :    (set_attr "prefix" "evex")
    5432                 :          1 :    (set_attr "mode" "<sseinsnmode>")])
    5433                 :         44 : 
    5434                 :         44 : (define_insn "<mask_codefor>avx512dq_cvtps2qqv2di<mask_name>"
    5435                 :        217 :   [(set (match_operand:V2DI 0 "register_operand" "=v")
    5436                 :        217 :         (unspec:V2DI
    5437                 :        217 :           [(vec_select:V2SF
    5438                 :            :              (match_operand:V4SF 1 "nonimmediate_operand" "vm")
    5439                 :            :              (parallel [(const_int 0) (const_int 1)]))]
    5440                 :            :           UNSPEC_FIX_NOTRUNC))]
    5441                 :            :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5442                 :          3 :   "vcvtps2qq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    5443                 :            :   [(set_attr "type" "ssecvt")
    5444                 :            :    (set_attr "prefix" "evex")
    5445                 :            :    (set_attr "mode" "TI")])
    5446                 :            : 
    5447                 :            : (define_insn "<mask_codefor>avx512dq_cvtps2uqq<mode><mask_name><round_name>"
    5448                 :            :   [(set (match_operand:VI8_256_512 0 "register_operand" "=v")
    5449                 :       1537 :         (unspec:VI8_256_512 [(match_operand:<ssePSmode2> 1 "nonimmediate_operand" "<round_constraint>")]
    5450                 :       1537 :                      UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    5451                 :        219 :   "TARGET_AVX512DQ && <round_mode512bit_condition>"
    5452                 :          0 :   "vcvtps2uqq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5453                 :       1371 :   [(set_attr "type" "ssecvt")
    5454                 :            :    (set_attr "prefix" "evex")
    5455                 :          0 :    (set_attr "mode" "<sseinsnmode>")])
    5456                 :        141 : 
    5457                 :         89 : (define_insn "<mask_codefor>avx512dq_cvtps2uqqv2di<mask_name>"
    5458                 :        596 :   [(set (match_operand:V2DI 0 "register_operand" "=v")
    5459                 :        216 :         (unspec:V2DI
    5460                 :        380 :           [(vec_select:V2SF
    5461                 :        380 :              (match_operand:V4SF 1 "nonimmediate_operand" "vm")
    5462                 :            :              (parallel [(const_int 0) (const_int 1)]))]
    5463                 :         38 :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    5464                 :         38 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5465                 :         61 :   "vcvtps2uqq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    5466                 :         34 :   [(set_attr "type" "ssecvt")
    5467                 :         71 :    (set_attr "prefix" "evex")
    5468                 :            :    (set_attr "mode" "TI")])
    5469                 :            : 
    5470                 :            : (define_insn "<fixsuffix>fix_truncv16sfv16si2<mask_name><round_saeonly_name>"
    5471                 :            :   [(set (match_operand:V16SI 0 "register_operand" "=v")
    5472                 :        876 :         (any_fix:V16SI
    5473                 :        876 :           (match_operand:V16SF 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")))]
    5474                 :        896 :   "TARGET_AVX512F"
    5475                 :         88 :   "vcvttps2<fixsuffix>dq\t{<round_saeonly_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_saeonly_mask_op2>}"
    5476                 :        788 :   [(set_attr "type" "ssecvt")
    5477                 :        788 :    (set_attr "prefix" "evex")
    5478                 :          7 :    (set_attr "mode" "XI")])
    5479                 :        167 : 
    5480                 :         63 : (define_insn "fix_truncv8sfv8si2<mask_name>"
    5481                 :         66 :   [(set (match_operand:V8SI 0 "register_operand" "=v")
    5482                 :         97 :         (fix:V8SI (match_operand:V8SF 1 "nonimmediate_operand" "vm")))]
    5483                 :         97 :   "TARGET_AVX && <mask_avx512vl_condition>"
    5484                 :          0 :   "vcvttps2dq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5485                 :            :   [(set_attr "type" "ssecvt")
    5486                 :            :    (set_attr "prefix" "<mask_prefix>")
    5487                 :         82 :    (set_attr "mode" "OI")])
    5488                 :         82 : 
    5489                 :         82 : (define_insn "fix_truncv4sfv4si2<mask_name>"
    5490                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    5491                 :            :         (fix:V4SI (match_operand:V4SF 1 "vector_operand" "vBm")))]
    5492                 :       1230 :   "TARGET_SSE2 && <mask_avx512vl_condition>"
    5493                 :         51 :   "%vcvttps2dq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5494                 :            :   [(set_attr "type" "ssecvt")
    5495                 :            :    (set (attr "prefix_rep")
    5496                 :        371 :      (if_then_else
    5497                 :        371 :        (match_test "TARGET_AVX")
    5498                 :        371 :      (const_string "*")
    5499                 :            :      (const_string "1")))
    5500                 :            :    (set (attr "prefix_data16")
    5501                 :            :      (if_then_else
    5502                 :            :        (match_test "TARGET_AVX")
    5503                 :            :      (const_string "*")
    5504                 :            :      (const_string "0")))
    5505                 :            :    (set_attr "prefix_data16" "0")
    5506                 :            :    (set_attr "prefix" "<mask_prefix2>")
    5507                 :            :    (set_attr "mode" "TI")])
    5508                 :            : 
    5509                 :            : (define_expand "fixuns_trunc<mode><sseintvecmodelower>2"
    5510                 :            :   [(match_operand:<sseintvecmode> 0 "register_operand")
    5511                 :            :    (match_operand:VF1 1 "register_operand")]
    5512                 :            :   "TARGET_SSE2"
    5513                 :          4 : {
    5514                 :          4 :   if (<MODE>mode == V16SFmode)
    5515                 :          0 :     emit_insn (gen_ufix_truncv16sfv16si2 (operands[0],
    5516                 :            :                                           operands[1]));
    5517                 :            :   else
    5518                 :            :     {
    5519                 :          4 :       rtx tmp[3];
    5520                 :          8 :       tmp[0] = ix86_expand_adjust_ufix_to_sfix_si (operands[1], &tmp[2]);
    5521                 :          4 :       tmp[1] = gen_reg_rtx (<sseintvecmode>mode);
    5522                 :          4 :       emit_insn (gen_fix_trunc<mode><sseintvecmodelower>2 (tmp[1], tmp[0]));
    5523                 :          4 :       emit_insn (gen_xor<sseintvecmodelower>3 (operands[0], tmp[1], tmp[2]));
    5524                 :            :     }
    5525                 :          4 :   DONE;
    5526                 :            : })
    5527                 :            : 
    5528                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5529                 :            : ;;
    5530                 :            : ;; Parallel double-precision floating point conversion operations
    5531                 :            : ;;
    5532                 :            : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5533                 :            : 
    5534                 :            : (define_insn "sse2_cvtpi2pd"
    5535                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=v,x")
    5536                 :            :         (float:V2DF (match_operand:V2SI 1 "nonimmediate_operand" "vBm,?!y")))]
    5537                 :         37 :   "TARGET_SSE2"
    5538                 :          0 :   "@
    5539                 :            :    %vcvtdq2pd\t{%1, %0|%0, %1}
    5540                 :            :    cvtpi2pd\t{%1, %0|%0, %1}"
    5541                 :         18 :   [(set_attr "mmx_isa" "*,native")
    5542                 :         18 :    (set_attr "type" "ssecvt")
    5543                 :         26 :    (set_attr "unit" "*,mmx")
    5544                 :            :    (set_attr "prefix_data16" "*,1")
    5545                 :            :    (set_attr "prefix" "maybe_vex,*")
    5546                 :          8 :    (set_attr "mode" "V2DF")])
    5547                 :          4 : 
    5548                 :          4 : (define_insn "sse2_cvtpd2pi"
    5549                 :          8 :   [(set (match_operand:V2SI 0 "register_operand" "=v,?!y")
    5550                 :          8 :         (unspec:V2SI [(match_operand:V2DF 1 "vector_operand" "vBm,xBm")]
    5551                 :          4 :                      UNSPEC_FIX_NOTRUNC))]
    5552                 :         35 :   "TARGET_SSE2"
    5553                 :          2 :   "@
    5554                 :            :    * return TARGET_AVX ? \"vcvtpd2dq{x}\t{%1, %0|%0, %1}\" : \"cvtpd2dq\t{%1, %0|%0, %1}\";
    5555                 :            :    cvtpd2pi\t{%1, %0|%0, %1}"
    5556                 :        355 :   [(set_attr "mmx_isa" "*,native")
    5557                 :        355 :    (set_attr "type" "ssecvt")
    5558                 :        355 :    (set_attr "unit" "*,mmx")
    5559                 :        355 :    (set_attr "amdfam10_decode" "double")
    5560                 :        355 :    (set_attr "athlon_decode" "vector")
    5561                 :        355 :    (set_attr "bdver1_decode" "double")
    5562                 :            :    (set_attr "prefix_data16" "*,1")
    5563                 :         28 :    (set_attr "prefix" "maybe_vex,*")
    5564                 :         28 :    (set_attr "mode" "TI")])
    5565                 :         28 : 
    5566                 :            : (define_insn "sse2_cvttpd2pi"
    5567                 :            :   [(set (match_operand:V2SI 0 "register_operand" "=v,?!y")
    5568                 :            :         (fix:V2SI (match_operand:V2DF 1 "vector_operand" "vBm,xBm")))]
    5569                 :        447 :   "TARGET_SSE2"
    5570                 :         28 :   "@
    5571                 :            :    * return TARGET_AVX ? \"vcvttpd2dq{x}\t{%1, %0|%0, %1}\" : \"cvttpd2dq\t{%1, %0|%0, %1}\";
    5572                 :            :    cvttpd2pi\t{%1, %0|%0, %1}"
    5573                 :            :   [(set_attr "mmx_isa" "*,native")
    5574                 :            :    (set_attr "type" "ssecvt")
    5575                 :            :    (set_attr "unit" "*,mmx")
    5576                 :            :    (set_attr "amdfam10_decode" "double")
    5577                 :            :    (set_attr "athlon_decode" "vector")
    5578                 :            :    (set_attr "bdver1_decode" "double")
    5579                 :            :    (set_attr "prefix_data16" "*,1")
    5580                 :            :    (set_attr "prefix" "maybe_vex,*")
    5581                 :            :    (set_attr "mode" "TI")])
    5582                 :            : 
    5583                 :     247858 : (define_insn "sse2_cvtsi2sd"
    5584                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=x,x,v")
    5585                 :            :         (vec_merge:V2DF
    5586                 :            :           (vec_duplicate:V2DF
    5587                 :     247858 :             (float:DF (match_operand:SI 2 "nonimmediate_operand" "r,m,rm")))
    5588                 :     247858 :           (match_operand:V2DF 1 "register_operand" "0,0,v")
    5589                 :     247858 :           (const_int 1)))]
    5590                 :      21304 :   "TARGET_SSE2"
    5591                 :          0 :   "@
    5592                 :     247858 :    cvtsi2sd{l}\t{%2, %0|%0, %2}
    5593                 :     247858 :    cvtsi2sd{l}\t{%2, %0|%0, %2}
    5594                 :     247858 :    vcvtsi2sd{l}\t{%2, %1, %0|%0, %1, %2}"
    5595                 :      15002 :   [(set_attr "isa" "noavx,noavx,avx")
    5596                 :     201300 :    (set_attr "type" "sseicvt")
    5597                 :     201300 :    (set_attr "athlon_decode" "double,direct,*")
    5598                 :     201300 :    (set_attr "amdfam10_decode" "vector,double,*")
    5599                 :     201300 :    (set_attr "bdver1_decode" "double,direct,*")
    5600                 :     201300 :    (set_attr "btver2_decode" "double,double,double")
    5601                 :            :    (set_attr "znver1_decode" "double,double,double")
    5602                 :      48006 :    (set_attr "prefix" "orig,orig,maybe_evex")
    5603                 :      48006 :    (set_attr "mode" "DF")])
    5604                 :            : 
    5605                 :         43 : (define_insn "sse2_cvtsi2sdq<round_name>"
    5606                 :         43 :   [(set (match_operand:V2DF 0 "register_operand" "=x,x,v")
    5607                 :            :         (vec_merge:V2DF
    5608                 :            :           (vec_duplicate:V2DF
    5609                 :            :             (float:DF (match_operand:DI 2 "<round_nimm_scalar_predicate>" "r,m,<round_constraint3>")))
    5610                 :            :           (match_operand:V2DF 1 "register_operand" "0,0,v")
    5611                 :            :           (const_int 1)))]
    5612                 :            :   "TARGET_SSE2 && TARGET_64BIT"
    5613                 :          0 :   "@
    5614                 :            :    cvtsi2sd{q}\t{%2, %0|%0, %2}
    5615                 :            :    cvtsi2sd{q}\t{%2, %0|%0, %2}
    5616                 :            :    vcvtsi2sd{q}\t{%2, <round_op3>%1, %0|%0, %1<round_op3>, %2}"
    5617                 :            :   [(set_attr "isa" "noavx,noavx,avx")
    5618                 :            :    (set_attr "type" "sseicvt")
    5619                 :            :    (set_attr "athlon_decode" "double,direct,*")
    5620                 :        168 :    (set_attr "amdfam10_decode" "vector,double,*")
    5621                 :        168 :    (set_attr "bdver1_decode" "double,direct,*")
    5622                 :            :    (set_attr "length_vex" "*,*,4")
    5623                 :         53 :    (set_attr "prefix_rex" "1,1,*")
    5624                 :         53 :    (set_attr "prefix" "orig,orig,maybe_evex")
    5625                 :            :    (set_attr "mode" "DF")])
    5626                 :            : 
    5627                 :            : (define_insn "avx512f_vcvtss2usi<rex64namesuffix><round_name>"
    5628                 :        141 :   [(set (match_operand:SWI48 0 "register_operand" "=r")
    5629                 :        141 :         (unspec:SWI48
    5630                 :        141 :           [(vec_select:SF
    5631                 :            :              (match_operand:V4SF 1 "<round_nimm_predicate>" "<round_constraint>")
    5632                 :        141 :              (parallel [(const_int 0)]))]
    5633                 :        141 :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    5634                 :          9 :   "TARGET_AVX512F"
    5635                 :          0 :   "vcvtss2usi\t{<round_op2>%1, %0|%0, %k1<round_op2>}"
    5636                 :        141 :   [(set_attr "type" "sseicvt")
    5637                 :            :    (set_attr "prefix" "evex")
    5638                 :         74 :    (set_attr "mode" "<MODE>")])
    5639                 :         65 : 
    5640                 :            : (define_insn "avx512f_vcvttss2usi<rex64namesuffix><round_saeonly_name>"
    5641                 :         20 :   [(set (match_operand:SWI48 0 "register_operand" "=r")
    5642                 :         20 :         (unsigned_fix:SWI48
    5643                 :            :           (vec_select:SF
    5644                 :            :             (match_operand:V4SF 1 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    5645                 :            :             (parallel [(const_int 0)]))))]
    5646                 :          7 :   "TARGET_AVX512F"
    5647                 :            :   "vcvttss2usi\t{<round_saeonly_op2>%1, %0|%0, %k1<round_saeonly_op2>}"
    5648                 :            :   [(set_attr "type" "sseicvt")
    5649                 :            :    (set_attr "prefix" "evex")
    5650                 :          7 :    (set_attr "mode" "<MODE>")])
    5651                 :          7 : 
    5652                 :            : (define_insn "avx512f_vcvtsd2usi<rex64namesuffix><round_name>"
    5653                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r")
    5654                 :            :         (unspec:SWI48
    5655                 :            :           [(vec_select:DF
    5656                 :            :              (match_operand:V2DF 1 "<round_nimm_predicate>" "<round_constraint>")
    5657                 :            :              (parallel [(const_int 0)]))]
    5658                 :            :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    5659                 :          9 :   "TARGET_AVX512F"
    5660                 :          0 :   "vcvtsd2usi\t{<round_op2>%1, %0|%0, %q1<round_op2>}"
    5661                 :            :   [(set_attr "type" "sseicvt")
    5662                 :            :    (set_attr "prefix" "evex")
    5663                 :            :    (set_attr "mode" "<MODE>")])
    5664                 :            : 
    5665                 :            : (define_insn "avx512f_vcvttsd2usi<rex64namesuffix><round_saeonly_name>"
    5666                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r")
    5667                 :         30 :         (unsigned_fix:SWI48
    5668                 :         30 :           (vec_select:DF
    5669                 :            :             (match_operand:V2DF 1 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    5670                 :          9 :             (parallel [(const_int 0)]))))]
    5671                 :         23 :   "TARGET_AVX512F"
    5672                 :            :   "vcvttsd2usi\t{<round_saeonly_op2>%1, %0|%0, %q1<round_saeonly_op2>}"
    5673                 :            :   [(set_attr "type" "sseicvt")
    5674                 :            :    (set_attr "prefix" "evex")
    5675                 :          7 :    (set_attr "mode" "<MODE>")])
    5676                 :          7 : 
    5677                 :            : (define_insn "sse2_cvtsd2si<rex64namesuffix><round_name>"
    5678                 :            :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5679                 :            :         (unspec:SWI48
    5680                 :            :           [(vec_select:DF
    5681                 :            :              (match_operand:V2DF 1 "<round_nimm_scalar_predicate>" "v,<round_constraint2>")
    5682                 :            :              (parallel [(const_int 0)]))]
    5683                 :            :           UNSPEC_FIX_NOTRUNC))]
    5684                 :         30 :   "TARGET_SSE2"
    5685                 :          0 :   "%vcvtsd2si<rex64suffix>\t{<round_op2>%1, %0|%0, %q1<round_op2>}"
    5686                 :            :   [(set_attr "type" "sseicvt")
    5687                 :            :    (set_attr "athlon_decode" "double,vector")
    5688                 :            :    (set_attr "bdver1_decode" "double,double")
    5689                 :            :    (set_attr "btver2_decode" "double,double")
    5690                 :            :    (set_attr "prefix_rep" "1")
    5691                 :            :    (set_attr "prefix" "maybe_vex")
    5692                 :        194 :    (set_attr "mode" "<MODE>")])
    5693                 :        194 : 
    5694                 :            : (define_insn "sse2_cvtsd2si<rex64namesuffix>_2"
    5695                 :         94 :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5696                 :         94 :         (unspec:SWI48 [(match_operand:DF 1 "nonimmediate_operand" "v,m")]
    5697                 :            :                       UNSPEC_FIX_NOTRUNC))]
    5698                 :          7 :   "TARGET_SSE2"
    5699                 :          0 :   "%vcvtsd2si<rex64suffix>\t{%1, %0|%0, %q1}"
    5700                 :            :   [(set_attr "type" "sseicvt")
    5701                 :            :    (set_attr "athlon_decode" "double,vector")
    5702                 :            :    (set_attr "amdfam10_decode" "double,double")
    5703                 :            :    (set_attr "bdver1_decode" "double,double")
    5704                 :            :    (set_attr "prefix_rep" "1")
    5705                 :            :    (set_attr "prefix" "maybe_vex")
    5706                 :        271 :    (set_attr "mode" "<MODE>")])
    5707                 :        271 : 
    5708                 :            : (define_insn "sse2_cvttsd2si<rex64namesuffix><round_saeonly_name>"
    5709                 :         42 :   [(set (match_operand:SWI48 0 "register_operand" "=r,r")
    5710                 :         42 :         (fix:SWI48
    5711                 :            :           (vec_select:DF
    5712                 :            :             (match_operand:V2DF 1 "<round_saeonly_nimm_scalar_predicate>" "v,<round_saeonly_constraint2>")
    5713                 :            :             (parallel [(const_int 0)]))))]
    5714                 :        100 :   "TARGET_SSE2"
    5715                 :          0 :   "%vcvttsd2si<rex64suffix>\t{<round_saeonly_op2>%1, %0|%0, %q1<round_saeonly_op2>}"
    5716                 :            :   [(set_attr "type" "sseicvt")
    5717                 :            :    (set_attr "athlon_decode" "double,vector")
    5718                 :        117 :    (set_attr "amdfam10_decode" "double,double")
    5719                 :        117 :    (set_attr "bdver1_decode" "double,double")
    5720                 :            :    (set_attr "btver2_decode" "double,double")
    5721                 :            :    (set_attr "prefix_rep" "1")
    5722                 :            :    (set_attr "prefix" "maybe_vex")
    5723                 :            :    (set_attr "mode" "<MODE>")])
    5724                 :            : 
    5725                 :            : ;; For float<si2dfmode><mode>2 insn pattern
    5726                 :            : (define_mode_attr si2dfmode
    5727                 :            :   [(V8DF "V8SI") (V4DF "V4SI")])
    5728                 :            : (define_mode_attr si2dfmodelower
    5729                 :            :   [(V8DF "v8si") (V4DF "v4si")])
    5730                 :            : 
    5731                 :            : (define_insn "float<si2dfmodelower><mode>2<mask_name>"
    5732                 :            :   [(set (match_operand:VF2_512_256 0 "register_operand" "=v")
    5733                 :            :         (float:VF2_512_256 (match_operand:<si2dfmode> 1 "nonimmediate_operand" "vm")))]
    5734                 :         68 :   "TARGET_AVX && <mask_mode512bit_condition>"
    5735                 :          0 :   "vcvtdq2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5736                 :            :   [(set_attr "type" "ssecvt")
    5737                 :            :    (set_attr "prefix" "maybe_vex")
    5738                 :        149 :    (set_attr "mode" "<MODE>")])
    5739                 :        149 : 
    5740                 :            : (define_insn "float<floatunssuffix><sseintvecmodelower><mode>2<mask_name><round_name>"
    5741                 :            :   [(set (match_operand:VF2_AVX512VL 0 "register_operand" "=v")
    5742                 :            :         (any_float:VF2_AVX512VL
    5743                 :            :           (match_operand:<sseintvecmode> 1 "nonimmediate_operand" "<round_constraint>")))]
    5744                 :         38 :   "TARGET_AVX512DQ"
    5745                 :         19 :   "vcvt<floatsuffix>qq2pd\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5746                 :            :   [(set_attr "type" "ssecvt")
    5747                 :            :    (set_attr "prefix" "evex")
    5748                 :        163 :    (set_attr "mode" "<MODE>")])
    5749                 :        163 : 
    5750                 :        163 : ;; For float<floatunssuffix><sselondveclower><mode> insn patterns
    5751                 :            : (define_mode_attr qq2pssuff
    5752                 :        441 :   [(V8SF "") (V4SF "{y}")])
    5753                 :        441 : 
    5754                 :            : (define_mode_attr sselongvecmode
    5755                 :        184 :   [(V8SF "V8DI") (V4SF  "V4DI")])
    5756                 :        184 : 
    5757                 :            : (define_mode_attr sselongvecmodelower
    5758                 :            :   [(V8SF "v8di") (V4SF  "v4di")])
    5759                 :            : 
    5760                 :            : (define_mode_attr sseintvecmode3
    5761                 :            :   [(V8SF "XI") (V4SF "OI")
    5762                 :            :    (V8DF "OI") (V4DF "TI")])
    5763                 :            : 
    5764                 :            : (define_insn "float<floatunssuffix><sselongvecmodelower><mode>2<mask_name><round_name>"
    5765                 :            :   [(set (match_operand:VF1_128_256VL 0 "register_operand" "=v")
    5766                 :            :          (any_float:VF1_128_256VL
    5767                 :            :            (match_operand:<sselongvecmode> 1 "nonimmediate_operand" "<round_constraint>")))]
    5768                 :        470 :   "TARGET_AVX512DQ && <round_modev8sf_condition>"
    5769                 :         11 :   "vcvt<floatsuffix>qq2ps<qq2pssuff>\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5770                 :            :   [(set_attr "type" "ssecvt")
    5771                 :            :    (set_attr "prefix" "evex")
    5772                 :            :    (set_attr "mode" "<MODE>")])
    5773                 :            : 
    5774                 :            : (define_expand "float<floatunssuffix>v2div2sf2"
    5775                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    5776                 :      10444 :         (vec_concat:V4SF
    5777                 :       9729 :             (any_float:V2SF (match_operand:V2DI 1 "nonimmediate_operand" "vm"))
    5778                 :       9060 :             (match_dup 2)))]
    5779                 :        245 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5780                 :       8203 :   "operands[2] = CONST0_RTX (V2SFmode);")
    5781                 :         83 : 
    5782                 :        117 : (define_insn "*float<floatunssuffix>v2div2sf2"
    5783                 :       8218 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    5784                 :       8018 :         (vec_concat:V4SF
    5785                 :        640 :             (any_float:V2SF (match_operand:V2DI 1 "nonimmediate_operand" "vm"))
    5786                 :         35 :             (match_operand:V2SF 2 "const0_operand" "C")))]
    5787                 :        667 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5788                 :        245 :   "vcvt<floatsuffix>qq2ps{x}\t{%1, %0|%0, %1}"
    5789                 :        238 :   [(set_attr "type" "ssecvt")
    5790                 :        246 :    (set_attr "prefix" "evex")
    5791                 :        238 :    (set_attr "mode" "V4SF")])
    5792                 :       7505 : 
    5793                 :         61 : (define_mode_attr vpckfloat_concat_mode
    5794                 :        369 :   [(V8DI "v16sf") (V4DI "v8sf") (V2DI "v8sf")])
    5795                 :        377 : (define_mode_attr vpckfloat_temp_mode
    5796                 :          8 :   [(V8DI "V8SF") (V4DI "V4SF") (V2DI "V4SF")])
    5797                 :        139 : (define_mode_attr vpckfloat_op_mode
    5798                 :        131 :   [(V8DI "v8sf") (V4DI "v4sf") (V2DI "v2sf")])
    5799                 :        131 : 
    5800                 :        131 : (define_expand "vec_pack<floatprefix>_float_<mode>"
    5801                 :            :   [(match_operand:<ssePSmode> 0 "register_operand")
    5802                 :        111 :    (any_float:<ssePSmode>
    5803                 :        105 :      (match_operand:VI8_AVX512VL 1 "register_operand"))
    5804                 :          3 :    (match_operand:VI8_AVX512VL 2 "register_operand")]
    5805                 :          6 :   "TARGET_AVX512DQ"
    5806                 :        125 : {
    5807                 :          6 :   rtx r1 = gen_reg_rtx (<vpckfloat_temp_mode>mode);
    5808                 :         14 :   rtx r2 = gen_reg_rtx (<vpckfloat_temp_mode>mode);
    5809                 :         20 :   rtx (*gen) (rtx, rtx) = gen_float<floatunssuffix><mode><vpckfloat_op_mode>2;
    5810                 :         14 :   emit_insn (gen (r1, operands[1]));
    5811                 :         18 :   emit_insn (gen (r2, operands[2]));
    5812                 :          2 :   if (<MODE>mode == V2DImode)
    5813                 :          4 :     emit_insn (gen_sse_movlhps (operands[0], r1, r2));
    5814                 :            :   else
    5815                 :          8 :     emit_insn (gen_avx_vec_concat<vpckfloat_concat_mode> (operands[0],
    5816                 :            :                                                           r1, r2));
    5817                 :         12 :   DONE;
    5818                 :            : })
    5819                 :            : 
    5820                 :            : (define_expand "float<floatunssuffix>v2div2sf2_mask"
    5821                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    5822                 :            :     (vec_concat:V4SF
    5823                 :            :         (vec_merge:V2SF
    5824                 :            :             (any_float:V2SF (match_operand:V2DI 1 "nonimmediate_operand" "vm"))
    5825                 :            :             (vec_select:V2SF
    5826                 :            :                 (match_operand:V4SF 2 "nonimm_or_0_operand" "0C")
    5827                 :            :                 (parallel [(const_int 0) (const_int 1)]))
    5828                 :            :             (match_operand:QI 3 "register_operand" "Yk"))
    5829                 :            :             (match_dup 4)))]
    5830                 :            :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5831                 :         74 :   "operands[4] = CONST0_RTX (V2SFmode);")
    5832                 :            : 
    5833                 :            : (define_insn "*float<floatunssuffix>v2div2sf2_mask"
    5834                 :         74 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    5835                 :         74 :     (vec_concat:V4SF
    5836                 :         74 :         (vec_merge:V2SF
    5837                 :         74 :             (any_float:V2SF (match_operand:V2DI 1 "nonimmediate_operand" "vm"))
    5838                 :         74 :             (vec_select:V2SF
    5839                 :        122 :                 (match_operand:V4SF 2 "nonimm_or_0_operand" "0C")
    5840                 :         74 :                 (parallel [(const_int 0) (const_int 1)]))
    5841                 :         74 :             (match_operand:QI 3 "register_operand" "Yk"))
    5842                 :         74 :             (match_operand:V2SF 4 "const0_operand" "C")))]
    5843                 :         84 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5844                 :         10 :   "vcvt<floatsuffix>qq2ps{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    5845                 :         74 :   [(set_attr "type" "ssecvt")
    5846                 :         38 :    (set_attr "prefix" "evex")
    5847                 :         94 :    (set_attr "mode" "V4SF")])
    5848                 :         94 : 
    5849                 :         10 : (define_insn "*float<floatunssuffix>v2div2sf2_mask_1"
    5850                 :         38 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    5851                 :         38 :     (vec_concat:V4SF
    5852                 :         38 :         (vec_merge:V2SF
    5853                 :            :                 (any_float:V2SF (match_operand:V2DI 1
    5854                 :            :                                   "nonimmediate_operand" "vm"))
    5855                 :            :             (match_operand:V2SF 3 "const0_operand" "C")
    5856                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    5857                 :            :             (match_operand:V2SF 4 "const0_operand" "C")))]
    5858                 :         74 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    5859                 :         74 :   "vcvt<floatsuffix>qq2ps{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    5860                 :         74 :   [(set_attr "type" "ssecvt")
    5861                 :            :    (set_attr "prefix" "evex")
    5862                 :            :    (set_attr "mode" "V4SF")])
    5863                 :            : 
    5864                 :            : (define_insn "ufloat<si2dfmodelower><mode>2<mask_name>"
    5865                 :         36 :   [(set (match_operand:VF2_512_256VL 0 "register_operand" "=v")
    5866                 :        393 :         (unsigned_float:VF2_512_256VL
    5867                 :        393 :           (match_operand:<si2dfmode> 1 "nonimmediate_operand" "vm")))]
    5868                 :         24 :    "TARGET_AVX512F"
    5869                 :          0 :    "vcvtudq2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5870                 :        365 :    [(set_attr "type" "ssecvt")
    5871                 :        306 :     (set_attr "prefix" "evex")
    5872                 :         36 :     (set_attr "mode" "<MODE>")])
    5873                 :        306 : 
    5874                 :        306 : (define_insn "ufloatv2siv2df2<mask_name>"
    5875                 :        306 :   [(set (match_operand:V2DF 0 "register_operand" "=v")
    5876                 :         90 :         (unsigned_float:V2DF
    5877                 :         90 :           (vec_select:V2SI
    5878                 :        328 :             (match_operand:V4SI 1 "nonimmediate_operand" "vm")
    5879                 :            :             (parallel [(const_int 0) (const_int 1)]))))]
    5880                 :        308 :   "TARGET_AVX512VL"
    5881                 :          3 :   "vcvtudq2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    5882                 :        130 :   [(set_attr "type" "ssecvt")
    5883                 :        130 :    (set_attr "prefix" "evex")
    5884                 :         22 :    (set_attr "mode" "V2DF")])
    5885                 :         77 : 
    5886                 :         77 : (define_insn "avx512f_cvtdq2pd512_2"
    5887                 :            :   [(set (match_operand:V8DF 0 "register_operand" "=v")
    5888                 :            :         (float:V8DF
    5889                 :            :           (vec_select:V8SI
    5890                 :     106118 :             (match_operand:V16SI 1 "nonimmediate_operand" "vm")
    5891                 :            :             (parallel [(const_int 0) (const_int 1)
    5892                 :            :                        (const_int 2) (const_int 3)
    5893                 :            :                        (const_int 4) (const_int 5)
    5894                 :     106118 :                        (const_int 6) (const_int 7)]))))]
    5895                 :         26 :   "TARGET_AVX512F"
    5896                 :         13 :   "vcvtdq2pd\t{%t1, %0|%0, %t1}"
    5897                 :     106118 :   [(set_attr "type" "ssecvt")
    5898                 :       1539 :    (set_attr "prefix" "evex")
    5899                 :     104731 :    (set_attr "mode" "V8DF")])
    5900                 :        152 : 
    5901                 :        238 : (define_insn "avx_cvtdq2pd256_2"
    5902                 :         86 :   [(set (match_operand:V4DF 0 "register_operand" "=v")
    5903                 :     104579 :         (float:V4DF
    5904                 :            :           (vec_select:V4SI
    5905                 :      60218 :             (match_operand:V8SI 1 "nonimmediate_operand" "vm")
    5906                 :      60218 :             (parallel [(const_int 0) (const_int 1)
    5907                 :      60218 :                        (const_int 2) (const_int 3)]))))]
    5908                 :         35 :   "TARGET_AVX"
    5909                 :      60335 :   "vcvtdq2pd\t{%x1, %0|%0, %x1}"
    5910                 :            :   [(set_attr "type" "ssecvt")
    5911                 :         58 :    (set_attr "prefix" "maybe_evex")
    5912                 :         58 :    (set_attr "mode" "V4DF")])
    5913                 :         58 : 
    5914                 :       5023 : (define_insn "sse2_cvtdq2pd<mask_name>"
    5915                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=v")
    5916                 :       5023 :         (float:V2DF
    5917                 :       5023 :           (vec_select:V2SI
    5918                 :       5023 :             (match_operand:V4SI 1 "nonimmediate_operand" "vm")
    5919                 :       5023 :             (parallel [(const_int 0) (const_int 1)]))))]
    5920                 :       2949 :   "TARGET_SSE2 && <mask_avx512vl_condition>"
    5921                 :       2074 :   "%vcvtdq2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    5922                 :            :   [(set_attr "type" "ssecvt")
    5923                 :            :    (set_attr "prefix" "maybe_vex")
    5924                 :            :    (set_attr "mode" "V2DF")])
    5925                 :            : 
    5926                 :            : (define_insn "avx512f_cvtpd2dq512<mask_name><round_name>"
    5927                 :            :   [(set (match_operand:V8SI 0 "register_operand" "=v")
    5928                 :            :         (unspec:V8SI
    5929                 :            :           [(match_operand:V8DF 1 "<round_nimm_predicate>" "<round_constraint>")]
    5930                 :        807 :           UNSPEC_FIX_NOTRUNC))]
    5931                 :         23 :   "TARGET_AVX512F"
    5932                 :          1 :   "vcvtpd2dq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    5933                 :            :   [(set_attr "type" "ssecvt")
    5934                 :     115590 :    (set_attr "prefix" "evex")
    5935                 :        807 :    (set_attr "mode" "OI")])
    5936                 :        807 : 
    5937                 :        807 : (define_insn "avx_cvtpd2dq256<mask_name>"
    5938                 :        807 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    5939                 :     114868 :         (unspec:V4SI [(match_operand:V4DF 1 "nonimmediate_operand" "vm")]
    5940                 :         85 :                      UNSPEC_FIX_NOTRUNC))]
    5941                 :     114913 :   "TARGET_AVX && <mask_avx512vl_condition>"
    5942                 :        799 :   "vcvtpd2dq{y}\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    5943                 :         83 :   [(set_attr "type" "ssecvt")
    5944                 :        320 :    (set_attr "prefix" "<mask_prefix>")
    5945                 :        223 :    (set_attr "mode" "OI")])
    5946                 :         38 : 
    5947                 :         38 : (define_expand "avx_cvtpd2dq256_2"
    5948                 :         34 :   [(set (match_operand:V8SI 0 "register_operand")
    5949                 :         79 :         (vec_concat:V8SI
    5950                 :         79 :           (unspec:V4SI [(match_operand:V4DF 1 "nonimmediate_operand")]
    5951                 :         77 :                        UNSPEC_FIX_NOTRUNC)
    5952                 :         12 :           (match_dup 2)))]
    5953                 :         25 :   "TARGET_AVX"
    5954                 :          0 :   "operands[2] = CONST0_RTX (V4SImode);")
    5955                 :            : 
    5956                 :            : (define_insn "*avx_cvtpd2dq256_2"
    5957                 :          0 :   [(set (match_operand:V8SI 0 "register_operand" "=v")
    5958                 :          0 :         (vec_concat:V8SI
    5959                 :          0 :           (unspec:V4SI [(match_operand:V4DF 1 "nonimmediate_operand" "vm")]
    5960                 :          0 :                        UNSPEC_FIX_NOTRUNC)
    5961                 :          0 :           (match_operand:V4SI 2 "const0_operand")))]
    5962                 :          0 :   "TARGET_AVX"
    5963                 :            :   "vcvtpd2dq{y}\t{%1, %x0|%x0, %1}"
    5964                 :          0 :   [(set_attr "type" "ssecvt")
    5965                 :        105 :    (set_attr "prefix" "vex")
    5966                 :            :    (set_attr "btver2_decode" "vector")
    5967                 :         54 :    (set_attr "mode" "OI")])
    5968                 :         54 : 
    5969                 :         54 : (define_insn "sse2_cvtpd2dq"
    5970                 :         54 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    5971                 :         54 :         (vec_concat:V4SI
    5972                 :         45 :           (unspec:V2SI [(match_operand:V2DF 1 "vector_operand" "vBm")]
    5973                 :          0 :                        UNSPEC_FIX_NOTRUNC)
    5974                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    5975                 :         45 :   "TARGET_SSE2"
    5976                 :         24 : {
    5977                 :         15 :   if (TARGET_AVX)
    5978                 :          2 :     return "vcvtpd2dq{x}\t{%1, %0|%0, %1}";
    5979                 :         26 :   else
    5980                 :         31 :     return "cvtpd2dq\t{%1, %0|%0, %1}";
    5981                 :          2 : }
    5982                 :         28 :   [(set_attr "type" "ssecvt")
    5983                 :         28 :    (set_attr "prefix_rep" "1")
    5984                 :         28 :    (set_attr "prefix_data16" "0")
    5985                 :        338 :    (set_attr "prefix" "maybe_vex")
    5986                 :         28 :    (set_attr "mode" "TI")
    5987                 :         15 :    (set_attr "amdfam10_decode" "double")
    5988                 :            :    (set_attr "athlon_decode" "vector")
    5989                 :            :    (set_attr "bdver1_decode" "double")])
    5990                 :            : 
    5991                 :            : (define_insn "sse2_cvtpd2dq_mask"
    5992                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    5993                 :            :         (vec_concat:V4SI
    5994                 :            :           (vec_merge:V2SI
    5995                 :            :             (unspec:V2SI [(match_operand:V2DF 1 "nonimmediate_operand" "vm")]
    5996                 :            :                           UNSPEC_FIX_NOTRUNC)
    5997                 :            :             (vec_select:V2SI
    5998                 :            :               (match_operand:V4SI 2 "nonimm_or_0_operand" "0C")
    5999                 :            :               (parallel [(const_int 0) (const_int 1)]))
    6000                 :            :             (match_operand:QI 3 "register_operand" "Yk"))
    6001                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6002                 :         77 :   "TARGET_AVX512VL"
    6003                 :          0 :   "vcvtpd2dq{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    6004                 :            :   [(set_attr "type" "ssecvt")
    6005                 :            :    (set_attr "prefix" "evex")
    6006                 :         23 :    (set_attr "mode" "TI")])
    6007                 :         23 : 
    6008                 :            : (define_insn "*sse2_cvtpd2dq_mask_1"
    6009                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6010                 :            :         (vec_concat:V4SI
    6011                 :            :           (vec_merge:V2SI
    6012                 :            :             (unspec:V2SI [(match_operand:V2DF 1 "nonimmediate_operand" "vm")]
    6013                 :            :                           UNSPEC_FIX_NOTRUNC)
    6014                 :            :             (const_vector:V2SI [(const_int 0) (const_int 0)])
    6015                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    6016                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6017                 :         23 :   "TARGET_AVX512VL"
    6018                 :          0 :   "vcvtpd2dq{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    6019                 :            :   [(set_attr "type" "ssecvt")
    6020                 :            :    (set_attr "prefix" "evex")
    6021                 :            :    (set_attr "mode" "TI")])
    6022                 :            : 
    6023                 :            : ;; For ufix_notrunc* insn patterns
    6024                 :            : (define_mode_attr pd2udqsuff
    6025                 :        130 :   [(V8DF "") (V4DF "{y}")])
    6026                 :        130 : 
    6027                 :            : (define_insn "ufix_notrunc<mode><si2dfmodelower>2<mask_name><round_name>"
    6028                 :        100 :   [(set (match_operand:<si2dfmode> 0 "register_operand" "=v")
    6029                 :        100 :         (unspec:<si2dfmode>
    6030                 :            :           [(match_operand:VF2_512_256VL 1 "nonimmediate_operand" "<round_constraint>")]
    6031                 :            :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    6032                 :          3 :   "TARGET_AVX512F"
    6033                 :         12 :   "vcvtpd2udq<pd2udqsuff>\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    6034                 :            :   [(set_attr "type" "ssecvt")
    6035                 :         12 :    (set_attr "prefix" "evex")
    6036                 :            :    (set_attr "mode" "<sseinsnmode>")])
    6037                 :         12 : 
    6038                 :         12 : (define_insn "ufix_notruncv2dfv2si2"
    6039                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6040                 :         32 :         (vec_concat:V4SI
    6041                 :         32 :           (unspec:V2SI
    6042                 :            :             [(match_operand:V2DF 1 "nonimmediate_operand" "vm")]
    6043                 :         15 :                UNSPEC_UNSIGNED_FIX_NOTRUNC)
    6044                 :         15 :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6045                 :         27 :   "TARGET_AVX512VL"
    6046                 :         11 :   "vcvtpd2udq{x}\t{%1, %0|%0, %1}"
    6047                 :         12 :   [(set_attr "type" "ssecvt")
    6048                 :            :    (set_attr "prefix" "evex")
    6049                 :         12 :    (set_attr "mode" "TI")])
    6050                 :         12 : 
    6051                 :            : (define_insn "ufix_notruncv2dfv2si2_mask"
    6052                 :          0 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6053                 :        172 :         (vec_concat:V4SI
    6054                 :        172 :           (vec_merge:V2SI
    6055                 :        103 :             (unspec:V2SI
    6056                 :        103 :               [(match_operand:V2DF 1 "nonimmediate_operand" "vm")]
    6057                 :        275 :                  UNSPEC_UNSIGNED_FIX_NOTRUNC)
    6058                 :         69 :             (vec_select:V2SI
    6059                 :        103 :               (match_operand:V4SI 2 "nonimm_or_0_operand" "0C")
    6060                 :        103 :               (parallel [(const_int 0) (const_int 1)]))
    6061                 :        103 :             (match_operand:QI 3 "register_operand" "Yk"))
    6062                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6063                 :        100 :   "TARGET_AVX512VL"
    6064                 :          0 :   "vcvtpd2udq{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    6065                 :         52 :   [(set_attr "type" "ssecvt")
    6066                 :            :    (set_attr "prefix" "evex")
    6067                 :         74 :    (set_attr "mode" "TI")])
    6068                 :         74 : 
    6069                 :         52 : (define_insn "*ufix_notruncv2dfv2si2_mask_1"
    6070                 :         52 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6071                 :            :         (vec_concat:V4SI
    6072                 :            :           (vec_merge:V2SI
    6073                 :            :             (unspec:V2SI
    6074                 :            :               [(match_operand:V2DF 1 "nonimmediate_operand" "vm")]
    6075                 :         15 :                  UNSPEC_UNSIGNED_FIX_NOTRUNC)
    6076                 :            :             (const_vector:V2SI [(const_int 0) (const_int 0)])
    6077                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    6078                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6079                 :         22 :   "TARGET_AVX512VL"
    6080                 :          0 :   "vcvtpd2udq{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    6081                 :            :   [(set_attr "type" "ssecvt")
    6082                 :            :    (set_attr "prefix" "evex")
    6083                 :            :    (set_attr "mode" "TI")])
    6084                 :            : 
    6085                 :            : (define_insn "fix<fixunssuffix>_truncv8dfv8si2<mask_name><round_saeonly_name>"
    6086                 :            :   [(set (match_operand:V8SI 0 "register_operand" "=v")
    6087                 :            :         (any_fix:V8SI
    6088                 :            :           (match_operand:V8DF 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")))]
    6089                 :         50 :   "TARGET_AVX512F"
    6090                 :          4 :   "vcvttpd2<fixsuffix>dq\t{<round_saeonly_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_saeonly_mask_op2>}"
    6091                 :        123 :   [(set_attr "type" "ssecvt")
    6092                 :        123 :    (set_attr "prefix" "evex")
    6093                 :         18 :    (set_attr "mode" "OI")])
    6094                 :         18 : 
    6095                 :         18 : (define_insn "ufix_truncv2dfv2si2"
    6096                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6097                 :       1539 :         (vec_concat:V4SI
    6098                 :       1539 :           (unsigned_fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6099                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6100                 :       1295 :   "TARGET_AVX512VL"
    6101                 :       1282 :   "vcvttpd2udq{x}\t{%1, %0|%0, %1}"
    6102                 :       1281 :   [(set_attr "type" "ssecvt")
    6103                 :            :    (set_attr "prefix" "evex")
    6104                 :       1126 :    (set_attr "mode" "TI")])
    6105                 :       1126 : 
    6106                 :            : (define_insn "ufix_truncv2dfv2si2_mask"
    6107                 :        942 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6108                 :        942 :         (vec_concat:V4SI
    6109                 :        942 :           (vec_merge:V2SI
    6110                 :        942 :             (unsigned_fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6111                 :          0 :             (vec_select:V2SI
    6112                 :        942 :               (match_operand:V4SI 2 "nonimm_or_0_operand" "0C")
    6113                 :        942 :               (parallel [(const_int 0) (const_int 1)]))
    6114                 :        942 :             (match_operand:QI 3 "register_operand" "Yk"))
    6115                 :        942 :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6116                 :         99 :   "TARGET_AVX512VL"
    6117                 :          0 :   "vcvttpd2udq{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    6118                 :            :   [(set_attr "type" "ssecvt")
    6119                 :            :    (set_attr "prefix" "evex")
    6120                 :         22 :    (set_attr "mode" "TI")])
    6121                 :         22 : 
    6122                 :            : (define_insn "*ufix_truncv2dfv2si2_mask_1"
    6123                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6124                 :            :         (vec_concat:V4SI
    6125                 :            :           (vec_merge:V2SI
    6126                 :            :             (unsigned_fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6127                 :            :             (const_vector:V2SI [(const_int 0) (const_int 0)])
    6128                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    6129                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6130                 :         22 :   "TARGET_AVX512VL"
    6131                 :          0 :   "vcvttpd2udq{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    6132                 :            :   [(set_attr "type" "ssecvt")
    6133                 :            :    (set_attr "prefix" "evex")
    6134                 :            :    (set_attr "mode" "TI")])
    6135                 :            : 
    6136                 :            : (define_insn "fix_truncv4dfv4si2<mask_name>"
    6137                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6138                 :         99 :         (fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand" "vm")))]
    6139                 :        470 :   "TARGET_AVX || (TARGET_AVX512VL && TARGET_AVX512F)"
    6140                 :          0 :   "vcvttpd2dq{y}\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    6141                 :         76 :   [(set_attr "type" "ssecvt")
    6142                 :         76 :    (set_attr "prefix" "maybe_evex")
    6143                 :            :    (set_attr "mode" "OI")])
    6144                 :            : 
    6145                 :            : (define_insn "ufix_truncv4dfv4si2<mask_name>"
    6146                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6147                 :         59 :         (unsigned_fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand" "vm")))]
    6148                 :         40 :   "TARGET_AVX512VL && TARGET_AVX512F"
    6149                 :          2 :   "vcvttpd2udq{y}\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    6150                 :            :   [(set_attr "type" "ssecvt")
    6151                 :            :    (set_attr "prefix" "maybe_evex")
    6152                 :        153 :    (set_attr "mode" "OI")])
    6153                 :        153 : 
    6154                 :        153 : (define_insn "fix<fixunssuffix>_trunc<mode><sseintvecmodelower>2<mask_name><round_saeonly_name>"
    6155                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand" "=v")
    6156                 :            :         (any_fix:<sseintvecmode>
    6157                 :            :           (match_operand:VF2_AVX512VL 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")))]
    6158                 :        451 :   "TARGET_AVX512DQ && <round_saeonly_mode512bit_condition>"
    6159                 :          0 :   "vcvttpd2<fixsuffix>qq\t{<round_saeonly_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_saeonly_mask_op2>}"
    6160                 :            :   [(set_attr "type" "ssecvt")
    6161                 :            :    (set_attr "prefix" "evex")
    6162                 :          0 :    (set_attr "mode" "<sseintvecmode2>")])
    6163                 :         80 : 
    6164                 :            : (define_insn "fix_notrunc<mode><sseintvecmodelower>2<mask_name><round_name>"
    6165                 :        432 :   [(set (match_operand:<sseintvecmode> 0 "register_operand" "=v")
    6166                 :        432 :         (unspec:<sseintvecmode>
    6167                 :            :           [(match_operand:VF2_AVX512VL 1 "<round_nimm_predicate>" "<round_constraint>")]
    6168                 :            :           UNSPEC_FIX_NOTRUNC))]
    6169                 :        219 :   "TARGET_AVX512DQ && <round_mode512bit_condition>"
    6170                 :          1 :   "vcvtpd2qq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    6171                 :            :   [(set_attr "type" "ssecvt")
    6172                 :            :    (set_attr "prefix" "evex")
    6173                 :          1 :    (set_attr "mode" "<sseintvecmode2>")])
    6174                 :            : 
    6175                 :            : (define_insn "ufix_notrunc<mode><sseintvecmodelower>2<mask_name><round_name>"
    6176                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand" "=v")
    6177                 :        368 :         (unspec:<sseintvecmode>
    6178                 :        368 :           [(match_operand:VF2_AVX512VL 1 "nonimmediate_operand" "<round_constraint>")]
    6179                 :         38 :           UNSPEC_UNSIGNED_FIX_NOTRUNC))]
    6180                 :        219 :   "TARGET_AVX512DQ && <round_mode512bit_condition>"
    6181                 :        400 :   "vcvtpd2uqq\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    6182                 :        368 :   [(set_attr "type" "ssecvt")
    6183                 :         16 :    (set_attr "prefix" "evex")
    6184                 :         16 :    (set_attr "mode" "<sseintvecmode2>")])
    6185                 :         16 : 
    6186                 :            : (define_insn "fix<fixunssuffix>_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>"
    6187                 :            :   [(set (match_operand:<sselongvecmode> 0 "register_operand" "=v")
    6188                 :        372 :         (any_fix:<sselongvecmode>
    6189                 :        372 :           (match_operand:VF1_128_256VL 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")))]
    6190                 :        450 :   "TARGET_AVX512DQ && <round_saeonly_modev8sf_condition>"
    6191                 :          0 :   "vcvttps2<fixsuffix>qq\t{<round_saeonly_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_saeonly_mask_op2>}"
    6192                 :        141 :   [(set_attr "type" "ssecvt")
    6193                 :            :    (set_attr "prefix" "evex")
    6194                 :        297 :    (set_attr "mode" "<sseintvecmode3>")])
    6195                 :        297 : 
    6196                 :         56 : (define_insn "fix<fixunssuffix>_truncv2sfv2di2<mask_name>"
    6197                 :        398 :   [(set (match_operand:V2DI 0 "register_operand" "=v")
    6198                 :         56 :         (any_fix:V2DI
    6199                 :        970 :           (vec_select:V2SF
    6200                 :        603 :             (match_operand:V4SF 1 "nonimmediate_operand" "vm")
    6201                 :         28 :             (parallel [(const_int 0) (const_int 1)]))))]
    6202                 :        664 :   "TARGET_AVX512DQ && TARGET_AVX512VL"
    6203                 :        230 :   "vcvttps2<fixsuffix>qq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    6204                 :         25 :   [(set_attr "type" "ssecvt")
    6205                 :        199 :    (set_attr "prefix" "evex")
    6206                 :        205 :    (set_attr "mode" "TI")])
    6207                 :            : 
    6208                 :          6 : (define_mode_attr vunpckfixt_mode
    6209                 :          6 :   [(V16SF "V8DI") (V8SF "V4DI") (V4SF "V2DI")])
    6210                 :          6 : (define_mode_attr vunpckfixt_model
    6211                 :       1785 :   [(V16SF "v8di") (V8SF "v4di") (V4SF "v2di")])
    6212                 :      10315 : (define_mode_attr vunpckfixt_extract_mode
    6213                 :          6 :   [(V16SF "v16sf") (V8SF "v8sf") (V4SF "v8sf")])
    6214                 :         35 : 
    6215                 :        229 : (define_expand "vec_unpack_<fixprefix>fix_trunc_lo_<mode>"
    6216                 :          6 :   [(match_operand:<vunpckfixt_mode> 0 "register_operand")
    6217                 :      10532 :    (any_fix:<vunpckfixt_mode>
    6218                 :        341 :      (match_operand:VF1_AVX512VL 1 "register_operand"))]
    6219                 :      10197 :   "TARGET_AVX512DQ"
    6220                 :        241 : {
    6221                 :         26 :   rtx tem = operands[1];
    6222                 :        168 :   if (<MODE>mode != V4SFmode)
    6223                 :       9972 :     {
    6224                 :       9970 :       tem = gen_reg_rtx (<ssehalfvecmode>mode);
    6225                 :         59 :       emit_insn (gen_vec_extract_lo_<vunpckfixt_extract_mode> (tem,
    6226                 :         47 :                                                                operands[1]));
    6227                 :       8676 :     }
    6228                 :         15 :   rtx (*gen) (rtx, rtx)
    6229                 :       8676 :     = gen_fix<fixunssuffix>_trunc<ssehalfvecmodelower><vunpckfixt_model>2;
    6230                 :       8686 :   emit_insn (gen (operands[0], tem));
    6231                 :      16367 :   DONE;
    6232                 :            : })
    6233                 :            : 
    6234                 :            : (define_expand "vec_unpack_<fixprefix>fix_trunc_hi_<mode>"
    6235                 :            :   [(match_operand:<vunpckfixt_mode> 0 "register_operand")
    6236                 :            :    (any_fix:<vunpckfixt_mode>
    6237                 :            :      (match_operand:VF1_AVX512VL 1 "register_operand"))]
    6238                 :            :   "TARGET_AVX512DQ"
    6239                 :         12 : {
    6240                 :         12 :   rtx tem;
    6241                 :         12 :   if (<MODE>mode != V4SFmode)
    6242                 :            :     {
    6243                 :         16 :       tem = gen_reg_rtx (<ssehalfvecmode>mode);
    6244                 :          8 :       emit_insn (gen_vec_extract_hi_<vunpckfixt_extract_mode> (tem,
    6245                 :            :                                                                operands[1]));
    6246                 :            :     }
    6247                 :            :   else
    6248                 :            :     {
    6249                 :          8 :       tem = gen_reg_rtx (V4SFmode);
    6250                 :         16 :       emit_insn (gen_avx_vpermilv4sf (tem, operands[1], GEN_INT (0x4e)));
    6251                 :            :     }
    6252                 :         12 :   rtx (*gen) (rtx, rtx)
    6253                 :         12 :     = gen_fix<fixunssuffix>_trunc<ssehalfvecmodelower><vunpckfixt_model>2;
    6254                 :         24 :   emit_insn (gen (operands[0], tem));
    6255                 :         12 :   DONE;
    6256                 :         12 : })
    6257                 :         12 : 
    6258                 :         12 : (define_insn "ufix_trunc<mode><sseintvecmodelower>2<mask_name>"
    6259                 :            :   [(set (match_operand:<sseintvecmode> 0 "register_operand" "=v")
    6260                 :            :         (unsigned_fix:<sseintvecmode>
    6261                 :            :           (match_operand:VF1_128_256VL 1 "nonimmediate_operand" "vm")))]
    6262                 :         32 :   "TARGET_AVX512VL"
    6263                 :          4 :   "vcvttps2udq\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    6264                 :            :   [(set_attr "type" "ssecvt")
    6265                 :            :    (set_attr "prefix" "evex")
    6266                 :            :    (set_attr "mode" "<sseintvecmode2>")])
    6267                 :            : 
    6268                 :            : (define_expand "avx_cvttpd2dq256_2"
    6269                 :            :   [(set (match_operand:V8SI 0 "register_operand")
    6270                 :        366 :         (vec_concat:V8SI
    6271                 :        366 :           (fix:V4SI (match_operand:V4DF 1 "nonimmediate_operand"))
    6272                 :            :           (match_dup 2)))]
    6273                 :        154 :   "TARGET_AVX"
    6274                 :        164 :   "operands[2] = CONST0_RTX (V4SImode);")
    6275                 :        154 : 
    6276                 :            : (define_insn "sse2_cvttpd2dq"
    6277                 :         10 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6278                 :         10 :         (vec_concat:V4SI
    6279                 :          0 :           (fix:V2SI (match_operand:V2DF 1 "vector_operand" "vBm"))
    6280                 :         10 :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6281                 :        864 :   "TARGET_SSE2"
    6282                 :        408 : {
    6283                 :        310 :   if (TARGET_AVX)
    6284                 :          0 :     return "vcvttpd2dq{x}\t{%1, %0|%0, %1}";
    6285                 :       1260 :   else
    6286                 :       1553 :     return "cvttpd2dq\t{%1, %0|%0, %1}";
    6287                 :        717 : }
    6288                 :       1977 :   [(set_attr "type" "ssecvt")
    6289                 :        543 :    (set_attr "amdfam10_decode" "double")
    6290                 :        717 :    (set_attr "athlon_decode" "vector")
    6291                 :        717 :    (set_attr "bdver1_decode" "double")
    6292                 :        717 :    (set_attr "prefix" "maybe_vex")
    6293                 :            :    (set_attr "mode" "TI")])
    6294                 :        443 : 
    6295                 :        443 : (define_insn "sse2_cvttpd2dq_mask"
    6296                 :        567 :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6297                 :        443 :         (vec_concat:V4SI
    6298                 :            :           (vec_merge:V2SI
    6299                 :        124 :             (fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6300                 :        124 :             (vec_select:V2SI
    6301                 :        124 :               (match_operand:V4SI 2 "nonimm_or_0_operand" "0C")
    6302                 :        124 :               (parallel [(const_int 0) (const_int 1)]))
    6303                 :        124 :             (match_operand:QI 3 "register_operand" "Yk"))
    6304                 :        124 :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6305                 :        200 :   "TARGET_AVX512VL"
    6306                 :          0 :   "vcvttpd2dq{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    6307                 :            :   [(set_attr "type" "ssecvt")
    6308                 :            :    (set_attr "prefix" "evex")
    6309                 :         21 :    (set_attr "mode" "TI")])
    6310                 :         21 : 
    6311                 :            : (define_insn "*sse2_cvttpd2dq_mask_1"
    6312                 :            :   [(set (match_operand:V4SI 0 "register_operand" "=v")
    6313                 :            :         (vec_concat:V4SI
    6314                 :            :           (vec_merge:V2SI
    6315                 :            :             (fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6316                 :            :             (const_vector:V2SI [(const_int 0) (const_int 0)])
    6317                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    6318                 :            :           (const_vector:V2SI [(const_int 0) (const_int 0)])))]
    6319                 :         21 :   "TARGET_AVX512VL"
    6320                 :          0 :   "vcvttpd2dq{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    6321                 :            :   [(set_attr "type" "ssecvt")
    6322                 :            :    (set_attr "prefix" "evex")
    6323                 :            :    (set_attr "mode" "TI")])
    6324                 :            : 
    6325                 :            : (define_insn "sse2_cvtsd2ss<round_name>"
    6326                 :            :   [(set (match_operand:V4SF 0 "register_operand" "=x,x,v")
    6327                 :        276 :         (vec_merge:V4SF
    6328                 :         98 :           (vec_duplicate:V4SF
    6329                 :            :             (float_truncate:V2SF
    6330                 :         70 :               (match_operand:V2DF 2 "nonimmediate_operand" "x,m,<round_constraint>")))
    6331                 :         70 :           (match_operand:V4SF 1 "register_operand" "0,0,v")
    6332                 :            :           (const_int 1)))]
    6333                 :         31 :   "TARGET_SSE2"
    6334                 :          0 :   "@
    6335                 :            :    cvtsd2ss\t{%2, %0|%0, %2}
    6336                 :            :    cvtsd2ss\t{%2, %0|%0, %q2}
    6337                 :        538 :    vcvtsd2ss\t{<round_op3>%2, %1, %0|%0, %1, %q2<round_op3>}"
    6338                 :        538 :   [(set_attr "isa" "noavx,noavx,avx")
    6339                 :        538 :    (set_attr "type" "ssecvt")
    6340                 :            :    (set_attr "athlon_decode" "vector,double,*")
    6341                 :          0 :    (set_attr "amdfam10_decode" "vector,double,*")
    6342                 :          0 :    (set_attr "bdver1_decode" "direct,direct,*")
    6343                 :          0 :    (set_attr "btver2_decode" "double,double,double")
    6344                 :          0 :    (set_attr "prefix" "orig,orig,<round_prefix>")
    6345                 :          0 :    (set_attr "mode" "SF")])
    6346                 :            : 
    6347                 :          0 : (define_insn "*sse2_vd_cvtsd2ss"
    6348                 :          0 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x,v")
    6349                 :          0 :         (vec_merge:V4SF
    6350                 :          0 :           (vec_duplicate:V4SF
    6351                 :          0 :             (float_truncate:SF (match_operand:DF 2 "nonimmediate_operand" "x,m,vm")))
    6352                 :            :           (match_operand:V4SF 1 "register_operand" "0,0,v")
    6353                 :          0 :           (const_int 1)))]
    6354                 :        538 :   "TARGET_SSE2"
    6355                 :          0 :   "@
    6356                 :          0 :    cvtsd2ss\t{%2, %0|%0, %2}
    6357                 :          0 :    cvtsd2ss\t{%2, %0|%0, %2}
    6358                 :            :    vcvtsd2ss\t{%2, %1, %0|%0, %1, %2}"
    6359                 :            :   [(set_attr "isa" "noavx,noavx,avx")
    6360                 :            :    (set_attr "type" "ssecvt")
    6361                 :            :    (set_attr "athlon_decode" "vector,double,*")
    6362                 :       6218 :    (set_attr "amdfam10_decode" "vector,double,*")
    6363                 :       6218 :    (set_attr "bdver1_decode" "direct,direct,*")
    6364                 :       6218 :    (set_attr "btver2_decode" "double,double,double")
    6365                 :          0 :    (set_attr "prefix" "orig,orig,vex")
    6366                 :       6218 :    (set_attr "mode" "SF")])
    6367                 :       6218 : 
    6368                 :       6218 : (define_insn "sse2_cvtss2sd<round_saeonly_name>"
    6369                 :            :   [(set (match_operand:V2DF 0 "register_operand" "=x,x,v")
    6370                 :       6218 :         (vec_merge:V2DF
    6371                 :       6218 :           (float_extend:V2DF
    6372                 :       6218 :             (vec_select:V2SF
    6373                 :       6218 :               (match_operand:V4SF 2 "<round_saeonly_nimm_scalar_predicate>" "x,m,<round_saeonly_constraint>")
    6374                 :            :               (parallel [(const_int 0) (const_int 1)])))
    6375                 :            :           (match_operand:V2DF 1 "register_operand" "0,0,v")
    6376                 :            :           (const_int 1)))]
    6377                 :         54 :   "TARGET_SSE2"
    6378                 :          4 :   "@
    6379                 :            :    cvtss2sd\t{%2, %0|%0, %2}
    6380                 :            :    cvtss2sd\t{%2, %0|%0, %k2}
    6381                 :        312 :    vcvtss2sd\t{<round_saeonly_op3>%2, %1, %0|%0, %1, %k2<round_saeonly_op3>}"
    6382                 :        312 :   [(set_attr "isa" "noavx,noavx,avx")
    6383                 :        312 :    (set_attr "type" "ssecvt")
    6384                 :        312 :    (set_attr "amdfam10_decode" "vector,double,*")
    6385                 :        199 :    (set_attr "athlon_decode" "direct,direct,*")
    6386                 :          4 :    (set_attr "bdver1_decode" "direct,direct,*")
    6387                 :        308 :    (set_attr "btver2_decode" "double,double,double")
    6388                 :        113 :    (set_attr "prefix" "orig,orig,<round_saeonly_prefix>")
    6389                 :        195 :    (set_attr "mode" "DF")])
    6390                 :        113 : 
    6391                 :        307 : (define_insn "*sse2_vd_cvtss2sd"
    6392                 :        113 :   [(set (match_operand:V2DF 0 "register_operand" "=x,x,v")
    6393                 :        307 :         (vec_merge:V2DF
    6394                 :            :           (vec_duplicate:V2DF
    6395                 :        193 :             (float_extend:DF (match_operand:SF 2 "nonimmediate_operand" "x,m,vm")))
    6396                 :        193 :           (match_operand:V2DF 1 "register_operand" "0,0,v")
    6397                 :            :           (const_int 1)))]
    6398                 :       6217 :   "TARGET_SSE2"
    6399                 :          1 :   "@
    6400                 :            :    cvtss2sd\t{%2, %0|%0, %2}
    6401                 :            :    cvtss2sd\t{%2, %0|%0, %2}
    6402                 :      61513 :    vcvtss2sd\t{%2, %1, %0|%0, %1, %2}"
    6403                 :      61513 :   [(set_attr "isa" "noavx,noavx,avx")
    6404                 :      61513 :    (set_attr "type" "ssecvt")
    6405                 :      61513 :    (set_attr "amdfam10_decode" "vector,double,*")
    6406                 :      61513 :    (set_attr "athlon_decode" "direct,direct,*")
    6407                 :      61513 :    (set_attr "bdver1_decode" "direct,direct,*")
    6408                 :      61513 :    (set_attr "btver2_decode" "double,double,double")
    6409                 :      61513 :    (set_attr "prefix" "orig,orig,vex")
    6410                 :      61513 :    (set_attr "mode" "DF")])
    6411                 :      61513 : 
    6412                 :      61513 : (define_insn "<mask_codefor>avx512f_cvtpd2ps512<mask_name><round_name>"
    6413                 :      61513 :   [(set (match_operand:V8SF 0 "register_operand" "=v")
    6414                 :      61513 :         (float_truncate:V8SF
    6415                 :      61513 :           (match_operand:V8DF 1 "<round_nimm_predicate>" "<round_constraint>")))]
    6416                 :        200 :   "TARGET_AVX512F"
    6417                 :        209 :   "vcvtpd2ps\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    6418                 :       4079 :   [(set_attr "type" "ssecvt")
    6419                 :       4079 :    (set_attr "prefix" "evex")
    6420                 :       1432 :    (set_attr "mode" "V8SF")])
    6421                 :       1432 : 
    6422                 :       1426 : (define_insn "avx_cvtpd2ps256<mask_name>"
    6423                 :       1426 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    6424                 :       1432 :         (float_truncate:V4SF
    6425                 :       4079 :           (match_operand:V4DF 1 "nonimmediate_operand" "vm")))]
    6426                 :        549 :   "TARGET_AVX && <mask_avx512vl_condition>"
    6427                 :       4970 :   "vcvtpd2ps{y}\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    6428                 :            :   [(set_attr "type" "ssecvt")
    6429                 :       3267 :    (set_attr "prefix" "maybe_evex")
    6430                 :       3267 :    (set_attr "btver2_decode" "vector")
    6431                 :       3267 :    (set_attr "mode" "V4SF")])
    6432                 :            : 
    6433                 :       3017 : (define_expand "sse2_cvtpd2ps"
    6434                 :      58031 :   [(set (match_operand:V4SF 0 "register_operand")
    6435                 :      58031 :         (vec_concat:V4SF
    6436                 :        174 :           (float_truncate:V2SF
    6437                 :        174 :             (match_operand:V2DF 1 "vector_operand"))
    6438                 :     759590 :           (match_dup 2)))]
    6439                 :            :   "TARGET_SSE2"
    6440                 :      28082 :   "operands[2] = CONST0_RTX (V2SFmode);")
    6441                 :      27769 : 
    6442                 :            : (define_expand "sse2_cvtpd2ps_mask"
    6443                 :        343 :   [(set (match_operand:V4SF 0 "register_operand")
    6444                 :        343 :         (vec_concat:V4SF
    6445                 :        343 :           (vec_merge:V2SF
    6446                 :        124 :             (float_truncate:V2SF
    6447                 :        148 :               (match_operand:V2DF 1 "vector_operand"))
    6448                 :        148 :             (vec_select:V2SF
    6449                 :            :               (match_operand:V4SF 2 "nonimm_or_0_operand")
    6450                 :        124 :               (parallel [(const_int 0) (const_int 1)]))
    6451                 :            :             (match_operand:QI 3 "register_operand"))
    6452                 :            :           (match_dup 4)))]
    6453                 :            :   "TARGET_SSE2"
    6454                 :         24 :   "operands[4] = CONST0_RTX (V2SFmode);")
    6455                 :        124 : 
    6456                 :        124 : (define_insn "*sse2_cvtpd2ps"
    6457                 :        148 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    6458                 :         24 :         (vec_concat:V4SF
    6459                 :         24 :           (float_truncate:V2SF
    6460                 :         24 :             (match_operand:V2DF 1 "vector_operand" "vBm"))
    6461                 :         24 :           (match_operand:V2SF 2 "const0_operand" "C")))]
    6462                 :        491 :   "TARGET_SSE2"
    6463                 :        202 : {
    6464                 :        202 :   if (TARGET_AVX)
    6465                 :         24 :     return "vcvtpd2ps{x}\t{%1, %0|%0, %1}";
    6466                 :     333226 :   else
    6467                 :     333334 :     return "cvtpd2ps\t{%1, %0|%0, %1}";
    6468                 :     333226 : }
    6469                 :     333226 :   [(set_attr "type" "ssecvt")
    6470                 :         24 :    (set_attr "amdfam10_decode" "double")
    6471                 :        788 :    (set_attr "athlon_decode" "vector")
    6472                 :        788 :    (set_attr "bdver1_decode" "double")
    6473                 :        788 :    (set_attr "prefix_data16" "1")
    6474                 :        788 :    (set_attr "prefix" "maybe_vex")
    6475                 :        788 :    (set_attr "mode" "V4SF")])
    6476                 :            : 
    6477                 :        211 : (define_insn "*sse2_cvtpd2ps_mask"
    6478                 :        211 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    6479                 :        211 :         (vec_concat:V4SF
    6480                 :        211 :           (vec_merge:V2SF
    6481                 :        235 :             (float_truncate:V2SF
    6482                 :         24 :               (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6483                 :         39 :             (vec_select:V2SF
    6484                 :         15 :               (match_operand:V4SF 2 "nonimm_or_0_operand" "0C")
    6485                 :            :               (parallel [(const_int 0) (const_int 1)]))
    6486                 :            :             (match_operand:QI 3 "register_operand" "Yk"))
    6487                 :            :           (match_operand:V2SF 4 "const0_operand" "C")))]
    6488                 :         82 :   "TARGET_AVX512VL"
    6489                 :          0 :   "vcvtpd2ps{x}\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    6490                 :            :   [(set_attr "type" "ssecvt")
    6491                 :         12 :    (set_attr "prefix" "evex")
    6492                 :         32 :    (set_attr "mode" "V4SF")])
    6493                 :         32 : 
    6494                 :         12 : (define_insn "*sse2_cvtpd2ps_mask_1"
    6495                 :         12 :   [(set (match_operand:V4SF 0 "register_operand" "=v")
    6496                 :         12 :         (vec_concat:V4SF
    6497                 :         12 :           (vec_merge:V2SF
    6498                 :         12 :             (float_truncate:V2SF
    6499                 :            :               (match_operand:V2DF 1 "nonimmediate_operand" "vm"))
    6500                 :            :             (match_operand:V2SF 3 "const0_operand" "C")
    6501                 :            :             (match_operand:QI 2 "register_operand" "Yk"))
    6502                 :            :           (match_operand:V2SF 4 "const0_operand" "C")))]
    6503                 :         20 :   "TARGET_AVX512VL"
    6504                 :          0 :   "vcvtpd2ps{x}\t{%1, %0%{%2%}%{z%}|%0%{%2%}%{z%}, %1}"
    6505                 :            :   [(set_attr "type" "ssecvt")
    6506                 :            :    (set_attr "prefix" "evex")
    6507                 :            :    (set_attr "mode" "V4SF")])
    6508                 :            : 
    6509                 :            : ;; For <sse2_avx_avx512f>_cvtps2pd<avxsizesuffix> insn pattern
    6510                 :            : (define_mode_attr sf2dfmode
    6511                 :       1673 :   [(V8DF "V8SF") (V4DF "V4SF")])
    6512                 :       1673 : 
    6513                 :            : (define_insn "<sse2_avx_avx512f>_cvtps2pd<avxsizesuffix><mask_name><round_saeonly_name>"
    6514                 :         90 :   [(set (match_operand:VF2_512_256 0 "register_operand" "=v")
    6515                 :         90 :         (float_extend:VF2_512_256
    6516                 :            :           (match_operand:<sf2dfmode> 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")))]
    6517                 :        449 :   "TARGET_AVX && <mask_mode512bit_condition> && <round_saeonly_mode512bit_condition>"
    6518                 :         69 :   "vcvtps2pd\t{<round_saeonly_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_saeonly_mask_op2>}"
    6519                 :            :   [(set_attr "type" "ssecvt")
    6520                 :            :    (set_attr "prefix" "maybe_vex")
    6521                 :            :    (set_attr "mode" "<MODE>")])
    6522                 :            : 
    6523                 :            : (define_insn "*avx_cvtps2pd256_2"
    6524                 :            :   [(set (match_operand:V4DF 0 "register_operand" "=v")
    6525                 :       2202 :         (float_extend:V4DF
    6526                 :       2202 :           (vec_select:V4SF
    6527                 :       2202 :             (match_operand:V8SF 1 "nonimmediate_operand" "vm")
    6528                 :            :             (parallel [(const_int 0) (const_int 1)
    6529                 :       2202 :                        (const_int 2) (const_int 3)]))))]
    6530                 :       2292 :   "TARGET_AVX"
    6531                 :       2306 :   "vcvtps2pd\t{%x1, %0|%0, %x1}"
    6532                 :            :   [(set_attr "type" "ssecvt")
    6533                 :       1563 :    (set_attr "prefix" "vex")
    6534                 :        194 :    (set_attr "mode" "V4DF")])
    6535                 :        326 : 
    6536                 :        132 : (define_insn "vec_unpacks_lo_v16sf"
    6537                 :       1484 :   [(set (match_operand:V8DF 0 "register_operand" "=v")
    6538                 :       1484 :         (float_extend:V8DF
    6539                 :       1484 :           (vec_select:V8SF
    6540                 :            :             (match_operand:V16SF 1 "nonimmediate_operand" "vm")
    6541                 :         86 :             (parallel [(const_int 0) (const_int 1)
    6542                 :         86 :                        (const_int 2) (const_int 3)
    6543                 :         86 :                        (const_int 4) (const_int 5)
    6544                 :            :                        (const_int 6) (const_int 7)]))))]
    6545                 :         71 :   "TARGET_AVX512F"
    6546                 :         61 :   "vcvtps2pd\t{%t1, %0|%0, %t1}"
    6547                 :            :   [(set_attr "type" "ssecvt")
    6548                 :            :    (set_attr "prefix" "evex")
    6549                 :       1872 :    (set_attr "mode" "V8DF")])
    6550                 :       1872 : 
    6551                 :       1872 : (define_insn "<avx512>_cvt<ssemodesuffix>2mask<mode>"
    6552                 :            :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    6553                 :       1872 :         (unspec:<avx512fmaskmode>
    6554                 :       1872 :          [(match_operand:VI12_AVX512VL 1 "register_operand" "v")]
    6555                 :       1872 :          UNSPEC_CVTINT2MASK))]
    6556                 :       1644 :   "TARGET_AVX512BW"
    6557                 :       1597 :   "vpmov<ssemodesuffix>2m\t{%1, %0|%0, %1}"
    6558                 :       1592 :   [(set_attr "prefix" "evex")
    6559                 :       1872 :    (set_attr "mode" "<sseinsnmode>")])
    6560                 :         58 : 
    6561                 :         58 : (define_insn "<avx512>_cvt<ssemodesuffix>2mask<mode>"
    6562                 :         58 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    6563                 :            :         (unspec:<avx512fmaskmode>
    6564                 :         56 :          [(match_operand:VI48_AVX512VL 1 "register_operand" "v")]
    6565                 :            :          UNSPEC_CVTINT2MASK))]
    6566                 :         52 :   "TARGET_AVX512DQ"
    6567                 :         33 :   "vpmov<ssemodesuffix>2m\t{%1, %0|%0, %1}"
    6568                 :         28 :   [(set_attr "prefix" "evex")
    6569                 :         14 :    (set_attr "mode" "<sseinsnmode>")])
    6570                 :         57 : 
    6571                 :         57 : (define_expand "<avx512>_cvtmask2<ssemodesuffix><mode>"
    6572                 :         71 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand")
    6573                 :         14 :         (vec_merge:VI12_AVX512VL
    6574                 :            :           (match_dup 2)
    6575                 :            :           (match_dup 3)
    6576                 :            :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    6577                 :            :   "TARGET_AVX512BW"
    6578                 :         72 :   {
    6579                 :         72 :     operands[2] = CONSTM1_RTX (<MODE>mode);
    6580                 :         72 :     operands[3] = CONST0_RTX (<MODE>mode);
    6581                 :            :   })
    6582                 :            : 
    6583                 :            : (define_insn "*<avx512>_cvtmask2<ssemodesuffix><mode>"
    6584                 :         72 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v")
    6585                 :         72 :         (vec_merge:VI12_AVX512VL
    6586                 :         72 :           (match_operand:VI12_AVX512VL 2 "vector_all_ones_operand")
    6587                 :         72 :           (match_operand:VI12_AVX512VL 3 "const0_operand")
    6588                 :         72 :           (match_operand:<avx512fmaskmode> 1 "register_operand" "k")))]
    6589                 :        283 :   "TARGET_AVX512BW"
    6590                 :         72 :   "vpmovm2<ssemodesuffix>\t{%1, %0|%0, %1}"
    6591                 :         72 :   [(set_attr "prefix" "evex")
    6592                 :            :    (set_attr "mode" "<sseinsnmode>")])
    6593                 :        573 : 
    6594                 :        501 : (define_expand "<avx512>_cvtmask2<ssemodesuffix><mode>"
    6595                 :        501 :   [(set (match_operand:VI48_AVX512VL 0 "register_operand")
    6596                 :            :         (vec_merge:VI48_AVX512VL
    6597                 :            :           (match_dup 2)
    6598                 :         72 :           (match_dup 3)
    6599                 :         72 :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    6600                 :         72 :   "TARGET_AVX512F"
    6601                 :         72 :   "{
    6602                 :         72 :     operands[2] = CONSTM1_RTX (<MODE>mode);
    6603                 :         72 :     operands[3] = CONST0_RTX (<MODE>mode);
    6604                 :            :   }")
    6605                 :         72 : 
    6606                 :            : (define_insn "*<avx512>_cvtmask2<ssemodesuffix><mode>"
    6607                 :         72 :   [(set (match_operand:VI48_AVX512VL 0 "register_operand" "=v,v")
    6608                 :        144 :         (vec_merge:VI48_AVX512VL
    6609                 :        144 :           (match_operand:VI48_AVX512VL 2 "vector_all_ones_operand")
    6610                 :        144 :           (match_operand:VI48_AVX512VL 3 "const0_operand")
    6611                 :         72 :           (match_operand:<avx512fmaskmode> 1 "register_operand" "k,Yk")))]
    6612                 :        443 :   "TARGET_AVX512F"
    6613                 :        132 :   "@
    6614                 :        132 :    vpmovm2<ssemodesuffix>\t{%1, %0|%0, %1}
    6615                 :         60 :    vpternlog<ssemodesuffix>\t{$0x81, %0, %0, %0%{%1%}%{z%}|%0%{%1%}%{z%}, %0, %0, 0x81}"
    6616                 :        430 :   [(set_attr "isa" "avx512dq,*")
    6617                 :        358 :    (set_attr "length_immediate" "0,1")
    6618                 :        358 :    (set_attr "prefix" "evex")
    6619                 :            :    (set_attr "mode" "<sseinsnmode>")])
    6620                 :            : 
    6621                 :         72 : (define_insn "sse2_cvtps2pd<mask_name>"
    6622                 :         72 :   [(set (match_operand:V2DF 0 "register_operand" "=v")
    6623                 :         72 :         (float_extend:V2DF
    6624                 :            :           (vec_select:V2SF
    6625                 :            :             (match_operand:V4SF 1 "vector_operand" "vm")
    6626                 :            :             (parallel [(const_int 0) (const_int 1)]))))]
    6627                 :       1203 :   "TARGET_SSE2 && <mask_avx512vl_condition>"
    6628                 :        972 :   "%vcvtps2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
    6629                 :            :   [(set_attr "type" "ssecvt")
    6630                 :            :    (set_attr "amdfam10_decode" "direct")
    6631                 :        294 :    (set_attr "athlon_decode" "double")
    6632                 :        294 :    (set_attr "bdver1_decode" "double")
    6633                 :        234 :    (set_attr "prefix_data16" "0")
    6634                 :         60 :    (set_attr "prefix" "maybe_vex")
    6635                 :        488 :    (set_attr "mode" "V2DF")])
    6636                 :        488 : 
    6637                 :        488 : (define_expand "vec_unpacks_hi_v4sf"
    6638                 :        254 :   [(set (match_dup 2)
    6639                 :        194 :    (vec_select:V4SF
    6640                 :        194 :      (vec_concat:V8SF
    6641                 :       3549 :        (match_dup 2)
    6642                 :        194 :        (match_operand:V4SF 1 "vector_operand"))
    6643                 :        194 :      (parallel [(const_int 6) (const_int 7)
    6644                 :            :                 (const_int 2) (const_int 3)])))
    6645                 :        173 :   (set (match_operand:V2DF 0 "register_operand")
    6646                 :       3355 :    (float_extend:V2DF
    6647                 :       3355 :      (vec_select:V2SF
    6648                 :         54 :        (match_dup 2)
    6649                 :         54 :        (parallel [(const_int 0) (const_int 1)]))))]
    6650                 :         36 :   "TARGET_SSE2"
    6651                 :        234 :   "operands[2] = gen_reg_rtx (V4SFmode);")
    6652                 :            : 
    6653                 :            : (define_expand "vec_unpacks_hi_v8sf"
    6654                 :        234 :   [(set (match_dup 2)
    6655                 :        234 :         (vec_select:V4SF
    6656                 :        234 :           (match_operand:V8SF 1 "register_operand")
    6657                 :        234 :           (parallel [(const_int 4) (const_int 5)
    6658                 :        234 :                      (const_int 6) (const_int 7)])))
    6659                 :        234 :    (set (match_operand:V4DF 0 "register_operand")
    6660                 :            :         (float_extend:V4DF
    6661                 :        234 :           (match_dup 2)))]
    6662                 :            :   "TARGET_AVX"
    6663                 :        144 :   "operands[2] = gen_reg_rtx (V4SFmode);")
    6664                 :            : 
    6665                 :            : (define_expand "vec_unpacks_hi_v16sf"
    6666                 :         72 :   [(set (match_dup 2)
    6667                 :         72 :         (vec_select:V8SF
    6668                 :         72 :           (match_operand:V16SF 1 "register_operand")
    6669                 :         72 :           (parallel [(const_int 8) (const_int 9)
    6670                 :         72 :                      (const_int 10) (const_int 11)
    6671                 :         72 :                      (const_int 12) (const_int 13)
    6672                 :        234 :                      (const_int 14) (const_int 15)])))
    6673                 :         72 :    (set (match_operand:V8DF 0 "register_operand")
    6674                 :            :         (float_extend:V8DF
    6675                 :            :           (match_dup 2)))]
    6676                 :            : "TARGET_AVX512F"
    6677                 :         68 : "operands[2] = gen_reg_rtx (V8SFmode);")
    6678                 :            : 
    6679                 :            : (define_expand "vec_unpacks_lo_v4sf"
    6680                 :        234 :   [(set (match_operand:V2DF 0 "register_operand")
    6681                 :        234 :         (float_extend:V2DF
    6682                 :         72 :           (vec_select:V2SF
    6683                 :         34 :             (match_operand:V4SF 1 "vector_operand")
    6684                 :         34 :             (parallel [(const_int 0) (const_int 1)]))))]
    6685                 :         72 :   "TARGET_SSE2")
    6686                 :         72 : 
    6687                 :         34 : (define_expand "vec_unpacks_lo_v8sf"
    6688                 :            :   [(set (match_operand:V4DF 0 "register_operand")
    6689                 :            :         (float_extend:V4DF
    6690                 :         72 :           (vec_select:V4SF
    6691                 :         72 :             (match_operand:V8SF 1 "nonimmediate_operand")
    6692                 :         72 :             (parallel [(const_int 0) (const_int 1)
    6693                 :         72 :                        (const_int 2) (const_int 3)]))))]
    6694                 :         72 :   "TARGET_AVX")
    6695                 :        106 : 
    6696                 :         72 : (define_mode_attr sseunpackfltmode
    6697                 :         34 :   [(V8HI "V4SF") (V4SI "V2DF") (V16HI "V8SF")
    6698                 :         34 :   (V8SI "V4DF") (V32HI "V16SF") (V16SI "V8DF")])
    6699                 :         34 : 
    6700                 :         34 : (define_expand "vec_unpacks_float_hi_<mode>"
    6701                 :         34 :   [(match_operand:<sseunpackfltmode> 0 "register_operand")
    6702                 :            :    (match_operand:VI2_AVX512F 1 "register_operand")]
    6703                 :         34 :   "TARGET_SSE2"
    6704                 :         34 : {
    6705                 :        180 :   rtx tmp = gen_reg_rtx (<sseunpackmode>mode);
    6706                 :            : 
    6707                 :         73 :   emit_insn (gen_vec_unpacks_hi_<mode> (tmp, operands[1]));
    6708                 :         73 :   emit_insn (gen_rtx_SET (operands[0],
    6709                 :            :                           gen_rtx_FLOAT (<sseunpackfltmode>mode, tmp)));
    6710                 :         73 :   DONE;
    6711                 :            : })
    6712                 :            : 
    6713                 :        234 : (define_expand "vec_unpacks_float_lo_<mode>"
    6714                 :            :   [(match_operand:<sseunpackfltmode> 0 "register_operand")
    6715                 :            :    (match_operand:VI2_AVX512F 1 "register_operand")]
    6716                 :            :   "TARGET_SSE2"
    6717                 :         73 : {
    6718                 :        146 :   rtx tmp = gen_reg_rtx (<sseunpackmode>mode);
    6719                 :            : 
    6720                 :         73 :   emit_insn (gen_vec_unpacks_lo_<mode> (tmp, operands[1]));
    6721                 :         73 :   emit_insn (gen_rtx_SET (operands[0],
    6722                 :            :                           gen_rtx_FLOAT (<sseunpackfltmode>mode, tmp)));
    6723                 :         73 :   DONE;
    6724                 :            : })
    6725                 :         72 : 
    6726                 :            : (define_expand "vec_unpacku_float_hi_<mode>"
    6727                 :            :   [(match_operand:<sseunpackfltmode> 0 "register_operand")
    6728                 :        145 :    (match_operand:VI2_AVX512F 1 "register_operand")]
    6729                 :            :   "TARGET_SSE2"
    6730                 :          5 : {
    6731                 :         83 :   rtx tmp = gen_reg_rtx (<sseunpackmode>mode);
    6732                 :         73 : 
    6733                 :          5 :   emit_insn (gen_vec_unpacku_hi_<mode> (tmp, operands[1]));
    6734                 :          5 :   emit_insn (gen_rtx_SET (operands[0],
    6735                 :         73 :                           gen_rtx_FLOAT (<sseunpackfltmode>mode, tmp)));
    6736                 :         78 :   DONE;
    6737                 :            : })
    6738                 :            : 
    6739                 :            : (define_expand "vec_unpacku_float_lo_<mode>"
    6740                 :            :   [(match_operand:<sseunpackfltmode> 0 "register_operand")
    6741                 :         73 :    (match_operand:VI2_AVX512F 1 "register_operand")]
    6742                 :          0 :   "TARGET_SSE2"
    6743                 :          5 : {
    6744                 :         83 :   rtx tmp = gen_reg_rtx (<sseunpackmode>mode);
    6745                 :         73 : 
    6746                 :          5 :   emit_insn (gen_vec_unpacku_lo_<mode> (tmp, operands[1]));
    6747                 :          5 :   emit_insn (gen_rtx_SET (operands[0],
    6748                 :         73 :                           gen_rtx_FLOAT (<sseunpackfltmode>mode, tmp)));
    6749                 :         78 :   DONE;
    6750                 :          0 : })
    6751                 :            : 
    6752                 :            : (define_expand "vec_unpacks_float_hi_v4si"
    6753                 :            :   [(set (match_dup 2)
    6754                 :          5 :         (vec_select:V4SI
    6755                 :            :           (match_operand:V4SI 1 "vector_operand")
    6756                 :            :           (parallel [(const_int 2) (const_int 3)
    6757                 :          5 :                      (const_int 2) (const_int 3)])))
    6758                 :          5 :    (set (match_operand:V2DF 0 "register_operand")
    6759                 :          5 :         (float:V2DF