LCOV - code coverage report
Current view: top level - gcc/config/i386 - sse.md (source / functions) Coverage Total Hit
Test: gcc.info Lines: 91.3 % 21982 20061
Test Date: 2024-11-30 13:30:02 Functions: 55.9 % 6713 3755
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-2024 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_PSIGN
      32                 :             :   UNSPEC_PALIGNR
      33                 :             : 
      34                 :             :   ;; For SSE4A support
      35                 :             :   UNSPEC_EXTRQI
      36                 :             :   UNSPEC_EXTRQ
      37                 :             :   UNSPEC_INSERTQI
      38                 :             :   UNSPEC_INSERTQ
      39                 :             : 
      40                 :             :   ;; For SSE4.1 support
      41                 :             :   UNSPEC_DP
      42                 :             :   UNSPEC_MOVNTDQA
      43                 :             :   UNSPEC_MPSADBW
      44                 :             :   UNSPEC_PHMINPOSUW
      45                 :             :   UNSPEC_PTEST
      46                 :             : 
      47                 :             :   ;; For SSE4.2 support
      48                 :             :   UNSPEC_PCMPESTR
      49                 :             :   UNSPEC_PCMPISTR
      50                 :             : 
      51                 :             :   ;; For FMA4 support
      52                 :             :   UNSPEC_FMADDSUB
      53                 :             :   UNSPEC_XOP_UNSIGNED_CMP
      54                 :             :   UNSPEC_XOP_TRUEFALSE
      55                 :             :   UNSPEC_FRCZ
      56                 :             : 
      57                 :             :   ;; For AES support
      58                 :             :   UNSPEC_AESENC
      59                 :             :   UNSPEC_AESENCLAST
      60                 :             :   UNSPEC_AESDEC
      61                 :             :   UNSPEC_AESDECLAST
      62                 :             :   UNSPEC_AESIMC
      63                 :             :   UNSPEC_AESKEYGENASSIST
      64                 :             : 
      65                 :             :   ;; For PCLMUL support
      66                 :             :   UNSPEC_PCLMUL
      67                 :             : 
      68                 :             :   ;; For AVX support
      69                 :             :   UNSPEC_VPERMIL
      70                 :             :   UNSPEC_VPERMIL2
      71                 :             :   UNSPEC_VPERMIL2F128
      72                 :             :   UNSPEC_CAST
      73                 :             :   UNSPEC_VTESTP
      74                 :             :   UNSPEC_VCVTPH2PS
      75                 :             :   UNSPEC_VCVTPS2PH
      76                 :             : 
      77                 :             :   ;; For AVX2 support
      78                 :             :   UNSPEC_VPERMVAR
      79                 :             :   UNSPEC_VPERMTI
      80                 :             :   UNSPEC_GATHER
      81                 :             :   UNSPEC_VSIBADDR
      82                 :             : 
      83                 :             :   ;; For AVX512F support
      84                 :             :   UNSPEC_VPERMT2
      85                 :             :   UNSPEC_UNSIGNED_FIX_NOTRUNC
      86                 :             :   UNSPEC_UNSIGNED_PCMP
      87                 :             :   UNSPEC_TESTM
      88                 :             :   UNSPEC_TESTNM
      89                 :             :   UNSPEC_SCATTER
      90                 :             :   UNSPEC_RCP14
      91                 :             :   UNSPEC_RSQRT14
      92                 :             :   UNSPEC_FIXUPIMM
      93                 :             :   UNSPEC_VTERNLOG
      94                 :             :   UNSPEC_GETEXP
      95                 :             :   UNSPEC_GETMANT
      96                 :             :   UNSPEC_ALIGN
      97                 :             :   UNSPEC_CONFLICT
      98                 :             :   UNSPEC_COMPRESS
      99                 :             :   UNSPEC_COMPRESS_STORE
     100                 :             :   UNSPEC_EXPAND
     101                 :             :   UNSPEC_VCVTT
     102                 :             :   UNSPEC_VCVTTU
     103                 :             : 
     104                 :             :   ;; Mask operations
     105                 :             :   UNSPEC_MASKOP
     106                 :             :   UNSPEC_KORTEST
     107                 :             :   UNSPEC_KTEST
     108                 :             :   ;; Mask load
     109                 :             :   UNSPEC_MASKLOAD
     110                 :             : 
     111                 :             :   ;; For embed. rounding feature
     112                 :             :   UNSPEC_EMBEDDED_ROUNDING
     113                 :             : 
     114                 :             :   ;; For SHA support
     115                 :             :   UNSPEC_SHA1MSG1
     116                 :             :   UNSPEC_SHA1MSG2
     117                 :             :   UNSPEC_SHA1NEXTE
     118                 :             :   UNSPEC_SHA1RNDS4
     119                 :             :   UNSPEC_SHA256MSG1
     120                 :             :   UNSPEC_SHA256MSG2
     121                 :             :   UNSPEC_SHA256RNDS2
     122                 :             : 
     123                 :             :   ;; For AVX512BW support
     124                 :             :   UNSPEC_DBPSADBW
     125                 :             :   UNSPEC_PMADDUBSW512
     126                 :             :   UNSPEC_PMADDWD512
     127                 :             :   UNSPEC_PSHUFHW
     128                 :             :   UNSPEC_PSHUFLW
     129                 :             :   UNSPEC_CVTINT2MASK
     130                 :             : 
     131                 :             :   ;; For AVX512DQ support
     132                 :             :   UNSPEC_REDUCE
     133                 :             :   UNSPEC_FPCLASS
     134                 :             :   UNSPEC_RANGE
     135                 :             : 
     136                 :             :   ;; For AVX512IFMA support
     137                 :             :   UNSPEC_VPMADD52LUQ
     138                 :             :   UNSPEC_VPMADD52HUQ
     139                 :             : 
     140                 :             :   ;; For AVX512VBMI support
     141                 :             :   UNSPEC_VPMULTISHIFT
     142                 :             : 
     143                 :             :   ;; For GFNI support
     144                 :             :   UNSPEC_GF2P8AFFINEINV
     145                 :             :   UNSPEC_GF2P8AFFINE
     146                 :             :   UNSPEC_GF2P8MUL
     147                 :             : 
     148                 :             :   ;; For AVX512VBMI2 support
     149                 :             :   UNSPEC_VPSHLD
     150                 :             :   UNSPEC_VPSHRD
     151                 :             :   UNSPEC_VPSHRDV
     152                 :             :   UNSPEC_VPSHLDV
     153                 :             : 
     154                 :             :   ;; For AVX512VNNI support
     155                 :             :   UNSPEC_VPDPBUSD
     156                 :             :   UNSPEC_VPDPBUSDS
     157                 :             :   UNSPEC_VPDPWSSD
     158                 :             :   UNSPEC_VPDPWSSDS
     159                 :             : 
     160                 :             :   ;; For VAES support
     161                 :             :   UNSPEC_VAESDEC
     162                 :             :   UNSPEC_VAESDECLAST
     163                 :             :   UNSPEC_VAESENC
     164                 :             :   UNSPEC_VAESENCLAST
     165                 :             : 
     166                 :             :   ;; For VPCLMULQDQ support
     167                 :             :   UNSPEC_VPCLMULQDQ
     168                 :             : 
     169                 :             :   ;; For AVX512BITALG support
     170                 :             :   UNSPEC_VPSHUFBIT
     171                 :             : 
     172                 :             :   ;; For VP2INTERSECT support
     173                 :             :   UNSPEC_VP2INTERSECT
     174                 :             : 
     175                 :             :   ;; For AVX512BF16 support
     176                 :             :   UNSPEC_VDPBF16PS
     177                 :             : 
     178                 :             :   ;; For AVX512FP16 suppport
     179                 :             :   UNSPEC_COMPLEX_FMA
     180                 :             :   UNSPEC_COMPLEX_FMA_PAIR
     181                 :             :   UNSPEC_COMPLEX_FCMA
     182                 :             :   UNSPEC_COMPLEX_FCMA_PAIR
     183                 :             :   UNSPEC_COMPLEX_FMUL
     184                 :             :   UNSPEC_COMPLEX_FCMUL
     185                 :             :   UNSPEC_COMPLEX_MASK
     186                 :             :  
     187                 :             :   ;; For SM3 support
     188                 :             :   UNSPEC_SM3MSG1
     189                 :             :   UNSPEC_SM3MSG2
     190                 :             :   UNSPEC_SM3RNDS2
     191                 :             : 
     192                 :             :   ;; For AVX-VNNI-INT8 support
     193                 :             :   UNSPEC_VPDPBSSD
     194                 :             :   UNSPEC_VPDPBSSDS
     195                 :             :   UNSPEC_VPDPBSUD
     196                 :             :   UNSPEC_VPDPBSUDS
     197                 :             :   UNSPEC_VPDPBUUD
     198                 :             :   UNSPEC_VPDPBUUDS
     199                 :             : 
     200                 :             :   ;; For AVX-VNNI-INT16 support
     201                 :             :   UNSPEC_VPDPWUSD
     202                 :             :   UNSPEC_VPDPWUSDS
     203                 :             :   UNSPEC_VPDPWSUD
     204                 :             :   UNSPEC_VPDPWSUDS
     205                 :             :   UNSPEC_VPDPWUUD
     206                 :             :   UNSPEC_VPDPWUUDS
     207                 :             : 
     208                 :             :   ;; For SHA512 support
     209                 :             :   UNSPEC_SHA512MSG1
     210                 :             :   UNSPEC_SHA512MSG2
     211                 :             :   UNSPEC_SHA512RNDS2
     212                 :             : 
     213                 :             :   ;; For SM4 support
     214                 :             :   UNSPEC_SM4KEY4
     215                 :             :   UNSPEC_SM4RNDS4
     216                 :             : 
     217                 :             :   ;; For AVX10.2 suppport
     218                 :             :   UNSPEC_VDPPHPS
     219                 :             :   UNSPEC_VCVTBIASPH2BF8
     220                 :             :   UNSPEC_VCVTBIASPH2BF8S
     221                 :             :   UNSPEC_VCVTBIASPH2HF8
     222                 :             :   UNSPEC_VCVTBIASPH2HF8S
     223                 :             :   UNSPEC_VCVTNE2PH2BF8
     224                 :             :   UNSPEC_VCVTNE2PH2BF8S
     225                 :             :   UNSPEC_VCVTNE2PH2HF8
     226                 :             :   UNSPEC_VCVTNE2PH2HF8S
     227                 :             :   UNSPEC_VCVTNEPH2BF8
     228                 :             :   UNSPEC_VCVTNEPH2BF8S
     229                 :             :   UNSPEC_VCVTNEPH2HF8
     230                 :             :   UNSPEC_VCVTNEPH2HF8S
     231                 :             :   UNSPEC_VCVTHF82PH
     232                 :             :   UNSPEC_VSCALEFPBF16
     233                 :             :   UNSPEC_VRNDSCALENEPBF16
     234                 :             :   UNSPEC_VREDUCENEPBF16
     235                 :             :   UNSPEC_VGETMANTPBF16
     236                 :             :   UNSPEC_VFPCLASSPBF16
     237                 :             :   UNSPEC_VCOMSBF16
     238                 :             :   UNSPEC_VCVTNEBF162IBS
     239                 :             :   UNSPEC_VCVTNEBF162IUBS
     240                 :             :   UNSPEC_VCVTPH2IBS
     241                 :             :   UNSPEC_VCVTPH2IUBS
     242                 :             :   UNSPEC_VCVTPS2IBS
     243                 :             :   UNSPEC_VCVTPS2IUBS
     244                 :             :   UNSPEC_VCVTTNEBF162IBS
     245                 :             :   UNSPEC_VCVTTNEBF162IUBS
     246                 :             :   UNSPEC_VCVTTPH2IBS
     247                 :             :   UNSPEC_VCVTTPH2IUBS
     248                 :             :   UNSPEC_VCVTTPS2IBS
     249                 :             :   UNSPEC_VCVTTPS2IUBS
     250                 :             :   UNSPEC_SFIX_SATURATION
     251                 :             :   UNSPEC_UFIX_SATURATION
     252                 :             :   UNSPEC_MINMAXNEPBF16
     253                 :             :   UNSPEC_MINMAX
     254                 :             : 
     255                 :             :   ;; For MOVRS suppport
     256                 :             :   UNSPEC_VMOVRS
     257                 :             : ])
     258                 :             : 
     259                 :             : (define_c_enum "unspecv" [
     260                 :             :   UNSPECV_LDMXCSR
     261                 :             :   UNSPECV_STMXCSR
     262                 :             :   UNSPECV_CLFLUSH
     263                 :             :   UNSPECV_MONITOR
     264                 :             :   UNSPECV_MWAIT
     265                 :             :   UNSPECV_VZEROALL
     266                 :             : 
     267                 :             :   ;; For KEYLOCKER
     268                 :             :   UNSPECV_LOADIWKEY
     269                 :             :   UNSPECV_AESDEC128KLU8
     270                 :             :   UNSPECV_AESENC128KLU8
     271                 :             :   UNSPECV_AESDEC256KLU8
     272                 :             :   UNSPECV_AESENC256KLU8
     273                 :             :   UNSPECV_AESDECWIDE128KLU8
     274                 :             :   UNSPECV_AESENCWIDE128KLU8
     275                 :             :   UNSPECV_AESDECWIDE256KLU8
     276                 :             :   UNSPECV_AESENCWIDE256KLU8
     277                 :             :   UNSPECV_ENCODEKEY128U32
     278                 :             :   UNSPECV_ENCODEKEY256U32
     279                 :             : ])
     280                 :             : 
     281                 :             : ;; All vector modes including V?TImode, used in move patterns.
     282                 :             : (define_mode_iterator VMOVE
     283                 :      255922 :   [(V64QI "TARGET_AVX512F && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     284                 :      216883 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI
     285                 :      497539 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX") V4SI
     286                 :      838680 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")  (V4DI "TARGET_AVX") V2DI
     287                 :     1256573 :    (V4TI "TARGET_AVX512F && TARGET_EVEX512") (V2TI "TARGET_AVX") V1TI
     288                 :     1584187 :    (V32HF "TARGET_AVX512F && TARGET_EVEX512") (V16HF "TARGET_AVX") V8HF
     289                 :     1334624 :    (V32BF "TARGET_AVX512F && TARGET_EVEX512") (V16BF "TARGET_AVX") V8BF
     290                 :      697151 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     291                 :      859865 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")  (V4DF "TARGET_AVX") V2DF])
     292                 :    17509002 : 
     293                 :    20247090 : ;; All AVX-512{F,VL} vector modes without HF. Supposed TARGET_AVX512F baseline.
     294                 :    37427775 : (define_mode_iterator V48_AVX512VL
     295                 :    25269486 :   [(V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     296                 :    26857260 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")
     297                 :    25610548 :    (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     298                 :    15679907 :    (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     299                 :      827209 : 
     300                 :       11386 : (define_mode_iterator V48_256_512_AVX512VL
     301                 :       18826 :   [(V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL")
     302                 :       18918 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL")
     303                 :       20732 :    (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL")
     304                 :       16603 :    (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL")])
     305                 :        7814 : 
     306                 :       13191 : ;; All AVX-512{F,VL} vector modes. Supposed TARGET_AVX512F baseline.
     307                 :       18470 : (define_mode_iterator V48H_AVX512VL
     308                 :       16771 :   [(V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     309                 :      117770 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")
     310                 :      107595 :    (V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
     311                 :       57799 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     312                 :      113931 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     313                 :       23345 :    (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     314                 :       30050 :    (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     315                 :       30138 : 
     316                 :       48118 : ;; 1,2 byte AVX-512{BW,VL} vector modes. Supposed TARGET_AVX512BW baseline.
     317                 :       42364 : (define_mode_iterator VI12_AVX512VL
     318                 :       27342 :   [(V64QI "TARGET_EVEX512") (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")
     319                 :       33919 :    (V32HI "TARGET_EVEX512") (V16HI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")])
     320                 :       35110 : 
     321                 :       35918 : (define_mode_iterator VI12HFBF_AVX512VL
     322                 :       30265 :   [(V64QI "TARGET_EVEX512") (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")
     323                 :       49988 :    (V32HI "TARGET_EVEX512") (V16HI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")
     324                 :       53809 :    (V32HF "TARGET_EVEX512") (V16HF "TARGET_AVX512VL") (V8HF "TARGET_AVX512VL")
     325                 :       77479 :    (V32BF "TARGET_EVEX512") (V16BF "TARGET_AVX512VL") (V8BF "TARGET_AVX512VL")])
     326                 :       75202 : 
     327                 :      367690 : (define_mode_iterator VI1_AVX512VL
     328                 :       48767 :   [(V64QI "TARGET_EVEX512") (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")])
     329                 :       69338 : 
     330                 :       63833 : ;; All vector modes
     331                 :       62264 : (define_mode_iterator V
     332                 :       93154 :   [(V64QI "TARGET_AVX512F && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     333                 :     4457896 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI
     334                 :      203905 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX") V4SI
     335                 :      604290 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")  (V4DI "TARGET_AVX") V2DI
     336                 :      300048 :    (V32HF "TARGET_AVX512F && TARGET_EVEX512") (V16HF "TARGET_AVX") V8HF
     337                 :     7987758 :    (V32BF "TARGET_AVX512F && TARGET_EVEX512") (V16BF "TARGET_AVX") V8BF
     338                 :    14045303 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     339                 :    25190735 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")  (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     340                 :    37651305 : 
     341                 :    35765019 : ;; All 128bit vector modes
     342                 :    20408435 : (define_mode_iterator V_128
     343                 :       20359 :   [V16QI V8HI V8HF V8BF V4SI V2DI V4SF (V2DF "TARGET_SSE2")])
     344                 :     1566225 : 
     345                 :        7602 : ;; All 256bit vector modes
     346                 :     4222212 : (define_mode_iterator V_256
     347                 :       16647 :   [V32QI V16HI V8SI V4DI V8SF V4DF V16HF V16BF])
     348                 :       86217 : 
     349                 :     2045983 : ;; All 128bit and 256bit vector modes
     350                 :        9160 : (define_mode_iterator V_128_256
     351                 :        6578 :   [V32QI V16QI V16HI V8HI V8SI V4SI V4DI V2DI V2TI V1TI
     352                 :     2307863 :    V16HF V8HF V8SF V4SF V4DF V2DF])
     353                 :     2043549 : 
     354                 :        1736 : ;; All 512bit vector modes
     355                 :      253392 : (define_mode_iterator V_512
     356                 :       47214 :   [(V64QI "TARGET_EVEX512") (V32HI "TARGET_EVEX512")
     357                 :      164754 :    (V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")
     358                 :      275716 :    (V16SF "TARGET_EVEX512") (V8DF "TARGET_EVEX512")
     359                 :      262350 :    (V32HF "TARGET_EVEX512") (V32BF "TARGET_EVEX512")])
     360                 :     6398280 : 
     361                 :       88243 : ;; All 256bit and 512bit vector modes
     362                 :      248097 : (define_mode_iterator V_256_512
     363                 :      152432 :   [V32QI V16HI V16HF V16BF V8SI V4DI V8SF V4DF
     364                 :         809 :    (V64QI "TARGET_AVX512F && TARGET_EVEX512")
     365                 :         594 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512")
     366                 :      144260 :    (V32HF "TARGET_AVX512F && TARGET_EVEX512")
     367                 :      148293 :    (V32BF "TARGET_AVX512F && TARGET_EVEX512")
     368                 :        2919 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512")
     369                 :     6472823 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
     370                 :      123610 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")
     371                 :       44278 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")])
     372                 :      141522 : 
     373                 :      765753 : ;; All vector float modes
     374                 :       98278 : (define_mode_iterator VF
     375                 :       80508 :   [(V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     376                 :       97825 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512") (V4DF "TARGET_AVX")
     377                 :       83846 :    (V2DF "TARGET_SSE2")])
     378                 :      855842 : 
     379                 :      691402 : (define_mode_iterator VF1_VF2_AVX512DQ
     380                 :       12800 :   [(V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     381                 :       23941 :    (V8DF "TARGET_AVX512DQ && TARGET_EVEX512")
     382                 :       31202 :    (V4DF "TARGET_AVX512DQ && TARGET_AVX512VL")
     383                 :        1659 :    (V2DF "TARGET_AVX512DQ && TARGET_AVX512VL")])
     384                 :       16703 : 
     385                 :       20484 : (define_mode_iterator VF1_VF2_AVX10_2
     386                 :        2502 :   [(V16SF "TARGET_AVX10_2_512") V8SF V4SF
     387                 :        3649 :    (V8DF "TARGET_AVX10_2_512") V4DF V2DF])
     388                 :        2122 : 
     389                 :        6605 : (define_mode_iterator VFH
     390                 :        1256 :   [(V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
     391                 :        3683 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     392                 :       29951 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     393                 :       10501 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     394                 :       12166 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512") (V4DF "TARGET_AVX")
     395                 :       23846 :    (V2DF "TARGET_SSE2")])
     396                 :       18885 : 
     397                 :        8571 : (define_mode_iterator VF_BHSD
     398                 :      412099 :   [(V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
     399                 :      565749 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     400                 :      179024 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     401                 :        5134 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")
     402                 :        1589 :    (V8SF "TARGET_AVX") V4SF
     403                 :       10988 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")
     404                 :      129975 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")
     405                 :           0 :    (V32BF "TARGET_AVX10_2_512")
     406                 :        2576 :    (V16BF "TARGET_AVX10_2_256")
     407                 :        1043 :    (V8BF "TARGET_AVX10_2_256")
     408                 :        3083 :   ])
     409                 :         523 : 
     410                 :        2827 : ;; 128-, 256- and 512-bit float vector modes for bitwise operations
     411                 :        2261 : (define_mode_iterator VFB
     412                 :        2495 :   [(V32BF "TARGET_AVX512F && TARGET_EVEX512")
     413                 :         548 :    (V16BF "TARGET_AVX") (V8BF "TARGET_SSE2")
     414                 :          75 :    (V32HF "TARGET_AVX512F && TARGET_EVEX512")
     415                 :        2676 :    (V16HF "TARGET_AVX") (V8HF "TARGET_SSE2")
     416                 :         813 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
     417                 :         678 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")
     418                 :         712 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     419                 :        6747 : 
     420                 :        2598 : ;; 128- and 256-bit float vector modes
     421                 :      117232 : (define_mode_iterator VF_128_256
     422                 :       15016 :   [(V8SF "TARGET_AVX") V4SF
     423                 :      242249 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     424                 :      118940 : 
     425                 :      238326 : ;; 128- and 256-bit float vector modes for bitwise operations
     426                 :      229303 : (define_mode_iterator VFB_128_256
     427                 :      134268 :   [(V16BF "TARGET_AVX") (V8BF "TARGET_SSE2")
     428                 :      194250 :    (V16HF "TARGET_AVX") (V8HF "TARGET_SSE2")
     429                 :      113878 :    (V8SF "TARGET_AVX") V4SF
     430                 :        2614 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
     431                 :        3417 : 
     432                 :       62968 : ;; All SFmode vector float modes
     433                 :      461952 : (define_mode_iterator VF1
     434                 :      123794 :   [(V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF])
     435                 :      720643 : 
     436                 :     2692121 : (define_mode_iterator VF1_AVX2
     437                 :       38259 :   [(V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX2") V4SF])
     438                 :      474998 : 
     439                 :      125955 : ;; 128- and 256-bit SF vector modes
     440                 :        5403 : (define_mode_iterator VF1_128_256
     441                 :      471347 :   [(V8SF "TARGET_AVX") V4SF])
     442                 :     5756990 : 
     443                 :       35875 : (define_mode_iterator VF1_128_256VL
     444                 :      401118 :   [(V8SF "TARGET_EVEX512") (V4SF "TARGET_AVX512VL")])
     445                 :        5354 : 
     446                 :        6276 : ;; All DFmode vector float modes
     447                 :       26518 : (define_mode_iterator VF2
     448                 :     4896471 :   [(V8DF "TARGET_AVX512F && TARGET_EVEX512") (V4DF "TARGET_AVX") V2DF])
     449                 :        1526 : 
     450                 :       24379 : (define_mode_iterator VF2_AVX10_2
     451                 :       17283 :   [(V8DF "TARGET_AVX10_2_512") V4DF V2DF])
     452                 :         173 : 
     453                 :     4867182 : ;; All DFmode & HFmode & BFmode vector float modes
     454                 :        1330 : (define_mode_iterator VF2HB
     455                 :        5773 :   [(V32BF "TARGET_AVX10_2_512")
     456                 :        4684 :    (V16BF "TARGET_AVX10_2_256")
     457                 :        1089 :    (V8BF "TARGET_AVX10_2_256")
     458                 :        1089 :    (V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
     459                 :           0 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     460                 :           0 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     461                 :           0 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512") (V4DF "TARGET_AVX") V2DF])
     462                 :        1089 : 
     463                 :        1089 : ;; 128- and 256-bit DF vector modes
     464                 :        1089 : (define_mode_iterator VF2_128_256
     465                 :        1089 :   [(V4DF "TARGET_AVX") V2DF])
     466                 :        1089 : 
     467                 :             : (define_mode_iterator VF2_512_256
     468                 :        1372 :   [(V8DF "TARGET_AVX512F && TARGET_EVEX512") V4DF])
     469                 :         133 : 
     470                 :             : (define_mode_iterator VF2_512_256VL
     471                 :         863 :   [(V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL")])
     472                 :           2 : 
     473                 :         162 : ;; All 128bit vector SF/DF modes
     474                 :          81 : (define_mode_iterator VF_128
     475                 :             :   [V4SF (V2DF "TARGET_SSE2")])
     476                 :         719 : 
     477                 :         719 : ;; All 128bit vector HF/SF/DF modes
     478                 :         684 : (define_mode_iterator VFH_128
     479                 :         120 :   [(V8HF "TARGET_AVX512FP16")
     480                 :        9291 :    V4SF (V2DF "TARGET_SSE2")])
     481                 :         513 : 
     482                 :        6840 : ;; All 256bit vector float modes
     483                 :        2738 : (define_mode_iterator VF_256
     484                 :       31831 :   [V8SF V4DF])
     485                 :       18869 : 
     486                 :       10432 : ;; All 512bit vector float modes
     487                 :       16652 : (define_mode_iterator VF_512
     488                 :        2721 :   [(V16SF "TARGET_EVEX512") (V8DF "TARGET_EVEX512")])
     489                 :      223950 : 
     490                 :      160761 : ;; All 512bit vector float modes for bitwise operations
     491                 :        3972 : (define_mode_iterator VFB_512
     492                 :      133952 :   [(V32BF "TARGET_EVEX512")
     493                 :      230886 :    (V32HF "TARGET_EVEX512")
     494                 :      584832 :    (V16SF "TARGET_EVEX512")
     495                 :       10817 :    (V8DF "TARGET_EVEX512")])
     496                 :      142462 : 
     497                 :       40889 : (define_mode_iterator V24F_128
     498                 :       36783 :   [V4SF V8HF V8BF])
     499                 :      135388 : 
     500                 :       21501 : (define_mode_iterator VI48_AVX512VL
     501                 :       24273 :   [(V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     502                 :      184339 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     503                 :       21926 : 
     504                 :     3834798 : (define_mode_iterator VI1248_AVX512VLBW
     505                 :       17172 :   [(V64QI "TARGET_AVX512BW && TARGET_EVEX512")
     506                 :       44688 :    (V32QI "TARGET_AVX512VL && TARGET_AVX512BW")
     507                 :       46130 :    (V16QI "TARGET_AVX512VL && TARGET_AVX512BW")
     508                 :       21423 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512")
     509                 :       16777 :    (V16HI "TARGET_AVX512VL && TARGET_AVX512BW")
     510                 :     2071035 :    (V8HI "TARGET_AVX512VL && TARGET_AVX512BW")
     511                 :     1960653 :    (V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     512                 :     2386758 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     513                 :       38822 : 
     514                 :     1552663 : (define_mode_iterator VI1248_AVX10_2
     515                 :     1941126 :   [(V64QI "TARGET_AVX10_2_512") V32QI V16QI
     516                 :       74519 :    (V32HI "TARGET_AVX10_2_512") V16HI V8HI
     517                 :       11740 :    (V16SI "TARGET_AVX10_2_512") V8SI V4SI
     518                 :      303252 :    (V8DI "TARGET_AVX10_2_512") V4DI V2DI])
     519                 :       35415 : 
     520                 :       78601 : (define_mode_iterator VF_AVX512VL
     521                 :       11826 :   [(V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     522                 :        9113 :    (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     523                 :       14654 : 
     524                 :     2347881 : (define_mode_iterator VFH_AVX512VL
     525                 :     2072677 :   [(V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
     526                 :      265295 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     527                 :       14310 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
     528                 :       10006 :    (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
     529                 :       14546 :    (V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     530                 :       15575 : 
     531                 :     1907368 : (define_mode_iterator VFH_AVX10_2
     532                 :       23651 :   [(V32HF "TARGET_AVX10_2_512") V16HF V8HF
     533                 :      262837 :    (V16SF "TARGET_AVX10_2_512") V8SF V4SF
     534                 :     5733367 :    (V8DF "TARGET_AVX10_2_512") V4DF V2DF])
     535                 :       78478 : 
     536                 :       22939 : (define_mode_iterator VF2_AVX512VL
     537                 :       22186 :   [(V8DF "TARGET_EVEX512") (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
     538                 :       20215 : 
     539                 :     1393672 : (define_mode_iterator VF1_AVX512VL
     540                 :      157869 :   [(V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")])
     541                 :        4209 : 
     542                 :       35613 : (define_mode_iterator VF1_AVX512BW
     543                 :      211985 :   [(V16SF "TARGET_EVEX512 && TARGET_EVEX512") (V8SF "TARGET_AVX2") V4SF])
     544                 :        1691 : 
     545                 :       43704 : (define_mode_iterator VF1_AVX10_2
     546                 :     5802729 :   [(V16SF "TARGET_AVX10_2_512") V8SF V4SF])
     547                 :       12783 : 
     548                 :       27703 : (define_mode_iterator VHFBF
     549                 :        9857 :   [(V32HF "TARGET_EVEX512") V16HF V8HF
     550                 :        6226 :    (V32BF "TARGET_EVEX512") V16BF V8BF])
     551                 :       38946 : (define_mode_iterator VHFBF_256 [V16HF V16BF])
     552                 :        6459 : (define_mode_iterator VHFBF_128 [V8HF V8BF])
     553                 :       35362 : 
     554                 :      132397 : (define_mode_iterator VHF_AVX512VL
     555                 :       46729 :   [(V32HF "TARGET_EVEX512") (V16HF "TARGET_AVX512VL") (V8HF "TARGET_AVX512VL")])
     556                 :     5042273 : 
     557                 :        9490 : (define_mode_iterator VHFBF_AVX512VL
     558                 :        2057 :   [(V32HF "TARGET_EVEX512") (V16HF "TARGET_AVX512VL") (V8HF "TARGET_AVX512VL")
     559                 :      271071 :    (V32BF "TARGET_EVEX512") (V16BF "TARGET_AVX512VL") (V8BF "TARGET_AVX512VL")])
     560                 :      273396 : 
     561                 :      265914 : (define_mode_iterator VHF_AVX10_2
     562                 :      531990 :   [(V32HF "TARGET_AVX10_2_512") V16HF V8HF])
     563                 :        2147 : 
     564                 :       98353 : (define_mode_iterator VBF_AVX10_2
     565                 :      906069 :   [(V32BF "TARGET_AVX10_2_512") V16BF V8BF])
     566                 :        1311 : 
     567                 :        8040 : ;; All vector integer modes
     568                 :       48849 : (define_mode_iterator VI
     569                 :       98172 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512")
     570                 :       11691 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
     571                 :        3570 :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     572                 :       46422 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI
     573                 :        9580 :    (V8SI "TARGET_AVX") V4SI
     574                 :       30016 :    (V4DI "TARGET_AVX") V2DI])
     575                 :        3450 : 
     576                 :       47532 : ;; All vector integer and HF modes
     577                 :       12264 : (define_mode_iterator VIHFBF
     578                 :       39034 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512")
     579                 :       82180 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
     580                 :       38279 :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     581                 :       32523 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI
     582                 :        2403 :    (V8SI "TARGET_AVX") V4SI
     583                 :         137 :    (V4DI "TARGET_AVX") V2DI
     584                 :           0 :    (V32HF "TARGET_AVX512BW && TARGET_EVEX512") (V16HF "TARGET_AVX") V8HF
     585                 :           0 :    (V32BF "TARGET_AVX512BW && TARGET_EVEX512") (V16BF "TARGET_AVX") V8BF])
     586                 :       10718 : 
     587                 :       22146 : (define_mode_iterator VI_AVX2
     588                 :       12212 :   [(V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX2") V16QI
     589                 :       26856 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI
     590                 :       12433 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX2") V4SI
     591                 :        6374 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX2") V2DI])
     592                 :        1893 : 
     593                 :       57882 : (define_mode_iterator VI_AVX_AVX512F
     594                 :      627647 :   [(V64QI "TARGET_AVX512F && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     595                 :      541973 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI
     596                 :      171097 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX") V4SI
     597                 :        4008 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX") V2DI])
     598                 :        1603 : 
     599                 :         137 : ;; All QImode vector integer modes
     600                 :         133 : (define_mode_iterator VI1
     601                 :         133 :   [(V32QI "TARGET_AVX") V16QI])
     602                 :        1600 : 
     603                 :        4140 : ;; All DImode vector integer modes
     604                 :         270 : (define_mode_iterator V_AVX
     605                 :          64 :   [V16QI V8HI V4SI V2DI V1TI V4SF V2DF
     606                 :        1828 :    (V32QI "TARGET_AVX") (V16HI "TARGET_AVX")
     607                 :        1840 :    (V8SI "TARGET_AVX") (V4DI "TARGET_AVX") (V2TI "TARGET_AVX")
     608                 :        4090 :    (V8SF "TARGET_AVX") (V4DF"TARGET_AVX")])
     609                 :         124 : 
     610                 :           0 : (define_mode_iterator VI48_AVX
     611                 :         127 :  [V4SI V2DI
     612                 :       20363 :   (V8SI "TARGET_AVX") (V4DI "TARGET_AVX")])
     613                 :       16410 : 
     614                 :       36806 : (define_mode_iterator VI8
     615                 :          64 :   [(V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX") V2DI])
     616                 :          19 : 
     617                 :         121 : (define_mode_iterator VI8_AVX10_2
     618                 :         121 :   [(V8DI "TARGET_AVX10_2_512") V4DI V2DI])
     619                 :        1403 : 
     620                 :         129 : (define_mode_iterator VI8_FVL
     621                 :         247 :   [(V8DI "TARGET_AVX512F && TARGET_EVEX512") V4DI (V2DI "TARGET_AVX512VL")])
     622                 :     1817655 : 
     623                 :         688 : (define_mode_iterator VI8_AVX512VL
     624                 :     3380438 :   [(V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     625                 :        2630 : 
     626                 :         100 : (define_mode_iterator VI8_256_512
     627                 :     1578693 :   [(V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL")])
     628                 :     1817057 : 
     629                 :        8785 : (define_mode_iterator VI1_AVX2
     630                 :       12485 :   [(V32QI "TARGET_AVX2") V16QI])
     631                 :        8052 : 
     632                 :        5763 : (define_mode_iterator VI1_AVX512
     633                 :       87688 :   [(V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX2") V16QI])
     634                 :        3648 : 
     635                 :       12789 : (define_mode_iterator VI1_AVX512F
     636                 :       60408 :   [(V64QI "TARGET_AVX512F && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI])
     637                 :       31173 : 
     638                 :      108271 : (define_mode_iterator VI1_AVX512VNNI
     639                 :      121802 :   [(V64QI "TARGET_AVX512VNNI && TARGET_EVEX512") (V32QI "TARGET_AVX2") V16QI])
     640                 :       11424 : 
     641                 :       17741 : (define_mode_iterator VI1_AVX512VNNIBW
     642                 :       28430 :   [(V64QI "(TARGET_AVX512BW || TARGET_AVX512VNNI) && TARGET_EVEX512")
     643                 :       27005 :    (V32QI "TARGET_AVX2") V16QI])
     644                 :        4742 : 
     645                 :         183 : (define_mode_iterator VI12_256_512_AVX512VL
     646                 :        4095 :   [(V64QI "TARGET_EVEX512") (V32QI "TARGET_AVX512VL")
     647                 :         162 :    (V32HI "TARGET_EVEX512") (V16HI "TARGET_AVX512VL")])
     648                 :          24 : 
     649                 :         778 : (define_mode_iterator VI2_AVX2
     650                 :             :   [(V16HI "TARGET_AVX2") V8HI])
     651                 :         240 : 
     652                 :         240 : (define_mode_iterator VI2_AVX2_AVX512BW
     653                 :        2422 :   [(V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI])
     654                 :             : 
     655                 :             : (define_mode_iterator VI2_AVX512F
     656                 :             :   [(V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI])
     657                 :      119584 : 
     658                 :      115514 : (define_mode_iterator VI2_AVX512VNNIBW
     659                 :      132137 :   [(V32HI "(TARGET_AVX512BW || TARGET_AVX512VNNI) && TARGET_EVEX512")
     660                 :             :    (V16HI "TARGET_AVX2") V8HI])
     661                 :             : 
     662                 :             : (define_mode_iterator VI2_AVX10_2
     663                 :             :   [(V32HI "TARGET_AVX10_2_512") V16HI V8HI])
     664                 :             : 
     665                 :             : (define_mode_iterator VI4_AVX
     666                 :         122 :   [(V8SI "TARGET_AVX") V4SI])
     667                 :             : 
     668                 :             : (define_mode_iterator VI4_AVX2
     669                 :         583 :   [(V8SI "TARGET_AVX2") V4SI])
     670                 :        2007 : 
     671                 :        1951 : (define_mode_iterator VI4_AVX512F
     672                 :        4631 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX2") V4SI])
     673                 :        2042 : 
     674                 :         942 : (define_mode_iterator VI4_AVX512VL
     675                 :          62 :   [(V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")])
     676                 :       32639 : 
     677                 :       32639 : (define_mode_iterator VI4_AVX10_2
     678                 :       61079 :   [(V16SI "TARGET_AVX10_2_512") V8SI V4SI])
     679                 :        3199 : 
     680                 :        3199 : (define_mode_iterator VI48_AVX512F_AVX512VL
     681                 :        1562 :   [V4SI V8SI (V16SI "TARGET_AVX512F && TARGET_EVEX512")
     682                 :        1685 :    (V2DI "TARGET_AVX512VL") (V4DI "TARGET_AVX512VL")
     683                 :         370 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")])
     684                 :        4969 : 
     685                 :      270523 : (define_mode_iterator VI2_AVX512VL
     686                 :        1110 :   [(V8HI "TARGET_AVX512VL") (V16HI "TARGET_AVX512VL") (V32HI "TARGET_EVEX512")])
     687                 :        7083 : 
     688                 :        4993 : (define_mode_iterator VI2HFBF_AVX512VL
     689                 :        3948 :   [(V8HI "TARGET_AVX512VL") (V16HI "TARGET_AVX512VL") (V32HI "TARGET_EVEX512")
     690                 :        6261 :    (V8HF "TARGET_AVX512VL") (V16HF "TARGET_AVX512VL") (V32HF "TARGET_EVEX512")
     691                 :      104038 :    (V8BF "TARGET_AVX512VL") (V16BF "TARGET_AVX512VL") (V32BF "TARGET_EVEX512")])
     692                 :       93602 : 
     693                 :       91382 : (define_mode_iterator VI2H_AVX512VL
     694                 :       13855 :   [(V8HI "TARGET_AVX512VL") (V16HI "TARGET_AVX512VL") (V32HI "TARGET_EVEX512")
     695                 :       74931 :    (V8SI "TARGET_AVX512VL") (V16SI "TARGET_EVEX512")
     696                 :       10268 :    (V8DI "TARGET_EVEX512")])
     697                 :      269413 : 
     698                 :        2604 : (define_mode_iterator VI1_AVX512VL_F
     699                 :       11165 :   [V32QI (V16QI "TARGET_AVX512VL") (V64QI "TARGET_AVX512F && TARGET_EVEX512")])
     700                 :        6340 : 
     701                 :        6455 : (define_mode_iterator VI8_AVX2_AVX512BW
     702                 :        3424 :   [(V8DI "TARGET_AVX512BW && TARGET_EVEX512") (V4DI "TARGET_AVX2") V2DI])
     703                 :        8011 : 
     704                 :        2558 : (define_mode_iterator VI8_AVX2
     705                 :        3659 :   [(V4DI "TARGET_AVX2") V2DI])
     706                 :        1239 : 
     707                 :       40315 : (define_mode_iterator VI8_AVX2_AVX512F
     708                 :       62423 :   [(V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX2") V2DI])
     709                 :          22 : 
     710                 :        4086 : (define_mode_iterator VI8_AVX_AVX512F
     711                 :         395 :   [(V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX")])
     712                 :        8934 : 
     713                 :        6434 : (define_mode_iterator VI4_128_8_256
     714                 :         290 :   [V4SI V4DI])
     715                 :         639 : 
     716                 :         270 : ;; All V8D* modes
     717                 :         715 : (define_mode_iterator V8FI
     718                 :         150 :   [(V8DF "TARGET_EVEX512") (V8DI "TARGET_EVEX512")])
     719                 :        3058 : 
     720                 :        8726 : ;; All V16S* modes
     721                 :        1087 : (define_mode_iterator V16FI
     722                 :        2146 :   [(V16SF "TARGET_EVEX512") (V16SI "TARGET_EVEX512")])
     723                 :      157302 : 
     724                 :      388996 : ;; ??? We should probably use TImode instead.
     725                 :      344997 : (define_mode_iterator VIMAX_AVX2_AVX512BW
     726                 :      275663 :   [(V4TI "TARGET_AVX512BW && TARGET_EVEX512") (V2TI "TARGET_AVX2") V1TI])
     727                 :      605345 : 
     728                 :      183671 : ;; Suppose TARGET_AVX512BW as baseline
     729                 :      295903 : (define_mode_iterator VIMAX_AVX512VL
     730                 :      421713 :   [(V4TI "TARGET_EVEX512") (V2TI "TARGET_AVX512VL") (V1TI "TARGET_AVX512VL")])
     731                 :      323939 : 
     732                 :      433468 : (define_mode_iterator VIMAX_AVX2
     733                 :      447371 :   [(V2TI "TARGET_AVX2") V1TI])
     734                 :       14620 : 
     735                 :       62653 : (define_mode_iterator VI12_AVX2
     736                 :         699 :   [(V32QI "TARGET_AVX2") V16QI
     737                 :        7220 :    (V16HI "TARGET_AVX2") V8HI])
     738                 :       22239 : 
     739                 :        9346 : (define_mode_iterator VI12_AVX2_AVX512BW
     740                 :       10731 :   [(V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX2") V16QI
     741                 :       13503 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI])
     742                 :      189065 : 
     743                 :    15378886 : (define_mode_iterator VI24_AVX2
     744                 :        2485 :   [(V16HI "TARGET_AVX2") V8HI
     745                 :      190153 :    (V8SI "TARGET_AVX2") V4SI])
     746                 :       10280 : 
     747                 :        4753 : (define_mode_iterator VI124_AVX2_24_AVX512F_1_AVX512BW
     748                 :        3906 :   [(V64QI "TARGET_AVX512BW && TARGET_EVEX512") (V32QI "TARGET_AVX2") V16QI
     749                 :     1548018 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI
     750                 :      230862 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX2") V4SI])
     751                 :       35660 : 
     752                 :        1292 : (define_mode_iterator VI124_AVX2
     753                 :      101146 :   [(V32QI "TARGET_AVX2") V16QI
     754                 :        1013 :    (V16HI "TARGET_AVX2") V8HI
     755                 :    13918162 :    (V8SI "TARGET_AVX2") V4SI])
     756                 :        5269 : 
     757                 :       66726 : (define_mode_iterator VI248_AVX512VL
     758                 :       61118 :   [(V32HI "TARGET_EVEX512") (V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")
     759                 :       61148 :    (V16HI "TARGET_AVX512VL") (V8SI "TARGET_AVX512VL")
     760                 :         417 :    (V4DI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")
     761                 :        2962 :    (V4SI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     762                 :           0 : 
     763                 :       12166 : (define_mode_iterator VI248_AVX512VLBW
     764                 :        7258 :   [(V32HI "TARGET_AVX512BW && TARGET_EVEX512")
     765                 :        8922 :    (V16HI "TARGET_AVX512VL && TARGET_AVX512BW")
     766                 :        5027 :    (V8HI "TARGET_AVX512VL && TARGET_AVX512BW")
     767                 :        2205 :    (V16SI "TARGET_EVEX512") (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL")
     768                 :        2348 :    (V8DI "TARGET_EVEX512") (V4DI "TARGET_AVX512VL") (V2DI "TARGET_AVX512VL")])
     769                 :        1481 : 
     770                 :         799 : (define_mode_iterator VI48_AVX2
     771                 :       60982 :   [(V8SI "TARGET_AVX2") V4SI
     772                 :         735 :    (V4DI "TARGET_AVX2") V2DI])
     773                 :         628 : 
     774                 :        1131 : (define_mode_iterator VI248_AVX2
     775                 :         195 :   [(V16HI "TARGET_AVX2") V8HI
     776                 :         612 :    (V8SI "TARGET_AVX2") V4SI
     777                 :        2590 :    (V4DI "TARGET_AVX2") V2DI])
     778                 :        1939 : 
     779                 :       10513 : (define_mode_iterator VI248_AVX2_8_AVX512F_24_AVX512BW
     780                 :       55989 :   [(V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16HI "TARGET_AVX2") V8HI
     781                 :         361 :    (V16SI "TARGET_AVX512BW && TARGET_EVEX512") (V8SI "TARGET_AVX2") V4SI
     782                 :         652 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX2") V2DI])
     783                 :           0 : 
     784                 :         305 : (define_mode_iterator VI248_AVX512BW
     785                 :        4804 :   [(V32HI "TARGET_AVX512BW && TARGET_EVEX512") (V16SI "TARGET_EVEX512")
     786                 :        2506 :    (V8DI "TARGET_EVEX512")])
     787                 :        3760 : 
     788                 :        3849 : (define_mode_iterator VI248_AVX512BW_AVX512VL
     789                 :        8171 :   [(V32HI "TARGET_AVX512BW && TARGET_EVEX512") 
     790                 :        2379 :    (V4DI "TARGET_AVX512VL") (V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")])
     791                 :         477 : 
     792                 :        4738 : ;; Suppose TARGET_AVX512VL as baseline
     793                 :        3496 : (define_mode_iterator VI248_AVX512BW_1
     794                 :        6224 :  [(V16HI "TARGET_AVX512BW") (V8HI "TARGET_AVX512BW")
     795                 :       53936 :   V8SI V4SI
     796                 :       61397 :   V2DI])
     797                 :       53184 :    
     798                 :        6396 : (define_mode_iterator VI248_AVX512BW_2
     799                 :        5660 :  [(V16HI "TARGET_AVX512BW") (V8HI "TARGET_AVX512BW")
     800                 :       52858 :   V8SI V4SI
     801                 :       57095 :   V4DI V2DI])
     802                 :         800 :    
     803                 :       51248 : (define_mode_iterator VI48_AVX512F
     804                 :       50699 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512") V8SI V4SI
     805                 :        1587 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512") V4DI V2DI])
     806                 :        1046 : 
     807                 :           1 : (define_mode_iterator VI48_AVX_AVX512F
     808                 :       18032 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512") (V8SI "TARGET_AVX") V4SI
     809                 :       16219 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512") (V4DI "TARGET_AVX") V2DI])
     810                 :      396029 : 
     811                 :      342097 : (define_mode_iterator VI12_AVX_AVX512F
     812                 :      388668 :   [(V64QI "TARGET_AVX512F && TARGET_EVEX512") (V32QI "TARGET_AVX") V16QI
     813                 :      254233 :    (V32HI "TARGET_AVX512F && TARGET_EVEX512") (V16HI "TARGET_AVX") V8HI])
     814                 :      628465 : 
     815                 :      290074 : (define_mode_iterator V48_128_256
     816                 :      288500 :   [V4SF V2DF
     817                 :      288500 :    V4DI V2DI
     818                 :      400082 :    V8SF V4DF
     819                 :       95034 :    V8SI V4SI])
     820                 :        9631 : 
     821                 :        9631 : 
     822                 :        9631 : (define_mode_iterator VF4_128_8_256
     823                 :        7714 :   [V4DF V4SF])
     824                 :        1917 : 
     825                 :        2665 : (define_mode_attr avx512
     826                 :        2665 :   [(V16QI "avx512vl") (V32QI "avx512vl") (V64QI "avx512bw")
     827                 :         701 :    (V8HI  "avx512vl") (V16HI  "avx512vl") (V32HI "avx512bw")
     828                 :        1249 :    (V4SI  "avx512vl") (V8SI  "avx512vl") (V16SI "avx512f")
     829                 :         829 :    (V2DI  "avx512vl") (V4DI  "avx512vl") (V8DI "avx512f")
     830                 :         829 :    (V8HF "avx512fp16") (V16HF "avx512vl") (V32HF "avx512bw")
     831                 :         829 :    (V8BF "avx512vl") (V16BF "avx512vl") (V32BF "avx512bw")
     832                 :         829 :    (V4SF "avx512vl") (V8SF "avx512vl") (V16SF "avx512f")
     833                 :         829 :    (V2DF "avx512vl") (V4DF "avx512vl") (V8DF "avx512f")])
     834                 :         829 : 
     835                 :         829 : (define_mode_attr v_Yw
     836                 :         829 :   [(V16QI "Yw") (V32QI "Yw") (V64QI "v")
     837                 :             :    (V8HI "Yw") (V16HI "Yw") (V32HI "v")
     838                 :         202 :    (V4SI "v") (V8SI "v") (V16SI "v")
     839                 :         202 :    (V2DI "v") (V4DI "v") (V8DI "v")
     840                 :             :    (V4SF "v") (V8SF "v") (V16SF "v")
     841                 :         139 :    (V2DF "v") (V4DF "v") (V8DF "v")
     842                 :             :    (TI "Yw") (V1TI "Yw") (V2TI "Yw") (V4TI "v")])
     843                 :          77 : 
     844                 :          77 : (define_mode_attr sse2_avx_avx512f
     845                 :          77 :   [(V16QI "sse2") (V32QI "avx") (V64QI "avx512f")
     846                 :             :    (V8HI  "avx512vl") (V16HI  "avx512vl") (V32HI "avx512bw")
     847                 :             :    (V4SI  "sse2") (V8SI  "avx") (V16SI "avx512f")
     848                 :             :    (V2DI  "avx512vl") (V4DI  "avx512vl") (V8DI "avx512f")
     849                 :             :    (V16SF "avx512f") (V8SF "avx") (V4SF "avx")
     850                 :             :    (V8DF "avx512f") (V4DF "avx") (V2DF "avx")])
     851                 :             : 
     852                 :             : (define_mode_attr sse2_avx2
     853                 :             :   [(V16QI "sse2") (V32QI "avx2") (V64QI "avx512bw")
     854                 :             :    (V8HI "sse2") (V16HI "avx2") (V32HI "avx512bw")
     855                 :             :    (V4SI "sse2") (V8SI "avx2") (V16SI "avx512f")
     856                 :             :    (V2DI "sse2") (V4DI "avx2") (V8DI "avx512f")
     857                 :             :    (V1TI "sse2") (V2TI "avx2") (V4TI "avx512bw")])
     858                 :             : 
     859                 :             : (define_mode_attr ssse3_avx2
     860                 :             :    [(V16QI "ssse3") (V32QI "avx2") (V64QI "avx512bw")
     861                 :             :     (V4HI "ssse3") (V8HI "ssse3") (V16HI "avx2") (V32HI "avx512bw")
     862                 :             :     (V4SI "ssse3") (V8SI "avx2")
     863                 :             :     (V2DI "ssse3") (V4DI "avx2")
     864                 :             :     (V1TI "ssse3") (V2TI "avx2") (V4TI "avx512bw")])
     865                 :             : 
     866                 :             : (define_mode_attr sse4_1_avx2
     867                 :             :    [(V16QI "sse4_1") (V32QI "avx2") (V64QI "avx512bw")
     868                 :             :     (V8HI "sse4_1") (V16HI "avx2") (V32HI "avx512bw")
     869                 :             :     (V4SI "sse4_1") (V8SI "avx2") (V16SI "avx512f")
     870                 :             :     (V2DI "sse4_1") (V4DI "avx2") (V8DI "avx512dq")])
     871                 :             : 
     872                 :             : (define_mode_attr avx_avx2
     873                 :             :   [(V4SF "avx") (V2DF "avx")
     874                 :             :    (V8SF "avx") (V4DF "avx")
     875                 :             :    (V4SI "avx2") (V2DI "avx2")
     876                 :             :    (V8SI "avx2") (V4DI "avx2")])
     877                 :             : 
     878                 :             : (define_mode_attr vec_avx2
     879                 :             :   [(V16QI "vec") (V32QI "avx2")
     880                 :             :    (V8HI "vec") (V16HI "avx2")
     881                 :             :    (V4SI "vec") (V8SI "avx2")
     882                 :             :    (V2DI "vec") (V4DI "avx2")])
     883                 :             : 
     884                 :             : (define_mode_attr avx2_avx512
     885                 :             :   [(V4SI "avx2") (V8SI "avx2") (V16SI "avx512f")
     886                 :             :    (V2DI "avx2") (V4DI "avx2") (V8DI "avx512f")
     887                 :             :    (V4SF "avx2") (V8SF "avx2") (V16SF "avx512f")
     888                 :             :    (V2DF "avx2") (V4DF "avx2") (V8DF "avx512f")
     889                 :             :    (V8HI "avx512vl") (V16HI "avx512vl") (V32HI "avx512bw")])
     890                 :             : 
     891                 :             : (define_mode_attr shuffletype
     892                 :             :   [(V32HF "i") (V16HF "i") (V8HF "i")
     893                 :             :    (V32BF "i") (V16BF "i") (V8BF "i")
     894                 :             :    (V16SF "f") (V16SI "i") (V8DF "f") (V8DI "i")
     895                 :             :    (V8SF "f") (V8SI "i") (V4DF "f") (V4DI "i")
     896                 :             :    (V4SF "f") (V4SI "i") (V2DF "f") (V2DI "i")
     897                 :             :    (V32HI "i") (V16HI "i") (V8HI "i")
     898                 :             :    (V64QI "i") (V32QI "i") (V16QI "i")
     899                 :             :    (V4TI "i") (V2TI "i") (V1TI "i")])
     900                 :             : 
     901                 :             : (define_mode_attr ssequartermode
     902                 :             :   [(V16SF "V4SF") (V8DF "V2DF") (V16SI "V4SI") (V8DI "V2DI")])
     903                 :             : 
     904                 :             : (define_mode_attr ssequarterinsnmode
     905                 :             :   [(V16SF "V4SF") (V8DF "V2DF") (V16SI "TI") (V8DI "TI")])
     906                 :             : 
     907                 :             : (define_mode_attr vecmemsuffix
     908                 :             :   [(V32HF "{z}") (V16HF "{y}") (V8HF "{x}")
     909                 :             :    (V32BF "{z}") (V16BF "{y}") (V8BF "{x}")
     910                 :             :    (V16SF "{z}") (V8SF "{y}") (V4SF "{x}")
     911                 :             :    (V8DF "{z}") (V4DF "{y}") (V2DF "{x}")])
     912                 :             : 
     913                 :             : (define_mode_attr ssedoublemodelower
     914                 :             :   [(V16QI "v16hi") (V32QI "v32hi") (V64QI "v64hi")
     915                 :             :    (V8HI "v8si")   (V16HI "v16si") (V32HI "v32si")
     916                 :             :    (V4SI "v4di")   (V8SI "v8di")   (V16SI "v16di")])
     917                 :             : 
     918                 :             : ;; Map vector mode to the same number of double sized elements.
     919                 :             : (define_mode_attr ssedoublemode
     920                 :             :   [(V4SF "V4DF") (V8SF "V8DF") (V16SF "V16DF")
     921                 :             :    (V16QI "V16HI") (V32QI "V32HI") (V64QI "V64HI")
     922                 :             :    (V8HI "V8SI") (V16HI "V16SI") (V32HI "V32SI")
     923                 :             :    (V4SI "V4DI") (V8SI "V8DI") (V16SI "V16DI")])
     924                 :             : 
     925                 :             : (define_mode_attr ssebytemode
     926                 :             :   [(V8DI "V64QI") (V4DI "V32QI") (V2DI "V16QI")
     927                 :             :    (V16SI "V64QI") (V8SI "V32QI") (V4SI "V16QI")
     928                 :             :    (V8HI "V16QI")])
     929                 :             : 
     930                 :             : (define_mode_attr sseintconvert
     931                 :             :   [(V32HI "w") (V16HI "w") (V8HI "w")
     932                 :             :    (V16SI "dq") (V8SI "dq") (V4SI "dq")
     933                 :             :    (V8DI "qq") (V4DI "qq") (V2DI "qq")])
     934                 :             : 
     935                 :             : ;; All 128bit vector integer modes
     936                 :             : (define_mode_iterator VI_128 [V16QI V8HI V4SI V2DI])
     937                 :             : 
     938                 :             : ;; All 256bit vector integer modes
     939                 :             : (define_mode_iterator VI_256 [V32QI V16HI V8SI V4DI])
     940                 :             : 
     941                 :             : ;; All 128 and 256bit vector integer modes
     942                 :             : (define_mode_iterator VI_128_256 [V16QI V8HI V4SI V2DI V32QI V16HI V8SI V4DI])
     943                 :             : ;; All 256bit vector integer and HF modes
     944                 :             : (define_mode_iterator VIHFBF_256 [V32QI V16HI V8SI V4DI V16HF V16BF])
     945                 :             : 
     946                 :             : ;; Various 128bit vector integer mode combinations
     947                 :             : (define_mode_iterator VI12_128 [V16QI V8HI])
     948                 :             : (define_mode_iterator VI14_128 [V16QI V4SI])
     949                 :             : (define_mode_iterator VI124_128 [V16QI V8HI V4SI])
     950                 :             : (define_mode_iterator VI24_128 [V8HI V4SI])
     951                 :             : (define_mode_iterator VI248_128 [V8HI V4SI V2DI])
     952                 :             : (define_mode_iterator VI248_256 [V16HI V8SI V4DI])
     953                 :             : (define_mode_iterator VI248_512
     954                 :           2 :   [(V32HI "TARGET_EVEX512") (V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")])
     955                 :             : (define_mode_iterator VI48_128 [V4SI V2DI])
     956                 :             : (define_mode_iterator VI148_512
     957                 :          12 :   [(V64QI "TARGET_EVEX512") (V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")])
     958                 :           2 : (define_mode_iterator VI148_256 [V32QI V8SI V4DI])
     959                 :           2 : (define_mode_iterator VI148_128 [V16QI V4SI V2DI])
     960                 :             : 
     961                 :           4 : ;; Various 256bit and 512 vector integer mode combinations
     962                 :           4 : (define_mode_iterator VI124_256 [V32QI V16HI V8SI])
     963                 :             : (define_mode_iterator VI124_256_AVX512F_AVX512BW
     964                 :             :   [V32QI V16HI V8SI
     965                 :             :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512")
     966                 :             :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512")
     967                 :             :    (V16SI "TARGET_AVX512F && TARGET_EVEX512")])
     968                 :             : (define_mode_iterator VI48_256 [V8SI V4DI])
     969                 :             : (define_mode_iterator VI48_512
     970                 :             :   [(V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")])
     971                 :             : (define_mode_iterator VI4_256_8_512 [V8SI V8DI])
     972                 :             : (define_mode_iterator VI_AVX512BW
     973                 :             :   [(V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")
     974                 :             :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512")
     975                 :             :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512")])
     976                 :             : (define_mode_iterator VIHFBF_AVX512BW
     977                 :           0 :   [(V16SI "TARGET_EVEX512") (V8DI "TARGET_EVEX512")
     978                 :           0 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512")
     979                 :           0 :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512")
     980                 :           0 :    (V32HF "TARGET_AVX512BW && TARGET_EVEX512")
     981                 :           0 :    (V32BF "TARGET_AVX512BW && TARGET_EVEX512")])
     982                 :             : 
     983                 :             : ;; Int-float size matches
     984                 :             : (define_mode_iterator VI2F_256_512
     985                 :         119 :   [V16HI (V32HI "TARGET_EVEX512")
     986                 :         119 :    V16HF (V32HF "TARGET_EVEX512")
     987                 :         350 :    V16BF (V32BF "TARGET_EVEX512")])
     988                 :         652 : (define_mode_iterator VI4F_128 [V4SI V4SF])
     989                 :         661 : (define_mode_iterator VI8F_128 [V2DI V2DF])
     990                 :         539 : (define_mode_iterator VI4F_256 [V8SI V8SF])
     991                 :         295 : (define_mode_iterator VI8F_256 [V4DI V4DF])
     992                 :         195 : (define_mode_iterator VI4F_256_512
     993                 :         120 :   [V8SI V8SF
     994                 :         303 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512")
     995                 :         341 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")])
     996                 :           0 : (define_mode_iterator VI48F_256_512
     997                 :           0 :   [V8SI V8SF
     998                 :         852 :   (V16SI "TARGET_AVX512F && TARGET_EVEX512")
     999                 :         690 :   (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    1000                 :        1079 :   (V8DI "TARGET_AVX512F && TARGET_EVEX512")
    1001                 :         980 :   (V8DF "TARGET_AVX512F && TARGET_EVEX512")
    1002                 :         464 :   (V4DI "TARGET_AVX512VL") (V4DF  "TARGET_AVX512VL")])
    1003                 :         464 : (define_mode_iterator VF48H_AVX512VL
    1004                 :         994 :   [(V8DF "TARGET_EVEX512") (V16SF "TARGET_EVEX512") (V8SF "TARGET_AVX512VL")])
    1005                 :        1380 : 
    1006                 :        1514 : (define_mode_iterator VF48_128
    1007                 :        1211 :   [V2DF V4SF])
    1008                 :         867 : 
    1009                 :        4904 : (define_mode_iterator VI48F
    1010                 :        9954 :   [(V16SI "TARGET_EVEX512") (V16SF "TARGET_EVEX512")
    1011                 :        5371 :    (V8DI "TARGET_EVEX512") (V8DF "TARGET_EVEX512")
    1012                 :        3423 :    (V8SI "TARGET_AVX512VL") (V8SF "TARGET_AVX512VL")
    1013                 :        2346 :    (V4DI "TARGET_AVX512VL") (V4DF "TARGET_AVX512VL")
    1014                 :        2763 :    (V4SI "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
    1015                 :        3908 :    (V2DI "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
    1016                 :        5866 : (define_mode_iterator VI12_VI48F_AVX512VL
    1017                 :        4472 :   [(V16SI "TARGET_AVX512F && TARGET_EVEX512")
    1018                 :        3946 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    1019                 :        5574 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
    1020                 :        6415 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")
    1021                 :        3904 :    (V8SI "TARGET_AVX512VL") (V8SF "TARGET_AVX512VL")
    1022                 :        1731 :    (V4DI "TARGET_AVX512VL") (V4DF "TARGET_AVX512VL")
    1023                 :        2829 :    (V4SI "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
    1024                 :        2709 :    (V2DI "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")
    1025                 :        1497 :    (V64QI "TARGET_EVEX512") (V16QI "TARGET_AVX512VL") (V32QI "TARGET_AVX512VL")
    1026                 :        1293 :    (V32HI "TARGET_EVEX512") (V16HI "TARGET_AVX512VL") (V8HI "TARGET_AVX512VL")])
    1027                 :         621 : 
    1028                 :         186 : (define_mode_iterator VI48F_256 [V8SI V8SF V4DI V4DF])
    1029                 :         264 : 
    1030                 :         537 : (define_mode_iterator V8_128 [V8HI V8HF V8BF])
    1031                 :         358 : (define_mode_iterator V16_256 [V16HI V16HF V16BF])
    1032                 :           0 : (define_mode_iterator V32_512
    1033                 :           0 :  [(V32HI "TARGET_EVEX512") (V32HF "TARGET_EVEX512") (V32BF "TARGET_EVEX512")])
    1034                 :           4 : 
    1035                 :       42800 : ;; Mapping from float mode to required SSE level
    1036                 :       42800 : (define_mode_attr sse
    1037                 :      299260 :   [(SF "sse") (DF "sse2") (HF "avx512fp16")
    1038                 :        6488 :    (V4SF "sse") (V2DF "sse2")
    1039                 :       48977 :    (V32BF "avx512bf16") (V16BF "avx512bf16")
    1040                 :        6177 :    (V8BF "avx512bf16")
    1041                 :        6323 :    (V32HF "avx512fp16") (V16HF "avx512fp16")
    1042                 :      244323 :    (V8HF "avx512fp16")
    1043                 :       42790 :    (V16SF "avx512f") (V8SF "avx")
    1044                 :       69038 :    (V8DF "avx512f") (V4DF "avx")])
    1045                 :           4 : 
    1046                 :       42790 : (define_mode_attr sse2
    1047                 :         288 :   [(V16QI "sse2") (V32QI "avx") (V64QI "avx512f")
    1048                 :       26250 :    (V2DI "sse2") (V4DI "avx") (V8DI "avx512f")])
    1049                 :           6 : 
    1050                 :         290 : (define_mode_attr sse3
    1051                 :       26248 :   [(V16QI "sse3") (V32QI "avx")])
    1052                 :     1848616 : 
    1053                 :         292 : (define_mode_attr sse4_1
    1054                 :          85 :   [(V4SF "sse4_1") (V2DF "sse4_1")
    1055                 :     1849768 :    (V8SF "avx") (V4DF "avx")
    1056                 :         288 :    (V8DF "avx512f")
    1057                 :     1848325 :    (V2TI "avx") (V1TI "sse4_1")
    1058                 :           4 :    (V4DI "avx") (V2DI "sse4_1")
    1059                 :         292 :    (V8SI "avx") (V4SI "sse4_1")
    1060                 :     1685466 :    (V16QI "sse4_1") (V32QI "avx")
    1061                 :     1685754 :    (V8HI "sse4_1") (V16HI "avx")])
    1062                 :        1440 : 
    1063                 :     1684314 : (define_mode_attr avxsizesuffix
    1064                 :        1440 :   [(V64QI "512") (V32HI "512") (V16SI "512") (V8DI "512") (V4TI "512")
    1065                 :        1152 :    (V32QI "256") (V16HI "256") (V8SI "256") (V4DI "256") (V2TI "256")
    1066                 :      957529 :    (V16QI "") (V8HI "") (V4SI "") (V2DI "") (V1TI "")
    1067                 :      957241 :    (V32HF "512") (V16SF "512") (V8DF "512")
    1068                 :        1440 :    (V16HF "256") (V8SF "256") (V4DF "256")
    1069                 :        1440 :    (V8HF "") (V4SF "") (V2DF "")])
    1070                 :             : 
    1071                 :      379381 : ;; SSE instruction mode
    1072                 :      378229 : (define_mode_attr sseinsnmode
    1073                 :      377941 :   [(V64QI "XI") (V32HI "XI") (V16SI "XI") (V8DI "XI") (V4TI "XI")
    1074                 :        1440 :    (V32QI "OI") (V16HI "OI") (V8SI "OI") (V4DI "OI") (V2TI "OI")
    1075                 :        1440 :    (V16QI "TI") (V8HI "TI") (V4SI "TI") (V2DI "TI") (V1TI "TI")
    1076                 :             :    (V16SF "V16SF") (V8DF "V8DF")
    1077                 :        1007 :    (V8SF "V8SF") (V4DF "V4DF")
    1078                 :      146234 :    (V4SF "V4SF") (V2DF "V2DF")
    1079                 :      145946 :    (V8HF "TI") (V16HF "OI") (V32HF "XI")
    1080                 :         602 :    (V8BF "TI") (V16BF "OI") (V32BF "XI")
    1081                 :         890 :    (TI "TI")])
    1082                 :             : 
    1083                 :      185920 : (define_mode_attr sseintvecinsnmode
    1084                 :      185920 :   [(V64QI "XI") (V32HI "XI") (V16SI "XI") (V8DI "XI") (V4TI "XI")
    1085                 :      185632 :    (V32QI "OI") (V16HI "OI") (V8SI "OI") (V4DI "OI") (V2TI "OI")
    1086                 :         288 :    (V16QI "TI") (V8HI "TI") (V4SI "TI") (V2DI "TI") (V1TI "TI")
    1087                 :         288 :    (V16SF "XI") (V8DF "XI")
    1088                 :             :    (V8SF "OI") (V4DF "OI")
    1089                 :        1646 :    (V4SF "TI") (V2DF "TI")
    1090                 :        1358 :    (TI "TI")])
    1091                 :        1646 : 
    1092                 :             : ;; SSE constant -1 constraint
    1093                 :         288 : (define_mode_attr sseconstm1
    1094                 :             :   [(V64QI "BC") (V32HI "BC") (V16SI "BC") (V8DI "BC") (V4TI "BC")
    1095                 :       16484 :    (V32QI "BC") (V16HI "BC") (V8SI "BC") (V4DI "BC") (V2TI "BC")
    1096                 :       16484 :    (V16QI "BC") (V8HI "BC") (V4SI "BC") (V2DI "BC") (V1TI "BC")
    1097                 :       16548 :    (V32HF "BF") (V32BF "BF") (V16SF "BF") (V8DF "BF")
    1098                 :             :    (V16HF "BF") (V16BF "BF") (V8SF "BF") (V4DF "BF")
    1099                 :             :    (V8HF "BF") (V8BF "BF") (V4SF "BF") (V2DF "BF")])
    1100                 :             : 
    1101                 :             : ;; SSE integer instruction suffix for various modes
    1102                 :             : (define_mode_attr sseintmodesuffix
    1103                 :             :   [(V16QI "b") (V8HI "w") (V4SI "d") (V2DI "q")
    1104                 :      598481 :    (V32QI "b") (V16HI "w") (V8SI "d") (V4DI "q")
    1105                 :      598481 :    (V64QI "b") (V32HI "w") (V16SI "d") (V8DI "q")
    1106                 :             :    (V8HF "w") (V16HF "w") (V32HF "w")
    1107                 :      598481 :    (V8BF "w") (V16BF "w") (V32BF "w")])
    1108                 :      598481 : 
    1109                 :      598481 : ;; Mapping of vector modes to corresponding mask size
    1110                 :      598481 : (define_mode_attr avx512fmaskmode
    1111                 :             :   [(V64QI "DI") (V32QI "SI") (V16QI "HI")
    1112                 :      598481 :    (V32HI "SI") (V16HI "HI") (V8HI  "QI") (V4HI "QI")
    1113                 :             :    (V16SI "HI") (V8SI  "QI") (V4SI  "QI")
    1114                 :        5020 :    (V8DI  "QI") (V4DI  "QI") (V2DI  "QI")
    1115                 :        5020 :    (V32HF "SI") (V16HF "HI") (V8HF  "QI")
    1116                 :        9942 :    (V32BF "SI") (V16BF "HI") (V8BF  "QI")
    1117                 :             :    (V16SF "HI") (V8SF  "QI") (V4SF  "QI")
    1118                 :             :    (V8DF  "QI") (V4DF  "QI") (V2DF  "QI")])
    1119                 :             : 
    1120                 :             : ;; Mapping of vector modes to corresponding complex mask size
    1121                 :             : (define_mode_attr avx512fmaskcmode
    1122                 :             :   [(V32HF "HI") (V16HF "QI") (V8HF  "QI")])
    1123                 :             : 
    1124                 :             : ;; Mapping of vector modes to corresponding mask size
    1125                 :             : (define_mode_attr avx512fmaskmodelower
    1126                 :             :   [(V64QI "di") (V32QI "si") (V16QI "hi")
    1127                 :             :    (V32HI "si") (V16HI "hi") (V8HI  "qi") (V4HI "qi")
    1128                 :             :    (V16SI "hi") (V8SI  "qi") (V4SI  "qi")
    1129                 :             :    (V8DI  "qi") (V4DI  "qi") (V2DI  "qi")
    1130                 :             :    (V32HF "si") (V16HF "hi") (V8HF  "qi")
    1131                 :             :    (V32BF "si") (V16BF "hi") (V8BF  "qi")
    1132                 :             :    (V16SF "hi") (V8SF  "qi") (V4SF  "qi")
    1133                 :             :    (V8DF  "qi") (V4DF  "qi") (V2DF  "qi")])
    1134                 :             : 
    1135                 :             : ;; Mapping of vector modes to corresponding mask half size
    1136                 :             : (define_mode_attr avx512fmaskhalfmode
    1137                 :             :   [(V64QI "SI") (V32QI "HI") (V16QI "QI")
    1138                 :             :    (V32HI "HI") (V16HI "QI") (V8HI  "QI") (V4HI "QI")
    1139                 :             :    (V16SI "QI") (V8SI  "QI") (V4SI  "QI")
    1140                 :             :    (V8DI  "QI") (V4DI  "QI") (V2DI  "QI")
    1141                 :             :    (V32HF "HI") (V16HF "QI") (V8HF  "QI")
    1142                 :             :    (V32BF "HI") (V16BF "QI") (V8BF  "QI")
    1143                 :             :    (V16SF "QI") (V8SF  "QI") (V4SF  "QI")
    1144                 :             :    (V8DF  "QI") (V4DF  "QI") (V2DF  "QI")])
    1145                 :             : 
    1146                 :             : ;; Mapping of vector float modes to an integer mode of the same size
    1147                 :             : (define_mode_attr sseintvecmode
    1148                 :             :   [(V32HF "V32HI") (V32BF "V32HI") (V16SF "V16SI") (V8DF  "V8DI")
    1149                 :             :    (V16HF "V16HI") (V16BF "V16HI") (V8SF  "V8SI")  (V4DF  "V4DI")
    1150                 :             :    (V8HF "V8HI") (V8BF "V8HI") (V4SF "V4SI")  (V2DF  "V2DI")
    1151                 :             :    (V16SI "V16SI") (V8DI  "V8DI")
    1152                 :             :    (V8SI  "V8SI")  (V4DI  "V4DI")
    1153                 :             :    (V4SI  "V4SI")  (V2DI  "V2DI")
    1154                 :             :    (V16HI "V16HI") (V8HI  "V8HI")
    1155                 :             :    (V32HI "V32HI") (V64QI "V64QI")
    1156                 :             :    (V32QI "V32QI") (V16QI "V16QI")])
    1157                 :             : 
    1158                 :             : ;; Mapping of vector modes to an V*HImode of the same size
    1159                 :             : (define_mode_attr ssewvecmode
    1160                 :             :   [(V8DI "V32HI") (V4DI "V16HI") (V2DI "V8HI")
    1161                 :             :    (V16SI "V32HI") (V8SI "V16HI") (V4SI "V8HI")])
    1162                 :             : 
    1163                 :             : (define_mode_attr ssewvecmodelower
    1164                 :             :   [(V8DI "v32hi") (V4DI "v16hi") (V2DI "v8hi")
    1165                 :             :    (V16SI "v32hi") (V8SI "v16hi") (V4SI "v8hi")])
    1166                 :             : 
    1167                 :             : (define_mode_attr sseintvecmode2
    1168                 :             :   [(V8DF "XI") (V4DF "OI") (V2DF "TI")
    1169                 :             :    (V8SF "OI") (V4SF "TI")
    1170                 :             :    (V16HF "OI") (V8HF "TI")
    1171                 :             :    (V16BF "OI") (V8BF "TI")])
    1172                 :             : 
    1173                 :             : (define_mode_attr sseintvecmodelower
    1174                 :             :   [(V32HF "v32hi") (V32BF "v32hi") (V16SF "v16si") (V8DF "v8di")
    1175                 :             :    (V16HF "v16hi") (V16BF "v16hi") (V8SF "v8si") (V4DF "v4di")
    1176                 :             :    (V8HF "v8hi") (V8BF "v8hi") (V4SF "v4si") (V2DF "v2di")
    1177                 :             :    (V8SI "v8si") (V4DI "v4di")
    1178                 :             :    (V4SI "v4si") (V2DI "v2di")
    1179                 :             :    (V16HI "v16hi") (V8HI "v8hi")
    1180                 :             :    (V32QI "v32qi") (V16QI "v16qi")])
    1181                 :             : 
    1182                 :             : ;; Mapping of vector modes to an V*SImode of the same size
    1183                 :             : (define_mode_attr ssedvecmode
    1184                 :             :  [(V64QI "V16SI") (V32QI "V8SI") (V16QI "V4SI")])
    1185                 :             : 
    1186                 :             : (define_mode_attr ssedvecmodelower
    1187                 :             :  [(V64QI "v16si") (V32QI "v8si") (V16QI "v4si")])
    1188                 :             : 
    1189                 :             : ;; Mapping of vector modes to a vector mode of double size
    1190                 :             : (define_mode_attr ssedoublevecmode
    1191                 :             :   [(V64QI "V128QI") (V32HI "V64HI") (V16SI "V32SI") (V8DI "V16DI")
    1192                 :             :    (V32QI "V64QI") (V16HI "V32HI") (V8SI "V16SI") (V4DI "V8DI")
    1193                 :             :    (V16QI "V32QI") (V8HI "V16HI") (V4SI "V8SI") (V2DI "V4DI")
    1194                 :             :    (V16SF "V32SF") (V8DF "V16DF")
    1195                 :             :    (V8SF "V16SF") (V4DF "V8DF")
    1196                 :             :    (V4SF "V8SF") (V2DF "V4DF")
    1197                 :             :    (V32HF "V64HF") (V16HF "V32HF") (V8HF "V16HF")
    1198                 :             :    (V32BF "V64BF") (V16BF "V32BF") (V8BF "V16BF")])
    1199                 :             : 
    1200                 :             : ;; Mapping of vector modes to a vector mode of half size
    1201                 :             : ;; instead of V1DI/V1DF, DI/DF are used for V2DI/V2DF although they are scalar.
    1202                 :             : (define_mode_attr ssehalfvecmode
    1203                 :             :   [(V64QI "V32QI") (V32HI "V16HI") (V16SI "V8SI") (V8DI "V4DI") (V4TI "V2TI")
    1204                 :             :    (V32QI "V16QI") (V16HI  "V8HI") (V8SI  "V4SI") (V4DI "V2DI")
    1205                 :             :    (V16QI  "V8QI") (V8HI   "V4HI") (V4SI  "V2SI") (V2DI "DI")
    1206                 :             :    (V16SF "V8SF") (V8DF "V4DF")
    1207                 :             :    (V8SF  "V4SF") (V4DF "V2DF")
    1208                 :             :    (V4SF  "V2SF") (V2DF "DF")
    1209                 :             :    (V32HF "V16HF") (V16HF "V8HF") (V8HF "V4HF")
    1210                 :             :    (V32BF "V16BF") (V16BF "V8BF") (V8BF "V4BF")])
    1211                 :             : 
    1212                 :             : (define_mode_attr ssehalfvecmodelower
    1213                 :             :   [(V64QI "v32qi") (V32HI "v16hi") (V16SI "v8si") (V8DI "v4di") (V4TI "v2ti")
    1214                 :             :    (V32QI "v16qi") (V16HI  "v8hi") (V8SI  "v4si") (V4DI "v2di")
    1215                 :             :    (V16QI  "v8qi") (V8HI   "v4hi") (V4SI  "v2si")
    1216                 :             :    (V16SF "v8sf") (V8DF "v4df")
    1217                 :             :    (V8SF  "v4sf") (V4DF "v2df")
    1218                 :             :    (V4SF  "v2sf")
    1219                 :             :    (V32HF "v16hf") (V16HF "v8hf") (V8HF "v4hf")
    1220                 :             :    (V32BF "v16bf") (V16BF "v8bf") (V8BF "v4bf")])
    1221                 :             : 
    1222                 :             : ;; Mapping of vector modes to vector hf modes of conversion.
    1223                 :             : (define_mode_attr ssePHmode
    1224                 :             :   [(V32HI "V32HF") (V16HI "V16HF") (V8HI "V8HF")
    1225                 :             :    (V16SI "V16HF") (V8SI "V8HF") (V4SI "V8HF")
    1226                 :             :    (V8DI "V8HF") (V4DI "V8HF") (V2DI "V8HF")
    1227                 :             :    (V8DF "V8HF") (V16SF "V16HF") (V8SF "V8HF")])
    1228                 :             : 
    1229                 :             : ;; Mapping of vector modes to vector hf modes of same element.
    1230                 :             : (define_mode_attr ssePHmodelower
    1231                 :             :   [(V32HI "v32hf") (V16HI "v16hf") (V8HI "v8hf")
    1232                 :             :    (V16SI "v16hf") (V8SI "v8hf") (V4SI "v4hf")
    1233                 :             :    (V8DI "v8hf") (V4DI "v4hf") (V2DI "v2hf")
    1234                 :             :    (V8DF "v8hf") (V16SF "v16hf") (V8SF "v8hf")])
    1235                 :             : 
    1236                 :             : 
    1237                 :             : ;; Mapping of vector modes to packed vector hf modes of same sized.
    1238                 :             : (define_mode_attr ssepackPHmode
    1239                 :             :   [(V16SI "V32HF") (V8SI "V16HF") (V4SI "V8HF")
    1240                 :             :    (V16SF "V32HF") (V8SF "V16HF") (V4SF "V8HF")])
    1241                 :             : 
    1242                 :             : ;; Mapping of vector modes to packed single mode of the same size
    1243                 :             : (define_mode_attr ssePSmode
    1244                 :             :   [(V16SI "V16SF") (V8DF "V16SF")
    1245                 :             :    (V16SF "V16SF") (V8DI "V16SF")
    1246                 :             :    (V64QI "V16SF") (V32QI "V8SF") (V16QI "V4SF")
    1247                 :             :    (V32HI "V16SF") (V16HI "V8SF") (V8HI "V4SF")
    1248                 :             :    (V8SI "V8SF") (V4SI "V4SF")
    1249                 :             :    (V4DI "V8SF") (V2DI "V4SF")
    1250                 :             :    (V4TI "V16SF") (V2TI "V8SF") (V1TI "V4SF")
    1251                 :             :    (V8SF "V8SF") (V4SF "V4SF")
    1252                 :             :    (V4DF "V8SF") (V2DF "V4SF")
    1253                 :             :    (V32HF "V16SF") (V16HF "V8SF") (V8HF "V4SF")])
    1254                 :             : 
    1255                 :             : (define_mode_attr ssePSmodelower
    1256                 :             :   [(V16SI "v16sf") (V8DF "v16sf")
    1257                 :             :    (V16SF "v16sf") (V8DI "v16sf")
    1258                 :             :    (V64QI "v16sf") (V32QI "v8sf") (V16QI "v4sf")
    1259                 :             :    (V32HI "v16sf") (V16HI "v8sf") (V8HI "v4sf")
    1260                 :             :    (V8SI "v8sf") (V4SI "v4sf")
    1261                 :             :    (V4DI "v8sf") (V2DI "v4sf")
    1262                 :             :    (V4TI "v16sf") (V2TI "v8sf") (V1TI "v4sf")
    1263                 :             :    (V8SF "v8sf") (V4SF "v4sf")
    1264                 :             :    (V4DF "v8sf") (V2DF "v4sf")
    1265                 :             :    (V32HF "v16sf") (V16HF "v8sf") (V8HF "v4sf")])
    1266                 :             : 
    1267                 :             : (define_mode_attr ssePSmode2
    1268                 :             :   [(V8DI "V8SF") (V4DI "V4SF")])
    1269                 :             : 
    1270                 :             : (define_mode_attr ssePSmode2lower
    1271                 :             :   [(V8DI "v8sf") (V4DI "v4sf")])
    1272                 :             : 
    1273                 :             : ;; Mapping of vector modes back to the scalar modes
    1274                 :             : (define_mode_attr ssescalarmode
    1275                 :             :   [(V64QI "QI") (V32QI "QI") (V16QI "QI")
    1276                 :             :    (V32HI "HI") (V16HI "HI") (V8HI "HI")
    1277                 :             :    (V16SI "SI") (V8SI "SI")  (V4SI "SI")
    1278                 :             :    (V8DI "DI")  (V4DI "DI")  (V2DI "DI")
    1279                 :             :    (V32HF "HF") (V16HF "HF") (V8HF "HF")
    1280                 :             :    (V32BF "BF") (V16BF "BF") (V8BF "BF")
    1281                 :             :    (V16SF "SF") (V8SF "SF")  (V4SF "SF")
    1282                 :             :    (V8DF "DF")  (V4DF "DF")  (V2DF "DF")
    1283                 :             :    (V4TI "TI")  (V2TI "TI")])
    1284                 :             : 
    1285                 :             : ;; Mapping of vector modes back to the scalar modes
    1286                 :             : (define_mode_attr ssescalarmodelower
    1287                 :             :   [(V64QI "qi") (V32QI "qi") (V16QI "qi")
    1288                 :             :    (V32HI "hi") (V16HI "hi") (V8HI "hi")
    1289                 :             :    (V16SI "si") (V8SI "si")  (V4SI "si")
    1290                 :             :    (V8DI "di")  (V4DI "di")  (V2DI "di")
    1291                 :             :    (V32HF "hf") (V16HF "hf")  (V8HF "hf")
    1292                 :             :    (V32BF "bf") (V16BF "bf")  (V8BF "bf")
    1293                 :             :    (V16SF "sf") (V8SF "sf")  (V4SF "sf")
    1294                 :             :    (V8DF "df")  (V4DF "df")  (V2DF "df")
    1295                 :             :    (V4TI "ti")  (V2TI "ti")])
    1296                 :             : 
    1297                 :             : ;; Mapping of vector modes to the 128bit modes
    1298                 :             : (define_mode_attr ssexmmmode
    1299                 :             :   [(V64QI "V16QI") (V32QI "V16QI") (V16QI "V16QI")
    1300                 :             :    (V32HI "V8HI")  (V16HI "V8HI") (V8HI "V8HI")
    1301                 :             :    (V16SI "V4SI")  (V8SI "V4SI")  (V4SI "V4SI")
    1302                 :             :    (V8DI "V2DI")   (V4DI "V2DI")  (V2DI "V2DI")
    1303                 :             :    (V32HF "V8HF")  (V16HF "V8HF") (V8HF "V8HF")
    1304                 :             :    (V32BF "V8BF")  (V16BF "V8BF") (V8BF "V8BF")
    1305                 :             :    (V16SF "V4SF")  (V8SF "V4SF")  (V4SF "V4SF")
    1306                 :             :    (V8DF "V2DF")   (V4DF "V2DF")  (V2DF "V2DF")])
    1307                 :             : 
    1308                 :             : ;; Pointer size override for scalar modes (Intel asm dialect)
    1309                 :             : (define_mode_attr iptr
    1310                 :             :   [(V64QI "b") (V32HI "w") (V16SI "k") (V8DI "q")
    1311                 :             :    (V32QI "b") (V16HI "w") (V8SI "k") (V4DI "q")
    1312                 :             :    (V16QI "b") (V8HI "w") (V4SI "k") (V2DI "q")
    1313                 :             :    (V32HF "w") (V32BF "w") (V16SF "k") (V8DF "q")
    1314                 :             :    (V16HF "w") (V16BF "w") (V8SF "k") (V4DF "q")
    1315                 :             :    (V8HF "w") (V8BF "w") (V4SF "k") (V2DF "q")
    1316                 :             :    (HF "w") (BF "w") (SF "k") (DF "q")])
    1317                 :             : 
    1318                 :             : ;; Pointer size override for 16-bit upper-convert modes (Intel asm dialect)
    1319                 :             : (define_mode_attr iptrh
    1320                 :             :  [(V32HI "") (V16SI "") (V8DI "")
    1321                 :             :   (V16HI "") (V8SI "") (V4DI "q")
    1322                 :             :   (V8HI "") (V4SI "q") (V2DI "k")])
    1323                 :             : 
    1324                 :             : ;; Mapping of vector modes to VPTERNLOG suffix
    1325                 :             : (define_mode_attr ternlogsuffix
    1326                 :             :   [(V8DI "q") (V4DI "q") (V2DI "q")
    1327                 :             :    (V8DF "q") (V4DF "q") (V2DF "q")
    1328                 :             :    (V16SI "d") (V8SI "d") (V4SI "d")
    1329                 :             :    (V16SF "d") (V8SF "d") (V4SF "d")
    1330                 :             :    (V32HI "d") (V16HI "d") (V8HI "d")
    1331                 :             :    (V32HF "d") (V16HF "d") (V8HF "d")
    1332                 :             :    (V32BF "d") (V16BF "d") (V8BF "d")
    1333                 :             :    (V64QI "d") (V32QI "d") (V16QI "d")])
    1334                 :             : 
    1335                 :             : ;; Number of scalar elements in each vector type
    1336                 :             : (define_mode_attr ssescalarnum
    1337                 :             :   [(V64QI "64") (V16SI "16") (V8DI "8")
    1338                 :             :    (V32QI "32") (V16HI "16") (V8SI "8") (V4DI "4")
    1339                 :             :    (V16QI "16") (V8HI "8") (V4SI "4") (V2DI "2")
    1340                 :             :    (V16SF "16") (V8DF "8")
    1341                 :             :    (V8SF "8") (V4DF "4")
    1342                 :             :    (V4SF "4") (V2DF "2")])
    1343                 :             : 
    1344                 :             : ;; Mask of scalar elements in each vector type
    1345                 :             : (define_mode_attr ssescalarnummask
    1346                 :             :   [(V32QI "31") (V16HI "15") (V8SI "7") (V4DI "3")
    1347                 :             :    (V16QI "15") (V8HI "7") (V4SI "3") (V2DI "1")
    1348                 :             :    (V8SF "7") (V4DF "3")
    1349                 :             :    (V4SF "3") (V2DF "1")])
    1350                 :             : 
    1351                 :             : (define_mode_attr ssescalarsize
    1352                 :             :   [(V4TI  "64") (V2TI  "64") (V1TI  "64")
    1353                 :             :    (V8DI  "64") (V4DI  "64") (V2DI  "64")
    1354                 :             :    (V64QI "8") (V32QI "8") (V16QI "8")
    1355                 :             :    (V32HI "16") (V16HI "16") (V8HI "16")
    1356                 :             :    (V16SI "32") (V8SI "32") (V4SI "32")
    1357                 :             :    (V32HF "16") (V16HF "16") (V8HF "16")
    1358                 :             :    (V32BF "16") (V16BF "16") (V8BF "16")
    1359                 :             :    (V16SF "32") (V8SF "32") (V4SF "32")
    1360                 :             :    (V8DF "64") (V4DF "64") (V2DF "64")])
    1361                 :             : 
    1362                 :             : ;; SSE prefix for integer and HF vector modes
    1363                 :             : (define_mode_attr sseintprefix
    1364                 :             :   [(V2DI  "p") (V2DF  "")
    1365                 :             :    (V4DI  "p") (V4DF  "")
    1366                 :             :    (V8DI  "p") (V8DF  "")
    1367                 :             :    (V4SI  "p") (V4SF  "")
    1368                 :             :    (V8SI  "p") (V8SF  "")
    1369                 :             :    (V16SI "p") (V16SF "")
    1370                 :             :    (V16QI "p") (V8HI "p") (V8HF "p") (V8BF "p")
    1371                 :             :    (V32QI "p") (V16HI "p") (V16HF "p") (V16BF "p")
    1372                 :             :    (V64QI "p") (V32HI "p") (V32HF "p") (V32BF "p")])
    1373                 :             : 
    1374                 :             : ;; SSE prefix for integer and HF vector comparison.
    1375                 :             : (define_mode_attr ssecmpintprefix
    1376                 :             :   [(V2DI  "p") (V2DF  "")
    1377                 :             :    (V4DI  "p") (V4DF  "")
    1378                 :             :    (V8DI  "p") (V8DF  "")
    1379                 :             :    (V4SI  "p") (V4SF  "")
    1380                 :             :    (V8SI  "p") (V8SF  "")
    1381                 :             :    (V16SI "p") (V16SF "")
    1382                 :             :    (V16QI "p") (V8HI "p") (V8HF "")
    1383                 :             :    (V32QI "p") (V16HI "p") (V16HF "")
    1384                 :             :    (V64QI "p") (V32HI "p") (V32HF "")])
    1385                 :             : 
    1386                 :             : ;; SSE scalar suffix for vector modes
    1387                 :             : (define_mode_attr ssescalarmodesuffix
    1388                 :             :   [(HF "sh") (SF "ss") (DF "sd")
    1389                 :             :    (V32HF "sh") (V16SF "ss") (V8DF "sd")
    1390                 :             :    (V16HF "sh") (V8SF "ss") (V4DF "sd")
    1391                 :             :    (V8HF "sh") (V4SF "ss") (V2DF "sd")
    1392                 :             :    (V16SI "d") (V8DI "q")
    1393                 :             :    (V8SI "d") (V4DI "q")
    1394                 :             :    (V4SI "d") (V2DI "q")])
    1395                 :             : 
    1396                 :             : ;; Pack/unpack vector modes
    1397                 :             : (define_mode_attr sseunpackmode
    1398                 :             :   [(V16QI "V8HI") (V8HI "V4SI") (V4SI "V2DI")
    1399                 :             :    (V32QI "V16HI") (V16HI "V8SI") (V8SI "V4DI")
    1400                 :             :    (V32HI "V16SI") (V64QI "V32HI") (V16SI "V8DI")])
    1401                 :             : 
    1402                 :             : (define_mode_attr sseunpackmodelower
    1403                 :             :   [(V16QI "v8hi") (V8HI "v4si") (V4SI "v2di")
    1404                 :             :    (V32QI "v16hi") (V16HI "v8si") (V8SI "v4di")
    1405                 :             :    (V32HI "v16si") (V64QI "v32hi") (V16SI "v8di")])
    1406                 :             : 
    1407                 :             : (define_mode_attr ssepackmode
    1408                 :             :   [(V8HI "V16QI") (V4SI "V8HI") (V2DI "V4SI")
    1409                 :             :    (V16HI "V32QI") (V8SI "V16HI") (V4DI "V8SI")
    1410                 :             :    (V32HI "V64QI") (V16SI "V32HI") (V8DI "V16SI")])
    1411                 :             : 
    1412                 :             : (define_mode_attr ssepackmodelower
    1413                 :             :   [(V8HI "v16qi") (V4SI "v8hi") (V2DI "v4si")
    1414                 :             :    (V16HI "v32qi") (V8SI "v16hi") (V4DI "v8si")
    1415                 :             :    (V32HI "v64qi") (V16SI "v32hi") (V8DI "v16si")])
    1416                 :             : 
    1417                 :             : ;; Mapping of the max integer size for xop rotate immediate constraint
    1418                 :             : (define_mode_attr sserotatemax
    1419                 :             :   [(V16QI "7") (V8HI "15") (V4SI "31") (V2DI "63")])
    1420                 :             : 
    1421                 :             : ;; Mapping of mode to cast intrinsic name
    1422                 :             : (define_mode_attr castmode
    1423                 :             :  [(V4SF "ps") (V2DF "pd")
    1424                 :             :   (V8SI "si") (V8SF "ps") (V4DF "pd")
    1425                 :             :   (V16SI "si") (V16SF "ps") (V8DF "pd")])
    1426                 :             : 
    1427                 :             : ;; i128 for integer vectors and TARGET_AVX2, f128 otherwise.
    1428                 :             : ;; i64x4 or f64x4 for 512bit modes.
    1429                 :             : (define_mode_attr i128
    1430                 :             :   [(V16HF "%~128") (V32HF "i64x4") (V16BF "%~128") (V32BF "i64x4")
    1431                 :             :    (V16SF "f64x4") (V8SF "f128")
    1432                 :             :    (V8DF "f64x4") (V4DF "f128")
    1433                 :             :    (V64QI "i64x4") (V32QI "%~128") (V32HI "i64x4") (V16HI "%~128")
    1434                 :             :    (V16SI "i64x4") (V8SI "%~128") (V8DI "i64x4") (V4DI "%~128")])
    1435                 :             : 
    1436                 :             : ;; For 256-bit modes for TARGET_AVX512VL && TARGET_AVX512DQ
    1437                 :             : ;; i32x4, f32x4, i64x2 or f64x2 suffixes.
    1438                 :             : (define_mode_attr i128vldq
    1439                 :             :   [(V16HF "i32x4") (V16BF "i32x4") (V8SF "f32x4") (V4DF "f64x2")
    1440                 :             :    (V32QI "i32x4") (V16HI "i32x4") (V8SI "i32x4") (V4DI "i64x2")])
    1441                 :             : 
    1442                 :             : ;; Mix-n-match
    1443                 :             : (define_mode_iterator AVX256MODE2P [V8SI V8SF V4DF])
    1444                 :             : (define_mode_iterator AVX512MODE2P
    1445                 :         583 :   [(V16SI "TARGET_EVEX512") (V16SF "TARGET_EVEX512") (V8DF "TARGET_EVEX512")])
    1446                 :             : 
    1447                 :             : ;; Mapping for dbpsabbw modes
    1448                 :             : (define_mode_attr dbpsadbwmode
    1449                 :         317 :   [(V32HI "V64QI") (V16HI "V32QI") (V8HI "V16QI")])
    1450                 :         317 : 
    1451                 :         473 : ;; Mapping suffixes for broadcast
    1452                 :             : (define_mode_attr bcstscalarsuff
    1453                 :             :   [(V64QI "b")  (V32QI "b") (V16QI "b")
    1454                 :             :    (V32HI "w")  (V16HI "w") (V8HI "w")
    1455                 :             :    (V16SI "d")  (V8SI "d")  (V4SI "d")
    1456                 :             :    (V8DI "q")   (V4DI "q")  (V2DI "q")
    1457                 :       56998 :    (V32HF "w")  (V16HF "w") (V8HF "w")
    1458                 :       56998 :    (V32BF "w")  (V16BF "w") (V8BF "w")
    1459                 :     1255557 :    (V16SF "ss") (V8SF "ss") (V4SF "ss")
    1460                 :     1255557 :    (V8DF "sd")  (V4DF "sd") (V2DF "sd")])
    1461                 :          94 : 
    1462                 :        6624 : ;; Tie mode of assembler operand to mode iterator
    1463                 :        6530 : (define_mode_attr xtg_mode
    1464                 :          94 :   [(V16QI "x") (V8HI "x") (V4SI "x") (V2DI "x")
    1465                 :          94 :    (V8HF "x")  (V8BF "x") (V4SF "x") (V2DF "x")
    1466                 :          94 :    (V32QI "t") (V16HI "t") (V8SI "t") (V4DI "t")
    1467                 :           1 :    (V16HF "t") (V16BF "t") (V8SF "t") (V4DF "t")
    1468                 :           1 :    (V64QI "g") (V32HI "g") (V16SI "g") (V8DI "g")
    1469                 :             :    (V32HF "g") (V32BF "g") (V16SF "g") (V8DF "g")])
    1470                 :           1 : 
    1471                 :           1 : ;; Half mask mode for unpacks
    1472                 :           1 : (define_mode_attr HALFMASKMODE
    1473                 :           1 :   [(DI "SI") (SI "HI")])
    1474                 :             : 
    1475                 :             : ;; Double mask mode for packs
    1476                 :             : (define_mode_attr DOUBLEMASKMODE
    1477                 :             :   [(HI "SI") (SI "DI")])
    1478                 :             : 
    1479                 :             : 
    1480                 :             : ;; Include define_subst patterns for instructions with mask
    1481                 :             : (include "subst.md")
    1482                 :             : 
    1483                 :             : ;; Patterns whose name begins with "sse{,2,3}_" are invoked by intrinsics.
    1484                 :             : 
    1485                 :             : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1486                 :             : ;;
    1487                 :             : ;; Move patterns
    1488                 :             : ;;
    1489                 :             : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    1490                 :             : 
    1491                 :             : ;; All of these patterns are enabled for SSE1 as well as SSE2.
    1492                 :             : ;; This is essential for maintaining stable calling conventions.
    1493                 :             : 
    1494                 :             : (define_expand "mov<mode>"
    1495                 :             :   [(set (match_operand:VMOVE 0 "nonimmediate_operand")
    1496                 :             :         (match_operand:VMOVE 1 "nonimmediate_or_sse_const_operand"))]
    1497                 :             :   "TARGET_SSE"
    1498                 :     3324672 : {
    1499                 :     2015188 :   ix86_expand_vector_move (<MODE>mode, operands);
    1500                 :     3324672 :   DONE;
    1501                 :             : })
    1502                 :             : 
    1503                 :             : (define_insn "mov<mode>_internal"
    1504                 :             :   [(set (match_operand:VMOVE 0 "nonimmediate_operand"
    1505                 :             :          "=v,v ,x,v ,m")
    1506                 :             :         (match_operand:VMOVE 1 "nonimmediate_or_sse_const_operand"
    1507                 :             :          " C,<sseconstm1>,BH,vm,v"))]
    1508                 :    67785925 :   "TARGET_SSE
    1509                 :    70323582 :    && (register_operand (operands[0], <MODE>mode)
    1510                 :    20533039 :        || register_operand (operands[1], <MODE>mode))
    1511                 :    66621566 :    && ix86_hardreg_mov_ok (operands[0], operands[1])"
    1512                 :     9924040 : {
    1513                 :    17153252 :   switch (get_attr_type (insn))
    1514                 :    10876957 :     {
    1515                 :    13991263 :     case TYPE_SSELOG1:
    1516                 :     1666152 :       return standard_sse_constant_opcode (insn, operands);
    1517                 :     1350581 : 
    1518                 :     8127701 :     case TYPE_SSEMOV:
    1519                 :     3171287 :       return ix86_output_ssemov (insn, operands);
    1520                 :             : 
    1521                 :     1517989 :     default:
    1522                 :     1309484 :       gcc_unreachable ();
    1523                 :     1310200 :     }
    1524                 :     1310200 : }
    1525                 :      208505 :   [(set_attr "type" "sselog1,sselog1,sselog1,ssemov,ssemov")
    1526                 :     1517273 :    (set_attr "prefix" "maybe_vex")
    1527                 :      208505 :    (set (attr "mode")
    1528                 :     3681466 :         (cond [(match_test "TARGET_AVX")
    1529                 :      207789 :                  (const_string "<sseinsnmode>")
    1530                 :      207789 :                (ior (not (match_test "TARGET_SSE2"))
    1531                 :      207789 :                     (match_test "optimize_function_for_size_p (cfun)"))
    1532                 :      207789 :                  (const_string "V4SF")
    1533                 :      207789 :                (and (match_test "<MODE>mode == V2DFmode")
    1534                 :      207789 :                     (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL"))
    1535                 :             :                  (const_string "V4SF")
    1536                 :      135216 :                (and (eq_attr "alternative" "4")
    1537                 :    36965085 :                     (match_test "TARGET_SSE_TYPELESS_STORES"))
    1538                 :      135216 :                  (const_string "V4SF")
    1539                 :    23567653 :                (and (eq_attr "alternative" "0")
    1540                 :     5478659 :                     (match_test "TARGET_SSE_LOAD0_BY_PXOR"))
    1541                 :    15482130 :                  (const_string "TI")
    1542                 :       46225 :               ]
    1543                 :       46225 :               (const_string "<sseinsnmode>")))
    1544                 :       46225 :    (set (attr "enabled")
    1545                 :    43773070 :         (cond [(and (match_test "<MODE_SIZE> == 16")
    1546                 :   286653317 :                     (eq_attr "alternative" "1"))
    1547                 :   295352461 :                  (symbol_ref "TARGET_SSE2")
    1548                 :   287822938 :                (and (match_test "<MODE_SIZE> == 32")
    1549                 :    33449105 :                     (eq_attr "alternative" "1"))
    1550                 :    29300687 :                  (symbol_ref "TARGET_AVX2")
    1551                 :    32667691 :               ]
    1552                 :   154316939 :               (symbol_ref "true")))])
    1553                 :       28395 : 
    1554                 :      141628 : ; False dependency happens on destination register which is not really
    1555                 :        8510 : ; used when moving all ones to vector register
    1556                 :        8510 : (define_split
    1557                 :        7702 :   [(set (match_operand:VMOVE 0 "register_operand")
    1558                 :       15653 :         (match_operand:VMOVE 1 "int_float_vector_all_ones_operand"))]
    1559                 :        5494 :   "TARGET_AVX512F && reload_completed
    1560                 :        9931 :   && (<MODE_SIZE> == 64 || EXT_REX_SSE_REG_P (operands[0]))
    1561                 :        7708 :   && optimize_insn_for_speed_p ()"
    1562                 :     3348194 :   [(set (match_dup 0) (match_dup 2))
    1563                 :     5961300 :    (parallel
    1564                 :     5954406 :      [(set (match_dup 0) (match_dup 1))
    1565                 :      113611 :       (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)])]
    1566                 :      114327 :   "operands[2] = CONST0_RTX (<MODE>mode);")
    1567                 :       81488 : 
    1568                 :      113611 : (define_insn "*vmov<mode>_constm1_pternlog_false_dep"
    1569                 :         716 :   [(set (match_operand:VMOVE 0 "register_operand" "=v")
    1570                 :         716 :         (match_operand:VMOVE 1 "int_float_vector_all_ones_operand" "<sseconstm1>"))
    1571                 :         716 :    (unspec [(match_operand:VMOVE 2 "register_operand" "0")] UNSPEC_INSN_FALSE_DEP)]
    1572                 :         722 :    "TARGET_AVX512VL || <MODE_SIZE> == 64"
    1573                 :         716 :    "vpternlogd\t{$0xFF, %0, %0, %0|%0, %0, %0, 0xFF}"
    1574                 :         716 :   [(set_attr "type" "sselog1")
    1575                 :         716 :    (set_attr "prefix" "evex")])
    1576                 :         759 : 
    1577                 :        1475 : ;; If mem_addr points to a memory region with less than whole vector size bytes
    1578                 :         759 : ;; of accessible memory and k is a mask that would prevent reading the inaccessible
    1579                 :         764 : ;; bytes from mem_addr, add UNSPEC_MASKLOAD to prevent it to be transformed to vpblendd
    1580                 :        1445 : ;; See pr97642.
    1581                 :          75 : (define_expand "<avx512>_load<mode>_mask"
    1582                 :          75 :   [(set (match_operand:V48_AVX512VL 0 "register_operand")
    1583                 :          75 :         (vec_merge:V48_AVX512VL
    1584                 :          75 :           (match_operand:V48_AVX512VL 1 "nonimmediate_operand")
    1585                 :         791 :           (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand")
    1586                 :         791 :           (match_operand:<avx512fmaskmode> 3 "register_or_constm1_operand")))]
    1587                 :        3379 :   "TARGET_AVX512F"
    1588                 :        4129 : {
    1589                 :        4129 :   if (CONST_INT_P (operands[3]))
    1590                 :             :     {
    1591                 :          35 :       emit_insn (gen_rtx_SET (operands[0], operands[1]));
    1592                 :          35 :       DONE;
    1593                 :        2658 :     }
    1594                 :        1466 :   else if (MEM_P (operands[1]))
    1595                 :         743 :     operands[1] = gen_rtx_UNSPEC (<MODE>mode,
    1596                 :           0 :                                  gen_rtvec(1, operands[1]),
    1597                 :        1309 :                                  UNSPEC_MASKLOAD);
    1598                 :        1309 : })
    1599                 :           0 : 
    1600                 :           0 : (define_insn "*<avx512>_load<mode>_mask"
    1601                 :           0 :   [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v")
    1602                 :        2775 :         (vec_merge:V48_AVX512VL
    1603                 :        2775 :           (unspec:V48_AVX512VL
    1604                 :        1309 :             [(match_operand:V48_AVX512VL 1 "memory_operand" "m")]
    1605                 :        1466 :             UNSPEC_MASKLOAD)
    1606                 :        1466 :           (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand" "0C")
    1607                 :        1466 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))]
    1608                 :        3339 :   "TARGET_AVX512F"
    1609                 :        1000 : {
    1610                 :        1576 :   if (FLOAT_MODE_P (GET_MODE_INNER (<MODE>mode)))
    1611                 :             :     {
    1612                 :         395 :       if (misaligned_operand (operands[1], <MODE>mode))
    1613                 :        1994 :         return "vmovu<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1614                 :        1994 :       else
    1615                 :        3706 :         return "vmova<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1616                 :        1466 :     }
    1617                 :        1466 :   else
    1618                 :             :     {
    1619                 :         605 :       if (misaligned_operand (operands[1], <MODE>mode))
    1620                 :             :         return "vmovdqu<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1621                 :             :       else
    1622                 :         376 :         return "vmovdqa<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}";
    1623                 :           6 :     }
    1624                 :         851 : }
    1625                 :         857 :   [(set_attr "type" "ssemov")
    1626                 :         857 :    (set_attr "prefix" "evex")
    1627                 :        1014 :    (set_attr "mode" "<sseinsnmode>")])
    1628                 :        2347 : 
    1629                 :         851 : (define_insn_and_split "*<avx512>_load<mode>"
    1630                 :         857 :   [(set (match_operand:V48_AVX512VL 0 "register_operand")
    1631                 :         163 :         (unspec:V48_AVX512VL
    1632                 :         163 :           [(match_operand:V48_AVX512VL 1 "memory_operand")]
    1633                 :         163 :           UNSPEC_MASKLOAD))]
    1634                 :         196 :   "TARGET_AVX512F"
    1635                 :           6 :   "#"
    1636                 :             :   "&& 1"
    1637                 :           6 :   [(set (match_dup 0) (match_dup 1))])
    1638                 :          14 : 
    1639                 :           6 : (define_expand "<avx512>_load<mode>_mask"
    1640                 :           6 :   [(set (match_operand:VI12_AVX512VL 0 "register_operand")
    1641                 :           6 :         (vec_merge:VI12_AVX512VL
    1642                 :             :           (match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
    1643                 :             :           (match_operand:VI12_AVX512VL 2 "nonimm_or_0_operand")
    1644                 :         624 :           (match_operand:<avx512fmaskmode> 3 "register_or_constm1_operand")))]
    1645                 :           2 :   "TARGET_AVX512BW"
    1646                 :         784 : {
    1647                 :         786 :   if (CONST_INT_P (operands[3]))
    1648                 :           2 :     {
    1649                 :           2 :       emit_insn (gen_rtx_SET (operands[0], operands[1]));
    1650                 :         626 :       DONE;
    1651                 :         624 :     }
    1652                 :         786 :   else if (MEM_P (operands[1]))
    1653                 :         152 :     operands[1] = gen_rtx_UNSPEC (<MODE>mode,
    1654                 :         626 :                                  gen_rtvec(1, operands[1]),
    1655                 :         626 :                                  UNSPEC_MASKLOAD);
    1656                 :         626 : 
    1657                 :           2 : })
    1658                 :             : 
    1659                 :           2 : (define_insn "*<avx512>_load<mode>_mask"
    1660                 :         626 :   [(set (match_operand:VI12HFBF_AVX512VL 0 "register_operand" "=v")
    1661                 :         868 :         (vec_merge:VI12HFBF_AVX512VL
    1662                 :         866 :           (unspec:VI12HFBF_AVX512VL
    1663                 :         866 :             [(match_operand:VI12HFBF_AVX512VL 1 "memory_operand" "m")]
    1664                 :         866 :             UNSPEC_MASKLOAD)
    1665                 :         784 :           (match_operand:VI12HFBF_AVX512VL 2 "nonimm_or_0_operand" "0C")
    1666                 :         944 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk")))]
    1667                 :        1613 :   "TARGET_AVX512BW"
    1668                 :          21 :   "vmovdqu<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"
    1669                 :         784 :   [(set_attr "type" "ssemov")
    1670                 :           0 :    (set_attr "prefix" "evex")
    1671                 :         160 :    (set_attr "mode" "<sseinsnmode>")])
    1672                 :         160 : 
    1673                 :         160 : (define_insn_and_split "*<avx512>_load<mode>"
    1674                 :         784 :   [(set (match_operand:VI12HFBF_AVX512VL 0 "register_operand" "=v")
    1675                 :         944 :         (unspec:VI12HFBF_AVX512VL
    1676                 :         784 :           [(match_operand:VI12HFBF_AVX512VL 1 "memory_operand" "m")]
    1677                 :         177 :           UNSPEC_MASKLOAD))]
    1678                 :         177 :   "TARGET_AVX512BW"
    1679                 :          17 :   "#"
    1680                 :          17 :   "&& 1"
    1681                 :          54 :   [(set (match_dup 0) (match_dup 1))])
    1682                 :           0 : 
    1683                 :           0 : (define_insn "avx512f_mov<ssescalarmodelower>_mask"
    1684                 :          15 :   [(set (match_operand:VFH_128 0 "register_operand" "=v")
    1685                 :           0 :         (vec_merge:VFH_128
    1686                 :          54 :           (vec_merge:VFH_128
    1687                 :          54 :             (match_operand:VFH_128 2 "register_operand" "v")
    1688                 :       82820 :             (match_operand:VFH_128 3 "nonimm_or_0_operand" "0C")
    1689                 :       91120 :             (match_operand:QI 4 "register_operand" "Yk"))
    1690                 :          54 :           (match_operand:VFH_128 1 "register_operand" "v")
    1691                 :       18825 :           (const_int 1)))]
    1692                 :        9055 :   "TARGET_AVX512F"
    1693                 :      206112 :   "vmov<ssescalarmodesuffix>\t{%2, %1, %0%{%4%}%N3|%0%{%4%}%N3, %1, %2}"
    1694                 :      195671 :   [(set_attr "type" "ssemov")
    1695                 :      196340 :    (set_attr "prefix" "evex")
    1696                 :        1082 :    (set_attr "mode" "<ssescalarmode>")])
    1697                 :        8689 : 
    1698                 :        1082 : (define_expand "avx512f_load<mode>_mask"
    1699                 :       36953 :   [(set (match_operand:<ssevecmode> 0 "register_operand")
    1700                 :          76 :         (vec_merge:<ssevecmode>
    1701                 :          76 :           (vec_merge:<ssevecmode>
    1702                 :             :             (vec_duplicate:<ssevecmode>
    1703                 :        1009 :               (match_operand:MODEFH 1 "memory_operand"))
    1704                 :       12565 :             (match_operand:<ssevecmode> 2 "nonimm_or_0_operand")
    1705                 :           0 :             (match_operand:QI 3 "register_operand"))
    1706                 :       13574 :           (match_dup 4)
    1707                 :       13574 :           (const_int 1)))]
    1708                 :       13574 :   "TARGET_AVX512F"
    1709                 :       13658 :   "operands[4] = CONST0_RTX (<ssevecmode>mode);")
    1710                 :       13590 : 
    1711                 :        1009 : (define_insn "*avx512f_load<mode>_mask"
    1712                 :      217984 :   [(set (match_operand:<ssevecmode> 0 "register_operand" "=v")
    1713                 :      205435 :         (vec_merge:<ssevecmode>
    1714                 :      205419 :           (vec_merge:<ssevecmode>
    1715                 :      205419 :             (vec_duplicate:<ssevecmode>
    1716                 :          84 :               (match_operand:MODEFH 1 "memory_operand" "m"))
    1717                 :          84 :             (match_operand:<ssevecmode> 2 "nonimm_or_0_operand" "0C")
    1718                 :          84 :             (match_operand:QI 3 "register_operand" "Yk"))
    1719                 :          84 :           (match_operand:<ssevecmode> 4 "const0_operand")
    1720                 :          84 :           (const_int 1)))]
    1721                 :         299 :   "TARGET_AVX512F"
    1722                 :             :   "vmov<ssescalarmodesuffix>\t{%1, %0%{%3%}%N2|%0%{3%}%N2, %1}"
    1723                 :          84 :   [(set_attr "type" "ssemov")
    1724                 :             :    (set_attr "prefix" "evex")
    1725                 :       10911 :    (set_attr "memory" "load")
    1726                 :         244 :    (set_attr "mode" "<MODE>")])
    1727                 :         244 : 
    1728                 :     2420115 : (define_insn "avx512f_store<mode>_mask"
    1729                 :     2420115 :   [(set (match_operand:MODEFH 0 "memory_operand" "=m")
    1730                 :     2420115 :         (if_then_else:MODEFH
    1731                 :     2420115 :           (and:QI (match_operand:QI 2 "register_operand" "Yk")
    1732                 :       10751 :                  (const_int 1))
    1733                 :       10751 :           (vec_select:MODEFH
    1734                 :          84 :             (match_operand:<ssevecmode> 1 "register_operand" "v")
    1735                 :     1700806 :             (parallel [(const_int 0)]))
    1736                 :           0 :           (match_dup 0)))]
    1737                 :         206 :   "TARGET_AVX512F"
    1738                 :           0 :   "vmov<ssescalarmodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
    1739                 :        7129 :   [(set_attr "type" "ssemov")
    1740                 :             :    (set_attr "prefix" "evex")
    1741                 :         130 :    (set_attr "memory" "store")
    1742                 :        7259 :    (set_attr "mode" "<MODE>")])
    1743                 :        7259 : 
    1744                 :        7129 : (define_insn "<avx512>_blendm<mode>"
    1745                 :        7129 :   [(set (match_operand:V48_AVX512VL 0 "register_operand" "=v,v")
    1746                 :        7129 :         (vec_merge:V48_AVX512VL
    1747                 :        7129 :           (match_operand:V48_AVX512VL 2 "nonimmediate_operand" "vm,vm")
    1748                 :       41924 :           (match_operand:V48_AVX512VL 1 "nonimm_or_0_operand" "0C,v")
    1749                 :       41924 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk,Yk")))]
    1750                 :       64037 :   "TARGET_AVX512F"
    1751                 :    53454409 : {
    1752                 :        1662 :   if (REG_P (operands[1])
    1753                 :        1334 :      && REGNO (operands[1]) != REGNO (operands[0]))
    1754                 :             :     return "v<sseintprefix>blendm<ssemodesuffix>\t{%2, %1, %0%{%3%}|%0%{%3%}, %1, %2}";
    1755                 :    53411257 : 
    1756                 :    53412153 :   if (FLOAT_MODE_P (GET_MODE_INNER (<MODE>mode)))
    1757                 :    53410823 :     {
    1758                 :    53411368 :       if (misaligned_operand (operands[2], <MODE>mode))
    1759                 :    53410823 :         return "vmovu<ssemodesuffix>\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}";
    1760                 :    53410823 :       else
    1761                 :    53411368 :         return "vmova<ssemodesuffix>\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}";
    1762                 :             :     }
    1763                 :    10147731 :   else
    1764                 :    10203970 :     {
    1765                 :       57024 :       if (misaligned_operand (operands[2], <MODE>mode))
    1766                 :    10108798 :         return "vmovdqu<ssescalarsize>\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}";
    1767                 :       56239 :       else
    1768                 :     5279610 :         return "vmovdqa<ssescalarsize>\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}";
    1769                 :             :     }
    1770                 :             : }
    1771                 :         414 :   [(set_attr "type" "ssemov")
    1772                 :             :    (set_attr "prefix" "evex")
    1773                 :             :    (set_attr "mode" "<sseinsnmode>")])
    1774                 :        1219 : 
    1775                 :             : (define_insn "<avx512>_blendm<mode>"
    1776                 :             :   [(set (match_operand:VI12HFBF_AVX512VL 0 "register_operand" "=v,v")
    1777                 :             :         (vec_merge:VI12HFBF_AVX512VL
    1778                 :             :           (match_operand:VI12HFBF_AVX512VL 2 "nonimmediate_operand" "vm,vm")
    1779                 :             :           (match_operand:VI12HFBF_AVX512VL 1 "nonimm_or_0_operand" "0C,v")
    1780                 :           0 :           (match_operand:<avx512fmaskmode> 3 "register_operand" "Yk,Yk")))]
    1781                 :       13505 :   "TARGET_AVX512BW"
    1782                 :           0 :   "@
    1783                 :             :     vmovdqu<ssescalarsize>\t{%2, %0%{%3%}%N1|%0%{%3%}%N1, %2}
    1784                 :             :     vpblendm<sseintmodesuffix>\t{%2, %1, %0%{%3%}|%0%{%3%}, %1, %2}"
    1785                 :             :   [(set_attr "type" "ssemov")
    1786                 :             :    (set_attr "prefix" "evex")
    1787                 :             :    (set_attr "mode" "<sseinsnmode>")])
    1788                 :             : 
    1789                 :             : (define_insn "*<avx512>_store<mode>_mask"
    1790                 :             :   [(set (match_operand:V48_AVX512VL 0 "memory_operand" "=m")
    1791                 :      646819 :         (vec_merge:V48_AVX512VL
    1792                 :      646819 :           (match_operand:V48_AVX512VL 1 "register_operand" "v")
    1793                 :      646819 :           (match_dup 0)
    1794                 :             :           (match_operand:<avx512fmaskmode> 2 "register_operand" "Yk")))]
    1795                 :          41 :   "TARGET_AVX512F"
    1796                 :          45 : {
    1797                 :      644673 :   if (FLOAT_MODE_P (GET_MODE_INNER (<MODE>mode)))
    1798                 :             :     {
    1799                 :           0 :       if (misaligned_operand (operands[0], <MODE>mode))
    1800                 :             :         return "vmovu<ssemodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1801                 :             :       else
    1802                 :           0 :         return "vmova<ssemodesuffix>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1803                 :             :     }
    1804                 :             :   else
    1805                 :             :     {
    1806                 :          45 :       if (misaligned_operand (operands[0], <MODE>mode))
    1807                 :           0 :         return "vmovdqu<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1808                 :           0 :       else
    1809                 :           0 :         return "vmovdqa<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
    1810                 :           0 :     }
    1811                 :             : }
    1812                 :             :   [(set_attr "type" "ssemov")
    1813                 :             :    (set_attr "prefix" "evex")
    1814                 :             :    (set_attr "memory" "store")
    1815                 :         259 :    (set_attr "mode" "<sseinsnmode>")])
    1816                 :             : 
    1817                 :             : (define_insn "*<avx512>_store<mode>_mask"
    1818                 :             :   [(set (match_operand:VI12HFBF_AVX512VL 0 "memory_operand" "=m")
    1819                 :           0 :         (vec_merge:VI12HFBF_AVX512VL
    1820                 :           0 :           (match_operand:VI12HFBF_AVX512VL 1 "register_operand" "v")
    1821                 :           0 :           (match_dup 0)
    1822                 :           0 :           (match_operand:<avx512fmaskmode> 2 "register_operand" "Yk")))]
    1823                 :          36 :   "TARGET_AVX512BW"
    1824                 :             :   "vmovdqu<ssescalarsize>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
    1825                 :             :   [(set_attr "type" "ssemov")
    1826                 :             :    (set_attr "prefix" "evex")
    1827                 :             :    (set_attr "memory" "store")
    1828                 :             :    (set_attr "mode" "<sseinsnmode>")])
    1829                 :             : 
    1830                 :             : (define_expand "sse2_movq128"
    1831                 :             :   [(set (match_operand:V2DI 0 "register_operand")
    1832                 :           0 :         (vec_concat:V2DI
    1833                 :           0 :           (vec_select:DI
    1834                 :           7 :             (match_operand:V2DI 1 "nonimmediate_operand")
    1835                 :             :             (parallel [(const_int 0)]))
    1836                 :             :           (const_int 0)))]
    1837                 :             :   "TARGET_SSE2")
    1838                 :           0 : 
    1839                 :             : (define_insn "*sse2_movq128_<mode>"
    1840                 :             :   [(set (match_operand:VI8F_128 0 "register_operand" "=v")
    1841                 :             :         (vec_concat:VI8F_128
    1842                 :           0 :           (vec_select:<ssescalarmode>
    1843                 :             :             (match_operand:VI8F_128 1 "nonimmediate_operand" "vm")
    1844                 :             :             (parallel [(const_int 0)]))
    1845                 :             :           (match_operand:<ssescalarmode> 2 "const0_operand")))]
    1846                 :         278 :   "TARGET_SSE2"
    1847                 :             :   "%vmovq\t{%1, %0|%0, %q1}"
    1848                 :             :   [(set_attr "type" "ssemov")
    1849                 :             :    (set_attr "prefix" "maybe_vex")
    1850                 :         288 :    (set_attr "mode" "TI")])
    1851                 :       43813 : 
    1852                 :       43813 : (define_insn "*sse2_movq128_<mode>_1"
    1853                 :       43525 :   [(set (match_operand:VI8F_128 0 "register_operand" "=v")
    1854                 :       47495 :         (vec_merge:VI8F_128
    1855                 :        3970 :           (match_operand:VI8F_128 1 "nonimmediate_operand" "vm")
    1856                 :        3970 :           (match_operand:VI8F_128 2 "const0_operand")
    1857                 :        3970 :           (const_int 1)))]
    1858                 :        2141 :   "TARGET_SSE2"
    1859                 :        3970 :   "%vmovq\t{%1, %0|%0, %q1}"
    1860                 :             :   [(set_attr "type" "ssemov")
    1861                 :       10118 :    (set_attr "prefix" "maybe_vex")
    1862                 :       10118 :    (set_attr "mode" "TI")])
    1863                 :             : 
    1864                 :       10100 : ;; Move a DI from a 32-bit register pair (e.g. %edx:%eax) to an xmm.
    1865                 :       10100 : ;; We'd rather avoid this entirely; if the 32-bit reg pair was loaded
    1866                 :       10100 : ;; from memory, we'd prefer to load the memory directly into the %xmm
    1867                 :             : ;; register.  To facilitate this happy circumstance, this pattern won't
    1868                 :             : ;; split until after register allocation.  If the 64-bit value didn't
    1869                 :             : ;; come from memory, this is the best we can do.  This is much better
    1870                 :             : ;; than storing %edx:%eax into a stack temporary and loading an %xmm
    1871                 :             : ;; from there.
    1872                 :             : 
    1873                 :             : (define_insn_and_split "movdi_to_sse"
    1874                 :             :   [(set (match_operand:V4SI 0 "register_operand" "=x,x,?x")
    1875                 :             :         (unspec:V4SI [(match_operand:DI 1 "nonimmediate_operand" "r,m,r")]
    1876                 :             :                      UNSPEC_MOVDI_TO_SSE))
    1877                 :             :      (clobber (match_scratch:V4SI 2 "=X,X,&x"))]
    1878                 :           0 :   "!TARGET_64BIT && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC"
    1879                 :             :   "#"
    1880                 :           0 :   "&& reload_completed"
    1881                 :           0 :   [(const_int 0)]
    1882                 :           0 : {
    1883                 :        2752 :  if (register_operand (operands[1], DImode))
    1884                 :        2578 :    {
    1885                 :           0 :       /* The DImode arrived in a pair of integral registers (e.g. %edx:%eax).
    1886                 :         174 :          Assemble the 64-bit DImode value in an xmm register.  */
    1887                 :        2578 :       emit_insn (gen_sse2_loadld (operands[0], CONST0_RTX (V4SImode),
    1888                 :       36183 :                                   gen_lowpart (SImode, operands[1])));
    1889                 :          60 :       if (TARGET_SSE4_1)
    1890                 :         114 :         emit_insn (gen_sse4_1_pinsrd (operands[0], operands[0],
    1891                 :         114 :                                       gen_highpart (SImode, operands[1]),
    1892                 :       36550 :                                       GEN_INT (2)));
    1893                 :         287 :       else
    1894                 :             :         {
    1895                 :         287 :           emit_insn (gen_sse2_loadld (operands[2], CONST0_RTX (V4SImode),
    1896                 :         287 :                                       gen_highpart (SImode, operands[1])));
    1897                 :           0 :           emit_insn (gen_vec_interleave_lowv4si (operands[0], operands[0],
    1898                 :         277 :                                                  operands[2]));
    1899                 :         277 :         }
    1900                 :         277 :   }
    1901                 :           0 :  else if (memory_operand (operands[1], DImode))
    1902                 :         277 :    emit_insn (gen_vec_concatv2di (gen_lowpart (V2DImode, operands[0]),
    1903                 :         277 :                                   operands[1], const0_rtx));
    1904                 :         277 :  else
    1905                 :           0 :    gcc_unreachable ();
    1906                 :         194 :  DONE;
    1907                 :         194 : }
    1908                 :         194 :   [(set_attr "isa" "sse4,*,*")])
    1909                 :         194 : 
    1910                 :             : (define_split
    1911                 :             :   [(set (match_operand:V4SF 0 "register_operand")
    1912                 :             :         (match_operand:V4SF 1 "zero_extended_scalar_load_operand"))]
    1913                 :       18094 :   "TARGET_SSE && reload_completed"
    1914                 :             :   [(set (match_dup 0)
    1915                 :        8330 :         (vec_merge:V4SF
    1916                 :             :           (vec_duplicate:V4SF (match_dup 1))
    1917                 :       46618 :           (match_dup 2)
    1918                 :       46618 :           (const_int 1)))]
    1919                 :       46993 : {
    1920                 :       54948 :   operands[1] = gen_lowpart (SFmode, operands[1]);
    1921                 :        8330 :   operands[2] = CONST0_RTX (V4SFmode);
    1922                 :           0 : })
    1923                 :           0 : 
    1924                 :           0 : (define_split
    1925                 :        8330 :   [(set (match_operand:V2DF 0 "register_operand")
    1926                 :        8330 :         (match_operand:V2DF 1 "zero_extended_scalar_load_operand"))]
    1927                 :       34871 :   "TARGET_SSE2 && reload_completed"
    1928                 :        8330 :   [(set (match_dup 0) (vec_concat:V2DF (match_dup 1) (match_dup 2)))]
    1929                 :       33460 : {
    1930                 :       20895 :   operands[1] = gen_lowpart (DFmode, operands[1]);
    1931                 :       20895 :   operands[2] = CONST0_RTX (DFmode);
    1932                 :             : })
    1933                 :             : 
    1934                 :             : (define_expand "movmisalign<mode>"
    1935                 :       12565 :   [(set (match_operand:VMOVE 0 "nonimmediate_operand")
    1936                 :       12565 :         (match_operand:VMOVE 1 "nonimmediate_operand"))]
    1937                 :      323706 :   "TARGET_SSE"
    1938                 :      124350 : {
    1939                 :      553089 :   ix86_expand_vector_move_misalign (<MODE>mode, operands);
    1940                 :      616361 :   DONE;
    1941                 :      315376 : })
    1942                 :      302811 : 
    1943                 :      302811 : ;; Merge movsd/movhpd to movupd for TARGET_SSE_UNALIGNED_LOAD_OPTIMAL targets.
    1944                 :      512321 : (define_peephole2
    1945                 :       12565 :   [(set (match_operand:V2DF 0 "sse_reg_operand")
    1946                 :       12571 :         (vec_concat:V2DF (match_operand:DF 1 "memory_operand")
    1947                 :      222081 :                          (match_operand:DF 4 "const0_operand")))
    1948                 :      209516 :    (set (match_operand:V2DF 2 "sse_reg_operand")
    1949                 :      209516 :         (vec_concat:V2DF (vec_select:DF (match_dup 2)
    1950                 :      209510 :                                         (parallel [(const_int 0)]))
    1951                 :      209511 :                          (match_operand:DF 3 "memory_operand")))]
    1952                 :      209982 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL
    1953                 :           1 :    && ix86_operands_ok_for_move_multiple (operands, true, DFmode)"
    1954                 :           0 :   [(set (match_dup 2) (match_dup 5))]
    1955                 :         471 :   "operands[5] = adjust_address (operands[1], V2DFmode, 0);")
    1956                 :         471 : 
    1957                 :         471 : (define_peephole2
    1958                 :       85296 :   [(set (match_operand:DF 0 "sse_reg_operand")
    1959                 :         627 :         (match_operand:DF 1 "memory_operand"))
    1960                 :         471 :    (set (match_operand:V2DF 2 "sse_reg_operand")
    1961                 :       84981 :         (vec_concat:V2DF (match_operand:DF 4 "sse_reg_operand")
    1962                 :       84764 :                          (match_operand:DF 3 "memory_operand")))]
    1963                 :       86965 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL
    1964                 :       86965 :    && REGNO (operands[4]) == REGNO (operands[2])
    1965                 :       86441 :    && ix86_operands_ok_for_move_multiple (operands, true, DFmode)"
    1966                 :       86753 :   [(set (match_dup 2) (match_dup 5))]
    1967                 :         310 :   "operands[5] = adjust_address (operands[1], V2DFmode, 0);")
    1968                 :         308 : 
    1969                 :       88496 : ;; Merge movlpd/movhpd to movupd for TARGET_SSE_UNALIGNED_STORE_OPTIMAL targets.
    1970                 :       88692 : (define_peephole2
    1971                 :       88648 :   [(set (match_operand:DF 0 "memory_operand")
    1972                 :       89943 :         (vec_select:DF (match_operand:V2DF 1 "sse_reg_operand")
    1973                 :       88692 :                        (parallel [(const_int 0)])))
    1974                 :       88648 :    (set (match_operand:DF 2 "memory_operand")
    1975                 :       88648 :         (vec_select:DF (match_operand:V2DF 3 "sse_reg_operand")
    1976                 :        1449 :                        (parallel [(const_int 1)])))]
    1977                 :         457 :   "TARGET_SSE2 && TARGET_SSE_UNALIGNED_STORE_OPTIMAL
    1978                 :         456 :    && ix86_operands_ok_for_move_multiple (operands, false, DFmode)"
    1979                 :         455 :   [(set (match_dup 4) (match_dup 1))]
    1980                 :        7734 :   "operands[4] = adjust_address (operands[0], V2DFmode, 0);")
    1981                 :         156 : 
    1982                 :        9027 : (define_insn "<sse3>_lddqu<avxsizesuffix>"
    1983                 :        8875 :   [(set (match_operand:VI1 0 "register_operand" "=x,x")
    1984                 :         156 :         (unspec:VI1 [(match_operand:VI1 1 "memory_operand" "m,jm")]
    1985                 :        9029 :                     UNSPEC_LDDQU))]
    1986                 :         255 :   "TARGET_SSE3"
    1987                 :        1312 :   "%vlddqu\t{%1, %0|%0, %1}"
    1988                 :           2 :   [(set_attr "isa" "noavx,avx")
    1989                 :           2 :    (set_attr "type" "ssemov")
    1990                 :        1297 :    (set_attr "addr" "*,gpr16")
    1991                 :        1297 :    (set_attr "movu" "1")
    1992                 :        1297 :    (set (attr "prefix_data16")
    1993                 :        1297 :      (if_then_else
    1994                 :     5963147 :        (match_test "TARGET_AVX")
    1995                 :     5963045 :      (const_string "*")
    1996                 :     8563623 :      (const_string "0")))
    1997                 :        1051 :    (set (attr "prefix_rep")
    1998                 :         945 :      (if_then_else
    1999                 :        1295 :        (match_test "TARGET_AVX")
    2000                 :         392 :      (const_string "*")
    2001                 :         412 :      (const_string "1")))
    2002                 :        1295 :    (set_attr "prefix" "maybe_vex")
    2003                 :        1315 :    (set_attr "mode" "<sseinsnmode>")])
    2004                 :        1372 : 
    2005                 :        1315 : (define_insn "sse2_movnti<mode>"
    2006                 :          20 :   [(set (match_operand:SWI48 0 "memory_operand" "=m")
    2007                 :        1315 :         (unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r")]
    2008                 :        1295 :                       UNSPEC_MOVNT))]
    2009                 :         311 :   "TARGET_SSE2"
    2010                 :        1315 :   "movnti\t{%1, %0|%0, %1}"
    2011                 :        1315 :   [(set_attr "type" "ssemov")
    2012                 :        1315 :    (set_attr "prefix_data16" "0")
    2013                 :        2612 :    (set_attr "mode" "<MODE>")])
    2014                 :          66 : 
    2015                 :        1317 : (define_insn "<sse>_movnt<mode>"
    2016                 :        1317 :   [(set (match_operand:VF 0 "memory_operand" "=m")
    2017                 :        1297 :         (unspec:VF
    2018                 :        1297 :           [(match_operand:VF 1 "register_operand" "v")]
    2019                 :        1297 :           UNSPEC_MOVNT))]
    2020                 :          58 :   "TARGET_SSE"
    2021                 :          14 :   "%vmovnt<ssemodesuffix>\t{%1, %0|%0, %1}"
    2022                 :        1297 :   [(set_attr "type" "ssemov")
    2023                 :        1297 :    (set_attr "prefix" "maybe_vex")
    2024                 :        1297 :    (set_attr "mode" "<MODE>")])
    2025                 :         328 : 
    2026                 :        1137 : (define_insn "<sse2>_movnt<mode>"
    2027                 :        1139 :   [(set (match_operand:VI8 0 "memory_operand" "=m")
    2028                 :         161 :         (unspec:VI8 [(match_operand:VI8 1 "register_operand" "v")]
    2029                 :          50 :                     UNSPEC_MOVNT))]
    2030                 :         122 :   "TARGET_SSE2"
    2031                 :          14 :   "%vmovntdq\t{%1, %0|%0, %1}"
    2032                 :          48 :   [(set_attr "type" "ssecvt")
    2033                 :           2 :    (set (attr "prefix_data16")
    2034                 :          52 :      (if_then_else
    2035                 :          50 :        (match_test "TARGET_AVX")
    2036                 :          59 :      (const_string "*")
    2037                 :         519 :      (const_string "1")))
    2038                 :          13 :    (set_attr "prefix" "maybe_vex")
    2039                 :         387 :    (set_attr "mode" "<sseinsnmode>")])
    2040                 :        1498 : 
    2041                 :         381 : ; Expand patterns for non-temporal stores.  At the moment, only those
    2042                 :         449 : ; that directly map to insns are defined; it would be possible to
    2043                 :         442 : ; define patterns for other modes that would expand to several insns.
    2044                 :        1120 : 
    2045                 :        1494 : ;; Modes handled by storent patterns.
    2046                 :        1528 : (define_mode_iterator STORENT_MODE
    2047                 :        1428 :   [(DI "TARGET_SSE2 && TARGET_64BIT") (SI "TARGET_SSE2")
    2048                 :        1528 :    (SF "TARGET_SSE4A") (DF "TARGET_SSE4A")
    2049                 :        1528 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
    2050                 :        1528 :    (V4DI "TARGET_AVX") (V2DI "TARGET_SSE2")
    2051                 :         483 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512") (V8SF "TARGET_AVX") V4SF
    2052                 :         499 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")
    2053                 :         157 :    (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
    2054                 :         154 : 
    2055                 :         154 : (define_expand "storent<mode>"
    2056                 :         144 :   [(set (match_operand:STORENT_MODE 0 "memory_operand")
    2057                 :          34 :         (unspec:STORENT_MODE
    2058                 :          35 :           [(match_operand:STORENT_MODE 1 "register_operand")]
    2059                 :           2 :           UNSPEC_MOVNT))]
    2060                 :           3 :   "TARGET_SSE")
    2061                 :          10 : 
    2062                 :         382 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2063                 :         382 : ;;
    2064                 :         374 : ;; Mask operations
    2065                 :          67 : ;;
    2066                 :          67 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2067                 :         101 : 
    2068                 :          35 : ;; All integer modes with AVX512BW/DQ.
    2069                 :          35 : (define_mode_iterator SWI1248_AVX512BWDQ
    2070                 :           4 :   [(QI "TARGET_AVX512DQ") HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    2071                 :           0 : 
    2072                 :           3 : ;; All integer modes with AVX512BW, where HImode operation
    2073                 :           3 : ;; can be used instead of QImode.
    2074                 :       23505 : (define_mode_iterator SWI1248_AVX512BW
    2075                 :       20447 :   [QI HI (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    2076                 :      121731 : 
    2077                 :      127763 : ;; All integer modes with AVX512BW/DQ, even HImode requires DQ.
    2078                 :           3 : (define_mode_iterator SWI1248_AVX512BWDQ2
    2079                 :     4859807 :   [(QI "TARGET_AVX512DQ") (HI "TARGET_AVX512DQ")
    2080                 :     4502998 :    (SI "TARGET_AVX512BW") (DI "TARGET_AVX512BW")])
    2081                 :     1268073 : 
    2082                 :        5387 : (define_expand "kmov<mskmodesuffix>"
    2083                 :     4774789 :   [(set (match_operand:SWI1248_AVX512BWDQ 0 "nonimmediate_operand")
    2084                 :     4600652 :         (match_operand:SWI1248_AVX512BWDQ 1 "nonimmediate_operand"))]
    2085                 :     3426248 :   "TARGET_AVX512F
    2086                 :     6023561 :    && !(MEM_P (operands[0]) && MEM_P (operands[1]))")
    2087                 :     2421956 : 
    2088                 :     5974576 : (define_insn "k<code><mode>"
    2089                 :     6672775 :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    2090                 :     9332074 :         (any_logic:SWI1248_AVX512BW
    2091                 :        5804 :           (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")
    2092                 :        6056 :           (match_operand:SWI1248_AVX512BW 2 "register_operand" "k")))
    2093                 :         264 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2094                 :        3865 :   "TARGET_AVX512F"
    2095                 :        1048 : {
    2096                 :     6931985 :   if (get_attr_mode (insn) == MODE_HI)
    2097                 :         350 :     return "k<logic>w\t{%2, %1, %0|%0, %1, %2}";
    2098                 :         591 :   else
    2099                 :      546107 :     return "k<logic><mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    2100                 :          24 : }
    2101                 :          68 :   [(set_attr "type" "msklog")
    2102                 :     5023272 :    (set_attr "prefix" "vex")
    2103                 :         526 :    (set (attr "mode")
    2104                 :      385826 :      (cond [(and (match_test "<MODE>mode == QImode")
    2105                 :     4892395 :                  (not (match_test "TARGET_AVX512DQ")))
    2106                 :       26743 :                (const_string "HI")
    2107                 :       26670 :            ]
    2108                 :     1477659 :            (const_string "<MODE>")))])
    2109                 :     1450804 : 
    2110                 :     3240000 : (define_split
    2111                 :      676428 :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2112                 :     1443718 :         (any_logic:SWI1248_AVX512BW
    2113                 :     3098443 :           (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand")
    2114                 :           5 :           (match_operand:SWI1248_AVX512BW 2 "mask_reg_operand")))]
    2115                 :           7 :   "TARGET_AVX512F && reload_completed"
    2116                 :      161469 :   [(parallel
    2117                 :      161464 :      [(set (match_dup 0)
    2118                 :      322925 :            (any_logic:SWI1248_AVX512BW (match_dup 1) (match_dup 2)))
    2119                 :          86 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2120                 :      161390 : 
    2121                 :           7 : (define_split
    2122                 :          27 :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2123                 :          27 :         (any_logic:SWI1248_AVX512BW
    2124                 :          29 :           (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand")
    2125                 :          16 :           (match_operand:SWI1248_AVX512BW 2 "mask_reg_operand")))
    2126                 :          16 :    (clobber (reg:CC FLAGS_REG))]
    2127                 :          78 :   "TARGET_AVX512F && reload_completed"
    2128                 :          13 :   [(parallel
    2129                 :         574 :      [(set (match_dup 0)
    2130                 :           7 :            (any_logic:SWI1248_AVX512BW (match_dup 1) (match_dup 2)))
    2131                 :         641 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2132                 :         520 : 
    2133                 :           8 : (define_insn "kandn<mode>"
    2134                 :         234 :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    2135                 :           8 :         (and:SWI1248_AVX512BW
    2136                 :           2 :           (not:SWI1248_AVX512BW
    2137                 :           1 :             (match_operand:SWI1248_AVX512BW 1 "register_operand" "k"))
    2138                 :           8 :           (match_operand:SWI1248_AVX512BW 2 "register_operand" "k")))
    2139                 :           9 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2140                 :          91 :   "TARGET_AVX512F"
    2141                 :          71 : {
    2142                 :          45 :   if (get_attr_mode (insn) == MODE_HI)
    2143                 :           6 :     return "kandnw\t{%2, %1, %0|%0, %1, %2}";
    2144                 :         217 :   else
    2145                 :         250 :     return "kandn<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    2146                 :         265 : }
    2147                 :          17 :   [(set_attr "type" "msklog")
    2148                 :          44 :    (set_attr "prefix" "vex")
    2149                 :          51 :    (set (attr "mode")
    2150                 :          61 :      (cond [(and (match_test "<MODE>mode == QImode")
    2151                 :          44 :                  (not (match_test "TARGET_AVX512DQ")))
    2152                 :           2 :               (const_string "HI")
    2153                 :          28 :            ]
    2154                 :           1 :            (const_string "<MODE>")))])
    2155                 :          28 : 
    2156                 :          27 : (define_split
    2157                 :           0 :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2158                 :          27 :         (and:SWI1248_AVX512BW
    2159                 :             :           (not:SWI1248_AVX512BW
    2160                 :             :             (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand"))
    2161                 :           1 :           (match_operand:SWI1248_AVX512BW 2 "mask_reg_operand")))
    2162                 :           3 :    (clobber (reg:CC FLAGS_REG))]
    2163                 :           3 :   "TARGET_AVX512F && reload_completed"
    2164                 :           2 :   [(parallel
    2165                 :           1 :      [(set (match_dup 0)
    2166                 :           1 :            (and:SWI1248_AVX512BW
    2167                 :        2439 :              (not:SWI1248_AVX512BW (match_dup 1))
    2168                 :        2544 :              (match_dup 2)))
    2169                 :        2438 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2170                 :           4 : 
    2171                 :         106 : (define_insn "kxnor<mode>"
    2172                 :           4 :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    2173                 :           8 :         (not:SWI1248_AVX512BW
    2174                 :           0 :           (xor:SWI1248_AVX512BW
    2175                 :           8 :             (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")
    2176                 :           4 :             (match_operand:SWI1248_AVX512BW 2 "register_operand" "k"))))
    2177                 :           0 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2178                 :          70 :   "TARGET_AVX512F"
    2179                 :          59 : {
    2180                 :          36 :   if (get_attr_mode (insn) == MODE_HI)
    2181                 :           0 :     return "kxnorw\t{%2, %1, %0|%0, %1, %2}";
    2182                 :         197 :   else
    2183                 :         232 :     return "kxnor<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}";
    2184                 :         197 : }
    2185                 :           0 :   [(set_attr "type" "msklog")
    2186                 :           0 :    (set_attr "prefix" "vex")
    2187                 :           0 :    (set (attr "mode")
    2188                 :          92 :      (cond [(and (match_test "<MODE>mode == QImode")
    2189                 :           0 :                  (not (match_test "TARGET_AVX512DQ")))
    2190                 :           0 :               (const_string "HI")
    2191                 :           0 :            ]
    2192                 :           0 :            (const_string "<MODE>")))])
    2193                 :           0 : 
    2194                 :           0 : (define_insn "knot<mode>"
    2195                 :             :   [(set (match_operand:SWI1248_AVX512BW 0 "register_operand" "=k")
    2196                 :             :         (not:SWI1248_AVX512BW
    2197                 :             :           (match_operand:SWI1248_AVX512BW 1 "register_operand" "k")))
    2198                 :             :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2199                 :          86 :   "TARGET_AVX512F"
    2200                 :          90 : {
    2201                 :          67 :   if (get_attr_mode (insn) == MODE_HI)
    2202                 :             :     return "knotw\t{%1, %0|%0, %1}";
    2203                 :         158 :   else
    2204                 :         203 :     return "knot<mskmodesuffix>\t{%1, %0|%0, %1}";
    2205                 :             : }
    2206                 :             :   [(set_attr "type" "msklog")
    2207                 :             :    (set_attr "prefix" "vex")
    2208                 :             :    (set (attr "mode")
    2209                 :          45 :      (cond [(and (match_test "<MODE>mode == QImode")
    2210                 :             :                  (not (match_test "TARGET_AVX512DQ")))
    2211                 :             :                (const_string "HI")
    2212                 :             :            ]
    2213                 :             :            (const_string "<MODE>")))])
    2214                 :             : 
    2215                 :             : (define_split
    2216                 :             :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2217                 :             :         (not:SWI1248_AVX512BW
    2218                 :             :           (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand")))]
    2219                 :          35 :   "TARGET_AVX512F && reload_completed"
    2220                 :          35 :   [(parallel
    2221                 :      213773 :      [(set (match_dup 0)
    2222                 :           1 :            (not:SWI1248_AVX512BW (match_dup 1)))
    2223                 :           1 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2224                 :      213774 : 
    2225                 :             : (define_insn "*knotsi_1_zext"
    2226                 :             :   [(set (match_operand:DI 0 "register_operand" "=k")
    2227                 :             :         (zero_extend:DI
    2228                 :             :           (not:SI (match_operand:SI 1 "register_operand" "k"))))
    2229                 :             :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2230                 :           0 :   "TARGET_AVX512BW"
    2231                 :             :   "knotd\t{%1, %0|%0, %1}";
    2232                 :             :   [(set_attr "type" "msklog")
    2233                 :             :    (set_attr "prefix" "vex")
    2234                 :         579 :    (set_attr "mode" "SI")])
    2235                 :         579 : 
    2236                 :             : (define_split
    2237                 :             :   [(set (match_operand:DI 0 "mask_reg_operand")
    2238                 :             :         (zero_extend:DI
    2239                 :             :           (not:SI (match_operand:SI 1 "mask_reg_operand"))))]
    2240                 :           0 :   "TARGET_AVX512BW && reload_completed"
    2241                 :         290 :   [(parallel
    2242                 :           0 :      [(set (match_dup 0)
    2243                 :          40 :            (zero_extend:DI
    2244                 :          34 :              (not:SI (match_dup 1))))
    2245                 :          34 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2246                 :          34 : 
    2247                 :          40 : (define_insn "kadd<mode>"
    2248                 :          52 :   [(set (match_operand:SWI1248_AVX512BWDQ2 0 "register_operand" "=k")
    2249                 :          52 :         (plus:SWI1248_AVX512BWDQ2
    2250                 :          41 :           (match_operand:SWI1248_AVX512BWDQ2 1 "register_operand" "k")
    2251                 :           1 :           (match_operand:SWI1248_AVX512BWDQ2 2 "register_operand" "k")))
    2252                 :           1 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2253                 :         257 :   "TARGET_AVX512F"
    2254                 :          41 :   "kadd<mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2255                 :          13 :   [(set_attr "type" "msklog")
    2256                 :          11 :    (set_attr "prefix" "vex")
    2257                 :           0 :    (set_attr "mode" "<MODE>")])
    2258                 :           1 : 
    2259                 :           1 : ;; Mask variant shift mnemonics
    2260                 :           1 : (define_code_attr mshift [(ashift "shiftl") (lshiftrt "shiftr")])
    2261                 :           0 : 
    2262                 :             : (define_insn "k<code><mode>"
    2263                 :           0 :   [(set (match_operand:SWI1248_AVX512BWDQ 0 "register_operand" "=k")
    2264                 :           0 :         (any_lshift:SWI1248_AVX512BWDQ
    2265                 :           0 :           (match_operand:SWI1248_AVX512BWDQ 1 "register_operand" "k")
    2266                 :           0 :           (match_operand 2 "const_0_to_255_operand")))
    2267                 :           0 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2268                 :        3872 :   "TARGET_AVX512F"
    2269                 :           0 :   "k<mshift><mskmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2270                 :           0 :   [(set_attr "type" "msklog")
    2271                 :           0 :    (set_attr "prefix" "vex")
    2272                 :           0 :    (set_attr "mode" "<MODE>")])
    2273                 :        1187 : 
    2274                 :             : (define_split
    2275                 :             :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2276                 :             :         (any_lshift:SWI1248_AVX512BW
    2277                 :             :           (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand")
    2278                 :             :           (match_operand 2 "const_int_operand")))]
    2279                 :           0 :   "TARGET_AVX512F && reload_completed"
    2280                 :           0 :   [(parallel
    2281                 :             :      [(set (match_dup 0)
    2282                 :             :            (any_lshift:SWI1248_AVX512BW
    2283                 :           0 :              (match_dup 1)
    2284                 :           0 :              (match_dup 2)))
    2285                 :             :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2286                 :             : 
    2287                 :             : (define_split
    2288                 :             :   [(set (match_operand:SWI1248_AVX512BW 0 "mask_reg_operand")
    2289                 :             :         (any_lshift:SWI1248_AVX512BW
    2290                 :             :           (match_operand:SWI1248_AVX512BW 1 "mask_reg_operand")
    2291                 :             :           (match_operand 2 "const_int_operand")))
    2292                 :             :    (clobber (reg:CC FLAGS_REG))]
    2293                 :          26 :   "TARGET_AVX512F && reload_completed"
    2294                 :             :   [(parallel
    2295                 :          23 :      [(set (match_dup 0)
    2296                 :             :            (any_lshift:SWI1248_AVX512BW
    2297                 :      617092 :              (match_dup 1)
    2298                 :      617092 :              (match_dup 2)))
    2299                 :      617094 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2300                 :             : 
    2301                 :             : (define_insn "*klshrsi3_1_zext"
    2302                 :             :   [(set (match_operand:DI 0 "register_operand" "=k")
    2303                 :             :         (zero_extend:DI
    2304                 :             :           (lshiftrt:SI (match_operand:SI 1 "register_operand" "k")
    2305                 :             :                        (match_operand 2 "const_0_to_31_operand" "I"))))
    2306                 :             :       (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2307                 :           1 :   "TARGET_AVX512BW"
    2308                 :           5 :   "kshiftrd\t{%2, %1, %0|%0, %1, %2}"
    2309                 :             :     [(set_attr "type" "msklog")
    2310                 :             :    (set_attr "prefix" "vex")
    2311                 :             :    (set_attr "mode" "SI")])
    2312                 :             : 
    2313                 :             : (define_split
    2314                 :             :   [(set (match_operand:DI 0 "mask_reg_operand")
    2315                 :           5 :         (zero_extend:DI
    2316                 :           5 :           (lshiftrt:SI
    2317                 :             :             (match_operand:SI 1 "mask_reg_operand")
    2318                 :           0 :             (match_operand 2 "const_0_to_31_operand"))))
    2319                 :           0 :     (clobber (reg:CC FLAGS_REG))]
    2320                 :           1 :   "TARGET_AVX512BW && reload_completed"
    2321                 :             :   [(parallel
    2322                 :           1 :      [(set (match_dup 0)
    2323                 :             :            (zero_extend:DI
    2324                 :         202 :              (lshiftrt:SI
    2325                 :         202 :                (match_dup 1)
    2326                 :             :                (match_dup 2))))
    2327                 :         151 :       (unspec [(const_int 0)] UNSPEC_MASKOP)])])
    2328                 :             : 
    2329                 :           0 : (define_insn "ktest<mode>"
    2330                 :           0 :   [(set (reg:CC FLAGS_REG)
    2331                 :             :         (unspec:CC
    2332                 :             :           [(match_operand:SWI1248_AVX512BWDQ2 0 "register_operand" "k")
    2333                 :             :            (match_operand:SWI1248_AVX512BWDQ2 1 "register_operand" "k")]
    2334                 :             :           UNSPEC_KTEST))]
    2335                 :             :   "TARGET_AVX512F"
    2336                 :             :   "ktest<mskmodesuffix>\t{%1, %0|%0, %1}"
    2337                 :             :   [(set_attr "mode" "<MODE>")
    2338                 :             :    (set_attr "type" "msklog")
    2339                 :             :    (set_attr "prefix" "vex")])
    2340                 :             : 
    2341                 :             : (define_insn "*kortest<mode>"
    2342                 :             :   [(set (reg FLAGS_REG)
    2343                 :             :         (unspec
    2344                 :             :           [(match_operand:SWI1248_AVX512BWDQ 0 "register_operand" "k")
    2345                 :             :            (match_operand:SWI1248_AVX512BWDQ 1 "register_operand" "k")]
    2346                 :             :           UNSPEC_KORTEST))]
    2347                 :       15498 :   "TARGET_AVX512F"
    2348                 :             :   "kortest<mskmodesuffix>\t{%1, %0|%0, %1}"
    2349                 :             :   [(set_attr "mode" "<MODE>")
    2350                 :             :    (set_attr "type" "msklog")
    2351                 :         699 :    (set_attr "prefix" "vex")])
    2352                 :         699 : 
    2353                 :         590 : (define_insn "kortest<mode>_ccc"
    2354                 :        1208 :   [(set (reg:CCC FLAGS_REG)
    2355                 :             :         (unspec:CCC
    2356                 :             :           [(match_operand:SWI1248_AVX512BWDQ 0 "register_operand")
    2357                 :             :            (match_operand:SWI1248_AVX512BWDQ 1 "register_operand")]
    2358                 :             :           UNSPEC_KORTEST))]
    2359                 :           0 :   "TARGET_AVX512F")
    2360                 :             : 
    2361                 :             : (define_insn "kortest<mode>_ccz"
    2362                 :             :   [(set (reg:CCZ FLAGS_REG)
    2363                 :           0 :         (unspec:CCZ
    2364                 :           0 :           [(match_operand:SWI1248_AVX512BWDQ 0 "register_operand")
    2365                 :             :            (match_operand:SWI1248_AVX512BWDQ 1 "register_operand")]
    2366                 :             :           UNSPEC_KORTEST))]
    2367                 :           0 :   "TARGET_AVX512F")
    2368                 :             : 
    2369                 :             : (define_expand "kortest<mode>"
    2370                 :             :   [(set (reg:CC FLAGS_REG)
    2371                 :           0 :         (unspec:CC
    2372                 :           0 :           [(match_operand:SWI1248_AVX512BWDQ 0 "register_operand")
    2373                 :             :            (match_operand:SWI1248_AVX512BWDQ 1 "register_operand")]
    2374                 :             :           UNSPEC_KORTEST))]
    2375                 :             :   "TARGET_AVX512F")
    2376                 :             : 
    2377                 :             : ;; Optimize cmp + setcc with mask register by kortest + setcc.
    2378                 :             : (define_insn_and_split "*kortest_cmp<mode>_setcc"
    2379                 :             :    [(set (match_operand:QI 0 "nonimmediate_operand" "=qm, qm")
    2380                 :             :          (match_operator:QI 1 "bt_comparison_operator"
    2381                 :             :             [(match_operand:SWI1248_AVX512BWDQ_64 2 "register_operand" "?k, <r>")
    2382                 :             :              (const_int -1)]))
    2383                 :             :   (clobber (reg:CC FLAGS_REG))]
    2384                 :         153 :   "TARGET_AVX512BW"
    2385                 :             :   "#"
    2386                 :           8 :   "&& reload_completed"
    2387                 :          32 :   [(const_int 0)]
    2388                 :          32 : {
    2389                 :          16 :   if (MASK_REGNO_P (REGNO (operands[2])))
    2390                 :       18048 :     {
    2391                 :       18080 :       emit_insn (gen_kortest<mode>_ccc (operands[2], operands[2]));
    2392                 :           8 :       operands[4] = gen_rtx_REG (CCCmode, FLAGS_REG);
    2393                 :             :     }
    2394                 :      692340 :   else
    2395                 :      692340 :     {
    2396                 :      692348 :       operands[4] = gen_rtx_REG (CCZmode, FLAGS_REG);
    2397                 :           8 :       emit_insn (gen_rtx_SET (operands[4],
    2398                 :      400874 :                               gen_rtx_COMPARE (CCZmode,
    2399                 :      400874 :                                                operands[2],
    2400                 :             :                                                constm1_rtx)));
    2401                 :        7754 :     }
    2402                 :        7770 :   ix86_expand_setcc (operands[0],
    2403                 :          16 :                      GET_CODE (operands[1]),
    2404                 :         169 :                      operands[4],
    2405                 :             :                      const0_rtx);
    2406                 :          24 :   DONE;
    2407                 :          16 : })
    2408                 :             : 
    2409                 :             : ;; Optimize cmp + jcc with mask register by kortest + jcc.
    2410                 :             : (define_insn_and_split "*kortest_cmp<mode>_jcc"
    2411                 :             :    [(set (pc)
    2412                 :             :       (if_then_else
    2413                 :             :         (match_operator 0 "bt_comparison_operator"
    2414                 :             :           [(match_operand:SWI1248_AVX512BWDQ_64 1 "register_operand" "?k, <r>")
    2415                 :             :            (const_int -1)])
    2416                 :             :           (label_ref (match_operand 2))
    2417                 :             :       (pc)))
    2418                 :             :   (clobber (reg:CC FLAGS_REG))]
    2419                 :        3934 :   "TARGET_AVX512BW"
    2420                 :             :   "#"
    2421                 :          14 :   "&& reload_completed"
    2422                 :          69 :   [(const_int 0)]
    2423                 :         146 : {
    2424                 :          88 :   if (MASK_REGNO_P (REGNO (operands[1])))
    2425                 :       85491 :     {
    2426                 :       85643 :       emit_insn (gen_kortest<mode>_ccc (operands[1], operands[1]));
    2427                 :          26 :       operands[4] = gen_rtx_REG (CCCmode, FLAGS_REG);
    2428                 :           6 :     }
    2429                 :           0 :   else
    2430                 :           6 :     {
    2431                 :          50 :       operands[4] = gen_rtx_REG (CCZmode, FLAGS_REG);
    2432                 :          50 :       emit_insn (gen_rtx_SET (operands[4],
    2433                 :             :                               gen_rtx_COMPARE (CCZmode,
    2434                 :             :                                                operands[1],
    2435                 :             :                                                constm1_rtx)));
    2436                 :             :     }
    2437                 :          70 :   ix86_expand_branch (GET_CODE (operands[0]),
    2438                 :             :                       operands[4],
    2439                 :             :                       const0_rtx,
    2440                 :             :                       operands[2]);
    2441                 :          70 :   DONE;
    2442                 :             : })
    2443                 :             : 
    2444                 :             : ;; Optimize cmp + movcc with mask register by kortest + movcc.
    2445                 :             : (define_insn_and_split "*kortest_cmp<SWI1248_AVX512BWDQ_64:mode>_movqicc"
    2446                 :             :    [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r")
    2447                 :             :       (if_then_else:QI
    2448                 :             :         (match_operator 1 "bt_comparison_operator"
    2449                 :             :           [(match_operand:SWI1248_AVX512BWDQ_64 4 "register_operand"
    2450                 :             :           "?k,<SWI1248_AVX512BWDQ_64:r>,?k, <SWI1248_AVX512BWDQ_64:r>,?k,r")
    2451                 :             :            (const_int -1)])
    2452                 :             :         (match_operand:QI 2 "register_operand"        "r,r,0,0,r,r")
    2453                 :             :         (match_operand:QI 3 "register_operand" " 0,0,r,r,r,r")))
    2454                 :           4 :     (clobber (reg:CC FLAGS_REG))]
    2455                 :         180 :   "TARGET_AVX512BW && TARGET_CMOVE && !TARGET_PARTIAL_REG_STALL"
    2456                 :           4 :   "#"
    2457                 :           4 :   "&& reload_completed"
    2458                 :           4 :   [(set (match_dup 0)
    2459                 :           6 :         (if_then_else:SI
    2460                 :           4 :           (match_dup 5)
    2461                 :         740 :           (match_dup 2)
    2462                 :          12 :           (match_dup 3)))]
    2463                 :           6 : {
    2464                 :           2 :   rtx flag_reg;
    2465                 :           6 :   if (MASK_REGNO_P (REGNO (operands[4])))
    2466                 :             :     {
    2467                 :           2 :       emit_insn (gen_kortest<SWI1248_AVX512BWDQ_64:mode>_ccc (operands[4], operands[4]));
    2468                 :           2 :       flag_reg = gen_rtx_REG (CCCmode, FLAGS_REG);
    2469                 :             :     }
    2470                 :             :   else
    2471                 :             :     {
    2472                 :           0 :       flag_reg = gen_rtx_REG (CCZmode, FLAGS_REG);
    2473                 :           0 :       emit_insn (gen_rtx_SET (flag_reg,
    2474                 :             :                               gen_rtx_COMPARE (CCZmode,
    2475                 :             :                                                operands[4],
    2476                 :             :                                                constm1_rtx)));
    2477                 :             :     }
    2478                 :           2 :   operands[5] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode,
    2479                 :             :                                 flag_reg,const0_rtx);
    2480                 :           2 :   operands[0] = gen_lowpart (SImode, operands[0]);
    2481                 :           2 :   operands[2] = gen_lowpart (SImode, operands[2]);
    2482                 :           2 :   operands[3] = gen_lowpart (SImode, operands[3]);
    2483                 :             : }
    2484                 :             :   [(set_attr "isa" "*,*,*,*,apx_ndd,apx_ndd")
    2485                 :             :    (set_attr "type" "icmov")
    2486                 :           2 :    (set_attr "mode" "QI")])
    2487                 :           2 : 
    2488                 :           2 : (define_insn_and_split "*kortest_cmp<SWI1248_AVX512BWDQ_64:mode>_mov<SWI248:mode>cc"
    2489                 :           2 :    [(set (match_operand:SWI248 0 "register_operand" "=r,r,r,r,r,r,r,r")
    2490                 :           2 :       (if_then_else:SWI248
    2491                 :           2 :         (match_operator 1 "bt_comparison_operator"
    2492                 :           2 :           [(match_operand:SWI1248_AVX512BWDQ_64 4 "register_operand"
    2493                 :           2 :           "?k,<SWI1248_AVX512BWDQ_64:r>,?k, <SWI1248_AVX512BWDQ_64:r>,?k,r,?k, r")
    2494                 :           2 :            (const_int -1)])
    2495                 :           2 :         (match_operand:SWI248 2 "nonimmediate_operand" "rm,rm, 0, 0,rm,rm, r, r")
    2496                 :           2 :         (match_operand:SWI248 3 "nonimmediate_operand" " 0, 0,rm,rm, r, r,rm,rm")))
    2497                 :           2 :     (clobber (reg:CC FLAGS_REG))]
    2498                 :        3989 :   "TARGET_AVX512BW && TARGET_CMOVE
    2499                 :          60 :    && !(MEM_P (operands[2]) && MEM_P (operands[3]))"
    2500                 :             :   "#"
    2501                 :           4 :   "&& reload_completed"
    2502                 :           3 :   [(set (match_dup 0)
    2503                 :          14 :         (if_then_else:SWI248
    2504                 :           5 :           (match_dup 5)
    2505                 :         543 :           (match_dup 2)
    2506                 :          40 :           (match_dup 3)))]
    2507                 :          12 : {
    2508                 :          12 :   rtx flag_reg;
    2509                 :       39414 :   if (MASK_REGNO_P (REGNO (operands[4])))
    2510                 :       39404 :     {
    2511                 :       39414 :       emit_insn (gen_kortest<SWI1248_AVX512BWDQ_64:mode>_ccc (operands[4], operands[4]));
    2512                 :          12 :       flag_reg = gen_rtx_REG (CCCmode, FLAGS_REG);
    2513                 :           4 :     }
    2514                 :           4 :   else
    2515                 :           4 :     {
    2516                 :           2 :       flag_reg = gen_rtx_REG (CCZmode, FLAGS_REG);
    2517                 :           2 :       emit_insn (gen_rtx_SET (flag_reg,
    2518                 :           4 :                               gen_rtx_COMPARE (CCZmode,
    2519                 :           2 :                                                operands[4],
    2520                 :           2 :                                                constm1_rtx)));
    2521                 :           0 :     }
    2522                 :          14 :   operands[5] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode,
    2523                 :             :                                 flag_reg,const0_rtx);
    2524                 :             : }
    2525                 :             :   [(set_attr "isa" "*,*,*,*,apx_ndd,apx_ndd,apx_ndd,apx_ndd")
    2526                 :             :    (set_attr "type" "icmov")
    2527                 :          12 :    (set_attr "mode" "<SWI248:MODE>")])
    2528                 :          12 : 
    2529                 :          12 : (define_insn "kunpckhi"
    2530                 :          12 :   [(set (match_operand:HI 0 "register_operand" "=k")
    2531                 :          12 :         (ior:HI
    2532                 :          12 :           (ashift:HI
    2533                 :          12 :             (zero_extend:HI (match_operand:QI 1 "register_operand" "k"))
    2534                 :          12 :             (const_int 8))
    2535                 :          12 :           (zero_extend:HI (match_operand:QI 2 "register_operand" "k"))))
    2536                 :          12 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2537                 :         862 :   "TARGET_AVX512F"
    2538                 :          12 :   "kunpckbw\t{%2, %1, %0|%0, %1, %2}"
    2539                 :          12 :   [(set_attr "mode" "HI")
    2540                 :             :    (set_attr "type" "msklog")
    2541                 :         492 :    (set_attr "prefix" "vex")])
    2542                 :         492 : 
    2543                 :         492 : (define_insn "kunpcksi"
    2544                 :          12 :   [(set (match_operand:SI 0 "register_operand" "=k")
    2545                 :          12 :         (ior:SI
    2546                 :          12 :           (ashift:SI
    2547                 :             :             (zero_extend:SI (match_operand:HI 1 "register_operand" "k"))
    2548                 :             :             (const_int 16))
    2549                 :             :           (zero_extend:SI (match_operand:HI 2 "register_operand" "k"))))
    2550                 :             :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2551                 :         899 :   "TARGET_AVX512BW"
    2552                 :           2 :   "kunpckwd\t{%2, %1, %0|%0, %1, %2}"
    2553                 :             :   [(set_attr "mode" "SI")])
    2554                 :         431 : 
    2555                 :         695 : (define_insn "kunpckdi"
    2556                 :         697 :   [(set (match_operand:DI 0 "register_operand" "=k")
    2557                 :         697 :         (ior:DI
    2558                 :         431 :           (ashift:DI
    2559                 :         431 :             (zero_extend:DI (match_operand:SI 1 "register_operand" "k"))
    2560                 :           2 :             (const_int 32))
    2561                 :           2 :           (zero_extend:DI (match_operand:SI 2 "register_operand" "k"))))
    2562                 :           0 :    (unspec [(const_int 0)] UNSPEC_MASKOP)]
    2563                 :         268 :   "TARGET_AVX512BW"
    2564                 :             :   "kunpckdq\t{%2, %1, %0|%0, %1, %2}"
    2565                 :             :   [(set_attr "mode" "DI")])
    2566                 :             : 
    2567                 :             : 
    2568                 :             : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2569                 :             : ;;
    2570                 :             : ;; Parallel floating point arithmetic
    2571                 :             : ;;
    2572                 :             : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2573                 :             : 
    2574                 :             : (define_expand "<code><mode>2"
    2575                 :      240901 :   [(set (match_operand:VFB 0 "register_operand")
    2576                 :      240901 :         (absneg:VFB
    2577                 :      240901 :           (match_operand:VFB 1 "register_operand")))]
    2578                 :      240901 :   "TARGET_SSE"
    2579                 :      243159 :   "ix86_expand_fp_absneg_operator (<CODE>, <MODE>mode, operands); DONE;")
    2580                 :             : 
    2581                 :      229496 : (define_insn_and_split "*<code><mode>2"
    2582                 :             :   [(set (match_operand:VFB 0 "register_operand" "=x,x,v,v")
    2583                 :        4590 :         (absneg:VFB
    2584                 :        4590 :           (match_operand:VFB 1 "vector_operand" "0,xBm,v,m")))
    2585                 :        4590 :    (use (match_operand:VFB 2 "vector_operand" "xBm,0,vm,v"))]
    2586                 :        3170 :   "TARGET_SSE"
    2587                 :        4590 :   "#"
    2588                 :           4 :   "&& reload_completed"
    2589                 :        4590 :   [(set (match_dup 0)
    2590                 :        1544 :         (<absneg_op>:VFB (match_dup 1) (match_dup 2)))]
    2591                 :        1811 : {
    2592                 :        9219 :   if (TARGET_AVX)
    2593                 :        3207 :     {
    2594                 :        5860 :       if (MEM_P (operands[1]))
    2595                 :         170 :         std::swap (operands[1], operands[2]);
    2596                 :      759395 :     }
    2597                 :      761222 :   else
    2598                 :      755009 :    {
    2599                 :        4678 :      if (operands_match_p (operands[0], operands[2]))
    2600                 :        4467 :        std::swap (operands[1], operands[2]);
    2601                 :      677244 :    }
    2602                 :      677260 : }
    2603                 :       12073 :   [(set_attr "isa" "noavx,noavx,avx,avx")])
    2604                 :      665205 : 
    2605                 :      677222 : (define_insn_and_split "*nabs<mode>2"
    2606                 :      665205 :   [(set (match_operand:VF 0 "register_operand" "=x,x,v,v")
    2607                 :       11752 :         (neg:VF
    2608                 :        1622 :           (abs:VF
    2609                 :        1622 :             (match_operand:VF 1 "vector_operand" "0,xBm,v,m"))))
    2610                 :       11829 :    (use (match_operand:VF 2 "vector_operand" "xBm,0,vm,v"))]
    2611                 :        1544 :   "TARGET_SSE"
    2612                 :       10207 :   "#"
    2613                 :           0 :   "&& reload_completed"
    2614                 :       10207 :   [(set (match_dup 0)
    2615                 :       25473 :         (ior:VF (match_dup 1) (match_dup 2)))]
    2616                 :        1544 : {
    2617                 :         908 :   if (TARGET_AVX)
    2618                 :           0 :     {
    2619                 :           0 :       if (MEM_P (operands[1]))
    2620                 :           0 :         std::swap (operands[1], operands[2]);
    2621                 :             :     }
    2622                 :           6 :   else
    2623                 :        1526 :    {
    2624                 :           0 :      if (operands_match_p (operands[0], operands[2]))
    2625                 :         904 :        std::swap (operands[1], operands[2]);
    2626                 :        1526 :    }
    2627                 :       44441 : }
    2628                 :        1532 :   [(set_attr "isa" "noavx,noavx,avx,avx")])
    2629                 :       44447 : 
    2630                 :       42915 : (define_expand "cond_<insn><mode>"
    2631                 :       44441 :   [(set (match_operand:VFH 0 "register_operand")
    2632                 :       42921 :         (vec_merge:VFH
    2633                 :       42921 :           (plusminus:VFH
    2634                 :       42921 :             (match_operand:VFH 2 "vector_operand")
    2635                 :       42921 :             (match_operand:VFH 3 "vector_operand"))
    2636                 :       42921 :           (match_operand:VFH 4 "nonimm_or_0_operand")
    2637                 :             :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    2638                 :         162 :   "<MODE_SIZE> == 64 || TARGET_AVX512VL"
    2639                 :         269 : {
    2640                 :         269 :   emit_insn (gen_<insn><mode>3_mask (operands[0],
    2641                 :         162 :                                      operands[2],
    2642                 :           0 :                                      operands[3],
    2643                 :          10 :                                      operands[4],
    2644                 :          10 :                                      operands[1]));
    2645                 :         117 :   DONE;
    2646                 :             : })
    2647                 :          56 : 
    2648                 :             : (define_expand "<insn><mode>3<mask_name><round_name>"
    2649                 :           6 :   [(set (match_operand:VF_BHSD 0 "register_operand")
    2650                 :           6 :         (plusminus:VF_BHSD
    2651                 :           6 :           (match_operand:VF_BHSD 1 "<round_nimm_predicate>")
    2652                 :           6 :           (match_operand:VF_BHSD 2 "<round_nimm_predicate>")))]
    2653                 :          62 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode_condition>"
    2654                 :       19496 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    2655                 :          46 : 
    2656                 :          46 : (define_insn "*<insn><mode>3<mask_name><round_name>"
    2657                 :       42226 :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    2658                 :       42226 :         (plusminus:VFH
    2659                 :       42226 :           (match_operand:VFH 1 "<bcst_round_nimm_predicate>" "<comm>0,v")
    2660                 :       42226 :           (match_operand:VFH 2 "<bcst_round_nimm_predicate>" "xBm,<bcst_round_constraint>")))]
    2661                 :      539686 :   "TARGET_SSE && ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
    2662                 :      325669 :    && <mask_mode512bit_condition> && <round_mode_condition>"
    2663                 :        1922 :   "@
    2664                 :       41374 :    <plusminus_mnemonic><ssemodesuffix>\t{%2, %0|%0, %2}
    2665                 :        1194 :    v<plusminus_mnemonic><ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    2666                 :        4796 :   [(set_attr "isa" "noavx,avx")
    2667                 :        6514 :    (set_attr "type" "sseadd")
    2668                 :       43019 :    (set_attr "prefix" "<bcst_mask_prefix3>")
    2669                 :       40986 :    (set_attr "mode" "<MODE>")])
    2670                 :       21650 : 
    2671                 :             : ;; Standard scalar operation patterns which preserve the rest of the
    2672                 :             : ;; vector for combiner.
    2673                 :             : (define_insn "*<sse>_vm<insn><mode>3"
    2674                 :        4177 :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    2675                 :       16455 :         (vec_merge:VFH_128
    2676                 :         455 :           (vec_duplicate:VFH_128
    2677                 :         455 :             (plusminus:<ssescalarmode>
    2678                 :         911 :               (vec_select:<ssescalarmode>
    2679                 :       16479 :                 (match_operand:VFH_128 1 "register_operand" "0,v")
    2680                 :       15854 :                 (parallel [(const_int 0)]))
    2681                 :        3619 :               (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")))
    2682                 :       17537 :           (match_dup 1)
    2683                 :        3670 :           (const_int 1)))]
    2684                 :       15978 :   "TARGET_SSE"
    2685                 :       17233 :   "@
    2686                 :       20529 :    <plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    2687                 :       16629 :    v<plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2688                 :        5127 :   [(set_attr "isa" "noavx,avx")
    2689                 :        1953 :    (set_attr "type" "sseadd")
    2690                 :       20970 :    (set (attr "prefix")
    2691                 :       20946 :      (cond [(eq_attr "alternative" "0")
    2692                 :       21683 :               (const_string "orig")
    2693                 :        5200 :             (eq_attr "alternative" "1")
    2694                 :        5038 :               (if_then_else
    2695                 :        4974 :                 (match_test "<MODE>mode == V8HFmode")
    2696                 :        5008 :                 (const_string "evex")
    2697                 :        5227 :                 (const_string "vex"))
    2698                 :        4891 :            ]
    2699                 :         174 :            (const_string "*")))
    2700                 :         174 :    (set_attr "mode" "<ssescalarmode>")])
    2701                 :         174 : 
    2702                 :         174 : (define_insn "<sse>_vm<insn><mode>3<mask_scalar_name><round_scalar_name>"
    2703                 :             :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    2704                 :             :         (vec_merge:VFH_128
    2705                 :             :           (plusminus:VFH_128
    2706                 :             :             (match_operand:VFH_128 1 "register_operand" "0,v")
    2707                 :             :             (match_operand:VFH_128 2 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    2708                 :             :           (match_dup 1)
    2709                 :             :           (const_int 1)))]
    2710                 :        1229 :   "TARGET_SSE"
    2711                 :             :   "@
    2712                 :             :    <plusminus_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    2713                 :             :    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>}"
    2714                 :        3134 :   [(set_attr "isa" "noavx,avx")
    2715                 :        3134 :    (set_attr "type" "sseadd")
    2716                 :             :    (set_attr "prefix" "<round_scalar_prefix>")
    2717                 :             :    (set_attr "mode" "<ssescalarmode>")])
    2718                 :             : 
    2719                 :             : (define_expand "cond_mul<mode>"
    2720                 :             :   [(set (match_operand:VFH 0 "register_operand")
    2721                 :             :         (vec_merge:VFH
    2722                 :             :           (mult:VFH
    2723                 :             :             (match_operand:VFH 2 "vector_operand")
    2724                 :             :             (match_operand:VFH 3 "vector_operand"))
    2725                 :             :           (match_operand:VFH 4 "nonimm_or_0_operand")
    2726                 :             :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    2727                 :             :   "<MODE_SIZE> == 64 || TARGET_AVX512VL"
    2728                 :          36 : {
    2729                 :          36 :   emit_insn (gen_mul<mode>3_mask (operands[0],
    2730                 :             :                                      operands[2],
    2731                 :             :                                      operands[3],
    2732                 :             :                                      operands[4],
    2733                 :             :                                      operands[1]));
    2734                 :          36 :   DONE;
    2735                 :             : })
    2736                 :             : 
    2737                 :             : (define_expand "mul<mode>3<mask_name><round_name>"
    2738                 :             :   [(set (match_operand:VF_BHSD 0 "register_operand")
    2739                 :             :         (mult:VF_BHSD
    2740                 :             :           (match_operand:VF_BHSD 1 "<round_nimm_predicate>")
    2741                 :             :           (match_operand:VF_BHSD 2 "<round_nimm_predicate>")))]
    2742                 :             :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode_condition>"
    2743                 :       13528 :   "ix86_fixup_binary_operands_no_copy (MULT, <MODE>mode, operands);")
    2744                 :             : 
    2745                 :             : (define_insn "*mul<mode>3<mask_name><round_name>"
    2746                 :       13578 :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    2747                 :       13578 :         (mult:VFH
    2748                 :       13578 :           (match_operand:VFH 1 "<bcst_round_nimm_predicate>" "%0,v")
    2749                 :       13578 :           (match_operand:VFH 2 "<bcst_round_nimm_predicate>" "xBm,<bcst_round_constraint>")))]
    2750                 :      201627 :   "TARGET_SSE && ix86_binary_operator_ok (MULT, <MODE>mode, operands)
    2751                 :      123682 :    && <mask_mode512bit_condition> && <round_mode_condition>"
    2752                 :       12692 :   "@
    2753                 :       13330 :    mul<ssemodesuffix>\t{%2, %0|%0, %2}
    2754                 :         441 :    vmul<ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    2755                 :        1040 :   [(set_attr "isa" "noavx,avx")
    2756                 :         949 :    (set_attr "type" "ssemul")
    2757                 :       15313 :    (set_attr "prefix" "<bcst_mask_prefix3>")
    2758                 :       13137 :    (set_attr "btver2_decode" "direct,double")
    2759                 :        5666 :    (set_attr "mode" "<MODE>")])
    2760                 :             : 
    2761                 :             : ;; Standard scalar operation patterns which preserve the rest of the
    2762                 :             : ;; vector for combiner.
    2763                 :        2198 : (define_insn "*<sse>_vm<multdiv_mnemonic><mode>3"
    2764                 :        9858 :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    2765                 :         208 :         (vec_merge:VFH_128
    2766                 :         208 :           (vec_duplicate:VFH_128
    2767                 :         687 :             (multdiv:<ssescalarmode>
    2768                 :        4958 :               (vec_select:<ssescalarmode>
    2769                 :        9424 :                 (match_operand:VFH_128 1 "register_operand" "0,v")
    2770                 :         308 :                 (parallel [(const_int 0)]))
    2771                 :        6542 :               (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")))
    2772                 :        9852 :           (match_dup 1)
    2773                 :        4368 :           (const_int 1)))]
    2774                 :       11135 :   "TARGET_SSE"
    2775                 :        1905 :   "@
    2776                 :        2633 :    <multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    2777                 :        3955 :    v<multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    2778                 :         967 :   [(set_attr "isa" "noavx,avx")
    2779                 :        2637 :    (set_attr "type" "sse<multdiv_mnemonic>")
    2780                 :        2670 :    (set (attr "prefix")
    2781                 :        2782 :      (cond [(eq_attr "alternative" "0")
    2782                 :        2101 :               (const_string "orig")
    2783                 :        2163 :             (eq_attr "alternative" "1")
    2784                 :        2162 :               (if_then_else
    2785                 :        2147 :                 (match_test "<MODE>mode == V8HFmode")
    2786                 :        2113 :                 (const_string "evex")
    2787                 :        2021 :                 (const_string "vex"))
    2788                 :          53 :            ]
    2789                 :          25 :            (const_string "*")))
    2790                 :          53 :    (set_attr "btver2_decode" "direct,double")
    2791                 :          53 :    (set_attr "mode" "<ssescalarmode>")])
    2792                 :          28 : 
    2793                 :          28 : (define_insn "<sse>_vm<multdiv_mnemonic><mode>3<mask_scalar_name><round_scalar_name>"
    2794                 :             :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    2795                 :             :         (vec_merge:VFH_128
    2796                 :             :           (multdiv:VFH_128
    2797                 :             :             (match_operand:VFH_128 1 "register_operand" "0,v")
    2798                 :             :             (match_operand:VFH_128 2 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    2799                 :             :           (match_dup 1)
    2800                 :             :           (const_int 1)))]
    2801                 :        1158 :   "TARGET_SSE"
    2802                 :             :   "@
    2803                 :             :    <multdiv_mnemonic><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    2804                 :             :    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>}"
    2805                 :        1176 :   [(set_attr "isa" "noavx,avx")
    2806                 :        1176 :    (set_attr "type" "sse<multdiv_mnemonic>")
    2807                 :             :    (set_attr "prefix" "<round_scalar_prefix>")
    2808                 :             :    (set_attr "btver2_decode" "direct,double")
    2809                 :             :    (set_attr "mode" "<ssescalarmode>")])
    2810                 :             : 
    2811                 :             : (define_expand "div<mode>3"
    2812                 :             :   [(set (match_operand:VF2 0 "register_operand")
    2813                 :             :         (div:VF2 (match_operand:VF2 1 "register_operand")
    2814                 :             :                   (match_operand:VF2 2 "vector_operand")))]
    2815                 :             :   "TARGET_SSE2")
    2816                 :             : 
    2817                 :             : (define_expand "div<mode>3"
    2818                 :             :   [(set (match_operand:VHF_AVX512VL 0 "register_operand")
    2819                 :             :         (div:VHF_AVX512VL
    2820                 :             :           (match_operand:VHF_AVX512VL 1 "register_operand")
    2821                 :             :           (match_operand:VHF_AVX512VL 2 "vector_operand")))]
    2822                 :             :   "TARGET_AVX512FP16"
    2823                 :         107 : {
    2824                 :             :   /* Transform HF vector div to vector mul/rcp.  */
    2825                 :         107 :   if (GET_MODE_INNER (<MODE>mode) == HFmode
    2826                 :         107 :       && TARGET_RECIP_VEC_DIV
    2827                 :         107 :       && optimize_insn_for_speed_p ()
    2828                 :         107 :       && flag_finite_math_only && !flag_trapping_math
    2829                 :           4 :       && flag_unsafe_math_optimizations)
    2830                 :             :     {
    2831                 :           4 :       rtx op = gen_reg_rtx (<MODE>mode);
    2832                 :           4 :       operands[2] = force_reg (<MODE>mode, operands[2]);
    2833                 :           4 :       emit_insn (gen_avx512fp16_rcp<mode>2 (op, operands[2]));
    2834                 :           4 :       emit_insn (gen_mul<mode>3 (operands[0], operands[1], op));
    2835                 :           4 :       DONE;
    2836                 :             :     }
    2837                 :             : })
    2838                 :             : 
    2839                 :             : (define_expand "div<mode>3"
    2840                 :         103 :   [(set (match_operand:VF1 0 "register_operand")
    2841                 :         103 :         (div:VF1 (match_operand:VF1 1 "register_operand")
    2842                 :         103 :                  (match_operand:VF1 2 "vector_operand")))]
    2843                 :         103 :   "TARGET_SSE"
    2844                 :         801 : {
    2845                 :         801 :   if (TARGET_SSE_MATH
    2846                 :         698 :       && TARGET_RECIP_VEC_DIV
    2847                 :         800 :       && !optimize_insn_for_size_p ()
    2848                 :         692 :       && flag_finite_math_only && !flag_trapping_math
    2849                 :         728 :       && flag_unsafe_math_optimizations)
    2850                 :             :     {
    2851                 :         133 :       ix86_emit_swdivsf (operands[0], operands[1], operands[2], <MODE>mode);
    2852                 :         133 :       DONE;
    2853                 :         103 :     }
    2854                 :             : })
    2855                 :             : 
    2856                 :             : (define_expand "div<mode>3"
    2857                 :         668 :   [(set (match_operand:VBF_AVX10_2 0 "register_operand")
    2858                 :         683 :         (div:VBF_AVX10_2
    2859                 :         668 :           (match_operand:VBF_AVX10_2 1 "register_operand")
    2860                 :         668 :           (match_operand:VBF_AVX10_2 2 "vector_operand")))]
    2861                 :         668 :   "TARGET_AVX10_2_256"
    2862                 :         678 : {
    2863                 :          10 :   if (TARGET_RECIP_VEC_DIV
    2864                 :         693 :       && optimize_insn_for_speed_p ()
    2865                 :          25 :       && flag_finite_math_only
    2866                 :          30 :       && flag_unsafe_math_optimizations)
    2867                 :          15 :     {
    2868                 :         688 :       rtx op = gen_reg_rtx (<MODE>mode);
    2869                 :         688 :       operands[2] = force_reg (<MODE>mode, operands[2]);
    2870                 :         688 :       emit_insn (gen_avx10_2_rcppbf16_<mode> (op, operands[2]));
    2871                 :          20 :       emit_insn (gen_avx10_2_mulnepbf16_<mode> (operands[0], operands[1], op));
    2872                 :          20 :       DONE;
    2873                 :             :     }
    2874                 :             : })
    2875                 :          19 : 
    2876                 :             : (define_expand "cond_div<mode>"
    2877                 :           5 :   [(set (match_operand:VFH 0 "register_operand")
    2878                 :           5 :         (vec_merge:VFH
    2879                 :           5 :           (div:VFH
    2880                 :           5 :             (match_operand:VFH 2 "register_operand")
    2881                 :          24 :             (match_operand:VFH 3 "vector_operand"))
    2882                 :          24 :           (match_operand:VFH 4 "nonimm_or_0_operand")
    2883                 :          19 :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    2884                 :          24 :   "<MODE_SIZE> == 64 || TARGET_AVX512VL"
    2885                 :          37 : {
    2886                 :          37 :   emit_insn (gen_<sse>_div<mode>3_mask (operands[0],
    2887                 :          19 :                                         operands[2],
    2888                 :          24 :                                         operands[3],
    2889                 :          24 :                                         operands[4],
    2890                 :           5 :                                         operands[1]));
    2891                 :          37 :   DONE;
    2892                 :             : })
    2893                 :             : 
    2894                 :             : (define_insn "<sse>_div<mode>3<mask_name><round_name>"
    2895                 :           3 :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    2896                 :             :         (div:VFH
    2897                 :             :           (match_operand:VFH 1 "register_operand" "0,v")
    2898                 :           0 :           (match_operand:VFH 2 "<bcst_round_nimm_predicate>" "xBm,<bcst_round_constraint>")))]
    2899                 :        9073 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode_condition>"
    2900                 :             :   "@
    2901                 :           3 :    div<ssemodesuffix>\t{%2, %0|%0, %2}
    2902                 :           3 :    vdiv<ssemodesuffix>\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_mask_op3>}"
    2903                 :         453 :   [(set_attr "isa" "noavx,avx")
    2904                 :         453 :    (set_attr "type" "ssediv")
    2905                 :        1249 :    (set_attr "prefix" "<bcst_mask_prefix3>")
    2906                 :           3 :    (set_attr "mode" "<MODE>")])
    2907                 :           3 : 
    2908                 :           3 : (define_insn "<sse>_rcp<mode>2"
    2909                 :           3 :   [(set (match_operand:VF1_128_256 0 "register_operand" "=x,x")
    2910                 :             :         (unspec:VF1_128_256
    2911                 :        1094 :           [(match_operand:VF1_128_256 1 "vector_operand" "xBm,xja")] UNSPEC_RCP))]
    2912                 :         339 :   "TARGET_SSE"
    2913                 :          59 :   "%vrcpps\t{%1, %0|%0, %1}"
    2914                 :             :   [(set_attr "isa" "noavx,avx")
    2915                 :           2 :    (set_attr "type" "sse")
    2916                 :          88 :    (set_attr "addr" "*,gpr16")
    2917                 :          88 :    (set_attr "atom_sse_attr" "rcp")
    2918                 :          82 :    (set_attr "btver2_sse_attr" "rcp")
    2919                 :          80 :    (set_attr "prefix" "maybe_vex")
    2920                 :         246 :    (set_attr "mode" "<MODE>")])
    2921                 :             : 
    2922                 :             : (define_insn "sse_vmrcpv4sf2"
    2923                 :          79 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2924                 :          73 :         (vec_merge:V4SF
    2925                 :          90 :           (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm,xjm")]
    2926                 :          73 :                        UNSPEC_RCP)
    2927                 :          73 :           (match_operand:V4SF 2 "register_operand" "0,x")
    2928                 :          90 :           (const_int 1)))]
    2929                 :          99 :   "TARGET_SSE"
    2930                 :           8 :   "@
    2931                 :           0 :    rcpss\t{%1, %0|%0, %k1}
    2932                 :           0 :    vrcpss\t{%1, %2, %0|%0, %2, %k1}"
    2933                 :          91 :   [(set_attr "isa" "noavx,avx")
    2934                 :          87 :    (set_attr "type" "sse")
    2935                 :           6 :    (set_attr "addr" "*,gpr16")
    2936                 :           4 :    (set_attr "atom_sse_attr" "rcp")
    2937                 :           4 :    (set_attr "btver2_sse_attr" "rcp")
    2938                 :           6 :    (set_attr "prefix" "orig,vex")
    2939                 :             :    (set_attr "mode" "SF")])
    2940                 :          54 : 
    2941                 :             : (define_insn "*sse_vmrcpv4sf2"
    2942                 :           0 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    2943                 :          54 :         (vec_merge:V4SF
    2944                 :             :           (vec_duplicate:V4SF
    2945                 :             :             (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm,xjm")]
    2946                 :             :                          UNSPEC_RCP))
    2947                 :           3 :           (match_operand:V4SF 2 "register_operand" "0,x")
    2948                 :           0 :           (const_int 1)))]
    2949                 :           0 :   "TARGET_SSE"
    2950                 :           0 :   "@
    2951                 :           0 :    rcpss\t{%1, %0|%0, %1}
    2952                 :           0 :    vrcpss\t{%1, %2, %0|%0, %2, %1}"
    2953                 :          35 :   [(set_attr "isa" "noavx,avx")
    2954                 :          35 :    (set_attr "type" "sse")
    2955                 :          35 :    (set_attr "addr" "*,gpr16")
    2956                 :           3 :    (set_attr "atom_sse_attr" "rcp")
    2957                 :           3 :    (set_attr "btver2_sse_attr" "rcp")
    2958                 :           3 :    (set_attr "prefix" "orig,vex")
    2959                 :           3 :    (set_attr "mode" "SF")])
    2960                 :           3 : 
    2961                 :           3 : (define_insn "avx512fp16_rcp<mode>2<mask_name>"
    2962                 :           3 :   [(set (match_operand:VHF_AVX512VL 0 "register_operand" "=v")
    2963                 :             :         (unspec:VHF_AVX512VL
    2964                 :             :           [(match_operand:VHF_AVX512VL 1 "nonimmediate_operand" "vm")]
    2965                 :             :           UNSPEC_RCP))]
    2966                 :         598 :   "TARGET_AVX512FP16"
    2967                 :             :   "vrcpph\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    2968                 :           3 :   [(set_attr "type" "sse")
    2969                 :           3 :    (set_attr "prefix" "evex")
    2970                 :           3 :    (set_attr "mode" "<MODE>")])
    2971                 :           3 : 
    2972                 :           3 : (define_insn "avx512fp16_vmrcpv8hf2<mask_scalar_name>"
    2973                 :           3 :   [(set (match_operand:V8HF 0 "register_operand" "=v")
    2974                 :           3 :         (vec_merge:V8HF
    2975                 :           3 :           (unspec:V8HF [(match_operand:V8HF 1 "nonimmediate_operand" "vm")]
    2976                 :           3 :                        UNSPEC_RCP)
    2977                 :             :           (match_operand:V8HF 2 "register_operand" "v")
    2978                 :             :           (const_int 1)))]
    2979                 :         313 :   "TARGET_AVX512FP16"
    2980                 :             :   "vrcpsh\t{%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %w1}"
    2981                 :             :   [(set_attr "type" "sse")
    2982                 :             :    (set_attr "prefix" "evex")
    2983                 :         445 :    (set_attr "mode" "HF")])
    2984                 :         445 : 
    2985                 :             : (define_insn "*avx512fp16_vmrcpv8hf2"
    2986                 :         233 :   [(set (match_operand:V8HF 0 "register_operand" "=v")
    2987                 :         233 :         (vec_merge:V8HF
    2988                 :         233 :           (vec_duplicate:V8HF
    2989                 :        1380 :             (unspec:HF [(match_operand:HF 1 "nonimmediate_operand" "vm")]
    2990                 :        1380 :                          UNSPEC_RCP))
    2991                 :             :           (match_operand:V8HF 2 "register_operand" "v")
    2992                 :         241 :           (const_int 1)))]
    2993                 :         271 :   "TARGET_AVX512FP16"
    2994                 :         241 :   "vrcpsh\t{%1, %2, %0|%0, %2, %w1}"
    2995                 :             :   [(set_attr "type" "sse")
    2996                 :             :    (set_attr "prefix" "evex")
    2997                 :             :    (set_attr "mode" "HF")])
    2998                 :             : 
    2999                 :             : (define_insn "<mask_codefor>rcp14<mode><mask_name>"
    3000                 :             :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    3001                 :          32 :         (unspec:VF_AVX512VL
    3002                 :          32 :           [(match_operand:VF_AVX512VL 1 "nonimmediate_operand" "vm")]
    3003                 :             :           UNSPEC_RCP14))]
    3004                 :         588 :   "TARGET_AVX512F"
    3005                 :           0 :   "vrcp14<ssemodesuffix>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    3006                 :           0 :   [(set_attr "type" "sse")
    3007                 :             :    (set_attr "prefix" "evex")
    3008                 :             :    (set_attr "mode" "<MODE>")])
    3009                 :             : 
    3010                 :             : (define_insn "srcp14<mode>"
    3011                 :             :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    3012                 :             :         (vec_merge:VF_128
    3013                 :             :           (unspec:VF_128
    3014                 :             :             [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    3015                 :             :             UNSPEC_RCP14)
    3016                 :             :           (match_operand:VF_128 2 "register_operand" "v")
    3017                 :             :           (const_int 1)))]
    3018                 :          81 :   "TARGET_AVX512F"
    3019                 :             :   "vrcp14<ssescalarmodesuffix>\t{%1, %2, %0|%0, %2, %<iptr>1}"
    3020                 :             :   [(set_attr "type" "sse")
    3021                 :             :    (set_attr "prefix" "evex")
    3022                 :          91 :    (set_attr "mode" "<MODE>")])
    3023                 :          91 : 
    3024                 :             : (define_insn "srcp14<mode>_mask"
    3025                 :             :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    3026                 :             :         (vec_merge:VF_128
    3027                 :             :           (vec_merge:VF_128
    3028                 :             :             (unspec:VF_128
    3029                 :             :               [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    3030                 :             :             UNSPEC_RCP14)
    3031                 :             :               (match_operand:VF_128 3 "nonimm_or_0_operand" "0C")
    3032                 :             :             (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk"))
    3033                 :             :           (match_operand:VF_128 2 "register_operand" "v")
    3034                 :             :           (const_int 1)))]
    3035                 :         209 :   "TARGET_AVX512F"
    3036                 :             :   "vrcp14<ssescalarmodesuffix>\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}"
    3037                 :             :   [(set_attr "type" "sse")
    3038                 :             :    (set_attr "prefix" "evex")
    3039                 :         212 :    (set_attr "mode" "<MODE>")])
    3040                 :         212 : 
    3041                 :         212 : (define_expand "sqrt<mode>2"
    3042                 :             :   [(set (match_operand:VF2HB 0 "register_operand")
    3043                 :             :         (sqrt:VF2HB (match_operand:VF2HB 1 "vector_operand")))]
    3044                 :             :   "TARGET_SSE2")
    3045                 :             : 
    3046                 :             : (define_expand "sqrt<mode>2"
    3047                 :             :   [(set (match_operand:VF1 0 "register_operand")
    3048                 :             :         (sqrt:VF1 (match_operand:VF1 1 "vector_operand")))]
    3049                 :             :   "TARGET_SSE"
    3050                 :          64 : {
    3051                 :          64 :   if (TARGET_SSE_MATH
    3052                 :          64 :       && TARGET_RECIP_VEC_SQRT
    3053                 :          63 :       && !optimize_insn_for_size_p ()
    3054                 :          63 :       && flag_finite_math_only && !flag_trapping_math
    3055                 :         117 :       && flag_unsafe_math_optimizations)
    3056                 :             :     {
    3057                 :          53 :       ix86_emit_swsqrtsf (operands[0], operands[1], <MODE>mode, false);
    3058                 :          53 :       DONE;
    3059                 :             :     }
    3060                 :             : })
    3061                 :             : 
    3062                 :             : (define_insn "<sse>_sqrt<mode>2<mask_name><round_name>"
    3063                 :          11 :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    3064                 :          11 :         (sqrt:VFH (match_operand:VFH 1 "<round_nimm_predicate>" "xBm,<round_constraint>")))]
    3065                 :        1011 :   "TARGET_SSE && <mask_mode512bit_condition> && <round_mode_condition>"
    3066                 :          56 :   "@
    3067                 :             :    sqrt<ssemodesuffix>\t{%1, %0|%0, %1}
    3068                 :          11 :    vsqrt<ssemodesuffix>\t{<round_mask_op2>%1, %0<mask_operand2>|%0<mask_operand2>, %1<round_mask_op2>}"
    3069                 :         115 :   [(set_attr "isa" "noavx,avx")
    3070                 :         115 :    (set_attr "type" "sse")
    3071                 :         831 :    (set_attr "atom_sse_attr" "sqrt")
    3072                 :          32 :    (set_attr "btver2_sse_attr" "sqrt")
    3073                 :          56 :    (set_attr "prefix" "maybe_vex")
    3074                 :             :    (set_attr "mode" "<MODE>")])
    3075                 :             : 
    3076                 :             : (define_insn "<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>"
    3077                 :        1179 :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    3078                 :           4 :         (vec_merge:VFH_128
    3079                 :             :           (sqrt:VFH_128
    3080                 :             :             (match_operand:VFH_128 1 "nonimmediate_operand" "xm,<round_scalar_constraint>"))
    3081                 :             :           (match_operand:VFH_128 2 "register_operand" "0,v")
    3082                 :             :           (const_int 1)))]
    3083                 :         704 :   "TARGET_SSE"
    3084                 :           4 :   "@
    3085                 :           4 :    sqrt<ssescalarmodesuffix>\t{%1, %0|%0, %<iptr>1}
    3086                 :           4 :    vsqrt<ssescalarmodesuffix>\t{<round_scalar_mask_op3>%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %<iptr>1<round_scalar_mask_op3>}"
    3087                 :         636 :   [(set_attr "isa" "noavx,avx")
    3088                 :         636 :    (set_attr "type" "sse")
    3089                 :         636 :    (set_attr "atom_sse_attr" "sqrt")
    3090                 :           4 :    (set_attr "prefix" "<round_scalar_prefix>")
    3091                 :           4 :    (set_attr "btver2_sse_attr" "sqrt")
    3092                 :           4 :    (set_attr "mode" "<ssescalarmode>")])
    3093                 :             : 
    3094                 :             : (define_insn "*<sse>_vmsqrt<mode>2<mask_scalar_name><round_scalar_name>"
    3095                 :             :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    3096                 :             :         (vec_merge:VFH_128
    3097                 :             :           (vec_duplicate:VFH_128
    3098                 :             :             (sqrt:<ssescalarmode>
    3099                 :             :               (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "xm,<round_scalar_constraint>")))
    3100                 :             :           (match_operand:VFH_128 2 "register_operand" "0,v")
    3101                 :             :           (const_int 1)))]
    3102                 :          15 :   "TARGET_SSE"
    3103                 :             :   "@
    3104                 :             :    sqrt<ssescalarmodesuffix>\t{%1, %0|%0, %1}
    3105                 :             :    vsqrt<ssescalarmodesuffix>\t{<round_scalar_mask_op3>%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %1<round_scalar_mask_op3>}"
    3106                 :           2 :   [(set_attr "isa" "noavx,avx")
    3107                 :           2 :    (set_attr "type" "sse")
    3108                 :           2 :    (set_attr "atom_sse_attr" "sqrt")
    3109                 :             :    (set_attr "prefix" "<round_scalar_prefix>")
    3110                 :             :    (set_attr "btver2_sse_attr" "sqrt")
    3111                 :             :    (set_attr "mode" "<ssescalarmode>")])
    3112                 :             : 
    3113                 :             : (define_expand "rsqrt<mode>2"
    3114                 :             :   [(set (match_operand:VF1_128_256 0 "register_operand")
    3115                 :             :         (unspec:VF1_128_256
    3116                 :             :           [(match_operand:VF1_128_256 1 "vector_operand")]
    3117                 :             :           UNSPEC_RSQRT))]
    3118                 :             :   "TARGET_SSE && TARGET_SSE_MATH"
    3119                 :          13 : {
    3120                 :          13 :   ix86_emit_swsqrtsf (operands[0], operands[1], <MODE>mode, true);
    3121                 :          13 :   DONE;
    3122                 :             : })
    3123                 :             : 
    3124                 :             : (define_expand "rsqrt<mode>2"
    3125                 :             :   [(set (match_operand:VHF_AVX512VL 0 "register_operand")
    3126                 :             :         (unspec:VHF_AVX512VL
    3127                 :             :           [(match_operand:VHF_AVX512VL 1 "vector_operand")]
    3128                 :             :           UNSPEC_RSQRT))]
    3129                 :             :   "TARGET_AVX512FP16")
    3130                 :             : 
    3131                 :             : (define_insn "<sse>_rsqrt<mode>2"
    3132                 :             :   [(set (match_operand:VF1_128_256 0 "register_operand" "=x,x")
    3133                 :             :         (unspec:VF1_128_256
    3134                 :             :           [(match_operand:VF1_128_256 1 "vector_operand" "xBm,xja")] UNSPEC_RSQRT))]
    3135                 :         432 :   "TARGET_SSE"
    3136                 :          37 :   "%vrsqrtps\t{%1, %0|%0, %1}"
    3137                 :             :   [(set_attr "isa" "noavx,avx")
    3138                 :             :    (set_attr "type" "sse")
    3139                 :          88 :    (set_attr "addr" "*,gpr16")
    3140                 :          88 :    (set_attr "prefix" "maybe_vex")
    3141                 :          80 :    (set_attr "mode" "<MODE>")])
    3142                 :          80 : 
    3143                 :         167 : (define_insn "<sse>_rsqrt<mode>2<mask_name>"
    3144                 :             :   [(set (match_operand:VHF_AVX512VL 0 "register_operand" "=v")
    3145                 :             :         (unspec:VHF_AVX512VL
    3146                 :             :           [(match_operand:VHF_AVX512VL 1 "vector_operand" "vBm")] UNSPEC_RSQRT))]
    3147                 :         827 :   "TARGET_AVX512FP16"
    3148                 :           0 :   "vrsqrtph\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    3149                 :           0 :   [(set_attr "type" "sse")
    3150                 :           0 :    (set_attr "prefix" "evex")
    3151                 :           0 :    (set_attr "mode" "<MODE>")])
    3152                 :           0 : 
    3153                 :           0 : (define_insn "<mask_codefor>rsqrt14<mode><mask_name>"
    3154                 :           0 :   [(set (match_operand:VF_AVX512VL 0 "register_operand" "=v")
    3155                 :           0 :         (unspec:VF_AVX512VL
    3156                 :           0 :           [(match_operand:VF_AVX512VL 1 "nonimmediate_operand" "vm")]
    3157                 :             :           UNSPEC_RSQRT14))]
    3158                 :         596 :   "TARGET_AVX512F"
    3159                 :             :   "vrsqrt14<ssemodesuffix>\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
    3160                 :             :   [(set_attr "type" "sse")
    3161                 :             :    (set_attr "prefix" "evex")
    3162                 :             :    (set_attr "mode" "<MODE>")])
    3163                 :             : 
    3164                 :             : (define_insn "rsqrt14<mode>"
    3165                 :             :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    3166                 :             :         (vec_merge:VF_128
    3167                 :             :           (unspec:VF_128
    3168                 :             :             [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    3169                 :             :             UNSPEC_RSQRT14)
    3170                 :             :           (match_operand:VF_128 2 "register_operand" "v")
    3171                 :             :           (const_int 1)))]
    3172                 :          81 :   "TARGET_AVX512F"
    3173                 :             :   "vrsqrt14<ssescalarmodesuffix>\t{%1, %2, %0|%0, %2, %<iptr>1}"
    3174                 :             :   [(set_attr "type" "sse")
    3175                 :             :    (set_attr "prefix" "evex")
    3176                 :          81 :    (set_attr "mode" "<MODE>")])
    3177                 :          81 : 
    3178                 :             : (define_insn "rsqrt14_<mode>_mask"
    3179                 :             :   [(set (match_operand:VF_128 0 "register_operand" "=v")
    3180                 :             :         (vec_merge:VF_128
    3181                 :             :           (vec_merge:VF_128
    3182                 :             :             (unspec:VF_128
    3183                 :             :               [(match_operand:VF_128 1 "nonimmediate_operand" "vm")]
    3184                 :             :               UNSPEC_RSQRT14)
    3185                 :             :               (match_operand:VF_128 3 "nonimm_or_0_operand" "0C")
    3186                 :             :               (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk"))
    3187                 :             :           (match_operand:VF_128 2 "register_operand" "v")
    3188                 :             :           (const_int 1)))]
    3189                 :         209 :   "TARGET_AVX512F"
    3190                 :             :   "vrsqrt14<ssescalarmodesuffix>\t{%1, %2, %0%{%4%}%N3|%0%{%4%}%N3, %2, %<iptr>1}"
    3191                 :             :   [(set_attr "type" "sse")
    3192                 :             :    (set_attr "prefix" "evex")
    3193                 :         233 :    (set_attr "mode" "<MODE>")])
    3194                 :         233 : 
    3195                 :         233 : (define_insn "sse_vmrsqrtv4sf2"
    3196                 :             :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    3197                 :             :         (vec_merge:V4SF
    3198                 :             :           (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm,xjm")]
    3199                 :             :                        UNSPEC_RSQRT)
    3200                 :             :           (match_operand:V4SF 2 "register_operand" "0,x")
    3201                 :             :           (const_int 1)))]
    3202                 :          99 :   "TARGET_SSE"
    3203                 :             :   "@
    3204                 :             :    rsqrtss\t{%1, %0|%0, %k1}
    3205                 :             :    vrsqrtss\t{%1, %2, %0|%0, %2, %k1}"
    3206                 :          83 :   [(set_attr "isa" "noavx,avx")
    3207                 :          83 :    (set_attr "type" "sse")
    3208                 :             :    (set_attr "addr" "*,gpr16")
    3209                 :             :    (set_attr "prefix" "orig,vex")
    3210                 :             :    (set_attr "mode" "SF")])
    3211                 :             : 
    3212                 :             : (define_insn "*sse_vmrsqrtv4sf2"
    3213                 :             :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    3214                 :             :         (vec_merge:V4SF
    3215                 :             :           (vec_duplicate:V4SF
    3216                 :             :             (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm,xjm")]
    3217                 :             :                          UNSPEC_RSQRT))
    3218                 :             :           (match_operand:V4SF 2 "register_operand" "0,x")
    3219                 :             :           (const_int 1)))]
    3220                 :           0 :   "TARGET_SSE"
    3221                 :             :   "@
    3222                 :             :    rsqrtss\t{%1, %0|%0, %1}
    3223                 :             :    vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
    3224                 :          32 :   [(set_attr "isa" "noavx,avx")
    3225                 :          32 :    (set_attr "type" "sse")
    3226                 :          32 :    (set_attr "addr" "*,gpr16")
    3227                 :             :    (set_attr "prefix" "orig,vex")
    3228                 :             :    (set_attr "mode" "SF")])
    3229                 :             : 
    3230                 :             : (define_insn "avx512fp16_vmrsqrtv8hf2<mask_scalar_name>"
    3231                 :             :   [(set (match_operand:V8HF 0 "register_operand" "=v")
    3232                 :             :         (vec_merge:V8HF
    3233                 :             :           (unspec:V8HF [(match_operand:V8HF 1 "nonimmediate_operand" "vm")]
    3234                 :             :                        UNSPEC_RSQRT)
    3235                 :             :           (match_operand:V8HF 2 "register_operand" "v")
    3236                 :             :           (const_int 1)))]
    3237                 :         313 :   "TARGET_AVX512FP16"
    3238                 :             :   "vrsqrtsh\t{%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %w1}"
    3239                 :             :   [(set_attr "type" "sse")
    3240                 :             :    (set_attr "prefix" "evex")
    3241                 :             :    (set_attr "mode" "HF")])
    3242                 :             : 
    3243                 :             : (define_insn "*avx512fp16_vmrsqrtv8hf2"
    3244                 :             :   [(set (match_operand:V8HF 0 "register_operand" "=v")
    3245                 :        4118 :         (vec_merge:V8HF
    3246                 :        4118 :           (vec_duplicate:V8HF
    3247                 :        4118 :             (unspec:HF [(match_operand:HF 1 "nonimmediate_operand" "vm")]
    3248                 :             :                        UNSPEC_RSQRT))
    3249                 :        4118 :           (match_operand:V8HF 2 "register_operand" "v")
    3250                 :        1991 :           (const_int 1)))]
    3251                 :          30 :   "TARGET_AVX512FP16"
    3252                 :         866 :   "vrsqrtsh\t{%1, %2, %0<mask_scalar_operand3>|%0<mask_scalar_operand3>, %2, %w1}"
    3253                 :         239 :   [(set_attr "type" "sse")
    3254                 :         186 :    (set_attr "prefix" "evex")
    3255                 :         186 :    (set_attr "mode" "HF")])
    3256                 :         156 : 
    3257                 :         156 : (define_expand "cond_<code><mode>"
    3258                 :             :   [(set (match_operand:VFH 0 "register_operand")
    3259                 :         156 :         (vec_merge:VFH
    3260                 :         156 :           (smaxmin:VFH
    3261                 :         156 :             (match_operand:VFH 2 "vector_operand")
    3262                 :         156 :             (match_operand:VFH 3 "vector_operand"))
    3263                 :         156 :           (match_operand:VFH 4 "nonimm_or_0_operand")
    3264                 :         123 :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    3265                 :         144 :   "<MODE_SIZE> == 64 || TARGET_AVX512VL"
    3266                 :         237 : {
    3267                 :          93 :   emit_insn (gen_<code><mode>3_mask (operands[0],
    3268                 :         144 :                                      operands[2],
    3269                 :          16 :                                      operands[3],
    3270                 :          16 :                                      operands[4],
    3271                 :         142 :                                      operands[1]));
    3272                 :          20 :   DONE;
    3273                 :         142 : })
    3274                 :         142 : 
    3275                 :         142 : (define_expand "<code><mode>3<mask_name><round_saeonly_name>"
    3276                 :             :   [(set (match_operand:VFH 0 "register_operand")
    3277                 :         142 :         (smaxmin:VFH
    3278                 :         142 :           (match_operand:VFH 1 "<round_saeonly_nimm_predicate>")
    3279                 :             :           (match_operand:VFH 2 "<round_saeonly_nimm_predicate>")))]
    3280                 :         142 :   "TARGET_SSE && <mask_mode512bit_condition>
    3281                 :         142 :    && <round_saeonly_mode_condition>"
    3282                 :        1944 : {
    3283                 :         208 :   if (!flag_finite_math_only || flag_signed_zeros)
    3284                 :         142 :     {
    3285                 :        1600 :       operands[1] = force_reg (<MODE>mode, operands[1]);
    3286                 :        1659 :       emit_insn (gen_ieee_<maxmin_float><mode>3<mask_name><round_saeonly_name>
    3287                 :          59 :                  (operands[0], operands[1], operands[2]
    3288                 :          59 :                   <mask_operand_arg34>
    3289                 :             :                   <round_saeonly_mask_arg3>));
    3290                 :        1600 :       DONE;
    3291                 :             :     }
    3292                 :             :   else
    3293                 :         202 :     ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);
    3294                 :             : })
    3295                 :             : 
    3296                 :             : ;; These versions of the min/max patterns are intentionally ignorant of
    3297                 :         202 : ;; their behavior wrt -0.0 and NaN (via the commutative operand mark).
    3298                 :         202 : ;; Since both the tree-level MAX_EXPR and the rtl-level SMAX operator
    3299                 :         202 : ;; are undefined in this condition, we're certain this is correct.
    3300                 :         202 : 
    3301                 :         388 : (define_insn "*<code><mode>3<mask_name><round_saeonly_name>"
    3302                 :         202 :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    3303                 :          16 :         (smaxmin:VFH
    3304                 :         194 :           (match_operand:VFH 1 "<round_saeonly_nimm_predicate>" "%0,v")
    3305                 :          26 :           (match_operand:VFH 2 "<round_saeonly_nimm_predicate>" "xBm,<round_saeonly_constraint>")))]
    3306                 :        2192 :   "TARGET_SSE
    3307                 :        2527 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))
    3308                 :         312 :    && <mask_mode512bit_condition>
    3309                 :         487 :    && <round_saeonly_mode_condition>"
    3310                 :         186 :   "@
    3311                 :         184 :    <maxmin_float><ssemodesuffix>\t{%2, %0|%0, %2}
    3312                 :         176 :    v<maxmin_float><ssemodesuffix>\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_saeonly_mask_op3>}"
    3313                 :         188 :   [(set_attr "isa" "noavx,avx")
    3314                 :          62 :    (set_attr "type" "sseadd")
    3315                 :         496 :    (set_attr "btver2_sse_attr" "maxmin")
    3316                 :          57 :    (set_attr "prefix" "<mask_prefix3>")
    3317                 :          82 :    (set_attr "mode" "<MODE>")])
    3318                 :          98 : 
    3319                 :         102 : (define_insn_and_split "*minmax<mode>3_1"
    3320                 :         370 :   [(set (match_operand:VFH 0 "register_operand")
    3321                 :         156 :         (vec_merge:VFH
    3322                 :         284 :           (match_operand:VFH 1 "nonimmediate_operand")
    3323                 :         434 :           (match_operand:VFH 2 "nonimmediate_operand")
    3324                 :         450 :           (unspec:<avx512fmaskmode>
    3325                 :         784 :             [(match_operand:VFH 3 "nonimmediate_operand")
    3326                 :         636 :              (match_operand:VFH 4 "nonimmediate_operand")
    3327                 :         171 :              (match_operand:SI 5 "const_0_to_31_operand")]
    3328                 :        1000 :              UNSPEC_PCMP)))]
    3329                 :        3253 :   "TARGET_SSE && ix86_pre_reload_split ()
    3330                 :        3613 :    && ((rtx_equal_p (operands[1], operands[3])
    3331                 :        2655 :         && rtx_equal_p (operands[2], operands[4]))
    3332                 :        1517 :        || (rtx_equal_p (operands[1], operands[4])
    3333                 :        1025 :            && rtx_equal_p (operands[2], operands[3])))
    3334                 :        5014 :    && (INTVAL (operands[5]) == 1 || INTVAL (operands[5]) == 14)"
    3335                 :         276 :    "#"
    3336                 :         496 :    "&& 1"
    3337                 :         766 :    [(const_int 0)]
    3338                 :         614 :  {
    3339                 :         730 :    int u = UNSPEC_IEEE_MIN;
    3340                 :         717 :    if ((INTVAL (operands[5]) == 1 && rtx_equal_p (operands[1], operands[4]))
    3341                 :        1066 :         || (INTVAL (operands[5]) == 14 && rtx_equal_p (operands[1], operands[3])))
    3342                 :          69 :      u = UNSPEC_IEEE_MAX;
    3343                 :         216 : 
    3344                 :         646 :    if (MEM_P (operands[1]))
    3345                 :          36 :      operands[1] = force_reg (<MODE>mode, operands[1]);
    3346                 :         430 :    rtvec v = gen_rtvec (2, operands[1], operands[2]);
    3347                 :         430 :    rtx tmp = gen_rtx_UNSPEC (<MODE>mode, v, u);
    3348                 :         430 :    emit_move_insn (operands[0], tmp);
    3349                 :         430 :    DONE;
    3350                 :             :  })
    3351                 :             : 
    3352                 :             : (define_insn_and_split "*minmax<mode>3_2"
    3353                 :             :   [(set (match_operand:VF_128_256 0 "register_operand")
    3354                 :             :         (unspec:VF_128_256
    3355                 :             :           [(match_operand:VF_128_256 1 "nonimmediate_operand")
    3356                 :             :            (match_operand:VF_128_256 2 "nonimmediate_operand")
    3357                 :             :            (lt:VF_128_256
    3358                 :             :              (match_operand:VF_128_256 3 "nonimmediate_operand")
    3359                 :             :              (match_operand:VF_128_256 4 "nonimmediate_operand"))]
    3360                 :             :              UNSPEC_BLENDV))]
    3361                 :        1358 :   "TARGET_SSE && ix86_pre_reload_split ()
    3362                 :        2089 :    && ((rtx_equal_p (operands[1], operands[3])
    3363                 :         600 :         && rtx_equal_p (operands[2], operands[4]))
    3364                 :         968 :        || (rtx_equal_p (operands[1], operands[4])
    3365                 :        1191 :            && rtx_equal_p (operands[2], operands[3])))"
    3366                 :         473 :    "#"
    3367                 :         278 :    "&& 1"
    3368                 :         325 :    [(const_int 0)]
    3369                 :         444 :  {
    3370                 :         444 :    int u = UNSPEC_IEEE_MIN;
    3371                 :         657 :    if (rtx_equal_p (operands[1], operands[3]))
    3372                 :         508 :      u = UNSPEC_IEEE_MAX;
    3373                 :          57 : 
    3374                 :         325 :    if (MEM_P (operands[2]))
    3375                 :          60 :      operands[2] = force_reg (<MODE>mode, operands[2]);
    3376                 :         301 :    rtvec v = gen_rtvec (2, operands[2], operands[1]);
    3377                 :         301 :    rtx tmp = gen_rtx_UNSPEC (<MODE>mode, v, u);
    3378                 :         268 :    emit_move_insn (operands[0], tmp);
    3379                 :         268 :    DONE;
    3380                 :             :  })
    3381                 :             : 
    3382                 :             : ;; These versions of the min/max patterns implement exactly the operations
    3383                 :             : ;;   min = (op1 < op2 ? op1 : op2)
    3384                 :             : ;;   max = (!(op1 < op2) ? op1 : op2)
    3385                 :             : ;; Their operands are not commutative, and thus they may be used in the
    3386                 :             : ;; presence of -0.0 and NaN.
    3387                 :             : 
    3388                 :             : (define_insn "ieee_<ieee_maxmin><mode>3<mask_name><round_saeonly_name>"
    3389                 :             :   [(set (match_operand:VFH 0 "register_operand" "=x,v")
    3390                 :             :         (unspec:VFH
    3391                 :          68 :           [(match_operand:VFH 1 "register_operand" "0,v")
    3392                 :             :            (match_operand:VFH 2 "<round_saeonly_nimm_predicate>" "xBm,<round_saeonly_constraint>")]
    3393                 :             :           IEEE_MAXMIN))]
    3394                 :        3283 :   "TARGET_SSE
    3395                 :        2227 :    && <mask_mode512bit_condition>
    3396                 :        1337 :    && <round_saeonly_mode_condition>"
    3397                 :          35 :   "@
    3398                 :          68 :    <ieee_maxmin><ssemodesuffix>\t{%2, %0|%0, %2}
    3399                 :          68 :    v<ieee_maxmin><ssemodesuffix>\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %2<round_saeonly_mask_op3>}"
    3400                 :         188 :   [(set_attr "isa" "noavx,avx")
    3401                 :         188 :    (set_attr "type" "sseadd")
    3402                 :        1635 :    (set_attr "btver2_sse_attr" "maxmin")
    3403                 :          57 :    (set_attr "prefix" "<mask_prefix3>")
    3404                 :          57 :    (set_attr "mode" "<MODE>")])
    3405                 :          57 : 
    3406                 :          33 : ;; Standard scalar operation patterns which preserve the rest of the
    3407                 :          33 : ;; vector for combiner.
    3408                 :        2172 : (define_insn "*ieee_<ieee_maxmin><mode>3"
    3409                 :             :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    3410                 :             :         (vec_merge:VFH_128
    3411                 :             :           (vec_duplicate:VFH_128
    3412                 :             :             (unspec:<ssescalarmode>
    3413                 :             :               [(vec_select:<ssescalarmode>
    3414                 :             :                  (match_operand:VFH_128 1 "register_operand" "0,v")
    3415                 :             :                  (parallel [(const_int 0)]))
    3416                 :             :                (match_operand:<ssescalarmode> 2 "nonimmediate_operand" "xm,vm")]
    3417                 :             :                IEEE_MAXMIN))
    3418                 :             :           (match_dup 1)
    3419                 :             :           (const_int 1)))]
    3420                 :          16 :   "TARGET_SSE"
    3421                 :             :   "@
    3422                 :             :    <ieee_maxmin><ssescalarmodesuffix>\t{%2, %0|%0, %2}
    3423                 :             :    v<ieee_maxmin><ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    3424                 :           2 :   [(set_attr "isa" "noavx,avx")
    3425                 :           2 :    (set_attr "type" "sseadd")
    3426                 :             :    (set_attr "btver2_sse_attr" "maxmin")
    3427                 :             :    (set (attr "prefix")
    3428                 :             :      (cond [(eq_attr "alternative" "0")
    3429                 :             :               (const_string "orig")
    3430                 :             :             (eq_attr "alternative" "1")
    3431                 :             :               (if_then_else
    3432                 :             :                 (match_test "<MODE>mode == V8HFmode")
    3433                 :             :                 (const_string "evex")
    3434                 :             :                 (const_string "vex"))
    3435                 :             :            ]
    3436                 :             :            (const_string "*")))
    3437                 :             :    (set_attr "mode" "<ssescalarmode>")])
    3438                 :             : 
    3439                 :             : (define_expand "<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    3440                 :             :   [(set (match_operand:VFH_128 0 "register_operand")
    3441                 :             :         (vec_merge:VFH_128
    3442                 :             :           (smaxmin:VFH_128
    3443                 :             :             (match_operand:VFH_128 1 "register_operand")
    3444                 :             :             (match_operand:VFH_128 2 "nonimmediate_operand"))
    3445                 :             :          (match_dup 1)
    3446                 :        7467 :          (const_int 1)))]
    3447                 :        7364 :   "TARGET_SSE"
    3448                 :        7740 : {
    3449                 :         228 :   if (!flag_finite_math_only || flag_signed_zeros)
    3450                 :         103 :     {
    3451                 :         479 :       emit_insn (gen_<sse>_ieee_vm<maxmin_float><mode>3<mask_scalar_name><round_saeonly_scalar_name>
    3452                 :        7448 :                  (operands[0], operands[1], operands[2]
    3453                 :         103 :                   <mask_scalar_operand_arg34>
    3454                 :             :                   <round_saeonly_scalar_mask_arg3>));
    3455                 :         376 :       DONE;
    3456                 :        6691 :     }
    3457                 :          97 : })
    3458                 :             : 
    3459                 :             : (define_insn "*<sse>_vm<code><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    3460                 :           0 :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    3461                 :           0 :         (vec_merge:VFH_128
    3462                 :           0 :           (smaxmin:VFH_128
    3463                 :           0 :             (match_operand:VFH_128 1 "register_operand" "0,v")
    3464                 :           0 :             (match_operand:VFH_128 2 "nonimmediate_operand" "xm,<round_saeonly_scalar_constraint>"))
    3465                 :           8 :          (match_dup 1)
    3466                 :           8 :          (const_int 1)))]
    3467                 :           8 :   "TARGET_SSE"
    3468                 :           8 :   "@
    3469                 :           0 :    <maxmin_float><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    3470                 :           0 :    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>}"
    3471                 :           0 :   [(set_attr "isa" "noavx,avx")
    3472                 :           8 :    (set_attr "type" "sse")
    3473                 :           0 :    (set_attr "btver2_sse_attr" "maxmin")
    3474                 :           0 :    (set_attr "prefix" "<round_saeonly_scalar_prefix>")
    3475                 :           0 :    (set_attr "mode" "<ssescalarmode>")])
    3476                 :           4 : 
    3477                 :             : (define_insn "<sse>_ieee_vm<ieee_maxmin><mode>3<mask_scalar_name><round_saeonly_scalar_name>"
    3478                 :             :   [(set (match_operand:VFH_128 0 "register_operand" "=x,v")
    3479                 :             :         (vec_merge:VFH_128
    3480                 :           4 :           (unspec:VFH_128
    3481                 :          16 :             [(match_operand:VFH_128 1 "register_operand" "0,v")
    3482                 :           0 :              (match_operand:VFH_128 2 "nonimmediate_operand" "xm,<round_saeonly_scalar_constraint>")]
    3483                 :           0 :             IEEE_MAXMIN)
    3484                 :          78 :          (match_dup 1)
    3485                 :          78 :          (const_int 1)))]
    3486                 :        1453 :   "TARGET_SSE"
    3487                 :          16 :   "@
    3488                 :         372 :    <ieee_maxmin><ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    3489                 :        2236 :    v<ieee_maxmin><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>}"
    3490                 :        3607 :   [(set_attr "isa" "noavx,avx")
    3491                 :        3995 :    (set_attr "type" "sse")
    3492                 :         651 :    (set_attr "btver2_sse_attr" "maxmin")
    3493                 :         518 :    (set_attr "prefix" "<round_saeonly_scalar_prefix>")
    3494                 :         829 :    (set_attr "mode" "<ssescalarmode>")])
    3495                 :        2922 : 
    3496                 :         867 : (define_mode_attr addsub_cst [(V4DF "5") (V2DF "1")
    3497                 :         849 :                               (V4SF "5") (V8SF "85")])
    3498                 :         715 : 
    3499                 :         462 : (define_insn "vec_addsub<mode>3"
    3500                 :         858 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    3501                 :         454 :         (vec_merge:VF_128_256
    3502                 :         831 :           (minus:VF_128_256
    3503                 :         767 :             (match_operand:VF_128_256 1 "register_operand" "0,x")
    3504                 :        6154 :             (match_operand:VF_128_256 2 "vector_operand" "xBm, xjm"))
    3505                 :        6028 :           (plus:VF_128_256 (match_dup 1) (match_dup 2))
    3506                 :        6108 :           (const_int <addsub_cst>)))]
    3507                 :        7566 :   "TARGET_SSE3"
    3508                 :         198 :   "@
    3509                 :         575 :    addsub<ssemodesuffix>\t{%2, %0|%0, %2}
    3510                 :         575 :    vaddsub<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    3511                 :        6780 :   [(set_attr "isa" "noavx,avx")
    3512                 :        1365 :    (set_attr "type" "sseadd")
    3513                 :        1215 :    (set_attr "addr" "*,gpr16")
    3514                 :          48 :    (set (attr "atom_unit")
    3515                 :         126 :      (if_then_else
    3516                 :     3008409 :        (match_test "<MODE>mode == V2DFmode")
    3517                 :         126 :        (const_string "complex")
    3518                 :          48 :        (const_string "*")))
    3519                 :          48 :    (set_attr "prefix" "orig,vex")
    3520                 :      676252 :    (set (attr "prefix_rep")
    3521                 :      676402 :      (if_then_else
    3522                 :         527 :        (and (match_test "<MODE>mode == V4SFmode")
    3523                 :      676779 :             (eq_attr "alternative" "0"))
    3524                 :      676629 :        (const_string "1")
    3525                 :      676252 :        (const_string "*")))
    3526                 :      676252 :    (set_attr "mode" "<MODE>")])
    3527                 :           0 : 
    3528                 :         278 : (define_split
    3529                 :      676300 :   [(set (match_operand:VF_128_256 0 "register_operand")
    3530                 :      676300 :         (match_operator:VF_128_256 6 "addsub_vm_operator"
    3531                 :      680864 :           [(minus:VF_128_256
    3532                 :          32 :              (match_operand:VF_128_256 1 "register_operand")
    3533                 :          32 :              (match_operand:VF_128_256 2 "vector_operand"))
    3534                 :      680832 :            (plus:VF_128_256
    3535                 :      680832 :              (match_operand:VF_128_256 3 "vector_operand")
    3536                 :      680832 :              (match_operand:VF_128_256 4 "vector_operand"))
    3537                 :        4580 :            (match_operand 5 "const_int_operand")]))]
    3538                 :        6153 :   "TARGET_SSE3
    3539                 :      678195 :    && can_create_pseudo_p ()
    3540                 :      676905 :    && ((rtx_equal_p (operands[1], operands[3])
    3541                 :      676905 :         && rtx_equal_p (operands[2], operands[4]))
    3542                 :      676252 :        || (rtx_equal_p (operands[1], operands[4])
    3543                 :      676252 :            && rtx_equal_p (operands[2], operands[3])))"
    3544                 :      676548 :   [(set (match_dup 0)
    3545                 :      676402 :         (vec_merge:VF_128_256
    3546                 :      676252 :           (minus:VF_128_256 (match_dup 1) (match_dup 2))
    3547                 :      676482 :           (plus:VF_128_256 (match_dup 1) (match_dup 2))
    3548                 :      676482 :           (match_dup 5)))])
    3549                 :      676560 : 
    3550                 :      676252 : (define_split
    3551                 :      676252 :   [(set (match_operand:VF_128_256 0 "register_operand")
    3552                 :      676252 :         (match_operator:VF_128_256 6 "addsub_vm_operator"
    3553                 :           0 :           [(plus:VF_128_256
    3554                 :      676252 :              (match_operand:VF_128_256 1 "vector_operand")
    3555                 :      676252 :              (match_operand:VF_128_256 2 "vector_operand"))
    3556                 :      676252 :            (minus:VF_128_256
    3557                 :      676252 :              (match_operand:VF_128_256 3 "register_operand")
    3558                 :      676252 :              (match_operand:VF_128_256 4 "vector_operand"))
    3559                 :      676252 :            (match_operand 5 "const_int_operand")]))]
    3560                 :      676559 :   "TARGET_SSE3
    3561                 :      676319 :    && can_create_pseudo_p ()
    3562                 :      676319 :    && ((rtx_equal_p (operands[1], operands[3])
    3563                 :      676315 :         && rtx_equal_p (operands[2], operands[4]))
    3564                 :      676256 :        || (rtx_equal_p (operands[1], operands[4])
    3565                 :      676256 :            && rtx_equal_p (operands[2], operands[3])))"
    3566                 :      676694 :   [(set (match_dup 0)
    3567                 :      676268 :         (vec_merge:VF_128_256
    3568                 :      676252 :           (minus:VF_128_256 (match_dup 3) (match_dup 4))
    3569                 :      676509 :           (plus:VF_128_256 (match_dup 3) (match_dup 4))
    3570                 :      676509 :           (match_dup 5)))]
    3571                 :      676592 : {
    3572                 :      676255 :   /* Negate mask bits to compensate for swapped PLUS and MINUS RTXes.  */
    3573                 :      676322 :   operands[5]
    3574                 :          70 :     = GEN_INT (~INTVAL (operands[5])
    3575                 :      676255 :                & ((HOST_WIDE_INT_1U << GET_MODE_NUNITS (<MODE>mode)) - 1));
    3576                 :      676255 : })
    3577                 :      676255 : 
    3578                 :           3 : (define_split
    3579                 :          70 :   [(set (match_operand:VF_128_256 0 "register_operand")
    3580                 :      676322 :         (match_operator:VF_128_256 7 "addsub_vs_operator"
    3581                 :      676322 :           [(vec_concat:<ssedoublevecmode>
    3582                 :      676319 :              (minus:VF_128_256
    3583                 :      676319 :                (match_operand:VF_128_256 1 "register_operand")
    3584                 :      676319 :                (match_operand:VF_128_256 2 "vector_operand"))
    3585                 :      676319 :              (plus:VF_128_256
    3586                 :      676319 :                (match_operand:VF_128_256 3 "vector_operand")
    3587                 :      676319 :                (match_operand:VF_128_256 4 "vector_operand")))
    3588                 :      690037 :            (match_parallel 5 "addsub_vs_parallel"
    3589                 :      676319 :              [(match_operand 6 "const_int_operand")])]))]
    3590                 :      690162 :   "TARGET_SSE3
    3591                 :      676444 :    && can_create_pseudo_p ()
    3592                 :         125 :    && ((rtx_equal_p (operands[1], operands[3])
    3593                 :         125 :         && rtx_equal_p (operands[2], operands[4]))
    3594                 :         125 :        || (rtx_equal_p (operands[1], operands[4])
    3595                 :         125 :            && rtx_equal_p (operands[2], operands[3])))"
    3596                 :         125 :   [(set (match_dup 0)
    3597                 :         129 :         (vec_merge:VF_128_256
    3598                 :         129 :           (minus:VF_128_256 (match_dup 1) (match_dup 2))
    3599                 :         129 :           (plus:VF_128_256 (match_dup 1) (match_dup 2))
    3600                 :      176407 :           (match_dup 5)))]
    3601                 :      176407 : {
    3602                 :      176407 :   int i, nelt = XVECLEN (operands[5], 0);
    3603                 :      176343 :   HOST_WIDE_INT ival = 0;
    3604                 :      176343 : 
    3605                 :      176340 :   for (i = 0; i < nelt; i++)
    3606                 :      176340 :     if (INTVAL (XVECEXP (operands[5], 0, i)) < GET_MODE_NUNITS (<MODE>mode))
    3607                 :        3324 :       ival |= HOST_WIDE_INT_1 << i;
    3608                 :         132 : 
    3609                 :         129 :   operands[5] = GEN_INT (ival);
    3610                 :        3309 : })
    3611                 :        3321 : 
    3612                 :        3312 : (define_split
    3613                 :        3309 :   [(set (match_operand:VF_128_256 0 "register_operand")
    3614                 :        3309 :         (match_operator:VF_128_256 7 "addsub_vs_operator"
    3615                 :     2292015 :           [(vec_concat:<ssedoublevecmode>
    3616                 :     2288835 :              (plus:VF_128_256
    3617                 :     2288835 :                (match_operand:VF_128_256 1 "vector_operand")
    3618                 :     2288835 :                (match_operand:VF_128_256 2 "vector_operand"))
    3619                 :     2288835 :              (minus:VF_128_256
    3620                 :     2288835 :                (match_operand:VF_128_256 3 "register_operand")
    3621                 :     2288835 :                (match_operand:VF_128_256 4 "vector_operand")))
    3622                 :     2288835 :            (match_parallel 5 "addsub_vs_parallel"
    3623                 :     2288835 :              [(match_operand 6 "const_int_operand")])]))]
    3624                 :         129 :   "TARGET_SSE3
    3625                 :         132 :    && can_create_pseudo_p ()
    3626                 :         132 :    && ((rtx_equal_p (operands[1], operands[3])
    3627                 :         132 :         && rtx_equal_p (operands[2], operands[4]))
    3628                 :         132 :        || (rtx_equal_p (operands[1], operands[4])
    3629                 :         129 :            && rtx_equal_p (operands[2], operands[3])))"
    3630                 :         129 :   [(set (match_dup 0)
    3631                 :         132 :         (vec_merge:VF_128_256
    3632                 :         374 :           (minus:VF_128_256 (match_dup 3) (match_dup 4))
    3633                 :         374 :           (plus:VF_128_256 (match_dup 3) (match_dup 4))
    3634                 :         374 :           (match_dup 5)))]
    3635                 :         371 : {
    3636                 :         371 :   int i, nelt = XVECLEN (operands[5], 0);
    3637                 :         129 :   HOST_WIDE_INT ival = 0;
    3638                 :         129 : 
    3639                 :         990 :   for (i = 0; i < nelt; i++)
    3640                 :         129 :     if (INTVAL (XVECEXP (operands[5], 0, i)) >= GET_MODE_NUNITS (<MODE>mode))
    3641                 :        7844 :       ival |= HOST_WIDE_INT_1 << i;
    3642                 :         990 : 
    3643                 :         990 :   operands[5] = GEN_INT (ival);
    3644                 :        8705 : })
    3645                 :      231781 : 
    3646                 :      231781 : (define_insn "avx_h<insn>v4df3"
    3647                 :      231781 :   [(set (match_operand:V4DF 0 "register_operand" "=x")
    3648                 :      230920 :         (vec_concat:V4DF
    3649                 :        7844 :           (vec_concat:V2DF
    3650                 :         129 :             (plusminus:DF
    3651                 :         129 :               (vec_select:DF
    3652                 :         129 :                 (match_operand:V4DF 1 "register_operand" "x")
    3653                 :         129 :                 (parallel [(const_int 0)]))
    3654                 :         129 :               (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    3655                 :         129 :             (plusminus:DF
    3656                 :         129 :               (vec_select:DF
    3657                 :      620264 :                 (match_operand:V4DF 2 "nonimmediate_operand" "xjm")
    3658                 :      620264 :                 (parallel [(const_int 0)]))
    3659                 :      620264 :               (vec_select:DF (match_dup 2) (parallel [(const_int 1)]))))
    3660                 :         129 :           (vec_concat:V2DF
    3661                 :         129 :             (plusminus:DF
    3662                 :         132 :               (vec_select:DF (match_dup 1) (parallel [(const_int 2)]))
    3663                 :         132 :               (vec_select:DF (match_dup 1) (parallel [(const_int 3)])))
    3664                 :         132 :             (plusminus:DF
    3665                 :         132 :               (vec_select:DF (match_dup 2) (parallel [(const_int 2)]))
    3666                 :         132 :               (vec_select:DF (match_dup 2) (parallel [(const_int 3)]))))))]
    3667                 :         288 :   "TARGET_AVX"
    3668                 :     5388376 :   "vh<plusminus_mnemonic>pd\t{%2, %1, %0|%0, %1, %2}"
    3669                 :     5388376 :   [(set_attr "type" "sseadd")
    3670                 :     5388379 :    (set_attr "addr" "gpr16")
    3671                 :         330 :    (set_attr "prefix" "vex")
    3672                 :         330 :    (set_attr "mode" "V4DF")])
    3673                 :         129 : 
    3674                 :         132 : (define_expand "sse3_haddv2df3"
    3675                 :        6219 :   [(set (match_operand:V2DF 0 "register_operand")
    3676                 :         132 :         (vec_concat:V2DF
    3677                 :         132 :           (plus:DF
    3678                 :        6219 :             (vec_select:DF
    3679                 :     4993750 :               (match_operand:V2DF 1 "register_operand")
    3680                 :     4993753 :               (parallel [(const_int 0)]))
    3681                 :     4993753 :             (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    3682                 :        6219 :           (plus:DF
    3683                 :        6219 :             (vec_select:DF
    3684                 :         132 :               (match_operand:V2DF 2 "vector_operand")
    3685                 :         132 :               (parallel [(const_int 0)]))
    3686                 :         132 :             (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]
    3687                 :         132 :   "TARGET_SSE3")
    3688                 :         129 : 
    3689                 :         129 : (define_insn "*sse3_haddv2df3"
    3690                 :     1226696 :   [(set (match_operand:V2DF 0 "register_operand" "=x,x")
    3691                 :     1226696 :         (vec_concat:V2DF
    3692                 :     1226696 :           (plus:DF
    3693                 :         129 :             (vec_select:DF
    3694                 :         129 :               (match_operand:V2DF 1 "register_operand" "0,x")
    3695                 :         129 :               (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))
    3696                 :         129 :             (vec_select:DF
    3697                 :         129 :               (match_dup 1)
    3698                 :         129 :               (parallel [(match_operand:SI 4 "const_0_to_1_operand")])))
    3699                 :         129 :           (plus:DF
    3700                 :         130 :             (vec_select:DF
    3701                 :    57426058 :               (match_operand:V2DF 2 "vector_operand" "xBm,xjm")
    3702                 :    57426058 :               (parallel [(match_operand:SI 5 "const_0_to_1_operand")]))
    3703                 :    57426058 :             (vec_select:DF
    3704                 :         130 :               (match_dup 2)
    3705                 :         130 :               (parallel [(match_operand:SI 6 "const_0_to_1_operand")])))))]
    3706                 :         224 :   "TARGET_SSE3
    3707                 :         224 :    && INTVAL (operands[3]) != INTVAL (operands[4])
    3708                 :         223 :    && INTVAL (operands[5]) != INTVAL (operands[6])"
    3709                 :         129 :   "@
    3710                 :         129 :    haddpd\t{%2, %0|%0, %2}
    3711                 :         129 :    vhaddpd\t{%2, %1, %0|%0, %1, %2}"
    3712                 :   152621845 :   [(set_attr "isa" "noavx,avx")
    3713                 :   152621845 :    (set_attr "addr" "*,gpr16")
    3714                 :   152619025 :    (set_attr "type" "sseadd")
    3715                 :         240 :    (set_attr "prefix" "orig,vex")
    3716                 :         243 :    (set_attr "mode" "V2DF")])
    3717                 :         240 : 
    3718                 :         242 : (define_insn "sse3_hsubv2df3"
    3719                 :         242 :   [(set (match_operand:V2DF 0 "register_operand" "=x,x")
    3720                 :         353 :         (vec_concat:V2DF
    3721                 :         133 :           (minus:DF
    3722                 :         242 :             (vec_select:DF
    3723                 :     1511077 :               (match_operand:V2DF 1 "register_operand" "0,x")
    3724                 :     1511077 :               (parallel [(const_int 0)]))
    3725                 :     1511077 :             (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
    3726                 :         129 :           (minus:DF
    3727                 :         229 :             (vec_select:DF
    3728                 :         232 :               (match_operand:V2DF 2 "vector_operand" "xBm,xjm")
    3729                 :         232 :               (parallel [(const_int 0)]))
    3730                 :         232 :             (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))))]
    3731                 :         232 :   "TARGET_SSE3"
    3732                 :         232 :   "@
    3733                 :         232 :    hsubpd\t{%2, %0|%0, %2}
    3734                 :     2074994 :    vhsubpd\t{%2, %1, %0|%0, %1, %2}"
    3735                 :     2076200 :   [(set_attr "isa" "noavx,avx")
    3736                 :     2076270 :    (set_attr "type" "sseadd")
    3737                 :     2075064 :    (set_attr "addr" "*,gpr16")
    3738                 :     2075064 :    (set_attr "prefix" "orig,vex")
    3739                 :     2075064 :    (set_attr "mode" "V2DF")])
    3740                 :     2074964 : 
    3741                 :     2074964 : (define_insn "*sse3_haddv2df3_low"
    3742                 :     2074964 :   [(set (match_operand:DF 0 "register_operand" "=x,x")
    3743                 :     2074964 :         (plus:DF
    3744                 :     2074964 :           (vec_select:DF
    3745                 :     2074964 :             (match_operand:V2DF 1 "register_operand" "0,x")
    3746                 :     2074964 :             (parallel [(match_operand:SI 2 "const_0_to_1_operand")]))
    3747                 :     2074964 :           (vec_select:DF
    3748                 :     2074964 :             (match_dup 1)
    3749                 :     2074964 :             (parallel [(match_operand:SI 3 "const_0_to_1_operand")]))))]
    3750                 :     2075054 :   "TARGET_SSE3 && TARGET_V2DF_REDUCTION_PREFER_HADDPD
    3751                 :     2074984 :    && INTVAL (operands[2]) != INTVAL (operands[3])"
    3752                 :     2074964 :   "@
    3753                 :     2074964 :    haddpd\t{%0, %0|%0, %0}
    3754                 :     2074964 :    vhaddpd\t{%1, %1, %0|%0, %1, %1}"
    3755                 :     2074964 :   [(set_attr "isa" "noavx,avx")
    3756                 :     2074964 :    (set_attr "type" "sseadd1")
    3757                 :     2074964 :    (set_attr "prefix" "orig,vex")
    3758                 :     2074964 :    (set_attr "mode" "V2DF")])
    3759                 :     2076499 : 
    3760                 :     2076499 : (define_insn "*sse3_hsubv2df3_low"
    3761                 :     2074964 :   [(set (match_operand:DF 0 "register_operand" "=x,x")
    3762                 :     2075079 :         (minus:DF
    3763                 :     2075079 :           (vec_select:DF
    3764                 :     2074960 :             (match_operand:V2DF 1 "register_operand" "0,x")
    3765                 :     2074960 :             (parallel [(const_int 0)]))
    3766                 :     2074839 :           (vec_select:DF
    3767                 :     2074839 :             (match_dup 1)
    3768                 :     2074839 :             (parallel [(const_int 1)]))))]
    3769                 :     2074848 :   "TARGET_SSE3 && TARGET_V2DF_REDUCTION_PREFER_HADDPD"
    3770                 :     2074839 :   "@
    3771                 :     2074839 :    hsubpd\t{%0, %0|%0, %0}
    3772                 :     2074839 :    vhsubpd\t{%1, %1, %0|%0, %1, %1}"
    3773                 :     2074835 :   [(set_attr "isa" "noavx,avx")
    3774                 :     2074961 :    (set_attr "type" "sseadd1")
    3775                 :     2074961 :    (set_attr "prefix" "orig,vex")
    3776                 :     2074961 :    (set_attr "mode" "V2DF")])
    3777                 :     2075695 : 
    3778                 :     2075695 : (define_insn "avx_h<insn>v8sf3"
    3779                 :     2074961 :   [(set (match_operand:V8SF 0 "register_operand" "=x")
    3780                 :     2075076 :         (vec_concat:V8SF
    3781                 :     2075080 :           (vec_concat:V4SF
    3782                 :     2074965 :             (vec_concat:V2SF
    3783                 :     2074965 :               (plusminus:SF
    3784                 :     2074965 :                 (vec_select:SF
    3785                 :     2074965 :                   (match_operand:V8SF 1 "register_operand" "x")
    3786                 :     2074965 :                   (parallel [(const_int 0)]))
    3787                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    3788                 :     2074965 :               (plusminus:SF
    3789                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))
    3790                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))
    3791                 :     2074965 :             (vec_concat:V2SF
    3792                 :     2074965 :               (plusminus:SF
    3793                 :     2074965 :                 (vec_select:SF
    3794                 :     2074965 :                   (match_operand:V8SF 2 "nonimmediate_operand" "xjm")
    3795                 :     2074965 :                   (parallel [(const_int 0)]))
    3796                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))
    3797                 :     2074965 :               (plusminus:SF
    3798                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))
    3799                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 3)])))))
    3800                 :     2074965 :           (vec_concat:V4SF
    3801                 :     2074965 :             (vec_concat:V2SF
    3802                 :     2074965 :               (plusminus:SF
    3803                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 4)]))
    3804                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 5)])))
    3805                 :     2074965 :               (plusminus:SF
    3806                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 6)]))
    3807                 :     2074965 :                 (vec_select:SF (match_dup 1) (parallel [(const_int 7)]))))
    3808                 :     2074965 :             (vec_concat:V2SF
    3809                 :     2074965 :               (plusminus:SF
    3810                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 4)]))
    3811                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 5)])))
    3812                 :     2074965 :               (plusminus:SF
    3813                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 6)]))
    3814                 :     2074965 :                 (vec_select:SF (match_dup 2) (parallel [(const_int 7)])))))))]
    3815                 :     2075121 :   "TARGET_AVX"
    3816                 :     2074965 :   "vh<plusminus_mnemonic>ps\t{%2, %1, %0|%0, %1, %2}"
    3817                 :     2074965 :   [(set_attr "type" "sseadd")
    3818                 :     2074965 :    (set_attr "addr" "gpr16")
    3819                 :     2075067 :    (set_attr "prefix" "vex")
    3820                 :     2075067 :    (set_attr "mode" "V8SF")])
    3821                 :     2075067 : 
    3822                 :     2074965 : (define_insn "sse3_h<insn>v4sf3"
    3823                 :     2134533 :   [(set (match_operand:V4SF 0 "register_operand" "=x,x")
    3824                 :     2134533 :         (vec_concat:V4SF
    3825                 :     2134533 :           (vec_concat:V2SF
    3826                 :     2134533 :             (plusminus:SF
    3827                 :     2134533 :               (vec_select:SF
    3828                 :     2074965 :                 (match_operand:V4SF 1 "register_operand" "0,x")
    3829                 :     2075197 :                 (parallel [(const_int 0)]))
    3830                 :     2074965 :               (vec_select:SF (match_dup 1) (parallel [(const_int 1)])))
    3831                 :     2075037 :             (plusminus:SF
    3832                 :     2075037 :               (vec_select:SF (match_dup 1) (parallel [(const_int 2)]))
    3833                 :     2075107 :               (vec_select:SF (match_dup 1) (parallel [(const_int 3)]))))
    3834                 :     2074965 :           (vec_concat:V2SF
    3835                 :     2074965 :             (plusminus:SF
    3836                 :     2074965 :               (vec_select:SF
    3837                 :     2074965 :                 (match_operand:V4SF 2 "vector_operand" "xBm,xjm")
    3838                 :     2074965 :                 (parallel [(const_int 0)]))
    3839                 :     2074965 :               (vec_select:SF (match_dup 2) (parallel [(const_int 1)])))
    3840                 :     2074965 :             (plusminus:SF
    3841                 :     2074965 :               (vec_select:SF (match_dup 2) (parallel [(const_int 2)]))
    3842                 :     2074965 :               (vec_select:SF (match_dup 2) (parallel [(const_int 3)]))))))]
    3843                 :     2075163 :   "TARGET_SSE3"
    3844                 :     2074965 :   "@
    3845                 :     2074965 :    h<plusminus_mnemonic>ps\t{%2, %0|%0, %2}
    3846                 :     2074965 :    vh<plusminus_mnemonic>ps\t{%2, %1, %0|%0, %1, %2}"
    3847                 :     2074965 :   [(set_attr "isa" "noavx,avx")
    3848                 :     2074965 :    (set_attr "type" "sseadd")
    3849                 :     2074965 :    (set_attr "addr" "*,gpr16")
    3850                 :     2074965 :    (set_attr "atom_unit" "complex")
    3851                 :     2075913 :    (set_attr "prefix" "orig,vex")
    3852                 :     2075913 :    (set_attr "prefix_rep" "1,*")
    3853                 :     2074965 :    (set_attr "mode" "V4SF")])
    3854                 :     2075382 : 
    3855                 :     2075043 : (define_mode_iterator REDUC_SSE_PLUS_MODE
    3856                 :     2075304 :  [(V2DF "TARGET_SSE") (V4SF "TARGET_SSE")
    3857                 :     2074965 :   (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    3858                 :     2075175 :   (V8HI "TARGET_SSE2") (V4SI "TARGET_SSE2")
    3859                 :         413 :   (V2DI "TARGET_SSE2")])
    3860                 :         413 : 
    3861                 :         413 : (define_expand "reduc_plus_scal_<mode>"
    3862                 :         413 :  [(plus:REDUC_SSE_PLUS_MODE
    3863                 :         409 :    (match_operand:<ssescalarmode> 0 "register_operand")
    3864                 :         409 :    (match_operand:REDUC_SSE_PLUS_MODE 1 "register_operand"))]
    3865                 :         619 :  ""
    3866                 :       14337 : {
    3867                 :     2378926 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    3868                 :     2378926 :   ix86_expand_reduc (gen_add<mode>3, tmp, operands[1]);
    3869                 :     2378720 :   emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
    3870                 :         305 :                                                         const0_rtx));
    3871                 :       14365 :   DONE;
    3872                 :         235 : })
    3873                 :     2300163 : 
    3874                 :         200 : (define_expand "reduc_plus_scal_v16qi"
    3875                 :         200 :  [(plus:V16QI
    3876                 :         200 :     (match_operand:QI 0 "register_operand")
    3877                 :         200 :     (match_operand:V16QI 1 "register_operand"))]
    3878                 :         200 :  "TARGET_SSE2"
    3879                 :        1061 : {
    3880                 :        1061 :   rtx tmp = gen_reg_rtx (V1TImode);
    3881                 :        1064 :   emit_insn (gen_sse2_lshrv1ti3 (tmp, gen_lowpart (V1TImode, operands[1]),
    3882                 :    10668938 :                                  GEN_INT (64)));
    3883                 :    10669799 :   rtx tmp2 = gen_reg_rtx (V16QImode);
    3884                 :    10669799 :   emit_insn (gen_addv16qi3 (tmp2, operands[1], gen_lowpart (V16QImode, tmp)));
    3885                 :        1064 :   rtx tmp3 = gen_reg_rtx (V16QImode);
    3886                 :        1064 :   emit_move_insn (tmp3, CONST0_RTX (V16QImode));
    3887                 :        1064 :   rtx tmp4 = gen_reg_rtx (V2DImode);
    3888                 :        1064 :   emit_insn (gen_sse2_psadbw (tmp4, tmp2, tmp3));
    3889                 :        1064 :   tmp4 = gen_lowpart (V16QImode, tmp4);
    3890                 :        2740 :   emit_insn (gen_vec_extractv16qiqi (operands[0], tmp4, const0_rtx));
    3891                 :        1061 :   DONE;
    3892                 :         200 : })
    3893                 :      209037 : 
    3894                 :      209037 : (define_mode_iterator REDUC_PLUS_MODE
    3895                 :      209037 :  [(V4DF "TARGET_AVX") (V8SF "TARGET_AVX")
    3896                 :      209037 :   (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    3897                 :        1809 :   (V8DF "TARGET_AVX512F && TARGET_EVEX512")
    3898                 :        1809 :   (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    3899                 :         133 :   (V32HF "TARGET_AVX512FP16 && TARGET_AVX512VL && TARGET_EVEX512")
    3900                 :         133 :   (V32QI "TARGET_AVX") (V16HI "TARGET_AVX")
    3901                 :         209 :   (V8SI "TARGET_AVX")  (V4DI "TARGET_AVX")
    3902                 :         209 :   (V64QI "TARGET_AVX512F && TARGET_EVEX512")
    3903                 :         209 :   (V32HI "TARGET_AVX512F && TARGET_EVEX512")
    3904                 :         209 :   (V16SI "TARGET_AVX512F && TARGET_EVEX512")
    3905                 :      495528 :   (V8DI "TARGET_AVX512F && TARGET_EVEX512")])
    3906                 :      495528 : 
    3907                 :         209 : (define_expand "reduc_plus_scal_<mode>"
    3908                 :         209 :  [(plus:REDUC_PLUS_MODE
    3909                 :         209 :    (match_operand:<ssescalarmode> 0 "register_operand")
    3910                 :         210 :    (match_operand:REDUC_PLUS_MODE 1 "register_operand"))]
    3911                 :         209 :  ""
    3912                 :        5450 : {
    3913                 :        4740 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    3914                 :        5451 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    3915                 :        5666 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    3916                 :        5666 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    3917                 :        5666 :   emit_insn (gen_vec_extract_lo_<mode> (tmp2, operands[1]));
    3918                 :        5451 :   emit_insn (gen_add<ssehalfvecmodelower>3 (tmp3, tmp, tmp2));
    3919                 :        5450 :   emit_insn (gen_reduc_plus_scal_<ssehalfvecmodelower> (operands[0], tmp3));
    3920                 :        5450 :   DONE;
    3921                 :         412 : })
    3922                 :         209 : 
    3923                 :         209 : ;; Modes handled by reduc_sm{in,ax}* patterns.
    3924                 :         209 : (define_mode_iterator REDUC_SSE_SMINMAX_MODE
    3925                 :         412 :   [(V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    3926                 :         209 :    (V4SF "TARGET_SSE") (V2DF "TARGET_SSE")
    3927                 :         209 :    (V4SI "TARGET_SSE2") (V8HI "TARGET_SSE2") (V16QI "TARGET_SSE2")
    3928                 :         209 :    (V2DI "TARGET_SSE4_2")])
    3929                 :         209 : 
    3930                 :         209 : (define_expand "reduc_<code>_scal_<mode>"
    3931                 :         209 :   [(smaxmin:REDUC_SSE_SMINMAX_MODE
    3932                 :         209 :      (match_operand:<ssescalarmode> 0 "register_operand")
    3933                 :         209 :      (match_operand:REDUC_SSE_SMINMAX_MODE 1 "register_operand"))]
    3934                 :       66621 :   ""
    3935                 :       66956 : {
    3936                 :       67291 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    3937                 :       66956 :   ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
    3938                 :         544 :   emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0], tmp,
    3939                 :        1159 :                                                         const0_rtx));
    3940                 :         544 :   DONE;
    3941                 :         209 : })
    3942                 :        1159 : 
    3943                 :        1159 : (define_mode_iterator REDUC_SMINMAX_MODE
    3944                 :        1159 :   [(V32QI "TARGET_AVX2") (V16HI "TARGET_AVX2")
    3945                 :        1159 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    3946                 :      154924 :    (V8SI "TARGET_AVX2") (V4DI "TARGET_AVX2")
    3947                 :      154924 :    (V8SF "TARGET_AVX") (V4DF "TARGET_AVX")
    3948                 :      153974 :    (V64QI "TARGET_AVX512BW && TARGET_EVEX512")
    3949                 :         209 :    (V32HF "TARGET_AVX512FP16 && TARGET_AVX512VL && TARGET_EVEX512")
    3950                 :         209 :    (V32HI "TARGET_AVX512BW && TARGET_EVEX512")
    3951                 :         209 :    (V16SI "TARGET_AVX512F && TARGET_EVEX512")
    3952                 :         209 :    (V8DI "TARGET_AVX512F && TARGET_EVEX512")
    3953                 :         209 :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    3954                 :         209 :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")])
    3955                 :         209 : 
    3956                 :         209 : (define_expand "reduc_<code>_scal_<mode>"
    3957                 :         210 :   [(smaxmin:REDUC_SMINMAX_MODE
    3958                 :         210 :      (match_operand:<ssescalarmode> 0 "register_operand")
    3959                 :         316 :      (match_operand:REDUC_SMINMAX_MODE 1 "register_operand"))]
    3960                 :         210 :   ""
    3961                 :         231 : {
    3962                 :         359 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    3963                 :         337 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    3964                 :         232 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    3965                 :         231 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    3966                 :         231 :   emit_insn (gen_vec_extract_lo_<mode> (tmp2, operands[1]));
    3967                 :         337 :   emit_insn (gen_<code><ssehalfvecmodelower>3 (tmp3, tmp, tmp2));
    3968                 :         232 :   emit_insn (gen_reduc_<code>_scal_<ssehalfvecmodelower> (operands[0], tmp3));
    3969                 :         231 :   DONE;
    3970                 :         209 : })
    3971                 :         209 : 
    3972                 :         210 : (define_expand "reduc_<code>_scal_<mode>"
    3973                 :         209 :   [(umaxmin:VI_AVX512BW
    3974                 :         209 :      (match_operand:<ssescalarmode> 0 "register_operand")
    3975                 :         209 :      (match_operand:VI_AVX512BW 1 "register_operand"))]
    3976                 :         209 :   "TARGET_AVX512F"
    3977                 :         209 : {
    3978                 :         209 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    3979                 :         209 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    3980                 :         209 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    3981                 :         230 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    3982                 :         230 :   emit_insn (gen_vec_extract_lo_<mode> (tmp2, operands[1]));
    3983                 :         230 :   emit_insn (gen_<code><ssehalfvecmodelower>3 (tmp3, tmp, tmp2));
    3984                 :         230 :   emit_insn (gen_reduc_<code>_scal_<ssehalfvecmodelower> (operands[0], tmp3));
    3985                 :         230 :   DONE;
    3986                 :         209 : })
    3987                 :         209 : 
    3988                 :         222 : (define_expand "reduc_<code>_scal_<mode>"
    3989                 :         230 :   [(umaxmin:VI_256
    3990                 :         209 :      (match_operand:<ssescalarmode> 0 "register_operand")
    3991                 :         222 :      (match_operand:VI_256 1 "register_operand"))]
    3992                 :         222 :   "TARGET_AVX2"
    3993                 :         236 : {
    3994                 :         236 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    3995                 :         217 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    3996                 :         229 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    3997                 :         216 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    3998                 :         216 :   emit_insn (gen_vec_extract_lo_<mode> (tmp2, operands[1]));
    3999                 :         216 :   emit_insn (gen_<code><ssehalfvecmodelower>3 (tmp3, tmp, tmp2));
    4000                 :         216 :   rtx tmp4 = gen_reg_rtx (<ssehalfvecmode>mode);
    4001                 :         216 :   ix86_expand_reduc (gen_<code><ssehalfvecmodelower>3, tmp4, tmp3);
    4002                 :       10364 :   emit_insn (gen_vec_extract<ssehalfvecmodelower><ssescalarmodelower>
    4003                 :       10357 :                 (operands[0], tmp4, const0_rtx));
    4004                 :       10370 :   DONE;
    4005                 :         209 : })
    4006                 :         209 : 
    4007                 :         222 : (define_expand "reduc_umin_scal_v8hi"
    4008                 :         325 :   [(umin:V8HI
    4009                 :         222 :      (match_operand:HI 0 "register_operand")
    4010                 :         222 :      (match_operand:V8HI 1 "register_operand"))]
    4011                 :         222 :   "TARGET_SSE4_1"
    4012                 :         222 : {
    4013                 :         213 :   rtx tmp = gen_reg_rtx (V8HImode);
    4014                 :         213 :   ix86_expand_reduc (gen_uminv8hi3, tmp, operands[1]);
    4015                 :         213 :   emit_insn (gen_vec_extractv8hihi (operands[0], tmp, const0_rtx));
    4016                 :         213 :   DONE;
    4017                 :       11484 : })
    4018                 :       11484 : 
    4019                 :       11484 : (define_insn "<mask_codefor>reducep<mode><mask_name><round_saeonly_name>"
    4020                 :       11484 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    4021                 :       11484 :         (unspec:VFH_AVX512VL
    4022                 :         209 :           [(match_operand:VFH_AVX512VL 1 "<round_saeonly_nimm_predicate>" "<round_saeonly_constraint>")
    4023                 :        4079 :            (match_operand:SI 2 "const_0_to_255_operand")]
    4024                 :         209 :           UNSPEC_REDUCE))]
    4025                 :        6568 :   "(TARGET_AVX512DQ || (VALID_AVX512FP16_REG_MODE (<MODE>mode))) && <round_saeonly_mode_condition>"
    4026                 :        4079 :   "vreduce<ssemodesuffix>\t{%2, <round_saeonly_mask_op3>%1, %0<mask_operand3>|%0<mask_operand3>, %1<round_saeonly_mask_op3>, %2}"
    4027                 :        4079 :   [(set_attr "type" "sse")
    4028                 :        4079 :    (set_attr "prefix" "evex")
    4029                 :        5793 :    (set_attr "mode" "<MODE>")])
    4030                 :        4079 : 
    4031                 :        4834 : (define_insn "reduces<mode><mask_scalar_name><round_saeonly_scalar_name>"
    4032                 :         209 :   [(set (match_operand:VFH_128 0 "register_operand" "=v")
    4033                 :         209 :         (vec_merge:VFH_128
    4034                 :         209 :           (unspec:VFH_128
    4035                 :         380 :             [(match_operand:VFH_128 1 "register_operand" "v")
    4036                 :         209 :              (match_operand:VFH_128 2 "<round_saeonly_scalar_nimm_predicate>" "<round_saeonly_scalar_constraint>")
    4037                 :        1974 :              (match_operand:SI 3 "const_0_to_255_operand")]
    4038                 :        1529 :             UNSPEC_REDUCE)
    4039                 :        1529 :           (match_dup 1)
    4040                 :        1529 :           (const_int 1)))]
    4041                 :        2644 :   "TARGET_AVX512DQ || (VALID_AVX512FP16_REG_MODE (<MODE>mode))"
    4042                 :        1529 :   "vreduce<ssescalarmodesuffix>\t{%3, <round_saeonly_scalar_mask_op4>%2, %1, %0<mask_scalar_operand4>|%0<mask_scalar_operand4>, %1, %<iptr>2<round_saeonly_scalar_mask_op4>, %3}"
    4043                 :         380 :   [(set_attr "type" "sse")
    4044                 :         209 :    (set_attr "prefix" "evex")
    4045                 :         758 :    (set_attr "mode" "<MODE>")])
    4046                 :        1724 : 
    4047                 :         209 : (define_expand "reduc_<code>_scal_<mode>"
    4048                 :         209 :  [(any_logic:VI_128
    4049                 :         209 :     (match_operand:<ssescalarmode> 0 "register_operand")
    4050                 :         209 :     (match_operand:VI_128 1 "register_operand"))]
    4051                 :         209 :  "TARGET_SSE2"
    4052                 :        5238 : {
    4053                 :        4248 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    4054                 :        5234 :   ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
    4055                 :      105361 :   emit_insn (gen_vec_extract<mode><ssescalarmodelower> (operands[0],
    4056                 :      100332 :                                                        tmp, const0_rtx));
    4057                 :      105361 :   DONE;
    4058                 :      100332 : })
    4059                 :      100332 : 
    4060                 :      100332 : (define_mode_iterator REDUC_ANY_LOGIC_MODE
    4061                 :      100332 :  [(V32QI "TARGET_AVX") (V16HI "TARGET_AVX")
    4062                 :      100328 :   (V8SI "TARGET_AVX")  (V4DI "TARGET_AVX")
    4063                 :          79 :   (V64QI "TARGET_AVX512F && TARGET_EVEX512")
    4064                 :          79 :   (V32HI "TARGET_AVX512F && TARGET_EVEX512")
    4065                 :          79 :   (V16SI "TARGET_AVX512F && TARGET_EVEX512")
    4066                 :       74653 :   (V8DI "TARGET_AVX512F && TARGET_EVEX512")])
    4067                 :          79 : 
    4068                 :          79 : (define_expand "reduc_<code>_scal_<mode>"
    4069                 :          79 :  [(any_logic:REDUC_ANY_LOGIC_MODE
    4070                 :       20718 :    (match_operand:<ssescalarmode> 0 "register_operand")
    4071                 :          79 :    (match_operand:REDUC_ANY_LOGIC_MODE 1 "register_operand"))]
    4072                 :          79 :  ""
    4073                 :         309 : {
    4074                 :       13918 :   rtx tmp = gen_reg_rtx (<ssehalfvecmode>mode);
    4075                 :         309 :   rtx tmp2 = gen_reg_rtx (<ssehalfvecmode>mode);
    4076                 :        1295 :   rtx tmp3 = gen_reg_rtx (<ssehalfvecmode>mode);
    4077                 :         309 :   emit_insn (gen_vec_extract_hi_<mode> (tmp, operands[1]));
    4078                 :         309 :   emit_insn (gen_vec_extract_lo_<mode> (tmp2, operands[1]));
    4079                 :         309 :   emit_insn (gen_<code><ssehalfvecmodelower>3 (tmp3, tmp, tmp2));
    4080                 :        1515 :   emit_insn (gen_reduc_<code>_scal_<ssehalfvecmodelower> (operands[0], tmp3));
    4081                 :         309 :   DONE;
    4082                 :        1286 : })
    4083                 :       15697 : 
    4084                 :       15697 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4085                 :       14491 : ;;
    4086                 :       14491 : ;; Parallel floating point comparisons
    4087                 :          80 : ;;
    4088                 :          80 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    4089                 :          80 : 
    4090                 :       14310 : (define_insn "avx_cmp<mode>3"
    4091                 :          80 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    4092                 :          80 :         (unspec:VF_128_256
    4093                 :          80 :           [(match_operand:VF_128_256 1 "register_operand" "0,x")
    4094                 :          80 :            (match_operand:VF_128_256 2 "nonimmediate_operand" "xm,xjm")
    4095                 :          80 :            (match_operand:SI 3 "cmpps_imm_operand")]
    4096                 :          80 :           UNSPEC_PCMP))]
    4097                 :         546 :   "TARGET_SSE"
    4098                 :          80 :   "@
    4099                 :       66887 :   cmp<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    4100                 :       66897 :   vcmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4101                 :       67819 :   [(set_attr "isa" "noavx,avx")
    4102                 :         979 :    (set_attr "type" "ssecmp")
    4103                 :        1022 :    (set_attr "addr" "*,gpr16")
    4104                 :          89 :    (set_attr "length_immediate" "1")
    4105                 :       54637 :    (set_attr "prefix" "orig,vex")
    4106                 :         122 :    (set_attr "mode" "<MODE>")])
    4107                 :         122 : 
    4108                 :          89 : (define_insn_and_split "*avx_cmp<mode>3_1"
    4109                 :       54627 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4110                 :         112 :         (vec_merge:<sseintvecmode>
    4111                 :         106 :           (match_operand:<sseintvecmode> 1 "vector_all_ones_operand")
    4112                 :         112 :           (match_operand:<sseintvecmode> 2 "const0_operand")
    4113                 :          85 :           (unspec:<avx512fmaskmode>
    4114                 :         112 :             [(match_operand:VF_128_256 3 "register_operand")
    4115                 :          85 :              (match_operand:VF_128_256 4 "nonimmediate_operand")
    4116                 :          85 :              (match_operand:SI 5 "const_0_to_31_operand")]
    4117                 :          85 :              UNSPEC_PCMP)))]
    4118                 :      865674 :   "TARGET_AVX512VL && ix86_pre_reload_split ()"
    4119                 :      865566 :   "#"
    4120                 :      865566 :   "&& 1"
    4121                 :      865593 :   [(set (match_dup 6)
    4122                 :      865584 :         (unspec:VF_128_256
    4123                 :      865586 :           [(match_dup 3)
    4124                 :      865589 :            (match_dup 4)
    4125                 :      865589 :            (match_dup 5)]
    4126                 :      865562 :           UNSPEC_PCMP))
    4127                 :      865562 :    (set (match_dup 0) (match_dup 7))]
    4128                 :      865589 : {
    4129                 :      865675 :   operands[6] = gen_reg_rtx (<MODE>mode);
    4130                 :      865675 :   operands[7]
    4131                 :      865675 :     = lowpart_subreg (GET_MODE (operands[0]), operands[6], <MODE>mode);
    4132                 :      865654 : })
    4133                 :      865654 : 
    4134                 :      865654 : (define_insn_and_split "*avx_cmp<mode>3_2"
    4135                 :      865673 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4136                 :      865587 :         (vec_merge:<sseintvecmode>
    4137                 :      865587 :           (match_operand:<sseintvecmode> 1 "vector_all_ones_operand")
    4138                 :      865587 :           (match_operand:<sseintvecmode> 2 "const0_operand")
    4139                 :      865587 :           (not:<avx512fmaskmode>
    4140                 :      865587 :             (unspec:<avx512fmaskmode>
    4141                 :         106 :               [(match_operand:VF_128_256 3 "register_operand")
    4142                 :         106 :                (match_operand:VF_128_256 4 "nonimmediate_operand")
    4143                 :         122 :                (match_operand:SI 5 "const_0_to_31_operand")]
    4144                 :         122 :                UNSPEC_PCMP))))]
    4145                 :         122 :   "TARGET_AVX512VL && ix86_pre_reload_split ()"
    4146                 :         122 :   "#"
    4147                 :         106 :   "&& 1"
    4148                 :         106 :   [(set (match_dup 6)
    4149                 :         185 :         (unspec:VF_128_256
    4150                 :         185 :           [(match_dup 3)
    4151                 :         185 :            (match_dup 4)
    4152                 :         158 :            (match_dup 5)]
    4153                 :         158 :           UNSPEC_PCMP))
    4154                 :         158 :    (set (match_dup 0) (match_dup 7))]
    4155                 :          79 : {
    4156                 :          79 :   operands[5] = GEN_INT (INTVAL (operands[5]) ^ 4);
    4157                 :          79 :   operands[6] = gen_reg_rtx (<MODE>mode);
    4158                 :         168 :   operands[7]
    4159                 :          79 :     = lowpart_subreg (GET_MODE (operands[0]), operands[6], <MODE>mode);
    4160                 :          30 : })
    4161                 :          30 : 
    4162                 :         103 : (define_insn_and_split "*avx_cmp<mode>3_3"
    4163                 :          76 :   [(set (match_operand:VF_128_256 0 "register_operand")
    4164                 :          76 :         (vec_merge:VF_128_256
    4165                 :          76 :           (match_operand:VF_128_256 1 "float_vector_all_ones_operand")
    4166                 :          76 :           (match_operand:VF_128_256 2 "const0_operand")
    4167                 :       10739 :           (unspec:<avx512fmaskmode>
    4168                 :       10745 :             [(match_operand:VF_128_256 3 "register_operand")
    4169                 :       10739 :              (match_operand:VF_128_256 4 "nonimmediate_operand")
    4170                 :       10745 :              (match_operand:SI 5 "const_0_to_31_operand")]
    4171                 :       10745 :              UNSPEC_PCMP)))]
    4172                 :       10769 :   "TARGET_AVX512VL && ix86_pre_reload_split ()"
    4173                 :       10745 :   "#"
    4174                 :       10745 :   "&& 1"
    4175                 :       10745 :   [(set (match_dup 0)
    4176                 :       10757 :         (unspec:VF_128_256
    4177                 :       10751 :           [(match_dup 3)
    4178                 :          85 :            (match_dup 4)
    4179                 :         100 :            (match_dup 5)]
    4180                 :          82 :           UNSPEC_PCMP))])
    4181                 :          82 : 
    4182                 :           6 : (define_insn_and_split "*avx_cmp<mode>3_4"
    4183                 :           6 :   [(set (match_operand:VF_128_256 0 "register_operand")
    4184                 :           6 :         (vec_merge:VF_128_256
    4185                 :           6 :           (match_operand:VF_128_256 1 "float_vector_all_ones_operand")
    4186                 :      528141 :           (match_operand:VF_128_256 2 "const0_operand")
    4187                 :      528141 :           (not:<avx512fmaskmode>
    4188                 :      528141 :             (unspec:<avx512fmaskmode>
    4189                 :           6 :               [(match_operand:VF_128_256 3 "register_operand")
    4190                 :           6 :                (match_operand:VF_128_256 4 "nonimmediate_operand")
    4191                 :           6 :                (match_operand:SI 5 "const_0_to_31_operand")]
    4192                 :      525532 :                UNSPEC_PCMP))))]
    4193                 :           0 :   "TARGET_AVX512VL && ix86_pre_reload_split ()"
    4194                 :           0 :   "#"
    4195                 :             :   "&& 1"
    4196                 :      525562 :   [(set (match_dup 0)
    4197                 :           0 :         (unspec:VF_128_256
    4198                 :          42 :           [(match_dup 3)
    4199                 :          48 :            (match_dup 4)
    4200                 :          48 :            (match_dup 5)]
    4201                 :          48 :           UNSPEC_PCMP))]
    4202                 :          42 :   "operands[5] = GEN_INT (INTVAL (operands[5]) ^ 4);")
    4203                 :      310757 : 
    4204                 :      310757 : (define_insn_and_split "*avx_cmp<mode>3_lt"
    4205                 :      311349 :  [(set (match_operand:VF_128_256  0 "register_operand")
    4206                 :         676 :         (vec_merge:VF_128_256
    4207                 :        2167 :           (match_operand:VF_128_256 1 "vector_operand")
    4208                 :        2157 :           (match_operand:VF_128_256 2 "vector_operand")
    4209                 :        2167 :           (unspec:<avx512fmaskmode>
    4210                 :        2167 :             [(match_operand:<sseintvecmode> 3 "register_operand")
    4211                 :         644 :              (match_operand:<sseintvecmode> 4 "const0_operand")
    4212                 :        1801 :              (match_operand:SI 5 "const_0_to_7_operand")]
    4213                 :        1801 :              UNSPEC_PCMP)))]
    4214                 :         728 :   "TARGET_AVX512VL && ix86_pre_reload_split ()
    4215                 :        1791 :   /* LT or GE 0 */
    4216                 :        1896 :   && ((INTVAL (operands[5]) == 1) || (INTVAL (operands[5]) == 5))"
    4217                 :         644 :   "#"
    4218                 :         646 :   "&& 1"
    4219                 :         676 :   [(set (match_dup 0)
    4220                 :          18 :         (unspec:VF_128_256
    4221                 :          18 :           [(match_dup 2)
    4222                 :          36 :            (match_dup 1)
    4223                 :          32 :            (lt:VF_128_256
    4224                 :           0 :              (match_dup 3)
    4225                 :          14 :              (match_dup 4))]
    4226                 :          14 :             UNSPEC_BLENDV))]
    4227                 :          56 : {
    4228                 :     1470844 :   if (INTVAL (operands[5]) == 5)
    4229                 :     1470812 :     std::swap (operands[1], operands[2]);
    4230                 :     1470844 :   operands[2] = force_reg (<MODE>mode, operands[2]);
    4231                 :     1470802 : })
    4232                 :     1470824 : 
    4233                 :     1470802 : (define_insn_and_split "*avx_cmp<mode>3_ltint"
    4234                 :     1470866 :  [(set (match_operand:VI48_AVX  0 "register_operand")
    4235                 :     1470866 :         (vec_merge:VI48_AVX
    4236                 :     1470866 :           (match_operand:VI48_AVX 1 "vector_operand")
    4237                 :     1470866 :           (match_operand:VI48_AVX 2 "vector_operand")
    4238                 :     1470866 :           (unspec:<avx512fmaskmode>
    4239                 :     1470866 :             [(match_operand:VI48_AVX 3 "register_operand")
    4240                 :     1470866 :              (match_operand:VI48_AVX 4 "const0_operand")
    4241                 :     1470844 :              (match_operand:SI 5 "const_0_to_7_operand")]
    4242                 :     1470866 :              UNSPEC_PCMP)))]
    4243                 :     1470903 :   "TARGET_AVX512VL && ix86_pre_reload_split ()
    4244                 :     1470830 :   /* LT or GE 0 */
    4245                 :     1470899 :   && ((INTVAL (operands[5]) == 1) || (INTVAL (operands[5]) == 5))"
    4246                 :     1470788 :   "#"
    4247                 :     1470788 :   "&& 1"
    4248                 :     1470808 :   [(set (match_dup 0)
    4249                 :     1470807 :         (unspec:<ssebytemode>
    4250                 :     1470807 :           [(match_dup 2)
    4251                 :     1470876 :            (match_dup 1)
    4252                 :     1470867 :            (subreg:<ssebytemode>
    4253                 :     1470893 :              (lt:VI48_AVX
    4254                 :     1470893 :               (match_dup 3)
    4255                 :     1470830 :               (match_dup 4)) 0)]
    4256                 :     1470788 :             UNSPEC_BLENDV))]
    4257                 :     1470808 : {
    4258                 :     1470808 :   if (INTVAL (operands[5]) == 5)
    4259                 :     1470800 :     std::swap (operands[1], operands[2]);
    4260                 :     1470808 :   operands[0] = gen_lowpart (<ssebytemode>mode, operands[0]);
    4261                 :     1470810 :   operands[1] = gen_lowpart (<ssebytemode>mode, operands[1]);
    4262                 :     1470808 :   operands[2] = force_reg (<ssebytemode>mode,
    4263                 :     1470810 :                           gen_lowpart (<ssebytemode>mode, operands[2]));
    4264                 :     1470790 : })
    4265                 :     1470790 : 
    4266                 :     1470790 : (define_insn_and_split "*avx_cmp<mode>3_ltint_not"
    4267                 :     1470810 :  [(set (match_operand:VI48_AVX  0 "register_operand")
    4268                 :     1470810 :        (vec_merge:VI48_AVX
    4269                 :     1470810 :          (match_operand:VI48_AVX 1 "vector_operand")
    4270                 :     1470810 :          (match_operand:VI48_AVX 2 "vector_operand")
    4271                 :     1470808 :          (unspec:<avx512fmaskmode>
    4272                 :     1470810 :            [(subreg:VI48_AVX
    4273                 :     1470808 :             (not:<ssebytemode>
    4274                 :     1470808 :               (match_operand:<ssebytemode> 3 "vector_operand")) 0)
    4275                 :     1470808 :             (match_operand:VI48_AVX 4 "const0_operand")
    4276                 :     1470808 :             (match_operand:SI 5 "const_0_to_7_operand")]
    4277                 :     1470808 :             UNSPEC_PCMP)))]
    4278                 :     1470812 :   "TARGET_AVX512VL && ix86_pre_reload_split ()
    4279                 :     1470788 :   /* not LT or GE 0 */
    4280                 :     1470800 :   && ((INTVAL (operands[5]) == 1) || (INTVAL (operands[5]) == 5))"
    4281                 :     1470788 :   "#"
    4282                 :     1470788 :   "&& 1"
    4283                 :     1470788 :   [(set (match_dup 0)
    4284                 :     1470800 :         (unspec:<ssebytemode>
    4285                 :     1470788 :           [(match_dup 1)
    4286                 :     1470791 :            (match_dup 2)
    4287                 :     1470791 :            (subreg:<ssebytemode>
    4288                 :     1470808 :              (lt:VI48_AVX
    4289                 :     1470808 :               (match_dup 3)
    4290                 :     1470808 :               (match_dup 4)) 0)]
    4291                 :     1470788 :             UNSPEC_BLENDV))]
    4292                 :     1470800 : {
    4293                 :     1470800 :   if (INTVAL (operands[5]) == 5)
    4294                 :     1470794 :     std::swap (operands[1], operands[2]);
    4295                 :     1470800 :   operands[0] = gen_lowpart (<ssebytemode>mode, operands[0]);
    4296                 :     1470808 :   operands[1] = force_reg (<ssebytemode>mode,
    4297                 :     1470800 :                           gen_lowpart (<ssebytemode>mode, operands[1]));
    4298                 :     1470808 :   operands[2] = gen_lowpart (<ssebytemode>mode, operands[2]);
    4299                 :     1470796 : 
    4300                 :     1470808 :   operands[3] = force_reg (<ssebytemode>mode, operands[3]);
    4301                 :     1470808 :   operands[3] = lowpart_subreg (<MODE>mode, operands[3], <ssebytemode>mode);
    4302                 :     1470796 : })
    4303                 :     1470796 : 
    4304                 :     1470796 : (define_insn "avx_vmcmp<mode>3"
    4305                 :     1470808 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    4306                 :     1470800 :         (vec_merge:VF_128
    4307                 :     1470808 :           (unspec:VF_128
    4308                 :     1470800 :             [(match_operand:VF_128 1 "register_operand" "0,x")
    4309                 :     1470800 :              (match_operand:VF_128 2 "nonimmediate_operand" "xm,xjm")
    4310                 :     1470800 :              (match_operand:SI 3 "cmpps_imm_operand")]
    4311                 :     1470800 :             UNSPEC_PCMP)
    4312                 :     1470800 :          (match_dup 1)
    4313                 :     1470800 :          (const_int 1)))]
    4314                 :     1471308 :   "TARGET_SSE"
    4315                 :     1470800 :   "@
    4316                 :     1470788 :   cmp<ssescalarmodesuffix>\t{%3, %2, %0|%0, %<iptr>2, %3}
    4317                 :     1470788 :   vcmp<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %3}"
    4318                 :     1471304 :   [(set_attr "isa" "noavx,avx")
    4319                 :     1471304 :    (set_attr "type" "ssecmp")
    4320                 :     1470788 :    (set_attr "addr" "*,gpr16")
    4321                 :     1470788 :    (set_attr "length_immediate" "1")
    4322                 :     1470788 :    (set_attr "prefix" "orig,vex")
    4323                 :     1470788 :    (set_attr "mode" "<ssescalarmode>")])
    4324                 :     1470788 : 
    4325                 :     1470788 : (define_insn "*<sse>_maskcmp<mode>3_comm"
    4326                 :     1470800 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    4327                 :     1470800 :         (match_operator:VF_128_256 3 "sse_comparison_operator"
    4328                 :     1470800 :           [(match_operand:VF_128_256 1 "register_operand" "%0,x")
    4329                 :     1470788 :            (match_operand:VF_128_256 2 "vector_operand" "xBm,xjm")]))]
    4330                 :     1530735 :   "TARGET_SSE
    4331                 :     1541100 :    && GET_RTX_CLASS (GET_CODE (operands[3])) == RTX_COMM_COMPARE"
    4332                 :     1470788 :   "@
    4333                 :     1480289 :    cmp%D3<ssemodesuffix>\t{%2, %0|%0, %2}
    4334                 :     1470794 :    vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    4335                 :     1470788 :   [(set_attr "isa" "noavx,avx")
    4336                 :     1470794 :    (set_attr "addr" "*,gpr16")
    4337                 :     1470794 :    (set_attr "type" "ssecmp")
    4338                 :     1470795 :    (set_attr "length_immediate" "1")
    4339                 :     1470795 :    (set_attr "prefix" "orig,vex")
    4340                 :     1470795 :    (set_attr "mode" "<MODE>")])
    4341                 :     1470795 : 
    4342                 :     1470795 : (define_insn "<sse>_maskcmp<mode>3"
    4343                 :     1470795 :   [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
    4344                 :     1470788 :         (match_operator:VF_128_256 3 "sse_comparison_operator"
    4345                 :     1470794 :           [(match_operand:VF_128_256 1 "register_operand" "0,x")
    4346                 :     1470789 :            (match_operand:VF_128_256 2 "vector_operand" "xBm,xjm")]))]
    4347                 :     1470789 :   "TARGET_SSE"
    4348                 :     1470789 :   "@
    4349                 :     1470788 :    cmp%D3<ssemodesuffix>\t{%2, %0|%0, %2}
    4350                 :     1470789 :    vcmp%D3<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
    4351                 :     1470789 :   [(set_attr "isa" "noavx,avx")
    4352                 :     1473178 :    (set_attr "addr" "*,gpr16")
    4353                 :     1473178 :    (set_attr "type" "ssecmp")
    4354                 :     1470789 :    (set_attr "length_immediate" "1")
    4355                 :     1472333 :    (set_attr "prefix" "orig,vex")
    4356                 :     1470788 :    (set_attr "mode" "<MODE>")])
    4357                 :     1470788 : 
    4358                 :     1470801 : (define_insn "<sse>_vmmaskcmp<mode>3"
    4359                 :     1470788 :   [(set (match_operand:VF_128 0 "register_operand" "=x,x")
    4360                 :     1470801 :         (vec_merge:VF_128
    4361                 :     1470801 :          (match_operator:VF_128 3 "sse_comparison_operator"
    4362                 :     1470801 :            [(match_operand:VF_128 1 "register_operand" "0,x")
    4363                 :     1470801 :             (match_operand:VF_128 2 "nonimmediate_operand" "xm,xjm")])
    4364                 :     1470801 :          (match_dup 1)
    4365                 :     1470788 :          (const_int 1)))]
    4366                 :     1471867 :   "TARGET_SSE"
    4367                 :     1470801 :   "@
    4368                 :     1470801 :    cmp%D3<ssescalarmodesuffix>\t{%2, %0|%0, %<iptr>2}
    4369                 :     1470788 :    vcmp%D3<ssescalarmodesuffix>\t{%2, %1, %0|%0, %1, %<iptr>2}"
    4370                 :     1472021 :   [(set_attr "isa" "noavx,avx")
    4371                 :     1472034 :    (set_attr "addr" "*,gpr16")
    4372                 :     1472034 :    (set_attr "type" "ssecmp")
    4373                 :     1470801 :    (set_attr "length_immediate" "1,*")
    4374                 :     1470801 :    (set_attr "prefix" "orig,vex")
    4375                 :     1470801 :    (set_attr "mode" "<ssescalarmode>")])
    4376                 :     1470788 : 
    4377                 :     1470788 : (define_mode_attr cmp_imm_predicate
    4378                 :     1470788 :   [(V32HF "const_0_to_31_operand") (V16SF "const_0_to_31_operand") (V8DF "const_0_to_31_operand")
    4379                 :     1470788 :    (V16SI "const_0_to_7_operand")   (V8DI "const_0_to_7_operand")
    4380                 :     1470788 :    (V16HF "const_0_to_31_operand") (V8SF "const_0_to_31_operand") (V4DF "const_0_to_31_operand")
    4381                 :     1470788 :    (V8SI "const_0_to_7_operand")    (V4DI "const_0_to_7_operand")
    4382                 :     1470788 :    (V8HF "const_0_to_31_operand") (V4SF "const_0_to_31_operand") (V2DF "const_0_to_31_operand")
    4383                 :     1470789 :    (V4SI "const_0_to_7_operand")    (V2DI "const_0_to_7_operand")
    4384                 :     1470789 :    (V32HI "const_0_to_7_operand")   (V64QI "const_0_to_7_operand")
    4385                 :     1470788 :    (V16HI "const_0_to_7_operand")   (V32QI "const_0_to_7_operand")
    4386                 :     1470789 :    (V8HI "const_0_to_7_operand")    (V16QI "const_0_to_7_operand")])
    4387                 :     1470789 : 
    4388                 :     1470872 : (define_insn "<avx512>_cmp<mode>3<mask_scalar_merge_name><round_saeonly_name>"
    4389                 :     1470872 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4390                 :     1470872 :         (unspec:<avx512fmaskmode>
    4391                 :     1470872 :           [(match_operand:V48H_AVX512VL 1 "register_operand" "v")
    4392                 :     1470872 :            (match_operand:V48H_AVX512VL 2 "nonimmediate_operand" "<round_saeonly_constraint>")
    4393                 :     1470789 :            (match_operand:SI 3 "<cmp_imm_predicate>" "n")]
    4394                 :     1470789 :           UNSPEC_PCMP))]
    4395                 :     1530278 :   "TARGET_AVX512F && <round_saeonly_mode_condition>"
    4396                 :     1470871 :   "v<ssecmpintprefix>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}"
    4397                 :     1470871 :   [(set_attr "type" "ssecmp")
    4398                 :     1470788 :    (set_attr "length_immediate" "1")
    4399                 :     1470871 :    (set_attr "prefix" "evex")
    4400                 :     1470871 :    (set_attr "mode" "<sseinsnmode>")])
    4401                 :     1471401 : 
    4402                 :     1470871 : ;; Since vpcmpd implicitly clear the upper bits of dest, transform
    4403                 :     1470871 : ;; vpcmpd + zero_extend to vpcmpd since the instruction
    4404                 :     1470788 : (define_insn "*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
    4405                 :     1470871 :   [(set (match_operand:SWI248x 0 "register_operand" "=k")
    4406                 :     1470871 :         (zero_extend:SWI248x
    4407                 :     1474423 :           (unspec:<V48H_AVX512VL:avx512fmaskmode>
    4408                 :     1470884 :             [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand" "v")
    4409                 :     1470884 :              (match_operand:V48H_AVX512VL 2 "nonimmediate_operand" "vm")
    4410                 :     1470884 :              (match_operand:SI 3 "const_0_to_7_operand" "n")]
    4411                 :     1470884 :             UNSPEC_PCMP)))]
    4412                 :     1470908 :   "TARGET_AVX512F
    4413                 :     1471183 :    && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
    4414                 :     1471204 :    && (GET_MODE_NUNITS (<V48H_AVX512VL:MODE>mode)
    4415                 :     1471204 :       < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
    4416                 :     1470884 :   "v<ssecmpintprefix>cmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4417                 :     1470884 :   [(set_attr "type" "ssecmp")
    4418                 :     1470884 :    (set_attr "length_immediate" "1")
    4419                 :     1470884 :    (set_attr "prefix" "evex")
    4420                 :     1470884 :    (set_attr "mode" "<V48H_AVX512VL:sseinsnmode>")])
    4421                 :     1470884 : 
    4422                 :     1470884 : (define_insn_and_split "*<avx512>_cmp<V48H_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2"
    4423                 :     1470884 :   [(set (match_operand:SWI248x 0 "register_operand")
    4424                 :     1470884 :         (zero_extend:SWI248x
    4425                 :     1470884 :           (unspec:<V48H_AVX512VL:avx512fmaskmode>
    4426                 :     1470884 :             [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand")
    4427                 :     1470884 :              (match_operand:V48H_AVX512VL 2 "nonimmediate_operand")
    4428                 :     1470884 :              (match_operand:SI 3 "const_0_to_7_operand")]
    4429                 :     1470884 :             UNSPEC_PCMP)))
    4430                 :     1470884 :    (set (match_operand:<V48H_AVX512VL:avx512fmaskmode> 4 "register_operand")
    4431                 :     1470884 :         (unspec:<V48H_AVX512VL:avx512fmaskmode>
    4432                 :     1470884 :             [(match_dup 1)
    4433                 :     1470884 :              (match_dup 2)
    4434                 :     1470884 :              (match_dup 3)]
    4435                 :     1470884 :             UNSPEC_PCMP))]
    4436                 :          96 :   "TARGET_AVX512F
    4437                 :         253 :    && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
    4438                 :         333 :    && (GET_MODE_NUNITS (<V48H_AVX512VL:MODE>mode)
    4439                 :         333 :        < GET_MODE_PRECISION (<SWI248x:MODE>mode))
    4440                 :         333 :    && ix86_pre_reload_split ()"
    4441                 :          96 :   "#"
    4442                 :          96 :   "&& 1"
    4443                 :          96 :   [(set (match_dup 0)
    4444                 :      304428 :     (zero_extend:SWI248x
    4445                 :      304348 :           (unspec:<V48H_AVX512VL:avx512fmaskmode>
    4446                 :      304428 :             [(match_dup 1)
    4447                 :      304496 :              (match_dup 2)
    4448                 :      304348 :              (match_dup 3)]
    4449                 :      304348 :             UNSPEC_PCMP)))
    4450                 :      304348 :    (set (match_dup 4) (match_dup 5))]
    4451                 :      304428 : {
    4452                 :      304428 :   operands[5] = lowpart_subreg (<V48H_AVX512VL:avx512fmaskmode>mode,
    4453                 :      304348 :                                 operands[0], <SWI248x:MODE>mode);
    4454                 :      304428 :   if (SUBREG_P (operands[5]))
    4455                 :      304348 :     {
    4456                 :      304428 :       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
    4457                 :      304428 :       SUBREG_PROMOTED_SET (operands[5], 1);
    4458                 :      304348 :     }
    4459                 :      304348 : })
    4460                 :      304348 : 
    4461                 :      304348 : (define_insn_and_split "*<avx512>_cmp<mode>3"
    4462                 :      304428 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4463                 :      304428 :         (not:<avx512fmaskmode>
    4464                 :      304428 :           (unspec:<avx512fmaskmode>
    4465                 :      304428 :             [(match_operand:V48H_AVX512VL 1 "register_operand")
    4466                 :      304428 :              (match_operand:V48H_AVX512VL 2 "nonimmediate_operand")
    4467                 :      304428 :              (match_operand:SI 3 "<cmp_imm_predicate>" "n")]
    4468                 :      304428 :             UNSPEC_PCMP)))]
    4469                 :      304644 :   "TARGET_AVX512F && ix86_pre_reload_split ()"
    4470                 :      304428 :   "#"
    4471                 :      304428 :   "&& 1"
    4472                 :      304428 :   [(set (match_dup 0)
    4473                 :      304452 :         (unspec:<avx512fmaskmode>
    4474                 :      304428 :           [(match_dup 1)
    4475                 :      304369 :            (match_dup 2)
    4476                 :      304387 :            (match_dup 4)]
    4477                 :      304348 :            UNSPEC_PCMP))]
    4478                 :      304372 :   "operands[4] = GEN_INT (INTVAL (operands[3]) ^ 4);")
    4479                 :      304348 : 
    4480                 :      304348 : (define_insn "<avx512>_cmp<mode>3<mask_scalar_merge_name>"
    4481                 :      304372 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4482                 :      304428 :         (unspec:<avx512fmaskmode>
    4483                 :      304372 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    4484                 :      304428 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    4485                 :      304428 :            (match_operand:SI 3 "<cmp_imm_predicate>" "n")]
    4486                 :      304452 :           UNSPEC_PCMP))]
    4487                 :      318077 :   "TARGET_AVX512BW"
    4488                 :      304372 :   "vpcmp<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    4489                 :      304372 :   [(set_attr "type" "ssecmp")
    4490                 :      304372 :    (set_attr "length_immediate" "1")
    4491                 :         120 :    (set_attr "prefix" "evex")
    4492                 :         176 :    (set_attr "mode" "<sseinsnmode>")])
    4493                 :          96 : 
    4494                 :       30276 : (define_insn "*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
    4495                 :         176 :   [(set (match_operand:SWI248x 0 "register_operand" "=k")
    4496                 :         176 :         (zero_extend:SWI248x
    4497                 :         176 :           (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4498                 :         120 :             [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v")
    4499                 :         120 :              (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    4500                 :         112 :              (match_operand:SI 3 "const_0_to_7_operand" "n")]
    4501                 :         160 :             UNSPEC_PCMP)))]
    4502                 :         178 :   "TARGET_AVX512BW
    4503                 :      581646 :    && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
    4504                 :      581582 :        < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
    4505                 :      581516 :   "vpcmp<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4506                 :      581530 :   [(set_attr "type" "ssecmp")
    4507                 :      581516 :    (set_attr "length_immediate" "1")
    4508                 :      581530 :    (set_attr "prefix" "evex")
    4509                 :      581530 :    (set_attr "mode" "<VI12_AVX512VL:sseinsnmode>")])
    4510                 :      581530 : 
    4511                 :      581530 : (define_insn_and_split "*<avx512>_cmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2"
    4512                 :      581530 :   [(set (match_operand:SWI248x 0 "register_operand")
    4513                 :      581530 :         (zero_extend:SWI248x
    4514                 :      581524 :           (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4515                 :      581522 :             [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
    4516                 :      581524 :              (match_operand:VI12_AVX512VL 2 "nonimmediate_operand")
    4517                 :      581522 :              (match_operand:SI 3 "const_0_to_7_operand")]
    4518                 :      581516 :             UNSPEC_PCMP)))
    4519                 :      581516 :    (set (match_operand:<VI12_AVX512VL:avx512fmaskmode> 4 "register_operand")
    4520                 :      581516 :         (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4521                 :      581516 :             [(match_dup 1)
    4522                 :      581516 :              (match_dup 2)
    4523                 :      581516 :              (match_dup 3)]
    4524                 :      581516 :             UNSPEC_PCMP))]
    4525                 :      581558 :   "TARGET_AVX512BW
    4526                 :      581564 :   && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
    4527                 :      581564 :       < GET_MODE_PRECISION (<SWI248x:MODE>mode))
    4528                 :      581564 :   && ix86_pre_reload_split ()"
    4529                 :      581516 :   "#"
    4530                 :      581516 :   "&& 1"
    4531                 :      581516 :   [(set (match_dup 0)
    4532                 :      581534 :         (zero_extend:SWI248x
    4533                 :      581516 :           (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4534                 :      581534 :            [(match_dup 1)
    4535                 :      581552 :                 (match_dup 2)
    4536                 :      581516 :                 (match_dup 3)]
    4537                 :      581516 :            UNSPEC_PCMP)))
    4538                 :      581516 :    (set (match_dup 4) (match_dup 5))]
    4539                 :      581534 : {
    4540                 :      581534 :   operands[5] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
    4541                 :      581516 :                                 operands[0], <SWI248x:MODE>mode);
    4542                 :      581534 :   if (SUBREG_P (operands[5]))
    4543                 :      581516 :     {
    4544                 :      581534 :       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
    4545                 :      581534 :       SUBREG_PROMOTED_SET (operands[5], 1);
    4546                 :      581516 :     }
    4547                 :      581516 : }
    4548                 :      581516 :   [(set_attr "type" "ssecmp")
    4549                 :      581516 :    (set_attr "length_immediate" "1")
    4550                 :      581534 :    (set_attr "prefix" "evex")
    4551                 :      581534 :    (set_attr "mode" "<VI12_AVX512VL:sseinsnmode>")])
    4552                 :      581534 : 
    4553                 :      581534 : (define_int_iterator UNSPEC_PCMP_ITER
    4554                 :      581534 :   [UNSPEC_PCMP UNSPEC_UNSIGNED_PCMP])
    4555                 :      581534 : 
    4556                 :      581534 : (define_insn_and_split "*<avx512>_cmp<mode>3"
    4557                 :      581534 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4558                 :      581534 :         (not:<avx512fmaskmode>
    4559                 :      581534 :           (unspec:<avx512fmaskmode>
    4560                 :      581534 :             [(match_operand:VI12_AVX512VL 1 "register_operand")
    4561                 :      581534 :              (match_operand:VI12_AVX512VL 2 "nonimmediate_operand")
    4562                 :      581534 :              (match_operand:SI 3 "<cmp_imm_predicate>")]
    4563                 :      581516 :             UNSPEC_PCMP_ITER)))]
    4564                 :      581586 :   "TARGET_AVX512BW && ix86_pre_reload_split ()"
    4565                 :      581516 :   "#"
    4566                 :      581516 :   "&& 1"
    4567                 :      581516 :   [(set (match_dup 0)
    4568                 :      581530 :         (unspec:<avx512fmaskmode>
    4569                 :      581516 :           [(match_dup 1)
    4570                 :      581540 :            (match_dup 2)
    4571                 :      581528 :            (match_dup 4)]
    4572                 :      581534 :            UNSPEC_PCMP_ITER))]
    4573                 :      581548 :   "operands[4] = GEN_INT (INTVAL (operands[3]) ^ 4);")
    4574                 :      581534 : 
    4575                 :      581546 : (define_insn "*<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
    4576                 :      581540 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k,k")
    4577                 :      581530 :         (unspec:<avx512fmaskmode>
    4578                 :         112 :           [(match_operand:VI12_AVX512VL 1 "nonimm_or_0_operand" "%v,v")
    4579                 :         110 :            (match_operand:VI12_AVX512VL 2 "nonimm_or_0_operand" "vm,C")
    4580                 :         135 :            (const_int 0)]
    4581                 :       57315 :           UNSPEC_PCMP_ITER))]
    4582                 :        1397 :   "TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    4583                 :         135 :   "@
    4584                 :         135 :    vpcmpeq<ssemodesuffix>\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}
    4585                 :         135 :    vptestnm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}"
    4586                 :         110 :   [(set_attr "type" "ssecmp")
    4587                 :         121 :    (set_attr "prefix" "evex")
    4588                 :         109 :    (set_attr "mode" "<sseinsnmode>")])
    4589                 :         108 : 
    4590                 :       62348 : (define_insn "<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    4591                 :       62347 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4592                 :       62335 :         (unspec:<avx512fmaskmode>
    4593                 :         110 :           [(match_operand:VI12_AVX512VL 1 "register_operand" "v")
    4594                 :         110 :            (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    4595                 :         110 :            (match_operand:SI 3 "const_0_to_7_operand")]
    4596                 :       61561 :           UNSPEC_UNSIGNED_PCMP))]
    4597                 :        3700 :   "TARGET_AVX512BW"
    4598                 :          96 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    4599                 :          96 :   [(set_attr "type" "ssecmp")
    4600                 :       61558 :    (set_attr "length_immediate" "1")
    4601                 :         103 :    (set_attr "prefix" "evex")
    4602                 :          96 :    (set_attr "mode" "<sseinsnmode>")])
    4603                 :         103 : 
    4604                 :         103 : (define_insn "*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
    4605                 :         103 :   [(set (match_operand:SWI248x 0 "register_operand" "=k")
    4606                 :         103 :         (zero_extend:SWI248x
    4607                 :         103 :           (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4608                 :         103 :             [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v")
    4609                 :      367853 :              (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")
    4610                 :      367854 :              (match_operand:SI 3 "const_0_to_7_operand" "n")]
    4611                 :      367849 :             UNSPEC_UNSIGNED_PCMP)))]
    4612                 :         169 :   "TARGET_AVX512BW
    4613                 :         163 :   && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
    4614                 :         163 :       < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
    4615                 :      366471 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4616                 :          96 :   [(set_attr "type" "ssecmp")
    4617                 :          96 :    (set_attr "length_immediate" "1")
    4618                 :          96 :    (set_attr "prefix" "evex")
    4619                 :      366468 :    (set_attr "mode" "<VI12_AVX512VL:sseinsnmode>")])
    4620                 :          96 : 
    4621                 :          96 : (define_insn_and_split "*<avx512>_ucmp<VI12_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2"
    4622                 :          96 :   [(set (match_operand:SWI248x 0 "register_operand")
    4623                 :         100 :         (zero_extend:SWI248x
    4624                 :          96 :           (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4625                 :          96 :             [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand")
    4626                 :          96 :              (match_operand:VI12_AVX512VL 2 "nonimmediate_operand")
    4627                 :          96 :              (match_operand:SI 3 "const_0_to_7_operand")]
    4628                 :          96 :             UNSPEC_UNSIGNED_PCMP)))
    4629                 :          96 :    (set (match_operand:<VI12_AVX512VL:avx512fmaskmode> 4 "register_operand")
    4630                 :          96 :         (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4631                 :          96 :             [(match_dup 1)
    4632                 :      423951 :              (match_dup 2)
    4633                 :      423951 :              (match_dup 3)]
    4634                 :      423951 :             UNSPEC_UNSIGNED_PCMP))]
    4635                 :         127 :   "TARGET_AVX512BW
    4636                 :         146 :    && ix86_pre_reload_split ()
    4637                 :         146 :    && (GET_MODE_NUNITS (<VI12_AVX512VL:MODE>mode)
    4638                 :        7381 :       < GET_MODE_PRECISION (<SWI248x:MODE>mode))
    4639                 :         146 :    && ix86_pre_reload_split ()"
    4640                 :          96 :   "#"
    4641                 :          96 :   "&& 1"
    4642                 :        1093 :   [(set (match_dup 0)
    4643                 :         115 :         (zero_extend:SWI248x
    4644                 :          96 :          (unspec:<VI12_AVX512VL:avx512fmaskmode>
    4645                 :         123 :            [(match_dup 1)
    4646                 :        1128 :                 (match_dup 2)
    4647                 :          96 :                 (match_dup 3)]
    4648                 :          96 :            UNSPEC_UNSIGNED_PCMP)))
    4649                 :          96 :    (set (match_dup 4) (match_dup 5))]
    4650                 :         115 : {
    4651                 :         115 :   operands[5] = lowpart_subreg (<VI12_AVX512VL:avx512fmaskmode>mode,
    4652                 :          96 :                                 operands[0], <SWI248x:MODE>mode);
    4653                 :         115 :   if (SUBREG_P (operands[5]))
    4654                 :          96 :     {
    4655                 :     2039388 :       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
    4656                 :     2039388 :       SUBREG_PROMOTED_SET (operands[5], 1);
    4657                 :     2039369 :     }
    4658                 :     2039369 : }
    4659                 :     2039369 :   [(set_attr "type" "ssecmp")
    4660                 :     2039369 :    (set_attr "length_immediate" "1")
    4661                 :     2039388 :    (set_attr "prefix" "evex")
    4662                 :     2039388 :    (set_attr "mode" "<VI12_AVX512VL:sseinsnmode>")])
    4663                 :     2039388 : 
    4664                 :     2039388 : (define_insn "*<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
    4665                 :     2039388 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k,k")
    4666                 :     2039388 :         (unspec:<avx512fmaskmode>
    4667                 :     2039388 :           [(match_operand:VI48_AVX512VL 1 "nonimm_or_0_operand" "%v,v")
    4668                 :     2039388 :            (match_operand:VI48_AVX512VL 2 "nonimm_or_0_operand" "vm,C")
    4669                 :     2039388 :            (const_int 0)]
    4670                 :     2039388 :           UNSPEC_PCMP_ITER))]
    4671                 :     2051859 :   "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    4672                 :     2039388 :   "@
    4673                 :     2039388 :    vpcmpeq<ssemodesuffix>\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}
    4674                 :     2039369 :    vptestnm<ssemodesuffix>\t{%1, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %1}"
    4675                 :     2039369 :   [(set_attr "type" "ssecmp")
    4676                 :     2039369 :    (set_attr "prefix" "evex")
    4677                 :     2039369 :    (set_attr "mode" "<sseinsnmode>")])
    4678                 :     2039369 : 
    4679                 :     2039369 : (define_insn "<avx512>_ucmp<mode>3<mask_scalar_merge_name>"
    4680                 :     2039369 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4681                 :     2039388 :         (unspec:<avx512fmaskmode>
    4682                 :     2039369 :           [(match_operand:VI48_AVX512VL 1 "register_operand" "v")
    4683                 :     2039388 :            (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")
    4684                 :     2039388 :            (match_operand:SI 3 "const_0_to_7_operand")]
    4685                 :     2039388 :           UNSPEC_UNSIGNED_PCMP))]
    4686                 :     2043120 :   "TARGET_AVX512F"
    4687                 :     2039369 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0<mask_scalar_merge_operand4>|%0<mask_scalar_merge_operand4>, %1, %2, %3}"
    4688                 :     2039369 :   [(set_attr "type" "ssecmp")
    4689                 :     2039369 :    (set_attr "length_immediate" "1")
    4690                 :     2039369 :    (set_attr "prefix" "evex")
    4691                 :     2039396 :    (set_attr "mode" "<sseinsnmode>")])
    4692                 :     2039369 : 
    4693                 :     2039396 : (define_insn "*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>"
    4694                 :     2039396 :   [(set (match_operand:SWI248x 0 "register_operand" "=k")
    4695                 :     2039396 :         (zero_extend:SWI248x
    4696                 :     2039396 :           (unspec:<VI48_AVX512VL:avx512fmaskmode>
    4697                 :     2039396 :             [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "v")
    4698                 :     2039396 :              (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")
    4699                 :     2039396 :              (match_operand:SI 3 "const_0_to_7_operand" "n")]
    4700                 :     2039396 :             UNSPEC_UNSIGNED_PCMP)))]
    4701                 :     2039369 :   "TARGET_AVX512F
    4702                 :     2039498 :    && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
    4703                 :     2039471 :    && (GET_MODE_NUNITS (<VI48_AVX512VL:MODE>mode)
    4704                 :     2039471 :       < GET_MODE_PRECISION (<SWI248x:MODE>mode))"
    4705                 :     2039369 :   "vpcmpu<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    4706                 :     2039369 :   [(set_attr "type" "ssecmp")
    4707                 :     2039369 :    (set_attr "length_immediate" "1")
    4708                 :     2039369 :    (set_attr "prefix" "evex")
    4709                 :     2039369 :    (set_attr "mode" "<VI48_AVX512VL:sseinsnmode>")])
    4710                 :     2039369 : 
    4711                 :     2039369 : (define_insn_and_split "*<avx512>_ucmp<VI48_AVX512VL:mode>3_zero_extend<SWI248x:mode>_2"
    4712                 :     2039369 :   [(set (match_operand:SWI248x 0 "register_operand")
    4713                 :     2039369 :         (zero_extend:SWI248x
    4714                 :     2039369 :           (unspec:<VI48_AVX512VL:avx512fmaskmode>
    4715                 :     2039369 :             [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand")
    4716                 :     2039369 :              (match_operand:VI48_AVX512VL 2 "nonimmediate_operand")
    4717                 :     2039369 :              (match_operand:SI 3 "const_0_to_7_operand")]
    4718                 :     2039369 :             UNSPEC_UNSIGNED_PCMP)))
    4719                 :     2039369 :    (set (match_operand:<VI48_AVX512VL:avx512fmaskmode> 4 "register_operand")
    4720                 :     2039369 :         (unspec:<VI48_AVX512VL:avx512fmaskmode>
    4721                 :     2039369 :             [(match_dup 1)
    4722                 :     2039369 :              (match_dup 2)
    4723                 :     2039369 :              (match_dup 3)]
    4724                 :     2039369 :             UNSPEC_UNSIGNED_PCMP))]
    4725                 :     2039369 :   "TARGET_AVX512F
    4726                 :     2039447 :    && (!VALID_MASK_AVX512BW_MODE (<SWI248x:MODE>mode) || TARGET_AVX512BW)
    4727                 :     2039471 :    && (GET_MODE_NUNITS (<VI48_AVX512VL:MODE>mode)
    4728                 :     2039471 :        < GET_MODE_PRECISION (<SWI248x:MODE>mode))
    4729                 :     2039471 :    && ix86_pre_reload_split ()"
    4730                 :     2039369 :   "#"
    4731                 :     2039369 :   "&& 1"
    4732                 :     2039369 :   [(set (match_dup 0)
    4733                 :     2039403 :         (zero_extend:SWI248x
    4734                 :     2039369 :          (unspec:<VI48_AVX512VL:avx512fmaskmode>
    4735                 :     2039395 :            [(match_dup 1)
    4736                 :     2039421 :                 (match_dup 2)
    4737                 :     2039369 :                 (match_dup 3)]
    4738                 :     2039369 :            UNSPEC_UNSIGNED_PCMP)))
    4739                 :     2039369 :    (set (match_dup 4) (match_dup 5))]
    4740                 :     2039403 : {
    4741                 :     2039403 :   operands[5] = lowpart_subreg (<VI48_AVX512VL:avx512fmaskmode>mode,
    4742                 :     2039369 :                                 operands[0], <SWI248x:MODE>mode);
    4743                 :     2039403 :   if (SUBREG_P (operands[5]))
    4744                 :     2039369 :     {
    4745                 :     2193703 :       SUBREG_PROMOTED_VAR_P (operands[5]) = 1;
    4746                 :     2039403 :       SUBREG_PROMOTED_SET (operands[5], 1);
    4747                 :     2193669 :     }
    4748                 :     2193669 : }
    4749                 :     2193669 :   [(set_attr "type" "ssecmp")
    4750                 :     2193669 :    (set_attr "length_immediate" "1")
    4751                 :     2193703 :    (set_attr "prefix" "evex")
    4752                 :     2193703 :    (set_attr "mode" "<VI48_AVX512VL:sseinsnmode>")])
    4753                 :     2193703 : 
    4754                 :     2193703 : (define_insn_and_split "*<avx512>_ucmp<mode>3"
    4755                 :     2193703 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4756                 :     2039403 :         (not:<avx512fmaskmode>
    4757                 :     2162776 :           (unspec:<avx512fmaskmode>
    4758                 :     2162776 :             [(match_operand:VI48_AVX512VL 1 "register_operand")
    4759                 :     2162776 :              (match_operand:VI48_AVX512VL 2 "nonimmediate_operand")
    4760                 :     2162776 :              (match_operand:SI 3 "const_0_to_7_operand")]
    4761                 :     2162776 :             UNSPEC_UNSIGNED_PCMP)))]
    4762                 :     2162778 :   "TARGET_AVX512F && ix86_pre_reload_split ()"
    4763                 :     2039403 :   "#"
    4764                 :     2159267 :   "&& 1"
    4765                 :     2039369 :   [(set (match_dup 0)
    4766                 :     2039369 :         (unspec:<avx512fmaskmode>
    4767                 :     2159267 :           [(match_dup 1)
    4768                 :     2278103 :            (match_dup 2)
    4769                 :     2039369 :            (match_dup 4)]
    4770                 :     2158205 :            UNSPEC_UNSIGNED_PCMP))]
    4771                 :     2157261 :   "operands[4] = GEN_INT (INTVAL (operands[3]) ^ 4);")
    4772                 :     2275787 : 
    4773                 :     2039403 : (define_int_attr pcmp_signed_mask
    4774                 :     2039403 :   [(UNSPEC_PCMP "3") (UNSPEC_UNSIGNED_PCMP "1")])
    4775                 :     2039403 : 
    4776                 :     2039369 : ;; PR96906 - optimize vpsubusw compared to 0 into vpcmpleuw or vpcmpnltuw.
    4777                 :     2039369 : ;; For signed comparison, handle EQ 0: NEQ 4,
    4778                 :     2039369 : ;; for unsigned comparison extra handle LE:2, NLE:6, equivalent to EQ and NEQ.
    4779                 :     2039369 : 
    4780                 :     2039369 : (define_insn_and_split "*<avx512>_ucmp<mode>3_1"
    4781                 :     2039401 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4782                 :     2039369 :         (unspec:<avx512fmaskmode>
    4783                 :     2039401 :           [(us_minus:VI12_AVX512VL
    4784                 :     2039381 :              (match_operand:VI12_AVX512VL 1 "vector_operand")
    4785                 :     2039381 :              (match_operand:VI12_AVX512VL 2 "vector_operand"))
    4786                 :    91106735 :            (match_operand:VI12_AVX512VL 3 "const0_operand")
    4787                 :     2039389 :            (match_operand:SI 4 "const_0_to_7_operand")]
    4788                 :    91106731 :           UNSPEC_PCMP_ITER))]
    4789                 :     2039461 :   "TARGET_AVX512BW && ix86_pre_reload_split ()
    4790                 :     2039473 :   && ix86_binary_operator_ok (US_MINUS, <MODE>mode, operands)
    4791                 :     2039453 :   && (INTVAL (operands[4]) & <pcmp_signed_mask>) == 0"
    4792                 :    91106731 :   "#"
    4793                 :    91106711 :   "&& 1"
    4794                 :     2039369 :   [(const_int 0)]
    4795                 :    91106783 :   {
    4796                 :     2039369 :     /* LE: 2, NLT: 5, NLE: 6, LT: 1  */
    4797                 :     2068236 :     int cmp_predicate = 2; /* LE  */
    4798                 :     2068266 :     if (MEM_P (operands[1]))
    4799                 :     2057531 :       {
    4800                 :     2079436 :        std::swap (operands[1], operands[2]);
    4801                 :     2052781 :        cmp_predicate = 5; /* NLT (GE)  */
    4802                 :     2052799 :       }
    4803                 :     2049455 :     if ((INTVAL (operands[4]) & 4) != 0)
    4804                 :     2039409 :       cmp_predicate ^= 4; /* Invert the comparison to NLE (GT) or LT.  */
    4805                 :     2039413 :     emit_insn (gen_<avx512>_ucmp<mode>3 (operands[0], operands[1],operands[2],
    4806                 :     2039369 :                                         GEN_INT (cmp_predicate)));
    4807                 :     2039405 :     DONE;
    4808                 :     2039369 :   })
    4809                 :     2039369 : 
    4810                 :     2039369 : (define_insn "avx512f_vmcmp<mode>3<round_saeonly_name>"
    4811                 :     2039369 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4812                 :     2039369 :         (and:<avx512fmaskmode>
    4813                 :     2039369 :           (unspec:<avx512fmaskmode>
    4814                 :     2039369 :             [(match_operand:VFH_128 1 "register_operand" "v")
    4815                 :     2039369 :              (match_operand:VFH_128 2 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    4816                 :     2039369 :              (match_operand:SI 3 "const_0_to_31_operand")]
    4817                 :     2039369 :             UNSPEC_PCMP)
    4818                 :     2039369 :           (const_int 1)))]
    4819                 :     2043835 :   "TARGET_AVX512F"
    4820                 :     2039375 :   "vcmp<ssescalarmodesuffix>\t{%3, <round_saeonly_op4>%2, %1, %0|%0, %1, %<iptr>2<round_saeonly_op4>, %3}"
    4821                 :     2039369 :   [(set_attr "type" "ssecmp")
    4822                 :     2039375 :    (set_attr "length_immediate" "1")
    4823                 :     2040199 :    (set_attr "prefix" "evex")
    4824                 :     2042252 :    (set_attr "mode" "<ssescalarmode>")])
    4825                 :     2041842 : 
    4826                 :     2041836 : (define_insn "avx512f_vmcmp<mode>3_mask<round_saeonly_name>"
    4827                 :     2041836 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=k")
    4828                 :     2041836 :         (and:<avx512fmaskmode>
    4829                 :     2041836 :           (unspec:<avx512fmaskmode>
    4830                 :     2041836 :             [(match_operand:VFH_128 1 "register_operand" "v")
    4831                 :     2041836 :              (match_operand:VFH_128 2 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    4832                 :     2039369 :              (match_operand:SI 3 "const_0_to_31_operand")]
    4833                 :     2039369 :             UNSPEC_PCMP)
    4834                 :     2039369 :           (and:<avx512fmaskmode>
    4835                 :     2039369 :             (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")
    4836                 :     2039369 :             (const_int 1))))]
    4837                 :     2040361 :   "TARGET_AVX512F"
    4838                 :     2039369 :   "vcmp<ssescalarmodesuffix>\t{%3, <round_saeonly_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %<iptr>2<round_saeonly_op5>, %3}"
    4839                 :     2039369 :   [(set_attr "type" "ssecmp")
    4840                 :     2039369 :    (set_attr "length_immediate" "1")
    4841                 :     2039595 :    (set_attr "prefix" "evex")
    4842                 :     2039595 :    (set_attr "mode" "<ssescalarmode>")])
    4843                 :     2039369 : 
    4844                 :     2039369 : (define_insn "avx10_2_<unord>comx<mode><round_saeonly_name>"
    4845                 :     2039369 :   [(set (reg:CCFP FLAGS_REG)
    4846                 :     2039369 :         (unspec:CCFP
    4847                 :     2039369 :           [(vec_select:MODEFH
    4848                 :     2039369 :              (match_operand:<ssevecmode> 0 "register_operand" "v")
    4849                 :     2039369 :              (parallel [(const_int 0)]))
    4850                 :     2039369 :            (vec_select:MODEFH
    4851                 :     2039369 :              (match_operand:<ssevecmode> 1 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    4852                 :     2039369 :              (parallel [(const_int 0)]))]
    4853                 :     2039369 :           UNSPEC_COMX))]
    4854                 :     2039543 :   "TARGET_AVX10_2_256"
    4855                 :     2039373 :   "v<unord>comx<ssemodesuffix>\t{<round_saeonly_op2>%1, %0|%0, %<iptr>1<round_saeonly_op2>}"
    4856                 :     2039369 :   [(set_attr "type" "ssecomi")
    4857                 :     2039369 :    (set_attr "prefix" "evex")
    4858                 :     2039545 :    (set_attr "mode" "<MODE>")])
    4859                 :     2039545 : 
    4860                 :     2039543 : (define_insn "<sse>_<unord>comi<round_saeonly_name>"
    4861                 :         270 :   [(set (reg:CCFP FLAGS_REG)
    4862                 :         446 :         (compare:CCFP
    4863                 :         989 :           (vec_select:MODEFH
    4864                 :         822 :             (match_operand:<ssevecmode> 0 "register_operand" "v")
    4865                 :        8573 :             (parallel [(const_int 0)]))
    4866                 :         164 :           (vec_select:MODEFH
    4867                 :         415 :             (match_operand:<ssevecmode> 1 "<round_saeonly_nimm_scalar_predicate>" "<round_saeonly_constraint>")
    4868                 :         784 :             (parallel [(const_int 0)]))))]
    4869                 :       38800 :   "SSE_FLOAT_MODE_P (<MODE>mode) || <MODE>mode == E_HFmode"
    4870                 :       37787 :   "%v<unord>comi<ssemodesuffix>\t{<round_saeonly_op2>%1, %0|%0, %<iptr>1<round_saeonly_op2>}"
    4871                 :       38288 :   [(set_attr "type" "ssecomi")
    4872                 :       40543 :    (set_attr "prefix" "maybe_vex")
    4873                 :       39548 :    (set_attr "prefix_rep" "0")
    4874                 :       39548 :    (set (attr "prefix_data16")
    4875                 :       39169 :         (if_then_else (eq_attr "mode" "DF")
    4876                 :       39157 :                       (const_string "1")
    4877                 :       41033 :                       (const_string "0")))
    4878                 :       37893 :    (set_attr "mode" "<MODE>")])
    4879                 :       39604 : 
    4880                 :       40836 : (define_expand "vec_cmp<mode><avx512fmaskmodelower>"
    4881                 :       40836 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4882                 :       38874 :         (match_operator:<avx512fmaskmode> 1 ""
    4883                 :     3145983 :           [(match_operand:V48H_AVX512VL 2 "register_operand")
    4884                 :       41433 :            (match_operand:V48H_AVX512VL 3 "nonimmediate_operand")]))]
    4885                 :       40651 :   "TARGET_AVX512F"
    4886                 :       41694 : {
    4887                 :       40348 :   bool ok = ix86_expand_mask_vec_cmp (operands[0], GET_CODE (operands[1]),
    4888                 :       40555 :                                       operands[2], operands[3]);
    4889                 :       41008 :   gcc_assert (ok);
    4890                 :       43855 :   DONE;
    4891                 :     3142771 : })
    4892                 :       37612 : 
    4893                 :       37600 : (define_expand "vec_cmp<mode><avx512fmaskmodelower>"
    4894                 :       38101 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4895                 :     3112063 :         (match_operator:<avx512fmaskmode> 1 ""
    4896                 :       38101 :           [(match_operand:VI12_AVX512VL 2 "register_operand")
    4897                 :     3260509 :            (match_operand:VI12_AVX512VL 3 "nonimmediate_operand")]))]
    4898                 :       37632 :   "TARGET_AVX512BW"
    4899                 :       38358 : {
    4900                 :       53550 :   bool ok = ix86_expand_mask_vec_cmp (operands[0], GET_CODE (operands[1]),
    4901                 :     3111707 :                                       operands[2], operands[3]);
    4902                 :       43561 :   gcc_assert (ok);
    4903                 :     2790291 :   DONE;
    4904                 :       42835 : })
    4905                 :       42424 : 
    4906                 :       42424 : (define_expand "vec_cmp<mode><avx512fmaskmodelower>"
    4907                 :       37600 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4908                 :     2784330 :         (match_operator:<avx512fmaskmode> 1 ""
    4909                 :       37600 :           [(match_operand:VBF_AVX10_2 2 "register_operand")
    4910                 :       37600 :            (match_operand:VBF_AVX10_2 3 "nonimmediate_operand")]))]
    4911                 :      676426 :   "TARGET_AVX10_2_256"
    4912                 :      676451 : {
    4913                 :     1204848 :   bool ok = ix86_expand_mask_vec_cmp (operands[0], GET_CODE (operands[1]),
    4914                 :       44105 :                                       operands[2], operands[3]);
    4915                 :       42449 :   gcc_assert (ok);
    4916                 :       42449 :   DONE;
    4917                 :       42424 : })
    4918                 :       37600 : 
    4919                 :       44105 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    4920                 :       44105 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4921                 :       39281 :         (match_operator:<sseintvecmode> 1 ""
    4922                 :        4184 :           [(match_operand:VI_256 2 "register_operand")
    4923                 :        4184 :            (match_operand:VI_256 3 "nonimmediate_or_const_vector_operand")]))]
    4924                 :        4184 :   "TARGET_AVX2"
    4925                 :        4827 : {
    4926                 :        4184 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4927                 :        2081 :   gcc_assert (ok);
    4928                 :        1933 :   DONE;
    4929                 :        1205 : })
    4930                 :          96 : 
    4931                 :        1203 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    4932                 :        1996 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4933                 :        1996 :         (match_operator:<sseintvecmode> 1 ""
    4934                 :        1996 :           [(match_operand:VI124_128 2 "register_operand")
    4935                 :        1996 :            (match_operand:VI124_128 3 "vector_or_const_vector_operand")]))]
    4936                 :        1996 :   "TARGET_SSE2"
    4937                 :        5137 : {
    4938                 :        9193 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4939                 :        5137 :   gcc_assert (ok);
    4940                 :        6579 :   DONE;
    4941                 :          96 : })
    4942                 :          96 : 
    4943                 :          96 : (define_expand "vec_cmpv2div2di"
    4944                 :          96 :   [(set (match_operand:V2DI 0 "register_operand")
    4945                 :        2523 :         (match_operator:V2DI 1 ""
    4946                 :        2523 :           [(match_operand:V2DI 2 "register_operand")
    4947                 :        2523 :            (match_operand:V2DI 3 "vector_or_const_vector_operand")]))]
    4948                 :        2523 :   "TARGET_SSE4_2"
    4949                 :        2865 : {
    4950                 :        2865 :   bool ok = ix86_expand_int_vec_cmp (operands);
    4951                 :        2865 :   gcc_assert (ok);
    4952                 :       10300 :   DONE;
    4953                 :          96 : })
    4954                 :          96 : 
    4955                 :          96 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    4956                 :          96 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4957                 :        7531 :         (match_operator:<sseintvecmode> 1 ""
    4958                 :        7531 :           [(match_operand:VF_256 2 "register_operand")
    4959                 :        7531 :            (match_operand:VF_256 3 "nonimmediate_operand")]))]
    4960                 :        7531 :   "TARGET_AVX"
    4961                 :        8647 : {
    4962                 :        8647 :   bool ok = ix86_expand_fp_vec_cmp (operands);
    4963                 :        8647 :   gcc_assert (ok);
    4964                 :        8749 :   DONE;
    4965                 :          96 : })
    4966                 :          96 : 
    4967                 :          96 : (define_expand "vec_cmp<mode><sseintvecmodelower>"
    4968                 :          96 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    4969                 :         260 :         (match_operator:<sseintvecmode> 1 ""
    4970                 :         260 :           [(match_operand:VF_128 2 "register_operand")
    4971                 :         260 :            (match_operand:VF_128 3 "vector_operand")]))]
    4972                 :         260 :   "TARGET_SSE"
    4973                 :        5648 : {
    4974                 :        5648 :   bool ok = ix86_expand_fp_vec_cmp (operands);
    4975                 :        5648 :   gcc_assert (ok);
    4976                 :        5664 :   DONE;
    4977                 :          96 : })
    4978                 :          96 : 
    4979                 :          96 : (define_expand "vec_cmpu<mode><avx512fmaskmodelower>"
    4980                 :          96 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4981                 :         112 :         (match_operator:<avx512fmaskmode> 1 ""
    4982                 :         112 :           [(match_operand:VI48_AVX512VL 2 "register_operand")
    4983                 :         112 :            (match_operand:VI48_AVX512VL 3 "nonimmediate_operand")]))]
    4984                 :         112 :   "TARGET_AVX512F"
    4985                 :         493 : {
    4986                 :         509 :   bool ok = ix86_expand_mask_vec_cmp (operands[0], GET_CODE (operands[1]),
    4987                 :         112 :                                       operands[2], operands[3]);
    4988                 :         538 :   gcc_assert (ok);
    4989                 :         493 :   DONE;
    4990                 :          96 : })
    4991                 :          96 : 
    4992                 :          96 : (define_expand "vec_cmpu<mode><avx512fmaskmodelower>"
    4993                 :         141 :   [(set (match_operand:<avx512fmaskmode> 0 "register_operand")
    4994                 :         141 :         (match_operator:<avx512fmaskmode> 1 ""
    4995                 :         141 :           [(match_operand:VI12_AVX512VL 2 "register_operand")
    4996                 :         141 :            (match_operand:VI12_AVX512VL 3 "nonimmediate_operand")]))]
    4997                 :         141 :   "TARGET_AVX512BW"
    4998                 :         318 : {
    4999                 :         540 :   bool ok = ix86_expand_mask_vec_cmp (operands[0], GET_CODE (operands[1]),
    5000                 :         224 :                                       operands[2], operands[3]);
    5001                 :         318 :   gcc_assert (ok);
    5002                 :         318 :   DONE;
    5003                 :          96 : })
    5004                 :          96 : 
    5005                 :         179 : (define_expand "vec_cmpu<mode><sseintvecmodelower>"
    5006                 :         179 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    5007                 :         179 :         (match_operator:<sseintvecmode> 1 ""
    5008                 :         179 :           [(match_operand:VI_256 2 "register_operand")
    5009                 :         179 :            (match_operand:VI_256 3 "nonimmediate_or_const_vector_operand")]))]
    5010                 :         179 :   "TARGET_AVX2"
    5011                 :         459 : {
    5012                 :         739 :   bool ok = ix86_expand_int_vec_cmp (operands);
    5013                 :         470 :   gcc_assert (ok);
    5014                 :         376 :   DONE;
    5015                 :          96 : })
    5016                 :          96 : 
    5017                 :          96 : (define_expand "vec_cmpu<mode><sseintvecmodelower>"
    5018                 :         470 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    5019                 :         470 :         (match_operator:<sseintvecmode> 1 ""
    5020                 :         470 :           [(match_operand:VI124_128 2 "register_operand")
    5021                 :         470 :            (match_operand:VI124_128 3 "vector_or_const_vector_operand")]))]
    5022                 :         470 :   "TARGET_SSE2"
    5023                 :        1676 : {
    5024                 :        2882 :   bool ok = ix86_expand_int_vec_cmp (operands);
    5025                 :        1676 :   gcc_assert (ok);
    5026                 :        1551 :   DONE;
    5027                 :          96 : })
    5028                 :          96 : 
    5029                 :          96 : (define_expand "vec_cmpuv2div2di"
    5030                 :          96 :   [(set (match_operand:V2DI 0 "register_operand")
    5031                 :        1551 :         (match_operator:V2DI 1 ""
    5032                 :        1551 :           [(match_operand:V2DI 2 "register_operand")
    5033                 :        1551 :            (match_operand:V2DI 3 "vector_or_const_vector_operand")]))]
    5034                 :        1551 :   "TARGET_SSE4_2"
    5035                 :        1551 : {
    5036                 :        1621 :   bool ok = ix86_expand_int_vec_cmp (operands);
    5037                 :        1551 :   gcc_assert (ok);
    5038                 :        2915 :   DONE;
    5039                 :          96 : })
    5040                 :          96 : 
    5041                 :          96 : (define_expand "vec_cmpeqv2div2di"
    5042                 :          96 :   [(set (match_operand:V2DI 0 "register_operand")
    5043                 :        1390 :         (match_operator:V2DI 1 ""
    5044                 :          96 :           [(match_operand:V2DI 2 "register_operand")
    5045                 :          96 :            (match_operand:V2DI 3 "vector_operand")]))]
    5046                 :          96 :   "TARGET_SSE2"
    5047                 :         261 : {
    5048                 :         261 :   bool ok;
    5049                 :         261 :   if (!TARGET_SSE4_1)
    5050                 :         441 :     {
    5051                 :         182 :       rtx ops[4];
    5052                 :         413 :       ops[0] = gen_reg_rtx (V4SImode);
    5053                 :         182 :       ops[2] = gen_lowpart (V4SImode, force_reg (V2DImode, operands[2]));
    5054                 :         182 :       ops[3] = gen_lowpart (V4SImode, force_reg (V2DImode, operands[3]));
    5055                 :         527 :       ops[1] = gen_rtx_fmt_ee (GET_CODE (operands[1]), V4SImode,
    5056                 :          96 :                                ops[2], ops[3]);
    5057                 :         413 :       ok = ix86_expand_int_vec_cmp (ops);
    5058                 :          96 : 
    5059                 :         182 :       rtx tmp1 = gen_reg_rtx (V4SImode);
    5060                 :         182 :       emit_insn (gen_sse2_pshufd (tmp1, ops[0], GEN_INT (0xb1)));
    5061                 :          96 : 
    5062                 :         246 :       rtx tmp2 = gen_reg_rtx (V4SImode);
    5063                 :         182 :       if (GET_CODE (operands[1]) == EQ)
    5064                 :         308 :         emit_insn (gen_andv4si3 (tmp2, tmp1, ops[0]));
    5065                 :          96 :       else
    5066                 :         678 :         emit_insn (gen_iorv4si3 (tmp2, tmp1, ops[0]));
    5067                 :         160 : 
    5068                 :         182 :       emit_move_insn (operands[0], gen_lowpart (V2DImode, tmp2));
    5069                 :         284 :     }
    5070                 :          96 :   else
    5071                 :         695 :     ok = ix86_expand_int_vec_cmp (operands);
    5072                 :         261 :   gcc_assert (ok);
    5073                 :         261 :   DONE;
    5074                 :          96 : })
    5075                 :          96 : 
    5076                 :         236 : (define_expand "vec_cmpeqv1tiv1ti"
    5077                 :          96 :   [(set (match_operand:V1TI 0 "register_operand")
    5078                 :         319 :         (match_operator:V1TI 1 ""
    5079                 :          96 :           [(match_operand:V1TI 2 "register_operand")
    5080                 :         276 :            (match_operand:V1TI 3 "vector_operand")]))]
    5081                 :         236 :   "TARGET_SSE2"
    5082                 :         110 : {
    5083                 :         333 :   rtx dst = gen_reg_rtx (V2DImode);
    5084                 :         110 :   rtx op1 = gen_lowpart (V2DImode, force_reg (V1TImode, operands[2]));
    5085                 :         290 :   rtx op2 = gen_lowpart (V2DImode, force_reg (V1TImode, operands[3]));
    5086                 :         290 :   rtx cmp = gen_rtx_fmt_ee (GET_CODE (operands[1]), V2DImode, op1, op2);
    5087                 :         290 :   emit_insn (gen_vec_cmpeqv2div2di (dst, cmp, op1, op2));
    5088                 :         276 : 
    5089                 :         290 :   rtx tmp1 = gen_reg_rtx (V4SImode);
    5090                 :         293 :   rtx tmp2 = gen_lowpart (V4SImode, dst);
    5091                 :         290 :   emit_insn (gen_sse2_pshufd (tmp1, tmp2, GEN_INT (0x4e)));
    5092                 :        1903 : 
    5093                 :         110 :   rtx tmp3 = gen_reg_rtx (V4SImode);
    5094                 :         110 :   if (GET_CODE (operands[1]) == EQ)
    5095                 :         102 :     emit_insn (gen_andv4si3 (tmp3, tmp2, tmp1));
    5096                 :          96 :   else
    5097                 :        1814 :     emit_insn (gen_iorv4si3 (tmp3, tmp2, tmp1));
    5098                 :        1710 : 
    5099                 :        1654 :   emit_move_insn (operands[0], gen_lowpart (V1TImode, tmp3));
    5100                 :        1654 :   DONE;
    5101                 :        1640 : })
    5102                 :        1720 : 
    5103                 :        1720 : (define_expand "vcond_mask_<mode><avx512fmaskmodelower>"
    5104                 :        1899 :   [(set (match_operand:V48_AVX512VL 0 "register_operand")
    5105                 :          93 :         (vec_merge:V48_AVX512VL
    5106                 :          93 :           (match_operand:V48_AVX512VL 1 "nonimmediate_operand")
    5107                 :         138 :           (match_operand:V48_AVX512VL 2 "nonimm_or_0_operand")
    5108                 :         138 :           (match_operand:<avx512fmaskmode> 3 "register_operand")))]
    5109                 :         317 :   "TARGET_AVX512F")
    5110                 :         237 : 
    5111                 :         237 : (define_expand "vcond_mask_<mode><avx512fmaskmodelower>"
    5112                 :         237 :   [(set (match_operand:VI12HFBF_AVX512VL 0 "register_operand")
    5113                 :         237 :         (vec_merge:VI12HFBF_AVX512VL
    5114                 :         237 :           (match_operand:VI12HFBF_AVX512VL 1 "nonimmediate_operand")
    5115                 :         237 :           (match_operand:VI12HFBF_AVX512VL 2 "nonimm_or_0_operand")
    5116                 :         237 :           (match_operand:<avx512fmaskmode> 3 "register_operand")))]
    5117                 :          58 :   "TARGET_AVX512BW")
    5118                 :          58 : 
    5119                 :          58 : ;; As vcondv4div4df and vcondv8siv8sf are enabled already with TARGET_AVX,
    5120                 :          58 : ;; and their condition can be folded late into a constant, we need to
    5121                 :          58 : ;; support vcond_mask_v4div4di and vcond_mask_v8siv8si for TARGET_AVX.
    5122                 :          58 : (define_mode_iterator VI_256_AVX2 [(V32QI "TARGET_AVX2") (V16HI "TARGET_AVX2")
    5123                 :          58 :                                    V8SI V4DI])
    5124                 :          61 : 
    5125                 :          58 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    5126                 :          58 :   [(set (match_operand:VI_256_AVX2 0 "register_operand")
    5127                 :          13 :         (vec_merge:VI_256_AVX2
    5128                 :          45 :           (match_operand:VI_256_AVX2 1 "nonimmediate_operand")
    5129                 :          48 :           (match_operand:VI_256_AVX2 2 "nonimm_or_0_operand")
    5130                 :          48 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    5131                 :          48 :   "TARGET_AVX"
    5132                 :         228 : {
    5133                 :         228 :   ix86_expand_sse_movcc (operands[0], operands[3],
    5134                 :          48 :                          operands[1], operands[2]);
    5135                 :         228 :   DONE;
    5136                 :          48 : })
    5137                 :          45 : 
    5138                 :          45 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    5139                 :          45 :   [(set (match_operand:VI_128 0 "register_operand")
    5140                 :          45 :         (vec_merge:VI_128
    5141                 :          45 :           (match_operand:VI_128 1 "vector_operand")
    5142                 :          45 :           (match_operand:VI_128 2 "nonimm_or_0_operand")
    5143                 :          45 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    5144                 :          45 :   "TARGET_SSE2"
    5145                 :        1851 : {
    5146                 :        1851 :   ix86_expand_sse_movcc (operands[0], operands[3],
    5147                 :          45 :                          operands[1], operands[2]);
    5148                 :        1851 :   DONE;
    5149                 :          45 : })
    5150                 :          45 : 
    5151                 :          45 : (define_expand "vcond_mask_v1tiv1ti"
    5152                 :          45 :   [(set (match_operand:V1TI 0 "register_operand")
    5153                 :          45 :         (vec_merge:V1TI
    5154                 :          45 :           (match_operand:V1TI 1 "vector_operand")
    5155                 :          45 :           (match_operand:V1TI 2 "nonimm_or_0_operand")
    5156                 :          45 :           (match_operand:V1TI 3 "register_operand")))]
    5157                 :          45 :   "TARGET_SSE2"
    5158                 :          48 : {
    5159                 :          48 :   ix86_expand_sse_movcc (operands[0], operands[3],
    5160                 :         855 :                          operands[1], operands[2]);
    5161                 :          48 :   DONE;
    5162                 :          45 : })
    5163                 :          45 : 
    5164                 :          45 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    5165                 :         855 :   [(set (match_operand:VF_256 0 "register_operand")
    5166                 :         855 :         (vec_merge:VF_256
    5167                 :         855 :           (match_operand:VF_256 1 "nonimmediate_operand")
    5168                 :         855 :           (match_operand:VF_256 2 "nonimm_or_0_operand")
    5169                 :         855 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    5170                 :         855 :   "TARGET_AVX"
    5171                 :         935 : {
    5172                 :         935 :   ix86_expand_sse_movcc (operands[0], operands[3],
    5173                 :          45 :                          operands[1], operands[2]);
    5174                 :         237 :   DONE;
    5175                 :          45 : })
    5176                 :          45 : 
    5177                 :          45 : (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    5178                 :          45 :   [(set (match_operand:VF_128 0 "register_operand")
    5179                 :          45 :         (vec_merge:VF_128
    5180                 :          45 :           (match_operand:VF_128 1 "vector_operand")
    5181                 :          45 :           (match_operand:VF_128 2 "nonimm_or_0_operand")
    5182                 :          45 :           (match_operand:<sseintvecmode> 3 "register_operand")))]
    5183                 :          45 :   "TARGET_SSE"
    5184                 :         743 : {
    5185                 :         743 :   ix86_expand_sse_movcc (operands[0], operands[3],
    5186                 :          45 :                          operands[1], operands[2]);
    5187                 :         743 :   DONE;
    5188                 :          45 : })
    5189                 :          45 : 
    5190                 :          45 : (define_expand "vcond_mask_<mode><mode>"
    5191                 :          45 :   [(match_operand:SWI1248_AVX512BW 0 "register_operand")
    5192                 :          45 :    (match_operand:SWI1248_AVX512BW 1 "register_operand")
    5193                 :          45 :    (match_operand:SWI1248_AVX512BW 2 "register_operand")
    5194                 :          45 :    (match_operand:SWI1248_AVX512BW 3 "register_operand")]
    5195                 :          45 :   "TARGET_AVX512F"
    5196                 :          45 : {
    5197                 :          45 :   /* (operand[1] & operand[3]) | (operand[2] & ~operand[3])  */
    5198                 :          45 :   rtx op1 = gen_reg_rtx (<MODE>mode);
    5199                 :          45 :   rtx op2 = gen_reg_rtx (<MODE>mode);
    5200                 :          45 :   rtx op3 = gen_reg_rtx (<MODE>mode);
    5201                 :          45 : 
    5202                 :          45 :   emit_insn (gen_and<mode>3 (op1, operands[1], operands[3]));
    5203                 :          45 :   emit_insn (gen_one_cmpl<mode>2 (op3, operands[3]));
    5204                 :          45 :   emit_insn (gen_and<mode>3 (op2, operands[2], op3));
    5205                 :          45 :   emit_insn (gen_ior<mode>3 (operands[0], op1, op2));
    5206                 :          45 : 
    5207                 :          45 :   DONE;
    5208                 :          45 : })
    5209                 :          45 : 
    5210                 :          45 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5211                 :          45 : ;;
    5212                 :          45 : ;; Parallel floating point logical operations
    5213                 :          45 : ;;
    5214                 :          45 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5215                 :          45 : 
    5216                 :          45 : (define_insn "<sse>_andnot<mode>3<mask_name>"
    5217                 :          45 :   [(set (match_operand:VFB_128_256 0 "register_operand" "=x,x,v,v")
    5218                 :          45 :         (and:VFB_128_256
    5219                 :          45 :           (not:VFB_128_256
    5220                 :          45 :             (match_operand:VFB_128_256 1 "register_operand" "0,x,v,v"))
    5221                 :          45 :           (match_operand:VFB_128_256 2 "vector_operand" "xBm,xjm,vm,vm")))]
    5222                 :       23174 :   "TARGET_SSE && <mask_avx512vl_condition>
    5223                 :          45 :    && (!<mask_applied> || <ssescalarsize> != 16)"
    5224                 :        5313 : {
    5225                 :        5313 :   char buf[128];
    5226                 :        5313 :   const char *ops;
    5227                 :        5753 :   const char *suffix;
    5228                 :         485 : 
    5229                 :         485 :   switch (which_alternative)
    5230                 :          45 :     {
    5231                 :          70 :     case 0:
    5232                 :          45 :       ops = "andn%s\t{%%2, %%0|%%0, %%2}";
    5233                 :          45 :       break;
    5234                 :         197 :     case 1:
    5235                 :         222 :     case 2:
    5236                 :         222 :     case 3:
    5237                 :         222 :       ops = "vandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    5238                 :         222 :       break;
    5239                 :          70 :     default:
    5240                 :          70 :       gcc_unreachable ();
    5241                 :          70 :     }
    5242                 :          45 : 
    5243                 :        5313 :   switch (get_attr_mode (insn))
    5244                 :          45 :     {
    5245                 :          45 :     case MODE_V16BF:
    5246                 :          45 :     case MODE_V8BF:
    5247                 :          45 :     case MODE_V16HF:
    5248                 :          45 :     case MODE_V8HF:
    5249                 :          45 :     case MODE_V8SF:
    5250                 :          45 :     case MODE_V4SF:
    5251                 :          45 :       suffix = "ps";
    5252                 :          45 :       break;
    5253                 :          49 :     case MODE_OI:
    5254                 :          49 :     case MODE_TI:
    5255                 :          45 :       /* There is no vandnp[sd] in avx512f.  Use vpandn[qd].  */
    5256                 :          49 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    5257                 :          49 :       ops = "vpandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    5258                 :          49 :       break;
    5259                 :        2670 :     default:
    5260                 :        2670 :       suffix = "<ssemodesuffix>";
    5261                 :          45 :     }
    5262                 :          45 : 
    5263                 :        5313 :   snprintf (buf, sizeof (buf), ops, suffix);
    5264                 :        5313 :   output_asm_insn (buf, operands);
    5265                 :        5313 :   return "";
    5266                 :          45 : }
    5267                 :          45 :   [(set_attr "isa" "noavx,avx_noavx512f,avx512dq,avx512f")
    5268                 :          45 :    (set_attr "addr" "*,gpr16,*,*")
    5269                 :          45 :    (set_attr "type" "sselog")
    5270                 :        5313 :    (set_attr "prefix" "orig,maybe_vex,evex,evex")
    5271                 :          45 :    (set (attr "mode")
    5272                 :          45 :         (cond [(and (match_test "<mask_applied>")
    5273                 :          45 :                     (and (eq_attr "alternative" "1")
    5274                 :          45 :                          (match_test "!TARGET_AVX512DQ")))
    5275                 :          45 :                  (const_string "<sseintvecmode2>")
    5276                 :          45 :                (and (not (match_test "<mask_applied>"))
    5277                 :          45 :                     (eq_attr "alternative" "3")
    5278                 :          45 :                     (match_test "!x86_evex_reg_mentioned_p (operands, 3)"))
    5279                 :          45 :                  (const_string "<MODE>")
    5280                 :          45 :                (eq_attr "alternative" "3")
    5281                 :          45 :                  (const_string "<sseintvecmode2>")
    5282                 :          45 :                (match_test "TARGET_AVX")
    5283                 :          45 :                  (const_string "<MODE>")
    5284                 :          45 :                (match_test "optimize_function_for_size_p (cfun)")
    5285                 :          45 :                  (const_string "V4SF")
    5286                 :          45 :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5287                 :          45 :                  (const_string "V4SF")
    5288                 :          45 :               ]
    5289                 :          45 :               (const_string "<MODE>")))])
    5290                 :          45 : 
    5291                 :          45 : (define_insn "<sse>_andnot<mode>3<mask_name>"
    5292                 :          45 :   [(set (match_operand:VFB_512 0 "register_operand" "=v")
    5293                 :          45 :         (and:VFB_512
    5294                 :          45 :           (not:VFB_512
    5295                 :          45 :             (match_operand:VFB_512 1 "register_operand" "v"))
    5296                 :          45 :           (match_operand:VFB_512 2 "nonimmediate_operand" "vm")))]
    5297                 :         672 :   "TARGET_AVX512F && (!<mask_applied> || <ssescalarsize> != 16)"
    5298                 :         117 : {
    5299                 :         117 :   char buf[128];
    5300                 :         117 :   const char *ops;
    5301                 :         117 :   const char *suffix;
    5302                 :          45 : 
    5303                 :         117 :   suffix = "<ssemodesuffix>";
    5304                 :         117 :   ops = "";
    5305                 :          45 : 
    5306                 :          45 :   /* Since there are no vandnp[sd] without AVX512DQ nor vandnph,
    5307                 :          45 :      use vp<logic>[dq].  */
    5308                 :         117 :   if (!TARGET_AVX512DQ || <MODE>mode == V32HFmode || <MODE>mode == V32BFmode)
    5309                 :          45 :     {
    5310                 :          45 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    5311                 :           0 :       ops = "p";
    5312                 :           0 :     }
    5313                 :           0 : 
    5314                 :          72 :   snprintf (buf, sizeof (buf),
    5315                 :           0 :             "v%sandn%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}",
    5316                 :           0 :             ops, suffix);
    5317                 :          72 :   output_asm_insn (buf, operands);
    5318                 :          72 :   return "";
    5319                 :           0 : }
    5320                 :           0 :   [(set_attr "type" "sselog")
    5321                 :           0 :    (set_attr "prefix" "evex")
    5322                 :           0 :    (set (attr "mode")
    5323                 :          73 :         (if_then_else (match_test "TARGET_AVX512DQ")
    5324                 :           0 :                       (const_string "<sseinsnmode>")
    5325                 :           0 :                       (const_string "XI")))])
    5326                 :           0 : 
    5327                 :           0 : (define_expand "<code><mode>3<mask_name>"
    5328                 :          16 :   [(set (match_operand:VFB_128_256 0 "register_operand")
    5329                 :          16 :        (any_logic:VFB_128_256
    5330                 :          16 :          (match_operand:VFB_128_256 1 "vector_operand")
    5331                 :          16 :          (match_operand:VFB_128_256 2 "vector_operand")))]
    5332                 :          16 :   "TARGET_SSE && <mask_avx512vl_condition>
    5333                 :          16 :    && (!<mask_applied> || <ssescalarsize> != 16)"
    5334                 :          41 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    5335                 :          16 : 
    5336                 :          16 : (define_expand "<code><mode>3<mask_name>"
    5337                 :        1239 :   [(set (match_operand:VFB_512 0 "register_operand")
    5338                 :        1239 :        (any_logic:VFB_512
    5339                 :        1223 :          (match_operand:VFB_512 1 "nonimmediate_operand")
    5340                 :        1239 :          (match_operand:VFB_512 2 "nonimmediate_operand")))]
    5341                 :        1239 :   "TARGET_AVX512F && (!<mask_applied> || <ssescalarsize> != 16)"
    5342                 :        1455 :   "ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
    5343                 :         304 : 
    5344                 :         951 : (define_insn "*<code><mode>3<mask_name>"
    5345                 :         520 :   [(set (match_operand:VFB_128_256 0 "register_operand" "=x,x,v,v")
    5346                 :         520 :         (any_logic:VFB_128_256
    5347                 :         232 :           (match_operand:VFB_128_256 1 "vector_operand" "%0,x,v,v")
    5348                 :        1239 :           (match_operand:VFB_128_256 2 "vector_operand" "xBm,xm,vm,vm")))]
    5349                 :      395413 :   "TARGET_SSE && <mask_avx512vl_condition>
    5350                 :        1167 :    && (!<mask_applied> || <ssescalarsize> != 16)
    5351                 :      398624 :    && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    5352                 :       74961 : {
    5353                 :       81296 :   char buf[128];
    5354                 :       81296 :   const char *ops;
    5355                 :       81507 :   const char *suffix;
    5356                 :        8449 : 
    5357                 :        2680 :   switch (which_alternative)
    5358                 :          34 :     {
    5359                 :         349 :     case 0:
    5360                 :         349 :       ops = "<logic>%s\t{%%2, %%0|%%0, %%2}";
    5361                 :         625 :       break;
    5362                 :        2715 :     case 1:
    5363                 :        2554 :     case 2:
    5364                 :        2555 :     case 3:
    5365                 :        2665 :       ops = "v<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    5366                 :        3114 :       break;
    5367                 :         629 :     default:
    5368                 :         288 :       gcc_unreachable ();
    5369                 :         431 :     }
    5370                 :         252 : 
    5371                 :       75129 :   switch (get_attr_mode (insn))
    5372                 :         665 :     {
    5373                 :         217 :     case MODE_V16BF:
    5374                 :         265 :     case MODE_V8BF:
    5375                 :         265 :     case MODE_V16HF:
    5376                 :         157 :     case MODE_V8HF:
    5377                 :         178 :     case MODE_V8SF:
    5378                 :          37 :     case MODE_V4SF:
    5379                 :          34 :       suffix = "ps";
    5380                 :          34 :       break;
    5381                 :          50 :     case MODE_OI:
    5382                 :          50 :     case MODE_TI:
    5383                 :          34 :       /* There is no v<logic>p[sd] in avx512f.  Use vp<logic>[qd].  */
    5384                 :          50 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    5385                 :          50 :       ops = "vp<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}";
    5386                 :          50 :       break;
    5387                 :       37259 :     default:
    5388                 :       37259 :       suffix = "<ssemodesuffix>";
    5389                 :          34 :     }
    5390                 :          34 : 
    5391                 :       74907 :   snprintf (buf, sizeof (buf), ops, suffix);
    5392                 :       74907 :   output_asm_insn (buf, operands);
    5393                 :       74907 :   return "";
    5394                 :          34 : }
    5395                 :          34 :   [(set_attr "isa" "noavx,avx,avx512dq,avx512f")
    5396                 :          34 :    (set_attr "type" "sselog")
    5397                 :          34 :    (set_attr "prefix" "orig,maybe_evex,evex,evex")
    5398                 :       74907 :    (set (attr "mode")
    5399                 :          34 :         (cond [(and (match_test "<mask_applied>")
    5400                 :          34 :                     (and (eq_attr "alternative" "1")
    5401                 :          34 :                          (match_test "!TARGET_AVX512DQ")))
    5402                 :          34 :                  (const_string "<sseintvecmode2>")
    5403                 :          34 :                (eq_attr "alternative" "3")
    5404                 :          34 :                  (const_string "<sseintvecmode2>")
    5405                 :          34 :                (match_test "TARGET_AVX")
    5406                 :          34 :                  (const_string "<MODE>")
    5407                 :          34 :                (match_test "optimize_function_for_size_p (cfun)")
    5408                 :          34 :                  (const_string "V4SF")
    5409                 :          34 :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5410                 :          34 :                  (const_string "V4SF")
    5411                 :          34 :               ]
    5412                 :          34 :               (const_string "<MODE>")))])
    5413                 :          34 : 
    5414                 :          34 : (define_insn "*<code><mode>3<mask_name>"
    5415                 :          34 :   [(set (match_operand:VFB_512 0 "register_operand" "=v")
    5416                 :          34 :         (any_logic:VFB_512
    5417                 :          34 :           (match_operand:VFB_512 1 "nonimmediate_operand" "%v")
    5418                 :          34 :           (match_operand:VFB_512 2 "nonimmediate_operand" "vm")))]
    5419                 :        2264 :   "TARGET_AVX512F && !(MEM_P (operands[1]) && MEM_P (operands[2]))
    5420                 :        1856 :    && (!<mask_applied> || <ssescalarsize> != 16)"
    5421                 :         325 : {
    5422                 :         325 :   char buf[128];
    5423                 :         325 :   const char *ops;
    5424                 :         325 :   const char *suffix;
    5425                 :          34 : 
    5426                 :         325 :   suffix = "<ssemodesuffix>";
    5427                 :         325 :   ops = "";
    5428                 :          34 : 
    5429                 :          34 :   /* Since there are no v<logic>p[sd] without AVX512DQ nor v<logic>ph,
    5430                 :          34 :      use vp<logic>[dq].  */
    5431                 :         325 :   if (!TARGET_AVX512DQ || <MODE>mode == V32HFmode || <MODE>mode == V32BFmode)
    5432                 :          34 :     {
    5433                 :          43 :       suffix = GET_MODE_INNER (<MODE>mode) == DFmode ? "q" : "d";
    5434                 :          42 :       ops = "p";
    5435                 :          34 :     }
    5436                 :          34 : 
    5437                 :         325 :   snprintf (buf, sizeof (buf),
    5438                 :          34 :            "v%s<logic>%s\t{%%2, %%1, %%0<mask_operand3_1>|%%0<mask_operand3_1>, %%1, %%2}",
    5439                 :          34 :            ops, suffix);
    5440                 :         325 :   output_asm_insn (buf, operands);
    5441                 :         325 :   return "";
    5442                 :          34 : }
    5443                 :          34 :   [(set_attr "type" "sselog")
    5444                 :          34 :    (set_attr "prefix" "evex")
    5445                 :          34 :    (set (attr "mode")
    5446                 :         324 :         (if_then_else (match_test "TARGET_AVX512DQ")
    5447                 :          34 :                       (const_string "<sseinsnmode>")
    5448                 :          34 :                       (const_string "XI")))])
    5449                 :          34 : 
    5450                 :          34 : ;; Generic part doesn't support the simpliciation of logic operation with
    5451                 :          34 : ;; float_vector_all_ones_operand since it's not valid rtl. Add combine spiltter
    5452                 :          34 : ;; for them, it should be safe since there's no SIMD Floating-Point Exceptions.
    5453                 :          34 : (define_insn_and_split "*bit_and_float_vector_all_ones"
    5454                 :          34 :   [(set (match_operand:VFB 0 "nonimmediate_operand")
    5455                 :          34 :         (and:VFB (match_operand:VFB 1 "nonimmediate_operand")
    5456                 :          34 :                  (match_operand:VFB 2 "float_vector_all_ones_operand")))]
    5457                 :          86 :  "TARGET_SSE && ix86_pre_reload_split ()"
    5458                 :        6215 :  "#"
    5459                 :          34 :  "&& 1"
    5460                 :      100350 :  [(set (match_dup 0) (match_dup 1))]
    5461                 :          48 :  "operands[1] = force_reg (<MODE>mode, operands[1]);")
    5462                 :         736 : 
    5463                 :      100355 : (define_expand "copysign<mode>3"
    5464                 :      101064 :   [(set (match_dup 4)
    5465                 :      101022 :         (and:VFB
    5466                 :         680 :           (not:VFB (match_dup 3))
    5467                 :        1278 :           (match_operand:VFB 1 "vector_operand")))
    5468                 :       12962 :    (set (match_dup 5)
    5469                 :       12955 :         (and:VFB (match_dup 3)
    5470                 :          41 :                  (match_operand:VFB 2 "vector_operand")))
    5471                 :        3141 :    (set (match_operand:VFB 0 "register_operand")
    5472                 :        3141 :         (ior:VFB (match_dup 4) (match_dup 5)))]
    5473                 :        3134 :   "TARGET_SSE"
    5474                 :        3230 : {
    5475                 :        3312 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, 1, 0);
    5476                 :          34 : 
    5477                 :         130 :   operands[4] = gen_reg_rtx (<MODE>mode);
    5478                 :         130 :   operands[5] = gen_reg_rtx (<MODE>mode);
    5479                 :          34 : })
    5480                 :          37 : 
    5481                 :         102 : (define_expand "xorsign<mode>3"
    5482                 :         198 :   [(set (match_dup 4)
    5483                 :         102 :         (and:VFB (match_dup 3)
    5484                 :          99 :                 (match_operand:VFB 2 "vector_operand")))
    5485                 :         109 :    (set (match_operand:VFB 0 "register_operand")
    5486                 :         195 :         (xor:VFB (match_dup 4)
    5487                 :         195 :                  (match_operand:VFB 1 "vector_operand")))]
    5488                 :         195 :   "TARGET_SSE"
    5489                 :         214 : {
    5490                 :         108 :   operands[3] = ix86_build_signbit_mask (<MODE>mode, 1, 0);
    5491                 :         130 : 
    5492                 :          77 :   operands[4] = gen_reg_rtx (<MODE>mode);
    5493                 :         130 : })
    5494                 :          34 : 
    5495                 :         130 : (define_expand "signbit<mode>2"
    5496                 :          53 :   [(set (match_operand:<sseintvecmode> 0 "register_operand")
    5497                 :          53 :         (lshiftrt:<sseintvecmode>
    5498                 :          53 :           (subreg:<sseintvecmode>
    5499                 :          53 :             (match_operand:VF1_AVX2 1 "register_operand") 0)
    5500                 :         130 :           (match_dup 2)))]
    5501                 :          53 :   "TARGET_SSE2"
    5502                 :          57 : {
    5503                 :          61 :   operands[1] = force_reg (<MODE>mode, operands[1]);
    5504                 :         134 :   operands[2] = GEN_INT (GET_MODE_UNIT_BITSIZE (<MODE>mode)-1);
    5505                 :          53 : })
    5506                 :          34 : 
    5507                 :          53 : ;; Also define scalar versions.  These are used for abs, neg, and
    5508                 :         130 : ;; conditional move.  Using subregs into vector modes causes register
    5509                 :         130 : ;; allocation lossage.  These patterns do not allow memory operands
    5510                 :         134 : ;; because the native instructions read the full 128-bits.
    5511                 :          53 : 
    5512                 :          38 : (define_insn "*andnot<mode>3"
    5513                 :          38 :   [(set (match_operand:MODEF248 0 "register_operand" "=x,x,v,v")
    5514                 :          34 :         (and:MODEF248
    5515                 :          88 :           (not:MODEF248
    5516                 :          53 :             (match_operand:MODEF248 1 "register_operand" "0,x,v,v"))
    5517                 :          53 :             (match_operand:MODEF248 2 "register_operand" "x,x,v,v")))]
    5518                 :          34 :   "TARGET_SSE"
    5519                 :        1586 : {
    5520                 :        1562 :   char buf[128];
    5521                 :        1561 :   const char *ops;
    5522                 :       17792 :   const char *suffix
    5523                 :       11856 :     = (get_attr_mode (insn) == MODE_V4SF) ? "ps" : "<ssevecmodesuffix>";
    5524                 :       10948 : 
    5525                 :        1590 :   switch (which_alternative)
    5526                 :          88 :     {
    5527                 :        5913 :     case 0:
    5528                 :        4243 :       ops = "andn%s\t{%%2, %%0|%%0, %%2}";
    5529                 :          43 :       break;
    5530                 :          43 :     case 1:
    5531                 :          43 :       ops = "vandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5532                 :          39 :       break;
    5533                 :        5857 :     case 2:
    5534                 :          39 :       if (TARGET_AVX512DQ)
    5535                 :          34 :         ops = "vandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5536                 :        2144 :       else
    5537                 :          34 :         {
    5538                 :        1541 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    5539                 :        1541 :           ops = "vpandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5540                 :          34 :         }
    5541                 :        2144 :       break;
    5542                 :         135 :     case 3:
    5543                 :          34 :       if (TARGET_AVX512DQ)
    5544                 :          34 :         ops = "vandn%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5545                 :          34 :       else
    5546                 :          34 :         {
    5547                 :         135 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    5548                 :          34 :           ops = "vpandn%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5549                 :          34 :         }
    5550                 :         128 :       break;
    5551                 :          60 :     default:
    5552                 :          34 :       gcc_unreachable ();
    5553                 :          34 :     }
    5554                 :          34 : 
    5555                 :        1635 :   snprintf (buf, sizeof (buf), ops, suffix);
    5556                 :        1967 :   output_asm_insn (buf, operands);
    5557                 :        1541 :   return "";
    5558                 :          34 : }
    5559                 :          34 :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f_512")
    5560                 :          34 :    (set_attr "type" "sselog")
    5561                 :         434 :    (set_attr "prefix" "orig,vex,evex,evex")
    5562                 :        1606 :    (set (attr "mode")
    5563                 :          34 :         (cond [(eq_attr "alternative" "2")
    5564                 :          34 :                  (if_then_else (match_test "TARGET_AVX512DQ")
    5565                 :         416 :                                (const_string "<ssevecmode>")
    5566                 :         328 :                                (const_string "TI"))
    5567                 :          34 :                (eq_attr "alternative" "3")
    5568                 :          34 :                  (if_then_else (match_test "TARGET_AVX512DQ")
    5569                 :          34 :                                (const_string "<avx512fvecmode>")
    5570                 :         416 :                                (const_string "XI"))
    5571                 :        1499 :                (match_test "TARGET_AVX")
    5572                 :          16 :                  (const_string "<ssevecmode>")
    5573                 :          18 :                (match_test "optimize_function_for_size_p (cfun)")
    5574                 :          18 :                  (const_string "V4SF")
    5575                 :          18 :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5576                 :        1189 :                  (const_string "V4SF")
    5577                 :          18 :               ]
    5578                 :          18 :               (const_string "<ssevecmode>")))])
    5579                 :          18 : 
    5580                 :         133 : ;; Modes for andnot3 not covered by VI and MODEF.
    5581                 :         572 : (define_mode_iterator ANDNOT_MODE [TF V1TI])
    5582                 :           0 : 
    5583                 :           0 : (define_insn "*andnot<mode>3"
    5584                 :          18 :   [(set (match_operand:ANDNOT_MODE 0 "register_operand" "=x,x,v,v")
    5585                 :         133 :         (and:ANDNOT_MODE
    5586                 :         602 :           (not:ANDNOT_MODE (match_operand:ANDNOT_MODE 1 "register_operand" "0,x,v,v"))
    5587                 :           0 :           (match_operand:ANDNOT_MODE 2 "vector_operand" "xBm,xjm,vm,v")))]
    5588                 :         982 :   "TARGET_SSE"
    5589                 :          86 : {
    5590                 :          86 :   char buf[128];
    5591                 :         116 :   const char *ops;
    5592                 :         498 :   const char *tmp
    5593                 :         477 :     = (which_alternative >= 2 ? "pandnq"
    5594                 :         881 :        : get_attr_mode (insn) == MODE_V4SF ? "andnps" : "pandn");
    5595                 :          47 : 
    5596                 :          86 :   switch (which_alternative)
    5597                 :          26 :     {
    5598                 :       30449 :     case 0:
    5599                 :          18 :       ops = "%s\t{%%2, %%0|%%0, %%2}";
    5600                 :          47 :       break;
    5601                 :         167 :     case 1:
    5602                 :       30477 :     case 2:
    5603                 :       30451 :       ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5604                 :       30451 :       break;
    5605                 :       30449 :     case 3:
    5606                 :       30596 :       ops = "v%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5607                 :       30449 :       break;
    5608                 :           0 :     default:
    5609                 :       19925 :       gcc_unreachable ();
    5610                 :       19925 :     }
    5611                 :       19992 : 
    5612                 :          68 :   snprintf (buf, sizeof (buf), ops, tmp);
    5613                 :        5807 :   output_asm_insn (buf, operands);
    5614                 :        5759 :   return "";
    5615                 :          12 : }
    5616                 :        2600 :   [(set_attr "isa" "noavx,avx_noavx512vl,avx512vl,avx512f_512")
    5617                 :        2547 :    (set_attr "addr" "*,gpr16,*,*")
    5618                 :        2509 :    (set_attr "type" "sselog")
    5619                 :        1932 :    (set (attr "prefix_data16")
    5620                 :        4462 :      (if_then_else
    5621                 :          12 :        (and (eq_attr "alternative" "0")
    5622                 :           2 :             (eq_attr "mode" "TI"))
    5623                 :          12 :        (const_string "1")
    5624                 :          12 :        (const_string "*")))
    5625                 :          25 :    (set_attr "prefix" "orig,vex,evex,evex")
    5626                 :           0 :    (set (attr "mode")
    5627                 :           0 :         (cond [(and (eq_attr "alternative" "3")
    5628                 :          20 :                     (match_test "!x86_evex_reg_mentioned_p (operands, 3)"))
    5629                 :          12 :                  (const_string "TI")
    5630                 :          25 :                (eq_attr "alternative" "2")
    5631                 :           0 :                  (const_string "TI")
    5632                 :       14979 :                (eq_attr "alternative" "3")
    5633                 :          24 :                  (const_string "XI")
    5634                 :          12 :                (match_test "TARGET_AVX")
    5635                 :           0 :                  (const_string "TI")
    5636                 :        9003 :                (ior (not (match_test "TARGET_SSE2"))
    5637                 :          12 :                     (match_test "optimize_function_for_size_p (cfun)"))
    5638                 :          12 :                  (const_string "V4SF")
    5639                 :             :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5640                 :         282 :                  (const_string "V4SF")
    5641                 :       77351 :               ]
    5642                 :       77364 :               (const_string "TI")))])
    5643                 :       77351 : 
    5644                 :           8 : (define_insn "<code><mode>3"
    5645                 :           8 :   [(set (match_operand:MODEF248 0 "register_operand" "=x,x,v,v")
    5646                 :          21 :         (any_logic:MODEF248
    5647                 :          21 :           (match_operand:MODEF248 1 "register_operand" "%0,x,v,v")
    5648                 :          32 :           (match_operand:MODEF248 2 "register_operand" "x,x,v,v")))]
    5649                 :           8 :   "TARGET_SSE"
    5650                 :        3754 : {
    5651                 :        3767 :   char buf[128];
    5652                 :        3754 :   const char *ops;
    5653                 :       33514 :   const char *suffix
    5654                 :       12556 :     = (get_attr_mode (insn) == MODE_V4SF) ? "ps" : "<ssevecmodesuffix>";
    5655                 :       19451 : 
    5656                 :       23186 :   switch (which_alternative)
    5657                 :           8 :     {
    5658                 :          30 :     case 0:
    5659                 :           8 :       ops = "<logic>%s\t{%%2, %%0|%%0, %%2}";
    5660                 :           8 :       break;
    5661                 :          33 :     case 2:
    5662                 :          31 :       if (!TARGET_AVX512DQ)
    5663                 :          43 :         {
    5664                 :          43 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    5665                 :          53 :           ops = "vp<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5666                 :          66 :           break;
    5667                 :          45 :         }
    5668                 :          57 :       /* FALLTHRU */
    5669                 :          47 :     case 1:
    5670                 :          47 :       ops = "v<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5671                 :          47 :       break;
    5672                 :          22 :     case 3:
    5673                 :          10 :       if (TARGET_AVX512DQ)
    5674                 :          10 :         ops = "v<logic>%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5675                 :             :       else
    5676                 :             :         {
    5677                 :           0 :           suffix = <MODE>mode == DFmode ? "q" : "d";
    5678                 :           0 :           ops = "vp<logic>%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5679                 :          36 :         }
    5680                 :           0 :       break;
    5681                 :           0 :     default:
    5682                 :           0 :       gcc_unreachable ();
    5683                 :           0 :     }
    5684                 :           0 : 
    5685                 :        3759 :   snprintf (buf, sizeof (buf), ops, suffix);
    5686                 :        3782 :   output_asm_insn (buf, operands);
    5687                 :        3782 :   return "";
    5688                 :          36 : }
    5689                 :          36 :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f_512")
    5690                 :          36 :    (set_attr "type" "sselog")
    5691                 :          36 :    (set_attr "prefix" "orig,vex,evex,evex")
    5692                 :        5350 :    (set (attr "mode")
    5693                 :          36 :         (cond [(eq_attr "alternative" "2")
    5694                 :          23 :                  (if_then_else (match_test "TARGET_AVX512DQ")
    5695                 :          23 :                                (const_string "<ssevecmode>")
    5696                 :             :                                (const_string "TI"))
    5697                 :             :                (eq_attr "alternative" "3")
    5698                 :             :                  (if_then_else (match_test "TARGET_AVX512DQ")
    5699                 :             :                                (const_string "<avx512fvecmode>")
    5700                 :             :                                (const_string "XI"))
    5701                 :             :                (match_test "TARGET_AVX")
    5702                 :             :                  (const_string "<ssevecmode>")
    5703                 :             :                (match_test "optimize_function_for_size_p (cfun)")
    5704                 :             :                  (const_string "V4SF")
    5705                 :             :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5706                 :             :                  (const_string "V4SF")
    5707                 :             :               ]
    5708                 :             :               (const_string "<ssevecmode>")))])
    5709                 :             : 
    5710                 :             : (define_expand "<code>tf3"
    5711                 :             :   [(set (match_operand:TF 0 "register_operand")
    5712                 :             :         (any_logic:TF
    5713                 :             :           (match_operand:TF 1 "vector_operand")
    5714                 :             :           (match_operand:TF 2 "vector_operand")))]
    5715                 :             :   "TARGET_SSE"
    5716                 :           0 :   "ix86_fixup_binary_operands_no_copy (<CODE>, TFmode, operands);")
    5717                 :             : 
    5718                 :             : (define_insn "*<code>tf3"
    5719                 :           0 :   [(set (match_operand:TF 0 "register_operand" "=x,x,v,v")
    5720                 :           0 :         (any_logic:TF
    5721                 :           0 :           (match_operand:TF 1 "vector_operand" "%0,x,v,v")
    5722                 :           0 :           (match_operand:TF 2 "vector_operand" "xBm,xm,vm,v")))]
    5723                 :        5018 :   "TARGET_SSE && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
    5724                 :        2253 : {
    5725                 :        2253 :   char buf[128];
    5726                 :        2253 :   const char *ops;
    5727                 :        2253 :   const char *tmp
    5728                 :        1568 :     = (which_alternative >= 2 ? "p<logic>q"
    5729                 :        2249 :        : get_attr_mode (insn) == MODE_V4SF ? "<logic>ps" : "p<logic>");
    5730                 :     1346941 : 
    5731                 :     1349194 :   switch (which_alternative)
    5732                 :          16 :     {
    5733                 :         296 :     case 0:
    5734                 :         296 :       ops = "%s\t{%%2, %%0|%%0, %%2}";
    5735                 :         296 :       break;
    5736                 :         306 :     case 1:
    5737                 :          15 :     case 2:
    5738                 :          15 :       ops = "v%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
    5739                 :          15 :       break;
    5740                 :           0 :     case 3:
    5741                 :           0 :       ops = "v%s\t{%%g2, %%g1, %%g0|%%g0, %%g1, %%g2}";
    5742                 :           5 :       break;
    5743                 :           0 :     default:
    5744                 :           0 :       gcc_unreachable ();
    5745                 :             :     }
    5746                 :             : 
    5747                 :        2253 :   snprintf (buf, sizeof (buf), ops, tmp);
    5748                 :        2253 :   output_asm_insn (buf, operands);
    5749                 :        2253 :   return "";
    5750                 :           0 : }
    5751                 :          30 :   [(set_attr "isa" "noavx,avx,avx512vl,avx512f_512")
    5752                 :           0 :    (set_attr "type" "sselog")
    5753                 :             :    (set (attr "prefix_data16")
    5754                 :         685 :      (if_then_else
    5755                 :             :        (and (eq_attr "alternative" "0")
    5756                 :          30 :             (eq_attr "mode" "TI"))
    5757                 :             :        (const_string "1")
    5758                 :             :        (const_string "*")))
    5759                 :             :    (set_attr "prefix" "orig,vex,evex,evex")
    5760                 :             :    (set (attr "mode")
    5761                 :             :         (cond [(eq_attr "alternative" "2")
    5762                 :           0 :                  (const_string "TI")
    5763                 :             :                (eq_attr "alternative" "3")
    5764                 :             :                  (const_string "QI")
    5765                 :             :                (match_test "TARGET_AVX")
    5766                 :        1402 :                  (const_string "TI")
    5767                 :             :                (ior (not (match_test "TARGET_SSE2"))
    5768                 :             :                     (match_test "optimize_function_for_size_p (cfun)"))
    5769                 :             :                  (const_string "V4SF")
    5770                 :             :                (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
    5771                 :        1402 :                  (const_string "V4SF")
    5772                 :             :               ]
    5773                 :             :               (const_string "TI")))])
    5774                 :             : 
    5775                 :             : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5776                 :             : ;;
    5777                 :             : ;; FMA floating point multiply/accumulate instructions.  These include
    5778                 :           0 : ;; scalar versions of the instructions as well as vector versions.
    5779                 :           0 : ;;
    5780                 :           0 : ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    5781                 :           5 : 
    5782                 :             : ;; The standard names for scalar FMA are only available with SSE math enabled.
    5783                 :             : ;; CPUID bit AVX512F enables evex encoded scalar and 512-bit fma.  It doesn't
    5784                 :             : ;; care about FMA bit, so we enable fma for TARGET_AVX512F even when TARGET_FMA
    5785                 :           0 : ;; and TARGET_FMA4 are both false.
    5786                 :           5 : ;; TODO: In theory AVX512F does not automatically imply FMA, and without FMA
    5787                 :             : ;; one must force the EVEX encoding of the fma insns.  Ideally we'd improve
    5788                 :             : ;; GAS to allow proper prefix selection.  However, for the moment all hardware
    5789                 :             : ;; that supports AVX512F also supports FMA so we can ignore this for now.
    5790                 :             : (define_mode_iterator FMAMODEM
    5791                 :           0 :   [(SF "TARGET_SSE_MATH && (TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F)")
    5792                 :             :    (DF "TARGET_SSE_MATH && (TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F)")
    5793                 :             :    (V4SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5794                 :             :    (V2DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5795                 :             :    (V8SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5796                 :          20 :    (V4DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5797                 :             :    (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    5798                 :             :    (V8DF "TARGET_AVX512F && TARGET_EVEX512")
    5799                 :             :    (HF "TARGET_AVX512FP16")
    5800                 :             :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    5801                 :          20 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    5802                 :             :    (V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
    5803                 :             :    (V8BF "TARGET_AVX10_2_256")
    5804                 :           0 :    (V16BF "TARGET_AVX10_2_256")
    5805                 :           0 :    (V32BF "TARGET_AVX10_2_512")])
    5806                 :           0 : 
    5807                 :           0 : (define_expand "fma<mode>4"
    5808                 :           0 :   [(set (match_operand:FMAMODEM 0 "register_operand")
    5809                 :           0 :         (fma:FMAMODEM
    5810                 :           0 :           (match_operand:FMAMODEM 1 "nonimmediate_operand")
    5811                 :           0 :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    5812                 :          99 :           (match_operand:FMAMODEM 3 "nonimmediate_operand")))])
    5813                 :             : 
    5814                 :             : (define_expand "fms<mode>4"
    5815                 :             :   [(set (match_operand:FMAMODEM 0 "register_operand")
    5816                 :             :         (fma:FMAMODEM
    5817                 :          99 :           (match_operand:FMAMODEM 1 "nonimmediate_operand")
    5818                 :             :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    5819                 :             :           (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))])
    5820                 :             : 
    5821                 :             : (define_expand "fnma<mode>4"
    5822                 :             :   [(set (match_operand:FMAMODEM 0 "register_operand")
    5823                 :             :         (fma:FMAMODEM
    5824                 :             :           (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand"))
    5825                 :             :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    5826                 :          25 :           (match_operand:FMAMODEM 3 "nonimmediate_operand")))])
    5827                 :             : 
    5828                 :             : (define_expand "fnms<mode>4"
    5829                 :             :   [(set (match_operand:FMAMODEM 0 "register_operand")
    5830                 :             :         (fma:FMAMODEM
    5831                 :          25 :           (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand"))
    5832                 :             :           (match_operand:FMAMODEM 2 "nonimmediate_operand")
    5833                 :           0 :           (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))])
    5834                 :           0 : 
    5835                 :           0 : ;; The builtins for intrinsics are not constrained by SSE math enabled.
    5836                 :           0 : (define_mode_iterator FMAMODE_AVX512
    5837                 :           0 :  [(SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    5838                 :           0 :   (DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    5839                 :           0 :   (V4SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5840                 :           0 :   (V2DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5841                 :          13 :   (V8SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5842                 :             :   (V4DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512VL")
    5843                 :             :   (V16SF "TARGET_AVX512F && TARGET_EVEX512")
    5844                 :             :   (V8DF "TARGET_AVX512F && TARGET_EVEX512")])
    5845                 :             : 
    5846                 :          13 : (define_mode_iterator FMAMODE
    5847                 :             :   [SF DF V4SF V2DF V8SF V4DF])
    5848                 :             : 
    5849                 :             : (define_expand "fma4i_fmadd_<mode>"
    5850                 :             :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    5851                 :             :         (fma:FMAMODE_AVX512
    5852                 :             :           (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand")
    5853                 :             :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    5854                 :             :           (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand")))])
    5855                 :             : 
    5856                 :           0 : (define_expand "fma4i_fmsub_<mode>"
    5857                 :          12 :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    5858                 :             :         (fma:FMAMODE_AVX512
    5859                 :             :           (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand")
    5860                 :             :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    5861                 :           0 :           (neg:FMAMODE_AVX512
    5862                 :           0 :             (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand"))))])
    5863                 :          12 : 
    5864                 :          12 : (define_expand "fma4i_fnmadd_<mode>"
    5865                 :          12 :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    5866                 :          12 :         (fma:FMAMODE_AVX512
    5867                 :          12 :           (neg:FMAMODE_AVX512
    5868                 :          12 :             (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand"))
    5869                 :          12 :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    5870                 :          12 :           (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand")))])
    5871                 :          12 : 
    5872                 :          10 : (define_expand "fma4i_fnmsub_<mode>"
    5873                 :             :   [(set (match_operand:FMAMODE_AVX512 0 "register_operand")
    5874                 :             :         (fma:FMAMODE_AVX512
    5875                 :             :           (neg:FMAMODE_AVX512
    5876                 :             :             (match_operand:FMAMODE_AVX512 1 "nonimmediate_operand"))
    5877                 :             :           (match_operand:FMAMODE_AVX512 2 "nonimmediate_operand")
    5878                 :             :           (neg:FMAMODE_AVX512
    5879                 :          10 :             (match_operand:FMAMODE_AVX512 3 "nonimmediate_operand"))))])
    5880                 :          10 : 
    5881                 :          10 : (define_expand "<avx512>_fmadd_<mode>_maskz<round_expand_name>"
    5882                 :          10 :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    5883                 :          10 :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    5884                 :          10 :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    5885                 :          10 :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    5886                 :          10 :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    5887                 :          10 :   "TARGET_AVX512F && <round_mode_condition>"
    5888                 :         175 : {
    5889                 :         175 :   emit_insn (gen_fma_fmadd_<mode>_maskz_1<round_expand_name> (
    5890                 :             :     operands[0], operands[1], operands[2], operands[3],
    5891                 :             :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    5892                 :         175 :   DONE;
    5893                 :             : })
    5894                 :             : 
    5895                 :             : (define_insn "*fma_fmadd_<mode>"
    5896                 :             :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    5897                 :             :         (fma:FMAMODE
    5898                 :             :           (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x")
    5899                 :             :           (match_operand:FMAMODE 2 "nonimmediate_operand" "vm,v,vm,x,m")
    5900                 :             :           (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x")))]
    5901                 :      153919 :   "TARGET_FMA || TARGET_FMA4"
    5902                 :             :   "@
    5903                 :       25746 :    vfmadd132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    5904                 :       23903 :    vfmadd213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    5905                 :       21472 :    vfmadd231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    5906                 :       26148 :    vfmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    5907                 :             :    vfmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    5908                 :             :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    5909                 :             :    (set_attr "type" "ssemuladd")
    5910                 :             :    (set_attr "mode" "<MODE>")])
    5911                 :             : 
    5912                 :             : ;; Suppose AVX-512F as baseline
    5913                 :             : (define_mode_iterator VFH_SF_AVX512VL
    5914                 :          27 :   [(V32HF "TARGET_AVX512FP16 && TARGET_EVEX512")
    5915                 :        1470 :    (V16HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    5916                 :         383 :    (V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
    5917                 :         787 :    (HF "TARGET_AVX512FP16")
    5918                 :       16431 :    SF (V16SF "TARGET_EVEX512")
    5919                 :        2629 :    (V8SF "TARGET_AVX512VL") (V4SF "TARGET_AVX512VL")
    5920                 :        8409 :    DF (V8DF "TARGET_EVEX512")
    5921                 :       16728 :    (V4DF "TARGET_AVX512VL") (V2DF "TARGET_AVX512VL")])
    5922                 :       28272 : 
    5923                 :       13503 : (define_insn "<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>"
    5924                 :       74573 :   [(set (match_operand:VFH_SF_AVX512VL 0 "register_operand" "=v,v,v")
    5925                 :       49170 :         (fma:VFH_SF_AVX512VL
    5926                 :       45802 :           (match_operand:VFH_SF_AVX512VL 1 "<bcst_round_nimm_predicate>" "%0,0,v")
    5927                 :       51612 :           (match_operand:VFH_SF_AVX512VL 2 "<bcst_round_nimm_predicate>" "<bcst_round_constraint>,v,<bcst_round_constraint>")
    5928                 :       94118 :           (match_operand:VFH_SF_AVX512VL 3 "<bcst_round_nimm_predicate>" "v,<bcst_round_constraint>,0")))]
    5929                 :       98263 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode_condition>"
    5930                 :       96728 :   "@
    5931                 :       44528 :    vfmadd132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    5932                 :       37627 :    vfmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    5933                 :      105012 :    vfmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    5934                 :       39044 :   [(set_attr "type" "ssemuladd")
    5935                 :       49643 :    (set_attr "prefix" "evex")
    5936                 :       14498 :    (set_attr "mode" "<MODE>")])
    5937                 :       44292 : 
    5938                 :       42854 : (define_expand "cond_fma<mode>"
    5939                 :       32186 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand")
    5940                 :      113300 :         (vec_merge:VFH_AVX512VL
    5941                 :        1104 :           (fma:VFH_AVX512VL
    5942                 :         501 :             (match_operand:VFH_AVX512VL 2 "vector_operand")
    5943                 :       14450 :             (match_operand:VFH_AVX512VL 3 "vector_operand")
    5944                 :       13920 :             (match_operand:VFH_AVX512VL 4 "vector_operand"))
    5945                 :       28495 :           (match_operand:VFH_AVX512VL 5 "nonimm_or_0_operand")
    5946                 :         125 :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    5947                 :    12189370 :   "TARGET_AVX512F"
    5948                 :       15165 : {
    5949                 :       13816 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    5950                 :       13999 :   emit_insn (gen_fma<mode>4 (tmp,
    5951                 :     6423307 :                              operands[2],
    5952                 :        1302 :                              operands[3],
    5953                 :     6422005 :                              operands[4]));
    5954                 :     6423128 :   emit_move_insn (operands[0], gen_rtx_VEC_MERGE (<MODE>mode,
    5955                 :     6423049 :                                                   tmp,
    5956                 :             :                                                   operands[5],
    5957                 :     2878261 :                                                   operands[1]));
    5958                 :     2878340 :   DONE;
    5959                 :     2845481 : })
    5960                 :     5551152 : 
    5961                 :         834 : (define_insn "<avx512>_fmadd_<mode>_mask<round_name>"
    5962                 :         834 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v")
    5963                 :         834 :         (vec_merge:VFH_AVX512VL
    5964                 :             :           (fma:VFH_AVX512VL
    5965                 :         834 :             (match_operand:VFH_AVX512VL 1 "nonimmediate_operand" "0,0")
    5966                 :         834 :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    5967                 :             :             (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
    5968                 :         834 :           (match_dup 1)
    5969                 :         834 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    5970                 :         993 :   "TARGET_AVX512F && <round_mode_condition>"
    5971                 :         834 :   "@
    5972                 :         834 :    vfmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    5973                 :             :    vfmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    5974                 :         834 :   [(set_attr "type" "ssemuladd")
    5975                 :         834 :    (set_attr "prefix" "evex")
    5976                 :        1212 :    (set_attr "mode" "<MODE>")])
    5977                 :         816 : 
    5978                 :        1650 : (define_insn "<avx512>_fmadd_<mode>_mask3<round_name>"
    5979                 :          18 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    5980                 :         816 :         (vec_merge:VFH_AVX512VL
    5981                 :         816 :           (fma:VFH_AVX512VL
    5982                 :        1051 :             (match_operand:VFH_AVX512VL 1 "<round_nimm_predicate>" "%v")
    5983                 :         816 :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    5984                 :         816 :             (match_operand:VFH_AVX512VL 3 "nonimmediate_operand" "0"))
    5985                 :         816 :           (match_dup 3)
    5986                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    5987                 :         383 :   "TARGET_AVX512F && <round_mode_condition>"
    5988                 :         813 :   "vfmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    5989                 :         813 :   [(set_attr "type" "ssemuladd")
    5990                 :         103 :    (set_attr "prefix" "evex")
    5991                 :         774 :    (set_attr "mode" "<MODE>")])
    5992                 :         774 : 
    5993                 :        1080 : (define_insn "*fma_fmsub_<mode>"
    5994                 :             :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    5995                 :         774 :         (fma:FMAMODE
    5996                 :         811 :           (match_operand:FMAMODE   1 "nonimmediate_operand" "%0,0,v,x,x")
    5997                 :         103 :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    5998                 :         361 :           (neg:FMAMODE
    5999                 :         995 :             (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x"))))]
    6000                 :       14595 :   "TARGET_FMA || TARGET_FMA4"
    6001                 :         361 :   "@
    6002                 :         953 :    vfmsub132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    6003                 :         686 :    vfmsub213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    6004                 :         663 :    vfmsub231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    6005                 :         874 :    vfmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    6006                 :          66 :    vfmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    6007                 :             :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    6008                 :             :    (set_attr "type" "ssemuladd")
    6009                 :             :    (set_attr "mode" "<MODE>")])
    6010                 :             : 
    6011                 :             : (define_expand "<avx512>_fmsub_<mode>_maskz<round_expand_name>"
    6012                 :             :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    6013                 :             :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    6014                 :             :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    6015                 :             :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    6016                 :             :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    6017                 :             :   "TARGET_AVX512F && <round_mode_condition>"
    6018                 :         175 : {
    6019                 :         175 :   emit_insn (gen_fma_fmsub_<mode>_maskz_1<round_expand_name> (
    6020                 :             :     operands[0], operands[1], operands[2], operands[3],
    6021                 :             :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    6022                 :         175 :   DONE;
    6023                 :             : })
    6024                 :             : 
    6025                 :             : (define_insn "<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>"
    6026                 :             :   [(set (match_operand:VFH_SF_AVX512VL 0 "register_operand" "=v,v,v")
    6027                 :             :         (fma:VFH_SF_AVX512VL
    6028                 :             :           (match_operand:VFH_SF_AVX512VL   1 "<bcst_round_nimm_predicate>" "%0,0,v")
    6029                 :             :           (match_operand:VFH_SF_AVX512VL   2 "<bcst_round_nimm_predicate>" "<bcst_round_constraint>,v,<bcst_round_constraint>")
    6030                 :             :           (neg:VFH_SF_AVX512VL
    6031                 :             :             (match_operand:VFH_SF_AVX512VL 3 "<bcst_round_nimm_predicate>" "v,<bcst_round_constraint>,0"))))]
    6032                 :        1525 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode_condition>"
    6033                 :          22 :   "@
    6034                 :             :    vfmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    6035                 :             :    vfmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    6036                 :        6152 :    vfmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    6037                 :        6152 :   [(set_attr "type" "ssemuladd")
    6038                 :        5940 :    (set_attr "prefix" "evex")
    6039                 :       11496 :    (set_attr "mode" "<MODE>")])
    6040                 :             : 
    6041                 :        5430 : (define_expand "cond_fms<mode>"
    6042                 :        5430 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand")
    6043                 :        5416 :         (vec_merge:VFH_AVX512VL
    6044                 :       11897 :           (fma:VFH_AVX512VL
    6045                 :             :             (match_operand:VFH_AVX512VL 2 "vector_operand")
    6046                 :             :             (match_operand:VFH_AVX512VL 3 "vector_operand")
    6047                 :             :             (neg:VFH_AVX512VL
    6048                 :             :               (match_operand:VFH_AVX512VL 4 "vector_operand")))
    6049                 :          85 :           (match_operand:VFH_AVX512VL 5 "nonimm_or_0_operand")
    6050                 :             :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    6051                 :             :   "TARGET_AVX512F"
    6052                 :          68 : {
    6053                 :         136 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    6054                 :          68 :   emit_insn (gen_fms<mode>4 (tmp,
    6055                 :          81 :                              operands[2],
    6056                 :          83 :                              operands[3],
    6057                 :          59 :                              operands[4]));
    6058                 :          68 :   emit_move_insn (operands[0], gen_rtx_VEC_MERGE (<MODE>mode,
    6059                 :          85 :                                                   tmp,
    6060                 :          85 :                                                   operands[5],
    6061                 :          98 :                                                   operands[1]));
    6062                 :          81 :   DONE;
    6063                 :         105 : })
    6064                 :         114 : 
    6065                 :          83 : (define_insn "<avx512>_fmsub_<mode>_mask<round_name>"
    6066                 :          55 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v")
    6067                 :          55 :         (vec_merge:VFH_AVX512VL
    6068                 :          55 :           (fma:VFH_AVX512VL
    6069                 :          55 :             (match_operand:VFH_AVX512VL 1 "nonimmediate_operand" "0,0")
    6070                 :          42 :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    6071                 :          42 :             (neg:VFH_AVX512VL
    6072                 :             :               (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
    6073                 :             :           (match_dup 1)
    6074                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    6075                 :         975 :   "TARGET_AVX512F && <round_mode_condition>"
    6076                 :             :   "@
    6077                 :             :    vfmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    6078                 :             :    vfmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    6079                 :             :   [(set_attr "type" "ssemuladd")
    6080                 :             :    (set_attr "prefix" "evex")
    6081                 :         376 :    (set_attr "mode" "<MODE>")])
    6082                 :             : 
    6083                 :             : (define_insn "<avx512>_fmsub_<mode>_mask3<round_name>"
    6084                 :             :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    6085                 :             :         (vec_merge:VFH_AVX512VL
    6086                 :             :           (fma:VFH_AVX512VL
    6087                 :        1049 :             (match_operand:VFH_AVX512VL 1 "<round_nimm_predicate>" "%v")
    6088                 :             :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    6089                 :             :             (neg:VFH_AVX512VL
    6090                 :             :               (match_operand:VFH_AVX512VL 3 "nonimmediate_operand" "0")))
    6091                 :             :           (match_dup 3)
    6092                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    6093                 :         370 :   "TARGET_AVX512F && <round_mode_condition>"
    6094                 :             :   "vfmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    6095                 :         106 :   [(set_attr "type" "ssemuladd")
    6096                 :             :    (set_attr "prefix" "evex")
    6097                 :             :    (set_attr "mode" "<MODE>")])
    6098                 :             : 
    6099                 :         304 : (define_insn "*fma_fnmadd_<mode>"
    6100                 :             :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    6101                 :          50 :         (fma:FMAMODE
    6102                 :         106 :           (neg:FMAMODE
    6103                 :         106 :             (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x"))
    6104                 :         106 :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    6105                 :         969 :           (match_operand:FMAMODE   3 "nonimmediate_operand" "v,vm,0,xm,x")))]
    6106                 :       31693 :   "TARGET_FMA || TARGET_FMA4"
    6107                 :         106 :   "@
    6108                 :        8487 :    vfnmadd132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    6109                 :        6030 :    vfnmadd213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    6110                 :        5685 :    vfnmadd231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    6111                 :        8706 :    vfnmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    6112                 :             :    vfnmadd<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    6113                 :             :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    6114                 :             :    (set_attr "type" "ssemuladd")
    6115                 :             :    (set_attr "mode" "<MODE>")])
    6116                 :             : 
    6117                 :             : (define_expand "<avx512>_fnmadd_<mode>_maskz<round_expand_name>"
    6118                 :             :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    6119                 :             :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    6120                 :             :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    6121                 :             :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    6122                 :             :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    6123                 :             :   "TARGET_AVX512F && <round_mode_condition>"
    6124                 :         175 : {
    6125                 :         175 :   emit_insn (gen_fma_fnmadd_<mode>_maskz_1<round_expand_name> (
    6126                 :             :     operands[0], operands[1], operands[2], operands[3],
    6127                 :             :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    6128                 :         175 :   DONE;
    6129                 :             : })
    6130                 :             : 
    6131                 :             : (define_insn "<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>"
    6132                 :             :   [(set (match_operand:VFH_SF_AVX512VL 0 "register_operand" "=v,v,v")
    6133                 :             :         (fma:VFH_SF_AVX512VL
    6134                 :             :           (neg:VFH_SF_AVX512VL
    6135                 :             :             (match_operand:VFH_SF_AVX512VL 1 "<bcst_round_nimm_predicate>" "%0,0,v"))
    6136                 :             :           (match_operand:VFH_SF_AVX512VL   2 "<bcst_round_nimm_predicate>" "<bcst_round_constraint>,v,<bcst_round_constraint>")
    6137                 :             :           (match_operand:VFH_SF_AVX512VL   3 "<bcst_round_nimm_predicate>" "v,<bcst_round_constraint>,0")))]
    6138                 :        9792 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode_condition>"
    6139                 :         229 :   "@
    6140                 :             :    vfnmadd132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    6141                 :             :    vfnmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    6142                 :        8082 :    vfnmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    6143                 :        8082 :   [(set_attr "type" "ssemuladd")
    6144                 :        8127 :    (set_attr "prefix" "evex")
    6145                 :       15595 :    (set_attr "mode" "<MODE>")])
    6146                 :             : 
    6147                 :        7608 : (define_expand "cond_fnma<mode>"
    6148                 :        7571 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand")
    6149                 :        7571 :         (vec_merge:VFH_AVX512VL
    6150                 :       16234 :           (fma:VFH_AVX512VL
    6151                 :             :             (neg:VFH_AVX512VL
    6152                 :             :               (match_operand:VFH_AVX512VL 2 "vector_operand"))
    6153                 :             :             (match_operand:VFH_AVX512VL 3 "vector_operand")
    6154                 :             :             (match_operand:VFH_AVX512VL 4 "vector_operand"))
    6155                 :          35 :           (match_operand:VFH_AVX512VL 5 "nonimm_or_0_operand")
    6156                 :             :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    6157                 :             :   "TARGET_AVX512F"
    6158                 :          56 : {
    6159                 :         112 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    6160                 :          56 :   emit_insn (gen_fnma<mode>4 (tmp,
    6161                 :         103 :                               operands[2],
    6162                 :          23 :                               operands[3],
    6163                 :          22 :                               operands[4]));
    6164                 :          56 :   emit_move_insn (operands[0], gen_rtx_VEC_MERGE (<MODE>mode,
    6165                 :          35 :                                                   tmp,
    6166                 :          35 :                                                   operands[5],
    6167                 :          48 :                                                   operands[1]));
    6168                 :          69 :   DONE;
    6169                 :         103 : })
    6170                 :         112 : 
    6171                 :          90 : (define_insn "<avx512>_fnmadd_<mode>_mask<round_name>"
    6172                 :          90 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v")
    6173                 :          90 :         (vec_merge:VFH_AVX512VL
    6174                 :          90 :           (fma:VFH_AVX512VL
    6175                 :          90 :             (neg:VFH_AVX512VL
    6176                 :          77 :               (match_operand:VFH_AVX512VL 1 "nonimmediate_operand" "0,0"))
    6177                 :          77 :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    6178                 :             :             (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>"))
    6179                 :             :           (match_dup 1)
    6180                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    6181                 :         975 :   "TARGET_AVX512F && <round_mode_condition>"
    6182                 :             :   "@
    6183                 :             :    vfnmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    6184                 :             :    vfnmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    6185                 :             :   [(set_attr "type" "ssemuladd")
    6186                 :             :    (set_attr "prefix" "evex")
    6187                 :         376 :    (set_attr "mode" "<MODE>")])
    6188                 :             : 
    6189                 :             : (define_insn "<avx512>_fnmadd_<mode>_mask3<round_name>"
    6190                 :             :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    6191                 :             :         (vec_merge:VFH_AVX512VL
    6192                 :             :           (fma:VFH_AVX512VL
    6193                 :        1049 :             (neg:VFH_AVX512VL
    6194                 :             :               (match_operand:VFH_AVX512VL 1 "<round_nimm_predicate>" "%v"))
    6195                 :             :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    6196                 :             :             (match_operand:VFH_AVX512VL 3 "nonimmediate_operand" "0"))
    6197                 :             :           (match_dup 3)
    6198                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    6199                 :         368 :   "TARGET_AVX512F && <round_mode_condition>"
    6200                 :             :   "vfnmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    6201                 :         103 :   [(set_attr "type" "ssemuladd")
    6202                 :             :    (set_attr "prefix" "evex")
    6203                 :             :    (set_attr "mode" "<MODE>")])
    6204                 :             : 
    6205                 :         304 : (define_insn "*fma_fnmsub_<mode>"
    6206                 :             :   [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x")
    6207                 :          37 :         (fma:FMAMODE
    6208                 :         103 :           (neg:FMAMODE
    6209                 :         103 :             (match_operand:FMAMODE 1 "nonimmediate_operand" "%0,0,v,x,x"))
    6210                 :         103 :           (match_operand:FMAMODE   2 "nonimmediate_operand" "vm,v,vm,x,m")
    6211                 :         966 :           (neg:FMAMODE
    6212                 :         103 :             (match_operand:FMAMODE 3 "nonimmediate_operand" "v,vm,0,xm,x"))))]
    6213                 :        6500 :   "TARGET_FMA || TARGET_FMA4"
    6214                 :         103 :   "@
    6215                 :         734 :    vfnmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    6216                 :         673 :    vfnmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    6217                 :         673 :    vfnmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}
    6218                 :        1276 :    vfnmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    6219                 :           0 :    vfnmsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    6220                 :         143 :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    6221                 :         142 :    (set_attr "type" "ssemuladd")
    6222                 :         142 :    (set_attr "mode" "<MODE>")])
    6223                 :         285 : 
    6224                 :             : (define_expand "<avx512>_fnmsub_<mode>_maskz<round_expand_name>"
    6225                 :             :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    6226                 :             :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    6227                 :       42846 :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    6228                 :             :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    6229                 :             :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    6230                 :             :   "TARGET_AVX512F && <round_mode_condition>"
    6231                 :       43021 : {
    6232                 :       43021 :   emit_insn (gen_fma_fnmsub_<mode>_maskz_1<round_expand_name> (
    6233                 :       42846 :     operands[0], operands[1], operands[2], operands[3],
    6234                 :       42846 :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    6235                 :       43021 :   DONE;
    6236                 :       42846 : })
    6237                 :             : 
    6238                 :       42836 : (define_insn "<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>"
    6239                 :       42836 :   [(set (match_operand:VFH_SF_AVX512VL 0 "register_operand" "=v,v,v")
    6240                 :       42836 :         (fma:VFH_SF_AVX512VL
    6241                 :             :           (neg:VFH_SF_AVX512VL
    6242                 :       41527 :             (match_operand:VFH_SF_AVX512VL 1 "<bcst_round_nimm_predicate>" "%0,0,v"))
    6243                 :       41527 :           (match_operand:VFH_SF_AVX512VL 2 "<bcst_round_nimm_predicate>" "<bcst_round_constraint>,v,<bcst_round_constraint>")
    6244                 :       41527 :           (neg:VFH_SF_AVX512VL
    6245                 :       41527 :             (match_operand:VFH_SF_AVX512VL 3 "<bcst_round_nimm_predicate>" "v,<bcst_round_constraint>,0"))))]
    6246                 :        1198 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode_condition>"
    6247                 :       41570 :   "@
    6248                 :             :    vfnmsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    6249                 :          23 :    vfnmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    6250                 :        2202 :    vfnmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    6251                 :        2202 :   [(set_attr "type" "ssemuladd")
    6252                 :         297 :    (set_attr "prefix" "evex")
    6253                 :        2121 :    (set_attr "mode" "<MODE>")])
    6254                 :        2115 : 
    6255                 :        2115 : (define_expand "cond_fnms<mode>"
    6256                 :        4232 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand")
    6257                 :             :         (vec_merge:VFH_AVX512VL
    6258                 :         983 :           (fma:VFH_AVX512VL
    6259                 :             :             (neg:VFH_AVX512VL
    6260                 :             :               (match_operand:VFH_AVX512VL 2 "vector_operand"))
    6261                 :             :             (match_operand:VFH_AVX512VL 3 "vector_operand")
    6262                 :          91 :             (neg:VFH_AVX512VL
    6263                 :             :               (match_operand:VFH_AVX512VL 4 "vector_operand")))
    6264                 :             :           (match_operand:VFH_AVX512VL 5 "nonimm_or_0_operand")
    6265                 :             :           (match_operand:<avx512fmaskmode> 1 "register_operand")))]
    6266                 :             :   "TARGET_AVX512F"
    6267                 :          54 : {
    6268                 :         157 :   rtx tmp = gen_reg_rtx (<MODE>mode);
    6269                 :          67 :   emit_insn (gen_fnms<mode>4 (tmp,
    6270                 :          78 :                               operands[2],
    6271                 :          91 :                               operands[3],
    6272                 :          91 :                               operands[4]));
    6273                 :          55 :   emit_move_insn (operands[0], gen_rtx_VEC_MERGE (<MODE>mode,
    6274                 :         117 :                                                   tmp,
    6275                 :         105 :                                                   operands[5],
    6276                 :          69 :                                                   operands[1]));
    6277                 :          54 :   DONE;
    6278                 :          78 : })
    6279                 :          35 : 
    6280                 :          35 : (define_insn "<avx512>_fnmsub_<mode>_mask<round_name>"
    6281                 :          35 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v")
    6282                 :          35 :         (vec_merge:VFH_AVX512VL
    6283                 :           9 :           (fma:VFH_AVX512VL
    6284                 :           9 :             (neg:VFH_AVX512VL
    6285                 :             :               (match_operand:VFH_AVX512VL 1 "nonimmediate_operand" "0,0"))
    6286                 :             :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    6287                 :             :             (neg:VFH_AVX512VL
    6288                 :             :               (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")))
    6289                 :           1 :           (match_dup 1)
    6290                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    6291                 :         971 :   "TARGET_AVX512F && <round_mode_condition>"
    6292                 :             :   "@
    6293                 :             :    vfnmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    6294                 :             :    vfnmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    6295                 :             :   [(set_attr "type" "ssemuladd")
    6296                 :             :    (set_attr "prefix" "evex")
    6297                 :         376 :    (set_attr "mode" "<MODE>")])
    6298                 :             : 
    6299                 :             : (define_insn "<avx512>_fnmsub_<mode>_mask3<round_name>"
    6300                 :           1 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    6301                 :             :         (vec_merge:VFH_AVX512VL
    6302                 :             :           (fma:VFH_AVX512VL
    6303                 :        1049 :             (neg:VFH_AVX512VL
    6304                 :             :               (match_operand:VFH_AVX512VL 1 "<round_nimm_predicate>" "%v"))
    6305                 :           1 :             (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    6306                 :             :             (neg:VFH_AVX512VL
    6307                 :             :               (match_operand:VFH_AVX512VL 3 "nonimmediate_operand" "0")))
    6308                 :             :           (match_dup 3)
    6309                 :             :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    6310                 :         368 :   "TARGET_AVX512F && <round_mode_condition>"
    6311                 :          52 :   "vfnmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    6312                 :             :   [(set_attr "type" "ssemuladd")
    6313                 :             :    (set_attr "prefix" "evex")
    6314                 :             :    (set_attr "mode" "<MODE>")])
    6315                 :             : 
    6316                 :         357 : ;; FMA parallel floating point multiply addsub and subadd operations.
    6317                 :             : 
    6318                 :             : ;; It would be possible to represent these without the UNSPEC as
    6319                 :             : ;;
    6320                 :             : ;; (vec_merge
    6321                 :           1 : ;;   (fma op1 op2 op3)
    6322                 :         863 : ;;   (fma op1 op2 (neg op3))
    6323                 :             : ;;   (merge-const))
    6324                 :             : ;;
    6325                 :             : ;; But this doesn't seem useful in practice.
    6326                 :             : 
    6327                 :           4 : (define_expand "vec_fmaddsub<mode>4"
    6328                 :         115 :   [(set (match_operand:VFH 0 "register_operand")
    6329                 :             :         (unspec:VFH
    6330                 :             :           [(match_operand:VFH 1 "nonimmediate_operand")
    6331                 :             :            (match_operand:VFH 2 "nonimmediate_operand")
    6332                 :           4 :            (match_operand:VFH 3 "nonimmediate_operand")]
    6333                 :          80 :           UNSPEC_FMADDSUB))]
    6334                 :          12 :   "TARGET_FMA || TARGET_FMA4 || (<MODE_SIZE> == 64 || TARGET_AVX512VL)")
    6335                 :          35 : 
    6336                 :          35 : (define_expand "vec_fmsubadd<mode>4"
    6337                 :          35 :   [(set (match_operand:VFH 0 "register_operand")
    6338                 :          35 :         (unspec:VFH
    6339                 :          35 :           [(match_operand:VFH 1 "nonimmediate_operand")
    6340                 :          35 :            (match_operand:VFH 2 "nonimmediate_operand")
    6341                 :          35 :            (neg:VFH
    6342                 :          35 :              (match_operand:VFH 3 "nonimmediate_operand"))]
    6343                 :          25 :           UNSPEC_FMADDSUB))]
    6344                 :          33 :   "TARGET_FMA || TARGET_FMA4 || (<MODE_SIZE> == 64 || TARGET_AVX512VL)")
    6345                 :             : 
    6346                 :             : (define_expand "fmaddsub_<mode>"
    6347                 :             :   [(set (match_operand:VF 0 "register_operand")
    6348                 :           2 :         (unspec:VF
    6349                 :          10 :           [(match_operand:VF 1 "nonimmediate_operand")
    6350                 :           0 :            (match_operand:VF 2 "nonimmediate_operand")
    6351                 :          10 :            (match_operand:VF 3 "nonimmediate_operand")]
    6352                 :          10 :           UNSPEC_FMADDSUB))]
    6353                 :          10 :   "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F")
    6354                 :          10 : 
    6355                 :          10 : (define_expand "<avx512>_fmaddsub_<mode>_maskz<round_expand_name>"
    6356                 :          20 :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    6357                 :          20 :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    6358                 :          20 :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    6359                 :          21 :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    6360                 :          76 :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    6361                 :          10 :   "TARGET_AVX512F"
    6362                 :         261 : {
    6363                 :         261 :   emit_insn (gen_fma_fmaddsub_<mode>_maskz_1<round_expand_name> (
    6364                 :          11 :     operands[0], operands[1], operands[2], operands[3],
    6365                 :          10 :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    6366                 :         261 :   DONE;
    6367                 :          56 : })
    6368                 :          56 : 
    6369                 :          56 : (define_expand "<avx512>_fmsubadd_<mode>_maskz<round_expand_name>"
    6370                 :          56 :   [(match_operand:VFH_AVX512VL 0 "register_operand")
    6371                 :          56 :    (match_operand:VFH_AVX512VL 1 "<round_expand_nimm_predicate>")
    6372                 :          56 :    (match_operand:VFH_AVX512VL 2 "<round_expand_nimm_predicate>")
    6373                 :          56 :    (match_operand:VFH_AVX512VL 3 "<round_expand_nimm_predicate>")
    6374                 :          56 :    (match_operand:<avx512fmaskmode> 4 "register_operand")]
    6375                 :          44 :   "TARGET_AVX512F"
    6376                 :         161 : {
    6377                 :          77 :   emit_insn (gen_fma_fmsubadd_<mode>_maskz_1<round_expand_name> (
    6378                 :             :     operands[0], operands[1], operands[2], operands[3],
    6379                 :             :     CONST0_RTX (<MODE>mode), operands[4]<round_expand_operand>));
    6380                 :          77 :   DONE;
    6381                 :          40 : })
    6382                 :             : 
    6383                 :             : (define_insn "*fma_fmaddsub_<mode>"
    6384                 :             :   [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x")
    6385                 :             :         (unspec:VF_128_256
    6386                 :             :           [(match_operand:VF_128_256 1 "nonimmediate_operand" "%0,0,v,x,x")
    6387                 :             :            (match_operand:VF_128_256 2 "nonimmediate_operand" "vm,v,vm,x,m")
    6388                 :             :            (match_operand:VF_128_256 3 "nonimmediate_operand" "v,vm,0,xm,x")]
    6389                 :             :           UNSPEC_FMADDSUB))]
    6390                 :        1221 :   "TARGET_FMA || TARGET_FMA4"
    6391                 :             :   "@
    6392                 :          24 :    vfmaddsub132<ssemodesuffix>\t{%2, %3, %0|%0, %3, %2}
    6393                 :         126 :    vfmaddsub213<ssemodesuffix>\t{%3, %2, %0|%0, %2, %3}
    6394                 :           0 :    vfmaddsub231<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}
    6395                 :           0 :    vfmaddsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}
    6396                 :             :    vfmaddsub<ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}"
    6397                 :             :   [(set_attr "isa" "fma,fma,fma,fma4,fma4")
    6398                 :          24 :    (set_attr "type" "ssemuladd")
    6399                 :         127 :    (set_attr "mode" "<MODE>")])
    6400                 :         116 : 
    6401                 :         150 : (define_insn "<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>"
    6402                 :         150 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v,v")
    6403                 :         150 :         (unspec:VFH_AVX512VL
    6404                 :         150 :           [(match_operand:VFH_AVX512VL 1 "<round_nimm_predicate>" "%0,0,v")
    6405                 :         174 :            (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v,<round_constraint>")
    6406                 :         181 :            (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>,0")]
    6407                 :         139 :           UNSPEC_FMADDSUB))]
    6408                 :         720 :   "TARGET_AVX512F && <sd_mask_mode512bit_condition> && <round_mode_condition>"
    6409                 :         121 :   "@
    6410                 :          67 :    vfmaddsub132<ssemodesuffix>\t{<round_sd_mask_op4>%2, %3, %0<sd_mask_op4>|%0<sd_mask_op4>, %3, %2<round_sd_mask_op4>}
    6411                 :          67 :    vfmaddsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>}
    6412                 :          91 :    vfmaddsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}"
    6413                 :         153 :   [(set_attr "type" "ssemuladd")
    6414                 :         467 :    (set_attr "prefix" "evex")
    6415                 :          43 :    (set_attr "mode" "<MODE>")])
    6416                 :           0 : 
    6417                 :           0 : (define_insn "<avx512>_fmaddsub_<mode>_mask<round_name>"
    6418                 :          36 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v,v")
    6419                 :          40 :         (vec_merge:VFH_AVX512VL
    6420                 :        1503 :           (unspec:VFH_AVX512VL
    6421                 :          10 :             [(match_operand:VFH_AVX512VL 1 "register_operand" "0,0")
    6422                 :          10 :              (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>,v")
    6423                 :          10 :              (match_operand:VFH_AVX512VL 3 "<round_nimm_predicate>" "v,<round_constraint>")]
    6424                 :          22 :             UNSPEC_FMADDSUB)
    6425                 :          10 :           (match_dup 1)
    6426                 :          10 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk,Yk")))]
    6427                 :        1195 :   "TARGET_AVX512F && <round_mode_condition>"
    6428                 :          10 :   "@
    6429                 :          22 :    vfmaddsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, %2<round_op5>}
    6430                 :           0 :    vfmaddsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, %3<round_op5>}"
    6431                 :          69 :   [(set_attr "type" "ssemuladd")
    6432                 :          23 :    (set_attr "prefix" "evex")
    6433                 :         338 :    (set_attr "mode" "<MODE>")])
    6434                 :             : 
    6435                 :          40 : (define_insn "<avx512>_fmaddsub_<mode>_mask3<round_name>"
    6436                 :           0 :   [(set (match_operand:VFH_AVX512VL 0 "register_operand" "=v")
    6437                 :           0 :         (vec_merge:VFH_AVX512VL
    6438                 :          69 :           (unspec:VFH_AVX512VL
    6439                 :        1435 :             [(match_operand:VFH_AVX512VL 1 "nonimmediate_operand" "v")
    6440                 :          92 :              (match_operand:VFH_AVX512VL 2 "<round_nimm_predicate>" "<round_constraint>")
    6441                 :         132 :              (match_operand:VFH_AVX512VL 3 "nonimmediate_operand" "0")]
    6442                 :          92 :             UNSPEC_FMADDSUB)
    6443                 :          92 :           (match_dup 3)
    6444                 :          92 :           (match_operand:<avx512fmaskmode> 4 "register_operand" "Yk")))]
    6445                 :         437 :   "TARGET_AVX512F && <round_mode_condition>"
    6446                 :          92 :   "vfmaddsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, %2<round_op5>}"
    6447                 :          92 :   [(set_attr "type" "ssemuladd")
    6448                 :          35 :    (set_attr "prefix" "evex")
    6449                 :           0 :    (set_attr "mode" "<MODE>")])
    6450                 :           0 : 
    6451                 :         322 : (define_insn "*fma_fmsubadd_<mode>"
    6452                 :             :   [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x")
    6453                 :          12 :         (unspec:VF_128_256
    6454                 :             :           [(match_operand:VF_128_256   1 "nonimmediate_operand" "%0,0,v,x,x")
    6455                 :             :            (match_operand:VF_128_256   2 "nonimmediate_operand" "vm,v,vm,x,m")
    6456                 :           0 :            (neg:VF_128_256
    6457