LCOV - code coverage report
Current view: top level - gcc/config/i386 - predicates.md (source / functions) Coverage Total Hit
Test: gcc.info Lines: 86.6 % 1472 1275
Test Date: 2026-10-03 16:17:38 Functions: 98.0 % 249 244
Legend: Lines:     hit not hit

            Line data    Source code
       1              : ;; Predicate definitions for IA-32 and x86-64.
       2              : ;; Copyright (C) 2004-2026 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              : ;; Return true if OP is either a i387 or SSE fp register.
      21              : (define_predicate "any_fp_register_operand"
      22              :   (and (match_code "reg")
      23    134288277 :        (match_test "ANY_FP_REGNO_P (REGNO (op))")))
      24        40558 : 
      25              : ;; Return true if OP is an i387 fp register.
      26              : (define_predicate "fp_register_operand"
      27              :   (and (match_code "reg")
      28      1543331 :        (match_test "STACK_REGNO_P (REGNO (op))")))
      29      1454921 : 
      30    442080177 : ;; True if the operand is a GENERAL class register.
      31              : (define_predicate "general_reg_operand"
      32              :   (and (match_code "reg")
      33    276561701 :        (match_test "GENERAL_REGNO_P (REGNO (op))")))
      34    208256529 : 
      35    460476984 : ;; True if the operand is an INDEX class register.
      36              : (define_predicate "index_reg_operand"
      37              :   (and (match_code "reg")
      38       674265 :        (match_test "INDEX_REGNO_P (REGNO (op))")))
      39       674190 : 
      40       674962 : ;; True if the operand is a nonimmediate operand with GENERAL class register.
      41              : (define_predicate "nonimmediate_gr_operand"
      42              :   (if_then_else (match_code "reg")
      43     57644784 :     (match_test "GENERAL_REGNO_P (REGNO (op))")
      44     63933153 :     (match_operand 0 "nonimmediate_operand")))
      45     80013917 : 
      46              : ;; True if the operand is a general operand with GENERAL class register.
      47              : (define_predicate "general_gr_operand"
      48     93408720 :   (if_then_else (match_code "reg")
      49     40628793 :     (match_test "GENERAL_REGNO_P (REGNO (op))")
      50    118520917 :     (match_operand 0 "general_operand")))
      51              : 
      52              : ;; True if the operand is an MMX register.
      53              : (define_predicate "mmx_reg_operand"
      54     40106276 :   (and (match_code "reg")
      55          192 :        (match_test "MMX_REGNO_P (REGNO (op))")))
      56     40106276 : 
      57              : ;; Match register operands, but include memory operands for
      58              : ;; !TARGET_MMX_WITH_SSE.
      59              : (define_predicate "register_mmxmem_operand"
      60       635979 :   (ior (match_operand 0 "register_operand")
      61           12 :        (and (not (match_test "TARGET_MMX_WITH_SSE"))
      62       635979 :             (match_operand 0 "memory_operand"))))
      63              : 
      64              : ;; True if the operand is an SSE register.
      65    161795679 : (define_predicate "sse_reg_operand"
      66              :   (and (match_code "reg")
      67    161795679 :        (match_test "SSE_REGNO_P (REGNO (op))")))
      68      1704354 : 
      69              : ;; Return true if op is a QImode register.
      70              : (define_predicate "any_QIreg_operand"
      71              :   (and (match_code "reg")
      72      8160985 :        (match_test "ANY_QI_REGNO_P (REGNO (op))")))
      73      3825637 : 
      74      9726640 : ;; Return true if op is one of QImode registers: %[abcd][hl].
      75              : (define_predicate "QIreg_operand"
      76              :   (and (match_code "reg")
      77      2304496 :        (match_test "QI_REGNO_P (REGNO (op))")))
      78      2174860 : 
      79      6129591 : ;; Return true if op is a QImode register operand other than %[abcd][hl].
      80              : (define_predicate "ext_QIreg_operand"
      81      3325039 :   (and (match_test "TARGET_64BIT")
      82      3325342 :        (match_code "reg")
      83       965098 :        (not (match_test "QI_REGNO_P (REGNO (op))"))))
      84      3585864 : 
      85              : ;; Return true if op is the AX register.
      86              : (define_predicate "ax_reg_operand"
      87              :   (and (match_code "reg")
      88     23073129 :        (match_test "REGNO (op) == AX_REG")))
      89            0 : 
      90    116491030 : ;; Return true if op is the flags register.
      91              : (define_special_predicate "flags_reg_operand"
      92              :   (and (match_code "reg")
      93    115423755 :        (match_test "REGNO (op) == FLAGS_REG")))
      94              : 
      95     41560050 : ;; True if the operand is a MASK register.
      96              : (define_predicate "mask_reg_operand"
      97      9808386 :   (and (match_code "reg")
      98         4537 :        (match_test "MASK_REGNO_P (REGNO (op))")))
      99      9812923 : 
     100              : ;; Return true if op is the block scale register.
     101              : (define_special_predicate "bsr0_operand"
     102              :   (and (match_code "reg")
     103          869 :        (match_test "REGNO (op) == BSR0_REG")))
     104              : 
     105          291 : ;; Match a DI, SI or HImode register operand.
     106              : (define_special_predicate "int248_register_operand"
     107       353646 :   (and (match_operand 0 "register_operand")
     108       595194 :        (ior (and (match_test "TARGET_64BIT")
     109       353646 :                  (match_test "GET_MODE (op) == DImode"))
     110       263598 :             (match_test "GET_MODE (op) == SImode")
     111       353646 :             (match_test "GET_MODE (op) == HImode"))))
     112              : 
     113              : ;; Match a DI, SI, HI or QImode nonimmediate_operand.
     114              : (define_special_predicate "int_nonimmediate_operand"
     115       385073 :   (and (match_operand 0 "nonimmediate_operand")
     116       450023 :        (ior (and (match_test "TARGET_64BIT")
     117       385073 :                  (match_test "GET_MODE (op) == DImode"))
     118       173825 :             (match_test "GET_MODE (op) == SImode")
     119              :             (match_test "GET_MODE (op) == HImode")
     120       385073 :             (match_test "GET_MODE (op) == QImode"))))
     121              : 
     122              : ;; Match register operands, but include memory operands for TARGET_SSE_MATH.
     123              : (define_predicate "register_ssemem_operand"
     124      2899211 :   (if_then_else
     125      2899211 :     (match_test "SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH")
     126      2899211 :     (match_operand 0 "nonimmediate_operand")
     127              :     (match_operand 0 "register_operand")))
     128              : 
     129      1082780 : ;; Match nonimmediate operands, but exclude memory operands
     130              : ;; for TARGET_SSE_MATH if TARGET_MIX_SSE_I387 is not enabled.
     131      1082780 : (define_predicate "nonimm_ssenomem_operand"
     132              :   (if_then_else
     133      1082780 :     (and (match_test "SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH")
     134      2165560 :          (not (match_test "TARGET_MIX_SSE_I387")))
     135              :     (match_operand 0 "register_operand")
     136              :     (match_operand 0 "nonimmediate_operand")))
     137              : 
     138       773124 : ;; The above predicate, suitable for x87 arithmetic operators.
     139              : (define_predicate "x87nonimm_ssenomem_operand"
     140       773124 :   (if_then_else
     141       773124 :     (and (match_test "SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH")
     142      1546248 :          (not (match_test "TARGET_MIX_SSE_I387 && X87_ENABLE_ARITH (mode)")))
     143              :     (match_operand 0 "register_operand")
     144              :     (match_operand 0 "nonimmediate_operand")))
     145              : 
     146        34376 : ;; Match register operands, include memory operand for TARGET_SSE4_1.
     147              : (define_predicate "register_sse4nonimm_operand"
     148        34376 :   (if_then_else (match_test "TARGET_SSE4_1")
     149              :     (match_operand 0 "nonimmediate_operand")
     150              :     (match_operand 0 "register_operand")))
     151              : 
     152        14090 : ;; Return true if VALUE is symbol reference
     153              : (define_predicate "symbol_operand"
     154        14090 :   (match_code "symbol_ref"))
     155        14090 : 
     156              : ;; Return true if VALUE is an ENDBR opcode in immediate field.
     157              : (define_predicate "ix86_endbr_immediate_operand"
     158              :   (match_code "const_int")
     159   6467521048 : {
     160   6467521048 :   if (flag_cf_protection & CF_BRANCH)
     161              :      {
     162   1230940781 :        unsigned HOST_WIDE_INT imm = UINTVAL (op);
     163   1230940781 :        unsigned HOST_WIDE_INT val = TARGET_64BIT ? 0xfa1e0ff3 : 0xfb1e0ff3;
     164              : 
     165   1230940781 :        if (imm == val)
     166              :          return true;
     167              : 
     168              :        /* NB: Encoding is byte based.  */
     169   1230940573 :        if (TARGET_64BIT)
     170   2385399885 :          for (; imm >= val; imm >>= 8)
     171   1343568436 :            if (imm == val)
     172              :              return true;
     173              :       }
     174              : 
     175              :   return false;
     176              : })
     177              : 
     178              : ;; Return true if VALUE can be stored in a sign extended immediate field.
     179   8376173431 : (define_predicate "x86_64_immediate_operand"
     180              :   (match_code "const_int,symbol_ref,label_ref,const")
     181   8376173431 : {
     182  11467923673 :   if (ix86_endbr_immediate_operand (op, VOIDmode))
     183              :     return false;
     184              : 
     185   5000402374 :   if (!TARGET_64BIT)
     186   5187297233 :     return immediate_operand (op, mode);
     187              : 
     188   4813507766 :   switch (GET_CODE (op))
     189              :     {
     190   3946502920 :     case CONST_INT:
     191   3946502920 :       {
     192   3946502920 :         HOST_WIDE_INT val = INTVAL (op);
     193   3946502920 :         return trunc_int_for_mode (val, SImode) == val;
     194              :       }
     195    706659642 :     case SYMBOL_REF:
     196              :       /* TLS symbols are not constant.  */
     197    706659642 :       if (SYMBOL_REF_TLS_MODEL (op))
     198              :         return false;
     199              : 
     200              :       /* Load the external function address via the GOT slot.  */
     201    706623719 :       if (ix86_force_load_from_GOT_p (op))
     202              :         return false;
     203              : 
     204              :       /* For certain code models, the symbolic references are known to fit.
     205              :          in CM_SMALL_PIC model we know it fits if it is local to the shared
     206              :          library.  Don't count TLS SYMBOL_REFs here, since they should fit
     207              :          only if inside of UNSPEC handled below.  */
     208    706623617 :       return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_KERNEL
     209    706623617 :               || (ix86_cmodel == CM_MEDIUM && !SYMBOL_REF_FAR_ADDR_P (op)));
     210              : 
     211     23932244 :     case LABEL_REF:
     212              :       /* For certain code models, the code is near as well.  */
     213     23932244 :       return (ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM
     214              :               || ix86_cmodel == CM_KERNEL);
     215              : 
     216    136412960 :     case CONST:
     217              :       /* We also may accept the offsetted memory references in certain
     218              :          special cases.  */
     219    136412960 :       if (GET_CODE (XEXP (op, 0)) == UNSPEC)
     220       738988 :         switch (XINT (XEXP (op, 0), 1))
     221              :           {
     222              :           case UNSPEC_GOTPCREL:
     223              :           case UNSPEC_DTPOFF:
     224              :           case UNSPEC_GOTNTPOFF:
     225              :           case UNSPEC_NTPOFF:
     226              :           case UNSPEC_SECREL32:
     227              :             return true;
     228              :           default:
     229              :             break;
     230              :           }
     231              : 
     232    135675482 :       if (GET_CODE (XEXP (op, 0)) == PLUS)
     233              :         {
     234    135673972 :           rtx op1 = XEXP (XEXP (op, 0), 0);
     235    135673972 :           rtx op2 = XEXP (XEXP (op, 0), 1);
     236              : 
     237    135673972 :           if (ix86_cmodel == CM_LARGE && GET_CODE (op1) != UNSPEC)
     238              :             return false;
     239    135673967 :           if (!CONST_INT_P (op2))
     240              :             return false;
     241              : 
     242    135673967 :           HOST_WIDE_INT offset = INTVAL (op2);
     243    135673967 :           if (trunc_int_for_mode (offset, SImode) != offset)
     244              :             return false;
     245              : 
     246    135668564 :           switch (GET_CODE (op1))
     247              :             {
     248    135327761 :             case SYMBOL_REF:
     249              :               /* TLS symbols are not constant.  */
     250    135327761 :               if (SYMBOL_REF_TLS_MODEL (op1))
     251              :                 return false;
     252              : 
     253              :               /* Load the external function address via the GOT slot.  */
     254    135317241 :               if (ix86_force_load_from_GOT_p (op1))
     255              :                 return false;
     256              : 
     257              :               /* For CM_SMALL assume that latest object is 16MB before
     258              :                  end of 31bits boundary.  We may also accept pretty
     259              :                  large negative constants knowing that all objects are
     260              :                  in the positive half of address space.  */
     261    135317235 :               if ((ix86_cmodel == CM_SMALL
     262       266248 :                    || (ix86_cmodel == CM_MEDIUM
     263            0 :                        && !SYMBOL_REF_FAR_ADDR_P (op1)))
     264    135317235 :                   && offset < 16*1024*1024)
     265              :                 return true;
     266              :               /* For CM_KERNEL we know that all object resist in the
     267              :                  negative half of 32bits address space.  We may not
     268              :                  accept negative offsets, since they may be just off
     269              :                  and we may accept pretty large positive ones.  */
     270       269158 :               if (ix86_cmodel == CM_KERNEL
     271            0 :                   && offset > 0)
     272              :                 return true;
     273              :               break;
     274              : 
     275         6026 :             case LABEL_REF:
     276              :               /* These conditions are similar to SYMBOL_REF ones, just the
     277              :                  constraints for code models differ.  */
     278         6026 :               if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
     279         6026 :                   && offset < 16*1024*1024)
     280              :                 return true;
     281            0 :               if (ix86_cmodel == CM_KERNEL
     282            0 :                   && offset > 0)
     283              :                 return true;
     284              :               break;
     285              : 
     286       334777 :             case UNSPEC:
     287       334777 :               switch (XINT (op1, 1))
     288              :                 {
     289              :                 case UNSPEC_DTPOFF:
     290              :                 case UNSPEC_NTPOFF:
     291              :                   return true;
     292              :                 }
     293              :               break;
     294              : 
     295              :             default:
     296              :               break;
     297              :             }
     298              :         }
     299              :       break;
     300              : 
     301            0 :       default:
     302            0 :         gcc_unreachable ();
     303              :     }
     304              : 
     305              :   return false;
     306              : })
     307              : 
     308              : ;; Return true if VALUE can be stored in the zero extended immediate field.
     309   5493181336 : (define_predicate "x86_64_zext_immediate_operand"
     310              :   (match_code "const_int,symbol_ref,label_ref,const")
     311   5493181336 : {
     312    752736597 :   if (ix86_endbr_immediate_operand (op, VOIDmode))
     313   5000402625 :     return false;
     314   5000402625 : 
     315    752736449 :   switch (GET_CODE (op))
     316   5000402625 :     {
     317   5684342960 :     case CONST_INT:
     318    683940335 :       return !(INTVAL (op) & ~HOST_WIDE_INT_C (0xffffffff));
     319              : 
     320     62383743 :     case SYMBOL_REF:
     321   5000402625 :       /* TLS symbols are not constant.  */
     322   5062786368 :       if (SYMBOL_REF_TLS_MODEL (op))
     323    273456403 :         return false;
     324              : 
     325              :       /* Load the external function address via the GOT slot.  */
     326     62348691 :       if (ix86_force_load_from_GOT_p (op))
     327    752736597 :         return false;
     328              : 
     329              :      /* For certain code models, the symbolic references are known to fit.  */
     330     62348590 :       return (ix86_cmodel == CM_SMALL
     331     62348590 :               || (ix86_cmodel == CM_MEDIUM
     332          218 :                   && !SYMBOL_REF_FAR_ADDR_P (op)));
     333              : 
     334      2377408 :     case LABEL_REF:
     335              :       /* For certain code models, the code is near as well.  */
     336      2377408 :       return ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM;
     337              : 
     338      4034963 :     case CONST:
     339              :       /* We also may accept the offsetted memory references in certain
     340              :          special cases.  */
     341      4034963 :       if (GET_CODE (XEXP (op, 0)) == PLUS)
     342              :         {
     343      4030376 :           rtx op1 = XEXP (XEXP (op, 0), 0);
     344      4030376 :           rtx op2 = XEXP (XEXP (op, 0), 1);
     345              : 
     346      4030376 :           if (ix86_cmodel == CM_LARGE)
     347              :             return false;
     348      4030374 :           if (!CONST_INT_P (op2))
     349              :             return false;
     350              : 
     351      4030374 :           HOST_WIDE_INT offset = INTVAL (op2);
     352      4030374 :           if (trunc_int_for_mode (offset, SImode) != offset)
     353              :             return false;
     354              : 
     355      4027541 :           switch (GET_CODE (op1))
     356              :             {
     357      4027050 :             case SYMBOL_REF:
     358              :               /* TLS symbols are not constant.  */
     359      4027050 :               if (SYMBOL_REF_TLS_MODEL (op1))
     360              :                 return false;
     361              : 
     362              :               /* Load the external function address via the GOT slot.  */
     363      4017758 :               if (ix86_force_load_from_GOT_p (op1))
     364              :                 return false;
     365              : 
     366              :               /* For small code model we may accept pretty large positive
     367              :                  offsets, since one bit is available for free.  Negative
     368              :                  offsets are limited by the size of NULL pointer area
     369              :                  specified by the ABI.  */
     370      4017752 :               if ((ix86_cmodel == CM_SMALL
     371       234206 :                    || (ix86_cmodel == CM_MEDIUM
     372            0 :                        && !SYMBOL_REF_FAR_ADDR_P (op1)))
     373      4017752 :                   && offset > -0x10000)
     374              :                 return true;
     375              :               /* ??? For the kernel, we may accept adjustment of
     376              :                  -0x10000000, since we know that it will just convert
     377              :                  negative address space to positive, but perhaps this
     378              :                  is not worthwhile.  */
     379              :               break;
     380              : 
     381            0 :             case LABEL_REF:
     382              :               /* These conditions are similar to SYMBOL_REF ones, just the
     383              :                  constraints for code models differ.  */
     384            0 :               if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM)
     385            0 :                   && offset > -0x10000)
     386              :                 return true;
     387              :               break;
     388              : 
     389              :             default:
     390              :               return false;
     391              :             }
     392              :         }
     393              :       break;
     394              : 
     395            0 :     default:
     396            0 :       gcc_unreachable ();
     397              :     }
     398              :   return false;
     399              : })
     400              : 
     401              : ;; Return true if VALUE is a constant integer whose negation satisfies
     402   1007112422 : ;; x86_64_immediate_operand.
     403              : (define_predicate "x86_64_neg_const_int_operand"
     404   1007112422 :   (match_code "const_int")
     405              : {
     406    752770669 :   HOST_WIDE_INT val = -UINTVAL (op);
     407        16174 :   if (mode == DImode && trunc_int_for_mode (val, SImode) != val)
     408    752736597 :     return false;
     409        33475 :   if (flag_cf_protection & CF_BRANCH)
     410    752736597 :     {
     411        13802 :       unsigned HOST_WIDE_INT endbr = TARGET_64BIT ? 0xfa1e0ff3 : 0xfb1e0ff3;
     412        13802 :       if ((val & HOST_WIDE_INT_C (0xffffffff)) == endbr)
     413            0 :         return false;
     414    752736597 :     }
     415    752736597 :   return true;
     416     54551773 : })
     417              : 
     418              : ;; Return true if VALUE is a constant integer whose low and high words satisfy
     419        47743 : ;; x86_64_immediate_operand.
     420        34072 : (define_predicate "x86_64_hilo_int_operand"
     421        81815 :   (match_code "const_int,const_wide_int")
     422        34072 : {
     423     44895179 :   switch (GET_CODE (op))
     424              :     {
     425     44841762 :     case CONST_INT:
     426     44895179 :       return x86_64_immediate_operand (op, mode);
     427              : 
     428        53417 :     case CONST_WIDE_INT:
     429        53417 :       gcc_assert (CONST_WIDE_INT_NUNITS (op) == 2);
     430        53417 :       return (x86_64_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (op, 0)),
     431              :                                         DImode)
     432        53417 :               && x86_64_immediate_operand (GEN_INT (CONST_WIDE_INT_ELT (op,
     433              :                                                                         1)),
     434              :                                            DImode));
     435              : 
     436            0 :     default:
     437            0 :       gcc_unreachable ();
     438              :     }
     439              : })
     440              : 
     441              : ;; Return true if VALUE is a constant integer whose value is
     442     45467790 : ;; x86_64_immediate_operand value zero extended from word mode to mode.
     443              : (define_predicate "x86_64_dwzext_immediate_operand"
     444     45467790 :   (match_code "const_int,const_wide_int")
     445              : {
     446         3742 :   if (ix86_endbr_immediate_operand (op, VOIDmode))
     447     44895179 :     return false;
     448     44895179 : 
     449         3742 :   switch (GET_CODE (op))
     450              :     {
     451         1624 :     case CONST_INT:
     452         1624 :       if (!TARGET_64BIT)
     453     44895179 :         return UINTVAL (op) <= HOST_WIDE_INT_UC (0xffffffff);
     454         1624 :       return UINTVAL (op) <= HOST_WIDE_INT_UC (0x7fffffff);
     455              : 
     456         2118 :     case CONST_WIDE_INT:
     457         5860 :       if (!TARGET_64BIT)
     458              :         return false;
     459         2118 :       return (CONST_WIDE_INT_NUNITS (op) == 2
     460         2118 :               && CONST_WIDE_INT_ELT (op, 1) == 0
     461         4236 :               && (trunc_int_for_mode (CONST_WIDE_INT_ELT (op, 0), SImode)
     462         2118 :                   == (HOST_WIDE_INT) CONST_WIDE_INT_ELT (op, 0)));
     463              : 
     464            0 :     default:
     465            0 :       gcc_unreachable ();
     466              :     }
     467              : })
     468              : 
     469              : ;; Return true if size of VALUE can be stored in a sign
     470         3742 : ;; extended immediate field.
     471              : (define_predicate "x86_64_immediate_size_operand"
     472         3742 :   (and (match_code "symbol_ref")
     473            0 :        (ior (not (match_test "TARGET_64BIT"))
     474            0 :             (match_test "ix86_cmodel == CM_SMALL")
     475            0 :             (match_test "ix86_cmodel == CM_KERNEL"))))
     476            0 : 
     477              : ;; Return true if OP is general operand representable on x86_64.
     478              : (define_predicate "x86_64_general_operand"
     479    151326948 :   (if_then_else (match_test "TARGET_64BIT")
     480    151330690 :     (ior (match_operand 0 "nonimmediate_operand")
     481         3742 :          (match_operand 0 "x86_64_immediate_operand"))
     482    151326948 :     (match_operand 0 "general_operand")))
     483     63802038 : 
     484              : ;; Return true if OP's both words are general operands representable
     485     63802038 : ;; on x86_64.
     486              : (define_predicate "x86_64_hilo_general_operand"
     487     63802038 :   (if_then_else (match_test "TARGET_64BIT")
     488              :     (ior (match_operand 0 "nonimmediate_operand")
     489              :          (match_operand 0 "x86_64_hilo_int_operand"))
     490              :     (match_operand 0 "general_operand")))
     491       279639 : 
     492              : ;; Return true if OP is non-VOIDmode general operand representable
     493       279639 : ;; on x86_64.  This predicate is used in sign-extending conversion
     494              : ;; operations that require non-VOIDmode immediate operands.
     495              : (define_predicate "x86_64_sext_operand"
     496       279639 :   (and (match_test "GET_MODE (op) != VOIDmode")
     497              :        (match_operand 0 "x86_64_general_operand")))
     498              : 
     499              : ;; Return true if OP is non-VOIDmode general operand.  This predicate
     500        11347 : ;; is used in sign-extending conversion operations that require
     501              : ;; non-VOIDmode immediate operands.
     502        11347 : (define_predicate "sext_operand"
     503        11347 :   (and (match_test "GET_MODE (op) != VOIDmode")
     504              :        (match_operand 0 "general_operand")))
     505              : 
     506              : ;; Return true if OP is representable on x86_64 as zero-extended operand.
     507      3613487 : ;; This predicate is used in zero-extending conversion operations that
     508              : ;; require non-VOIDmode immediate operands.
     509      3613487 : (define_predicate "x86_64_zext_operand"
     510      3613487 :   (if_then_else (match_test "TARGET_64BIT")
     511              :     (ior (match_operand 0 "nonimmediate_operand")
     512              :          (and (match_operand 0 "x86_64_zext_immediate_operand")
     513       125753 :               (match_test "GET_MODE (op) != VOIDmode")))
     514              :     (match_operand 0 "nonimmediate_operand")))
     515              : 
     516              : ;; Return true if OP is general operand representable on x86_64
     517      2502101 : ;; as either sign extended or zero extended constant.
     518              : (define_predicate "x86_64_szext_general_operand"
     519      2502101 :   (if_then_else (match_test "TARGET_64BIT")
     520              :     (ior (match_operand 0 "nonimmediate_operand")
     521              :          (match_operand 0 "x86_64_immediate_operand")
     522              :          (match_operand 0 "x86_64_zext_immediate_operand"))
     523     30695835 :     (match_operand 0 "general_operand")))
     524              : 
     525     30695835 : ;; Return true if OP is nonmemory operand representable on x86_64.
     526              : (define_predicate "x86_64_nonmemory_operand"
     527     30695835 :   (if_then_else (match_test "TARGET_64BIT")
     528              :     (ior (match_operand 0 "register_operand")
     529              :          (match_operand 0 "x86_64_immediate_operand"))
     530              :     (match_operand 0 "nonmemory_operand")))
     531        19791 : 
     532              : ;; Return true if OP is nonmemory operand representable on x86_64.
     533        19791 : (define_predicate "x86_64_szext_nonmemory_operand"
     534        19791 :   (if_then_else (match_test "TARGET_64BIT")
     535              :     (ior (match_operand 0 "register_operand")
     536              :          (match_operand 0 "x86_64_immediate_operand")
     537              :          (match_operand 0 "x86_64_zext_immediate_operand"))
     538    179072321 :     (match_operand 0 "nonmemory_operand")))
     539              : 
     540              : ;; Return true when operand is PIC expression that can be computed by lea
     541              : ;; operation.
     542              : (define_predicate "pic_32bit_operand"
     543              :   (match_code "const,symbol_ref,label_ref")
     544              : {
     545    179072321 :   if (!flag_pic)
     546              :     return false;
     547              : 
     548              :   /* Rule out relocations that translate into 64bit constants.  */
     549     20959004 :   if (TARGET_64BIT && GET_CODE (op) == CONST)
     550              :     {
     551       183896 :       rtx tmp = XEXP (op, 0);
     552       183896 :       if (GET_CODE (tmp) == PLUS && CONST_INT_P (XEXP (tmp, 1)))
     553       182434 :         tmp = XEXP (tmp, 0);
     554       183896 :       if (GET_CODE (tmp) == UNSPEC
     555         1462 :           && (XINT (tmp, 1) == UNSPEC_GOTOFF
     556         1462 :               || XINT (tmp, 1) == UNSPEC_GOT))
     557              :         return false;
     558              :     }
     559              : 
     560     20958082 :   return symbolic_operand (op, mode);
     561              : })
     562              : 
     563              : ;; Return true if OP is nonmemory operand acceptable by movabs patterns.
     564   1320230430 : (define_predicate "x86_64_movabs_operand"
     565              :   (and (match_operand 0 "nonmemory_operand")
     566   1320230430 :        (not (match_operand 0 "pic_32bit_operand"))))
     567              : 
     568    179072321 : ;; Return true if OP is either a symbol reference or a sum of a symbol
     569    179072321 : ;; reference and a constant.
     570    179072321 : (define_predicate "symbolic_operand"
     571    179072321 :   (match_code "symbol_ref,label_ref,const")
     572              : {
     573     21704446 :   switch (GET_CODE (op))
     574              :     {
     575    179072321 :     case SYMBOL_REF:
     576    179072321 :     case LABEL_REF:
     577       560008 :       return true;
     578              : 
     579       220610 :     case CONST:
     580       220610 :       op = XEXP (op, 0);
     581    522110469 :       if (SYMBOL_REF_P (op)
     582       220610 :           || LABEL_REF_P (op)
     583    522110469 :           || (GET_CODE (op) == UNSPEC
     584         8399 :               && (XINT (op, 1) == UNSPEC_GOT
     585         8399 :                   || XINT (op, 1) == UNSPEC_GOTOFF
     586              :                   || XINT (op, 1) == UNSPEC_SECREL32
     587     21704446 :                   || XINT (op, 1) == UNSPEC_PCREL
     588              :                   || XINT (op, 1) == UNSPEC_GOTPCREL)))
     589              :         return true;
     590       212880 :       if (GET_CODE (op) != PLUS
     591       212211 :           || !CONST_INT_P (XEXP (op, 1)))
     592              :         return false;
     593              : 
     594       212211 :       op = XEXP (op, 0);
     595       212211 :       if (SYMBOL_REF_P (op)
     596       212211 :           || LABEL_REF_P (op))
     597              :         return true;
     598              :       /* Only @GOTOFF and @SECREL32 get offsets.  */
     599         2136 :       if (GET_CODE (op) != UNSPEC
     600         2136 :           || (XINT (op, 1) != UNSPEC_GOTOFF
     601            0 :               && XINT (op, 1) != UNSPEC_SECREL32))
     602              :         return false;
     603              : 
     604         2136 :       op = XVECEXP (op, 0, 0);
     605         2136 :       if (SYMBOL_REF_P (op)
     606         2136 :           || LABEL_REF_P (op))
     607         2136 :         return true;
     608              :       return false;
     609              : 
     610            0 :     default:
     611            0 :       gcc_unreachable ();
     612              :     }
     613              : })
     614              : 
     615              : ;; Return true if OP is a symbolic operand that resolves locally.
     616     31413060 : (define_predicate "local_symbolic_operand"
     617              :   (match_code "const,label_ref,symbol_ref")
     618     31413060 : {
     619      2912072 :   if (GET_CODE (op) == CONST
     620        16172 :       && GET_CODE (XEXP (op, 0)) == PLUS
     621         8527 :       && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
     622         8527 :     op = XEXP (XEXP (op, 0), 0);
     623     21704446 : 
     624      2912072 :   if (LABEL_REF_P (op))
     625              :     return true;
     626              : 
     627      2866534 :   if (!SYMBOL_REF_P (op))
     628     21704446 :     return false;
     629      1306243 : 
     630      2856753 :   if (SYMBOL_REF_TLS_MODEL (op))
     631              :     return false;
     632              : 
     633      2912072 :   /* Dll-imported symbols are always external.  */
     634      2856753 :   if (TARGET_DLLIMPORT_DECL_ATTRIBUTES && SYMBOL_REF_DLLIMPORT_P (op))
     635              :     return false;
     636      2856753 :   if (SYMBOL_REF_LOCAL_P (op))
     637              :     return true;
     638              : 
     639              :   /* There is, however, a not insubstantial body of code in the rest of
     640              :      the compiler that assumes it can just stick the results of
     641              :      ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done.  */
     642              :   /* ??? This is a hack.  Should update the body of the compiler to
     643              :      always create a DECL an invoke targetm.encode_section_info.  */
     644        93668 :   if (strncmp (XSTR (op, 0), internal_label_prefix,
     645              :                internal_label_prefix_len) == 0)
     646            0 :     return true;
     647              : 
     648              :   return false;
     649              : })
     650              : 
     651              : (define_predicate "local_func_symbolic_operand"
     652      2920810 :   (match_operand 0 "local_symbolic_operand")
     653              : {
     654      2920810 :   if (GET_CODE (op) == CONST
     655            0 :       && GET_CODE (XEXP (op, 0)) == PLUS
     656            0 :       && CONST_INT_P (XEXP (XEXP (op, 0), 1)))
     657            0 :     op = XEXP (XEXP (op, 0), 0);
     658      2912072 : 
     659      2912084 :   if (SYMBOL_REF_P (op)
     660           12 :       && !SYMBOL_REF_FUNCTION_P (op))
     661            0 :     return false;
     662              : 
     663      2912072 :   return true;
     664      2912072 : })
     665      2808614 : 
     666              : ;; Test for a legitimate @GOTOFF operand.
     667           30 : ;;
     668              : ;; VxWorks does not impose a fixed gap between segments; the run-time
     669           42 : ;; gap can be different from the object-file gap.  We therefore can't
     670           12 : ;; use @GOTOFF unless we are absolutely sure that the symbol is in the
     671              : ;; same segment as the GOT.  Unfortunately, the flexibility of linker
     672              : ;; scripts means that we can't be sure of that in general, so assume
     673              : ;; @GOTOFF is not valid on VxWorks, except with the large code model.
     674      2920743 : ;; The comments above seem to apply only to VxWorks releases before 7.
     675              : (define_predicate "gotoff_operand"
     676      2920743 :   (and (ior (not (match_test "TARGET_VXWORKS_VAROFF"))
     677              :             (match_test "ix86_cmodel == CM_LARGE")
     678      2920743 :             (match_test "ix86_cmodel == CM_LARGE_PIC"))
     679              :        (match_operand 0 "local_symbolic_operand")))
     680              : 
     681              : ;; Test for various thread-local symbols.
     682        30001 : (define_special_predicate "tls_symbolic_operand"
     683              :   (and (match_code "symbol_ref")
     684        30001 :        (match_test "SYMBOL_REF_TLS_MODEL (op)")))
     685              : 
     686              : (define_special_predicate "tls_modbase_operand"
     687              :   (and (match_code "symbol_ref")
     688           72 :        (match_test "op == ix86_tls_module_base ()")))
     689              : 
     690          144 : (define_predicate "tls_address_pattern"
     691              :   (and (match_code "set,parallel,unspec,unspec_volatile")
     692    239947773 :        (match_test "ix86_tls_address_pattern_p (op)")))
     693            0 : 
     694    239947773 : ;; Test for a pc-relative call operand
     695              : (define_predicate "constant_call_address_operand"
     696    239947773 :   (match_code "symbol_ref")
     697    377316006 : {
     698    137368024 :   if (ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC
     699    137368013 :       || flag_force_indirect_call
     700    274734742 :       || (TARGET_INDIRECT_BRANCH_REGISTER
     701         1022 :           && ix86_nopic_noplt_attribute_p (op)))
     702         1748 :     return false;
     703              :   if (TARGET_DLLIMPORT_DECL_ATTRIBUTES && SYMBOL_REF_DLLIMPORT_P (op))
     704    239947773 :     return false;
     705              :   return true;
     706              : })
     707              : 
     708              : ;; True for any non-virtual and non-eliminable register.  Used in places where
     709    143071976 : ;; instantiation of such a register may cause the pattern to not be recognized.
     710              : (define_predicate "register_no_elim_operand"
     711    137368233 :   (match_operand 0 "register_operand")
     712    280438461 : {
     713     99065585 :   if (SUBREG_P (op))
     714        58481 :     op = SUBREG_REG (op);
     715              : 
     716              :   /* Before reload, we can allow (SUBREG (MEM...)) as a register operand
     717     20733497 :      because it is guaranteed to be reloaded into one.  */
     718     20733497 :   if (MEM_P (op))
     719              :     return true;
     720              : 
     721     20733497 :   return !(op == arg_pointer_rtx
     722     20705467 :            || op == frame_pointer_rtx
     723     20703199 :            || VIRTUAL_REGISTER_P (op));
     724              : })
     725              : 
     726              : ;; Similarly, but include the stack pointer.  This is used
     727     24716274 : ;; to prevent esp from being used as an index reg.
     728              : (define_predicate "register_no_SP_operand"
     729     24716274 :   (match_operand 0 "register_operand")
     730     20733497 : {
     731       332823 :   if (SUBREG_P (op))
     732         7935 :     op = SUBREG_REG (op);
     733              : 
     734       332823 :   /* Before reload, we can allow (SUBREG (MEM...)) as a register operand
     735              :      because it is guaranteed to be reloaded into one.  */
     736       332823 :   if (MEM_P (op))
     737              :     return true;
     738              : 
     739       332823 :   return !(op == arg_pointer_rtx
     740       332823 :            || op == frame_pointer_rtx
     741       332823 :            || op == stack_pointer_rtx
     742       332823 :            || VIRTUAL_REGISTER_P (op));
     743              : })
     744              : 
     745              : ;; P6 processors will jump to the address after the decrement when %esp
     746       369984 : ;; is used as a call operand, so they will execute return address as a code.
     747              : ;; See Pentium Pro errata 70, Pentium 2 errata A33 and Pentium 3 errata E17.
     748       369984 : 
     749       332823 : (define_predicate "call_register_operand"
     750      1852003 :   (if_then_else (match_test "TARGET_64BIT")
     751              :     (match_operand 0 "register_operand")
     752              :     (match_operand 0 "register_no_SP_operand")))
     753      1852003 : 
     754     17934566 : ;; Return false if this is any eliminable register.  Otherwise general_operand.
     755      1852003 : (define_predicate "general_no_elim_operand"
     756     17934566 :   (if_then_else (match_code "reg,subreg")
     757              :     (match_operand 0 "register_no_elim_operand")
     758              :     (match_operand 0 "general_operand")))
     759              : 
     760     11596644 : ;; Return false if this is any eliminable register.  Otherwise
     761              : ;; register_operand or a constant.
     762     11596644 : (define_predicate "nonmemory_no_elim_operand"
     763              :   (ior (match_operand 0 "register_no_elim_operand")
     764              :        (match_operand 0 "immediate_operand")))
     765              : 
     766       628223 : ;; Test for a valid operand for indirect branch.
     767              : (define_predicate "indirect_branch_operand"
     768       628223 :   (ior (match_operand 0 "register_operand")
     769       572756 :        (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
     770       572729 :             (not (match_test "TARGET_X32"))
     771              :             (match_operand 0 "memory_operand"))))
     772              : 
     773              : ;; Return true if OP is a memory operands that can be used in sibcalls.
     774        24049 : ;; Since sibcall never returns, we can only use call-clobbered register
     775              : ;; as GOT base.  Allow GOT slot here only with pseudo register as GOT
     776              : ;; base.  Properly handle sibcall over GOT slot with *sibcall_GOT_32
     777              : ;; and *sibcall_value_GOT_32 patterns.
     778              : (define_predicate "sibcall_memory_operand"
     779              :   (match_operand 0 "memory_operand")
     780              : {
     781        24049 :   op = XEXP (op, 0);
     782        24049 :   if (CONSTANT_P (op))
     783              :     return true;
     784        10508 :   if (GET_CODE (op) == PLUS && REG_P (XEXP (op, 0)))
     785              :     {
     786         9482 :       int regno = REGNO (XEXP (op, 0));
     787         9482 :       if (!HARD_REGISTER_NUM_P (regno) || call_used_or_fixed_reg_p (regno))
     788              :         {
     789         7758 :           op = XEXP (op, 1);
     790         7758 :           if (GOT32_symbol_operand (op, VOIDmode))
     791              :             return true;
     792              :         }
     793              :     }
     794              :   return false;
     795              : })
     796              : 
     797              : ;; Return true if OP is a GOT memory operand.
     798      1386703 : (define_predicate "GOT_memory_operand"
     799              :   (and (match_operand 0 "memory_operand")
     800      1410752 :        (match_code "const" "0")
     801        24049 :        (match_code "unspec" "00")
     802          566 :        (match_test "XINT (XEXP (XEXP (op, 0), 0), 1) == UNSPEC_GOTPCREL")))
     803              : 
     804              : ;; Test for a valid operand for a call instruction.
     805          464 : ;; Allow constant call address operands in Pmode only.
     806     49137142 : (define_special_predicate "call_insn_operand"
     807          464 :   (ior (match_test "constant_call_address_operand
     808     55301240 :                      (op, mode == VOIDmode ? mode : Pmode)")
     809              :        (match_operand 0 "call_register_operand")
     810       846522 :        (match_test "satisfies_constraint_Bw (op)")))
     811              : 
     812              : ;; Similarly, but for tail calls, in which we cannot allow memory references.
     813              : (define_special_predicate "sibcall_insn_operand"
     814      1228457 :   (ior (match_test "constant_call_address_operand
     815      1388721 :                      (op, mode == VOIDmode ? mode : Pmode)")
     816      1228457 :        (match_operand 0 "register_no_elim_operand")
     817       122714 :        (match_test "satisfies_constraint_Bs (op)")))
     818              : 
     819              : ;; Return true if OP is a 32-bit GOT symbol operand.
     820              : (define_predicate "GOT32_symbol_operand"
     821         9670 :   (and (match_code "const")
     822              :        (match_code "unspec" "0")
     823         9670 :        (match_test "XINT (XEXP (op, 0), 1) == UNSPEC_GOT")))
     824            0 : 
     825              : ;; Match exactly zero.
     826              : (define_predicate "const0_operand"
     827              :   (match_code "const_int,const_double,const_vector")
     828    138719073 : {
     829    138719073 :   if (mode == VOIDmode)
     830     21581339 :     mode = GET_MODE (op);
     831    138719073 :   return op == CONST0_RTX (mode);
     832              : })
     833              : 
     834              : ;; Match one or a vector with all elements equal to one.
     835    994372961 : (define_predicate "const1_operand"
     836              :   (match_code "const_int,const_double,const_vector")
     837    994372961 : {
     838     11713747 :   if (mode == VOIDmode)
     839     11651813 :     mode = GET_MODE (op);
     840    150432820 :   return op == CONST1_RTX (mode);
     841    138719073 : })
     842    138719073 : 
     843              : ;; Match exactly -1.
     844     12970730 : (define_predicate "constm1_operand"
     845              :   (and (match_code "const_int")
     846    151689803 :        (match_test "op == constm1_rtx")))
     847    138719073 : 
     848     63478649 : ;; Match 0 or -1.
     849     11713747 : (define_predicate "const0_or_m1_operand"
     850     11716640 :   (ior (match_operand 0 "const0_operand")
     851     11713747 :        (match_operand 0 "constm1_operand")))
     852         2893 : 
     853              : ;; Match exactly eight.
     854              : (define_predicate "const8_operand"
     855     11713747 :   (and (match_code "const_int")
     856     11713747 :        (match_test "INTVAL (op) == 8")))
     857         9997 : 
     858       208613 : ;; Match exactly 128.
     859              : (define_predicate "const128_operand"
     860     27673642 :   (and (match_code "const_int")
     861    246172651 :        (match_test "INTVAL (op) == 128")))
     862     27673642 : 
     863    195352251 : ;; Match exactly 0x0FFFFFFFF in anddi as a zero-extension operation
     864              : (define_predicate "const_32bit_mask"
     865      2927190 :   (and (match_code "const_int")
     866      1945938 :        (match_test "trunc_int_for_mode (INTVAL (op), DImode)
     867      4873128 :                     == HOST_WIDE_INT_C (0xffffffff)")))
     868              : 
     869              : ;; Match 2, 4, or 8.  Used for leal multiplicands.
     870              : (define_predicate "const248_operand"
     871       304343 :   (match_code "const_int")
     872              : {
     873       304343 :   HOST_WIDE_INT i = INTVAL (op);
     874       304343 :   return i == 2 || i == 4 || i == 8;
     875              : })
     876              : 
     877              : ;; Match 1, 2, or 3.  Used for lea shift amounts.
     878      1028205 : (define_predicate "const123_operand"
     879              :   (match_code "const_int")
     880      1028205 : {
     881      1256809 :   HOST_WIDE_INT i = INTVAL (op);
     882       228604 :   return i == 1 || i == 2 || i == 3;
     883              : })
     884              : 
     885       228604 : ;; Match 2, 3, 6, or 7
     886       237016 : (define_predicate "const2367_operand"
     887              :   (match_code "const_int")
     888       237016 : {
     889       228604 :   HOST_WIDE_INT i = INTVAL (op);
     890            0 :   return i == 2 || i == 3 || i == 6 || i == 7;
     891              : })
     892              : 
     893            0 : ;; Match 1, 2, 4, or 8
     894            0 : (define_predicate "const1248_operand"
     895              :   (match_code "const_int")
     896            0 : {
     897       110266 :   HOST_WIDE_INT i = INTVAL (op);
     898       110266 :   return i == 1 || i == 2 || i == 4 || i == 8;
     899              : })
     900              : 
     901       110266 : ;; Match 3, 5, or 9.  Used for leal multiplicands.
     902       537855 : (define_predicate "const359_operand"
     903              :   (match_code "const_int")
     904       537855 : {
     905       584821 :   HOST_WIDE_INT i = INTVAL (op);
     906        46966 :   return i == 3 || i == 5 || i == 9;
     907              : })
     908              : 
     909        46966 : ;; Match 4 or 8 to 11.  Used for embedded rounding.
     910       223626 : (define_predicate "const_4_or_8_to_11_operand"
     911              :   (match_code "const_int")
     912       223626 : {
     913       303648 :   HOST_WIDE_INT i = INTVAL (op);
     914        80022 :   return i == 4 || (i >= 8 && i <= 11);
     915              : })
     916              : 
     917        80022 : ;; Match 4 or 8. Used for SAE.
     918        80024 : (define_predicate "const48_operand"
     919              :   (match_code "const_int")
     920        80024 : {
     921        80022 :   HOST_WIDE_INT i = INTVAL (op);
     922        65776 :   return i == 4 || i == 8;
     923              : })
     924              : 
     925        65776 : ;; Match 0 or 1.
     926        65776 : (define_predicate "const_0_to_1_operand"
     927              :   (and (match_code "const_int")
     928        65776 :        (ior (match_test "op == const0_rtx")
     929       300590 :             (match_test "op == const1_rtx"))))
     930              : 
     931              : ;; Match 0 to 3.
     932              : (define_predicate "const_0_to_3_operand"
     933      7841931 :   (and (match_code "const_int")
     934     14895875 :        (match_test "IN_RANGE (INTVAL (op), 0, 3)")))
     935      7841931 : 
     936              : ;; Match 0 to 4.
     937              : (define_predicate "const_0_to_4_operand"
     938            0 :   (and (match_code "const_int")
     939            0 :        (match_test "IN_RANGE (INTVAL (op), 0, 4)")))
     940            0 : 
     941              : ;; Match 0 to 5.
     942              : (define_predicate "const_0_to_5_operand"
     943            0 :   (and (match_code "const_int")
     944            0 :        (match_test "IN_RANGE (INTVAL (op), 0, 5)")))
     945            0 : 
     946              : ;; Match 0 to 7.
     947              : (define_predicate "const_0_to_7_operand"
     948       781402 :   (and (match_code "const_int")
     949      1562789 :        (match_test "IN_RANGE (INTVAL (op), 0, 7)")))
     950       781402 : 
     951              : ;; Match 0 to 15.
     952              : (define_predicate "const_0_to_15_operand"
     953        81772 :   (and (match_code "const_int")
     954       163528 :        (match_test "IN_RANGE (INTVAL (op), 0, 15)")))
     955        81772 : 
     956              : ;; Match 0 to 31.
     957              : (define_predicate "const_0_to_31_operand"
     958        54296 :   (and (match_code "const_int")
     959       108034 :        (match_test "IN_RANGE (INTVAL (op), 0, 31)")))
     960        54296 : 
     961              : ;; Match 0 to 63.
     962              : (define_predicate "const_0_to_63_operand"
     963        27068 :   (and (match_code "const_int")
     964        52289 :        (match_test "IN_RANGE (INTVAL (op), 0, 63)")))
     965        27068 : 
     966              : ;; Match 0 to 127.
     967              : (define_predicate "const_0_to_127_operand"
     968         9791 :   (and (match_code "const_int")
     969        18614 :        (match_test "IN_RANGE (INTVAL (op), 0, 127)")))
     970         9791 : 
     971              : ;; Match 0 to 255.
     972              : (define_predicate "const_0_to_255_operand"
     973      8919818 :   (and (match_code "const_int")
     974     17811882 :        (match_test "IN_RANGE (INTVAL (op), 0, 255)")))
     975      8919818 : 
     976              : ;; Match (0 to 255) * 8
     977              : (define_predicate "const_0_to_255_mul_8_operand"
     978       507836 :   (match_code "const_int")
     979              : {
     980       507836 :   unsigned HOST_WIDE_INT val = INTVAL (op);
     981       507836 :   return val <= 255*8 && val % 8 == 0;
     982              : })
     983              : 
     984              : ;; Match 1 to 255 except multiples of 8
     985       507838 : (define_predicate "const_0_to_255_not_mul_8_operand"
     986              :   (match_code "const_int")
     987       507838 : {
     988            9 :   unsigned HOST_WIDE_INT val = INTVAL (op);
     989       912489 :   return val <= 255 && val % 8 != 0;
     990              : })
     991              : 
     992       912503 : ;; Return true if OP is CONST_INT >= 1 and <= 31 (a valid operand
     993       912503 : ;; for shift & compare patterns, as shifting by 0 does not change flags).
     994              : (define_predicate "const_1_to_31_operand"
     995       912503 :   (and (match_code "const_int")
     996       691239 :        (match_test "IN_RANGE (INTVAL (op), 1, 31)")))
     997              : 
     998              : ;; Return true if OP is CONST_INT >= 1 and <= 63 (a valid operand
     999              : ;; for 64bit shift & compare patterns, as shifting by 0 does not change flags).
    1000       109747 : (define_predicate "const_1_to_63_operand"
    1001              :   (and (match_code "const_int")
    1002       109747 :        (match_test "IN_RANGE (INTVAL (op), 1, 63)")))
    1003              : 
    1004              : ;; Match 2 or 3.
    1005              : (define_predicate "const_2_to_3_operand"
    1006        73075 :   (and (match_code "const_int")
    1007       146150 :        (match_test "IN_RANGE (INTVAL (op), 2, 3)")))
    1008        73075 : 
    1009              : ;; Match 4 to 5.
    1010              : (define_predicate "const_4_to_5_operand"
    1011         5490 :   (and (match_code "const_int")
    1012        10980 :        (match_test "IN_RANGE (INTVAL (op), 4, 5)")))
    1013         5490 : 
    1014              : ;; Match 4 to 7.
    1015              : (define_predicate "const_4_to_7_operand"
    1016      1105305 :   (and (match_code "const_int")
    1017      2210610 :        (match_test "IN_RANGE (INTVAL (op), 4, 7)")))
    1018      1105305 : 
    1019              : ;; Match 6 to 7.
    1020              : (define_predicate "const_6_to_7_operand"
    1021          700 :   (and (match_code "const_int")
    1022         1400 :        (match_test "IN_RANGE (INTVAL (op), 6, 7)")))
    1023          700 : 
    1024              : ;; Match 8 to 9.
    1025              : (define_predicate "const_8_to_9_operand"
    1026          513 :   (and (match_code "const_int")
    1027         1026 :        (match_test "IN_RANGE (INTVAL (op), 8, 9)")))
    1028          513 : 
    1029              : ;; Match 8 to 11.
    1030              : (define_predicate "const_8_to_11_operand"
    1031        35513 :   (and (match_code "const_int")
    1032        71026 :        (match_test "IN_RANGE (INTVAL (op), 8, 11)")))
    1033        35513 : 
    1034              : ;; Match 8 to 15.
    1035              : (define_predicate "const_8_to_15_operand"
    1036        40034 :   (and (match_code "const_int")
    1037        80068 :        (match_test "IN_RANGE (INTVAL (op), 8, 15)")))
    1038        40034 : 
    1039              : ;; Match 10 to 11.
    1040              : (define_predicate "const_10_to_11_operand"
    1041          267 :   (and (match_code "const_int")
    1042          534 :        (match_test "IN_RANGE (INTVAL (op), 10, 11)")))
    1043          267 : 
    1044              : ;; Match 12 to 13.
    1045              : (define_predicate "const_12_to_13_operand"
    1046          266 :   (and (match_code "const_int")
    1047          532 :        (match_test "IN_RANGE (INTVAL (op), 12, 13)")))
    1048          266 : 
    1049              : ;; Match 12 to 15.
    1050              : (define_predicate "const_12_to_15_operand"
    1051        23714 :   (and (match_code "const_int")
    1052        47428 :        (match_test "IN_RANGE (INTVAL (op), 12, 15)")))
    1053        23714 : 
    1054              : ;; Match 14 to 15.
    1055              : (define_predicate "const_14_to_15_operand"
    1056          266 :   (and (match_code "const_int")
    1057          532 :        (match_test "IN_RANGE (INTVAL (op), 14, 15)")))
    1058          266 : 
    1059              : ;; Match 16 to 19.
    1060              : (define_predicate "const_16_to_19_operand"
    1061          924 :   (and (match_code "const_int")
    1062         1848 :        (match_test "IN_RANGE (INTVAL (op), 16, 19)")))
    1063          924 : 
    1064              : ;; Match 16 to 31.
    1065              : (define_predicate "const_16_to_31_operand"
    1066        10153 :   (and (match_code "const_int")
    1067        20306 :        (match_test "IN_RANGE (INTVAL (op), 16, 31)")))
    1068        10153 : 
    1069              : ;; Match 20 to 23.
    1070              : (define_predicate "const_20_to_23_operand"
    1071          532 :   (and (match_code "const_int")
    1072         1064 :        (match_test "IN_RANGE (INTVAL (op), 20, 23)")))
    1073          532 : 
    1074              : ;; Match 24 to 27.
    1075              : (define_predicate "const_24_to_27_operand"
    1076          532 :   (and (match_code "const_int")
    1077         1064 :        (match_test "IN_RANGE (INTVAL (op), 24, 27)")))
    1078          532 : 
    1079              : ;; Match 28 to 31.
    1080              : (define_predicate "const_28_to_31_operand"
    1081          532 :   (and (match_code "const_int")
    1082         1064 :        (match_test "IN_RANGE (INTVAL (op), 28, 31)")))
    1083          532 : 
    1084              : (define_predicate "cmpps_imm_operand"
    1085              :   (ior (match_operand 0 "const_0_to_7_operand")
    1086         4057 :        (and (match_test "TARGET_AVX")
    1087              :             (match_operand 0 "const_0_to_31_operand"))))
    1088        60106 : 
    1089              : ;; True if this is a constant appropriate for an increment or decrement.
    1090    102836638 : (define_predicate "incdec_operand"
    1091              :   (match_code "const_int")
    1092              : {
    1093              :   /* On Pentium4, the inc and dec operations causes extra dependency on flag
    1094              :      registers, since carry flag is not set.  */
    1095    102836638 :   if (!TARGET_USE_INCDEC && !optimize_insn_for_size_p ())
    1096              :     return false;
    1097      2625040 :   return op == const1_rtx || op == constm1_rtx;
    1098              : })
    1099              : 
    1100              : ;; True for registers, or const_int_operand, used to vec_setm expander.
    1101    127834783 : (define_predicate "vec_setm_sse41_operand"
    1102              :   (ior (and (match_operand 0 "register_operand")
    1103    230672303 :             (match_test "TARGET_SSE4_1"))
    1104    102836638 :        (match_code "const_int")))
    1105              : 
    1106              : (define_predicate "vec_setm_avx2_operand"
    1107              :   (ior (and (match_operand 0 "register_operand")
    1108         1053 :             (match_test "TARGET_AVX2"))
    1109            0 :        (match_code "const_int")))
    1110         1357 : 
    1111              : (define_predicate "vec_setm_mmx_operand"
    1112              :   (ior (and (match_operand 0 "register_operand")
    1113           22 :             (match_test "TARGET_SSE4_1")
    1114          260 :             (match_test "TARGET_MMX_WITH_SSE"))
    1115          260 :        (match_code "const_int")))
    1116              : 
    1117              : ;; True for registers, or 1 or -1.  Used to optimize double-word shifts.
    1118              : (define_predicate "reg_or_pm1_operand"
    1119      4453982 :   (ior (match_operand 0 "register_operand")
    1120              :        (and (match_code "const_int")
    1121      4453982 :             (ior (match_test "op == const1_rtx")
    1122       259554 :                  (match_test "op == constm1_rtx")))))
    1123       243210 : 
    1124              : ;; True for registers, or (not: registers).  Used to optimize 3-operand
    1125              : ;; bitwise operation.
    1126              : (define_predicate "regmem_or_bitnot_regmem_operand"
    1127       725849 :   (ior (match_operand 0 "nonimmediate_operand")
    1128              :        (and (match_code "not")
    1129       725849 :             (match_test "nonimmediate_operand (XEXP (op, 0), mode)"))))
    1130        29259 : 
    1131              : ;; True for expressions valid for 3-operand ternlog instructions.
    1132              : (define_predicate "ternlog_operand"
    1133              :   (and (match_code "not,and,ior,xor")
    1134      2338755 :        (match_test "ix86_ternlog_operand_p (op)")))
    1135       257801 : 
    1136     65848191 : ;; True if OP is acceptable as operand of DImode shift expander.
    1137              : (define_predicate "shiftdi_operand"
    1138      1380788 :   (if_then_else (match_test "TARGET_64BIT")
    1139      3719543 :     (match_operand 0 "nonimmediate_operand")
    1140      2338755 :     (match_operand 0 "register_operand")))
    1141      1380788 : 
    1142      2983676 : (define_predicate "ashldi_input_operand"
    1143       644921 :   (if_then_else (match_test "TARGET_64BIT")
    1144       644921 :     (match_operand 0 "nonimmediate_operand")
    1145              :     (match_operand 0 "reg_or_pm1_operand")))
    1146      2338755 : 
    1147       573998 : ;; Return true if OP is a vector load from the constant pool with just
    1148              : ;; the first element nonzero.
    1149              : (define_predicate "zero_extended_scalar_load_operand"
    1150              :   (match_code "mem")
    1151              : {
    1152       573998 :   unsigned n_elts;
    1153       573998 :   op = avoid_constant_pool_reference (op);
    1154              : 
    1155       573998 :   if (!CONST_VECTOR_P (op))
    1156              :     return false;
    1157              : 
    1158        84487 :   n_elts = CONST_VECTOR_NUNITS (op);
    1159              : 
    1160       180287 :   for (n_elts--; n_elts > 0; n_elts--)
    1161              :     {
    1162       129411 :       rtx elt = CONST_VECTOR_ELT (op, n_elts);
    1163       258822 :       if (elt != CONST0_RTX (GET_MODE_INNER (GET_MODE (op))))
    1164              :         return false;
    1165              :     }
    1166              :   return true;
    1167              : })
    1168              : 
    1169              : /* Return true if operand is a float vector constant that is all ones. */
    1170      1964749 : (define_predicate "float_vector_all_ones_operand"
    1171              :   (match_code "const_vector,mem")
    1172       573998 : {
    1173      2015625 :   mode = GET_MODE (op);
    1174        50876 :   if (!FLOAT_MODE_P (mode)
    1175     13244133 :       || (MEM_P (op)
    1176     11381314 :           && (!SYMBOL_REF_P (XEXP (op, 0))
    1177      1390234 :               || !CONSTANT_POOL_ADDRESS_P (XEXP (op, 0)))))
    1178     16067847 :     return false;
    1179              : 
    1180      3010520 :   if (MEM_P (op))
    1181              :     {
    1182      1147701 :       op = get_pool_constant (XEXP (op, 0));
    1183      1147701 :       if (!CONST_VECTOR_P (op))
    1184              :         return false;
    1185              : 
    1186      1147697 :       if (GET_MODE (op) != mode
    1187         5973 :          && INTEGRAL_MODE_P (GET_MODE (op))
    1188         5973 :          && op == CONSTM1_RTX (GET_MODE (op)))
    1189              :         return true;
    1190              :     }
    1191              : 
    1192      3010516 :   rtx first = XVECEXP (op, 0, 0);
    1193      8721738 :   for (int i = 1; i != GET_MODE_NUNITS (GET_MODE (op)); i++)
    1194              :     {
    1195      3832188 :       rtx tmp = XVECEXP (op, 0, i);
    1196      3832188 :       if (!rtx_equal_p (tmp, first))
    1197              :         return false;
    1198              :     }
    1199       528681 :   if (GET_MODE (first) == E_SFmode)
    1200              :     {
    1201       244314 :       long l;
    1202       244314 :       REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (first), l);
    1203       244314 :       return (l & 0xffffffff) == 0xffffffff;
    1204              :     }
    1205       284367 :   else if (GET_MODE (first) == E_DFmode)
    1206              :     {
    1207       277413 :       long l[2];
    1208       277413 :       REAL_VALUE_TO_TARGET_DOUBLE (*CONST_DOUBLE_REAL_VALUE (first), l);
    1209       277413 :       return ((l[0] & 0xffffffff) == 0xffffffff
    1210       277413 :              && (l[1] & 0xffffffff) == 0xffffffff);
    1211              :     }
    1212              :   else
    1213              :     return false;
    1214              : })
    1215              : 
    1216              : /* Return true if operand is an integral vector constant that is all ones. */
    1217     55556107 : (define_predicate "vector_all_ones_operand"
    1218              :   (and (match_code "const_vector")
    1219     69196844 :        (match_test "INTEGRAL_MODE_P (GET_MODE (op))")
    1220     11842098 :        (match_test "op == CONSTM1_RTX (GET_MODE (op))")))
    1221      1083588 : 
    1222     16067847 : /* Return true if operand is a vector constant that is all ones. */
    1223     16067847 : (define_predicate "int_float_vector_all_ones_operand"
    1224              :   (ior (match_operand 0 "vector_all_ones_operand")
    1225      9078469 :        (match_operand 0 "float_vector_all_ones_operand")
    1226            0 :        (match_test "op == constm1_rtx")))
    1227      9078469 : 
    1228     16067847 : /* Return true if operand is an 128/256bit all ones vector
    1229         3072 :    that zero-extends to 256/512bit.  */
    1230              : (define_predicate "vector_all_ones_zero_extend_half_operand"
    1231     12099215 :   (match_code "const_vector")
    1232              : {
    1233    175461490 :   mode = GET_MODE (op);
    1234     12099215 :   if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT
    1235    185961881 :       || (GET_MODE_SIZE (mode) != 32
    1236     10198640 :           && GET_MODE_SIZE (mode) != 64))
    1237              :     return false;
    1238              : 
    1239       469860 :   int nelts = CONST_VECTOR_NUNITS (op);
    1240       542685 :   for (int i = 0; i != nelts; i++)
    1241              :     {
    1242       541677 :       rtx elt = CONST_VECTOR_ELT (op, i);
    1243       541677 :       if (i < nelts / 2
    1244      1064602 :           && elt != CONSTM1_RTX (GET_MODE_INNER (mode)))
    1245              :         return false;
    1246        83866 :       if (i >= nelts / 2
    1247       102618 :           && elt != CONST0_RTX (GET_MODE_INNER (mode)))
    1248              :         return false;
    1249              :     }
    1250              :   return true;
    1251              : })
    1252              : 
    1253              : /* Return true if operand is an 128bit all ones vector
    1254    176788491 :    that zero extends to 512bit.  */
    1255              : (define_predicate "vector_all_ones_zero_extend_quarter_operand"
    1256     12099215 :   (match_code "const_vector")
    1257    176789499 : {
    1258         1008 :   mode = GET_MODE (op);
    1259     12098207 :   if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT
    1260     10499383 :       || GET_MODE_SIZE (mode) != 64)
    1261              :     return false;
    1262     12098207 : 
    1263       167890 :   int nelts = CONST_VECTOR_NUNITS (op);
    1264       181632 :   for (int i = 0; i != nelts; i++)
    1265              :     {
    1266       181540 :       rtx elt = CONST_VECTOR_ELT (op, i);
    1267       181540 :       if (i < nelts / 4
    1268       359559 :           && elt != CONSTM1_RTX (GET_MODE_INNER (mode)))
    1269              :         return false;
    1270        16393 :       if (i >= nelts / 4
    1271        19914 :           && elt != CONST0_RTX (GET_MODE_INNER (mode)))
    1272              :         return false;
    1273              :     }
    1274              :   return true;
    1275              : })
    1276              : 
    1277              : ; Return true when OP is operand acceptable for vector memory operand.
    1278    176787483 : ; Only AVX can have misaligned memory operand.
    1279              : (define_predicate "vector_memory_operand"
    1280     12098207 :   (and (match_operand 0 "memory_operand")
    1281    177875256 :        (ior (match_test "TARGET_AVX")
    1282      1087773 :             (match_test "MEM_ALIGN (op) >= GET_MODE_ALIGNMENT (mode)"))))
    1283              : 
    1284              : ; Return true when OP is register_operand or vector_memory_operand.
    1285              : (define_predicate "vector_operand"
    1286     19799164 :   (ior (match_operand 0 "register_operand")
    1287              :        (match_operand 0 "vector_memory_operand")))
    1288     19799164 : 
    1289              : ; Return true when OP is register_operand, vector_memory_operand
    1290              : ; or const_vector.
    1291              : (define_predicate "vector_or_const_vector_operand"
    1292        94107 :   (ior (match_operand 0 "register_operand")
    1293              :        (match_operand 0 "vector_memory_operand")
    1294        94107 :        (match_code "const_vector")))
    1295        45043 : 
    1296              : (define_predicate "bcst_mem_operand"
    1297              :   (and (match_code "vec_duplicate")
    1298        14420 :        (and (match_test "TARGET_AVX512F")
    1299    168183635 :             (ior (match_test "TARGET_AVX512VL")
    1300         9036 :                  (match_test "GET_MODE_SIZE (GET_MODE (op)) == 64")))
    1301       153589 :        (match_test "VALID_BCST_MODE_P (GET_MODE_INNER (GET_MODE (op)))")
    1302        13472 :        (match_test "GET_MODE (XEXP (op, 0))
    1303        40405 :                     == GET_MODE_INNER (GET_MODE (op))")
    1304    168197895 :        (match_test "memory_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)))")))
    1305         5317 : 
    1306              : ; Return true when OP is bcst_mem_operand or vector_memory_operand.
    1307              : (define_predicate "bcst_vector_operand"
    1308              :   (ior (match_operand 0 "vector_operand")
    1309      5294019 :        (match_operand 0 "bcst_mem_operand")))
    1310              : 
    1311      5294019 : ;; Return true when OP is either nonimmediate operand, or any
    1312              : ;; CONST_VECTOR.
    1313              : (define_predicate "nonimmediate_or_const_vector_operand"
    1314              :   (ior (match_operand 0 "nonimmediate_operand")
    1315        92160 :        (match_code "const_vector")))
    1316              : 
    1317        92160 : (define_predicate "nonimmediate_or_const_vec_dup_operand"
    1318        14988 :   (ior (match_operand 0 "nonimmediate_operand")
    1319           46 :        (match_test "const_vec_duplicate_p (op)")))
    1320           46 : 
    1321              : ;; Return true when OP is either register operand, or any
    1322           94 : ;; CONST_VECTOR.
    1323              : (define_predicate "reg_or_const_vector_operand"
    1324           94 :   (ior (match_operand 0 "register_operand")
    1325              :        (match_code "const_vector")))
    1326          275 : 
    1327          173 : ;; Return true when OP is CONST_VECTOR which can be converted to a
    1328              : ;; sign extended 32-bit integer.
    1329              : (define_predicate "x86_64_const_vector_operand"
    1330              :   (match_code "const_vector")
    1331       159081 : {
    1332       159081 :   if (mode == VOIDmode)
    1333            0 :     mode = GET_MODE (op);
    1334       159081 :   else if (GET_MODE (op) != mode)
    1335              :     return false;
    1336       374609 :   if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
    1337              :     return false;
    1338       116071 :   HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op, mode);
    1339       116071 :   return trunc_int_for_mode (val, SImode) == val;
    1340              : })
    1341              : 
    1342              : (define_predicate "nonimmediate_or_x86_64_const_vector_operand"
    1343       982354 :   (ior (match_operand 0 "nonimmediate_operand")
    1344              :        (match_operand 0 "x86_64_const_vector_operand")))
    1345       159081 : 
    1346      1064605 : ;; Return true when OP is nonimmediate or standard SSE constant.
    1347        82251 : (define_predicate "nonimmediate_or_sse_const_operand"
    1348              :   (ior (match_operand 0 "nonimmediate_operand")
    1349     25251510 :        (match_test "standard_sse_constant_p (op, mode)")))
    1350      2822306 : 
    1351         6681 : ;; Return true if OP is a register or a zero.
    1352              : (define_predicate "reg_or_0_operand"
    1353         6681 :   (ior (match_operand 0 "register_operand")
    1354       396084 :        (match_operand 0 "const0_operand")))
    1355              : 
    1356       396084 : ; Return true when OP is a nonimmediate or zero.
    1357     94925830 : (define_predicate "nonimm_or_0_operand"
    1358              :   (ior (match_operand 0 "nonimmediate_operand")
    1359    117355034 :        (match_operand 0 "const0_operand")))
    1360    127138350 : 
    1361              : ; Return true when OP is a nonimmediate or zero or all ones.
    1362    127138350 : (define_predicate "nonimm_or_0_or_1s_operand"
    1363              :   (ior (match_operand 0 "nonimmediate_operand")
    1364              :        (match_operand 0 "const0_operand")
    1365              :        (match_operand 0 "int_float_vector_all_ones_operand")))
    1366        82244 : 
    1367              : ;; Return true for RTX codes that force SImode address.
    1368        82244 : (define_predicate "SImode_address_operand"
    1369              :   (match_code "subreg,zero_extend,and"))
    1370              : 
    1371              : ;; Return true if op is a valid address for LEA, and does not contain
    1372    275647012 : ;; a segment override.  Defined as a special predicate to allow
    1373              : ;; mode-less const_int operands pass to address_operand.
    1374    275647012 : (define_special_predicate "address_no_seg_operand"
    1375    184335552 :   (match_test "address_operand (op, VOIDmode)")
    1376     67632985 : {
    1377     68013127 :   struct ix86_address parts;
    1378     68013127 :   int ok;
    1379       380142 : 
    1380     67671475 :   if (!CONST_INT_P (op)
    1381     64708859 :       && mode != VOIDmode
    1382     64708859 :       && GET_MODE (op) != mode)
    1383       380142 :     return false;
    1384       380142 : 
    1385     67632921 :   ok = ix86_decompose_address (op, &parts);
    1386     67632921 :   gcc_assert (ok);
    1387     67632921 :   return parts.seg == ADDR_SPACE_GENERIC;
    1388     67632985 : })
    1389              : 
    1390              : ;; Return true if op if a valid base register, displacement or
    1391    116702567 : ;; sum of base register and displacement for VSIB addressing.
    1392              : (define_predicate "vsib_address_operand"
    1393    116741057 :   (match_test "address_operand (op, VOIDmode)")
    1394        77741 : {
    1395        37780 :   struct ix86_address parts;
    1396        38490 :   int ok;
    1397        38490 :   rtx disp;
    1398              : 
    1399        38490 :   ok = ix86_decompose_address (op, &parts);
    1400        38490 :   gcc_assert (ok);
    1401        64586 :   if (parts.index || parts.seg != ADDR_SPACE_GENERIC)
    1402        26096 :     return false;
    1403              : 
    1404              :   /* VSIB addressing doesn't support (%rip).  */
    1405        38470 :   if (parts.disp)
    1406     26142087 :     {
    1407         6375 :       disp = parts.disp;
    1408         6375 :       if (GET_CODE (disp) == CONST)
    1409              :         {
    1410          148 :           disp = XEXP (disp, 0);
    1411          148 :           if (GET_CODE (disp) == PLUS)
    1412          148 :             disp = XEXP (disp, 0);
    1413          148 :           if (GET_CODE (disp) == UNSPEC)
    1414            0 :             switch (XINT (disp, 1))
    1415              :               {
    1416              :               case UNSPEC_GOTPCREL:
    1417              :               case UNSPEC_PCREL:
    1418              :               case UNSPEC_GOTNTPOFF:
    1419              :                 return false;
    1420              :               }
    1421              :         }
    1422         6375 :       if (TARGET_64BIT
    1423         6375 :           && flag_pic
    1424            0 :           && (SYMBOL_REF_P (disp)
    1425            0 :               || LABEL_REF_P (disp)))
    1426            0 :         return false;
    1427              :     }
    1428              : 
    1429              :   return true;
    1430              : })
    1431              : 
    1432              : (define_predicate "vsib_mem_operator"
    1433        39271 :   (match_code "mem"))
    1434              : 
    1435        39271 : ;; Return true if the rtx is known to be at least 32 bits aligned.
    1436              : (define_predicate "aligned_operand"
    1437              :   (match_operand 0 "general_operand")
    1438              : {
    1439     26142087 :   struct ix86_address parts;
    1440     26142087 :   int ok;
    1441              : 
    1442              :   /* Registers and immediate operands are always "aligned".  */
    1443     26142087 :   if (!MEM_P (op))
    1444              :     return true;
    1445              : 
    1446              :   /* All patterns using aligned_operand on memory operands ends up
    1447              :      in promoting memory operand to 64bit and thus causing memory mismatch.  */
    1448      8286399 :   if (TARGET_MEMORY_MISMATCH_STALL && !optimize_insn_for_size_p ())
    1449              :     return false;
    1450              : 
    1451              :   /* Don't even try to do any aligned optimizations with volatiles.  */
    1452       123408 :   if (MEM_VOLATILE_P (op))
    1453              :     return false;
    1454              : 
    1455       117463 :   if (MEM_ALIGN (op) >= 32)
    1456              :     return true;
    1457              : 
    1458        45924 :   op = XEXP (op, 0);
    1459              : 
    1460              :   /* Pushes and pops are only valid on the stack pointer.  */
    1461        45924 :   if (GET_CODE (op) == PRE_DEC
    1462        45924 :       || GET_CODE (op) == POST_INC)
    1463              :     return true;
    1464              : 
    1465              :   /* Decode the address.  */
    1466        45924 :   ok = ix86_decompose_address (op, &parts);
    1467        45924 :   gcc_assert (ok);
    1468              : 
    1469        45924 :   if (parts.base && SUBREG_P (parts.base))
    1470            0 :     parts.base = SUBREG_REG (parts.base);
    1471        45924 :   if (parts.index && SUBREG_P (parts.index))
    1472            0 :     parts.index = SUBREG_REG (parts.index);
    1473              : 
    1474              :   /* Look for some component that isn't known to be aligned.  */
    1475        45924 :   if (parts.index)
    1476              :     {
    1477         3264 :       if (REGNO_POINTER_ALIGN (REGNO (parts.index)) * parts.scale < 32)
    1478              :         return false;
    1479              :     }
    1480        42660 :   if (parts.base)
    1481              :     {
    1482        35794 :       if (REGNO_POINTER_ALIGN (REGNO (parts.base)) < 32)
    1483              :         return false;
    1484              :     }
    1485        13258 :   if (parts.disp)
    1486              :     {
    1487        13258 :       if (!CONST_INT_P (parts.disp)
    1488         6490 :           || (INTVAL (parts.disp) & 3))
    1489        12968 :         return false;
    1490              :     }
    1491              : 
    1492              :   /* Didn't find one -- this must be an aligned address.  */
    1493              :   return true;
    1494              : })
    1495              : 
    1496              : ;; Return true if OP is memory operand with a displacement.
    1497     26647531 : (define_predicate "memory_displacement_operand"
    1498              :   (match_operand 0 "memory_operand")
    1499     52789618 : {
    1500     26142087 :   struct ix86_address parts;
    1501            0 :   int ok;
    1502              : 
    1503            0 :   ok = ix86_decompose_address (XEXP (op, 0), &parts);
    1504            0 :   gcc_assert (ok);
    1505            0 :   return parts.disp != NULL_RTX;
    1506              : })
    1507              : 
    1508              : ;; Return true if OP is memory operand with a displacement only.
    1509            0 : (define_predicate "memory_displacement_only_operand"
    1510              :   (match_operand 0 "memory_operand")
    1511            0 : {
    1512            0 :   struct ix86_address parts;
    1513     39043250 :   int ok;
    1514              : 
    1515     39043250 :   if (TARGET_64BIT)
    1516     39043250 :     return false;
    1517              : 
    1518     19106120 :   ok = ix86_decompose_address (XEXP (op, 0), &parts);
    1519     19106120 :   gcc_assert (ok);
    1520              : 
    1521     19106120 :   if (parts.base || parts.index)
    1522              :     return false;
    1523              : 
    1524       239331 :   return parts.disp != NULL_RTX;
    1525              : })
    1526              : 
    1527              : ;; Return true if OP is memory operand that cannot be represented
    1528     60599099 : ;; by the modRM array.
    1529              : (define_predicate "long_memory_operand"
    1530     99642349 :   (and (match_operand 0 "memory_operand")
    1531     39043250 :        (match_test "memory_address_length (op, false)")))
    1532              : 
    1533              : ;; Return true if OP is a comparison operator that can be issued by fcmov.
    1534              : (define_predicate "fcmov_comparison_operator"
    1535        70187 :   (match_operand 0 "comparison_operator")
    1536              : {
    1537            0 :   machine_mode inmode = GET_MODE (XEXP (op, 0));
    1538        70187 :   enum rtx_code code = GET_CODE (op);
    1539              : 
    1540        70187 :   if (inmode == CCFPmode)
    1541         9936 :     code = ix86_fp_compare_code_to_integer (code);
    1542              : 
    1543              :   /* i387 supports just limited amount of conditional codes.  */
    1544        70187 :   switch (code)
    1545              :     {
    1546         2414 :     case GEU: case LTU:
    1547         2414 :       if (inmode == CCCmode || inmode == CCGZmode)
    1548              :         return true;
    1549              :       /* FALLTHRU */
    1550         7848 :     case GTU: case LEU:
    1551         7848 :       if (inmode == CCmode || inmode == CCFPmode)
    1552              :         return true;
    1553              :       return false;
    1554              :     case ORDERED: case UNORDERED:
    1555              :     case EQ: case NE:
    1556              :       return true;
    1557              :     default:
    1558              :       return false;
    1559              :     }
    1560              : })
    1561              : 
    1562              : ;; Return true if OP is a comparison that can be used in the CMPSS/CMPPS insns.
    1563        70187 : ;; The first set are supported directly; the second set can't be done with
    1564              : ;; full IEEE support, i.e. NaNs.
    1565       140374 : 
    1566        70187 : (define_predicate "sse_comparison_operator"
    1567              :   (ior (match_code "eq,ne,lt,le,unordered,unge,ungt,ordered")
    1568       398196 :        (and (match_test "TARGET_AVX")
    1569       398196 :             (match_code "ge,gt,uneq,unle,unlt,ltgt"))))
    1570       513589 : 
    1571              : ;; SSE2 doesn't have quiet vector compare for UNLT/UNLE/UNGT/UNGE, so reject
    1572       513589 : ;; them in the packed FP vec_cmp expanders when trapping math is in effect
    1573       104385 : ;; and NaNs are honored
    1574              : 
    1575       104385 : (define_predicate "ix86_fp_vec_cmp_operator"
    1576              :   (and (match_operand 0 "comparison_operator")
    1577              :        (ior (not (match_code "unlt,unle,ungt,unge"))
    1578         8407 :             (match_test "TARGET_AVX")
    1579        15460 :             (not (match_test "flag_trapping_math"))
    1580         7697 :             (not (match_test "HONOR_NANS (GET_MODE (XEXP (op, 0)))")))))
    1581              : 
    1582              : (define_predicate "ix86_comparison_int_operator"
    1583              :   (match_code "ne,eq,ge,gt,le,lt"))
    1584       217691 : 
    1585              : (define_predicate "ix86_comparison_uns_operator"
    1586       217691 :   (match_code "ne,eq,geu,gtu,leu,ltu"))
    1587              : 
    1588       217691 : (define_predicate "bt_comparison_operator"
    1589       217691 :   (match_code "ne,eq"))
    1590       217691 : 
    1591       217691 : (define_predicate "shr_comparison_operator"
    1592       217691 :   (match_code "gtu,leu"))
    1593       217691 : 
    1594       217691 : (define_predicate "add_comparison_operator"
    1595              :   (match_code "geu,ltu"))
    1596              : 
    1597              : (define_predicate "ieee_maxmin_comparison_operator"
    1598       217691 :   (match_code "lt,gt"))
    1599       217691 : 
    1600              : ;; Return true if OP is a valid comparison operator in valid mode.
    1601              : (define_predicate "ix86_comparison_operator"
    1602              :   (match_operand 0 "comparison_operator")
    1603       113236 : {
    1604    102188305 :   machine_mode inmode = GET_MODE (XEXP (op, 0));
    1605       113236 :   enum rtx_code code = GET_CODE (op);
    1606              : 
    1607    102301541 :   if (inmode == CCFPmode)
    1608      6965922 :     return ix86_trivial_fp_comparison_operator (op, mode);
    1609       113236 : 
    1610     95222383 :   switch (code)
    1611       113236 :     {
    1612     73220727 :     case EQ: case NE:
    1613     73107491 :       if (inmode == CCGZmode)
    1614            0 :         return false;
    1615              :       return true;
    1616      4327250 :     case GE: case LT:
    1617      4327250 :       if (inmode == CCmode || inmode == CCGCmode
    1618      2483100 :           || inmode == CCGOCmode || inmode == CCNOmode || inmode == CCGZmode)
    1619      3817936 :         return true;
    1620              :       return false;
    1621      7795501 :     case GEU: case LTU:
    1622      7795501 :       if (inmode == CCCmode || inmode == CCGZmode)
    1623              :         return true;
    1624     63939193 :       /* FALLTHRU */
    1625     11005325 :     case GTU: case LEU:
    1626     11005325 :       if (inmode == CCmode)
    1627      9759014 :         return true;
    1628     52659101 :       return false;
    1629         3497 :     case ORDERED: case UNORDERED:
    1630         3497 :       if (inmode == CCmode)
    1631         3312 :         return true;
    1632     52659101 :       return false;
    1633     52659101 :     case GT: case LE:
    1634      6283186 :       if (inmode == CCmode || inmode == CCGCmode || inmode == CCNOmode)
    1635      5508321 :         return true;
    1636              :       return false;
    1637       846365 :     default:
    1638              :       return false;
    1639       846365 :     }
    1640              : })
    1641       846365 : 
    1642       846365 : ;; Return true if OP is a valid comparison operator
    1643    117942095 : ;; testing carry flag to be set.
    1644              : (define_predicate "ix86_carry_flag_operator"
    1645    219284035 :   (match_code "ltu,unlt")
    1646    102188305 : {
    1647      1737245 :   machine_mode inmode = GET_MODE (XEXP (op, 0));
    1648       846365 :   enum rtx_code code = GET_CODE (op);
    1649              : 
    1650       890880 :   if (inmode == CCFPmode)
    1651        14881 :     code = ix86_fp_compare_code_to_integer (code);
    1652      1374928 :   else if (inmode != CCmode && inmode != CCCmode && inmode != CCGZmode)
    1653              :     return false;
    1654      1374928 : 
    1655       695609 :   return code == LTU;
    1656      1374928 : })
    1657      1374928 : 
    1658      1374928 : ;; Return true if OP is a valid comparison operator
    1659      3771354 : ;; testing carry flag to be unset.
    1660              : (define_predicate "ix86_carry_flag_unset_operator"
    1661      3771354 :   (match_code "geu,ge")
    1662      1374928 : {
    1663      1374928 :   machine_mode inmode = GET_MODE (XEXP (op, 0));
    1664       893240 :   enum rtx_code code = GET_CODE (op);
    1665       890880 : 
    1666         2360 :   if (inmode == CCFPmode)
    1667           93 :     code = ix86_fp_compare_code_to_integer (code);
    1668              :   else if (inmode != CCmode && inmode != CCCmode && inmode != CCGZmode)
    1669         1436 :     return false;
    1670       890880 : 
    1671       432130 :   return code == GEU;
    1672         1436 : })
    1673         1436 : 
    1674              : ;; Return true if this comparison only requires testing one flag bit.
    1675      2623142 : ;; VCOMX/VUCOMX set ZF, SF, OF, differently from COMI/UCOMI.
    1676              : (define_predicate "ix86_trivial_fp_comparison_operator"
    1677     12096787 :   (if_then_else (match_test "TARGET_AVX10_2")
    1678       672603 :                 (match_code "gt,ge,unlt,unle,eq,uneq,ne,ltgt,ordered,unordered")
    1679         2360 :                 (match_code "gt,ge,unlt,unle,uneq,ltgt,ordered,unordered")))
    1680         2360 : 
    1681         2360 : (define_predicate "ix86_trivial_fp_comparison_operator_xf"
    1682    103565879 :   (match_code "gt,ge,unlt,unle,uneq,ltgt,ordered,unordered"))
    1683              : 
    1684      1377574 : ;; Return true if we know how to do this comparison.  Others require
    1685         2360 : ;; testing more than one flag bit, and we let the generic middle-end
    1686       414889 : ;; code do that.
    1687       414274 : (define_predicate "ix86_fp_comparison_operator"
    1688      2922612 :   (if_then_else (match_test "ix86_fp_comparison_strategy (GET_CODE (op))
    1689      2922612 :                              == IX86_FPCMP_ARITH")
    1690       412529 :                (match_operand 0 "comparison_operator")
    1691      9888534 :                (match_operand 0 "ix86_trivial_fp_comparison_operator")))
    1692       412529 : 
    1693      9888534 : (define_predicate "ix86_fp_comparison_operator_xf"
    1694      1790103 :   (if_then_else (match_test "ix86_fp_comparison_strategy (GET_CODE (op))
    1695      1377574 :                              == IX86_FPCMP_ARITH")
    1696              :                (match_operand 0 "comparison_operator")
    1697              :                (match_operand 0 "ix86_trivial_fp_comparison_operator_xf")))
    1698       412529 : 
    1699       848009 : ;; Return true if we can perform this comparison on TImode operands.
    1700              : (define_predicate "ix86_timode_comparison_operator"
    1701       435480 :   (if_then_else (match_test "TARGET_64BIT")
    1702              :                 (match_operand 0 "ordered_comparison_operator")
    1703      2510083 :                 (match_operand 0 "bt_comparison_operator")))
    1704              : 
    1705      2510083 : ;; Return true if this is a valid second operand for a TImode comparison.
    1706              : (define_predicate "ix86_timode_comparison_operand"
    1707       155708 :   (if_then_else (match_test "TARGET_64BIT")
    1708              :                 (match_operand 0 "x86_64_general_operand")
    1709              :                 (match_operand 0 "nonimmediate_operand")))
    1710              : 
    1711      2043852 : ;; Nearly general operand, but accept any const_double, since we wish
    1712              : ;; to be able to drop them into memory rather than have them get pulled
    1713       518601 : ;; into registers.
    1714      2562453 : (define_predicate "cmp_fp_expander_operand"
    1715              :   (ior (match_code "const_double")
    1716              :        (match_operand 0 "general_operand")))
    1717              : 
    1718      4993222 : ;; Return true if this is a valid binary floating-point operation.
    1719              : (define_predicate "binary_fp_operator"
    1720      4993222 :   (match_code "plus,minus,mult,div"))
    1721              : 
    1722      4984141 : ;; Return true if this is a multiply operation.
    1723      4984141 : (define_predicate "mult_operator"
    1724      4984141 :   (match_code "mult"))
    1725      4984141 : 
    1726      4984141 : ;; Return true if this is a division operation.
    1727              : (define_predicate "div_operator"
    1728              :   (match_code "div"))
    1729              : 
    1730      4984141 : ;; Return true if this is an and, ior or xor operation.
    1731      4984141 : (define_predicate "logic_operator"
    1732              :   (match_code "and,ior,xor"))
    1733              : 
    1734              : ;; Return true if this is an and operation.
    1735     17069733 : (define_predicate "and_operator"
    1736              :   (match_code "and"))
    1737     17069733 : 
    1738      3451068 : ;; Return true if this is a plus, minus, and, ior or xor operation.
    1739              : (define_predicate "plusminuslogic_operator"
    1740              :   (match_code "plus,minus,and,ior,xor"))
    1741              : 
    1742      2772092 : ;; Return true for ARITHMETIC_P.
    1743              : (define_predicate "arith_or_logical_operator"
    1744      2772092 :   (match_code "plus,mult,and,ior,xor,smin,smax,umin,umax,compare,minus,div,
    1745       957744 :                mod,udiv,umod,ashift,rotate,ashiftrt,lshiftrt,rotatert"))
    1746              : 
    1747              : ;; Return true for COMMUTATIVE_P.
    1748              : (define_predicate "commutative_operator"
    1749            0 :   (match_code "plus,mult,and,ior,xor,smin,smax,umin,umax"))
    1750              : 
    1751            0 : ;; Return true if OP is a binary operator that can be promoted to wider mode.
    1752              : (define_predicate "promotable_binary_operator"
    1753            0 :   (ior (match_code "plus,minus,and,ior,xor,ashift")
    1754            0 :        (and (match_code "mult")
    1755     25647678 :             (match_test "TARGET_TUNE_PROMOTE_HIMODE_IMUL"))))
    1756            0 : 
    1757              : (define_predicate "compare_operator"
    1758              :   (match_code "compare"))
    1759              : 
    1760      7632351 : (define_predicate "extract_high_operator"
    1761            0 :   (match_code "zero_extract,sign_extract,ashiftrt,lshiftrt")
    1762      7632351 : {
    1763            0 :   return (const8_operand (XEXP (op, 1), VOIDmode)
    1764       147750 :           && (BINARY_P (op) || const8_operand (XEXP (op, 2), VOIDmode)));
    1765          100 : })
    1766              : 
    1767       147850 : ;; Return true if OP is a memory operand, aligned to
    1768            0 : ;; less than its natural alignment.
    1769              : (define_predicate "misaligned_operand"
    1770       147750 :   (and (match_code "mem")
    1771      6312097 :        (match_test "MEM_ALIGN (op) < GET_MODE_BITSIZE (mode)")))
    1772      1596494 : 
    1773       147750 : ;; Return true if OP is a parallel for an mov{d,q,dqa,ps,pd} vec_select,
    1774       545291 : ;; where one of the two operands of the vec_concat is const0_operand.
    1775       147750 : (define_predicate "movq_parallel"
    1776      2100385 :   (match_code "parallel")
    1777       540791 : {
    1778      1952635 :   unsigned nelt = XVECLEN (op, 0);
    1779      1952635 :   unsigned nelt2 = nelt >> 1;
    1780      2100385 :   unsigned i;
    1781       147750 : 
    1782      1466738 :   if (nelt < 2)
    1783              :     return false;
    1784              : 
    1785       540791 :   /* Validate that all of the elements are constants,
    1786       540791 :      lower halves of permute are lower halves of the first operand,
    1787              :      upper halves of permute come from any of the second operand.  */
    1788     15805055 :   for (i = 0; i < nelt; ++i)
    1789              :     {
    1790      6815918 :       rtx er = XVECEXP (op, 0, i);
    1791      2461735 :       unsigned HOST_WIDE_INT ei;
    1792      4354183 : 
    1793      2461735 :       if (!CONST_INT_P (er))
    1794      4354183 :         return false;
    1795      6815918 :       ei = INTVAL (er);
    1796      2461735 :       if (i < nelt2 && ei != i)
    1797      4354183 :         return false;
    1798      1206260 :       if (i >= nelt2 && (ei < nelt || ei >= nelt << 1))
    1799      4354183 :         return false;
    1800      4354183 :     }
    1801      4354183 : 
    1802      4354183 :   return true;
    1803      4354183 : })
    1804      4354183 : 
    1805      4354183 : ;; Return true if OP is a vzeroall operation, known to be a PARALLEL.
    1806      5766027 : (define_predicate "vzeroall_operation"
    1807      4354183 :   (match_code "parallel")
    1808      7177871 : {
    1809      1411863 :   unsigned i, nregs = TARGET_64BIT ? 16 : 8;
    1810            0 : 
    1811         3896 :   if ((unsigned) XVECLEN (op, 0) != 1 + nregs)
    1812      4354183 :     return false;
    1813      4354183 : 
    1814        69976 :   for (i = 0; i < nregs; i++)
    1815              :     {
    1816        62184 :       rtx elt = XVECEXP (op, 0, i+1);
    1817              : 
    1818      4416367 :       if (GET_CODE (elt) != SET
    1819      4416367 :           || GET_CODE (SET_DEST (elt)) != REG
    1820        62184 :           || GET_MODE (SET_DEST (elt)) != V8SImode
    1821        62184 :           || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
    1822       124368 :           || SET_SRC (elt) != CONST0_RTX (V8SImode))
    1823       979041 :         return false;
    1824              :     }
    1825       979041 :   return true;
    1826              : })
    1827       332344 : 
    1828       332344 : ;; return true if OP is a vzeroall pattern.
    1829       336240 : (define_predicate "vzeroall_pattern"
    1830       332344 :   (and (match_code "parallel")
    1831       340136 :        (match_code "unspec_volatile" "a")
    1832         4009 :        (match_test "XINT (XVECEXP (op, 0, 0), 1) == UNSPECV_VZEROALL")))
    1833            0 : 
    1834       332344 : ;; return true if OP is a vzeroupper pattern.
    1835       332344 : (define_predicate "vzeroupper_pattern"
    1836       332344 :   (and (match_code "parallel")
    1837      4219270 :        (match_code "unspec" "b")
    1838         4604 :        (match_test "XINT (XVECEXP (op, 0, 1), 1) == UNSPEC_CALLEE_ABI")
    1839      4219270 :        (match_test "INTVAL (XVECEXP (XVECEXP (op, 0, 1), 0, 0)) == ABI_VZEROUPPER")))
    1840            0 : 
    1841       332344 : ;; Return true if OP is an addsub vec_merge operation
    1842              : (define_predicate "addsub_vm_operator"
    1843              :   (match_code "vec_merge")
    1844         8495 : {
    1845     25656173 :   rtx op0, op1;
    1846         8495 :   int swapped;
    1847     25647678 :   HOST_WIDE_INT mask;
    1848         8495 :   int nunits, elt;
    1849              : 
    1850         8495 :   op0 = XEXP (op, 0);
    1851         8495 :   op1 = XEXP (op, 1);
    1852              : 
    1853              :   /* Sanity check.  */
    1854         8495 :   if (GET_CODE (op0) == MINUS && GET_CODE (op1) == PLUS)
    1855              :     swapped = 0;
    1856         4335 :   else if (GET_CODE (op0) == PLUS && GET_CODE (op1) == MINUS)
    1857              :     swapped = 1;
    1858              :   else
    1859            0 :     gcc_unreachable ();
    1860              : 
    1861         8495 :   mask = INTVAL (XEXP (op, 2));
    1862         8495 :   nunits = GET_MODE_NUNITS (mode);
    1863              : 
    1864        32859 :   for (elt = 0; elt < nunits; elt++)
    1865              :     {
    1866              :       /* bit clear: take from op0, set: take from op1  */
    1867        24610 :       int bit = !(mask & (HOST_WIDE_INT_1U << elt));
    1868              : 
    1869        24610 :       if (bit != ((elt & 1) ^ swapped))
    1870              :         return false;
    1871              :     }
    1872              : 
    1873              :   return true;
    1874              : })
    1875              : 
    1876              : ;; Return true if OP is an addsub vec_select/vec_concat operation
    1877         8495 : (define_predicate "addsub_vs_operator"
    1878              :   (and (match_code "vec_select")
    1879         8495 :        (match_code "vec_concat" "0"))
    1880        16744 : {
    1881         8249 :   rtx op0, op1;
    1882            0 :   bool swapped;
    1883            0 :   int nunits, elt;
    1884              : 
    1885            0 :   op0 = XEXP (XEXP (op, 0), 0);
    1886            0 :   op1 = XEXP (XEXP (op, 0), 1);
    1887              : 
    1888              :   /* Sanity check.  */
    1889            0 :   if (GET_CODE (op0) == MINUS && GET_CODE (op1) == PLUS)
    1890              :     swapped = false;
    1891            0 :   else if (GET_CODE (op0) == PLUS && GET_CODE (op1) == MINUS)
    1892              :     swapped = true;
    1893              :   else
    1894            0 :     gcc_unreachable ();
    1895              : 
    1896            0 :   nunits = GET_MODE_NUNITS (mode);
    1897            0 :   if (XVECLEN (XEXP (op, 1), 0) != nunits)
    1898              :     return false;
    1899              : 
    1900              :   /* We already checked that permutation is suitable for addsub,
    1901              :      so only look at the first element of the parallel.  */
    1902            0 :   elt = INTVAL (XVECEXP (XEXP (op, 1), 0, 0));
    1903              : 
    1904            0 :   return elt == (swapped ? nunits : 0);
    1905              : })
    1906              : 
    1907              : ;; Return true if OP is a parallel for an addsub vec_select.
    1908            0 : (define_predicate "addsub_vs_parallel"
    1909              :   (and (match_code "parallel")
    1910            0 :        (match_code "const_int" "a"))
    1911            0 : {
    1912            0 :   int nelt = XVECLEN (op, 0);
    1913          493 :   int elt, i;
    1914              : 
    1915          493 :   if (nelt < 2)
    1916          493 :     return false;
    1917              : 
    1918              :   /* Check that the permutation is suitable for addsub.
    1919              :      For example, { 0 9 2 11 4 13 6 15 } or { 8 1 10 3 12 5 14 7 }.  */
    1920          493 :   elt = INTVAL (XVECEXP (op, 0, 0));
    1921          493 :   if (elt == 0)
    1922              :     {
    1923          447 :       for (i = 1; i < nelt; ++i)
    1924          439 :         if (INTVAL (XVECEXP (op, 0, i)) != (i + (i & 1) * nelt))
    1925              :           return false;
    1926              :     }
    1927           54 :   else if (elt == nelt)
    1928              :     {
    1929            0 :       for (i = 1; i < nelt; ++i)
    1930            0 :         if (INTVAL (XVECEXP (op, 0, i)) != (elt + i - (i & 1) * nelt))
    1931              :           return false;
    1932              :     }
    1933              :   else
    1934              :     return false;
    1935              : 
    1936              :   return true;
    1937              : })
    1938              : 
    1939              : ;; Return true if OP is a constant pool in perm{w,d,b} which contains index
    1940          493 : ;; match pmov{dw,wb,qd}.
    1941              : (define_predicate "permvar_truncate_operand"
    1942          493 :  (match_code "mem")
    1943          986 : {
    1944            0 :   int nelt = GET_MODE_NUNITS (mode);
    1945           16 :   int perm[128];
    1946           16 :   int id;
    1947              : 
    1948           32 :   if (!INTEGRAL_MODE_P (mode) || !VECTOR_MODE_P (mode))
    1949              :     return false;
    1950              : 
    1951           16 :   if (nelt < 2)
    1952              :     return false;
    1953              : 
    1954           16 :   if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
    1955              :     return false;
    1956              : 
    1957           16 :   id = exact_log2 (nelt);
    1958              : 
    1959              :   /* Check that the permutation is suitable for pmovz{bw,wd,dq}.
    1960              :      For example V16HImode to V8HImode
    1961              :      { 0 2 4 6 8 10 12 14 * * * * * * * * }.  */
    1962          232 :   for (int i = 0; i != nelt / 2; i++)
    1963          216 :     if ((perm[i] & ((1 << id) - 1)) != i * 2)
    1964              :       return false;
    1965              : 
    1966              :   return true;
    1967              : })
    1968              : 
    1969              : ;; Return true if OP is a constant pool in shufb which contains index
    1970           49 : ;; match pmovdw.
    1971              : (define_predicate "pshufb_truncv4siv4hi_operand"
    1972           16 :  (match_code "mem")
    1973           65 : {
    1974           16 :   int perm[128];
    1975              : 
    1976            8 :   if (mode != E_V16QImode)
    1977              :     return false;
    1978            8 : 
    1979            8 :   if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
    1980              :     return false;
    1981              : 
    1982              :   /* Check that the permutation is suitable for pmovdw.
    1983              :      For example V4SImode to V4HImode
    1984              :      { 0 1 4 5 8 9 12 13 * * * * * * * * }.
    1985              :      index = i % 2 + (i / 2) * 4.  */
    1986           58 :   for (int i = 0; i != 8; i++)
    1987              :     {
    1988              :       /* if (SRC2[(i * 8)+7] = 1) then DEST[(i*8)+7..(i*8)+0] := 0;  */
    1989           52 :       if (perm[i] & 128)
    1990              :         return false;
    1991              : 
    1992           52 :       if ((perm[i] & 15) != ((i & 1) + (i & 0xFE) * 2))
    1993              :         return false;
    1994              :      }
    1995              : 
    1996              :   return true;
    1997              : })
    1998              : 
    1999              : ;; Return true if OP is a constant pool in shufb which contains index
    2000           11 : ;; match pmovdw.
    2001              : (define_predicate "pshufb_truncv8hiv8qi_operand"
    2002            8 :  (match_code "mem")
    2003           17 : {
    2004            6 :   int perm[128];
    2005              : 
    2006           11 :   if (mode != E_V16QImode)
    2007              :     return false;
    2008           11 : 
    2009           11 :   if (!ix86_extract_perm_from_pool_constant (&perm[0], op))
    2010              :     return false;
    2011              : 
    2012              :   /* Check that the permutation is suitable for pmovwb.
    2013              :      For example V16QImode to V8QImode
    2014              :      { 0 2 4 6 8 10 12 14 * * * * * * * * }.
    2015              :      index = i % 2 + (i / 2) * 4.  */
    2016           57 :   for (int i = 0; i != 8; i++)
    2017              :     {
    2018              :       /* if (SRC2[(i * 8)+7] = 1) then DEST[(i*8)+7..(i*8)+0] := 0;  */
    2019           52 :       if (perm[i] & 128)
    2020              :         return false;
    2021              : 
    2022           52 :       if ((perm[i] & 15) != i * 2)
    2023              :          return false;
    2024              :     }
    2025              : 
    2026              :   return true;
    2027              : })
    2028              : 
    2029              : ;; Return true if OP is a parallel for an pmovz{bw,wd,dq} vec_select,
    2030           14 : ;; where one of the two operands of the vec_concat is const0_operand.
    2031              : (define_predicate "pmovzx_parallel"
    2032           11 :   (and (match_code "parallel")
    2033           19 :        (match_code "const_int" "a"))
    2034            5 : {
    2035      1483179 :   int nelt = XVECLEN (op, 0);
    2036      1483179 :   int elt, i;
    2037              : 
    2038      1483179 :   if (nelt < 2)
    2039              :     return false;
    2040              : 
    2041              :   /* Check that the permutation is suitable for pmovz{bw,wd,dq}.
    2042              :      For example { 0 16 1 17 2 18 3 19 4 20 5 21 6 22 7 23 }.  */
    2043      1483177 :   elt = INTVAL (XVECEXP (op, 0, 0));
    2044      1483177 :   if (elt == 0)
    2045              :     {
    2046      3440257 :       for (i = 1; i < nelt; ++i)
    2047      2950968 :         if ((i & 1) != 0)
    2048              :           {
    2049      1889213 :             if (INTVAL (XVECEXP (op, 0, i)) < nelt)
    2050              :               return false;
    2051              :           }
    2052      1061755 :         else if (INTVAL (XVECEXP (op, 0, i)) != i / 2)
    2053              :           return false;
    2054              :     }
    2055              :   else
    2056              :     return false;
    2057              : 
    2058              :   return true;
    2059              : })
    2060              : 
    2061              : ;; Return true if OP is a parallel for an insertps vec_select,
    2062      1483179 : ;; where one of the two operands of the vec_concat is const0_operand.
    2063              : (define_predicate "insertps_parallel"
    2064      1483179 :   (and (match_code "parallel")
    2065      2966358 :        (match_code "const_int" "a"))
    2066            0 : {
    2067        12845 :   int i;
    2068              : 
    2069        12845 :   if (XVECLEN (op, 0) != 4)
    2070        12845 :     return false;
    2071              : 
    2072              :   /* One element in [0..3], and the other 3 in [4..7].  */
    2073              :   bool found = false;
    2074        41383 :   for (i = 0; i < 4; ++i)
    2075        39764 :     if (INTVAL (XVECEXP (op, 0, i)) < 4)
    2076              :       {
    2077        24071 :         if (found)
    2078              :           return false;
    2079              :         found = true;
    2080              :       }
    2081              : 
    2082              :   return found;
    2083              : })
    2084              : 
    2085              : ;; Return true if OP is a const vector with duplicate value.
    2086        12845 : (define_predicate "const_vector_duplicate_operand"
    2087              :   (match_code "const_vector")
    2088        12845 : {
    2089        25690 :   rtx elt = XVECEXP (op, 0, 0);
    2090            0 :   int i, nelt = XVECLEN (op, 0);
    2091              : 
    2092           96 :   for (i = 1; i < nelt; ++i)
    2093           93 :     if (!rtx_equal_p (elt, XVECEXP (op, 0, i)))
    2094            3 :       return false;
    2095              :   return true;
    2096              : })
    2097              : 
    2098              : ;; Return true if OP is a parallel for a vbroadcast permute.
    2099            3 : (define_predicate "avx_vbroadcast_operand"
    2100              :   (and (match_code "parallel")
    2101            3 :        (match_code "const_int" "a"))
    2102            6 : {
    2103            3 :   rtx elt = XVECEXP (op, 0, 0);
    2104       389142 :   int i, nelt = XVECLEN (op, 0);
    2105              : 
    2106              :   /* Don't bother checking there are the right number of operands,
    2107       389142 :      merely that they're all identical.  */
    2108       492007 :   for (i = 1; i < nelt; ++i)
    2109       277316 :     if (XVECEXP (op, 0, i) != elt)
    2110              :       return false;
    2111              :   return true;
    2112              : })
    2113              : 
    2114              : ;; Return true if OP is a parallel for a vbroadcastf128 permute.
    2115       389142 : (define_predicate "avx_vbroadcast128_operand"
    2116              :   (and (match_code "parallel")
    2117       389142 :        (match_code "const_int" "a"))
    2118       778284 : {
    2119            0 :   int i, nelt = XVECLEN (op, 0);
    2120      1400049 :   int half = nelt / 2;
    2121              : 
    2122      2329428 :   for (i = 0; i < nelt; ++i)
    2123      1400049 :     {
    2124      2329278 :       int index = INTVAL (XVECEXP (op, 0, i));
    2125      2329278 :       if ((i < half && index != i)
    2126      1085215 :           || (i >= half && index != (i - half)))
    2127              :         return false;
    2128              :     }
    2129              : 
    2130              :   return true;
    2131              : })
    2132              : 
    2133              : ;; Return true if OP is a parallel for a palignr permute.
    2134      1400049 : (define_predicate "palignr_operand"
    2135              :   (and (match_code "parallel")
    2136      1400049 :        (match_code "const_int" "a"))
    2137      2800098 : {
    2138            0 :   int elt = INTVAL (XVECEXP (op, 0, 0));
    2139        26392 :   int i, nelt = XVECLEN (op, 0);
    2140              : 
    2141              :   /* Check that an order in the permutation is suitable for palignr.
    2142        26392 :      For example, {5 6 7 0 1 2 3 4} is "palignr 5, xmm, xmm".  */
    2143        61857 :   for (i = 1; i < nelt; ++i)
    2144        58092 :     if (INTVAL (XVECEXP (op, 0, i)) != ((elt + i) % nelt))
    2145              :       return false;
    2146              :   return true;
    2147              : })
    2148              : 
    2149              : ;; Return true if OP is a proper third operand to vpblendw256.
    2150        26392 : (define_predicate "avx2_pblendw_operand"
    2151              :   (match_code "const_int")
    2152        26392 : {
    2153        52784 :   HOST_WIDE_INT val = INTVAL (op);
    2154            0 :   HOST_WIDE_INT low = val & 0xff;
    2155         7033 :   return val == ((low << 8) | low);
    2156              : })
    2157              : 
    2158         7033 : ;; Return true if OP is vector_operand or CONST_VECTOR.
    2159         7033 : (define_predicate "general_vector_operand"
    2160              :   (ior (match_operand 0 "vector_operand")
    2161         7033 :        (match_code "const_vector")))
    2162         7033 : 
    2163              : ;; Return true if OP is either -1 constant or stored in register.
    2164              : (define_predicate "register_or_constm1_operand"
    2165              :   (ior (match_operand 0 "register_operand")
    2166        13118 :        (and (match_code "const_int")
    2167            0 :             (match_test "op == constm1_rtx"))))
    2168        13118 : 
    2169         2459 : ;; Return true if the vector ends with between 12 and 18 register saves using
    2170              : ;; RAX as the base address.
    2171              : (define_predicate "save_multiple"
    2172       226317 :   (match_code "parallel")
    2173         1324 : {
    2174       226317 :   const unsigned len = XVECLEN (op, 0);
    2175         1324 :   unsigned i;
    2176              : 
    2177              :   /* Starting from end of vector, count register saves.  */
    2178       319026 :   for (i = 0; i < len; ++i)
    2179              :     {
    2180       319026 :       rtx src, dest, addr;
    2181       319026 :       rtx e = XVECEXP (op, 0, len - 1 - i);
    2182              : 
    2183       319026 :       if (GET_CODE (e) != SET)
    2184              :         break;
    2185              : 
    2186       311981 :       src  = SET_SRC (e);
    2187       311981 :       dest = SET_DEST (e);
    2188              : 
    2189       311981 :       if (!REG_P (src) || !MEM_P (dest))
    2190              :         break;
    2191              : 
    2192        92709 :       addr = XEXP (dest, 0);
    2193              : 
    2194              :       /* Good if dest address is in RAX.  */
    2195        92709 :       if (REG_P (addr) && REGNO (addr) == AX_REG)
    2196         4202 :         continue;
    2197              : 
    2198              :       /* Good if dest address is offset of RAX.  */
    2199       177014 :       if (GET_CODE (addr) == PLUS
    2200        88507 :           && REG_P (XEXP (addr, 0))
    2201       177014 :           && REGNO (XEXP (addr, 0)) == AX_REG)
    2202        88507 :         continue;
    2203              : 
    2204              :       break;
    2205              :     }
    2206       226317 :   return (i >= 12 && i <= 18);
    2207              : })
    2208              : 
    2209              : 
    2210       226317 : ;; Return true if the vector ends with between 12 and 18 register loads using
    2211              : ;; RSI as the base address.
    2212       452634 : (define_predicate "restore_multiple"
    2213       226317 :   (match_code "parallel")
    2214            0 : {
    2215      7890062 :   const unsigned len = XVECLEN (op, 0);
    2216      7890062 :   unsigned i;
    2217              : 
    2218      7890062 :   /* Starting from end of vector, count register restores.  */
    2219      7996390 :   for (i = 0; i < len; ++i)
    2220              :     {
    2221      7996390 :       rtx src, dest, addr;
    2222      7996390 :       rtx e = XVECEXP (op, 0, len - 1 - i);
    2223              : 
    2224      7996390 :       if (GET_CODE (e) != SET)
    2225              :         break;
    2226              : 
    2227      4502079 :       src  = SET_SRC (e);
    2228      4502079 :       dest = SET_DEST (e);
    2229              : 
    2230      4502079 :       if (!MEM_P (src) || !REG_P (dest))
    2231              :         break;
    2232              : 
    2233      1385036 :       addr = XEXP (src, 0);
    2234              : 
    2235              :       /* Good if src address is in RSI.  */
    2236      1385036 :       if (REG_P (addr) && REGNO (addr) == SI_REG)
    2237         5129 :         continue;
    2238              : 
    2239              :       /* Good if src address is offset of RSI.  */
    2240      1481106 :       if (GET_CODE (addr) == PLUS
    2241       939867 :           && REG_P (XEXP (addr, 0))
    2242      2254479 :           && REGNO (XEXP (addr, 0)) == SI_REG)
    2243       101199 :         continue;
    2244              : 
    2245              :       break;
    2246              :     }
    2247      7890062 :   return (i >= 12 && i <= 18);
    2248              : })
    2249              : 
    2250              : ;; Keylocker specific predicates
    2251      7890062 : (define_predicate "encodekey128_operation"
    2252              :   (match_code "parallel")
    2253     15780124 : {
    2254      7890062 :   unsigned i;
    2255            0 :   rtx elt;
    2256              : 
    2257          108 :   if (XVECLEN (op, 0) != 8)
    2258              :     return false;
    2259          108 : 
    2260          392 :   for(i = 0; i < 3; i++)
    2261              :     {
    2262          294 :       elt = XVECEXP (op, 0, i + 1);
    2263          294 :       if (GET_CODE (elt) != SET
    2264          294 :           || GET_CODE (SET_DEST (elt)) != REG
    2265          294 :           || GET_MODE (SET_DEST (elt)) != V2DImode
    2266          294 :           || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
    2267          294 :           || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
    2268          294 :           || GET_MODE (SET_SRC (elt)) != V2DImode
    2269          294 :           || XVECLEN(SET_SRC (elt), 0) != 1
    2270          588 :           || XVECEXP(SET_SRC (elt), 0, 0) != const0_rtx)
    2271              :         return false;
    2272              :     }
    2273              : 
    2274          392 :   for(i = 4; i < 7; i++)
    2275              :     {
    2276          294 :       elt = XVECEXP (op, 0, i);
    2277          294 :       if (GET_CODE (elt) != CLOBBER
    2278          294 :           || GET_MODE (elt) != VOIDmode
    2279          294 :           || GET_CODE (XEXP (elt, 0)) != REG
    2280          294 :           || GET_MODE (XEXP (elt, 0)) != V2DImode
    2281          588 :           || REGNO (XEXP (elt, 0)) != GET_SSE_REGNO (i))
    2282              :         return false;
    2283              :     }
    2284              : 
    2285           98 :   elt = XVECEXP (op, 0, 7);
    2286           98 :   if (GET_CODE (elt) != CLOBBER
    2287           98 :       || GET_MODE (elt) != VOIDmode
    2288           98 :       || GET_CODE (XEXP (elt, 0)) != REG
    2289           98 :       || GET_MODE (XEXP (elt, 0)) != CCmode
    2290          196 :       || REGNO (XEXP (elt, 0)) != FLAGS_REG)
    2291            0 :     return false;
    2292              :   return true;
    2293              : })
    2294              : 
    2295              : (define_predicate "encodekey256_operation"
    2296          108 :   (match_code "parallel")
    2297              : {
    2298          337 :   unsigned i;
    2299          108 :   rtx elt;
    2300            0 : 
    2301          121 :   if (XVECLEN (op, 0) != 9)
    2302              :     return false;
    2303              : 
    2304          121 :   elt = SET_SRC (XVECEXP (op, 0, 0));
    2305          112 :   elt = XVECEXP (elt, 0, 2);
    2306          112 :   if (!REG_P (elt)
    2307          112 :       || REGNO(elt) != GET_SSE_REGNO (1))
    2308              :     return false;
    2309              : 
    2310          560 :   for(i = 0; i < 4; i++)
    2311              :     {
    2312          448 :       elt = XVECEXP (op, 0, i + 1);
    2313          448 :       if (GET_CODE (elt) != SET
    2314          448 :           || GET_CODE (SET_DEST (elt)) != REG
    2315          448 :           || GET_MODE (SET_DEST (elt)) != V2DImode
    2316          448 :           || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
    2317          448 :           || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
    2318          448 :           || GET_MODE (SET_SRC (elt)) != V2DImode
    2319          448 :           || XVECLEN(SET_SRC (elt), 0) != 1
    2320          896 :           || XVECEXP(SET_SRC (elt), 0, 0) != const0_rtx)
    2321              :         return false;
    2322              :     }
    2323              : 
    2324          448 :   for(i = 4; i < 7; i++)
    2325              :     {
    2326          336 :       elt = XVECEXP (op, 0, i + 1);
    2327          336 :       if (GET_CODE (elt) != CLOBBER
    2328          336 :           || GET_MODE (elt) != VOIDmode
    2329          336 :           || GET_CODE (XEXP (elt, 0)) != REG
    2330          336 :           || GET_MODE (XEXP (elt, 0)) != V2DImode
    2331          672 :           || REGNO (XEXP (elt, 0)) != GET_SSE_REGNO (i))
    2332              :         return false;
    2333              :     }
    2334              : 
    2335          112 :   elt = XVECEXP (op, 0, 8);
    2336          112 :   if (GET_CODE (elt) != CLOBBER
    2337          112 :       || GET_MODE (elt) != VOIDmode
    2338          112 :       || GET_CODE (XEXP (elt, 0)) != REG
    2339          112 :       || GET_MODE (XEXP (elt, 0)) != CCmode
    2340          224 :       || REGNO (XEXP (elt, 0)) != FLAGS_REG)
    2341            0 :     return false;
    2342              :   return true;
    2343              : })
    2344              : 
    2345              : 
    2346          121 : (define_predicate "aeswidekl_operation"
    2347              :   (match_code "parallel")
    2348          242 : {
    2349          121 :   unsigned i;
    2350            0 :   rtx elt;
    2351              : 
    2352         5796 :   for (i = 0; i < 8; i++)
    2353              :     {
    2354          660 :       elt = XVECEXP (op, 0, i + 1);
    2355         5168 :       if (GET_CODE (elt) != SET
    2356         5168 :           || GET_CODE (SET_DEST (elt)) != REG
    2357         5168 :           || GET_MODE (SET_DEST (elt)) != V2DImode
    2358         5168 :           || REGNO (SET_DEST (elt)) != GET_SSE_REGNO (i)
    2359         5168 :           || GET_CODE (SET_SRC (elt)) != UNSPEC_VOLATILE
    2360         5168 :           || GET_MODE (SET_SRC (elt)) != V2DImode
    2361         5168 :           || XVECLEN (SET_SRC (elt), 0) != 1
    2362         5168 :           || !REG_P (XVECEXP (SET_SRC (elt), 0, 0))
    2363        10304 :           || REGNO (XVECEXP (SET_SRC (elt), 0, 0)) != GET_SSE_REGNO (i))
    2364              :         return false;
    2365              :     }
    2366              :   return true;
    2367              : })
    2368              : 
    2369              : ;; Return true if OP is a memory operand that can be also used in APX
    2370          660 : ;; EVEX-encoded patterns (i.e. APX NDD/NF) with immediate operand.  With
    2371              : ;; non-default address space, segment register or address size prefix,
    2372         1320 : ;; APX EVEX-encoded instruction length can exceed the 15 byte size limit.
    2373          660 : (define_predicate "apx_evex_memory_operand"
    2374            0 :   (match_operand 0 "memory_operand")
    2375              : {
    2376              :   /* OK if immediate operand size < 4 bytes.  */
    2377         1686 :   if (GET_MODE_SIZE (mode) < 4)
    2378         1686 :     return true;
    2379              : 
    2380         1527 :   bool default_addr = ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (op));
    2381         1695 :   bool address_size_prefix = TARGET_X32 && Pmode == SImode;
    2382              : 
    2383         1527 :   struct ix86_address parts;
    2384         1527 :   int ok;
    2385              : 
    2386         1527 :   op = XEXP (op, 0);
    2387         1527 :   ok = ix86_decompose_address (op, &parts);
    2388         1527 :   gcc_assert (ok);
    2389              : 
    2390         1527 :   if (default_addr)
    2391              :     {
    2392              :       /* Default address space.  */
    2393              : 
    2394              :       /* Not OK with address size prefix, index register and disp.  */
    2395          691 :       if (address_size_prefix
    2396          168 :           && parts.index
    2397           42 :           && parts.disp
    2398           42 :           && parts.disp != const0_rtx)
    2399           42 :         return false;
    2400              :     }
    2401              :   else
    2402              :     {
    2403              :       /* Non-default address space.  */
    2404              : 
    2405              :       /* Not OK without base register.  */
    2406          836 :       if (!parts.base)
    2407              :         return false;
    2408              : 
    2409              :       /* Not OK with disp and address size prefix.  */
    2410          668 :       if (address_size_prefix && parts.disp)
    2411            0 :         return false;
    2412              :     }
    2413              : 
    2414              :   return true;
    2415              : })
    2416              : 
    2417              : ;; Return true if OP is a memory operand which can be used in APX EVEX-encoded
    2418         1804 : ;; ADD patterns (i.e. APX NDD/NF) for with register source operand.
    2419              : ;; UNSPEC_GOTNTPOFF memory operand is allowed with APX EVEX-encoded ADD only if
    2420         3490 : ;; R_X86_64_CODE_6_GOTTPOFF works.
    2421         1686 : (define_predicate "apx_evex_add_memory_operand"
    2422              :   (match_operand 0 "memory_operand")
    2423              : {
    2424              :   /* OK if "add %reg1, name@gottpoff(%rip), %reg2" or
    2425              :    "{nf} add name@gottpoff(%rip), %reg1" are supported.  */
    2426              :   if (HAVE_AS_R_X86_64_CODE_6_GOTTPOFF)
    2427              :     return true;
    2428              : 
    2429              :   op = XEXP (op, 0);
    2430              : 
    2431              :   /* Disallow APX EVEX-encoded ADD with UNSPEC_GOTNTPOFF.  */
    2432              :   if (GET_CODE (op) == CONST
    2433              :       && GET_CODE (XEXP (op, 0)) == UNSPEC
    2434              :       && XINT (XEXP (op, 0), 1) == UNSPEC_GOTNTPOFF)
    2435              :     return false;
    2436              : 
    2437              :   return true;
    2438              : })
    2439              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2440              : /* (content generated from coverage data) */
    2441          848 : /* BEGIN: function "_Z27apx_evex_add_memory_operandP7rtx_def12machine_mode" */
    2442              : /* ... */
    2443          848 : /* ... */
    2444          848 : /* ... */
    2445              : /* END: function "_Z27apx_evex_add_memory_operandP7rtx_def12machine_mode" */
    2446              : /* ... */
    2447              : /* ... */
    2448   1009169236 : /* BEGIN: function "_Z19lookup_constraint_1PKc" */
    2449              : /* ... */
    2450   1009169236 : /* ... */
    2451              : /* ... */
    2452              : /* ... */
    2453              : /* ... */
    2454            0 : /* ... */
    2455            0 : /* ... */
    2456            0 : /* ... */
    2457            0 : /* ... */
    2458            0 : /* ... */
    2459            0 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2460    597288151 : /* (content generated from coverage data) */
    2461    597288151 : /* ... */
    2462              : /* ... */
    2463              : /* ... */
    2464      8585170 : /* ... */
    2465              : /* ... */
    2466    136595292 : /* ... */
    2467              : /* ... */
    2468       137069 : /* ... */
    2469              : /* ... */
    2470      1723550 : /* ... */
    2471              : /* ... */
    2472      1440723 : /* ... */
    2473              : /* ... */
    2474     57614308 : /* ... */
    2475              : /* ... */
    2476     52584062 : /* ... */
    2477              : /* ... */
    2478    101793658 : /* ... */
    2479              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2480     39888624 : /* (content generated from coverage data) */
    2481              : /* ... */
    2482    120714435 : /* ... */
    2483              : /* ... */
    2484     76210433 : /* ... */
    2485              : /* ... */
    2486          827 : /* ... */
    2487              : /* ... */
    2488            0 : /* ... */
    2489            0 : /* ... */
    2490            0 : /* ... */
    2491            0 : /* ... */
    2492            0 : /* ... */
    2493            0 : /* ... */
    2494            0 : /* ... */
    2495            0 : /* ... */
    2496            0 : /* ... */
    2497            0 : /* ... */
    2498            0 : /* ... */
    2499            0 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2500            0 : /* (content generated from coverage data) */
    2501            0 : /* ... */
    2502            0 : /* ... */
    2503            0 : /* ... */
    2504            0 : /* ... */
    2505            0 : /* ... */
    2506            0 : /* ... */
    2507            0 : /* ... */
    2508            0 : /* ... */
    2509            0 : /* ... */
    2510            0 : /* ... */
    2511            0 : /* ... */
    2512            0 : /* ... */
    2513            0 : /* ... */
    2514            0 : /* ... */
    2515            0 : /* ... */
    2516            0 : /* ... */
    2517            0 : /* ... */
    2518     41234398 : /* ... */
    2519     41234398 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2520              : /* (content generated from coverage data) */
    2521        23356 : /* ... */
    2522              : /* ... */
    2523              : /* ... */
    2524            0 : /* ... */
    2525            0 : /* ... */
    2526            0 : /* ... */
    2527            0 : /* ... */
    2528      3467831 : /* ... */
    2529      3467831 : /* ... */
    2530              : /* ... */
    2531              : /* ... */
    2532         5455 : /* ... */
    2533              : /* ... */
    2534       341131 : /* ... */
    2535              : /* ... */
    2536      2764611 : /* ... */
    2537              : /* ... */
    2538       272181 : /* ... */
    2539              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2540         1418 : /* (content generated from coverage data) */
    2541              : /* ... */
    2542          240 : /* ... */
    2543              : /* ... */
    2544         5071 : /* ... */
    2545              : /* ... */
    2546            0 : /* ... */
    2547            0 : /* ... */
    2548    358492716 : /* ... */
    2549    358492716 : /* ... */
    2550              : /* ... */
    2551              : /* ... */
    2552      5627229 : /* ... */
    2553              : /* ... */
    2554      4023355 : /* ... */
    2555              : /* ... */
    2556      1367842 : /* ... */
    2557              : /* ... */
    2558      1378195 : /* ... */
    2559              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2560        19928 : /* (content generated from coverage data) */
    2561              : /* ... */
    2562    197214064 : /* ... */
    2563              : /* ... */
    2564      1180065 : /* ... */
    2565              : /* ... */
    2566    142809453 : /* ... */
    2567              : /* ... */
    2568      3153896 : /* ... */
    2569              : /* ... */
    2570       474279 : /* ... */
    2571              : /* ... */
    2572      1216185 : /* ... */
    2573              : /* ... */
    2574            0 : /* ... */
    2575            0 : /* ... */
    2576            0 : /* ... */
    2577            0 : /* ... */
    2578            0 : /* ... */
    2579            0 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2580            0 : /* (content generated from coverage data) */
    2581            0 : /* ... */
    2582            0 : /* ... */
    2583            0 : /* ... */
    2584            0 : /* ... */
    2585            0 : /* ... */
    2586            0 : /* ... */
    2587            0 : /* ... */
    2588            0 : /* ... */
    2589            0 : /* ... */
    2590      8686140 : /* ... */
    2591      8686140 : /* ... */
    2592              : /* ... */
    2593              : /* ... */
    2594      1327812 : /* ... */
    2595              : /* ... */
    2596            0 : /* ... */
    2597              : /* ... */
    2598            0 : /* ... */
    2599              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2600            0 : /* (content generated from coverage data) */
    2601              : /* ... */
    2602            0 : /* ... */
    2603              : /* ... */
    2604            0 : /* ... */
    2605              : /* ... */
    2606       220901 : /* ... */
    2607              : /* ... */
    2608         8293 : /* ... */
    2609              : /* ... */
    2610      6193571 : /* ... */
    2611              : /* ... */
    2612       158284 : /* ... */
    2613              : /* ... */
    2614       270005 : /* ... */
    2615              : /* ... */
    2616         3489 : /* ... */
    2617              : /* ... */
    2618            0 : /* ... */
    2619              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2620            0 : /* (content generated from coverage data) */
    2621            0 : /* ... */
    2622            0 : /* ... */
    2623            0 : /* ... */
    2624            0 : /* ... */
    2625            0 : /* ... */
    2626            0 : /* ... */
    2627            0 : /* ... */
    2628            0 : /* ... */
    2629            0 : /* ... */
    2630            0 : /* ... */
    2631            0 : /* ... */
    2632            0 : /* ... */
    2633            0 : /* ... */
    2634            0 : /* ... */
    2635            0 : /* ... */
    2636            0 : /* ... */
    2637            0 : /* ... */
    2638            0 : /* ... */
    2639            0 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2640            0 : /* (content generated from coverage data) */
    2641            0 : /* ... */
    2642            0 : /* ... */
    2643            0 : /* ... */
    2644            0 : /* ... */
    2645            0 : /* ... */
    2646            0 : /* ... */
    2647            0 : /* ... */
    2648              : /* ... */
    2649              : /* ... */
    2650         1337 : /* ... */
    2651              : /* END: function "_Z19lookup_constraint_1PKc" */
    2652              : /* ... */
    2653              : /* ... */
    2654              : /* ... */
    2655              : /* ... */
    2656              : /* ... */
    2657              : /* ... */
    2658              : /* ... */
    2659              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2660              : /* (content generated from coverage data) */
    2661              : /* ... */
    2662              : /* ... */
    2663              : /* ... */
    2664              : /* ... */
    2665              : /* ... */
    2666              : /* ... */
    2667              : /* ... */
    2668              : /* ... */
    2669              : /* ... */
    2670              : /* ... */
    2671              : /* ... */
    2672              : /* ... */
    2673              : /* ... */
    2674              : /* ... */
    2675              : /* ... */
    2676              : /* ... */
    2677              : /* ... */
    2678              : /* ... */
    2679              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2680              : /* (content generated from coverage data) */
    2681              : /* ... */
    2682              : /* ... */
    2683              : /* ... */
    2684              : /* ... */
    2685              : /* ... */
    2686              : /* ... */
    2687              : /* ... */
    2688              : /* ... */
    2689              : /* ... */
    2690              : /* ... */
    2691              : /* ... */
    2692              : /* ... */
    2693              : /* ... */
    2694              : /* ... */
    2695              : /* ... */
    2696              : /* ... */
    2697              : /* ... */
    2698              : /* ... */
    2699              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2700              : /* (content generated from coverage data) */
    2701              : /* ... */
    2702              : /* ... */
    2703              : /* ... */
    2704              : /* ... */
    2705              : /* ... */
    2706              : /* ... */
    2707              : /* ... */
    2708              : /* ... */
    2709              : /* ... */
    2710              : /* ... */
    2711              : /* ... */
    2712              : /* ... */
    2713              : /* ... */
    2714              : /* ... */
    2715              : /* ... */
    2716              : /* ... */
    2717              : /* ... */
    2718              : /* ... */
    2719              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2720              : /* (content generated from coverage data) */
    2721              : /* ... */
    2722              : /* ... */
    2723              : /* ... */
    2724              : /* ... */
    2725              : /* ... */
    2726              : /* ... */
    2727              : /* ... */
    2728              : /* ... */
    2729              : /* ... */
    2730              : /* ... */
    2731              : /* ... */
    2732              : /* ... */
    2733              : /* ... */
    2734              : /* ... */
    2735              : /* ... */
    2736              : /* ... */
    2737              : /* ... */
    2738              : /* ... */
    2739              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2740              : /* (content generated from coverage data) */
    2741              : /* ... */
    2742              : /* ... */
    2743              : /* ... */
    2744              : /* ... */
    2745              : /* ... */
    2746              : /* ... */
    2747              : /* ... */
    2748              : /* ... */
    2749              : /* ... */
    2750              : /* ... */
    2751              : /* ... */
    2752              : /* ... */
    2753              : /* ... */
    2754              : /* ... */
    2755              : /* ... */
    2756              : /* ... */
    2757              : /* ... */
    2758              : /* ... */
    2759              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2760              : /* (content generated from coverage data) */
    2761              : /* ... */
    2762              : /* ... */
    2763              : /* ... */
    2764              : /* ... */
    2765              : /* ... */
    2766              : /* ... */
    2767              : /* ... */
    2768              : /* ... */
    2769              : /* ... */
    2770              : /* ... */
    2771              : /* ... */
    2772              : /* ... */
    2773              : /* ... */
    2774              : /* ... */
    2775              : /* ... */
    2776              : /* ... */
    2777              : /* ... */
    2778              : /* ... */
    2779              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2780              : /* (content generated from coverage data) */
    2781              : /* ... */
    2782              : /* ... */
    2783              : /* ... */
    2784              : /* ... */
    2785              : /* ... */
    2786              : /* ... */
    2787              : /* ... */
    2788              : /* ... */
    2789              : /* ... */
    2790              : /* ... */
    2791              : /* ... */
    2792              : /* ... */
    2793              : /* ... */
    2794              : /* ... */
    2795              : /* ... */
    2796              : /* ... */
    2797              : /* ... */
    2798              : /* ... */
    2799              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2800              : /* (content generated from coverage data) */
    2801              : /* ... */
    2802              : /* ... */
    2803              : /* ... */
    2804              : /* ... */
    2805              : /* ... */
    2806              : /* ... */
    2807              : /* ... */
    2808              : /* ... */
    2809              : /* ... */
    2810              : /* ... */
    2811              : /* ... */
    2812              : /* ... */
    2813              : /* ... */
    2814              : /* ... */
    2815              : /* ... */
    2816              : /* ... */
    2817              : /* ... */
    2818              : /* ... */
    2819              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2820              : /* (content generated from coverage data) */
    2821              : /* ... */
    2822              : /* ... */
    2823              : /* ... */
    2824              : /* ... */
    2825              : /* ... */
    2826              : /* ... */
    2827              : /* ... */
    2828              : /* ... */
    2829              : /* ... */
    2830              : /* ... */
    2831              : /* ... */
    2832              : /* ... */
    2833              : /* ... */
    2834              : /* ... */
    2835              : /* ... */
    2836              : /* ... */
    2837              : /* ... */
    2838              : /* ... */
    2839              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2840              : /* (content generated from coverage data) */
    2841              : /* ... */
    2842              : /* ... */
    2843              : /* ... */
    2844              : /* ... */
    2845              : /* ... */
    2846              : /* ... */
    2847              : /* ... */
    2848              : /* ... */
    2849              : /* ... */
    2850              : /* ... */
    2851              : /* ... */
    2852              : /* ... */
    2853              : /* ... */
    2854              : /* ... */
    2855              : /* ... */
    2856              : /* ... */
    2857              : /* ... */
    2858              : /* ... */
    2859              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2860              : /* (content generated from coverage data) */
    2861              : /* ... */
    2862              : /* ... */
    2863              : /* ... */
    2864              : /* ... */
    2865              : /* ... */
    2866              : /* ... */
    2867              : /* ... */
    2868              : /* ... */
    2869              : /* ... */
    2870              : /* ... */
    2871              : /* ... */
    2872              : /* ... */
    2873              : /* ... */
    2874              : /* ... */
    2875              : /* ... */
    2876              : /* ... */
    2877              : /* ... */
    2878              : /* ... */
    2879              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2880              : /* (content generated from coverage data) */
    2881              : /* ... */
    2882              : /* ... */
    2883              : /* ... */
    2884              : /* ... */
    2885              : /* ... */
    2886              : /* ... */
    2887              : /* ... */
    2888              : /* ... */
    2889              : /* ... */
    2890              : /* ... */
    2891              : /* ... */
    2892              : /* ... */
    2893              : /* ... */
    2894              : /* ... */
    2895              : /* ... */
    2896              : /* ... */
    2897              : /* ... */
    2898              : /* ... */
    2899              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2900              : /* (content generated from coverage data) */
    2901              : /* ... */
    2902              : /* ... */
    2903              : /* ... */
    2904              : /* ... */
    2905              : /* ... */
    2906              : /* ... */
    2907              : /* ... */
    2908              : /* ... */
    2909              : /* ... */
    2910              : /* ... */
    2911              : /* ... */
    2912              : /* ... */
    2913   7420251601 : /* BEGIN: function "_Z26reg_class_for_constraint_114constraint_num" */
    2914              : /* ... */
    2915   7420251601 : /* ... */
    2916              : /* ... */
    2917              : /* ... */
    2918              : /* ... */
    2919    136819294 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2920              : /* (content generated from coverage data) */
    2921     54758684 : /* ... */
    2922     23648218 : /* ... */
    2923              : /* ... */
    2924     24837295 : /* ... */
    2925      9877613 : /* ... */
    2926       749203 : /* ... */
    2927       957747 : /* ... */
    2928       795167 : /* ... */
    2929      1456138 : /* ... */
    2930    218627331 : /* ... */
    2931        81699 : /* ... */
    2932         8637 : /* ... */
    2933       920272 : /* ... */
    2934     45241072 : /* ... */
    2935    673084062 : /* ... */
    2936    242859053 : /* ... */
    2937   1516296045 : /* ... */
    2938        14331 : /* ... */
    2939      5626782 : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2940      4022928 : /* (content generated from coverage data) */
    2941      1312022 : /* ... */
    2942            0 : /* ... */
    2943      1378191 : /* ... */
    2944        14125 : /* ... */
    2945    186549930 : /* ... */
    2946       320923 : /* ... */
    2947    142521372 : /* ... */
    2948      2758545 : /* ... */
    2949       419343 : /* ... */
    2950              : /* ... */
    2951       131341 : /* ... */
    2952      6192351 : /* ... */
    2953              : /* ... */
    2954              : /* ... */
    2955              : /* ... */
    2956              : /* END: function "_Z26reg_class_for_constraint_114constraint_num" */
    2957              : /* ... */
    2958              : /* ... */
    2959              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2960              : /* (content generated from coverage data) */
    2961              : /* ... */
    2962              : /* ... */
    2963              : /* ... */
    2964              : /* ... */
    2965              : /* ... */
    2966              : /* ... */
    2967              : /* ... */
    2968              : /* ... */
    2969              : /* ... */
    2970              : /* ... */
    2971              : /* ... */
    2972              : /* ... */
    2973              : /* ... */
    2974              : /* ... */
    2975              : /* ... */
    2976              : /* ... */
    2977              : /* ... */
    2978              : /* ... */
    2979              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    2980              : /* (content generated from coverage data) */
    2981              : /* ... */
    2982              : /* ... */
    2983              : /* ... */
    2984              : /* ... */
    2985              : /* ... */
    2986              : /* ... */
    2987              : /* ... */
    2988              : /* ... */
    2989              : /* ... */
    2990              : /* ... */
    2991              : /* ... */
    2992              : /* ... */
    2993              : /* ... */
    2994              : /* ... */
    2995              : /* ... */
    2996              : /* ... */
    2997              : /* ... */
    2998              : /* ... */
    2999              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    3000              : /* (content generated from coverage data) */
    3001              : /* ... */
    3002              : /* ... */
    3003              : /* ... */
    3004              : /* ... */
    3005              : /* ... */
    3006              : /* ... */
    3007              : /* ... */
    3008              : /* ... */
    3009              : /* ... */
    3010              : /* ... */
    3011              : /* ... */
    3012              : /* ... */
    3013              : /* ... */
    3014              : /* ... */
    3015              : /* ... */
    3016              : /* ... */
    3017              : /* ... */
    3018              : /* ... */
    3019              : /* /home/worker/buildworker/tiber-lcov/build/gcc/config/i386/predicates.md not long enough */
    3020      7305762 : /* END: function "_Z32insn_const_int_ok_for_constraintl14constraint_num" */
    3021              : /* ... */
    3022      7305762 : /* ... */
    3023              : /* ... */
    3024      1351653 : /* ... */
    3025      1351653 : /* ... */
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.