IntrinsicsPowerPC.td 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809
  1. //===- IntrinsicsPowerPC.td - Defines PowerPC intrinsics ---*- tablegen -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file defines all of the PowerPC-specific intrinsics.
  10. //
  11. //===----------------------------------------------------------------------===//
  12. //===----------------------------------------------------------------------===//
  13. // Definitions for all PowerPC intrinsics.
  14. //
  15. // Non-altivec intrinsics.
  16. let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
  17. // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions.
  18. def int_ppc_dcba : Intrinsic<[], [llvm_ptr_ty], []>;
  19. def int_ppc_dcbf : GCCBuiltin<"__builtin_dcbf">,
  20. Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>;
  21. def int_ppc_dcbfps : Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>;
  22. def int_ppc_dcbstps : Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>;
  23. def int_ppc_dcbi : Intrinsic<[], [llvm_ptr_ty], []>;
  24. def int_ppc_dcbt_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty],
  25. [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>;
  26. def int_ppc_dcbtst_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty],
  27. [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>;
  28. def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>;
  29. // Get content from current FPSCR register
  30. def int_ppc_readflm : GCCBuiltin<"__builtin_readflm">,
  31. Intrinsic<[llvm_double_ty], [],
  32. [IntrNoMerge, IntrHasSideEffects]>;
  33. // Set FPSCR register, and return previous content
  34. def int_ppc_setflm : GCCBuiltin<"__builtin_setflm">,
  35. Intrinsic<[llvm_double_ty], [llvm_double_ty],
  36. [IntrHasSideEffects]>;
  37. // Intrinsics for [double]word extended forms of divide instructions
  38. def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">,
  39. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
  40. [IntrNoMem]>;
  41. def int_ppc_divweu : GCCBuiltin<"__builtin_divweu">,
  42. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
  43. [IntrNoMem]>;
  44. def int_ppc_divde : GCCBuiltin<"__builtin_divde">,
  45. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
  46. [IntrNoMem]>;
  47. def int_ppc_divdeu : GCCBuiltin<"__builtin_divdeu">,
  48. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
  49. [IntrNoMem]>;
  50. def int_ppc_unpack_longdouble : GCCBuiltin<"__builtin_unpack_longdouble">,
  51. Intrinsic<[llvm_double_ty],
  52. [llvm_ppcf128_ty, llvm_i32_ty],
  53. [IntrNoMem]>;
  54. def int_ppc_pack_longdouble : GCCBuiltin<"__builtin_pack_longdouble">,
  55. Intrinsic<[llvm_ppcf128_ty],
  56. [llvm_double_ty, llvm_double_ty],
  57. [IntrNoMem]>;
  58. // Generate a random number
  59. def int_ppc_darn : GCCBuiltin<"__builtin_darn">,
  60. Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>;
  61. def int_ppc_darnraw : GCCBuiltin<"__builtin_darn_raw">,
  62. Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>;
  63. def int_ppc_darn32 : GCCBuiltin<"__builtin_darn_32">,
  64. Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>;
  65. // Bit permute doubleword
  66. def int_ppc_bpermd : GCCBuiltin<"__builtin_bpermd">,
  67. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
  68. [IntrNoMem]>;
  69. // Parallel Bits Deposit/Extract Doubleword Builtins.
  70. def int_ppc_pdepd
  71. : GCCBuiltin<"__builtin_pdepd">,
  72. Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  73. def int_ppc_pextd
  74. : GCCBuiltin<"__builtin_pextd">,
  75. Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  76. // Centrifuge Doubleword Builtin.
  77. def int_ppc_cfuged
  78. : GCCBuiltin<"__builtin_cfuged">,
  79. Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  80. // Count Leading / Trailing Zeroes under bit Mask Builtins.
  81. def int_ppc_cntlzdm
  82. : GCCBuiltin<"__builtin_cntlzdm">,
  83. Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  84. def int_ppc_cnttzdm
  85. : GCCBuiltin<"__builtin_cnttzdm">,
  86. Intrinsic <[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  87. def int_ppc_truncf128_round_to_odd
  88. : GCCBuiltin<"__builtin_truncf128_round_to_odd">,
  89. Intrinsic <[llvm_double_ty], [llvm_f128_ty], [IntrNoMem]>;
  90. def int_ppc_sqrtf128_round_to_odd
  91. : GCCBuiltin<"__builtin_sqrtf128_round_to_odd">,
  92. Intrinsic <[llvm_f128_ty], [llvm_f128_ty], [IntrNoMem]>;
  93. def int_ppc_addf128_round_to_odd
  94. : GCCBuiltin<"__builtin_addf128_round_to_odd">,
  95. Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
  96. def int_ppc_subf128_round_to_odd
  97. : GCCBuiltin<"__builtin_subf128_round_to_odd">,
  98. Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
  99. def int_ppc_mulf128_round_to_odd
  100. : GCCBuiltin<"__builtin_mulf128_round_to_odd">,
  101. Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
  102. def int_ppc_divf128_round_to_odd
  103. : GCCBuiltin<"__builtin_divf128_round_to_odd">,
  104. Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
  105. def int_ppc_fmaf128_round_to_odd
  106. : GCCBuiltin<"__builtin_fmaf128_round_to_odd">,
  107. Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
  108. def int_ppc_scalar_extract_expq
  109. : GCCBuiltin<"__builtin_vsx_scalar_extract_expq">,
  110. Intrinsic <[llvm_i64_ty], [llvm_f128_ty], [IntrNoMem]>;
  111. def int_ppc_scalar_insert_exp_qp
  112. : GCCBuiltin<"__builtin_vsx_scalar_insert_exp_qp">,
  113. Intrinsic <[llvm_f128_ty], [llvm_f128_ty, llvm_i64_ty], [IntrNoMem]>;
  114. // Intrinsics defined to maintain XL compatibility
  115. def int_ppc_tdw
  116. : GCCBuiltin<"__builtin_ppc_tdw">,
  117. Intrinsic <[], [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>;
  118. def int_ppc_tw
  119. : GCCBuiltin<"__builtin_ppc_tw">,
  120. Intrinsic <[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>;
  121. def int_ppc_trapd
  122. : GCCBuiltin<"__builtin_ppc_trapd">,
  123. Intrinsic <[], [llvm_i64_ty], []>;
  124. def int_ppc_trap
  125. : GCCBuiltin<"__builtin_ppc_trap">,
  126. Intrinsic <[], [llvm_i32_ty], []>;
  127. def int_ppc_fcfid
  128. : GCCBuiltin<"__builtin_ppc_fcfid">,
  129. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  130. def int_ppc_fcfud
  131. : GCCBuiltin<"__builtin_ppc_fcfud">,
  132. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  133. def int_ppc_fctid
  134. : GCCBuiltin<"__builtin_ppc_fctid">,
  135. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  136. def int_ppc_fctidz
  137. : GCCBuiltin<"__builtin_ppc_fctidz">,
  138. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  139. def int_ppc_fctiw
  140. : GCCBuiltin<"__builtin_ppc_fctiw">,
  141. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  142. def int_ppc_fctiwz
  143. : GCCBuiltin<"__builtin_ppc_fctiwz">,
  144. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  145. def int_ppc_fctudz
  146. : GCCBuiltin<"__builtin_ppc_fctudz">,
  147. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  148. def int_ppc_fctuwz
  149. : GCCBuiltin<"__builtin_ppc_fctuwz">,
  150. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  151. }
  152. let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.".
  153. /// PowerPC_Vec_Intrinsic - Base class for all altivec intrinsics.
  154. class PowerPC_Vec_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
  155. list<LLVMType> param_types,
  156. list<IntrinsicProperty> properties>
  157. : GCCBuiltin<!strconcat("__builtin_altivec_", GCCIntSuffix)>,
  158. Intrinsic<ret_types, param_types, properties>;
  159. /// PowerPC_VSX_Intrinsic - Base class for all VSX intrinsics.
  160. class PowerPC_VSX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types,
  161. list<LLVMType> param_types,
  162. list<IntrinsicProperty> properties>
  163. : GCCBuiltin<!strconcat("__builtin_vsx_", GCCIntSuffix)>,
  164. Intrinsic<ret_types, param_types, properties>;
  165. }
  166. //===----------------------------------------------------------------------===//
  167. // PowerPC MMA Intrinsic Multi Class Definitions.
  168. //
  169. multiclass PowerPC_MMA_ACC_Intrinsic<list<LLVMType> args> {
  170. def NAME: Intrinsic<[llvm_v512i1_ty], args, [IntrNoMem]>;
  171. def pp : Intrinsic<[llvm_v512i1_ty], !listconcat([llvm_v512i1_ty], args),
  172. [IntrNoMem]>;
  173. def pn : Intrinsic<[llvm_v512i1_ty], !listconcat([llvm_v512i1_ty], args),
  174. [IntrNoMem]>;
  175. def np : Intrinsic<[llvm_v512i1_ty], !listconcat([llvm_v512i1_ty], args),
  176. [IntrNoMem]>;
  177. def nn : Intrinsic<[llvm_v512i1_ty], !listconcat([llvm_v512i1_ty], args),
  178. [IntrNoMem]>;
  179. }
  180. multiclass PowerPC_MMA_ACC_PP_Intrinsic<list<LLVMType> args> {
  181. def NAME: Intrinsic<[llvm_v512i1_ty], args, [IntrNoMem]>;
  182. def pp : Intrinsic<[llvm_v512i1_ty], !listconcat([llvm_v512i1_ty], args),
  183. [IntrNoMem]>;
  184. }
  185. //===----------------------------------------------------------------------===//
  186. // PowerPC Altivec Intrinsic Class Definitions.
  187. //
  188. /// PowerPC_Vec_FF_Intrinsic - A PowerPC intrinsic that takes one v4f32
  189. /// vector and returns one. These intrinsics have no side effects.
  190. class PowerPC_Vec_FF_Intrinsic<string GCCIntSuffix>
  191. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  192. [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  193. /// PowerPC_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32
  194. /// vectors and returns one. These intrinsics have no side effects.
  195. class PowerPC_Vec_FFF_Intrinsic<string GCCIntSuffix>
  196. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  197. [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  198. [IntrNoMem]>;
  199. /// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8
  200. /// vectors and returns one. These intrinsics have no side effects.
  201. class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix>
  202. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  203. [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  204. [IntrNoMem]>;
  205. /// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16
  206. /// vectors and returns one. These intrinsics have no side effects.
  207. class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix>
  208. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  209. [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  210. [IntrNoMem]>;
  211. /// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32
  212. /// vectors and returns one. These intrinsics have no side effects.
  213. class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix>
  214. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  215. [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  216. [IntrNoMem]>;
  217. /// PowerPC_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2i64
  218. /// vectors and returns one. These intrinsics have no side effects.
  219. class PowerPC_Vec_DDD_Intrinsic<string GCCIntSuffix>
  220. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  221. [llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  222. [IntrNoMem]>;
  223. /// PowerPC_Vec_QQQ_Intrinsic - A PowerPC intrinsic that takes two v1i128
  224. /// vectors and returns one. These intrinsics have no side effects.
  225. class PowerPC_Vec_QQQ_Intrinsic<string GCCIntSuffix>
  226. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  227. [llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty],
  228. [IntrNoMem]>;
  229. /// PowerPC_Vec_QDD_Intrinsic - A PowerPC intrinsic that takes two v2i64
  230. /// vectors and returns one v1i128. These intrinsics have no side effects.
  231. class PowerPC_Vec_QDD_Intrinsic<string GCCIntSuffix>
  232. : PowerPC_Vec_Intrinsic<GCCIntSuffix,
  233. [llvm_v1i128_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  234. [IntrNoMem]>;
  235. //===----------------------------------------------------------------------===//
  236. // PowerPC VSX Intrinsic Class Definitions.
  237. //
  238. /// PowerPC_VSX_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2f64
  239. /// vectors and returns one. These intrinsics have no side effects.
  240. class PowerPC_VSX_Vec_DDD_Intrinsic<string GCCIntSuffix>
  241. : PowerPC_VSX_Intrinsic<GCCIntSuffix,
  242. [llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty],
  243. [IntrNoMem]>;
  244. /// PowerPC_VSX_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32
  245. /// vectors and returns one. These intrinsics have no side effects.
  246. class PowerPC_VSX_Vec_FFF_Intrinsic<string GCCIntSuffix>
  247. : PowerPC_VSX_Intrinsic<GCCIntSuffix,
  248. [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  249. [IntrNoMem]>;
  250. /// PowerPC_VSX_Sca_DDD_Intrinsic - A PowerPC intrinsic that takes two f64
  251. /// scalars and returns one. These intrinsics have no side effects.
  252. class PowerPC_VSX_Sca_DDD_Intrinsic<string GCCIntSuffix>
  253. : PowerPC_VSX_Intrinsic<GCCIntSuffix,
  254. [llvm_double_ty], [llvm_double_ty, llvm_double_ty],
  255. [IntrNoMem]>;
  256. //===----------------------------------------------------------------------===//
  257. // PowerPC Altivec Intrinsic Definitions.
  258. let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
  259. // Data Stream Control.
  260. def int_ppc_altivec_dss : GCCBuiltin<"__builtin_altivec_dss">,
  261. Intrinsic<[], [llvm_i32_ty], []>;
  262. def int_ppc_altivec_dssall : GCCBuiltin<"__builtin_altivec_dssall">,
  263. Intrinsic<[], [], []>;
  264. def int_ppc_altivec_dst : GCCBuiltin<"__builtin_altivec_dst">,
  265. Intrinsic<[],
  266. [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
  267. []>;
  268. def int_ppc_altivec_dstt : GCCBuiltin<"__builtin_altivec_dstt">,
  269. Intrinsic<[],
  270. [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
  271. []>;
  272. def int_ppc_altivec_dstst : GCCBuiltin<"__builtin_altivec_dstst">,
  273. Intrinsic<[],
  274. [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
  275. []>;
  276. def int_ppc_altivec_dststt : GCCBuiltin<"__builtin_altivec_dststt">,
  277. Intrinsic<[],
  278. [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty],
  279. []>;
  280. // VSCR access.
  281. def int_ppc_altivec_mfvscr : GCCBuiltin<"__builtin_altivec_mfvscr">,
  282. Intrinsic<[llvm_v8i16_ty], [], [IntrNoMem, IntrHasSideEffects]>;
  283. def int_ppc_altivec_mtvscr : GCCBuiltin<"__builtin_altivec_mtvscr">,
  284. Intrinsic<[], [llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>;
  285. // Loads. These don't map directly to GCC builtins because they represent the
  286. // source address with a single pointer.
  287. def int_ppc_altivec_lvx :
  288. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  289. def int_ppc_altivec_lvxl :
  290. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  291. def int_ppc_altivec_lvebx :
  292. Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  293. def int_ppc_altivec_lvehx :
  294. Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  295. def int_ppc_altivec_lvewx :
  296. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  297. // Stores. These don't map directly to GCC builtins because they represent the
  298. // source address with a single pointer.
  299. def int_ppc_altivec_stvx :
  300. Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
  301. [IntrWriteMem, IntrArgMemOnly]>;
  302. def int_ppc_altivec_stvxl :
  303. Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
  304. [IntrWriteMem, IntrArgMemOnly]>;
  305. def int_ppc_altivec_stvebx :
  306. Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty],
  307. [IntrWriteMem, IntrArgMemOnly]>;
  308. def int_ppc_altivec_stvehx :
  309. Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty],
  310. [IntrWriteMem, IntrArgMemOnly]>;
  311. def int_ppc_altivec_stvewx :
  312. Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
  313. [IntrWriteMem, IntrArgMemOnly]>;
  314. // Comparisons setting a vector.
  315. def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_vcmpbfp">,
  316. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  317. [IntrNoMem]>;
  318. def int_ppc_altivec_vcmpeqfp : GCCBuiltin<"__builtin_altivec_vcmpeqfp">,
  319. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  320. [IntrNoMem]>;
  321. def int_ppc_altivec_vcmpgefp : GCCBuiltin<"__builtin_altivec_vcmpgefp">,
  322. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  323. [IntrNoMem]>;
  324. def int_ppc_altivec_vcmpgtfp : GCCBuiltin<"__builtin_altivec_vcmpgtfp">,
  325. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  326. [IntrNoMem]>;
  327. def int_ppc_altivec_vcmpequd : GCCBuiltin<"__builtin_altivec_vcmpequd">,
  328. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  329. [IntrNoMem]>;
  330. def int_ppc_altivec_vcmpgtsd : GCCBuiltin<"__builtin_altivec_vcmpgtsd">,
  331. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  332. [IntrNoMem]>;
  333. def int_ppc_altivec_vcmpgtud : GCCBuiltin<"__builtin_altivec_vcmpgtud">,
  334. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  335. [IntrNoMem]>;
  336. def int_ppc_altivec_vcmpequw : GCCBuiltin<"__builtin_altivec_vcmpequw">,
  337. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  338. [IntrNoMem]>;
  339. def int_ppc_altivec_vcmpgtsw : GCCBuiltin<"__builtin_altivec_vcmpgtsw">,
  340. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  341. [IntrNoMem]>;
  342. def int_ppc_altivec_vcmpgtuw : GCCBuiltin<"__builtin_altivec_vcmpgtuw">,
  343. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  344. [IntrNoMem]>;
  345. def int_ppc_altivec_vcmpnew : GCCBuiltin<"__builtin_altivec_vcmpnew">,
  346. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  347. [IntrNoMem]>;
  348. def int_ppc_altivec_vcmpnezw : GCCBuiltin<"__builtin_altivec_vcmpnezw">,
  349. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  350. [IntrNoMem]>;
  351. def int_ppc_altivec_vcmpequh : GCCBuiltin<"__builtin_altivec_vcmpequh">,
  352. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  353. [IntrNoMem]>;
  354. def int_ppc_altivec_vcmpgtsh : GCCBuiltin<"__builtin_altivec_vcmpgtsh">,
  355. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  356. [IntrNoMem]>;
  357. def int_ppc_altivec_vcmpgtuh : GCCBuiltin<"__builtin_altivec_vcmpgtuh">,
  358. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  359. [IntrNoMem]>;
  360. def int_ppc_altivec_vcmpneh : GCCBuiltin<"__builtin_altivec_vcmpneh">,
  361. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  362. [IntrNoMem]>;
  363. def int_ppc_altivec_vcmpnezh : GCCBuiltin<"__builtin_altivec_vcmpnezh">,
  364. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  365. [IntrNoMem]>;
  366. def int_ppc_altivec_vcmpequb : GCCBuiltin<"__builtin_altivec_vcmpequb">,
  367. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  368. [IntrNoMem]>;
  369. def int_ppc_altivec_vcmpgtsb : GCCBuiltin<"__builtin_altivec_vcmpgtsb">,
  370. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  371. [IntrNoMem]>;
  372. def int_ppc_altivec_vcmpgtub : GCCBuiltin<"__builtin_altivec_vcmpgtub">,
  373. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  374. [IntrNoMem]>;
  375. def int_ppc_altivec_vcmpneb : GCCBuiltin<"__builtin_altivec_vcmpneb">,
  376. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  377. [IntrNoMem]>;
  378. def int_ppc_altivec_vcmpnezb : GCCBuiltin<"__builtin_altivec_vcmpnezb">,
  379. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  380. [IntrNoMem]>;
  381. def int_ppc_altivec_vcmpequq : GCCBuiltin<"__builtin_altivec_vcmpequq">,
  382. Intrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty],
  383. [IntrNoMem]>;
  384. def int_ppc_altivec_vcmpgtsq : GCCBuiltin<"__builtin_altivec_vcmpgtsq">,
  385. Intrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty],
  386. [IntrNoMem]>;
  387. def int_ppc_altivec_vcmpgtuq : GCCBuiltin<"__builtin_altivec_vcmpgtuq">,
  388. Intrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty],
  389. [IntrNoMem]>;
  390. def int_ppc_altivec_vcmpequq_p : GCCBuiltin<"__builtin_altivec_vcmpequq_p">,
  391. Intrinsic<[llvm_i32_ty],
  392. [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty],
  393. [IntrNoMem]>;
  394. def int_ppc_altivec_vcmpgtsq_p : GCCBuiltin<"__builtin_altivec_vcmpgtsq_p">,
  395. Intrinsic<[llvm_i32_ty],
  396. [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty],
  397. [IntrNoMem]>;
  398. def int_ppc_altivec_vcmpgtuq_p : GCCBuiltin<"__builtin_altivec_vcmpgtuq_p">,
  399. Intrinsic<[llvm_i32_ty],
  400. [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty],
  401. [IntrNoMem]>;
  402. // Predicate Comparisons. The first operand specifies interpretation of CR6.
  403. def int_ppc_altivec_vcmpbfp_p : GCCBuiltin<"__builtin_altivec_vcmpbfp_p">,
  404. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  405. [IntrNoMem]>;
  406. def int_ppc_altivec_vcmpeqfp_p : GCCBuiltin<"__builtin_altivec_vcmpeqfp_p">,
  407. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  408. [IntrNoMem]>;
  409. def int_ppc_altivec_vcmpgefp_p : GCCBuiltin<"__builtin_altivec_vcmpgefp_p">,
  410. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  411. [IntrNoMem]>;
  412. def int_ppc_altivec_vcmpgtfp_p : GCCBuiltin<"__builtin_altivec_vcmpgtfp_p">,
  413. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  414. [IntrNoMem]>;
  415. def int_ppc_altivec_vcmpequd_p : GCCBuiltin<"__builtin_altivec_vcmpequd_p">,
  416. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
  417. [IntrNoMem]>;
  418. def int_ppc_altivec_vcmpgtsd_p : GCCBuiltin<"__builtin_altivec_vcmpgtsd_p">,
  419. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
  420. [IntrNoMem]>;
  421. def int_ppc_altivec_vcmpgtud_p : GCCBuiltin<"__builtin_altivec_vcmpgtud_p">,
  422. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty],
  423. [IntrNoMem]>;
  424. def int_ppc_altivec_vcmpequw_p : GCCBuiltin<"__builtin_altivec_vcmpequw_p">,
  425. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
  426. [IntrNoMem]>;
  427. def int_ppc_altivec_vcmpgtsw_p : GCCBuiltin<"__builtin_altivec_vcmpgtsw_p">,
  428. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
  429. [IntrNoMem]>;
  430. def int_ppc_altivec_vcmpgtuw_p : GCCBuiltin<"__builtin_altivec_vcmpgtuw_p">,
  431. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
  432. [IntrNoMem]>;
  433. def int_ppc_altivec_vcmpnew_p : GCCBuiltin<"__builtin_altivec_vcmpnew_p">,
  434. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
  435. [IntrNoMem]>;
  436. def int_ppc_altivec_vcmpnezw_p : GCCBuiltin<"__builtin_altivec_vcmpnezw_p">,
  437. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
  438. [IntrNoMem]>;
  439. def int_ppc_altivec_vcmpequh_p : GCCBuiltin<"__builtin_altivec_vcmpequh_p">,
  440. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
  441. [IntrNoMem]>;
  442. def int_ppc_altivec_vcmpgtsh_p : GCCBuiltin<"__builtin_altivec_vcmpgtsh_p">,
  443. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
  444. [IntrNoMem]>;
  445. def int_ppc_altivec_vcmpgtuh_p : GCCBuiltin<"__builtin_altivec_vcmpgtuh_p">,
  446. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
  447. [IntrNoMem]>;
  448. def int_ppc_altivec_vcmpneh_p : GCCBuiltin<"__builtin_altivec_vcmpneh_p">,
  449. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
  450. [IntrNoMem]>;
  451. def int_ppc_altivec_vcmpnezh_p : GCCBuiltin<"__builtin_altivec_vcmpnezh_p">,
  452. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
  453. [IntrNoMem]>;
  454. def int_ppc_altivec_vcmpequb_p : GCCBuiltin<"__builtin_altivec_vcmpequb_p">,
  455. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
  456. [IntrNoMem]>;
  457. def int_ppc_altivec_vcmpgtsb_p : GCCBuiltin<"__builtin_altivec_vcmpgtsb_p">,
  458. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
  459. [IntrNoMem]>;
  460. def int_ppc_altivec_vcmpgtub_p : GCCBuiltin<"__builtin_altivec_vcmpgtub_p">,
  461. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
  462. [IntrNoMem]>;
  463. def int_ppc_altivec_vcmpneb_p : GCCBuiltin<"__builtin_altivec_vcmpneb_p">,
  464. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
  465. [IntrNoMem]>;
  466. def int_ppc_altivec_vcmpnezb_p : GCCBuiltin<"__builtin_altivec_vcmpnezb_p">,
  467. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty],
  468. [IntrNoMem]>;
  469. def int_ppc_altivec_vclzlsbb : GCCBuiltin<"__builtin_altivec_vclzlsbb">,
  470. Intrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>;
  471. def int_ppc_altivec_vctzlsbb : GCCBuiltin<"__builtin_altivec_vctzlsbb">,
  472. Intrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>;
  473. def int_ppc_altivec_vprtybw : GCCBuiltin<"__builtin_altivec_vprtybw">,
  474. Intrinsic<[llvm_v4i32_ty],[llvm_v4i32_ty],[IntrNoMem]>;
  475. def int_ppc_altivec_vprtybd : GCCBuiltin<"__builtin_altivec_vprtybd">,
  476. Intrinsic<[llvm_v2i64_ty],[llvm_v2i64_ty],[IntrNoMem]>;
  477. def int_ppc_altivec_vprtybq : GCCBuiltin<"__builtin_altivec_vprtybq">,
  478. Intrinsic<[llvm_v1i128_ty],[llvm_v1i128_ty],[IntrNoMem]>;
  479. // BCD intrinsics.
  480. def int_ppc_bcdadd : GCCBuiltin<"__builtin_ppc_bcdadd">, Intrinsic<
  481. [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  482. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  483. def int_ppc_bcdadd_p : GCCBuiltin<"__builtin_ppc_bcdadd_p">, Intrinsic<
  484. [llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  485. [IntrNoMem, ImmArg<ArgIndex<0>>]>;
  486. def int_ppc_bcdsub : GCCBuiltin<"__builtin_ppc_bcdsub">, Intrinsic<
  487. [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  488. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  489. def int_ppc_bcdsub_p : GCCBuiltin<"__builtin_ppc_bcdsub_p">, Intrinsic<
  490. [llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  491. [IntrNoMem, ImmArg<ArgIndex<0>>]>;
  492. // P10 Vector Extract with Mask
  493. def int_ppc_altivec_vextractbm : GCCBuiltin<"__builtin_altivec_vextractbm">,
  494. Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  495. def int_ppc_altivec_vextracthm : GCCBuiltin<"__builtin_altivec_vextracthm">,
  496. Intrinsic<[llvm_i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  497. def int_ppc_altivec_vextractwm : GCCBuiltin<"__builtin_altivec_vextractwm">,
  498. Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  499. def int_ppc_altivec_vextractdm : GCCBuiltin<"__builtin_altivec_vextractdm">,
  500. Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  501. def int_ppc_altivec_vextractqm : GCCBuiltin<"__builtin_altivec_vextractqm">,
  502. Intrinsic<[llvm_i32_ty], [llvm_v1i128_ty], [IntrNoMem]>;
  503. // P10 Vector Expand with Mask
  504. def int_ppc_altivec_vexpandbm : GCCBuiltin<"__builtin_altivec_vexpandbm">,
  505. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  506. def int_ppc_altivec_vexpandhm : GCCBuiltin<"__builtin_altivec_vexpandhm">,
  507. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  508. def int_ppc_altivec_vexpandwm : GCCBuiltin<"__builtin_altivec_vexpandwm">,
  509. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  510. def int_ppc_altivec_vexpanddm : GCCBuiltin<"__builtin_altivec_vexpanddm">,
  511. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  512. def int_ppc_altivec_vexpandqm : GCCBuiltin<"__builtin_altivec_vexpandqm">,
  513. Intrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty], [IntrNoMem]>;
  514. // P10 Vector Count with Mask intrinsics.
  515. def int_ppc_altivec_vcntmbb : GCCBuiltin<"__builtin_altivec_vcntmbb">,
  516. Intrinsic<[llvm_i64_ty], [llvm_v16i8_ty, llvm_i32_ty],
  517. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  518. def int_ppc_altivec_vcntmbh : GCCBuiltin<"__builtin_altivec_vcntmbh">,
  519. Intrinsic<[llvm_i64_ty], [llvm_v8i16_ty, llvm_i32_ty],
  520. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  521. def int_ppc_altivec_vcntmbw : GCCBuiltin<"__builtin_altivec_vcntmbw">,
  522. Intrinsic<[llvm_i64_ty], [llvm_v4i32_ty, llvm_i32_ty],
  523. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  524. def int_ppc_altivec_vcntmbd : GCCBuiltin<"__builtin_altivec_vcntmbd">,
  525. Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty],
  526. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  527. // P10 Move to VSR with Mask Intrinsics.
  528. def int_ppc_altivec_mtvsrbm : GCCBuiltin<"__builtin_altivec_mtvsrbm">,
  529. Intrinsic<[llvm_v16i8_ty], [llvm_i64_ty], [IntrNoMem]>;
  530. def int_ppc_altivec_mtvsrhm : GCCBuiltin<"__builtin_altivec_mtvsrhm">,
  531. Intrinsic<[llvm_v8i16_ty], [llvm_i64_ty], [IntrNoMem]>;
  532. def int_ppc_altivec_mtvsrwm : GCCBuiltin<"__builtin_altivec_mtvsrwm">,
  533. Intrinsic<[llvm_v4i32_ty], [llvm_i64_ty], [IntrNoMem]>;
  534. def int_ppc_altivec_mtvsrdm : GCCBuiltin<"__builtin_altivec_mtvsrdm">,
  535. Intrinsic<[llvm_v2i64_ty], [llvm_i64_ty], [IntrNoMem]>;
  536. def int_ppc_altivec_mtvsrqm : GCCBuiltin<"__builtin_altivec_mtvsrqm">,
  537. Intrinsic<[llvm_v1i128_ty], [llvm_i64_ty], [IntrNoMem]>;
  538. // P10 Vector Parallel Bits Deposit/Extract Doubleword Builtins.
  539. def int_ppc_altivec_vpdepd : GCCBuiltin<"__builtin_altivec_vpdepd">,
  540. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  541. [IntrNoMem]>;
  542. def int_ppc_altivec_vpextd : GCCBuiltin<"__builtin_altivec_vpextd">,
  543. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  544. [IntrNoMem]>;
  545. // P10 Vector String Isolate Intrinsics.
  546. def int_ppc_altivec_vstribr : GCCBuiltin<"__builtin_altivec_vstribr">,
  547. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  548. def int_ppc_altivec_vstribl : GCCBuiltin<"__builtin_altivec_vstribl">,
  549. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  550. def int_ppc_altivec_vstrihr : GCCBuiltin<"__builtin_altivec_vstrihr">,
  551. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  552. def int_ppc_altivec_vstrihl : GCCBuiltin<"__builtin_altivec_vstrihl">,
  553. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  554. // Predicate Intrinsics: The first operand specifies interpretation of CR6.
  555. def int_ppc_altivec_vstribr_p : GCCBuiltin<"__builtin_altivec_vstribr_p">,
  556. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty], [IntrNoMem]>;
  557. def int_ppc_altivec_vstribl_p : GCCBuiltin<"__builtin_altivec_vstribl_p">,
  558. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty], [IntrNoMem]>;
  559. def int_ppc_altivec_vstrihr_p : GCCBuiltin<"__builtin_altivec_vstrihr_p">,
  560. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v8i16_ty], [IntrNoMem]>;
  561. def int_ppc_altivec_vstrihl_p : GCCBuiltin<"__builtin_altivec_vstrihl_p">,
  562. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v8i16_ty], [IntrNoMem]>;
  563. // P10 Vector Centrifuge Builtin.
  564. def int_ppc_altivec_vcfuged : GCCBuiltin<"__builtin_altivec_vcfuged">,
  565. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  566. [IntrNoMem]>;
  567. // P10 Vector Gather Every Nth Bit Builtin.
  568. def int_ppc_altivec_vgnb : GCCBuiltin<"__builtin_altivec_vgnb">,
  569. Intrinsic<[llvm_i64_ty], [llvm_v1i128_ty, llvm_i32_ty],
  570. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  571. // P10 Vector Clear Bytes
  572. def int_ppc_altivec_vclrlb : GCCBuiltin<"__builtin_altivec_vclrlb">,
  573. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty],
  574. [IntrNoMem]>;
  575. def int_ppc_altivec_vclrrb : GCCBuiltin<"__builtin_altivec_vclrrb">,
  576. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty],
  577. [IntrNoMem]>;
  578. // P10 Vector Shift Double Bit Immediate.
  579. def int_ppc_altivec_vsldbi : GCCBuiltin<"__builtin_altivec_vsldbi">,
  580. Intrinsic<[llvm_v16i8_ty],
  581. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  582. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  583. def int_ppc_altivec_vsrdbi : GCCBuiltin<"__builtin_altivec_vsrdbi">,
  584. Intrinsic<[llvm_v16i8_ty],
  585. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  586. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  587. // P10 Vector Insert.
  588. def int_ppc_altivec_vinsblx : GCCBuiltin<"__builtin_altivec_vinsblx">,
  589. Intrinsic<[llvm_v16i8_ty],
  590. [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty],
  591. [IntrNoMem]>;
  592. def int_ppc_altivec_vinsbrx : GCCBuiltin<"__builtin_altivec_vinsbrx">,
  593. Intrinsic<[llvm_v16i8_ty],
  594. [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty],
  595. [IntrNoMem]>;
  596. def int_ppc_altivec_vinshlx : GCCBuiltin<"__builtin_altivec_vinshlx">,
  597. Intrinsic<[llvm_v8i16_ty],
  598. [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty],
  599. [IntrNoMem]>;
  600. def int_ppc_altivec_vinshrx : GCCBuiltin<"__builtin_altivec_vinshrx">,
  601. Intrinsic<[llvm_v8i16_ty],
  602. [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty],
  603. [IntrNoMem]>;
  604. def int_ppc_altivec_vinswlx : GCCBuiltin<"__builtin_altivec_vinswlx">,
  605. Intrinsic<[llvm_v4i32_ty],
  606. [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty],
  607. [IntrNoMem]>;
  608. def int_ppc_altivec_vinswrx : GCCBuiltin<"__builtin_altivec_vinswrx">,
  609. Intrinsic<[llvm_v4i32_ty],
  610. [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty],
  611. [IntrNoMem]>;
  612. def int_ppc_altivec_vinsdlx : GCCBuiltin<"__builtin_altivec_vinsdlx">,
  613. Intrinsic<[llvm_v2i64_ty],
  614. [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty],
  615. [IntrNoMem]>;
  616. def int_ppc_altivec_vinsdrx : GCCBuiltin<"__builtin_altivec_vinsdrx">,
  617. Intrinsic<[llvm_v2i64_ty],
  618. [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty],
  619. [IntrNoMem]>;
  620. def int_ppc_altivec_vinsbvlx : GCCBuiltin<"__builtin_altivec_vinsbvlx">,
  621. Intrinsic<[llvm_v16i8_ty],
  622. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty],
  623. [IntrNoMem]>;
  624. def int_ppc_altivec_vinsbvrx : GCCBuiltin<"__builtin_altivec_vinsbvrx">,
  625. Intrinsic<[llvm_v16i8_ty],
  626. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty],
  627. [IntrNoMem]>;
  628. def int_ppc_altivec_vinshvlx : GCCBuiltin<"__builtin_altivec_vinshvlx">,
  629. Intrinsic<[llvm_v8i16_ty],
  630. [llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty],
  631. [IntrNoMem]>;
  632. def int_ppc_altivec_vinshvrx : GCCBuiltin<"__builtin_altivec_vinshvrx">,
  633. Intrinsic<[llvm_v8i16_ty],
  634. [llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty],
  635. [IntrNoMem]>;
  636. def int_ppc_altivec_vinswvlx : GCCBuiltin<"__builtin_altivec_vinswvlx">,
  637. Intrinsic<[llvm_v4i32_ty],
  638. [llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty],
  639. [IntrNoMem]>;
  640. def int_ppc_altivec_vinswvrx : GCCBuiltin<"__builtin_altivec_vinswvrx">,
  641. Intrinsic<[llvm_v4i32_ty],
  642. [llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty],
  643. [IntrNoMem]>;
  644. // P10 Vector Insert with immediate.
  645. def int_ppc_altivec_vinsw :
  646. Intrinsic<[llvm_v4i32_ty],
  647. [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty],
  648. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  649. def int_ppc_altivec_vinsd :
  650. Intrinsic<[llvm_v2i64_ty],
  651. [llvm_v2i64_ty, llvm_i64_ty, llvm_i32_ty],
  652. [IntrNoMem, ImmArg<ArgIndex<2>>]>;
  653. // P10 Vector Extract.
  654. def int_ppc_altivec_vextdubvlx : GCCBuiltin<"__builtin_altivec_vextdubvlx">,
  655. Intrinsic<[llvm_v2i64_ty],
  656. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  657. [IntrNoMem]>;
  658. def int_ppc_altivec_vextdubvrx : GCCBuiltin<"__builtin_altivec_vextdubvrx">,
  659. Intrinsic<[llvm_v2i64_ty],
  660. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty],
  661. [IntrNoMem]>;
  662. def int_ppc_altivec_vextduhvlx : GCCBuiltin<"__builtin_altivec_vextduhvlx">,
  663. Intrinsic<[llvm_v2i64_ty],
  664. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
  665. [IntrNoMem]>;
  666. def int_ppc_altivec_vextduhvrx : GCCBuiltin<"__builtin_altivec_vextduhvrx">,
  667. Intrinsic<[llvm_v2i64_ty],
  668. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
  669. [IntrNoMem]>;
  670. def int_ppc_altivec_vextduwvlx : GCCBuiltin<"__builtin_altivec_vextduwvlx">,
  671. Intrinsic<[llvm_v2i64_ty],
  672. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
  673. [IntrNoMem]>;
  674. def int_ppc_altivec_vextduwvrx : GCCBuiltin<"__builtin_altivec_vextduwvrx">,
  675. Intrinsic<[llvm_v2i64_ty],
  676. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
  677. [IntrNoMem]>;
  678. def int_ppc_altivec_vextddvlx : GCCBuiltin<"__builtin_altivec_vextddvlx">,
  679. Intrinsic<[llvm_v2i64_ty],
  680. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
  681. [IntrNoMem]>;
  682. def int_ppc_altivec_vextddvrx : GCCBuiltin<"__builtin_altivec_vextddvrx">,
  683. Intrinsic<[llvm_v2i64_ty],
  684. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
  685. [IntrNoMem]>;
  686. }
  687. // Vector average.
  688. def int_ppc_altivec_vavgsb : PowerPC_Vec_BBB_Intrinsic<"vavgsb">;
  689. def int_ppc_altivec_vavgsh : PowerPC_Vec_HHH_Intrinsic<"vavgsh">;
  690. def int_ppc_altivec_vavgsw : PowerPC_Vec_WWW_Intrinsic<"vavgsw">;
  691. def int_ppc_altivec_vavgub : PowerPC_Vec_BBB_Intrinsic<"vavgub">;
  692. def int_ppc_altivec_vavguh : PowerPC_Vec_HHH_Intrinsic<"vavguh">;
  693. def int_ppc_altivec_vavguw : PowerPC_Vec_WWW_Intrinsic<"vavguw">;
  694. // Vector maximum.
  695. def int_ppc_altivec_vmaxfp : PowerPC_Vec_FFF_Intrinsic<"vmaxfp">;
  696. def int_ppc_altivec_vmaxsb : PowerPC_Vec_BBB_Intrinsic<"vmaxsb">;
  697. def int_ppc_altivec_vmaxsh : PowerPC_Vec_HHH_Intrinsic<"vmaxsh">;
  698. def int_ppc_altivec_vmaxsw : PowerPC_Vec_WWW_Intrinsic<"vmaxsw">;
  699. def int_ppc_altivec_vmaxsd : PowerPC_Vec_DDD_Intrinsic<"vmaxsd">;
  700. def int_ppc_altivec_vmaxub : PowerPC_Vec_BBB_Intrinsic<"vmaxub">;
  701. def int_ppc_altivec_vmaxuh : PowerPC_Vec_HHH_Intrinsic<"vmaxuh">;
  702. def int_ppc_altivec_vmaxuw : PowerPC_Vec_WWW_Intrinsic<"vmaxuw">;
  703. def int_ppc_altivec_vmaxud : PowerPC_Vec_DDD_Intrinsic<"vmaxud">;
  704. // Vector minimum.
  705. def int_ppc_altivec_vminfp : PowerPC_Vec_FFF_Intrinsic<"vminfp">;
  706. def int_ppc_altivec_vminsb : PowerPC_Vec_BBB_Intrinsic<"vminsb">;
  707. def int_ppc_altivec_vminsh : PowerPC_Vec_HHH_Intrinsic<"vminsh">;
  708. def int_ppc_altivec_vminsw : PowerPC_Vec_WWW_Intrinsic<"vminsw">;
  709. def int_ppc_altivec_vminsd : PowerPC_Vec_DDD_Intrinsic<"vminsd">;
  710. def int_ppc_altivec_vminub : PowerPC_Vec_BBB_Intrinsic<"vminub">;
  711. def int_ppc_altivec_vminuh : PowerPC_Vec_HHH_Intrinsic<"vminuh">;
  712. def int_ppc_altivec_vminuw : PowerPC_Vec_WWW_Intrinsic<"vminuw">;
  713. def int_ppc_altivec_vminud : PowerPC_Vec_DDD_Intrinsic<"vminud">;
  714. // Saturating adds.
  715. def int_ppc_altivec_vaddubs : PowerPC_Vec_BBB_Intrinsic<"vaddubs">;
  716. def int_ppc_altivec_vaddsbs : PowerPC_Vec_BBB_Intrinsic<"vaddsbs">;
  717. def int_ppc_altivec_vadduhs : PowerPC_Vec_HHH_Intrinsic<"vadduhs">;
  718. def int_ppc_altivec_vaddshs : PowerPC_Vec_HHH_Intrinsic<"vaddshs">;
  719. def int_ppc_altivec_vadduws : PowerPC_Vec_WWW_Intrinsic<"vadduws">;
  720. def int_ppc_altivec_vaddsws : PowerPC_Vec_WWW_Intrinsic<"vaddsws">;
  721. def int_ppc_altivec_vaddcuw : PowerPC_Vec_WWW_Intrinsic<"vaddcuw">;
  722. def int_ppc_altivec_vaddcuq : PowerPC_Vec_QQQ_Intrinsic<"vaddcuq">;
  723. // Saturating subs.
  724. def int_ppc_altivec_vsububs : PowerPC_Vec_BBB_Intrinsic<"vsububs">;
  725. def int_ppc_altivec_vsubsbs : PowerPC_Vec_BBB_Intrinsic<"vsubsbs">;
  726. def int_ppc_altivec_vsubuhs : PowerPC_Vec_HHH_Intrinsic<"vsubuhs">;
  727. def int_ppc_altivec_vsubshs : PowerPC_Vec_HHH_Intrinsic<"vsubshs">;
  728. def int_ppc_altivec_vsubuws : PowerPC_Vec_WWW_Intrinsic<"vsubuws">;
  729. def int_ppc_altivec_vsubsws : PowerPC_Vec_WWW_Intrinsic<"vsubsws">;
  730. def int_ppc_altivec_vsubcuw : PowerPC_Vec_WWW_Intrinsic<"vsubcuw">;
  731. def int_ppc_altivec_vsubcuq : PowerPC_Vec_QQQ_Intrinsic<"vsubcuq">;
  732. let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.".
  733. // Saturating multiply-adds.
  734. def int_ppc_altivec_vmhaddshs : GCCBuiltin<"__builtin_altivec_vmhaddshs">,
  735. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  736. llvm_v8i16_ty, llvm_v8i16_ty],
  737. [IntrNoMem, IntrHasSideEffects]>;
  738. def int_ppc_altivec_vmhraddshs : GCCBuiltin<"__builtin_altivec_vmhraddshs">,
  739. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  740. llvm_v8i16_ty, llvm_v8i16_ty],
  741. [IntrNoMem, IntrHasSideEffects]>;
  742. def int_ppc_altivec_vmaddfp : GCCBuiltin<"__builtin_altivec_vmaddfp">,
  743. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  744. llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  745. def int_ppc_altivec_vnmsubfp : GCCBuiltin<"__builtin_altivec_vnmsubfp">,
  746. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  747. llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  748. // Vector Multiply Sum Instructions.
  749. def int_ppc_altivec_vmsummbm : GCCBuiltin<"__builtin_altivec_vmsummbm">,
  750. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  751. llvm_v4i32_ty], [IntrNoMem]>;
  752. def int_ppc_altivec_vmsumshm : GCCBuiltin<"__builtin_altivec_vmsumshm">,
  753. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  754. llvm_v4i32_ty], [IntrNoMem]>;
  755. def int_ppc_altivec_vmsumshs : GCCBuiltin<"__builtin_altivec_vmsumshs">,
  756. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  757. llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>;
  758. def int_ppc_altivec_vmsumubm : GCCBuiltin<"__builtin_altivec_vmsumubm">,
  759. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  760. llvm_v4i32_ty], [IntrNoMem]>;
  761. def int_ppc_altivec_vmsumuhm : GCCBuiltin<"__builtin_altivec_vmsumuhm">,
  762. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  763. llvm_v4i32_ty], [IntrNoMem]>;
  764. def int_ppc_altivec_vmsumudm : GCCBuiltin<"__builtin_altivec_vmsumudm">,
  765. Intrinsic<[llvm_v1i128_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  766. llvm_v1i128_ty], [IntrNoMem]>;
  767. def int_ppc_altivec_vmsumuhs : GCCBuiltin<"__builtin_altivec_vmsumuhs">,
  768. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  769. llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>;
  770. def int_ppc_altivec_vmsumcud : GCCBuiltin<"__builtin_altivec_vmsumcud">,
  771. Intrinsic<[llvm_v1i128_ty],
  772. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v1i128_ty], [IntrNoMem]>;
  773. // Vector Multiply Instructions.
  774. def int_ppc_altivec_vmulesb : GCCBuiltin<"__builtin_altivec_vmulesb">,
  775. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  776. [IntrNoMem]>;
  777. def int_ppc_altivec_vmulesh : GCCBuiltin<"__builtin_altivec_vmulesh">,
  778. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  779. [IntrNoMem]>;
  780. def int_ppc_altivec_vmulesw : GCCBuiltin<"__builtin_altivec_vmulesw">,
  781. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  782. [IntrNoMem]>;
  783. def int_ppc_altivec_vmulesd : PowerPC_Vec_QDD_Intrinsic<"vmulesd">;
  784. def int_ppc_altivec_vmuleub : GCCBuiltin<"__builtin_altivec_vmuleub">,
  785. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  786. [IntrNoMem]>;
  787. def int_ppc_altivec_vmuleuh : GCCBuiltin<"__builtin_altivec_vmuleuh">,
  788. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  789. [IntrNoMem]>;
  790. def int_ppc_altivec_vmuleuw : GCCBuiltin<"__builtin_altivec_vmuleuw">,
  791. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  792. [IntrNoMem]>;
  793. def int_ppc_altivec_vmuleud : PowerPC_Vec_QDD_Intrinsic<"vmuleud">;
  794. def int_ppc_altivec_vmulosb : GCCBuiltin<"__builtin_altivec_vmulosb">,
  795. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  796. [IntrNoMem]>;
  797. def int_ppc_altivec_vmulosh : GCCBuiltin<"__builtin_altivec_vmulosh">,
  798. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  799. [IntrNoMem]>;
  800. def int_ppc_altivec_vmulosw : GCCBuiltin<"__builtin_altivec_vmulosw">,
  801. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  802. [IntrNoMem]>;
  803. def int_ppc_altivec_vmulosd : PowerPC_Vec_QDD_Intrinsic<"vmulosd">;
  804. def int_ppc_altivec_vmuloub : GCCBuiltin<"__builtin_altivec_vmuloub">,
  805. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  806. [IntrNoMem]>;
  807. def int_ppc_altivec_vmulouh : GCCBuiltin<"__builtin_altivec_vmulouh">,
  808. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  809. [IntrNoMem]>;
  810. def int_ppc_altivec_vmulouw : GCCBuiltin<"__builtin_altivec_vmulouw">,
  811. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  812. [IntrNoMem]>;
  813. def int_ppc_altivec_vmuloud : PowerPC_Vec_QDD_Intrinsic<"vmuloud">;
  814. // Vector Sum Instructions.
  815. def int_ppc_altivec_vsumsws : GCCBuiltin<"__builtin_altivec_vsumsws">,
  816. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  817. [IntrNoMem, IntrHasSideEffects]>;
  818. def int_ppc_altivec_vsum2sws : GCCBuiltin<"__builtin_altivec_vsum2sws">,
  819. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  820. [IntrNoMem, IntrHasSideEffects]>;
  821. def int_ppc_altivec_vsum4sbs : GCCBuiltin<"__builtin_altivec_vsum4sbs">,
  822. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty],
  823. [IntrNoMem, IntrHasSideEffects]>;
  824. def int_ppc_altivec_vsum4shs : GCCBuiltin<"__builtin_altivec_vsum4shs">,
  825. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v4i32_ty],
  826. [IntrNoMem, IntrHasSideEffects]>;
  827. def int_ppc_altivec_vsum4ubs : GCCBuiltin<"__builtin_altivec_vsum4ubs">,
  828. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty],
  829. [IntrNoMem, IntrHasSideEffects]>;
  830. // Vector Sign Extension Instructions
  831. def int_ppc_altivec_vextsb2w : GCCBuiltin<"__builtin_altivec_vextsb2w">,
  832. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  833. def int_ppc_altivec_vextsb2d : GCCBuiltin<"__builtin_altivec_vextsb2d">,
  834. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  835. def int_ppc_altivec_vextsh2w : GCCBuiltin<"__builtin_altivec_vextsh2w">,
  836. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  837. def int_ppc_altivec_vextsh2d : GCCBuiltin<"__builtin_altivec_vextsh2d">,
  838. Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  839. def int_ppc_altivec_vextsw2d : GCCBuiltin<"__builtin_altivec_vextsw2d">,
  840. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  841. def int_ppc_altivec_vextsd2q : GCCBuiltin<"__builtin_altivec_vextsd2q">,
  842. Intrinsic<[llvm_v1i128_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  843. // Other multiplies.
  844. def int_ppc_altivec_vmladduhm : GCCBuiltin<"__builtin_altivec_vmladduhm">,
  845. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  846. llvm_v8i16_ty], [IntrNoMem]>;
  847. // Packs.
  848. def int_ppc_altivec_vpkpx : GCCBuiltin<"__builtin_altivec_vpkpx">,
  849. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  850. [IntrNoMem]>;
  851. def int_ppc_altivec_vpkshss : GCCBuiltin<"__builtin_altivec_vpkshss">,
  852. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  853. [IntrNoMem, IntrHasSideEffects]>;
  854. def int_ppc_altivec_vpkshus : GCCBuiltin<"__builtin_altivec_vpkshus">,
  855. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  856. [IntrNoMem, IntrHasSideEffects]>;
  857. def int_ppc_altivec_vpkswss : GCCBuiltin<"__builtin_altivec_vpkswss">,
  858. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  859. [IntrNoMem, IntrHasSideEffects]>;
  860. def int_ppc_altivec_vpkswus : GCCBuiltin<"__builtin_altivec_vpkswus">,
  861. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  862. [IntrNoMem, IntrHasSideEffects]>;
  863. def int_ppc_altivec_vpksdss : GCCBuiltin<"__builtin_altivec_vpksdss">,
  864. Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  865. [IntrNoMem, IntrHasSideEffects]>;
  866. def int_ppc_altivec_vpksdus : GCCBuiltin<"__builtin_altivec_vpksdus">,
  867. Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  868. [IntrNoMem, IntrHasSideEffects]>;
  869. // vpkuhum is lowered to a shuffle.
  870. def int_ppc_altivec_vpkuhus : GCCBuiltin<"__builtin_altivec_vpkuhus">,
  871. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  872. [IntrNoMem, IntrHasSideEffects]>;
  873. // vpkuwum is lowered to a shuffle.
  874. def int_ppc_altivec_vpkuwus : GCCBuiltin<"__builtin_altivec_vpkuwus">,
  875. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  876. [IntrNoMem, IntrHasSideEffects]>;
  877. // vpkudum is lowered to a shuffle.
  878. def int_ppc_altivec_vpkudus : GCCBuiltin<"__builtin_altivec_vpkudus">,
  879. Intrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  880. [IntrNoMem, IntrHasSideEffects]>;
  881. // Unpacks.
  882. def int_ppc_altivec_vupkhpx : GCCBuiltin<"__builtin_altivec_vupkhpx">,
  883. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  884. def int_ppc_altivec_vupkhsb : GCCBuiltin<"__builtin_altivec_vupkhsb">,
  885. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  886. def int_ppc_altivec_vupkhsh : GCCBuiltin<"__builtin_altivec_vupkhsh">,
  887. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  888. def int_ppc_altivec_vupkhsw : GCCBuiltin<"__builtin_altivec_vupkhsw">,
  889. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  890. def int_ppc_altivec_vupklpx : GCCBuiltin<"__builtin_altivec_vupklpx">,
  891. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  892. def int_ppc_altivec_vupklsb : GCCBuiltin<"__builtin_altivec_vupklsb">,
  893. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  894. def int_ppc_altivec_vupklsh : GCCBuiltin<"__builtin_altivec_vupklsh">,
  895. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  896. def int_ppc_altivec_vupklsw : GCCBuiltin<"__builtin_altivec_vupklsw">,
  897. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  898. // FP <-> integer conversion.
  899. def int_ppc_altivec_vcfsx : GCCBuiltin<"__builtin_altivec_vcfsx">,
  900. Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
  901. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  902. def int_ppc_altivec_vcfux : GCCBuiltin<"__builtin_altivec_vcfux">,
  903. Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty],
  904. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  905. def int_ppc_altivec_vctsxs : GCCBuiltin<"__builtin_altivec_vctsxs">,
  906. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
  907. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  908. def int_ppc_altivec_vctuxs : GCCBuiltin<"__builtin_altivec_vctuxs">,
  909. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
  910. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  911. def int_ppc_altivec_vrfim : GCCBuiltin<"__builtin_altivec_vrfim">,
  912. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  913. def int_ppc_altivec_vrfin : GCCBuiltin<"__builtin_altivec_vrfin">,
  914. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  915. def int_ppc_altivec_vrfip : GCCBuiltin<"__builtin_altivec_vrfip">,
  916. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  917. def int_ppc_altivec_vrfiz : GCCBuiltin<"__builtin_altivec_vrfiz">,
  918. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  919. // Add Extended Quadword
  920. def int_ppc_altivec_vaddeuqm : GCCBuiltin<"__builtin_altivec_vaddeuqm">,
  921. Intrinsic<[llvm_v1i128_ty],
  922. [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
  923. [IntrNoMem]>;
  924. def int_ppc_altivec_vaddecuq : GCCBuiltin<"__builtin_altivec_vaddecuq">,
  925. Intrinsic<[llvm_v1i128_ty],
  926. [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
  927. [IntrNoMem]>;
  928. // Sub Extended Quadword
  929. def int_ppc_altivec_vsubeuqm : GCCBuiltin<"__builtin_altivec_vsubeuqm">,
  930. Intrinsic<[llvm_v1i128_ty],
  931. [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
  932. [IntrNoMem]>;
  933. def int_ppc_altivec_vsubecuq : GCCBuiltin<"__builtin_altivec_vsubecuq">,
  934. Intrinsic<[llvm_v1i128_ty],
  935. [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
  936. [IntrNoMem]>;
  937. // P10 Vector Count Leading / Trailing Zeroes under bit Mask Builtins.
  938. def int_ppc_altivec_vclzdm : GCCBuiltin<"__builtin_altivec_vclzdm">,
  939. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  940. [IntrNoMem]>;
  941. def int_ppc_altivec_vctzdm : GCCBuiltin<"__builtin_altivec_vctzdm">,
  942. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  943. [IntrNoMem]>;
  944. }
  945. def int_ppc_altivec_vsl : PowerPC_Vec_WWW_Intrinsic<"vsl">;
  946. def int_ppc_altivec_vslo : PowerPC_Vec_WWW_Intrinsic<"vslo">;
  947. def int_ppc_altivec_vslb : PowerPC_Vec_BBB_Intrinsic<"vslb">;
  948. def int_ppc_altivec_vslv : PowerPC_Vec_BBB_Intrinsic<"vslv">;
  949. def int_ppc_altivec_vsrv : PowerPC_Vec_BBB_Intrinsic<"vsrv">;
  950. def int_ppc_altivec_vslh : PowerPC_Vec_HHH_Intrinsic<"vslh">;
  951. def int_ppc_altivec_vslw : PowerPC_Vec_WWW_Intrinsic<"vslw">;
  952. // Right Shifts.
  953. def int_ppc_altivec_vsr : PowerPC_Vec_WWW_Intrinsic<"vsr">;
  954. def int_ppc_altivec_vsro : PowerPC_Vec_WWW_Intrinsic<"vsro">;
  955. def int_ppc_altivec_vsrb : PowerPC_Vec_BBB_Intrinsic<"vsrb">;
  956. def int_ppc_altivec_vsrh : PowerPC_Vec_HHH_Intrinsic<"vsrh">;
  957. def int_ppc_altivec_vsrw : PowerPC_Vec_WWW_Intrinsic<"vsrw">;
  958. def int_ppc_altivec_vsrab : PowerPC_Vec_BBB_Intrinsic<"vsrab">;
  959. def int_ppc_altivec_vsrah : PowerPC_Vec_HHH_Intrinsic<"vsrah">;
  960. def int_ppc_altivec_vsraw : PowerPC_Vec_WWW_Intrinsic<"vsraw">;
  961. // Rotates.
  962. def int_ppc_altivec_vrlb : PowerPC_Vec_BBB_Intrinsic<"vrlb">;
  963. def int_ppc_altivec_vrlh : PowerPC_Vec_HHH_Intrinsic<"vrlh">;
  964. def int_ppc_altivec_vrlw : PowerPC_Vec_WWW_Intrinsic<"vrlw">;
  965. def int_ppc_altivec_vrld : PowerPC_Vec_DDD_Intrinsic<"vrld">;
  966. let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.".
  967. // Miscellaneous.
  968. def int_ppc_altivec_lvsl :
  969. Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>;
  970. def int_ppc_altivec_lvsr :
  971. Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>;
  972. def int_ppc_altivec_vperm : GCCBuiltin<"__builtin_altivec_vperm_4si">,
  973. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  974. llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>;
  975. def int_ppc_altivec_vsel : GCCBuiltin<"__builtin_altivec_vsel_4si">,
  976. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  977. llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  978. def int_ppc_altivec_vgbbd : GCCBuiltin<"__builtin_altivec_vgbbd">,
  979. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  980. def int_ppc_altivec_vbpermq : GCCBuiltin<"__builtin_altivec_vbpermq">,
  981. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  982. [IntrNoMem]>;
  983. def int_ppc_altivec_vbpermd : GCCBuiltin<"__builtin_altivec_vbpermd">,
  984. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty],
  985. [IntrNoMem]>;
  986. }
  987. def int_ppc_altivec_vexptefp : PowerPC_Vec_FF_Intrinsic<"vexptefp">;
  988. def int_ppc_altivec_vlogefp : PowerPC_Vec_FF_Intrinsic<"vlogefp">;
  989. def int_ppc_altivec_vrefp : PowerPC_Vec_FF_Intrinsic<"vrefp">;
  990. def int_ppc_altivec_vrsqrtefp : PowerPC_Vec_FF_Intrinsic<"vrsqrtefp">;
  991. // Power8 Intrinsics
  992. // Crypto
  993. let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.".
  994. def int_ppc_altivec_crypto_vsbox :
  995. GCCBuiltin<"__builtin_altivec_crypto_vsbox">,
  996. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  997. def int_ppc_altivec_crypto_vpermxor :
  998. GCCBuiltin<"__builtin_altivec_crypto_vpermxor">,
  999. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  1000. llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
  1001. def int_ppc_altivec_crypto_vpermxor_be :
  1002. GCCBuiltin<"__builtin_altivec_crypto_vpermxor_be">,
  1003. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  1004. llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
  1005. def int_ppc_altivec_crypto_vshasigmad :
  1006. GCCBuiltin<"__builtin_altivec_crypto_vshasigmad">,
  1007. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
  1008. llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
  1009. def int_ppc_altivec_crypto_vshasigmaw :
  1010. GCCBuiltin<"__builtin_altivec_crypto_vshasigmaw">,
  1011. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  1012. llvm_i32_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
  1013. }
  1014. def int_ppc_altivec_crypto_vcipher :
  1015. PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">;
  1016. def int_ppc_altivec_crypto_vcipherlast :
  1017. PowerPC_Vec_DDD_Intrinsic<"crypto_vcipherlast">;
  1018. def int_ppc_altivec_crypto_vncipher :
  1019. PowerPC_Vec_DDD_Intrinsic<"crypto_vncipher">;
  1020. def int_ppc_altivec_crypto_vncipherlast :
  1021. PowerPC_Vec_DDD_Intrinsic<"crypto_vncipherlast">;
  1022. def int_ppc_altivec_crypto_vpmsumb :
  1023. PowerPC_Vec_BBB_Intrinsic<"crypto_vpmsumb">;
  1024. def int_ppc_altivec_crypto_vpmsumh :
  1025. PowerPC_Vec_HHH_Intrinsic<"crypto_vpmsumh">;
  1026. def int_ppc_altivec_crypto_vpmsumw :
  1027. PowerPC_Vec_WWW_Intrinsic<"crypto_vpmsumw">;
  1028. def int_ppc_altivec_crypto_vpmsumd :
  1029. PowerPC_Vec_DDD_Intrinsic<"crypto_vpmsumd">;
  1030. // Absolute Difference intrinsics
  1031. def int_ppc_altivec_vabsdub : PowerPC_Vec_BBB_Intrinsic<"vabsdub">;
  1032. def int_ppc_altivec_vabsduh : PowerPC_Vec_HHH_Intrinsic<"vabsduh">;
  1033. def int_ppc_altivec_vabsduw : PowerPC_Vec_WWW_Intrinsic<"vabsduw">;
  1034. // Vector rotates
  1035. def int_ppc_altivec_vrlwnm :
  1036. PowerPC_Vec_Intrinsic<"vrlwnm", [llvm_v4i32_ty],
  1037. [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  1038. def int_ppc_altivec_vrlwmi :
  1039. PowerPC_Vec_Intrinsic<"vrlwmi", [llvm_v4i32_ty],
  1040. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  1041. [IntrNoMem]>;
  1042. def int_ppc_altivec_vrldnm :
  1043. PowerPC_Vec_Intrinsic<"vrldnm", [llvm_v2i64_ty],
  1044. [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
  1045. def int_ppc_altivec_vrldmi :
  1046. PowerPC_Vec_Intrinsic<"vrldmi", [llvm_v2i64_ty],
  1047. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
  1048. [IntrNoMem]>;
  1049. def int_ppc_altivec_vrlqnm :
  1050. PowerPC_Vec_Intrinsic<"vrlqnm", [llvm_v1i128_ty],
  1051. [llvm_v1i128_ty, llvm_v1i128_ty],
  1052. [IntrNoMem]>;
  1053. def int_ppc_altivec_vrlqmi :
  1054. PowerPC_Vec_Intrinsic<"vrlqmi", [llvm_v1i128_ty],
  1055. [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
  1056. [IntrNoMem]>;
  1057. // Vector Divide Extended Intrinsics.
  1058. def int_ppc_altivec_vdivesw : PowerPC_Vec_WWW_Intrinsic<"vdivesw">;
  1059. def int_ppc_altivec_vdiveuw : PowerPC_Vec_WWW_Intrinsic<"vdiveuw">;
  1060. def int_ppc_altivec_vdivesd : PowerPC_Vec_DDD_Intrinsic<"vdivesd">;
  1061. def int_ppc_altivec_vdiveud : PowerPC_Vec_DDD_Intrinsic<"vdiveud">;
  1062. def int_ppc_altivec_vdivesq : PowerPC_Vec_QQQ_Intrinsic<"vdivesq">;
  1063. def int_ppc_altivec_vdiveuq : PowerPC_Vec_QQQ_Intrinsic<"vdiveuq">;
  1064. // Vector Multiply High Intrinsics.
  1065. def int_ppc_altivec_vmulhsw : PowerPC_Vec_WWW_Intrinsic<"vmulhsw">;
  1066. def int_ppc_altivec_vmulhuw : PowerPC_Vec_WWW_Intrinsic<"vmulhuw">;
  1067. def int_ppc_altivec_vmulhsd : PowerPC_Vec_DDD_Intrinsic<"vmulhsd">;
  1068. def int_ppc_altivec_vmulhud : PowerPC_Vec_DDD_Intrinsic<"vmulhud">;
  1069. //===----------------------------------------------------------------------===//
  1070. // PowerPC VSX Intrinsic Definitions.
  1071. let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
  1072. // Vector load.
  1073. def int_ppc_vsx_lxvw4x :
  1074. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1075. def int_ppc_vsx_lxvd2x :
  1076. Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1077. def int_ppc_vsx_lxvw4x_be :
  1078. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1079. def int_ppc_vsx_lxvd2x_be :
  1080. Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1081. def int_ppc_vsx_lxvl :
  1082. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem,
  1083. IntrArgMemOnly]>;
  1084. def int_ppc_vsx_lxvll :
  1085. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], [IntrReadMem,
  1086. IntrArgMemOnly]>;
  1087. def int_ppc_vsx_lxvp :
  1088. Intrinsic<[llvm_v256i1_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1089. // Vector store.
  1090. def int_ppc_vsx_stxvw4x : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
  1091. [IntrWriteMem, IntrArgMemOnly]>;
  1092. def int_ppc_vsx_stxvd2x : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty],
  1093. [IntrWriteMem, IntrArgMemOnly]>;
  1094. def int_ppc_vsx_stxvw4x_be : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],
  1095. [IntrWriteMem, IntrArgMemOnly]>;
  1096. def int_ppc_vsx_stxvd2x_be : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty],
  1097. [IntrWriteMem, IntrArgMemOnly]>;
  1098. def int_ppc_vsx_stxvl :
  1099. Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty],
  1100. [IntrWriteMem, IntrArgMemOnly]>;
  1101. def int_ppc_vsx_stxvll :
  1102. Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty],
  1103. [IntrWriteMem, IntrArgMemOnly]>;
  1104. def int_ppc_vsx_stxvp :
  1105. Intrinsic<[], [llvm_v256i1_ty, llvm_ptr_ty], [IntrWriteMem,
  1106. IntrArgMemOnly]>;
  1107. // Vector and scalar maximum.
  1108. def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmaxdp">;
  1109. def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvmaxsp">;
  1110. def int_ppc_vsx_xsmaxdp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmaxdp">;
  1111. // Vector and scalar minimum.
  1112. def int_ppc_vsx_xvmindp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmindp">;
  1113. def int_ppc_vsx_xvminsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvminsp">;
  1114. def int_ppc_vsx_xsmindp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmindp">;
  1115. // Vector divide.
  1116. def int_ppc_vsx_xvdivdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvdivdp">;
  1117. def int_ppc_vsx_xvdivsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvdivsp">;
  1118. // Vector round-to-infinity (ceil)
  1119. def int_ppc_vsx_xvrspip :
  1120. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  1121. def int_ppc_vsx_xvrdpip :
  1122. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  1123. // Vector reciprocal estimate
  1124. def int_ppc_vsx_xvresp : GCCBuiltin<"__builtin_vsx_xvresp">,
  1125. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  1126. def int_ppc_vsx_xvredp : GCCBuiltin<"__builtin_vsx_xvredp">,
  1127. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  1128. // Vector rsqrte
  1129. def int_ppc_vsx_xvrsqrtesp : GCCBuiltin<"__builtin_vsx_xvrsqrtesp">,
  1130. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  1131. def int_ppc_vsx_xvrsqrtedp : GCCBuiltin<"__builtin_vsx_xvrsqrtedp">,
  1132. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  1133. // Vector compare
  1134. def int_ppc_vsx_xvcmpeqdp :
  1135. PowerPC_VSX_Intrinsic<"xvcmpeqdp", [llvm_v2i64_ty],
  1136. [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
  1137. def int_ppc_vsx_xvcmpeqdp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqdp_p">,
  1138. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
  1139. [IntrNoMem]>;
  1140. def int_ppc_vsx_xvcmpeqsp :
  1141. PowerPC_VSX_Intrinsic<"xvcmpeqsp", [llvm_v4i32_ty],
  1142. [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  1143. def int_ppc_vsx_xvcmpeqsp_p : GCCBuiltin<"__builtin_vsx_xvcmpeqsp_p">,
  1144. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  1145. [IntrNoMem]>;
  1146. def int_ppc_vsx_xvcmpgedp :
  1147. PowerPC_VSX_Intrinsic<"xvcmpgedp", [llvm_v2i64_ty],
  1148. [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
  1149. def int_ppc_vsx_xvcmpgedp_p : GCCBuiltin<"__builtin_vsx_xvcmpgedp_p">,
  1150. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
  1151. [IntrNoMem]>;
  1152. def int_ppc_vsx_xvcmpgesp :
  1153. PowerPC_VSX_Intrinsic<"xvcmpgesp", [llvm_v4i32_ty],
  1154. [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  1155. def int_ppc_vsx_xvcmpgesp_p : GCCBuiltin<"__builtin_vsx_xvcmpgesp_p">,
  1156. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  1157. [IntrNoMem]>;
  1158. def int_ppc_vsx_xvcmpgtdp :
  1159. PowerPC_VSX_Intrinsic<"xvcmpgtdp", [llvm_v2i64_ty],
  1160. [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
  1161. def int_ppc_vsx_xvcmpgtdp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtdp_p">,
  1162. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty],
  1163. [IntrNoMem]>;
  1164. def int_ppc_vsx_xvcmpgtsp :
  1165. PowerPC_VSX_Intrinsic<"xvcmpgtsp", [llvm_v4i32_ty],
  1166. [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  1167. def int_ppc_vsx_xvcmpgtsp_p : GCCBuiltin<"__builtin_vsx_xvcmpgtsp_p">,
  1168. Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty],
  1169. [IntrNoMem]>;
  1170. def int_ppc_vsx_xxleqv :
  1171. PowerPC_VSX_Intrinsic<"xxleqv", [llvm_v4i32_ty],
  1172. [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  1173. def int_ppc_vsx_xviexpdp :
  1174. PowerPC_VSX_Intrinsic<"xviexpdp",[llvm_v2f64_ty],
  1175. [llvm_v2i64_ty, llvm_v2i64_ty],[IntrNoMem]>;
  1176. def int_ppc_vsx_xviexpsp :
  1177. PowerPC_VSX_Intrinsic<"xviexpsp",[llvm_v4f32_ty],
  1178. [llvm_v4i32_ty, llvm_v4i32_ty],[IntrNoMem]>;
  1179. def int_ppc_vsx_xvcvdpsxws :
  1180. PowerPC_VSX_Intrinsic<"xvcvdpsxws", [llvm_v4i32_ty],
  1181. [llvm_v2f64_ty], [IntrNoMem]>;
  1182. def int_ppc_vsx_xvcvdpuxws :
  1183. PowerPC_VSX_Intrinsic<"xvcvdpuxws", [llvm_v4i32_ty],
  1184. [llvm_v2f64_ty], [IntrNoMem]>;
  1185. def int_ppc_vsx_xvcvspsxds :
  1186. PowerPC_VSX_Intrinsic<"xvcvspsxds", [llvm_v2i64_ty],
  1187. [llvm_v4f32_ty], [IntrNoMem]>;
  1188. def int_ppc_vsx_xvcvspuxds :
  1189. PowerPC_VSX_Intrinsic<"xvcvspuxds", [llvm_v2i64_ty],
  1190. [llvm_v4f32_ty], [IntrNoMem]>;
  1191. def int_ppc_vsx_xvcvsxwdp :
  1192. PowerPC_VSX_Intrinsic<"xvcvsxwdp", [llvm_v2f64_ty],
  1193. [llvm_v4i32_ty], [IntrNoMem]>;
  1194. def int_ppc_vsx_xvcvuxwdp :
  1195. PowerPC_VSX_Intrinsic<"xvcvuxwdp", [llvm_v2f64_ty],
  1196. [llvm_v4i32_ty], [IntrNoMem]>;
  1197. def int_ppc_vsx_xvcvspdp :
  1198. PowerPC_VSX_Intrinsic<"xvcvspdp", [llvm_v2f64_ty],
  1199. [llvm_v4f32_ty], [IntrNoMem]>;
  1200. def int_ppc_vsx_xvcvsxdsp :
  1201. PowerPC_VSX_Intrinsic<"xvcvsxdsp", [llvm_v4f32_ty],
  1202. [llvm_v2i64_ty], [IntrNoMem]>;
  1203. def int_ppc_vsx_xvcvuxdsp :
  1204. PowerPC_VSX_Intrinsic<"xvcvuxdsp", [llvm_v4f32_ty],
  1205. [llvm_v2i64_ty], [IntrNoMem]>;
  1206. def int_ppc_vsx_xvcvdpsp :
  1207. PowerPC_VSX_Intrinsic<"xvcvdpsp", [llvm_v4f32_ty],
  1208. [llvm_v2f64_ty], [IntrNoMem]>;
  1209. def int_ppc_vsx_xvcvsphp :
  1210. PowerPC_VSX_Intrinsic<"xvcvsphp", [llvm_v4f32_ty],
  1211. [llvm_v4f32_ty], [IntrNoMem]>;
  1212. def int_ppc_vsx_xvxexpdp :
  1213. PowerPC_VSX_Intrinsic<"xvxexpdp", [llvm_v2i64_ty],
  1214. [llvm_v2f64_ty], [IntrNoMem]>;
  1215. def int_ppc_vsx_xvxexpsp :
  1216. PowerPC_VSX_Intrinsic<"xvxexpsp", [llvm_v4i32_ty],
  1217. [llvm_v4f32_ty], [IntrNoMem]>;
  1218. def int_ppc_vsx_xvxsigdp :
  1219. PowerPC_VSX_Intrinsic<"xvxsigdp", [llvm_v2i64_ty],
  1220. [llvm_v2f64_ty], [IntrNoMem]>;
  1221. def int_ppc_vsx_xvxsigsp :
  1222. PowerPC_VSX_Intrinsic<"xvxsigsp", [llvm_v4i32_ty],
  1223. [llvm_v4f32_ty], [IntrNoMem]>;
  1224. def int_ppc_vsx_xvtstdcdp :
  1225. PowerPC_VSX_Intrinsic<"xvtstdcdp", [llvm_v2i64_ty],
  1226. [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  1227. def int_ppc_vsx_xvtstdcsp :
  1228. PowerPC_VSX_Intrinsic<"xvtstdcsp", [llvm_v4i32_ty],
  1229. [llvm_v4f32_ty,llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  1230. def int_ppc_vsx_xvcvhpsp :
  1231. PowerPC_VSX_Intrinsic<"xvcvhpsp", [llvm_v4f32_ty],
  1232. [llvm_v8i16_ty],[IntrNoMem]>;
  1233. def int_ppc_vsx_xvcvspbf16 :
  1234. PowerPC_VSX_Intrinsic<"xvcvspbf16", [llvm_v16i8_ty],
  1235. [llvm_v16i8_ty], [IntrNoMem]>;
  1236. def int_ppc_vsx_xvcvbf16spn :
  1237. PowerPC_VSX_Intrinsic<"xvcvbf16spn", [llvm_v16i8_ty],
  1238. [llvm_v16i8_ty], [IntrNoMem]>;
  1239. def int_ppc_vsx_xxextractuw :
  1240. PowerPC_VSX_Intrinsic<"xxextractuw",[llvm_v2i64_ty],
  1241. [llvm_v2i64_ty,llvm_i32_ty], [IntrNoMem]>;
  1242. def int_ppc_vsx_xxinsertw :
  1243. PowerPC_VSX_Intrinsic<"xxinsertw",[llvm_v4i32_ty],
  1244. [llvm_v4i32_ty,llvm_v2i64_ty,llvm_i32_ty],
  1245. [IntrNoMem]>;
  1246. def int_ppc_vsx_xvtlsbb :
  1247. PowerPC_VSX_Intrinsic<"xvtlsbb", [llvm_i32_ty],
  1248. [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1249. def int_ppc_vsx_xvtdivdp :
  1250. PowerPC_VSX_Intrinsic<"xvtdivdp", [llvm_i32_ty],
  1251. [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>;
  1252. def int_ppc_vsx_xvtdivsp :
  1253. PowerPC_VSX_Intrinsic<"xvtdivsp", [llvm_i32_ty],
  1254. [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>;
  1255. def int_ppc_vsx_xvtsqrtdp :
  1256. PowerPC_VSX_Intrinsic<"xvtsqrtdp", [llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  1257. def int_ppc_vsx_xvtsqrtsp :
  1258. PowerPC_VSX_Intrinsic<"xvtsqrtsp", [llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  1259. def int_ppc_vsx_xxeval :
  1260. PowerPC_VSX_Intrinsic<"xxeval", [llvm_v2i64_ty],
  1261. [llvm_v2i64_ty, llvm_v2i64_ty,
  1262. llvm_v2i64_ty, llvm_i32_ty],
  1263. [IntrNoMem, ImmArg<ArgIndex<3>>]>;
  1264. def int_ppc_vsx_xxgenpcvbm :
  1265. PowerPC_VSX_Intrinsic<"xxgenpcvbm", [llvm_v16i8_ty],
  1266. [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1267. def int_ppc_vsx_xxgenpcvhm :
  1268. PowerPC_VSX_Intrinsic<"xxgenpcvhm", [llvm_v8i16_ty],
  1269. [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
  1270. def int_ppc_vsx_xxgenpcvwm :
  1271. PowerPC_VSX_Intrinsic<"xxgenpcvwm", [llvm_v4i32_ty],
  1272. [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
  1273. def int_ppc_vsx_xxgenpcvdm :
  1274. PowerPC_VSX_Intrinsic<"xxgenpcvdm", [llvm_v2i64_ty],
  1275. [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
  1276. // P10 VSX Vector permute extended.
  1277. def int_ppc_vsx_xxpermx :
  1278. GCCBuiltin<"__builtin_vsx_xxpermx">,
  1279. Intrinsic<[llvm_v16i8_ty],
  1280. [llvm_v16i8_ty,llvm_v16i8_ty,llvm_v16i8_ty,llvm_i32_ty],
  1281. [IntrNoMem, ImmArg<ArgIndex<3>>]>;
  1282. // P10 VSX Vector Blend Variable.
  1283. def int_ppc_vsx_xxblendvb: GCCBuiltin<"__builtin_vsx_xxblendvb">,
  1284. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  1285. [IntrNoMem]>;
  1286. def int_ppc_vsx_xxblendvh: GCCBuiltin<"__builtin_vsx_xxblendvh">,
  1287. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,llvm_v8i16_ty],
  1288. [IntrNoMem]>;
  1289. def int_ppc_vsx_xxblendvw: GCCBuiltin<"__builtin_vsx_xxblendvw">,
  1290. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  1291. [IntrNoMem]>;
  1292. def int_ppc_vsx_xxblendvd: GCCBuiltin<"__builtin_vsx_xxblendvd">,
  1293. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
  1294. [IntrNoMem]>;
  1295. }
  1296. //===----------------------------------------------------------------------===//
  1297. // PowerPC HTM Intrinsic Definitions.
  1298. let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.".
  1299. def int_ppc_tbegin : GCCBuiltin<"__builtin_tbegin">,
  1300. Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>;
  1301. def int_ppc_tend : GCCBuiltin<"__builtin_tend">,
  1302. Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>;
  1303. def int_ppc_tabort : GCCBuiltin<"__builtin_tabort">,
  1304. Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
  1305. def int_ppc_tabortwc : GCCBuiltin<"__builtin_tabortwc">,
  1306. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
  1307. def int_ppc_tabortwci : GCCBuiltin<"__builtin_tabortwci">,
  1308. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
  1309. def int_ppc_tabortdc : GCCBuiltin<"__builtin_tabortdc">,
  1310. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
  1311. def int_ppc_tabortdci : GCCBuiltin<"__builtin_tabortdci">,
  1312. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
  1313. def int_ppc_tcheck : GCCBuiltin<"__builtin_tcheck">,
  1314. Intrinsic<[llvm_i32_ty], [], []>;
  1315. def int_ppc_treclaim : GCCBuiltin<"__builtin_treclaim">,
  1316. Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
  1317. def int_ppc_trechkpt : GCCBuiltin<"__builtin_trechkpt">,
  1318. Intrinsic<[llvm_i32_ty], [], []>;
  1319. def int_ppc_tsr : GCCBuiltin<"__builtin_tsr">,
  1320. Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
  1321. def int_ppc_get_texasr : GCCBuiltin<"__builtin_get_texasr">,
  1322. Intrinsic<[llvm_i64_ty], [], []>;
  1323. def int_ppc_get_texasru : GCCBuiltin<"__builtin_get_texasru">,
  1324. Intrinsic<[llvm_i64_ty], [], []>;
  1325. def int_ppc_get_tfhar : GCCBuiltin<"__builtin_get_tfhar">,
  1326. Intrinsic<[llvm_i64_ty], [], []>;
  1327. def int_ppc_get_tfiar : GCCBuiltin<"__builtin_get_tfiar">,
  1328. Intrinsic<[llvm_i64_ty], [], []>;
  1329. def int_ppc_set_texasr : GCCBuiltin<"__builtin_set_texasr">,
  1330. Intrinsic<[], [llvm_i64_ty], []>;
  1331. def int_ppc_set_texasru : GCCBuiltin<"__builtin_set_texasru">,
  1332. Intrinsic<[], [llvm_i64_ty], []>;
  1333. def int_ppc_set_tfhar : GCCBuiltin<"__builtin_set_tfhar">,
  1334. Intrinsic<[], [llvm_i64_ty], []>;
  1335. def int_ppc_set_tfiar : GCCBuiltin<"__builtin_set_tfiar">,
  1336. Intrinsic<[], [llvm_i64_ty], []>;
  1337. // Extended mnemonics
  1338. def int_ppc_tendall : GCCBuiltin<"__builtin_tendall">,
  1339. Intrinsic<[llvm_i32_ty], [], []>;
  1340. def int_ppc_tresume : GCCBuiltin<"__builtin_tresume">,
  1341. Intrinsic<[llvm_i32_ty], [], []>;
  1342. def int_ppc_tsuspend : GCCBuiltin<"__builtin_tsuspend">,
  1343. Intrinsic<[llvm_i32_ty], [], []>;
  1344. def int_ppc_ttest : GCCBuiltin<"__builtin_ttest">,
  1345. Intrinsic<[llvm_i64_ty], [], []>;
  1346. def int_ppc_cfence : Intrinsic<[], [llvm_anyint_ty], []>;
  1347. // PowerPC set FPSCR Intrinsic Definitions.
  1348. def int_ppc_setrnd : GCCBuiltin<"__builtin_setrnd">,
  1349. Intrinsic<[llvm_double_ty], [llvm_i32_ty], []>;
  1350. }
  1351. let TargetPrefix = "ppc" in {
  1352. def int_ppc_vsx_assemble_pair :
  1353. Intrinsic<[llvm_v256i1_ty],
  1354. [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
  1355. def int_ppc_vsx_disassemble_pair :
  1356. Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty],
  1357. [llvm_v256i1_ty], [IntrNoMem]>;
  1358. def int_ppc_mma_assemble_acc :
  1359. Intrinsic<[llvm_v512i1_ty],
  1360. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  1361. [IntrNoMem]>;
  1362. def int_ppc_mma_disassemble_acc :
  1363. Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  1364. [llvm_v512i1_ty], [IntrNoMem]>;
  1365. def int_ppc_mma_xxmtacc :
  1366. Intrinsic<[llvm_v512i1_ty], [llvm_v512i1_ty], [IntrNoMem]>;
  1367. def int_ppc_mma_xxmfacc :
  1368. Intrinsic<[llvm_v512i1_ty], [llvm_v512i1_ty], [IntrNoMem]>;
  1369. def int_ppc_mma_xxsetaccz :
  1370. Intrinsic<[llvm_v512i1_ty], [], [IntrNoMem]>;
  1371. // MMA Reduced-Precision: Outer Product Intrinsic Definitions.
  1372. defm int_ppc_mma_xvi4ger8 :
  1373. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1374. defm int_ppc_mma_pmxvi4ger8 :
  1375. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1376. llvm_i32_ty, llvm_i32_ty]>;
  1377. defm int_ppc_mma_xvi8ger4 :
  1378. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1379. defm int_ppc_mma_pmxvi8ger4 :
  1380. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1381. llvm_i32_ty, llvm_i32_ty]>;
  1382. defm int_ppc_mma_xvi16ger2s :
  1383. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1384. defm int_ppc_mma_pmxvi16ger2s :
  1385. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1386. llvm_i32_ty, llvm_i32_ty]>;
  1387. defm int_ppc_mma_xvf16ger2 :
  1388. PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1389. defm int_ppc_mma_pmxvf16ger2 :
  1390. PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1391. llvm_i32_ty, llvm_i32_ty]>;
  1392. defm int_ppc_mma_xvf32ger :
  1393. PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1394. defm int_ppc_mma_pmxvf32ger :
  1395. PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1396. llvm_i32_ty]>;
  1397. defm int_ppc_mma_xvf64ger :
  1398. PowerPC_MMA_ACC_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty]>;
  1399. defm int_ppc_mma_pmxvf64ger :
  1400. PowerPC_MMA_ACC_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty, llvm_i32_ty,
  1401. llvm_i32_ty]>;
  1402. // MMA Reduced-Precision: bfloat16 Outer Product Intrinsic Definitions.
  1403. defm int_ppc_mma_xvbf16ger2 :
  1404. PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1405. defm int_ppc_mma_pmxvbf16ger2 :
  1406. PowerPC_MMA_ACC_Intrinsic<
  1407. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
  1408. // MMA Reduced-Precision: Missing Integer-based Outer Product Operations.
  1409. defm int_ppc_mma_xvi16ger2 :
  1410. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>;
  1411. defm int_ppc_mma_pmxvi16ger2 :
  1412. PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1413. llvm_i32_ty, llvm_i32_ty]>;
  1414. def int_ppc_mma_xvi8ger4spp :
  1415. Intrinsic<[llvm_v512i1_ty],
  1416. [llvm_v512i1_ty, llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
  1417. def int_ppc_mma_pmxvi8ger4spp :
  1418. Intrinsic<[llvm_v512i1_ty],
  1419. [llvm_v512i1_ty, llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  1420. llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  1421. }
  1422. // XL Compat intrinsics.
  1423. let TargetPrefix = "ppc" in {
  1424. def int_ppc_dcbfl : GCCBuiltin<"__builtin_ppc_dcbfl">,
  1425. Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>;
  1426. def int_ppc_dcbflp : GCCBuiltin<"__builtin_ppc_dcbflp">,
  1427. Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>;
  1428. def int_ppc_dcbst : GCCBuiltin<"__builtin_ppc_dcbst">,
  1429. Intrinsic<[], [llvm_ptr_ty], []>;
  1430. def int_ppc_dcbt : GCCBuiltin<"__builtin_ppc_dcbt">,
  1431. Intrinsic<[], [llvm_ptr_ty],
  1432. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1433. def int_ppc_dcbtst : GCCBuiltin<"__builtin_ppc_dcbtst">,
  1434. Intrinsic<[], [llvm_ptr_ty],
  1435. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1436. def int_ppc_dcbz : GCCBuiltin<"__builtin_ppc_dcbz">,
  1437. Intrinsic<[], [llvm_ptr_ty], []>;
  1438. def int_ppc_icbt : GCCBuiltin<"__builtin_ppc_icbt">,
  1439. Intrinsic<[], [llvm_ptr_ty], []>;
  1440. // Population Count in each Byte.
  1441. def int_ppc_popcntb : Intrinsic<[llvm_anyint_ty], [llvm_anyint_ty], [IntrNoMem]>;
  1442. // sync instruction (i.e. sync 0, a.k.a hwsync)
  1443. def int_ppc_sync : GCCBuiltin<"__builtin_ppc_sync">,
  1444. Intrinsic<[], [], []>;
  1445. def int_ppc_iospace_sync : GCCBuiltin<"__builtin_ppc_iospace_sync">,
  1446. Intrinsic<[], [], []>;
  1447. // isync instruction
  1448. def int_ppc_isync : GCCBuiltin<"__builtin_ppc_isync">,
  1449. Intrinsic<[], [], []>;
  1450. // lwsync is sync 1
  1451. def int_ppc_lwsync : GCCBuiltin<"__builtin_ppc_lwsync">,
  1452. Intrinsic<[], [], []>;
  1453. def int_ppc_iospace_lwsync : GCCBuiltin<"__builtin_ppc_iospace_lwsync">,
  1454. Intrinsic<[], [], []>;
  1455. // eieio instruction
  1456. def int_ppc_eieio : GCCBuiltin<"__builtin_ppc_eieio">,
  1457. Intrinsic<[],[],[]>;
  1458. def int_ppc_iospace_eieio : GCCBuiltin<"__builtin_ppc_iospace_eieio">,
  1459. Intrinsic<[],[],[]>;
  1460. def int_ppc_stdcx : GCCBuiltin<"__builtin_ppc_stdcx">,
  1461. Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i64_ty],
  1462. [IntrWriteMem]>;
  1463. def int_ppc_stwcx : GCCBuiltin<"__builtin_ppc_stwcx">,
  1464. Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
  1465. [IntrWriteMem]>;
  1466. def int_ppc_sthcx
  1467. : Intrinsic<[llvm_i32_ty], [ llvm_ptr_ty, llvm_i32_ty ], [IntrWriteMem]>;
  1468. def int_ppc_stbcx : GCCBuiltin<"__builtin_ppc_stbcx">,
  1469. Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
  1470. [IntrWriteMem]>;
  1471. def int_ppc_dcbtstt : GCCBuiltin<"__builtin_ppc_dcbtstt">,
  1472. Intrinsic<[], [llvm_ptr_ty],
  1473. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1474. def int_ppc_dcbtt : GCCBuiltin<"__builtin_ppc_dcbtt">,
  1475. Intrinsic<[], [llvm_ptr_ty],
  1476. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1477. def int_ppc_mftbu : GCCBuiltin<"__builtin_ppc_mftbu">,
  1478. Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>;
  1479. def int_ppc_mfmsr : GCCBuiltin<"__builtin_ppc_mfmsr">,
  1480. Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>;
  1481. def int_ppc_mfspr
  1482. : Intrinsic<[llvm_anyint_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>;
  1483. def int_ppc_mtmsr
  1484. : GCCBuiltin<"__builtin_ppc_mtmsr">, Intrinsic<[], [llvm_i32_ty], []>;
  1485. def int_ppc_mtspr
  1486. : Intrinsic<[], [llvm_i32_ty, llvm_anyint_ty], [ImmArg<ArgIndex<0>>]>;
  1487. def int_ppc_stfiw : GCCBuiltin<"__builtin_ppc_stfiw">,
  1488. Intrinsic<[], [llvm_ptr_ty, llvm_double_ty],
  1489. [IntrWriteMem]>;
  1490. // compare
  1491. def int_ppc_cmpeqb
  1492. : GCCBuiltin<"__builtin_ppc_cmpeqb">,
  1493. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1494. def int_ppc_cmprb
  1495. : GCCBuiltin<"__builtin_ppc_cmprb">,
  1496. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
  1497. [IntrNoMem, ImmArg<ArgIndex<0>>]>;
  1498. def int_ppc_setb
  1499. : GCCBuiltin<"__builtin_ppc_setb">,
  1500. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1501. def int_ppc_cmpb
  1502. : Intrinsic<[llvm_anyint_ty], [llvm_anyint_ty, llvm_anyint_ty],
  1503. [IntrNoMem]>;
  1504. // multiply
  1505. def int_ppc_mulhd
  1506. : GCCBuiltin<"__builtin_ppc_mulhd">,
  1507. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1508. def int_ppc_mulhdu
  1509. : GCCBuiltin<"__builtin_ppc_mulhdu">,
  1510. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1511. def int_ppc_mulhw
  1512. : GCCBuiltin<"__builtin_ppc_mulhw">,
  1513. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  1514. def int_ppc_mulhwu
  1515. : GCCBuiltin<"__builtin_ppc_mulhwu">,
  1516. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  1517. def int_ppc_maddhd
  1518. : GCCBuiltin<"__builtin_ppc_maddhd">,
  1519. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1520. def int_ppc_maddhdu
  1521. : GCCBuiltin<"__builtin_ppc_maddhdu">,
  1522. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1523. def int_ppc_maddld
  1524. : GCCBuiltin<"__builtin_ppc_maddld">,
  1525. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  1526. // load
  1527. def int_ppc_load2r
  1528. : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1529. def int_ppc_load4r
  1530. : GCCBuiltin<"__builtin_ppc_load4r">,
  1531. Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1532. def int_ppc_load8r
  1533. : GCCBuiltin<"__builtin_ppc_load8r">,
  1534. Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
  1535. // store
  1536. def int_ppc_store2r
  1537. : GCCBuiltin<"__builtin_ppc_store2r">,
  1538. Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], [IntrWriteMem]>;
  1539. def int_ppc_store4r
  1540. : GCCBuiltin<"__builtin_ppc_store4r">,
  1541. Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], [IntrWriteMem]>;
  1542. def int_ppc_store8r
  1543. : GCCBuiltin<"__builtin_ppc_store8r">,
  1544. Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], [IntrWriteMem]>;
  1545. def int_ppc_insert_exp
  1546. : GCCBuiltin<"__builtin_ppc_insert_exp">,
  1547. Intrinsic <[llvm_double_ty], [llvm_double_ty, llvm_i64_ty],
  1548. [IntrNoMem]>;
  1549. def int_ppc_extract_exp
  1550. : GCCBuiltin<"__builtin_ppc_extract_exp">,
  1551. Intrinsic <[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
  1552. def int_ppc_extract_sig
  1553. : GCCBuiltin<"__builtin_ppc_extract_sig">,
  1554. Intrinsic <[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
  1555. def int_ppc_mtfsb0
  1556. : GCCBuiltin<"__builtin_ppc_mtfsb0">,
  1557. Intrinsic <[], [llvm_i32_ty],
  1558. [IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>]>;
  1559. def int_ppc_mtfsb1
  1560. : GCCBuiltin<"__builtin_ppc_mtfsb1">,
  1561. Intrinsic <[], [llvm_i32_ty],
  1562. [IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>]>;
  1563. def int_ppc_mtfsf :
  1564. Intrinsic <[], [llvm_i32_ty, llvm_double_ty],
  1565. [IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>]>;
  1566. def int_ppc_mtfsfi
  1567. : GCCBuiltin<"__builtin_ppc_mtfsfi">,
  1568. Intrinsic <[], [llvm_i32_ty, llvm_i32_ty],
  1569. [IntrNoMem, IntrHasSideEffects,
  1570. ImmArg<ArgIndex<0>>,ImmArg<ArgIndex<1>>]>;
  1571. def int_ppc_fmsub
  1572. : GCCBuiltin<"__builtin_ppc_fmsub">,
  1573. Intrinsic <[llvm_double_ty],
  1574. [llvm_double_ty, llvm_double_ty, llvm_double_ty],
  1575. [IntrNoMem]>;
  1576. def int_ppc_fmsubs
  1577. : GCCBuiltin<"__builtin_ppc_fmsubs">,
  1578. Intrinsic <[llvm_float_ty],
  1579. [llvm_float_ty, llvm_float_ty, llvm_float_ty],
  1580. [IntrNoMem]>;
  1581. def int_ppc_fnmadd
  1582. : GCCBuiltin<"__builtin_ppc_fnmadd">,
  1583. Intrinsic <[llvm_double_ty],
  1584. [llvm_double_ty, llvm_double_ty, llvm_double_ty],
  1585. [IntrNoMem]>;
  1586. def int_ppc_fnmadds
  1587. : GCCBuiltin<"__builtin_ppc_fnmadds">,
  1588. Intrinsic <[llvm_float_ty],
  1589. [llvm_float_ty, llvm_float_ty, llvm_float_ty],
  1590. [IntrNoMem]>;
  1591. def int_ppc_fnmsub
  1592. : GCCBuiltin<"__builtin_ppc_fnmsub">,
  1593. Intrinsic <[llvm_double_ty],
  1594. [llvm_double_ty, llvm_double_ty, llvm_double_ty],
  1595. [IntrNoMem]>;
  1596. def int_ppc_fnmsubs
  1597. : GCCBuiltin<"__builtin_ppc_fnmsubs">,
  1598. Intrinsic <[llvm_float_ty],
  1599. [llvm_float_ty, llvm_float_ty, llvm_float_ty],
  1600. [IntrNoMem]>;
  1601. def int_ppc_fre
  1602. : GCCBuiltin<"__builtin_ppc_fre">,
  1603. Intrinsic <[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  1604. def int_ppc_fres
  1605. : GCCBuiltin<"__builtin_ppc_fres">,
  1606. Intrinsic <[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
  1607. def int_ppc_addex
  1608. : GCCBuiltin<"__builtin_ppc_addex">,
  1609. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty],
  1610. [IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<2>>]>;
  1611. def int_ppc_fsel : GCCBuiltin<"__builtin_ppc_fsel">,
  1612. Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty,
  1613. llvm_double_ty], [IntrNoMem]>;
  1614. def int_ppc_fsels : GCCBuiltin<"__builtin_ppc_fsels">,
  1615. Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty,
  1616. llvm_float_ty], [IntrNoMem]>;
  1617. def int_ppc_frsqrte : GCCBuiltin<"__builtin_ppc_frsqrte">,
  1618. Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
  1619. def int_ppc_frsqrtes : GCCBuiltin<"__builtin_ppc_frsqrtes">,
  1620. Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
  1621. def int_ppc_compare_exp_uo : GCCBuiltin<"__builtin_ppc_compare_exp_uo">,
  1622. Intrinsic<[llvm_i32_ty],
  1623. [llvm_double_ty, llvm_double_ty],
  1624. [IntrNoMem]>;
  1625. def int_ppc_compare_exp_lt : GCCBuiltin<"__builtin_ppc_compare_exp_lt">,
  1626. Intrinsic<[llvm_i32_ty],
  1627. [llvm_double_ty, llvm_double_ty],
  1628. [IntrNoMem]>;
  1629. def int_ppc_compare_exp_gt : GCCBuiltin<"__builtin_ppc_compare_exp_gt">,
  1630. Intrinsic<[llvm_i32_ty],
  1631. [llvm_double_ty, llvm_double_ty],
  1632. [IntrNoMem]>;
  1633. def int_ppc_compare_exp_eq : GCCBuiltin<"__builtin_ppc_compare_exp_eq">,
  1634. Intrinsic<[llvm_i32_ty],
  1635. [llvm_double_ty, llvm_double_ty],
  1636. [IntrNoMem]>;
  1637. def int_ppc_test_data_class_d : Intrinsic<[llvm_i32_ty],
  1638. [llvm_double_ty, llvm_i32_ty],
  1639. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  1640. def int_ppc_test_data_class_f : Intrinsic<[llvm_i32_ty],
  1641. [llvm_float_ty, llvm_i32_ty],
  1642. [IntrNoMem, ImmArg<ArgIndex<1>>]>;
  1643. def int_ppc_convert_f128_to_ppcf128
  1644. : Intrinsic<[llvm_ppcf128_ty], [llvm_f128_ty], [IntrNoMem]>;
  1645. def int_ppc_convert_ppcf128_to_f128
  1646. : Intrinsic<[llvm_f128_ty], [llvm_ppcf128_ty], [IntrNoMem]>;
  1647. }
  1648. //===----------------------------------------------------------------------===//
  1649. // PowerPC Atomic Intrinsic Definitions.
  1650. let TargetPrefix = "ppc" in {
  1651. class AtomicRMW128Intrinsic
  1652. : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
  1653. [llvm_ptr_ty, llvm_i64_ty, llvm_i64_ty],
  1654. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1655. def int_ppc_atomicrmw_xchg_i128 : AtomicRMW128Intrinsic;
  1656. def int_ppc_atomicrmw_add_i128 : AtomicRMW128Intrinsic;
  1657. def int_ppc_atomicrmw_sub_i128 : AtomicRMW128Intrinsic;
  1658. def int_ppc_atomicrmw_and_i128 : AtomicRMW128Intrinsic;
  1659. def int_ppc_atomicrmw_or_i128 : AtomicRMW128Intrinsic;
  1660. def int_ppc_atomicrmw_xor_i128 : AtomicRMW128Intrinsic;
  1661. def int_ppc_atomicrmw_nand_i128 : AtomicRMW128Intrinsic;
  1662. def int_ppc_cmpxchg_i128 : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
  1663. [llvm_ptr_ty,
  1664. llvm_i64_ty, llvm_i64_ty,
  1665. llvm_i64_ty, llvm_i64_ty],
  1666. [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>;
  1667. def int_ppc_atomic_load_i128 :
  1668. Intrinsic<[llvm_i64_ty, llvm_i64_ty],
  1669. [llvm_ptr_ty],
  1670. [IntrArgMemOnly, IntrReadMem, NoCapture<ArgIndex<0>>]>;
  1671. def int_ppc_atomic_store_i128 :
  1672. Intrinsic<[], [llvm_i64_ty, llvm_i64_ty, llvm_ptr_ty],
  1673. [IntrArgMemOnly, IntrWriteMem, NoCapture<ArgIndex<2>>]>;
  1674. }