Home | History | Annotate | Download | only in IR
      1 //===- IntrinsicsPowerPC.td - Defines PowerPC intrinsics ---*- tablegen -*-===//
      2 // 
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 // 
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines all of the PowerPC-specific intrinsics.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //===----------------------------------------------------------------------===//
     15 // Definitions for all PowerPC intrinsics.
     16 //
     17 
     18 // Non-altivec intrinsics.
     19 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
     20   // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions.
     21   def int_ppc_dcba  : Intrinsic<[], [llvm_ptr_ty], []>;
     22   def int_ppc_dcbf  : Intrinsic<[], [llvm_ptr_ty], []>;
     23   def int_ppc_dcbi  : Intrinsic<[], [llvm_ptr_ty], []>;
     24   def int_ppc_dcbst : Intrinsic<[], [llvm_ptr_ty], []>;
     25   def int_ppc_dcbt  : Intrinsic<[], [llvm_ptr_ty],
     26     [IntrArgMemOnly, NoCapture<0>]>;
     27   def int_ppc_dcbtst: Intrinsic<[], [llvm_ptr_ty],
     28     [IntrArgMemOnly, NoCapture<0>]>;
     29   def int_ppc_dcbz  : Intrinsic<[], [llvm_ptr_ty], []>;
     30   def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>;
     31 
     32   // sync instruction (i.e. sync 0, a.k.a hwsync)
     33   def int_ppc_sync : Intrinsic<[], [], []>;
     34   // lwsync is sync 1
     35   def int_ppc_lwsync : Intrinsic<[], [], []>;
     36 
     37   // Intrinsics used to generate ctr-based loops. These should only be
     38   // generated by the PowerPC backend!
     39   def int_ppc_mtctr : Intrinsic<[], [llvm_anyint_ty], []>;
     40   def int_ppc_is_decremented_ctr_nonzero : Intrinsic<[llvm_i1_ty], [], []>;
     41 
     42   // Intrinsics for [double]word extended forms of divide instructions
     43   def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">,
     44                       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
     45                                 [IntrNoMem]>;
     46   def int_ppc_divweu : GCCBuiltin<"__builtin_divweu">,
     47                        Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
     48                                  [IntrNoMem]>;
     49   def int_ppc_divde : GCCBuiltin<"__builtin_divde">,
     50                       Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
     51                                 [IntrNoMem]>;
     52   def int_ppc_divdeu : GCCBuiltin<"__builtin_divdeu">,
     53                        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
     54                                  [IntrNoMem]>;
     55 
     56   // Bit permute doubleword
     57   def int_ppc_bpermd : GCCBuiltin<"__builtin_bpermd">,
     58                        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
     59                                  [IntrNoMem]>;
     60 }
     61 
     62 
     63 let TargetPrefix = "ppc" in {  // All PPC intrinsics start with "llvm.ppc.".
     64   /// PowerPC_Vec_Intrinsic - Base class for all altivec intrinsics.
     65   class PowerPC_Vec_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
     66                               list<LLVMType> param_types,
     67                               list<IntrinsicProperty> properties>
     68     : GCCBuiltin<!strconcat("__builtin_altivec_", GCCIntSuffix)>,
     69       Intrinsic<ret_types, param_types, properties>;
     70 
     71   /// PowerPC_VSX_Intrinsic - Base class for all VSX intrinsics.
     72   class PowerPC_VSX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
     73                               list<LLVMType> param_types,
     74                               list<IntrinsicProperty> properties>
     75     : GCCBuiltin<!strconcat("__builtin_vsx_", GCCIntSuffix)>,
     76       Intrinsic<ret_types, param_types, properties>;
     77 }
     78 
     79 //===----------------------------------------------------------------------===//
     80 // PowerPC Altivec Intrinsic Class Definitions.
     81 //
     82 
     83 /// PowerPC_Vec_FF_Intrinsic - A PowerPC intrinsic that takes one v4f32
     84 /// vector and returns one.  These intrinsics have no side effects.
     85 class PowerPC_Vec_FF_Intrinsic<string GCCIntSuffix>
     86   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
     87                           [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
     88 
     89 /// PowerPC_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32
     90 /// vectors and returns one.  These intrinsics have no side effects.
     91 class PowerPC_Vec_FFF_Intrinsic<string GCCIntSuffix>
     92   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
     93                           [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
     94                           [IntrNoMem]>;
     95 
     96 /// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8
     97 /// vectors and returns one.  These intrinsics have no side effects.
     98 class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix> 
     99   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
    100                           [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    101                           [IntrNoMem]>;
    102 
    103 /// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16
    104 /// vectors and returns one.  These intrinsics have no side effects.
    105 class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix> 
    106   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
    107                           [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    108                           [IntrNoMem]>;
    109 
    110 /// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32
    111 /// vectors and returns one.  These intrinsics have no side effects.
    112 class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix> 
    113   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
    114                           [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    115                           [IntrNoMem]>;
    116 
    117 /// PowerPC_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2i64
    118 /// vectors and returns one.  These intrinsics have no side effects.
    119 class PowerPC_Vec_DDD_Intrinsic<string GCCIntSuffix>
    120   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
    121                           [llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    122                           [IntrNoMem]>;
    123 
    124 /// PowerPC_Vec_QQQ_Intrinsic - A PowerPC intrinsic that takes two v1i128
    125 /// vectors and returns one. These intrinsics have no side effects.
    126 class PowerPC_Vec_QQQ_Intrinsic<string GCCIntSuffix>
    127   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
    128                          [llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty],
    129                          [IntrNoMem]>;
    130 
    131 //===----------------------------------------------------------------------===//
    132 // PowerPC VSX Intrinsic Class Definitions.
    133 //
    134 
    135 /// PowerPC_VSX_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2f64
    136 /// vectors and returns one.  These intrinsics have no side effects.
    137 class PowerPC_VSX_Vec_DDD_Intrinsic<string GCCIntSuffix>
    138   : PowerPC_VSX_Intrinsic<GCCIntSuffix,
    139                           [llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty],
    140                           [IntrNoMem]>;
    141 
    142 /// PowerPC_VSX_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32
    143 /// vectors and returns one.  These intrinsics have no side effects.
    144 class PowerPC_VSX_Vec_FFF_Intrinsic<string GCCIntSuffix>
    145   : PowerPC_VSX_Intrinsic<GCCIntSuffix,
    146                           [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
    147                           [IntrNoMem]>;
    148 
    149 /// PowerPC_VSX_Sca_DDD_Intrinsic - A PowerPC intrinsic that takes two f64
    150 /// scalars and returns one.  These intrinsics have no side effects.
    151 class PowerPC_VSX_Sca_DDD_Intrinsic<string GCCIntSuffix>
    152   : PowerPC_VSX_Intrinsic<GCCIntSuffix,
    153                           [llvm_double_ty], [llvm_double_ty, llvm_double_ty],
    154                           [IntrNoMem]>;
    155 
    156 //===----------------------------------------------------------------------===//
    157 // PowerPC Altivec Intrinsic Definitions.
    158 
    159 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
    160   // Data Stream Control.
    161   def int_ppc_altivec_dss : GCCBuiltin<"__builtin_altivec_dss">,
    162               Intrinsic<[], [llvm_i32_ty], []>;
    163   def int_ppc_altivec_dssall : GCCBuiltin<"__builtin_altivec_dssall">,
    164               Intrinsic<[], [], []>;
    165   def int_ppc_altivec_dst : GCCBuiltin<"__builtin_altivec_dst">,
    166               Intrinsic<[],
    167                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
    168                         []>;
    169   def int_ppc_altivec_dstt : GCCBuiltin<"__builtin_altivec_dstt">,
    170               Intrinsic<[],
    171                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
    172                         []>;
    173   def int_ppc_altivec_dstst : GCCBuiltin<"__builtin_altivec_dstst">,
    174               Intrinsic<[],
    175                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
    176                         []>;
    177   def int_ppc_altivec_dststt : GCCBuiltin<"__builtin_altivec_dststt">,
    178               Intrinsic<[],
    179                         [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
    180                         []>;
    181 
    182   // VSCR access.
    183   def int_ppc_altivec_mfvscr : GCCBuiltin<"__builtin_altivec_mfvscr">,
    184               Intrinsic<[llvm_v8i16_ty], [], [IntrReadMem]>;
    185   def int_ppc_altivec_mtvscr : GCCBuiltin<"__builtin_altivec_mtvscr">,
    186               Intrinsic<[], [llvm_v4i32_ty], []>;
    187 
    188 
    189   // Loads.  These don't map directly to GCC builtins because they represent the
    190   // source address with a single pointer.
    191   def int_ppc_altivec_lvx :
    192               Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    193   def int_ppc_altivec_lvxl :
    194               Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    195   def int_ppc_altivec_lvebx :
    196               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    197   def int_ppc_altivec_lvehx :
    198               Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    199   def int_ppc_altivec_lvewx :
    200               Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    201 
    202   // Stores.  These don't map directly to GCC builtins because they represent the
    203   // source address with a single pointer.
    204   def int_ppc_altivec_stvx :
    205               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
    206                         [IntrArgMemOnly]>;
    207   def int_ppc_altivec_stvxl :
    208               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
    209                         [IntrArgMemOnly]>;
    210   def int_ppc_altivec_stvebx :
    211               Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty],
    212                         [IntrArgMemOnly]>;
    213   def int_ppc_altivec_stvehx :
    214               Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty],
    215                         [IntrArgMemOnly]>;
    216   def int_ppc_altivec_stvewx :
    217               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
    218                         [IntrArgMemOnly]>;
    219 
    220   // Comparisons setting a vector.
    221   def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_vcmpbfp">,
    222               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
    223                         [IntrNoMem]>;
    224   def int_ppc_altivec_vcmpeqfp : GCCBuiltin<"__builtin_altivec_vcmpeqfp">,
    225               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
    226                         [IntrNoMem]>;
    227   def int_ppc_altivec_vcmpgefp : GCCBuiltin<"__builtin_altivec_vcmpgefp">,
    228               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
    229                         [IntrNoMem]>;
    230   def int_ppc_altivec_vcmpgtfp : GCCBuiltin<"__builtin_altivec_vcmpgtfp">,
    231               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
    232                         [IntrNoMem]>;
    233 
    234   def int_ppc_altivec_vcmpequd : GCCBuiltin<"__builtin_altivec_vcmpequd">,
    235               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    236                         [IntrNoMem]>;
    237   def int_ppc_altivec_vcmpgtsd : GCCBuiltin<"__builtin_altivec_vcmpgtsd">,
    238               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    239                         [IntrNoMem]>;
    240   def int_ppc_altivec_vcmpgtud : GCCBuiltin<"__builtin_altivec_vcmpgtud">,
    241               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    242                         [IntrNoMem]>;
    243                                                 
    244   def int_ppc_altivec_vcmpequw : GCCBuiltin<"__builtin_altivec_vcmpequw">,
    245               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    246                         [IntrNoMem]>;
    247   def int_ppc_altivec_vcmpgtsw : GCCBuiltin<"__builtin_altivec_vcmpgtsw">,
    248               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    249                         [IntrNoMem]>;
    250   def int_ppc_altivec_vcmpgtuw : GCCBuiltin<"__builtin_altivec_vcmpgtuw">,
    251               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    252                         [IntrNoMem]>;
    253                         
    254   def int_ppc_altivec_vcmpequh : GCCBuiltin<"__builtin_altivec_vcmpequh">,
    255               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    256                         [IntrNoMem]>;
    257   def int_ppc_altivec_vcmpgtsh : GCCBuiltin<"__builtin_altivec_vcmpgtsh">,
    258               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    259                         [IntrNoMem]>;
    260   def int_ppc_altivec_vcmpgtuh : GCCBuiltin<"__builtin_altivec_vcmpgtuh">,
    261               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    262                         [IntrNoMem]>;
    263 
    264   def int_ppc_altivec_vcmpequb : GCCBuiltin<"__builtin_altivec_vcmpequb">,
    265               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    266                         [IntrNoMem]>;
    267   def int_ppc_altivec_vcmpgtsb : GCCBuiltin<"__builtin_altivec_vcmpgtsb">,
    268               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    269                         [IntrNoMem]>;
    270   def int_ppc_altivec_vcmpgtub : GCCBuiltin<"__builtin_altivec_vcmpgtub">,
    271               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    272                         [IntrNoMem]>;
    273 
    274   // Predicate Comparisons.  The first operand specifies interpretation of CR6.
    275   def int_ppc_altivec_vcmpbfp_p : GCCBuiltin<"__builtin_altivec_vcmpbfp_p">,
    276               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    277                         [IntrNoMem]>;
    278   def int_ppc_altivec_vcmpeqfp_p : GCCBuiltin<"__builtin_altivec_vcmpeqfp_p">,
    279               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    280                         [IntrNoMem]>;
    281   def int_ppc_altivec_vcmpgefp_p : GCCBuiltin<"__builtin_altivec_vcmpgefp_p">,
    282               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    283                         [IntrNoMem]>;
    284   def int_ppc_altivec_vcmpgtfp_p : GCCBuiltin<"__builtin_altivec_vcmpgtfp_p">,
    285               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    286                         [IntrNoMem]>;
    287 
    288   def int_ppc_altivec_vcmpequd_p : GCCBuiltin<"__builtin_altivec_vcmpequd_p">,
    289               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
    290                         [IntrNoMem]>;
    291   def int_ppc_altivec_vcmpgtsd_p : GCCBuiltin<"__builtin_altivec_vcmpgtsd_p">,
    292               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
    293                         [IntrNoMem]>;
    294   def int_ppc_altivec_vcmpgtud_p : GCCBuiltin<"__builtin_altivec_vcmpgtud_p">,
    295               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
    296                         [IntrNoMem]>;
    297 
    298   def int_ppc_altivec_vcmpequw_p : GCCBuiltin<"__builtin_altivec_vcmpequw_p">,
    299               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
    300                         [IntrNoMem]>;
    301   def int_ppc_altivec_vcmpgtsw_p : GCCBuiltin<"__builtin_altivec_vcmpgtsw_p">,
    302               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
    303                         [IntrNoMem]>;
    304   def int_ppc_altivec_vcmpgtuw_p : GCCBuiltin<"__builtin_altivec_vcmpgtuw_p">,
    305               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
    306                         [IntrNoMem]>;
    307                         
    308   def int_ppc_altivec_vcmpequh_p : GCCBuiltin<"__builtin_altivec_vcmpequh_p">,
    309               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
    310                         [IntrNoMem]>;
    311   def int_ppc_altivec_vcmpgtsh_p : GCCBuiltin<"__builtin_altivec_vcmpgtsh_p">,
    312               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
    313                         [IntrNoMem]>;
    314   def int_ppc_altivec_vcmpgtuh_p : GCCBuiltin<"__builtin_altivec_vcmpgtuh_p">,
    315               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
    316                         [IntrNoMem]>;
    317 
    318   def int_ppc_altivec_vcmpequb_p : GCCBuiltin<"__builtin_altivec_vcmpequb_p">,
    319               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
    320                         [IntrNoMem]>;
    321   def int_ppc_altivec_vcmpgtsb_p : GCCBuiltin<"__builtin_altivec_vcmpgtsb_p">,
    322               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
    323                         [IntrNoMem]>;
    324   def int_ppc_altivec_vcmpgtub_p : GCCBuiltin<"__builtin_altivec_vcmpgtub_p">,
    325               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
    326                         [IntrNoMem]>;
    327 }
    328 
    329 // Vector average.
    330 def int_ppc_altivec_vavgsb : PowerPC_Vec_BBB_Intrinsic<"vavgsb">;
    331 def int_ppc_altivec_vavgsh : PowerPC_Vec_HHH_Intrinsic<"vavgsh">;
    332 def int_ppc_altivec_vavgsw : PowerPC_Vec_WWW_Intrinsic<"vavgsw">;
    333 def int_ppc_altivec_vavgub : PowerPC_Vec_BBB_Intrinsic<"vavgub">;
    334 def int_ppc_altivec_vavguh : PowerPC_Vec_HHH_Intrinsic<"vavguh">;
    335 def int_ppc_altivec_vavguw : PowerPC_Vec_WWW_Intrinsic<"vavguw">;
    336 
    337 // Vector maximum.
    338 def int_ppc_altivec_vmaxfp : PowerPC_Vec_FFF_Intrinsic<"vmaxfp">;
    339 def int_ppc_altivec_vmaxsb : PowerPC_Vec_BBB_Intrinsic<"vmaxsb">;
    340 def int_ppc_altivec_vmaxsh : PowerPC_Vec_HHH_Intrinsic<"vmaxsh">;
    341 def int_ppc_altivec_vmaxsw : PowerPC_Vec_WWW_Intrinsic<"vmaxsw">;
    342 def int_ppc_altivec_vmaxsd : PowerPC_Vec_DDD_Intrinsic<"vmaxsd">;
    343 def int_ppc_altivec_vmaxub : PowerPC_Vec_BBB_Intrinsic<"vmaxub">;
    344 def int_ppc_altivec_vmaxuh : PowerPC_Vec_HHH_Intrinsic<"vmaxuh">;
    345 def int_ppc_altivec_vmaxuw : PowerPC_Vec_WWW_Intrinsic<"vmaxuw">;
    346 def int_ppc_altivec_vmaxud : PowerPC_Vec_DDD_Intrinsic<"vmaxud">;
    347 
    348 // Vector minimum.
    349 def int_ppc_altivec_vminfp : PowerPC_Vec_FFF_Intrinsic<"vminfp">;
    350 def int_ppc_altivec_vminsb : PowerPC_Vec_BBB_Intrinsic<"vminsb">;
    351 def int_ppc_altivec_vminsh : PowerPC_Vec_HHH_Intrinsic<"vminsh">;
    352 def int_ppc_altivec_vminsw : PowerPC_Vec_WWW_Intrinsic<"vminsw">;
    353 def int_ppc_altivec_vminsd : PowerPC_Vec_DDD_Intrinsic<"vminsd">;
    354 def int_ppc_altivec_vminub : PowerPC_Vec_BBB_Intrinsic<"vminub">;
    355 def int_ppc_altivec_vminuh : PowerPC_Vec_HHH_Intrinsic<"vminuh">;
    356 def int_ppc_altivec_vminuw : PowerPC_Vec_WWW_Intrinsic<"vminuw">;
    357 def int_ppc_altivec_vminud : PowerPC_Vec_DDD_Intrinsic<"vminud">;
    358 
    359 // Saturating adds.
    360 def int_ppc_altivec_vaddubs : PowerPC_Vec_BBB_Intrinsic<"vaddubs">;
    361 def int_ppc_altivec_vaddsbs : PowerPC_Vec_BBB_Intrinsic<"vaddsbs">;
    362 def int_ppc_altivec_vadduhs : PowerPC_Vec_HHH_Intrinsic<"vadduhs">;
    363 def int_ppc_altivec_vaddshs : PowerPC_Vec_HHH_Intrinsic<"vaddshs">;
    364 def int_ppc_altivec_vadduws : PowerPC_Vec_WWW_Intrinsic<"vadduws">;
    365 def int_ppc_altivec_vaddsws : PowerPC_Vec_WWW_Intrinsic<"vaddsws">;
    366 def int_ppc_altivec_vaddcuw : PowerPC_Vec_WWW_Intrinsic<"vaddcuw">;
    367 def int_ppc_altivec_vaddcuq : PowerPC_Vec_QQQ_Intrinsic<"vaddcuq">;
    368 
    369 // Saturating subs.
    370 def int_ppc_altivec_vsububs : PowerPC_Vec_BBB_Intrinsic<"vsububs">;
    371 def int_ppc_altivec_vsubsbs : PowerPC_Vec_BBB_Intrinsic<"vsubsbs">;
    372 def int_ppc_altivec_vsubuhs : PowerPC_Vec_HHH_Intrinsic<"vsubuhs">;
    373 def int_ppc_altivec_vsubshs : PowerPC_Vec_HHH_Intrinsic<"vsubshs">;
    374 def int_ppc_altivec_vsubuws : PowerPC_Vec_WWW_Intrinsic<"vsubuws">;
    375 def int_ppc_altivec_vsubsws : PowerPC_Vec_WWW_Intrinsic<"vsubsws">;
    376 def int_ppc_altivec_vsubcuw : PowerPC_Vec_WWW_Intrinsic<"vsubcuw">;
    377 def int_ppc_altivec_vsubcuq : PowerPC_Vec_QQQ_Intrinsic<"vsubcuq">;
    378 
    379 let TargetPrefix = "ppc" in {  // All PPC intrinsics start with "llvm.ppc.".
    380   // Saturating multiply-adds.
    381   def int_ppc_altivec_vmhaddshs : GCCBuiltin<"__builtin_altivec_vmhaddshs">,
    382               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    383                          llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>;
    384   def int_ppc_altivec_vmhraddshs : GCCBuiltin<"__builtin_altivec_vmhraddshs">,
    385               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    386                          llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>;
    387 
    388   def int_ppc_altivec_vmaddfp : GCCBuiltin<"__builtin_altivec_vmaddfp">,
    389               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    390                          llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
    391   def int_ppc_altivec_vnmsubfp : GCCBuiltin<"__builtin_altivec_vnmsubfp">,
    392               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    393                          llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
    394 
    395   // Vector Multiply Sum Intructions.
    396   def int_ppc_altivec_vmsummbm : GCCBuiltin<"__builtin_altivec_vmsummbm">,
    397             Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
    398                        llvm_v4i32_ty], [IntrNoMem]>;
    399   def int_ppc_altivec_vmsumshm : GCCBuiltin<"__builtin_altivec_vmsumshm">,
    400             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
    401                        llvm_v4i32_ty], [IntrNoMem]>;
    402   def int_ppc_altivec_vmsumshs : GCCBuiltin<"__builtin_altivec_vmsumshs">,
    403             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
    404                        llvm_v4i32_ty], [IntrNoMem]>;
    405   def int_ppc_altivec_vmsumubm : GCCBuiltin<"__builtin_altivec_vmsumubm">,
    406             Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 
    407                        llvm_v4i32_ty], [IntrNoMem]>;
    408   def int_ppc_altivec_vmsumuhm : GCCBuiltin<"__builtin_altivec_vmsumuhm">,
    409             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
    410                        llvm_v4i32_ty], [IntrNoMem]>;
    411   def int_ppc_altivec_vmsumuhs : GCCBuiltin<"__builtin_altivec_vmsumuhs">,
    412             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
    413                        llvm_v4i32_ty], [IntrNoMem]>;
    414 
    415   // Vector Multiply Intructions.
    416   def int_ppc_altivec_vmulesb : GCCBuiltin<"__builtin_altivec_vmulesb">,
    417           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    418                     [IntrNoMem]>;
    419   def int_ppc_altivec_vmulesh : GCCBuiltin<"__builtin_altivec_vmulesh">,
    420           Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    421                     [IntrNoMem]>;
    422   def int_ppc_altivec_vmulesw : GCCBuiltin<"__builtin_altivec_vmulesw">,
    423           Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    424                     [IntrNoMem]>;
    425   def int_ppc_altivec_vmuleub : GCCBuiltin<"__builtin_altivec_vmuleub">,
    426           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    427                     [IntrNoMem]>;
    428   def int_ppc_altivec_vmuleuh : GCCBuiltin<"__builtin_altivec_vmuleuh">,
    429           Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    430                     [IntrNoMem]>;
    431   def int_ppc_altivec_vmuleuw : GCCBuiltin<"__builtin_altivec_vmuleuw">,
    432           Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    433                     [IntrNoMem]>;
    434 
    435   def int_ppc_altivec_vmulosb : GCCBuiltin<"__builtin_altivec_vmulosb">,
    436           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    437                     [IntrNoMem]>;
    438   def int_ppc_altivec_vmulosh : GCCBuiltin<"__builtin_altivec_vmulosh">,
    439           Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    440                     [IntrNoMem]>;
    441   def int_ppc_altivec_vmulosw : GCCBuiltin<"__builtin_altivec_vmulosw">,
    442           Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    443                     [IntrNoMem]>;
    444   def int_ppc_altivec_vmuloub : GCCBuiltin<"__builtin_altivec_vmuloub">,
    445           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    446                     [IntrNoMem]>;
    447   def int_ppc_altivec_vmulouh : GCCBuiltin<"__builtin_altivec_vmulouh">,
    448           Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    449                     [IntrNoMem]>;
    450   def int_ppc_altivec_vmulouw : GCCBuiltin<"__builtin_altivec_vmulouw">,
    451           Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    452                     [IntrNoMem]>;
    453 
    454   // Vector Sum Intructions.
    455   def int_ppc_altivec_vsumsws : GCCBuiltin<"__builtin_altivec_vsumsws">,
    456             Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    457                       [IntrNoMem]>;
    458   def int_ppc_altivec_vsum2sws : GCCBuiltin<"__builtin_altivec_vsum2sws">,
    459             Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    460                       [IntrNoMem]>;
    461   def int_ppc_altivec_vsum4sbs : GCCBuiltin<"__builtin_altivec_vsum4sbs">,
    462             Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty],
    463                       [IntrNoMem]>;
    464   def int_ppc_altivec_vsum4shs : GCCBuiltin<"__builtin_altivec_vsum4shs">,
    465             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v4i32_ty],
    466                       [IntrNoMem]>;
    467   def int_ppc_altivec_vsum4ubs : GCCBuiltin<"__builtin_altivec_vsum4ubs">,
    468             Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty],
    469                       [IntrNoMem]>;
    470 
    471   // Other multiplies.
    472   def int_ppc_altivec_vmladduhm : GCCBuiltin<"__builtin_altivec_vmladduhm">,
    473             Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
    474                        llvm_v8i16_ty], [IntrNoMem]>;
    475 
    476   // Packs.
    477   def int_ppc_altivec_vpkpx : GCCBuiltin<"__builtin_altivec_vpkpx">,
    478             Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    479                       [IntrNoMem]>;
    480   def int_ppc_altivec_vpkshss : GCCBuiltin<"__builtin_altivec_vpkshss">,
    481             Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    482                       [IntrNoMem]>;
    483   def int_ppc_altivec_vpkshus : GCCBuiltin<"__builtin_altivec_vpkshus">,
    484             Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    485                       [IntrNoMem]>;
    486   def int_ppc_altivec_vpkswss : GCCBuiltin<"__builtin_altivec_vpkswss">,
    487             Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    488                       [IntrNoMem]>;
    489   def int_ppc_altivec_vpkswus : GCCBuiltin<"__builtin_altivec_vpkswus">,
    490             Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    491                       [IntrNoMem]>;
    492   def int_ppc_altivec_vpksdss : GCCBuiltin<"__builtin_altivec_vpksdss">,
    493             Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    494                       [IntrNoMem]>;
    495   def int_ppc_altivec_vpksdus : GCCBuiltin<"__builtin_altivec_vpksdus">,
    496             Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    497                       [IntrNoMem]>;
    498   // vpkuhum is lowered to a shuffle.
    499   def int_ppc_altivec_vpkuhus : GCCBuiltin<"__builtin_altivec_vpkuhus">,
    500             Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    501                       [IntrNoMem]>;
    502   // vpkuwum is lowered to a shuffle.
    503   def int_ppc_altivec_vpkuwus : GCCBuiltin<"__builtin_altivec_vpkuwus">,
    504             Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    505                       [IntrNoMem]>;
    506   // vpkudum is lowered to a shuffle.
    507   def int_ppc_altivec_vpkudus : GCCBuiltin<"__builtin_altivec_vpkudus">,
    508             Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    509                       [IntrNoMem]>;
    510 
    511   // Unpacks.
    512   def int_ppc_altivec_vupkhpx : GCCBuiltin<"__builtin_altivec_vupkhpx">,
    513             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    514   def int_ppc_altivec_vupkhsb : GCCBuiltin<"__builtin_altivec_vupkhsb">,
    515             Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    516   def int_ppc_altivec_vupkhsh : GCCBuiltin<"__builtin_altivec_vupkhsh">,
    517             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    518   def int_ppc_altivec_vupkhsw : GCCBuiltin<"__builtin_altivec_vupkhsw">,
    519             Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    520   def int_ppc_altivec_vupklpx : GCCBuiltin<"__builtin_altivec_vupklpx">,
    521             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    522   def int_ppc_altivec_vupklsb : GCCBuiltin<"__builtin_altivec_vupklsb">,
    523             Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    524   def int_ppc_altivec_vupklsh : GCCBuiltin<"__builtin_altivec_vupklsh">,
    525             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    526   def int_ppc_altivec_vupklsw : GCCBuiltin<"__builtin_altivec_vupklsw">,
    527             Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    528 
    529 
    530   // FP <-> integer conversion.
    531   def int_ppc_altivec_vcfsx : GCCBuiltin<"__builtin_altivec_vcfsx">,
    532               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
    533                         [IntrNoMem]>;
    534   def int_ppc_altivec_vcfux : GCCBuiltin<"__builtin_altivec_vcfux">,
    535               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
    536                         [IntrNoMem]>;
    537   def int_ppc_altivec_vctsxs : GCCBuiltin<"__builtin_altivec_vctsxs">,
    538               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
    539                         [IntrNoMem]>;
    540   def int_ppc_altivec_vctuxs : GCCBuiltin<"__builtin_altivec_vctuxs">,
    541               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
    542                         [IntrNoMem]>;
    543 
    544   def int_ppc_altivec_vrfim : GCCBuiltin<"__builtin_altivec_vrfim">,
    545               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    546   def int_ppc_altivec_vrfin : GCCBuiltin<"__builtin_altivec_vrfin">,
    547               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    548   def int_ppc_altivec_vrfip : GCCBuiltin<"__builtin_altivec_vrfip">,
    549               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    550   def int_ppc_altivec_vrfiz : GCCBuiltin<"__builtin_altivec_vrfiz">,
    551               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    552 
    553   // Add Extended Quadword
    554   def int_ppc_altivec_vaddeuqm : GCCBuiltin<"__builtin_altivec_vaddeuqm">,
    555               Intrinsic<[llvm_v1i128_ty], 
    556                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
    557                         [IntrNoMem]>;
    558   def int_ppc_altivec_vaddecuq : GCCBuiltin<"__builtin_altivec_vaddecuq">,
    559               Intrinsic<[llvm_v1i128_ty], 
    560                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
    561                         [IntrNoMem]>;
    562 
    563   // Sub Extended Quadword
    564   def int_ppc_altivec_vsubeuqm : GCCBuiltin<"__builtin_altivec_vsubeuqm">,
    565               Intrinsic<[llvm_v1i128_ty], 
    566                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
    567                         [IntrNoMem]>;
    568   def int_ppc_altivec_vsubecuq : GCCBuiltin<"__builtin_altivec_vsubecuq">,
    569               Intrinsic<[llvm_v1i128_ty], 
    570                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
    571                         [IntrNoMem]>;
    572 }
    573 
    574 def int_ppc_altivec_vsl   : PowerPC_Vec_WWW_Intrinsic<"vsl">;
    575 def int_ppc_altivec_vslo  : PowerPC_Vec_WWW_Intrinsic<"vslo">;
    576 
    577 def int_ppc_altivec_vslb  : PowerPC_Vec_BBB_Intrinsic<"vslb">;
    578 def int_ppc_altivec_vslh  : PowerPC_Vec_HHH_Intrinsic<"vslh">;
    579 def int_ppc_altivec_vslw  : PowerPC_Vec_WWW_Intrinsic<"vslw">;
    580 
    581 // Right Shifts.
    582 def int_ppc_altivec_vsr   : PowerPC_Vec_WWW_Intrinsic<"vsr">;
    583 def int_ppc_altivec_vsro  : PowerPC_Vec_WWW_Intrinsic<"vsro">;
    584   
    585 def int_ppc_altivec_vsrb  : PowerPC_Vec_BBB_Intrinsic<"vsrb">;
    586 def int_ppc_altivec_vsrh  : PowerPC_Vec_HHH_Intrinsic<"vsrh">;
    587 def int_ppc_altivec_vsrw  : PowerPC_Vec_WWW_Intrinsic<"vsrw">;
    588 def int_ppc_altivec_vsrab : PowerPC_Vec_BBB_Intrinsic<"vsrab">;
    589 def int_ppc_altivec_vsrah : PowerPC_Vec_HHH_Intrinsic<"vsrah">;
    590 def int_ppc_altivec_vsraw : PowerPC_Vec_WWW_Intrinsic<"vsraw">;
    591 
    592 // Rotates.
    593 def int_ppc_altivec_vrlb  : PowerPC_Vec_BBB_Intrinsic<"vrlb">;
    594 def int_ppc_altivec_vrlh  : PowerPC_Vec_HHH_Intrinsic<"vrlh">;
    595 def int_ppc_altivec_vrlw  : PowerPC_Vec_WWW_Intrinsic<"vrlw">;
    596 def int_ppc_altivec_vrld  : PowerPC_Vec_DDD_Intrinsic<"vrld">;
    597 
    598 let TargetPrefix = "ppc" in {  // All PPC intrinsics start with "llvm.ppc.".
    599   // Miscellaneous.
    600   def int_ppc_altivec_lvsl :
    601               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>;
    602   def int_ppc_altivec_lvsr :
    603               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>;
    604 
    605   def int_ppc_altivec_vperm : GCCBuiltin<"__builtin_altivec_vperm_4si">,
    606               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 
    607                          llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>;
    608   def int_ppc_altivec_vsel : GCCBuiltin<"__builtin_altivec_vsel_4si">,
    609               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 
    610                          llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
    611   def int_ppc_altivec_vgbbd : GCCBuiltin<"__builtin_altivec_vgbbd">,
    612               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    613   def int_ppc_altivec_vbpermq : GCCBuiltin<"__builtin_altivec_vbpermq">,
    614               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    615                         [IntrNoMem]>;
    616 }
    617 
    618 def int_ppc_altivec_vexptefp  : PowerPC_Vec_FF_Intrinsic<"vexptefp">;
    619 def int_ppc_altivec_vlogefp   : PowerPC_Vec_FF_Intrinsic<"vlogefp">;
    620 def int_ppc_altivec_vrefp     : PowerPC_Vec_FF_Intrinsic<"vrefp">;
    621 def int_ppc_altivec_vrsqrtefp : PowerPC_Vec_FF_Intrinsic<"vrsqrtefp">;
    622 
    623 // Power8 Intrinsics
    624 // Crypto
    625 let TargetPrefix = "ppc" in {  // All PPC intrinsics start with "llvm.ppc.".
    626   def int_ppc_altivec_crypto_vsbox :
    627               GCCBuiltin<"__builtin_altivec_crypto_vsbox">,
    628               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
    629   def int_ppc_altivec_crypto_vpermxor :
    630               GCCBuiltin<"__builtin_altivec_crypto_vpermxor">,
    631               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    632                          llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
    633 
    634 def int_ppc_altivec_crypto_vshasigmad :
    635             GCCBuiltin<"__builtin_altivec_crypto_vshasigmad">,
    636             Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    637                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
    638 def int_ppc_altivec_crypto_vshasigmaw :
    639             GCCBuiltin<"__builtin_altivec_crypto_vshasigmaw">,
    640             Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    641                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
    642 }
    643 def int_ppc_altivec_crypto_vcipher :
    644             PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">;
    645 def int_ppc_altivec_crypto_vcipherlast :
    646             PowerPC_Vec_DDD_Intrinsic<"crypto_vcipherlast">;
    647 def int_ppc_altivec_crypto_vncipher :
    648             PowerPC_Vec_DDD_Intrinsic<"crypto_vncipher">;
    649 def int_ppc_altivec_crypto_vncipherlast :
    650             PowerPC_Vec_DDD_Intrinsic<"crypto_vncipherlast">;
    651 def int_ppc_altivec_crypto_vpmsumb :
    652             PowerPC_Vec_BBB_Intrinsic<"crypto_vpmsumb">;
    653 def int_ppc_altivec_crypto_vpmsumh :
    654             PowerPC_Vec_HHH_Intrinsic<"crypto_vpmsumh">;
    655 def int_ppc_altivec_crypto_vpmsumw :
    656             PowerPC_Vec_WWW_Intrinsic<"crypto_vpmsumw">;
    657 def int_ppc_altivec_crypto_vpmsumd :
    658             PowerPC_Vec_DDD_Intrinsic<"crypto_vpmsumd">;
    659 
    660 //===----------------------------------------------------------------------===//
    661 // PowerPC VSX Intrinsic Definitions.
    662 
    663 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
    664 
    665 // Vector load.
    666 def int_ppc_vsx_lxvw4x :
    667       Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    668 def int_ppc_vsx_lxvd2x :
    669       Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    670 
    671 // Vector store.
    672 def int_ppc_vsx_stxvw4x :
    673       Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], [IntrArgMemOnly]>;
    674 def int_ppc_vsx_stxvd2x :
    675       Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], [IntrArgMemOnly]>;
    676 
    677 // Vector and scalar maximum.
    678 def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmaxdp">;
    679 def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvmaxsp">;
    680 def int_ppc_vsx_xsmaxdp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmaxdp">;
    681 
    682 // Vector and scalar minimum.
    683 def int_ppc_vsx_xvmindp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmindp">;
    684 def int_ppc_vsx_xvminsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvminsp">;
    685 def int_ppc_vsx_xsmindp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmindp">;
    686 
    687 // Vector divide.
    688 def int_ppc_vsx_xvdivdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvdivdp">;
    689 def int_ppc_vsx_xvdivsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvdivsp">;
    690 
    691 // Vector round-to-infinity (ceil)
    692 def int_ppc_vsx_xvrspip :
    693       Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    694 def int_ppc_vsx_xvrdpip :
    695       Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    696 
    697 // Vector reciprocal estimate
    698 def int_ppc_vsx_xvresp : GCCBuiltin<"__builtin_vsx_xvresp">,
    699       Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    700 def int_ppc_vsx_xvredp : GCCBuiltin<"__builtin_vsx_xvredp">,
    701       Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    702 
    703 // Vector rsqrte
    704 def int_ppc_vsx_xvrsqrtesp : GCCBuiltin<"__builtin_vsx_xvrsqrtesp">,
    705       Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    706 def int_ppc_vsx_xvrsqrtedp : GCCBuiltin<"__builtin_vsx_xvrsqrtedp">,
    707       Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    708 
    709 // Vector compare
    710 def int_ppc_vsx_xvcmpeqdp :
    711       PowerPC_VSX_Intrinsic<"xvcmpeqdp", [llvm_v2i64_ty],
    712                             [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
    713 def int_ppc_vsx_xvcmpeqdp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqdp_p">,
    714               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
    715                         [IntrNoMem]>;
    716 def int_ppc_vsx_xvcmpeqsp :
    717       PowerPC_VSX_Intrinsic<"xvcmpeqsp", [llvm_v4i32_ty],
    718                             [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
    719 def int_ppc_vsx_xvcmpeqsp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqsp_p">,
    720               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    721                         [IntrNoMem]>;
    722 def int_ppc_vsx_xvcmpgedp :
    723       PowerPC_VSX_Intrinsic<"xvcmpgedp", [llvm_v2i64_ty],
    724                             [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
    725 def int_ppc_vsx_xvcmpgedp_p : GCCBuiltin<"__builtin_vsx_xvcmpgedp_p">,
    726               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
    727                         [IntrNoMem]>;
    728 def int_ppc_vsx_xvcmpgesp :
    729       PowerPC_VSX_Intrinsic<"xvcmpgesp", [llvm_v4i32_ty],
    730                             [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
    731 def int_ppc_vsx_xvcmpgesp_p : GCCBuiltin<"__builtin_vsx_xvcmpgesp_p">,
    732               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    733                         [IntrNoMem]>;
    734 def int_ppc_vsx_xvcmpgtdp :
    735       PowerPC_VSX_Intrinsic<"xvcmpgtdp", [llvm_v2i64_ty],
    736                             [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
    737 def int_ppc_vsx_xvcmpgtdp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtdp_p">,
    738               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
    739                         [IntrNoMem]>;
    740 def int_ppc_vsx_xvcmpgtsp :
    741       PowerPC_VSX_Intrinsic<"xvcmpgtsp", [llvm_v4i32_ty],
    742                             [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
    743 def int_ppc_vsx_xvcmpgtsp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtsp_p">,
    744               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
    745                         [IntrNoMem]>;
    746 def int_ppc_vsx_xxleqv :
    747       PowerPC_VSX_Intrinsic<"xxleqv", [llvm_v4i32_ty],
    748                             [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
    749 }
    750 
    751 //===----------------------------------------------------------------------===//
    752 // PowerPC QPX Intrinsics.
    753 //
    754 
    755 let TargetPrefix = "ppc" in {  // All PPC intrinsics start with "llvm.ppc.".
    756   /// PowerPC_QPX_Intrinsic - Base class for all QPX intrinsics.
    757   class PowerPC_QPX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
    758                               list<LLVMType> param_types,
    759                               list<IntrinsicProperty> properties>
    760     : GCCBuiltin<!strconcat("__builtin_qpx_", GCCIntSuffix)>,
    761       Intrinsic<ret_types, param_types, properties>;
    762 }
    763 
    764 //===----------------------------------------------------------------------===//
    765 // PowerPC QPX Intrinsic Class Definitions.
    766 //
    767 
    768 /// PowerPC_QPX_FF_Intrinsic - A PowerPC intrinsic that takes one v4f64
    769 /// vector and returns one.  These intrinsics have no side effects.
    770 class PowerPC_QPX_FF_Intrinsic<string GCCIntSuffix>
    771   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    772                           [llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
    773 
    774 /// PowerPC_QPX_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f64
    775 /// vectors and returns one.  These intrinsics have no side effects.
    776 class PowerPC_QPX_FFF_Intrinsic<string GCCIntSuffix>
    777   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    778                           [llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
    779                           [IntrNoMem]>;
    780 
    781 /// PowerPC_QPX_FFFF_Intrinsic - A PowerPC intrinsic that takes three v4f64
    782 /// vectors and returns one.  These intrinsics have no side effects.
    783 class PowerPC_QPX_FFFF_Intrinsic<string GCCIntSuffix>
    784   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    785                           [llvm_v4f64_ty],
    786                           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
    787                           [IntrNoMem]>;
    788 
    789 /// PowerPC_QPX_Load_Intrinsic - A PowerPC intrinsic that takes a pointer
    790 /// and returns a v4f64.
    791 class PowerPC_QPX_Load_Intrinsic<string GCCIntSuffix>
    792   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    793                           [llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
    794 
    795 /// PowerPC_QPX_LoadPerm_Intrinsic - A PowerPC intrinsic that takes a pointer
    796 /// and returns a v4f64 permutation.
    797 class PowerPC_QPX_LoadPerm_Intrinsic<string GCCIntSuffix>
    798   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    799                           [llvm_v4f64_ty], [llvm_ptr_ty], [IntrNoMem]>;
    800 
    801 /// PowerPC_QPX_Store_Intrinsic - A PowerPC intrinsic that takes a pointer
    802 /// and stores a v4f64.
    803 class PowerPC_QPX_Store_Intrinsic<string GCCIntSuffix>
    804   : PowerPC_QPX_Intrinsic<GCCIntSuffix,
    805                           [], [llvm_v4f64_ty, llvm_ptr_ty],
    806                           [IntrArgMemOnly]>;
    807 
    808 //===----------------------------------------------------------------------===//
    809 // PowerPC QPX Intrinsic Definitions.
    810 
    811 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
    812   // Add Instructions
    813   def int_ppc_qpx_qvfadd : PowerPC_QPX_FFF_Intrinsic<"qvfadd">;
    814   def int_ppc_qpx_qvfadds : PowerPC_QPX_FFF_Intrinsic<"qvfadds">;
    815   def int_ppc_qpx_qvfsub : PowerPC_QPX_FFF_Intrinsic<"qvfsub">;
    816   def int_ppc_qpx_qvfsubs : PowerPC_QPX_FFF_Intrinsic<"qvfsubs">;
    817 
    818   // Estimate Instructions
    819   def int_ppc_qpx_qvfre : PowerPC_QPX_FF_Intrinsic<"qvfre">;
    820   def int_ppc_qpx_qvfres : PowerPC_QPX_FF_Intrinsic<"qvfres">;
    821   def int_ppc_qpx_qvfrsqrte : PowerPC_QPX_FF_Intrinsic<"qvfrsqrte">;
    822   def int_ppc_qpx_qvfrsqrtes : PowerPC_QPX_FF_Intrinsic<"qvfrsqrtes">;
    823 
    824   // Multiply Instructions
    825   def int_ppc_qpx_qvfmul : PowerPC_QPX_FFF_Intrinsic<"qvfmul">;
    826   def int_ppc_qpx_qvfmuls : PowerPC_QPX_FFF_Intrinsic<"qvfmuls">;
    827   def int_ppc_qpx_qvfxmul : PowerPC_QPX_FFF_Intrinsic<"qvfxmul">;
    828   def int_ppc_qpx_qvfxmuls : PowerPC_QPX_FFF_Intrinsic<"qvfxmuls">;
    829 
    830   // Multiply-add instructions
    831   def int_ppc_qpx_qvfmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfmadd">;
    832   def int_ppc_qpx_qvfmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfmadds">;
    833   def int_ppc_qpx_qvfnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadd">;
    834   def int_ppc_qpx_qvfnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfnmadds">;
    835   def int_ppc_qpx_qvfmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfmsub">;
    836   def int_ppc_qpx_qvfmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfmsubs">;
    837   def int_ppc_qpx_qvfnmsub : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsub">;
    838   def int_ppc_qpx_qvfnmsubs : PowerPC_QPX_FFFF_Intrinsic<"qvfnmsubs">;
    839   def int_ppc_qpx_qvfxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadd">;
    840   def int_ppc_qpx_qvfxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxmadds">;
    841   def int_ppc_qpx_qvfxxnpmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadd">;
    842   def int_ppc_qpx_qvfxxnpmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxnpmadds">;
    843   def int_ppc_qpx_qvfxxcpnmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadd">;
    844   def int_ppc_qpx_qvfxxcpnmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxcpnmadds">;
    845   def int_ppc_qpx_qvfxxmadd : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadd">;
    846   def int_ppc_qpx_qvfxxmadds : PowerPC_QPX_FFFF_Intrinsic<"qvfxxmadds">;
    847 
    848   // Select Instruction
    849   def int_ppc_qpx_qvfsel : PowerPC_QPX_FFFF_Intrinsic<"qvfsel">;
    850 
    851   // Permute Instruction
    852   def int_ppc_qpx_qvfperm : PowerPC_QPX_FFFF_Intrinsic<"qvfperm">;
    853 
    854   // Convert and Round Instructions
    855   def int_ppc_qpx_qvfctid : PowerPC_QPX_FF_Intrinsic<"qvfctid">;
    856   def int_ppc_qpx_qvfctidu : PowerPC_QPX_FF_Intrinsic<"qvfctidu">;
    857   def int_ppc_qpx_qvfctidz : PowerPC_QPX_FF_Intrinsic<"qvfctidz">;
    858   def int_ppc_qpx_qvfctiduz : PowerPC_QPX_FF_Intrinsic<"qvfctiduz">;
    859   def int_ppc_qpx_qvfctiw : PowerPC_QPX_FF_Intrinsic<"qvfctiw">;
    860   def int_ppc_qpx_qvfctiwu : PowerPC_QPX_FF_Intrinsic<"qvfctiwu">;
    861   def int_ppc_qpx_qvfctiwz : PowerPC_QPX_FF_Intrinsic<"qvfctiwz">;
    862   def int_ppc_qpx_qvfctiwuz : PowerPC_QPX_FF_Intrinsic<"qvfctiwuz">;
    863   def int_ppc_qpx_qvfcfid : PowerPC_QPX_FF_Intrinsic<"qvfcfid">;
    864   def int_ppc_qpx_qvfcfidu : PowerPC_QPX_FF_Intrinsic<"qvfcfidu">;
    865   def int_ppc_qpx_qvfcfids : PowerPC_QPX_FF_Intrinsic<"qvfcfids">;
    866   def int_ppc_qpx_qvfcfidus : PowerPC_QPX_FF_Intrinsic<"qvfcfidus">;
    867   def int_ppc_qpx_qvfrsp : PowerPC_QPX_FF_Intrinsic<"qvfrsp">;
    868   def int_ppc_qpx_qvfriz : PowerPC_QPX_FF_Intrinsic<"qvfriz">;
    869   def int_ppc_qpx_qvfrin : PowerPC_QPX_FF_Intrinsic<"qvfrin">;
    870   def int_ppc_qpx_qvfrip : PowerPC_QPX_FF_Intrinsic<"qvfrip">;
    871   def int_ppc_qpx_qvfrim : PowerPC_QPX_FF_Intrinsic<"qvfrim">;
    872 
    873   // Move Instructions
    874   def int_ppc_qpx_qvfneg : PowerPC_QPX_FF_Intrinsic<"qvfneg">;
    875   def int_ppc_qpx_qvfabs : PowerPC_QPX_FF_Intrinsic<"qvfabs">;
    876   def int_ppc_qpx_qvfnabs : PowerPC_QPX_FF_Intrinsic<"qvfnabs">;
    877   def int_ppc_qpx_qvfcpsgn : PowerPC_QPX_FFF_Intrinsic<"qvfcpsgn">;
    878 
    879   // Compare Instructions
    880   def int_ppc_qpx_qvftstnan : PowerPC_QPX_FFF_Intrinsic<"qvftstnan">;
    881   def int_ppc_qpx_qvfcmplt : PowerPC_QPX_FFF_Intrinsic<"qvfcmplt">;
    882   def int_ppc_qpx_qvfcmpgt : PowerPC_QPX_FFF_Intrinsic<"qvfcmpgt">;
    883   def int_ppc_qpx_qvfcmpeq : PowerPC_QPX_FFF_Intrinsic<"qvfcmpeq">;
    884 
    885   // Load instructions
    886   def int_ppc_qpx_qvlfd : PowerPC_QPX_Load_Intrinsic<"qvlfd">;
    887   def int_ppc_qpx_qvlfda : PowerPC_QPX_Load_Intrinsic<"qvlfda">;
    888   def int_ppc_qpx_qvlfs : PowerPC_QPX_Load_Intrinsic<"qvlfs">;
    889   def int_ppc_qpx_qvlfsa : PowerPC_QPX_Load_Intrinsic<"qvlfsa">;
    890 
    891   def int_ppc_qpx_qvlfcda : PowerPC_QPX_Load_Intrinsic<"qvlfcda">;
    892   def int_ppc_qpx_qvlfcd : PowerPC_QPX_Load_Intrinsic<"qvlfcd">;
    893   def int_ppc_qpx_qvlfcsa : PowerPC_QPX_Load_Intrinsic<"qvlfcsa">;
    894   def int_ppc_qpx_qvlfcs : PowerPC_QPX_Load_Intrinsic<"qvlfcs">;
    895   def int_ppc_qpx_qvlfiwaa : PowerPC_QPX_Load_Intrinsic<"qvlfiwaa">;
    896   def int_ppc_qpx_qvlfiwa : PowerPC_QPX_Load_Intrinsic<"qvlfiwa">;
    897   def int_ppc_qpx_qvlfiwza : PowerPC_QPX_Load_Intrinsic<"qvlfiwza">;
    898   def int_ppc_qpx_qvlfiwz : PowerPC_QPX_Load_Intrinsic<"qvlfiwz">;
    899 
    900   def int_ppc_qpx_qvlpcld : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcld">;
    901   def int_ppc_qpx_qvlpcls : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcls">;
    902   def int_ppc_qpx_qvlpcrd : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrd">;
    903   def int_ppc_qpx_qvlpcrs : PowerPC_QPX_LoadPerm_Intrinsic<"qvlpcrs">;
    904 
    905   // Store instructions
    906   def int_ppc_qpx_qvstfd : PowerPC_QPX_Store_Intrinsic<"qvstfd">;
    907   def int_ppc_qpx_qvstfda : PowerPC_QPX_Store_Intrinsic<"qvstfda">;
    908   def int_ppc_qpx_qvstfs : PowerPC_QPX_Store_Intrinsic<"qvstfs">;
    909   def int_ppc_qpx_qvstfsa : PowerPC_QPX_Store_Intrinsic<"qvstfsa">;
    910 
    911   def int_ppc_qpx_qvstfcda : PowerPC_QPX_Store_Intrinsic<"qvstfcda">;
    912   def int_ppc_qpx_qvstfcd : PowerPC_QPX_Store_Intrinsic<"qvstfcd">;
    913   def int_ppc_qpx_qvstfcsa : PowerPC_QPX_Store_Intrinsic<"qvstfcsa">;
    914   def int_ppc_qpx_qvstfcs : PowerPC_QPX_Store_Intrinsic<"qvstfcs">;
    915   def int_ppc_qpx_qvstfiwa : PowerPC_QPX_Store_Intrinsic<"qvstfiwa">;
    916   def int_ppc_qpx_qvstfiw : PowerPC_QPX_Store_Intrinsic<"qvstfiw">;
    917 
    918   // Logical and permutation formation
    919   def int_ppc_qpx_qvflogical : PowerPC_QPX_Intrinsic<"qvflogical",
    920                           [llvm_v4f64_ty],
    921                           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
    922                           [IntrNoMem]>;
    923   def int_ppc_qpx_qvgpci : PowerPC_QPX_Intrinsic<"qvgpci",
    924                           [llvm_v4f64_ty], [llvm_i32_ty], [IntrNoMem]>;
    925 }
    926 
    927 //===----------------------------------------------------------------------===//
    928 // PowerPC HTM Intrinsic Definitions.
    929 
    930 let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
    931 
    932 def int_ppc_tbegin : GCCBuiltin<"__builtin_tbegin">,
    933       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
    934 def int_ppc_tend : GCCBuiltin<"__builtin_tend">,
    935       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
    936 
    937 def int_ppc_tabort : GCCBuiltin<"__builtin_tabort">,
    938       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
    939 def int_ppc_tabortwc : GCCBuiltin<"__builtin_tabortwc">,
    940       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
    941 def int_ppc_tabortwci : GCCBuiltin<"__builtin_tabortwci">,
    942       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
    943 def int_ppc_tabortdc : GCCBuiltin<"__builtin_tabortdc">,
    944       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
    945 def int_ppc_tabortdci : GCCBuiltin<"__builtin_tabortdci">,
    946       Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
    947 
    948 def int_ppc_tcheck : GCCBuiltin<"__builtin_tcheck">,
    949       Intrinsic<[llvm_i32_ty], [], []>;
    950 def int_ppc_treclaim : GCCBuiltin<"__builtin_treclaim">,
    951       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
    952 def int_ppc_trechkpt : GCCBuiltin<"__builtin_trechkpt">,
    953       Intrinsic<[llvm_i32_ty], [], []>;
    954 def int_ppc_tsr : GCCBuiltin<"__builtin_tsr">,
    955       Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
    956 
    957 def int_ppc_get_texasr : GCCBuiltin<"__builtin_get_texasr">,
    958       Intrinsic<[llvm_i64_ty], [], []>;
    959 def int_ppc_get_texasru : GCCBuiltin<"__builtin_get_texasru">,
    960       Intrinsic<[llvm_i64_ty], [], []>;
    961 def int_ppc_get_tfhar : GCCBuiltin<"__builtin_get_tfhar">,
    962       Intrinsic<[llvm_i64_ty], [], []>;
    963 def int_ppc_get_tfiar : GCCBuiltin<"__builtin_get_tfiar">,
    964       Intrinsic<[llvm_i64_ty], [], []>;
    965 
    966 def int_ppc_set_texasr : GCCBuiltin<"__builtin_set_texasr">,
    967       Intrinsic<[], [llvm_i64_ty], []>;
    968 def int_ppc_set_texasru : GCCBuiltin<"__builtin_set_texasru">,
    969       Intrinsic<[], [llvm_i64_ty], []>;
    970 def int_ppc_set_tfhar : GCCBuiltin<"__builtin_set_tfhar">,
    971       Intrinsic<[], [llvm_i64_ty], []>;
    972 def int_ppc_set_tfiar : GCCBuiltin<"__builtin_set_tfiar">,
    973       Intrinsic<[], [llvm_i64_ty], []>;
    974 
    975 // Extended mnemonics
    976 def int_ppc_tendall : GCCBuiltin<"__builtin_tendall">,
    977       Intrinsic<[llvm_i32_ty], [], []>;
    978 def int_ppc_tresume : GCCBuiltin<"__builtin_tresume">,
    979       Intrinsic<[llvm_i32_ty], [], []>;
    980 def int_ppc_tsuspend : GCCBuiltin<"__builtin_tsuspend">,
    981       Intrinsic<[llvm_i32_ty], [], []>;
    982 
    983 def int_ppc_ttest : GCCBuiltin<"__builtin_ttest">,
    984       Intrinsic<[llvm_i64_ty], [], []>;
    985 }
    986