IntrinsicsX86.td 280 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340
  1. //===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file defines all of the X86-specific intrinsics.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  14. def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
  15. }
  16. //===----------------------------------------------------------------------===//
  17. // SEH intrinsics for Windows
  18. let TargetPrefix = "x86" in {
  19. def int_x86_seh_lsda : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
  20. // Restores the frame, base, and stack pointers as necessary after recovering
  21. // from an exception. Any block resuming control flow in the parent function
  22. // should call this before accessing any stack memory.
  23. def int_x86_seh_restoreframe : Intrinsic<[], [], []>;
  24. // Given a pointer to the end of an EH registration object, returns the true
  25. // parent frame address that can be used with llvm.localrecover.
  26. def int_x86_seh_recoverfp : Intrinsic<[llvm_ptr_ty],
  27. [llvm_ptr_ty, llvm_ptr_ty],
  28. [IntrNoMem]>;
  29. }
  30. //===----------------------------------------------------------------------===//
  31. // Read Time Stamp Counter.
  32. let TargetPrefix = "x86" in {
  33. def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">,
  34. Intrinsic<[llvm_i64_ty], [], []>;
  35. def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">,
  36. Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
  37. }
  38. // Read Performance-Monitoring Counter.
  39. let TargetPrefix = "x86" in {
  40. def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">,
  41. Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
  42. }
  43. //===----------------------------------------------------------------------===//
  44. // 3DNow!
  45. let TargetPrefix = "x86" in {
  46. def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">,
  47. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  48. [IntrNoMem]>;
  49. def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">,
  50. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  51. def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">,
  52. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  53. [IntrNoMem]>;
  54. def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">,
  55. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  56. [IntrNoMem]>;
  57. def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">,
  58. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  59. [IntrNoMem]>;
  60. def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">,
  61. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  62. [IntrNoMem]>;
  63. def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">,
  64. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  65. [IntrNoMem]>;
  66. def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">,
  67. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  68. [IntrNoMem]>;
  69. def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">,
  70. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  71. [IntrNoMem]>;
  72. def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">,
  73. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  74. [IntrNoMem]>;
  75. def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">,
  76. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  77. def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">,
  78. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  79. [IntrNoMem]>;
  80. def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">,
  81. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  82. [IntrNoMem]>;
  83. def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">,
  84. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  85. def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">,
  86. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  87. [IntrNoMem]>;
  88. def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">,
  89. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  90. [IntrNoMem]>;
  91. def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">,
  92. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  93. [IntrNoMem]>;
  94. def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">,
  95. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  96. def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">,
  97. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  98. [IntrNoMem]>;
  99. }
  100. //===----------------------------------------------------------------------===//
  101. // 3DNow! extensions
  102. let TargetPrefix = "x86" in {
  103. def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">,
  104. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  105. def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">,
  106. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  107. [IntrNoMem]>;
  108. def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">,
  109. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  110. [IntrNoMem]>;
  111. def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">,
  112. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  113. def int_x86_3dnowa_pswapd :
  114. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  115. }
  116. //===----------------------------------------------------------------------===//
  117. // SSE1
  118. // Arithmetic ops
  119. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  120. def int_x86_sse_add_ss : GCCBuiltin<"__builtin_ia32_addss">,
  121. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  122. llvm_v4f32_ty], [IntrNoMem]>;
  123. def int_x86_sse_sub_ss : GCCBuiltin<"__builtin_ia32_subss">,
  124. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  125. llvm_v4f32_ty], [IntrNoMem]>;
  126. def int_x86_sse_mul_ss : GCCBuiltin<"__builtin_ia32_mulss">,
  127. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  128. llvm_v4f32_ty], [IntrNoMem]>;
  129. def int_x86_sse_div_ss : GCCBuiltin<"__builtin_ia32_divss">,
  130. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  131. llvm_v4f32_ty], [IntrNoMem]>;
  132. def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">,
  133. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  134. [IntrNoMem]>;
  135. def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">,
  136. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  137. [IntrNoMem]>;
  138. def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">,
  139. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  140. [IntrNoMem]>;
  141. def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">,
  142. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  143. [IntrNoMem]>;
  144. def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">,
  145. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  146. [IntrNoMem]>;
  147. def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">,
  148. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
  149. [IntrNoMem]>;
  150. def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">,
  151. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  152. llvm_v4f32_ty], [IntrNoMem]>;
  153. def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">,
  154. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  155. llvm_v4f32_ty], [IntrNoMem]>;
  156. def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">,
  157. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  158. llvm_v4f32_ty], [IntrNoMem]>;
  159. def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">,
  160. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  161. llvm_v4f32_ty], [IntrNoMem]>;
  162. }
  163. // Comparison ops
  164. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  165. def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
  166. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  167. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  168. def int_x86_sse_cmp_ps : GCCBuiltin<"__builtin_ia32_cmpps">,
  169. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  170. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  171. def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">,
  172. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  173. llvm_v4f32_ty], [IntrNoMem]>;
  174. def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">,
  175. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  176. llvm_v4f32_ty], [IntrNoMem]>;
  177. def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">,
  178. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  179. llvm_v4f32_ty], [IntrNoMem]>;
  180. def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">,
  181. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  182. llvm_v4f32_ty], [IntrNoMem]>;
  183. def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">,
  184. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  185. llvm_v4f32_ty], [IntrNoMem]>;
  186. def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">,
  187. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  188. llvm_v4f32_ty], [IntrNoMem]>;
  189. def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">,
  190. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  191. llvm_v4f32_ty], [IntrNoMem]>;
  192. def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">,
  193. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  194. llvm_v4f32_ty], [IntrNoMem]>;
  195. def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">,
  196. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  197. llvm_v4f32_ty], [IntrNoMem]>;
  198. def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">,
  199. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  200. llvm_v4f32_ty], [IntrNoMem]>;
  201. def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">,
  202. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  203. llvm_v4f32_ty], [IntrNoMem]>;
  204. def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">,
  205. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  206. llvm_v4f32_ty], [IntrNoMem]>;
  207. }
  208. // Conversion ops
  209. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  210. def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">,
  211. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  212. def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">,
  213. Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  214. def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">,
  215. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  216. def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">,
  217. Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  218. def int_x86_sse_cvtsi2ss : GCCBuiltin<"__builtin_ia32_cvtsi2ss">,
  219. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  220. llvm_i32_ty], [IntrNoMem]>;
  221. def int_x86_sse_cvtsi642ss : GCCBuiltin<"__builtin_ia32_cvtsi642ss">,
  222. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  223. llvm_i64_ty], [IntrNoMem]>;
  224. def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
  225. Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  226. def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">,
  227. Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  228. def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">,
  229. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  230. llvm_x86mmx_ty], [IntrNoMem]>;
  231. }
  232. // SIMD store ops
  233. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  234. def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">,
  235. Intrinsic<[], [llvm_ptr_ty,
  236. llvm_v4f32_ty], [IntrReadWriteArgMem]>;
  237. }
  238. // Cacheability support ops
  239. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  240. def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
  241. Intrinsic<[], [], []>;
  242. }
  243. // Control register.
  244. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  245. def int_x86_sse_stmxcsr :
  246. Intrinsic<[], [llvm_ptr_ty], []>;
  247. def int_x86_sse_ldmxcsr :
  248. Intrinsic<[], [llvm_ptr_ty], []>;
  249. }
  250. // Misc.
  251. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  252. def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">,
  253. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  254. }
  255. //===----------------------------------------------------------------------===//
  256. // SSE2
  257. // FP arithmetic ops
  258. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  259. def int_x86_sse2_add_sd : GCCBuiltin<"__builtin_ia32_addsd">,
  260. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  261. llvm_v2f64_ty], [IntrNoMem]>;
  262. def int_x86_sse2_sub_sd : GCCBuiltin<"__builtin_ia32_subsd">,
  263. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  264. llvm_v2f64_ty], [IntrNoMem]>;
  265. def int_x86_sse2_mul_sd : GCCBuiltin<"__builtin_ia32_mulsd">,
  266. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  267. llvm_v2f64_ty], [IntrNoMem]>;
  268. def int_x86_sse2_div_sd : GCCBuiltin<"__builtin_ia32_divsd">,
  269. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  270. llvm_v2f64_ty], [IntrNoMem]>;
  271. def int_x86_sse2_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd">,
  272. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
  273. [IntrNoMem]>;
  274. def int_x86_sse2_sqrt_pd : GCCBuiltin<"__builtin_ia32_sqrtpd">,
  275. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
  276. [IntrNoMem]>;
  277. def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">,
  278. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  279. llvm_v2f64_ty], [IntrNoMem]>;
  280. def int_x86_sse2_min_pd : GCCBuiltin<"__builtin_ia32_minpd">,
  281. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  282. llvm_v2f64_ty], [IntrNoMem]>;
  283. def int_x86_sse2_max_sd : GCCBuiltin<"__builtin_ia32_maxsd">,
  284. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  285. llvm_v2f64_ty], [IntrNoMem]>;
  286. def int_x86_sse2_max_pd : GCCBuiltin<"__builtin_ia32_maxpd">,
  287. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  288. llvm_v2f64_ty], [IntrNoMem]>;
  289. }
  290. // FP comparison ops
  291. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  292. def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">,
  293. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  294. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  295. def int_x86_sse2_cmp_pd : GCCBuiltin<"__builtin_ia32_cmppd">,
  296. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  297. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  298. def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">,
  299. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  300. llvm_v2f64_ty], [IntrNoMem]>;
  301. def int_x86_sse2_comilt_sd : GCCBuiltin<"__builtin_ia32_comisdlt">,
  302. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  303. llvm_v2f64_ty], [IntrNoMem]>;
  304. def int_x86_sse2_comile_sd : GCCBuiltin<"__builtin_ia32_comisdle">,
  305. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  306. llvm_v2f64_ty], [IntrNoMem]>;
  307. def int_x86_sse2_comigt_sd : GCCBuiltin<"__builtin_ia32_comisdgt">,
  308. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  309. llvm_v2f64_ty], [IntrNoMem]>;
  310. def int_x86_sse2_comige_sd : GCCBuiltin<"__builtin_ia32_comisdge">,
  311. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  312. llvm_v2f64_ty], [IntrNoMem]>;
  313. def int_x86_sse2_comineq_sd : GCCBuiltin<"__builtin_ia32_comisdneq">,
  314. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  315. llvm_v2f64_ty], [IntrNoMem]>;
  316. def int_x86_sse2_ucomieq_sd : GCCBuiltin<"__builtin_ia32_ucomisdeq">,
  317. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  318. llvm_v2f64_ty], [IntrNoMem]>;
  319. def int_x86_sse2_ucomilt_sd : GCCBuiltin<"__builtin_ia32_ucomisdlt">,
  320. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  321. llvm_v2f64_ty], [IntrNoMem]>;
  322. def int_x86_sse2_ucomile_sd : GCCBuiltin<"__builtin_ia32_ucomisdle">,
  323. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  324. llvm_v2f64_ty], [IntrNoMem]>;
  325. def int_x86_sse2_ucomigt_sd : GCCBuiltin<"__builtin_ia32_ucomisdgt">,
  326. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  327. llvm_v2f64_ty], [IntrNoMem]>;
  328. def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">,
  329. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  330. llvm_v2f64_ty], [IntrNoMem]>;
  331. def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">,
  332. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  333. llvm_v2f64_ty], [IntrNoMem]>;
  334. }
  335. // Integer arithmetic ops.
  336. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  337. def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">,
  338. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  339. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  340. def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">,
  341. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  342. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  343. def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">,
  344. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  345. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  346. def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">,
  347. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  348. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  349. def int_x86_sse2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb128">,
  350. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  351. llvm_v16i8_ty], [IntrNoMem]>;
  352. def int_x86_sse2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw128">,
  353. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  354. llvm_v8i16_ty], [IntrNoMem]>;
  355. def int_x86_sse2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">,
  356. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  357. llvm_v16i8_ty], [IntrNoMem]>;
  358. def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">,
  359. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  360. llvm_v8i16_ty], [IntrNoMem]>;
  361. def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">,
  362. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  363. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  364. def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">,
  365. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  366. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  367. def int_x86_sse2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq128">,
  368. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty,
  369. llvm_v4i32_ty], [IntrNoMem, Commutative]>;
  370. def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">,
  371. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
  372. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  373. def int_x86_sse2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb128">,
  374. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  375. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  376. def int_x86_sse2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw128">,
  377. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  378. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  379. def int_x86_sse2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub128">,
  380. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  381. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  382. def int_x86_sse2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw128">,
  383. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  384. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  385. def int_x86_sse2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub128">,
  386. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  387. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  388. def int_x86_sse2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw128">,
  389. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  390. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  391. def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">,
  392. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
  393. llvm_v16i8_ty], [IntrNoMem, Commutative]>;
  394. }
  395. // Integer shift ops.
  396. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  397. def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">,
  398. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  399. llvm_v8i16_ty], [IntrNoMem]>;
  400. def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">,
  401. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  402. llvm_v4i32_ty], [IntrNoMem]>;
  403. def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">,
  404. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
  405. llvm_v2i64_ty], [IntrNoMem]>;
  406. def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">,
  407. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  408. llvm_v8i16_ty], [IntrNoMem]>;
  409. def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">,
  410. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  411. llvm_v4i32_ty], [IntrNoMem]>;
  412. def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">,
  413. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
  414. llvm_v2i64_ty], [IntrNoMem]>;
  415. def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">,
  416. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  417. llvm_v8i16_ty], [IntrNoMem]>;
  418. def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">,
  419. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  420. llvm_v4i32_ty], [IntrNoMem]>;
  421. def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">,
  422. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  423. llvm_i32_ty], [IntrNoMem]>;
  424. def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">,
  425. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  426. llvm_i32_ty], [IntrNoMem]>;
  427. def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">,
  428. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
  429. llvm_i32_ty], [IntrNoMem]>;
  430. def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">,
  431. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  432. llvm_i32_ty], [IntrNoMem]>;
  433. def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">,
  434. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  435. llvm_i32_ty], [IntrNoMem]>;
  436. def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">,
  437. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
  438. llvm_i32_ty], [IntrNoMem]>;
  439. def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">,
  440. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  441. llvm_i32_ty], [IntrNoMem]>;
  442. def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">,
  443. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  444. llvm_i32_ty], [IntrNoMem]>;
  445. }
  446. // Conversion ops
  447. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  448. def int_x86_sse2_cvtdq2pd : GCCBuiltin<"__builtin_ia32_cvtdq2pd">,
  449. Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  450. def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">,
  451. Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  452. def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">,
  453. Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  454. def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">,
  455. Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  456. def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">,
  457. Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  458. def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">,
  459. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  460. def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">,
  461. Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  462. def int_x86_sse2_cvtps2pd : GCCBuiltin<"__builtin_ia32_cvtps2pd">,
  463. Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  464. def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">,
  465. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  466. def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">,
  467. Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  468. def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">,
  469. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  470. def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">,
  471. Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  472. def int_x86_sse2_cvtsi2sd : GCCBuiltin<"__builtin_ia32_cvtsi2sd">,
  473. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  474. llvm_i32_ty], [IntrNoMem]>;
  475. def int_x86_sse2_cvtsi642sd : GCCBuiltin<"__builtin_ia32_cvtsi642sd">,
  476. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  477. llvm_i64_ty], [IntrNoMem]>;
  478. def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">,
  479. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  480. llvm_v2f64_ty], [IntrNoMem]>;
  481. def int_x86_sse2_cvtss2sd : GCCBuiltin<"__builtin_ia32_cvtss2sd">,
  482. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  483. llvm_v4f32_ty], [IntrNoMem]>;
  484. def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
  485. Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  486. def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
  487. Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  488. def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">,
  489. Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  490. }
  491. // SIMD store ops
  492. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  493. def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">,
  494. Intrinsic<[], [llvm_ptr_ty,
  495. llvm_v2f64_ty], [IntrReadWriteArgMem]>;
  496. def int_x86_sse2_storeu_dq : GCCBuiltin<"__builtin_ia32_storedqu">,
  497. Intrinsic<[], [llvm_ptr_ty,
  498. llvm_v16i8_ty], [IntrReadWriteArgMem]>;
  499. def int_x86_sse2_storel_dq : GCCBuiltin<"__builtin_ia32_storelv4si">,
  500. Intrinsic<[], [llvm_ptr_ty,
  501. llvm_v4i32_ty], [IntrReadWriteArgMem]>;
  502. }
  503. // Misc.
  504. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  505. def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,
  506. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
  507. llvm_v8i16_ty], [IntrNoMem]>;
  508. def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">,
  509. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty,
  510. llvm_v4i32_ty], [IntrNoMem]>;
  511. def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">,
  512. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
  513. llvm_v8i16_ty], [IntrNoMem]>;
  514. def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">,
  515. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  516. def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">,
  517. Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  518. def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
  519. Intrinsic<[], [llvm_v16i8_ty,
  520. llvm_v16i8_ty, llvm_ptr_ty], []>;
  521. def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">,
  522. Intrinsic<[], [llvm_ptr_ty], []>;
  523. def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">,
  524. Intrinsic<[], [], []>;
  525. def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">,
  526. Intrinsic<[], [], []>;
  527. def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">,
  528. Intrinsic<[], [], []>;
  529. }
  530. //===----------------------------------------------------------------------===//
  531. // SSE3
  532. // Addition / subtraction ops.
  533. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  534. def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">,
  535. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  536. llvm_v4f32_ty], [IntrNoMem]>;
  537. def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">,
  538. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  539. llvm_v2f64_ty], [IntrNoMem]>;
  540. }
  541. // Horizontal ops.
  542. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  543. def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">,
  544. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  545. llvm_v4f32_ty], [IntrNoMem]>;
  546. def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">,
  547. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  548. llvm_v2f64_ty], [IntrNoMem]>;
  549. def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">,
  550. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  551. llvm_v4f32_ty], [IntrNoMem]>;
  552. def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">,
  553. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  554. llvm_v2f64_ty], [IntrNoMem]>;
  555. }
  556. // Specialized unaligned load.
  557. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  558. def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">,
  559. Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
  560. }
  561. // Thread synchronization ops.
  562. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  563. def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">,
  564. Intrinsic<[], [llvm_ptr_ty,
  565. llvm_i32_ty, llvm_i32_ty], []>;
  566. def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">,
  567. Intrinsic<[], [llvm_i32_ty,
  568. llvm_i32_ty], []>;
  569. }
  570. //===----------------------------------------------------------------------===//
  571. // SSSE3
  572. // Horizontal arithmetic ops
  573. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  574. def int_x86_ssse3_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw">,
  575. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  576. llvm_x86mmx_ty], [IntrNoMem]>;
  577. def int_x86_ssse3_phadd_w_128 : GCCBuiltin<"__builtin_ia32_phaddw128">,
  578. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  579. llvm_v8i16_ty], [IntrNoMem]>;
  580. def int_x86_ssse3_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd">,
  581. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  582. llvm_x86mmx_ty], [IntrNoMem]>;
  583. def int_x86_ssse3_phadd_d_128 : GCCBuiltin<"__builtin_ia32_phaddd128">,
  584. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  585. llvm_v4i32_ty], [IntrNoMem]>;
  586. def int_x86_ssse3_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw">,
  587. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  588. llvm_x86mmx_ty], [IntrNoMem]>;
  589. def int_x86_ssse3_phadd_sw_128 : GCCBuiltin<"__builtin_ia32_phaddsw128">,
  590. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  591. llvm_v8i16_ty], [IntrNoMem]>;
  592. def int_x86_ssse3_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw">,
  593. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  594. llvm_x86mmx_ty], [IntrNoMem]>;
  595. def int_x86_ssse3_phsub_w_128 : GCCBuiltin<"__builtin_ia32_phsubw128">,
  596. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  597. llvm_v8i16_ty], [IntrNoMem]>;
  598. def int_x86_ssse3_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd">,
  599. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  600. llvm_x86mmx_ty], [IntrNoMem]>;
  601. def int_x86_ssse3_phsub_d_128 : GCCBuiltin<"__builtin_ia32_phsubd128">,
  602. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  603. llvm_v4i32_ty], [IntrNoMem]>;
  604. def int_x86_ssse3_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw">,
  605. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  606. llvm_x86mmx_ty], [IntrNoMem]>;
  607. def int_x86_ssse3_phsub_sw_128 : GCCBuiltin<"__builtin_ia32_phsubsw128">,
  608. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  609. llvm_v8i16_ty], [IntrNoMem]>;
  610. def int_x86_ssse3_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw">,
  611. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  612. llvm_x86mmx_ty], [IntrNoMem]>;
  613. def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">,
  614. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty,
  615. llvm_v16i8_ty], [IntrNoMem]>;
  616. }
  617. // Packed multiply high with round and scale
  618. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  619. def int_x86_ssse3_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw">,
  620. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  621. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  622. def int_x86_ssse3_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128">,
  623. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  624. llvm_v8i16_ty], [IntrNoMem, Commutative]>;
  625. }
  626. // Shuffle ops
  627. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  628. def int_x86_ssse3_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb">,
  629. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  630. llvm_x86mmx_ty], [IntrNoMem]>;
  631. def int_x86_ssse3_pshuf_b_128 : GCCBuiltin<"__builtin_ia32_pshufb128">,
  632. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  633. llvm_v16i8_ty], [IntrNoMem]>;
  634. def int_x86_sse2_pshuf_d : GCCBuiltin<"__builtin_ia32_pshufd">,
  635. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
  636. [IntrNoMem]>;
  637. def int_x86_sse2_pshufl_w : GCCBuiltin<"__builtin_ia32_pshuflw">,
  638. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
  639. [IntrNoMem]>;
  640. def int_x86_sse2_pshufh_w : GCCBuiltin<"__builtin_ia32_pshufhw">,
  641. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
  642. [IntrNoMem]>;
  643. def int_x86_sse_pshuf_w : GCCBuiltin<"__builtin_ia32_pshufw">,
  644. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
  645. [IntrNoMem]>;
  646. }
  647. // Sign ops
  648. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  649. def int_x86_ssse3_psign_b : GCCBuiltin<"__builtin_ia32_psignb">,
  650. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  651. llvm_x86mmx_ty], [IntrNoMem]>;
  652. def int_x86_ssse3_psign_b_128 : GCCBuiltin<"__builtin_ia32_psignb128">,
  653. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
  654. llvm_v16i8_ty], [IntrNoMem]>;
  655. def int_x86_ssse3_psign_w : GCCBuiltin<"__builtin_ia32_psignw">,
  656. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  657. llvm_x86mmx_ty], [IntrNoMem]>;
  658. def int_x86_ssse3_psign_w_128 : GCCBuiltin<"__builtin_ia32_psignw128">,
  659. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
  660. llvm_v8i16_ty], [IntrNoMem]>;
  661. def int_x86_ssse3_psign_d : GCCBuiltin<"__builtin_ia32_psignd">,
  662. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  663. llvm_x86mmx_ty], [IntrNoMem]>;
  664. def int_x86_ssse3_psign_d_128 : GCCBuiltin<"__builtin_ia32_psignd128">,
  665. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
  666. llvm_v4i32_ty], [IntrNoMem]>;
  667. }
  668. // Absolute value ops
  669. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  670. def int_x86_ssse3_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb">,
  671. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  672. def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">,
  673. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  674. def int_x86_ssse3_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw">,
  675. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  676. def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">,
  677. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  678. def int_x86_ssse3_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd">,
  679. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  680. def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">,
  681. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  682. }
  683. //===----------------------------------------------------------------------===//
  684. // SSE4.1
  685. // FP rounding ops
  686. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  687. def int_x86_sse41_round_ss : GCCBuiltin<"__builtin_ia32_roundss">,
  688. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  689. llvm_i32_ty], [IntrNoMem]>;
  690. def int_x86_sse41_round_ps : GCCBuiltin<"__builtin_ia32_roundps">,
  691. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  692. llvm_i32_ty], [IntrNoMem]>;
  693. def int_x86_sse41_round_sd : GCCBuiltin<"__builtin_ia32_roundsd">,
  694. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  695. llvm_i32_ty], [IntrNoMem]>;
  696. def int_x86_sse41_round_pd : GCCBuiltin<"__builtin_ia32_roundpd">,
  697. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  698. llvm_i32_ty], [IntrNoMem]>;
  699. }
  700. // Vector sign and zero extend
  701. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  702. def int_x86_sse41_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd128">,
  703. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
  704. [IntrNoMem]>;
  705. def int_x86_sse41_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq128">,
  706. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
  707. [IntrNoMem]>;
  708. def int_x86_sse41_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw128">,
  709. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
  710. [IntrNoMem]>;
  711. def int_x86_sse41_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq128">,
  712. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
  713. [IntrNoMem]>;
  714. def int_x86_sse41_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd128">,
  715. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
  716. [IntrNoMem]>;
  717. def int_x86_sse41_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq128">,
  718. Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
  719. [IntrNoMem]>;
  720. def int_x86_sse41_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd128">,
  721. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
  722. [IntrNoMem]>;
  723. def int_x86_sse41_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq128">,
  724. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
  725. [IntrNoMem]>;
  726. def int_x86_sse41_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw128">,
  727. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
  728. [IntrNoMem]>;
  729. def int_x86_sse41_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq128">,
  730. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
  731. [IntrNoMem]>;
  732. def int_x86_sse41_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd128">,
  733. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
  734. [IntrNoMem]>;
  735. def int_x86_sse41_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq128">,
  736. Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
  737. [IntrNoMem]>;
  738. }
  739. // Vector min element
  740. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  741. def int_x86_sse41_phminposuw : GCCBuiltin<"__builtin_ia32_phminposuw128">,
  742. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty],
  743. [IntrNoMem]>;
  744. }
  745. // Vector compare, min, max
  746. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  747. def int_x86_sse41_pmaxsb : GCCBuiltin<"__builtin_ia32_pmaxsb128">,
  748. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  749. [IntrNoMem, Commutative]>;
  750. def int_x86_sse41_pmaxsd : GCCBuiltin<"__builtin_ia32_pmaxsd128">,
  751. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  752. [IntrNoMem, Commutative]>;
  753. def int_x86_sse41_pmaxud : GCCBuiltin<"__builtin_ia32_pmaxud128">,
  754. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  755. [IntrNoMem, Commutative]>;
  756. def int_x86_sse41_pmaxuw : GCCBuiltin<"__builtin_ia32_pmaxuw128">,
  757. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  758. [IntrNoMem, Commutative]>;
  759. def int_x86_sse41_pminsb : GCCBuiltin<"__builtin_ia32_pminsb128">,
  760. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  761. [IntrNoMem, Commutative]>;
  762. def int_x86_sse41_pminsd : GCCBuiltin<"__builtin_ia32_pminsd128">,
  763. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  764. [IntrNoMem, Commutative]>;
  765. def int_x86_sse41_pminud : GCCBuiltin<"__builtin_ia32_pminud128">,
  766. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  767. [IntrNoMem, Commutative]>;
  768. def int_x86_sse41_pminuw : GCCBuiltin<"__builtin_ia32_pminuw128">,
  769. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  770. [IntrNoMem, Commutative]>;
  771. }
  772. // Advanced Encryption Standard (AES) Instructions
  773. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  774. def int_x86_aesni_aesimc : GCCBuiltin<"__builtin_ia32_aesimc128">,
  775. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty],
  776. [IntrNoMem]>;
  777. def int_x86_aesni_aesenc : GCCBuiltin<"__builtin_ia32_aesenc128">,
  778. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  779. [IntrNoMem]>;
  780. def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
  781. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  782. [IntrNoMem]>;
  783. def int_x86_aesni_aesdec : GCCBuiltin<"__builtin_ia32_aesdec128">,
  784. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  785. [IntrNoMem]>;
  786. def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
  787. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  788. [IntrNoMem]>;
  789. def int_x86_aesni_aeskeygenassist :
  790. GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
  791. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
  792. [IntrNoMem]>;
  793. }
  794. // PCLMUL instruction
  795. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  796. def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">,
  797. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  798. [IntrNoMem]>;
  799. }
  800. // Vector pack
  801. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  802. def int_x86_sse41_packusdw : GCCBuiltin<"__builtin_ia32_packusdw128">,
  803. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  804. [IntrNoMem]>;
  805. }
  806. // Vector multiply
  807. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  808. def int_x86_sse41_pmuldq : GCCBuiltin<"__builtin_ia32_pmuldq128">,
  809. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  810. [IntrNoMem, Commutative]>;
  811. }
  812. // Vector extract
  813. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  814. def int_x86_sse41_pextrb :
  815. Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty],
  816. [IntrNoMem]>;
  817. def int_x86_sse41_pextrd :
  818. Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty],
  819. [IntrNoMem]>;
  820. def int_x86_sse41_pextrq :
  821. Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty],
  822. [IntrNoMem]>;
  823. def int_x86_sse41_extractps : GCCBuiltin<"__builtin_ia32_extractps128">,
  824. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
  825. [IntrNoMem]>;
  826. }
  827. // Vector insert
  828. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  829. def int_x86_sse41_insertps : GCCBuiltin<"__builtin_ia32_insertps128">,
  830. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  831. [IntrNoMem]>;
  832. }
  833. // Vector blend
  834. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  835. def int_x86_sse41_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb128">,
  836. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty],
  837. [IntrNoMem]>;
  838. def int_x86_sse41_blendvpd : GCCBuiltin<"__builtin_ia32_blendvpd">,
  839. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
  840. [IntrNoMem]>;
  841. def int_x86_sse41_blendvps : GCCBuiltin<"__builtin_ia32_blendvps">,
  842. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
  843. [IntrNoMem]>;
  844. }
  845. // Vector dot product
  846. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  847. def int_x86_sse41_dppd : GCCBuiltin<"__builtin_ia32_dppd">,
  848. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  849. [IntrNoMem, Commutative]>;
  850. def int_x86_sse41_dpps : GCCBuiltin<"__builtin_ia32_dpps">,
  851. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  852. [IntrNoMem, Commutative]>;
  853. }
  854. // Vector sum of absolute differences
  855. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  856. def int_x86_sse41_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw128">,
  857. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i8_ty],
  858. [IntrNoMem, Commutative]>;
  859. }
  860. // Cacheability support ops
  861. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  862. def int_x86_sse41_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa">,
  863. Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
  864. }
  865. // Test instruction with bitwise comparison.
  866. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  867. def int_x86_sse41_ptestz : GCCBuiltin<"__builtin_ia32_ptestz128">,
  868. Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  869. [IntrNoMem]>;
  870. def int_x86_sse41_ptestc : GCCBuiltin<"__builtin_ia32_ptestc128">,
  871. Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  872. [IntrNoMem]>;
  873. def int_x86_sse41_ptestnzc : GCCBuiltin<"__builtin_ia32_ptestnzc128">,
  874. Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  875. [IntrNoMem]>;
  876. }
  877. //===----------------------------------------------------------------------===//
  878. // SSE4.2
  879. // Miscellaneous
  880. // CRC Instruction
  881. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  882. def int_x86_sse42_crc32_32_8 : GCCBuiltin<"__builtin_ia32_crc32qi">,
  883. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty],
  884. [IntrNoMem]>;
  885. def int_x86_sse42_crc32_32_16 : GCCBuiltin<"__builtin_ia32_crc32hi">,
  886. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
  887. [IntrNoMem]>;
  888. def int_x86_sse42_crc32_32_32 : GCCBuiltin<"__builtin_ia32_crc32si">,
  889. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
  890. [IntrNoMem]>;
  891. def int_x86_sse42_crc32_64_64 : GCCBuiltin<"__builtin_ia32_crc32di">,
  892. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
  893. [IntrNoMem]>;
  894. }
  895. // String/text processing ops.
  896. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  897. def int_x86_sse42_pcmpistrm128 : GCCBuiltin<"__builtin_ia32_pcmpistrm128">,
  898. Intrinsic<[llvm_v16i8_ty],
  899. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  900. [IntrNoMem]>;
  901. def int_x86_sse42_pcmpistri128 : GCCBuiltin<"__builtin_ia32_pcmpistri128">,
  902. Intrinsic<[llvm_i32_ty],
  903. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  904. [IntrNoMem]>;
  905. def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">,
  906. Intrinsic<[llvm_i32_ty],
  907. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  908. [IntrNoMem]>;
  909. def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">,
  910. Intrinsic<[llvm_i32_ty],
  911. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  912. [IntrNoMem]>;
  913. def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">,
  914. Intrinsic<[llvm_i32_ty],
  915. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  916. [IntrNoMem]>;
  917. def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">,
  918. Intrinsic<[llvm_i32_ty],
  919. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  920. [IntrNoMem]>;
  921. def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">,
  922. Intrinsic<[llvm_i32_ty],
  923. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
  924. [IntrNoMem]>;
  925. def int_x86_sse42_pcmpestrm128 : GCCBuiltin<"__builtin_ia32_pcmpestrm128">,
  926. Intrinsic<[llvm_v16i8_ty],
  927. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  928. llvm_i8_ty],
  929. [IntrNoMem]>;
  930. def int_x86_sse42_pcmpestri128 : GCCBuiltin<"__builtin_ia32_pcmpestri128">,
  931. Intrinsic<[llvm_i32_ty],
  932. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  933. llvm_i8_ty],
  934. [IntrNoMem]>;
  935. def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">,
  936. Intrinsic<[llvm_i32_ty],
  937. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  938. llvm_i8_ty],
  939. [IntrNoMem]>;
  940. def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">,
  941. Intrinsic<[llvm_i32_ty],
  942. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  943. llvm_i8_ty],
  944. [IntrNoMem]>;
  945. def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">,
  946. Intrinsic<[llvm_i32_ty],
  947. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  948. llvm_i8_ty],
  949. [IntrNoMem]>;
  950. def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">,
  951. Intrinsic<[llvm_i32_ty],
  952. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  953. llvm_i8_ty],
  954. [IntrNoMem]>;
  955. def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">,
  956. Intrinsic<[llvm_i32_ty],
  957. [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
  958. llvm_i8_ty],
  959. [IntrNoMem]>;
  960. }
  961. //===----------------------------------------------------------------------===//
  962. // SSE4A
  963. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  964. def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">,
  965. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
  966. [IntrNoMem]>;
  967. def int_x86_sse4a_extrq : GCCBuiltin<"__builtin_ia32_extrq">,
  968. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>;
  969. def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">,
  970. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  971. llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>;
  972. def int_x86_sse4a_insertq : GCCBuiltin<"__builtin_ia32_insertq">,
  973. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
  974. def int_x86_sse4a_movnt_ss : GCCBuiltin<"__builtin_ia32_movntss">,
  975. Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty], []>;
  976. def int_x86_sse4a_movnt_sd : GCCBuiltin<"__builtin_ia32_movntsd">,
  977. Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty], []>;
  978. }
  979. //===----------------------------------------------------------------------===//
  980. // AVX
  981. // Arithmetic ops
  982. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  983. def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">,
  984. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  985. llvm_v4f64_ty], [IntrNoMem]>;
  986. def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">,
  987. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  988. llvm_v8f32_ty], [IntrNoMem]>;
  989. def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">,
  990. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  991. llvm_v4f64_ty], [IntrNoMem]>;
  992. def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
  993. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  994. llvm_v8f32_ty], [IntrNoMem]>;
  995. def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">,
  996. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  997. llvm_v4f64_ty], [IntrNoMem]>;
  998. def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">,
  999. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1000. llvm_v8f32_ty], [IntrNoMem]>;
  1001. def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
  1002. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  1003. def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
  1004. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1005. def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
  1006. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1007. def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">,
  1008. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1009. def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
  1010. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1011. llvm_i32_ty], [IntrNoMem]>;
  1012. def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
  1013. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1014. llvm_i32_ty], [IntrNoMem]>;
  1015. }
  1016. // Horizontal ops
  1017. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1018. def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">,
  1019. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1020. llvm_v4f64_ty], [IntrNoMem]>;
  1021. def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">,
  1022. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1023. llvm_v8f32_ty], [IntrNoMem]>;
  1024. def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">,
  1025. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1026. llvm_v4f64_ty], [IntrNoMem]>;
  1027. def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">,
  1028. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1029. llvm_v8f32_ty], [IntrNoMem]>;
  1030. }
  1031. // Vector permutation
  1032. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1033. def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">,
  1034. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  1035. llvm_v2i64_ty], [IntrNoMem]>;
  1036. def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">,
  1037. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  1038. llvm_v4i32_ty], [IntrNoMem]>;
  1039. def int_x86_avx_vpermilvar_pd_256 :
  1040. GCCBuiltin<"__builtin_ia32_vpermilvarpd256">,
  1041. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>;
  1042. def int_x86_avx_vpermilvar_ps_256 :
  1043. GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
  1044. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
  1045. def int_x86_avx_vperm2f128_pd_256 :
  1046. GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">,
  1047. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1048. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  1049. def int_x86_avx_vperm2f128_ps_256 :
  1050. GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">,
  1051. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1052. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  1053. def int_x86_avx_vperm2f128_si_256 :
  1054. GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
  1055. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1056. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1057. def int_x86_avx512_mask_vpermi2var_d_128 :
  1058. GCCBuiltin<"__builtin_ia32_vpermi2vard128_mask">,
  1059. Intrinsic<[llvm_v4i32_ty],
  1060. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  1061. [IntrNoMem]>;
  1062. def int_x86_avx512_mask_vpermi2var_d_256 :
  1063. GCCBuiltin<"__builtin_ia32_vpermi2vard256_mask">,
  1064. Intrinsic<[llvm_v8i32_ty],
  1065. [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  1066. [IntrNoMem]>;
  1067. def int_x86_avx512_mask_vpermi2var_d_512 :
  1068. GCCBuiltin<"__builtin_ia32_vpermi2vard512_mask">,
  1069. Intrinsic<[llvm_v16i32_ty],
  1070. [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  1071. [IntrNoMem]>;
  1072. def int_x86_avx512_mask_vpermi2var_hi_128 :
  1073. GCCBuiltin<"__builtin_ia32_vpermi2varhi128_mask">,
  1074. Intrinsic<[llvm_v8i16_ty],
  1075. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  1076. [IntrNoMem]>;
  1077. def int_x86_avx512_mask_vpermi2var_hi_256 :
  1078. GCCBuiltin<"__builtin_ia32_vpermi2varhi256_mask">,
  1079. Intrinsic<[llvm_v16i16_ty],
  1080. [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  1081. [IntrNoMem]>;
  1082. def int_x86_avx512_mask_vpermi2var_hi_512 :
  1083. GCCBuiltin<"__builtin_ia32_vpermi2varhi512_mask">,
  1084. Intrinsic<[llvm_v32i16_ty],
  1085. [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  1086. [IntrNoMem]>;
  1087. def int_x86_avx512_mask_vpermi2var_pd_128 :
  1088. GCCBuiltin<"__builtin_ia32_vpermi2varpd128_mask">,
  1089. Intrinsic<[llvm_v2f64_ty],
  1090. [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
  1091. [IntrNoMem]>;
  1092. def int_x86_avx512_mask_vpermi2var_pd_256 :
  1093. GCCBuiltin<"__builtin_ia32_vpermi2varpd256_mask">,
  1094. Intrinsic<[llvm_v4f64_ty],
  1095. [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
  1096. [IntrNoMem]>;
  1097. def int_x86_avx512_mask_vpermi2var_pd_512 :
  1098. GCCBuiltin<"__builtin_ia32_vpermi2varpd512_mask">,
  1099. Intrinsic<[llvm_v8f64_ty],
  1100. [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
  1101. [IntrNoMem]>;
  1102. def int_x86_avx512_mask_vpermi2var_ps_128 :
  1103. GCCBuiltin<"__builtin_ia32_vpermi2varps128_mask">,
  1104. Intrinsic<[llvm_v4f32_ty],
  1105. [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
  1106. [IntrNoMem]>;
  1107. def int_x86_avx512_mask_vpermi2var_ps_256 :
  1108. GCCBuiltin<"__builtin_ia32_vpermi2varps256_mask">,
  1109. Intrinsic<[llvm_v8f32_ty],
  1110. [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
  1111. [IntrNoMem]>;
  1112. def int_x86_avx512_mask_vpermi2var_ps_512 :
  1113. GCCBuiltin<"__builtin_ia32_vpermi2varps512_mask">,
  1114. Intrinsic<[llvm_v16f32_ty],
  1115. [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
  1116. [IntrNoMem]>;
  1117. def int_x86_avx512_mask_vpermi2var_q_128 :
  1118. GCCBuiltin<"__builtin_ia32_vpermi2varq128_mask">,
  1119. Intrinsic<[llvm_v2i64_ty],
  1120. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  1121. [IntrNoMem]>;
  1122. def int_x86_avx512_mask_vpermi2var_q_256 :
  1123. GCCBuiltin<"__builtin_ia32_vpermi2varq256_mask">,
  1124. Intrinsic<[llvm_v4i64_ty],
  1125. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  1126. [IntrNoMem]>;
  1127. def int_x86_avx512_mask_vpermi2var_q_512 :
  1128. GCCBuiltin<"__builtin_ia32_vpermi2varq512_mask">,
  1129. Intrinsic<[llvm_v8i64_ty],
  1130. [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  1131. [IntrNoMem]>;
  1132. def int_x86_avx512_mask_vpermt2var_d_512:
  1133. GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
  1134. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1135. llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1136. def int_x86_avx512_mask_vpermt2var_q_512:
  1137. GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
  1138. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1139. llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1140. def int_x86_avx512_mask_vpermt2var_ps_512:
  1141. GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
  1142. Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
  1143. llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
  1144. def int_x86_avx512_mask_vpermt2var_pd_512:
  1145. GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
  1146. Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
  1147. llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
  1148. def int_x86_avx512_mask_vpermt2var_d_128 :
  1149. GCCBuiltin<"__builtin_ia32_vpermt2vard128_mask">,
  1150. Intrinsic<[llvm_v4i32_ty],
  1151. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  1152. [IntrNoMem]>;
  1153. def int_x86_avx512_maskz_vpermt2var_d_128 :
  1154. GCCBuiltin<"__builtin_ia32_vpermt2vard128_maskz">,
  1155. Intrinsic<[llvm_v4i32_ty],
  1156. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  1157. [IntrNoMem]>;
  1158. def int_x86_avx512_mask_vpermt2var_d_256 :
  1159. GCCBuiltin<"__builtin_ia32_vpermt2vard256_mask">,
  1160. Intrinsic<[llvm_v8i32_ty],
  1161. [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  1162. [IntrNoMem]>;
  1163. def int_x86_avx512_maskz_vpermt2var_d_256 :
  1164. GCCBuiltin<"__builtin_ia32_vpermt2vard256_maskz">,
  1165. Intrinsic<[llvm_v8i32_ty],
  1166. [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  1167. [IntrNoMem]>;
  1168. def int_x86_avx512_maskz_vpermt2var_d_512 :
  1169. GCCBuiltin<"__builtin_ia32_vpermt2vard512_maskz">,
  1170. Intrinsic<[llvm_v16i32_ty],
  1171. [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  1172. [IntrNoMem]>;
  1173. def int_x86_avx512_mask_vpermt2var_hi_128 :
  1174. GCCBuiltin<"__builtin_ia32_vpermt2varhi128_mask">,
  1175. Intrinsic<[llvm_v8i16_ty],
  1176. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  1177. [IntrNoMem]>;
  1178. def int_x86_avx512_maskz_vpermt2var_hi_128 :
  1179. GCCBuiltin<"__builtin_ia32_vpermt2varhi128_maskz">,
  1180. Intrinsic<[llvm_v8i16_ty],
  1181. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  1182. [IntrNoMem]>;
  1183. def int_x86_avx512_mask_vpermt2var_hi_256 :
  1184. GCCBuiltin<"__builtin_ia32_vpermt2varhi256_mask">,
  1185. Intrinsic<[llvm_v16i16_ty],
  1186. [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  1187. [IntrNoMem]>;
  1188. def int_x86_avx512_maskz_vpermt2var_hi_256 :
  1189. GCCBuiltin<"__builtin_ia32_vpermt2varhi256_maskz">,
  1190. Intrinsic<[llvm_v16i16_ty],
  1191. [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  1192. [IntrNoMem]>;
  1193. def int_x86_avx512_mask_vpermt2var_hi_512 :
  1194. GCCBuiltin<"__builtin_ia32_vpermt2varhi512_mask">,
  1195. Intrinsic<[llvm_v32i16_ty],
  1196. [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  1197. [IntrNoMem]>;
  1198. def int_x86_avx512_maskz_vpermt2var_hi_512 :
  1199. GCCBuiltin<"__builtin_ia32_vpermt2varhi512_maskz">,
  1200. Intrinsic<[llvm_v32i16_ty],
  1201. [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  1202. [IntrNoMem]>;
  1203. def int_x86_avx512_mask_vpermt2var_pd_128 :
  1204. GCCBuiltin<"__builtin_ia32_vpermt2varpd128_mask">,
  1205. Intrinsic<[llvm_v2f64_ty],
  1206. [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  1207. [IntrNoMem]>;
  1208. def int_x86_avx512_maskz_vpermt2var_pd_128 :
  1209. GCCBuiltin<"__builtin_ia32_vpermt2varpd128_maskz">,
  1210. Intrinsic<[llvm_v2f64_ty],
  1211. [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  1212. [IntrNoMem]>;
  1213. def int_x86_avx512_mask_vpermt2var_pd_256 :
  1214. GCCBuiltin<"__builtin_ia32_vpermt2varpd256_mask">,
  1215. Intrinsic<[llvm_v4f64_ty],
  1216. [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  1217. [IntrNoMem]>;
  1218. def int_x86_avx512_maskz_vpermt2var_pd_256 :
  1219. GCCBuiltin<"__builtin_ia32_vpermt2varpd256_maskz">,
  1220. Intrinsic<[llvm_v4f64_ty],
  1221. [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  1222. [IntrNoMem]>;
  1223. def int_x86_avx512_maskz_vpermt2var_pd_512 :
  1224. GCCBuiltin<"__builtin_ia32_vpermt2varpd512_maskz">,
  1225. Intrinsic<[llvm_v8f64_ty],
  1226. [llvm_v8i64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
  1227. [IntrNoMem]>;
  1228. def int_x86_avx512_mask_vpermt2var_ps_128 :
  1229. GCCBuiltin<"__builtin_ia32_vpermt2varps128_mask">,
  1230. Intrinsic<[llvm_v4f32_ty],
  1231. [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  1232. [IntrNoMem]>;
  1233. def int_x86_avx512_maskz_vpermt2var_ps_128 :
  1234. GCCBuiltin<"__builtin_ia32_vpermt2varps128_maskz">,
  1235. Intrinsic<[llvm_v4f32_ty],
  1236. [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  1237. [IntrNoMem]>;
  1238. def int_x86_avx512_mask_vpermt2var_ps_256 :
  1239. GCCBuiltin<"__builtin_ia32_vpermt2varps256_mask">,
  1240. Intrinsic<[llvm_v8f32_ty],
  1241. [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  1242. [IntrNoMem]>;
  1243. def int_x86_avx512_maskz_vpermt2var_ps_256 :
  1244. GCCBuiltin<"__builtin_ia32_vpermt2varps256_maskz">,
  1245. Intrinsic<[llvm_v8f32_ty],
  1246. [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  1247. [IntrNoMem]>;
  1248. def int_x86_avx512_maskz_vpermt2var_ps_512 :
  1249. GCCBuiltin<"__builtin_ia32_vpermt2varps512_maskz">,
  1250. Intrinsic<[llvm_v16f32_ty],
  1251. [llvm_v16i32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
  1252. [IntrNoMem]>;
  1253. def int_x86_avx512_mask_vpermt2var_q_128 :
  1254. GCCBuiltin<"__builtin_ia32_vpermt2varq128_mask">,
  1255. Intrinsic<[llvm_v2i64_ty],
  1256. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  1257. [IntrNoMem]>;
  1258. def int_x86_avx512_maskz_vpermt2var_q_128 :
  1259. GCCBuiltin<"__builtin_ia32_vpermt2varq128_maskz">,
  1260. Intrinsic<[llvm_v2i64_ty],
  1261. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  1262. [IntrNoMem]>;
  1263. def int_x86_avx512_mask_vpermt2var_q_256 :
  1264. GCCBuiltin<"__builtin_ia32_vpermt2varq256_mask">,
  1265. Intrinsic<[llvm_v4i64_ty],
  1266. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  1267. [IntrNoMem]>;
  1268. def int_x86_avx512_maskz_vpermt2var_q_256 :
  1269. GCCBuiltin<"__builtin_ia32_vpermt2varq256_maskz">,
  1270. Intrinsic<[llvm_v4i64_ty],
  1271. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  1272. [IntrNoMem]>;
  1273. def int_x86_avx512_maskz_vpermt2var_q_512 :
  1274. GCCBuiltin<"__builtin_ia32_vpermt2varq512_maskz">,
  1275. Intrinsic<[llvm_v8i64_ty],
  1276. [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  1277. [IntrNoMem]>;
  1278. def int_x86_avx512_mask_pshuf_b_128 :
  1279. GCCBuiltin<"__builtin_ia32_pshufb128_mask">,
  1280. Intrinsic<[llvm_v16i8_ty],
  1281. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
  1282. [IntrNoMem]>;
  1283. def int_x86_avx512_mask_pshuf_b_256 :
  1284. GCCBuiltin<"__builtin_ia32_pshufb256_mask">,
  1285. Intrinsic<[llvm_v32i8_ty],
  1286. [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
  1287. [IntrNoMem]>;
  1288. def int_x86_avx512_mask_pshuf_b_512 :
  1289. GCCBuiltin<"__builtin_ia32_pshufb512_mask">,
  1290. Intrinsic<[llvm_v64i8_ty],
  1291. [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
  1292. [IntrNoMem]>;
  1293. }
  1294. // Vector blend
  1295. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1296. def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">,
  1297. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1298. llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>;
  1299. def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">,
  1300. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1301. llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>;
  1302. }
  1303. // Vector dot product
  1304. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1305. def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
  1306. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1307. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  1308. }
  1309. // Vector compare
  1310. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1311. def int_x86_avx_cmp_pd_256 : GCCBuiltin<"__builtin_ia32_cmppd256">,
  1312. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
  1313. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  1314. def int_x86_avx_cmp_ps_256 : GCCBuiltin<"__builtin_ia32_cmpps256">,
  1315. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
  1316. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  1317. }
  1318. // Vector convert
  1319. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1320. def int_x86_avx_cvtdq2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtdq2pd256">,
  1321. Intrinsic<[llvm_v4f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  1322. def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
  1323. Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
  1324. def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
  1325. Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  1326. def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
  1327. Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1328. def int_x86_avx_cvt_ps2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtps2pd256">,
  1329. Intrinsic<[llvm_v4f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  1330. def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">,
  1331. Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  1332. def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">,
  1333. Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  1334. def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">,
  1335. Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1336. }
  1337. // Vector bit test
  1338. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1339. def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">,
  1340. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  1341. llvm_v2f64_ty], [IntrNoMem]>;
  1342. def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">,
  1343. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  1344. llvm_v2f64_ty], [IntrNoMem]>;
  1345. def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">,
  1346. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
  1347. llvm_v2f64_ty], [IntrNoMem]>;
  1348. def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">,
  1349. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  1350. llvm_v4f32_ty], [IntrNoMem]>;
  1351. def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">,
  1352. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  1353. llvm_v4f32_ty], [IntrNoMem]>;
  1354. def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">,
  1355. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
  1356. llvm_v4f32_ty], [IntrNoMem]>;
  1357. def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">,
  1358. Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
  1359. llvm_v4f64_ty], [IntrNoMem]>;
  1360. def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">,
  1361. Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
  1362. llvm_v4f64_ty], [IntrNoMem]>;
  1363. def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">,
  1364. Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
  1365. llvm_v4f64_ty], [IntrNoMem]>;
  1366. def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">,
  1367. Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
  1368. llvm_v8f32_ty], [IntrNoMem]>;
  1369. def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">,
  1370. Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
  1371. llvm_v8f32_ty], [IntrNoMem]>;
  1372. def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">,
  1373. Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
  1374. llvm_v8f32_ty], [IntrNoMem]>;
  1375. def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">,
  1376. Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
  1377. llvm_v4i64_ty], [IntrNoMem]>;
  1378. def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">,
  1379. Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
  1380. llvm_v4i64_ty], [IntrNoMem]>;
  1381. def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">,
  1382. Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
  1383. llvm_v4i64_ty], [IntrNoMem]>;
  1384. def int_x86_avx512_mask_ptestm_d_512 : GCCBuiltin<"__builtin_ia32_ptestmd512">,
  1385. Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  1386. llvm_i16_ty], [IntrNoMem]>;
  1387. def int_x86_avx512_mask_ptestm_q_512 : GCCBuiltin<"__builtin_ia32_ptestmq512">,
  1388. Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  1389. llvm_i8_ty], [IntrNoMem]>;
  1390. }
  1391. // Vector extract sign mask
  1392. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1393. def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">,
  1394. Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  1395. def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">,
  1396. Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  1397. }
  1398. // Vector zero
  1399. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1400. def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">,
  1401. Intrinsic<[], [], []>;
  1402. def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">,
  1403. Intrinsic<[], [], []>;
  1404. }
  1405. // Vector load with broadcast
  1406. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1407. def int_x86_avx_vbroadcastf128_pd_256 :
  1408. GCCBuiltin<"__builtin_ia32_vbroadcastf128_pd256">,
  1409. Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
  1410. def int_x86_avx_vbroadcastf128_ps_256 :
  1411. GCCBuiltin<"__builtin_ia32_vbroadcastf128_ps256">,
  1412. Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
  1413. }
  1414. // SIMD load ops
  1415. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1416. def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">,
  1417. Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
  1418. }
  1419. // SIMD store ops
  1420. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1421. def int_x86_avx_storeu_pd_256 : GCCBuiltin<"__builtin_ia32_storeupd256">,
  1422. Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
  1423. def int_x86_avx_storeu_ps_256 : GCCBuiltin<"__builtin_ia32_storeups256">,
  1424. Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
  1425. def int_x86_avx_storeu_dq_256 : GCCBuiltin<"__builtin_ia32_storedqu256">,
  1426. Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty], [IntrReadWriteArgMem]>;
  1427. }
  1428. // Conditional load ops
  1429. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1430. def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">,
  1431. Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty],
  1432. [IntrReadArgMem]>;
  1433. def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">,
  1434. Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty],
  1435. [IntrReadArgMem]>;
  1436. def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">,
  1437. Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty],
  1438. [IntrReadArgMem]>;
  1439. def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">,
  1440. Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty],
  1441. [IntrReadArgMem]>;
  1442. def int_x86_avx512_mask_loadu_ps_512 : GCCBuiltin<"__builtin_ia32_loadups512_mask">,
  1443. Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
  1444. [IntrReadArgMem]>;
  1445. def int_x86_avx512_mask_loadu_pd_512 : GCCBuiltin<"__builtin_ia32_loadupd512_mask">,
  1446. Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
  1447. [IntrReadArgMem]>;
  1448. def int_x86_avx512_mask_load_ps_512 : GCCBuiltin<"__builtin_ia32_loadaps512_mask">,
  1449. Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
  1450. [IntrReadArgMem]>;
  1451. def int_x86_avx512_mask_load_pd_512 : GCCBuiltin<"__builtin_ia32_loadapd512_mask">,
  1452. Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
  1453. [IntrReadArgMem]>;
  1454. }
  1455. // Conditional store ops
  1456. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1457. def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">,
  1458. Intrinsic<[], [llvm_ptr_ty,
  1459. llvm_v2f64_ty, llvm_v2f64_ty], [IntrReadWriteArgMem]>;
  1460. def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">,
  1461. Intrinsic<[], [llvm_ptr_ty,
  1462. llvm_v4f32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
  1463. def int_x86_avx_maskstore_pd_256 :
  1464. GCCBuiltin<"__builtin_ia32_maskstorepd256">,
  1465. Intrinsic<[], [llvm_ptr_ty,
  1466. llvm_v4f64_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
  1467. def int_x86_avx_maskstore_ps_256 :
  1468. GCCBuiltin<"__builtin_ia32_maskstoreps256">,
  1469. Intrinsic<[], [llvm_ptr_ty,
  1470. llvm_v8f32_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
  1471. def int_x86_avx512_mask_storeu_ps_512 :
  1472. GCCBuiltin<"__builtin_ia32_storeups512_mask">,
  1473. Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
  1474. [IntrReadWriteArgMem]>;
  1475. def int_x86_avx512_mask_storeu_pd_512 :
  1476. GCCBuiltin<"__builtin_ia32_storeupd512_mask">,
  1477. Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
  1478. [IntrReadWriteArgMem]>;
  1479. def int_x86_avx512_mask_store_ps_512 :
  1480. GCCBuiltin<"__builtin_ia32_storeaps512_mask">,
  1481. Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
  1482. [IntrReadWriteArgMem]>;
  1483. def int_x86_avx512_mask_store_pd_512 :
  1484. GCCBuiltin<"__builtin_ia32_storeapd512_mask">,
  1485. Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
  1486. [IntrReadWriteArgMem]>;
  1487. def int_x86_avx512_mask_store_ss :
  1488. GCCBuiltin<"__builtin_ia32_storess_mask">,
  1489. Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty, llvm_i8_ty],
  1490. [IntrReadWriteArgMem]>;
  1491. }
  1492. //===----------------------------------------------------------------------===//
  1493. // AVX2
  1494. // Integer arithmetic ops.
  1495. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1496. def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">,
  1497. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1498. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1499. def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">,
  1500. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1501. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1502. def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">,
  1503. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1504. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1505. def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">,
  1506. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1507. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1508. def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">,
  1509. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1510. llvm_v32i8_ty], [IntrNoMem]>;
  1511. def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">,
  1512. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1513. llvm_v16i16_ty], [IntrNoMem]>;
  1514. def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">,
  1515. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1516. llvm_v32i8_ty], [IntrNoMem]>;
  1517. def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">,
  1518. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1519. llvm_v16i16_ty], [IntrNoMem]>;
  1520. def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">,
  1521. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1522. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1523. def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">,
  1524. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1525. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1526. def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">,
  1527. Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
  1528. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1529. def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">,
  1530. Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
  1531. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1532. def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
  1533. Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
  1534. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1535. def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">,
  1536. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1537. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1538. def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">,
  1539. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1540. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1541. def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">,
  1542. Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty,
  1543. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1544. }
  1545. // Vector min, max
  1546. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1547. def int_x86_avx2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub256">,
  1548. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1549. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1550. def int_x86_avx2_pmaxu_w : GCCBuiltin<"__builtin_ia32_pmaxuw256">,
  1551. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1552. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1553. def int_x86_avx2_pmaxu_d : GCCBuiltin<"__builtin_ia32_pmaxud256">,
  1554. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1555. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1556. def int_x86_avx2_pmaxs_b : GCCBuiltin<"__builtin_ia32_pmaxsb256">,
  1557. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1558. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1559. def int_x86_avx2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw256">,
  1560. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1561. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1562. def int_x86_avx2_pmaxs_d : GCCBuiltin<"__builtin_ia32_pmaxsd256">,
  1563. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1564. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1565. def int_x86_avx2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub256">,
  1566. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1567. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1568. def int_x86_avx2_pminu_w : GCCBuiltin<"__builtin_ia32_pminuw256">,
  1569. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1570. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1571. def int_x86_avx2_pminu_d : GCCBuiltin<"__builtin_ia32_pminud256">,
  1572. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1573. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1574. def int_x86_avx2_pmins_b : GCCBuiltin<"__builtin_ia32_pminsb256">,
  1575. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1576. llvm_v32i8_ty], [IntrNoMem, Commutative]>;
  1577. def int_x86_avx2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw256">,
  1578. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1579. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1580. def int_x86_avx2_pmins_d : GCCBuiltin<"__builtin_ia32_pminsd256">,
  1581. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1582. llvm_v8i32_ty], [IntrNoMem, Commutative]>;
  1583. def int_x86_avx512_mask_pmaxs_b_128 : GCCBuiltin<"__builtin_ia32_pmaxsb128_mask">,
  1584. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  1585. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  1586. def int_x86_avx512_mask_pmaxs_b_256 : GCCBuiltin<"__builtin_ia32_pmaxsb256_mask">,
  1587. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  1588. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1589. def int_x86_avx512_mask_pmaxs_b_512 : GCCBuiltin<"__builtin_ia32_pmaxsb512_mask">,
  1590. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  1591. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  1592. def int_x86_avx512_mask_pmaxu_b_128 : GCCBuiltin<"__builtin_ia32_pmaxub128_mask">,
  1593. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  1594. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  1595. def int_x86_avx512_mask_pmaxu_b_256 : GCCBuiltin<"__builtin_ia32_pmaxub256_mask">,
  1596. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  1597. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1598. def int_x86_avx512_mask_pmaxu_b_512 : GCCBuiltin<"__builtin_ia32_pmaxub512_mask">,
  1599. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  1600. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  1601. def int_x86_avx512_mask_pmaxs_w_128 : GCCBuiltin<"__builtin_ia32_pmaxsw128_mask">,
  1602. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  1603. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  1604. def int_x86_avx512_mask_pmaxs_w_256 : GCCBuiltin<"__builtin_ia32_pmaxsw256_mask">,
  1605. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  1606. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  1607. def int_x86_avx512_mask_pmaxs_w_512 : GCCBuiltin<"__builtin_ia32_pmaxsw512_mask">,
  1608. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  1609. llvm_v32i16_ty, llvm_i32_ty],[IntrNoMem]>;
  1610. def int_x86_avx512_mask_pmaxu_w_128 : GCCBuiltin<"__builtin_ia32_pmaxuw128_mask">,
  1611. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  1612. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  1613. def int_x86_avx512_mask_pmaxu_w_256 : GCCBuiltin<"__builtin_ia32_pmaxuw256_mask">,
  1614. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  1615. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  1616. def int_x86_avx512_mask_pmaxu_w_512 : GCCBuiltin<"__builtin_ia32_pmaxuw512_mask">,
  1617. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  1618. llvm_v32i16_ty, llvm_i32_ty],[IntrNoMem]>;
  1619. def int_x86_avx512_mask_pmins_b_128 : GCCBuiltin<"__builtin_ia32_pminsb128_mask">,
  1620. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  1621. llvm_v16i8_ty,llvm_i16_ty], [IntrNoMem]>;
  1622. def int_x86_avx512_mask_pmins_b_256 : GCCBuiltin<"__builtin_ia32_pminsb256_mask">,
  1623. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  1624. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1625. def int_x86_avx512_mask_pmins_b_512 : GCCBuiltin<"__builtin_ia32_pminsb512_mask">,
  1626. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  1627. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  1628. def int_x86_avx512_mask_pminu_b_128 : GCCBuiltin<"__builtin_ia32_pminub128_mask">,
  1629. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  1630. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  1631. def int_x86_avx512_mask_pminu_b_256 : GCCBuiltin<"__builtin_ia32_pminub256_mask">,
  1632. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  1633. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  1634. def int_x86_avx512_mask_pminu_b_512 : GCCBuiltin<"__builtin_ia32_pminub512_mask">,
  1635. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  1636. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  1637. def int_x86_avx512_mask_pmins_w_128 : GCCBuiltin<"__builtin_ia32_pminsw128_mask">,
  1638. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  1639. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  1640. def int_x86_avx512_mask_pmins_w_256 : GCCBuiltin<"__builtin_ia32_pminsw256_mask">,
  1641. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  1642. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  1643. def int_x86_avx512_mask_pmins_w_512 : GCCBuiltin<"__builtin_ia32_pminsw512_mask">,
  1644. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  1645. llvm_v32i16_ty, llvm_i32_ty],[IntrNoMem]>;
  1646. def int_x86_avx512_mask_pminu_w_128 : GCCBuiltin<"__builtin_ia32_pminuw128_mask">,
  1647. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  1648. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  1649. def int_x86_avx512_mask_pminu_w_256 : GCCBuiltin<"__builtin_ia32_pminuw256_mask">,
  1650. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  1651. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  1652. def int_x86_avx512_mask_pminu_w_512 : GCCBuiltin<"__builtin_ia32_pminuw512_mask">,
  1653. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  1654. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  1655. def int_x86_avx512_mask_pmaxu_d_512 : GCCBuiltin<"__builtin_ia32_pmaxud512_mask">,
  1656. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  1657. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1658. def int_x86_avx512_mask_pmaxu_d_256 : GCCBuiltin<"__builtin_ia32_pmaxud256_mask">,
  1659. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  1660. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1661. def int_x86_avx512_mask_pmaxu_d_128 : GCCBuiltin<"__builtin_ia32_pmaxud128_mask">,
  1662. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  1663. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1664. def int_x86_avx512_mask_pmaxs_d_512 : GCCBuiltin<"__builtin_ia32_pmaxsd512_mask">,
  1665. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  1666. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1667. def int_x86_avx512_mask_pmaxs_d_256 : GCCBuiltin<"__builtin_ia32_pmaxsd256_mask">,
  1668. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  1669. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1670. def int_x86_avx512_mask_pmaxs_d_128 : GCCBuiltin<"__builtin_ia32_pmaxsd128_mask">,
  1671. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  1672. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1673. def int_x86_avx512_mask_pmaxu_q_512 : GCCBuiltin<"__builtin_ia32_pmaxuq512_mask">,
  1674. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  1675. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1676. def int_x86_avx512_mask_pmaxu_q_256 : GCCBuiltin<"__builtin_ia32_pmaxuq256_mask">,
  1677. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  1678. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1679. def int_x86_avx512_mask_pmaxu_q_128 : GCCBuiltin<"__builtin_ia32_pmaxuq128_mask">,
  1680. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  1681. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1682. def int_x86_avx512_mask_pmaxs_q_512 : GCCBuiltin<"__builtin_ia32_pmaxsq512_mask">,
  1683. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  1684. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1685. def int_x86_avx512_mask_pmaxs_q_256 : GCCBuiltin<"__builtin_ia32_pmaxsq256_mask">,
  1686. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  1687. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1688. def int_x86_avx512_mask_pmaxs_q_128 : GCCBuiltin<"__builtin_ia32_pmaxsq128_mask">,
  1689. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  1690. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1691. def int_x86_avx512_mask_pminu_d_512 : GCCBuiltin<"__builtin_ia32_pminud512_mask">,
  1692. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  1693. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1694. def int_x86_avx512_mask_pminu_d_256 : GCCBuiltin<"__builtin_ia32_pminud256_mask">,
  1695. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  1696. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1697. def int_x86_avx512_mask_pminu_d_128 : GCCBuiltin<"__builtin_ia32_pminud128_mask">,
  1698. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  1699. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1700. def int_x86_avx512_mask_pmins_d_512 : GCCBuiltin<"__builtin_ia32_pminsd512_mask">,
  1701. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  1702. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1703. def int_x86_avx512_mask_pmins_d_256 : GCCBuiltin<"__builtin_ia32_pminsd256_mask">,
  1704. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  1705. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1706. def int_x86_avx512_mask_pmins_d_128 : GCCBuiltin<"__builtin_ia32_pminsd128_mask">,
  1707. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  1708. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  1709. def int_x86_avx512_mask_pminu_q_512 : GCCBuiltin<"__builtin_ia32_pminuq512_mask">,
  1710. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  1711. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1712. def int_x86_avx512_mask_pminu_q_256 : GCCBuiltin<"__builtin_ia32_pminuq256_mask">,
  1713. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  1714. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1715. def int_x86_avx512_mask_pminu_q_128 : GCCBuiltin<"__builtin_ia32_pminuq128_mask">,
  1716. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  1717. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1718. def int_x86_avx512_mask_pmins_q_512 : GCCBuiltin<"__builtin_ia32_pminsq512_mask">,
  1719. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  1720. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1721. def int_x86_avx512_mask_pmins_q_256 : GCCBuiltin<"__builtin_ia32_pminsq256_mask">,
  1722. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  1723. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1724. def int_x86_avx512_mask_pmins_q_128 : GCCBuiltin<"__builtin_ia32_pminsq128_mask">,
  1725. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  1726. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1727. }
  1728. // Integer shift ops.
  1729. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1730. def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">,
  1731. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1732. llvm_v8i16_ty], [IntrNoMem]>;
  1733. def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">,
  1734. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1735. llvm_v4i32_ty], [IntrNoMem]>;
  1736. def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">,
  1737. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
  1738. llvm_v2i64_ty], [IntrNoMem]>;
  1739. def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">,
  1740. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1741. llvm_v8i16_ty], [IntrNoMem]>;
  1742. def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">,
  1743. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1744. llvm_v4i32_ty], [IntrNoMem]>;
  1745. def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">,
  1746. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
  1747. llvm_v2i64_ty], [IntrNoMem]>;
  1748. def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">,
  1749. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1750. llvm_v8i16_ty], [IntrNoMem]>;
  1751. def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">,
  1752. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1753. llvm_v4i32_ty], [IntrNoMem]>;
  1754. def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">,
  1755. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1756. llvm_i32_ty], [IntrNoMem]>;
  1757. def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">,
  1758. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1759. llvm_i32_ty], [IntrNoMem]>;
  1760. def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">,
  1761. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
  1762. llvm_i32_ty], [IntrNoMem]>;
  1763. def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">,
  1764. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1765. llvm_i32_ty], [IntrNoMem]>;
  1766. def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">,
  1767. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1768. llvm_i32_ty], [IntrNoMem]>;
  1769. def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">,
  1770. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
  1771. llvm_i32_ty], [IntrNoMem]>;
  1772. def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">,
  1773. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1774. llvm_i32_ty], [IntrNoMem]>;
  1775. def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">,
  1776. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1777. llvm_i32_ty], [IntrNoMem]>;
  1778. def int_x86_avx512_mask_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi512">,
  1779. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1780. llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1781. def int_x86_avx512_mask_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi512">,
  1782. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1783. llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1784. def int_x86_avx512_mask_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi512">,
  1785. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1786. llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1787. def int_x86_avx512_mask_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi512">,
  1788. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1789. llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1790. def int_x86_avx512_mask_psrai_d : GCCBuiltin<"__builtin_ia32_psradi512">,
  1791. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1792. llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1793. def int_x86_avx512_mask_psrai_q : GCCBuiltin<"__builtin_ia32_psraqi512">,
  1794. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1795. llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1796. def int_x86_avx512_mask_psll_d : GCCBuiltin<"__builtin_ia32_pslld512_mask">,
  1797. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1798. llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1799. def int_x86_avx512_mask_psll_q : GCCBuiltin<"__builtin_ia32_psllq512_mask">,
  1800. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1801. llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1802. def int_x86_avx512_mask_psrl_d : GCCBuiltin<"__builtin_ia32_psrld512_mask">,
  1803. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1804. llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1805. def int_x86_avx512_mask_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq512_mask">,
  1806. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1807. llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1808. def int_x86_avx512_mask_psra_d : GCCBuiltin<"__builtin_ia32_psrad512_mask">,
  1809. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  1810. llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  1811. def int_x86_avx512_mask_psra_q : GCCBuiltin<"__builtin_ia32_psraq512_mask">,
  1812. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  1813. llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  1814. }
  1815. // Pack ops.
  1816. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1817. def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">,
  1818. Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
  1819. llvm_v16i16_ty], [IntrNoMem]>;
  1820. def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">,
  1821. Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
  1822. llvm_v8i32_ty], [IntrNoMem]>;
  1823. def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">,
  1824. Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
  1825. llvm_v16i16_ty], [IntrNoMem]>;
  1826. def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">,
  1827. Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
  1828. llvm_v8i32_ty], [IntrNoMem]>;
  1829. }
  1830. // Absolute value ops
  1831. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1832. def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">,
  1833. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>;
  1834. def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">,
  1835. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
  1836. def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">,
  1837. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
  1838. def int_x86_avx512_mask_pabs_b_128 :
  1839. GCCBuiltin<"__builtin_ia32_pabsb128_mask">,
  1840. Intrinsic<[llvm_v16i8_ty],
  1841. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
  1842. [IntrNoMem]>;
  1843. def int_x86_avx512_mask_pabs_b_256 :
  1844. GCCBuiltin<"__builtin_ia32_pabsb256_mask">,
  1845. Intrinsic<[llvm_v32i8_ty],
  1846. [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
  1847. [IntrNoMem]>;
  1848. def int_x86_avx512_mask_pabs_b_512 :
  1849. GCCBuiltin<"__builtin_ia32_pabsb512_mask">,
  1850. Intrinsic<[llvm_v64i8_ty],
  1851. [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
  1852. [IntrNoMem]>;
  1853. def int_x86_avx512_mask_pabs_d_128 :
  1854. GCCBuiltin<"__builtin_ia32_pabsd128_mask">,
  1855. Intrinsic<[llvm_v4i32_ty],
  1856. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  1857. [IntrNoMem]>;
  1858. def int_x86_avx512_mask_pabs_d_256 :
  1859. GCCBuiltin<"__builtin_ia32_pabsd256_mask">,
  1860. Intrinsic<[llvm_v8i32_ty],
  1861. [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  1862. [IntrNoMem]>;
  1863. def int_x86_avx512_mask_pabs_d_512 :
  1864. GCCBuiltin<"__builtin_ia32_pabsd512_mask">,
  1865. Intrinsic<[llvm_v16i32_ty],
  1866. [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  1867. [IntrNoMem]>;
  1868. def int_x86_avx512_mask_pabs_q_128 :
  1869. GCCBuiltin<"__builtin_ia32_pabsq128_mask">,
  1870. Intrinsic<[llvm_v2i64_ty],
  1871. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  1872. [IntrNoMem]>;
  1873. def int_x86_avx512_mask_pabs_q_256 :
  1874. GCCBuiltin<"__builtin_ia32_pabsq256_mask">,
  1875. Intrinsic<[llvm_v4i64_ty],
  1876. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  1877. [IntrNoMem]>;
  1878. def int_x86_avx512_mask_pabs_q_512 :
  1879. GCCBuiltin<"__builtin_ia32_pabsq512_mask">,
  1880. Intrinsic<[llvm_v8i64_ty],
  1881. [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  1882. [IntrNoMem]>;
  1883. def int_x86_avx512_mask_pabs_w_128 :
  1884. GCCBuiltin<"__builtin_ia32_pabsw128_mask">,
  1885. Intrinsic<[llvm_v8i16_ty],
  1886. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  1887. [IntrNoMem]>;
  1888. def int_x86_avx512_mask_pabs_w_256 :
  1889. GCCBuiltin<"__builtin_ia32_pabsw256_mask">,
  1890. Intrinsic<[llvm_v16i16_ty],
  1891. [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  1892. [IntrNoMem]>;
  1893. def int_x86_avx512_mask_pabs_w_512 :
  1894. GCCBuiltin<"__builtin_ia32_pabsw512_mask">,
  1895. Intrinsic<[llvm_v32i16_ty],
  1896. [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  1897. [IntrNoMem]>;
  1898. }
  1899. // Horizontal arithmetic ops
  1900. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1901. def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">,
  1902. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1903. llvm_v16i16_ty], [IntrNoMem]>;
  1904. def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">,
  1905. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1906. llvm_v8i32_ty], [IntrNoMem]>;
  1907. def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">,
  1908. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1909. llvm_v16i16_ty], [IntrNoMem]>;
  1910. def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">,
  1911. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1912. llvm_v16i16_ty], [IntrNoMem]>;
  1913. def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">,
  1914. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1915. llvm_v8i32_ty], [IntrNoMem]>;
  1916. def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">,
  1917. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1918. llvm_v16i16_ty], [IntrNoMem]>;
  1919. def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">,
  1920. Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty,
  1921. llvm_v32i8_ty], [IntrNoMem]>;
  1922. }
  1923. // Sign ops
  1924. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1925. def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">,
  1926. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  1927. llvm_v32i8_ty], [IntrNoMem]>;
  1928. def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">,
  1929. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1930. llvm_v16i16_ty], [IntrNoMem]>;
  1931. def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">,
  1932. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
  1933. llvm_v8i32_ty], [IntrNoMem]>;
  1934. }
  1935. // Packed multiply high with round and scale
  1936. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1937. def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">,
  1938. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
  1939. llvm_v16i16_ty], [IntrNoMem, Commutative]>;
  1940. def int_x86_avx512_mask_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128_mask">,
  1941. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  1942. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  1943. def int_x86_avx512_mask_pmul_hr_sw_256 : GCCBuiltin<"__builtin_ia32_pmulhrsw256_mask">,
  1944. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  1945. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  1946. def int_x86_avx512_mask_pmul_hr_sw_512 : GCCBuiltin<"__builtin_ia32_pmulhrsw512_mask">,
  1947. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  1948. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  1949. }
  1950. // Vector sign and zero extend
  1951. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1952. def int_x86_avx2_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd256">,
  1953. Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
  1954. [IntrNoMem]>;
  1955. def int_x86_avx2_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq256">,
  1956. Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
  1957. [IntrNoMem]>;
  1958. def int_x86_avx2_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw256">,
  1959. Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
  1960. [IntrNoMem]>;
  1961. def int_x86_avx2_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq256">,
  1962. Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
  1963. [IntrNoMem]>;
  1964. def int_x86_avx2_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd256">,
  1965. Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
  1966. [IntrNoMem]>;
  1967. def int_x86_avx2_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq256">,
  1968. Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
  1969. [IntrNoMem]>;
  1970. def int_x86_avx2_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd256">,
  1971. Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
  1972. [IntrNoMem]>;
  1973. def int_x86_avx2_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq256">,
  1974. Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
  1975. [IntrNoMem]>;
  1976. def int_x86_avx2_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw256">,
  1977. Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
  1978. [IntrNoMem]>;
  1979. def int_x86_avx2_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq256">,
  1980. Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
  1981. [IntrNoMem]>;
  1982. def int_x86_avx2_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd256">,
  1983. Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
  1984. [IntrNoMem]>;
  1985. def int_x86_avx2_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq256">,
  1986. Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
  1987. [IntrNoMem]>;
  1988. }
  1989. // Vector blend
  1990. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1991. def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">,
  1992. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  1993. llvm_v32i8_ty], [IntrNoMem]>;
  1994. }
  1995. // Vector load with broadcast
  1996. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  1997. def int_x86_avx2_vbroadcast_ss_ps :
  1998. GCCBuiltin<"__builtin_ia32_vbroadcastss_ps">,
  1999. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  2000. def int_x86_avx2_vbroadcast_sd_pd_256 :
  2001. GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd256">,
  2002. Intrinsic<[llvm_v4f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  2003. def int_x86_avx2_vbroadcast_ss_ps_256 :
  2004. GCCBuiltin<"__builtin_ia32_vbroadcastss_ps256">,
  2005. Intrinsic<[llvm_v8f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  2006. def int_x86_avx2_pbroadcastb_128 :
  2007. GCCBuiltin<"__builtin_ia32_pbroadcastb128">,
  2008. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2009. def int_x86_avx2_pbroadcastb_256 :
  2010. GCCBuiltin<"__builtin_ia32_pbroadcastb256">,
  2011. Intrinsic<[llvm_v32i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2012. def int_x86_avx2_pbroadcastw_128 :
  2013. GCCBuiltin<"__builtin_ia32_pbroadcastw128">,
  2014. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2015. def int_x86_avx2_pbroadcastw_256 :
  2016. GCCBuiltin<"__builtin_ia32_pbroadcastw256">,
  2017. Intrinsic<[llvm_v16i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2018. def int_x86_avx2_pbroadcastd_128 :
  2019. GCCBuiltin<"__builtin_ia32_pbroadcastd128">,
  2020. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  2021. def int_x86_avx2_pbroadcastd_256 :
  2022. GCCBuiltin<"__builtin_ia32_pbroadcastd256">,
  2023. Intrinsic<[llvm_v8i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  2024. def int_x86_avx2_pbroadcastq_128 :
  2025. GCCBuiltin<"__builtin_ia32_pbroadcastq128">,
  2026. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  2027. def int_x86_avx2_pbroadcastq_256 :
  2028. GCCBuiltin<"__builtin_ia32_pbroadcastq256">,
  2029. Intrinsic<[llvm_v4i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  2030. def int_x86_avx512_mask_pbroadcast_d_gpr_512 :
  2031. GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">,
  2032. Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty, llvm_v16i32_ty,
  2033. llvm_i16_ty], [IntrNoMem]>;
  2034. def int_x86_avx512_mask_pbroadcast_q_gpr_512 :
  2035. GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">,
  2036. Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
  2037. llvm_i8_ty], [IntrNoMem]>;
  2038. def int_x86_avx512_mask_pbroadcast_q_mem_512 :
  2039. GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">,
  2040. Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
  2041. llvm_i8_ty], [IntrNoMem]>;
  2042. }
  2043. // Vector permutation
  2044. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2045. def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">,
  2046. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
  2047. [IntrNoMem]>;
  2048. def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
  2049. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
  2050. [IntrNoMem]>;
  2051. def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">,
  2052. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
  2053. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  2054. }
  2055. // Vector extract and insert
  2056. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2057. def int_x86_avx512_mask_vextractf32x4_512 :
  2058. GCCBuiltin<"__builtin_ia32_extractf32x4_mask">,
  2059. Intrinsic<[llvm_v4f32_ty], [llvm_v16f32_ty, llvm_i8_ty,
  2060. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  2061. def int_x86_avx512_mask_vextracti32x4_512 :
  2062. GCCBuiltin<"__builtin_ia32_extracti32x4_mask">,
  2063. Intrinsic<[llvm_v4i32_ty], [llvm_v16i32_ty, llvm_i8_ty,
  2064. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  2065. def int_x86_avx512_mask_vextractf64x4_512 :
  2066. GCCBuiltin<"__builtin_ia32_extractf64x4_mask">,
  2067. Intrinsic<[llvm_v4f64_ty], [llvm_v8f64_ty, llvm_i8_ty,
  2068. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  2069. def int_x86_avx512_mask_vextracti64x4_512 :
  2070. GCCBuiltin<"__builtin_ia32_extracti64x4_mask">,
  2071. Intrinsic<[llvm_v4i64_ty], [llvm_v8i64_ty, llvm_i8_ty,
  2072. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  2073. }
  2074. // Conditional load ops
  2075. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2076. def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">,
  2077. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
  2078. [IntrReadArgMem]>;
  2079. def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">,
  2080. Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
  2081. [IntrReadArgMem]>;
  2082. def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">,
  2083. Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
  2084. [IntrReadArgMem]>;
  2085. def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">,
  2086. Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
  2087. [IntrReadArgMem]>;
  2088. def int_x86_avx512_mask_loadu_d_512 : GCCBuiltin<"__builtin_ia32_loaddqusi512_mask">,
  2089. Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
  2090. [IntrReadArgMem]>;
  2091. def int_x86_avx512_mask_loadu_q_512 : GCCBuiltin<"__builtin_ia32_loaddqudi512_mask">,
  2092. Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
  2093. [IntrReadArgMem]>;
  2094. }
  2095. // Conditional store ops
  2096. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2097. def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">,
  2098. Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  2099. [IntrReadWriteArgMem]>;
  2100. def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
  2101. Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
  2102. [IntrReadWriteArgMem]>;
  2103. def int_x86_avx2_maskstore_d_256 :
  2104. GCCBuiltin<"__builtin_ia32_maskstored256">,
  2105. Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
  2106. [IntrReadWriteArgMem]>;
  2107. def int_x86_avx2_maskstore_q_256 :
  2108. GCCBuiltin<"__builtin_ia32_maskstoreq256">,
  2109. Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
  2110. [IntrReadWriteArgMem]>;
  2111. def int_x86_avx512_mask_storeu_d_512 :
  2112. GCCBuiltin<"__builtin_ia32_storedqusi512_mask">,
  2113. Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
  2114. [IntrReadWriteArgMem]>;
  2115. def int_x86_avx512_mask_storeu_q_512 :
  2116. GCCBuiltin<"__builtin_ia32_storedqudi512_mask">,
  2117. Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
  2118. [IntrReadWriteArgMem]>;
  2119. }
  2120. // Variable bit shift ops
  2121. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2122. def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">,
  2123. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2124. [IntrNoMem]>;
  2125. def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
  2126. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
  2127. [IntrNoMem]>;
  2128. def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
  2129. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  2130. [IntrNoMem]>;
  2131. def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
  2132. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
  2133. [IntrNoMem]>;
  2134. def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
  2135. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2136. [IntrNoMem]>;
  2137. def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
  2138. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
  2139. [IntrNoMem]>;
  2140. def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
  2141. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  2142. [IntrNoMem]>;
  2143. def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
  2144. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
  2145. [IntrNoMem]>;
  2146. def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
  2147. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2148. [IntrNoMem]>;
  2149. def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
  2150. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
  2151. [IntrNoMem]>;
  2152. def int_x86_avx512_mask_psllv_d : GCCBuiltin<"__builtin_ia32_psllv16si_mask">,
  2153. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  2154. llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  2155. [IntrNoMem]>;
  2156. def int_x86_avx512_mask_psllv_q : GCCBuiltin<"__builtin_ia32_psllv8di_mask">,
  2157. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  2158. llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  2159. [IntrNoMem]>;
  2160. def int_x86_avx512_mask_psrav_d : GCCBuiltin<"__builtin_ia32_psrav16si_mask">,
  2161. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  2162. llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  2163. [IntrNoMem]>;
  2164. def int_x86_avx512_mask_psrav_q : GCCBuiltin<"__builtin_ia32_psrav8di_mask">,
  2165. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  2166. llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  2167. [IntrNoMem]>;
  2168. def int_x86_avx512_mask_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv16si_mask">,
  2169. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  2170. llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  2171. [IntrNoMem]>;
  2172. def int_x86_avx512_mask_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv8di_mask">,
  2173. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  2174. llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  2175. [IntrNoMem]>;
  2176. }
  2177. // Gather ops
  2178. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2179. def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
  2180. Intrinsic<[llvm_v2f64_ty],
  2181. [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
  2182. [IntrReadArgMem]>;
  2183. def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
  2184. Intrinsic<[llvm_v4f64_ty],
  2185. [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
  2186. [IntrReadArgMem]>;
  2187. def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
  2188. Intrinsic<[llvm_v2f64_ty],
  2189. [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2190. [IntrReadArgMem]>;
  2191. def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
  2192. Intrinsic<[llvm_v4f64_ty],
  2193. [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2194. [IntrReadArgMem]>;
  2195. def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
  2196. Intrinsic<[llvm_v4f32_ty],
  2197. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2198. [IntrReadArgMem]>;
  2199. def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
  2200. Intrinsic<[llvm_v8f32_ty],
  2201. [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2202. [IntrReadArgMem]>;
  2203. def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
  2204. Intrinsic<[llvm_v4f32_ty],
  2205. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
  2206. [IntrReadArgMem]>;
  2207. def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
  2208. Intrinsic<[llvm_v4f32_ty],
  2209. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
  2210. [IntrReadArgMem]>;
  2211. def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
  2212. Intrinsic<[llvm_v2i64_ty],
  2213. [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
  2214. [IntrReadArgMem]>;
  2215. def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
  2216. Intrinsic<[llvm_v4i64_ty],
  2217. [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
  2218. [IntrReadArgMem]>;
  2219. def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
  2220. Intrinsic<[llvm_v2i64_ty],
  2221. [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  2222. [IntrReadArgMem]>;
  2223. def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
  2224. Intrinsic<[llvm_v4i64_ty],
  2225. [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  2226. [IntrReadArgMem]>;
  2227. def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
  2228. Intrinsic<[llvm_v4i32_ty],
  2229. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  2230. [IntrReadArgMem]>;
  2231. def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
  2232. Intrinsic<[llvm_v8i32_ty],
  2233. [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  2234. [IntrReadArgMem]>;
  2235. def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
  2236. Intrinsic<[llvm_v4i32_ty],
  2237. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
  2238. [IntrReadArgMem]>;
  2239. def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
  2240. Intrinsic<[llvm_v4i32_ty],
  2241. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
  2242. [IntrReadArgMem]>;
  2243. }
  2244. // Misc.
  2245. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2246. def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">,
  2247. Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
  2248. def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">,
  2249. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
  2250. llvm_v32i8_ty], [IntrNoMem]>;
  2251. def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
  2252. Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  2253. llvm_i8_ty], [IntrNoMem, Commutative]>;
  2254. def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">,
  2255. Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
  2256. }
  2257. //===----------------------------------------------------------------------===//
  2258. // FMA3 and FMA4
  2259. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2260. def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
  2261. Intrinsic<[llvm_v4f32_ty],
  2262. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2263. [IntrNoMem]>;
  2264. def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
  2265. Intrinsic<[llvm_v2f64_ty],
  2266. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2267. [IntrNoMem]>;
  2268. def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
  2269. Intrinsic<[llvm_v4f32_ty],
  2270. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2271. [IntrNoMem]>;
  2272. def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
  2273. Intrinsic<[llvm_v2f64_ty],
  2274. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2275. [IntrNoMem]>;
  2276. def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
  2277. Intrinsic<[llvm_v8f32_ty],
  2278. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2279. [IntrNoMem]>;
  2280. def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
  2281. Intrinsic<[llvm_v4f64_ty],
  2282. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2283. [IntrNoMem]>;
  2284. def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">,
  2285. Intrinsic<[llvm_v4f32_ty],
  2286. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2287. [IntrNoMem]>;
  2288. def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">,
  2289. Intrinsic<[llvm_v2f64_ty],
  2290. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2291. [IntrNoMem]>;
  2292. def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">,
  2293. Intrinsic<[llvm_v4f32_ty],
  2294. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2295. [IntrNoMem]>;
  2296. def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">,
  2297. Intrinsic<[llvm_v2f64_ty],
  2298. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2299. [IntrNoMem]>;
  2300. def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">,
  2301. Intrinsic<[llvm_v8f32_ty],
  2302. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2303. [IntrNoMem]>;
  2304. def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">,
  2305. Intrinsic<[llvm_v4f64_ty],
  2306. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2307. [IntrNoMem]>;
  2308. def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">,
  2309. Intrinsic<[llvm_v4f32_ty],
  2310. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2311. [IntrNoMem]>;
  2312. def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">,
  2313. Intrinsic<[llvm_v2f64_ty],
  2314. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2315. [IntrNoMem]>;
  2316. def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">,
  2317. Intrinsic<[llvm_v4f32_ty],
  2318. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2319. [IntrNoMem]>;
  2320. def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">,
  2321. Intrinsic<[llvm_v2f64_ty],
  2322. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2323. [IntrNoMem]>;
  2324. def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">,
  2325. Intrinsic<[llvm_v8f32_ty],
  2326. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2327. [IntrNoMem]>;
  2328. def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">,
  2329. Intrinsic<[llvm_v4f64_ty],
  2330. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2331. [IntrNoMem]>;
  2332. def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">,
  2333. Intrinsic<[llvm_v4f32_ty],
  2334. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2335. [IntrNoMem]>;
  2336. def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">,
  2337. Intrinsic<[llvm_v2f64_ty],
  2338. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2339. [IntrNoMem]>;
  2340. def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">,
  2341. Intrinsic<[llvm_v4f32_ty],
  2342. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2343. [IntrNoMem]>;
  2344. def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">,
  2345. Intrinsic<[llvm_v2f64_ty],
  2346. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2347. [IntrNoMem]>;
  2348. def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">,
  2349. Intrinsic<[llvm_v8f32_ty],
  2350. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2351. [IntrNoMem]>;
  2352. def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">,
  2353. Intrinsic<[llvm_v4f64_ty],
  2354. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2355. [IntrNoMem]>;
  2356. def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
  2357. Intrinsic<[llvm_v4f32_ty],
  2358. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2359. [IntrNoMem]>;
  2360. def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
  2361. Intrinsic<[llvm_v2f64_ty],
  2362. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2363. [IntrNoMem]>;
  2364. def int_x86_fma_vfmaddsub_ps_256 :
  2365. GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
  2366. Intrinsic<[llvm_v8f32_ty],
  2367. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2368. [IntrNoMem]>;
  2369. def int_x86_fma_vfmaddsub_pd_256 :
  2370. GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
  2371. Intrinsic<[llvm_v4f64_ty],
  2372. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2373. [IntrNoMem]>;
  2374. def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">,
  2375. Intrinsic<[llvm_v4f32_ty],
  2376. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
  2377. [IntrNoMem]>;
  2378. def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">,
  2379. Intrinsic<[llvm_v2f64_ty],
  2380. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
  2381. [IntrNoMem]>;
  2382. def int_x86_fma_vfmsubadd_ps_256 :
  2383. GCCBuiltin<"__builtin_ia32_vfmsubaddps256">,
  2384. Intrinsic<[llvm_v8f32_ty],
  2385. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
  2386. [IntrNoMem]>;
  2387. def int_x86_fma_vfmsubadd_pd_256 :
  2388. GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">,
  2389. Intrinsic<[llvm_v4f64_ty],
  2390. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
  2391. [IntrNoMem]>;
  2392. def int_x86_avx512_mask_vfmadd_pd_128 :
  2393. GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask">,
  2394. Intrinsic<[llvm_v2f64_ty],
  2395. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2396. [IntrNoMem]>;
  2397. def int_x86_avx512_mask3_vfmadd_pd_128 :
  2398. GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask3">,
  2399. Intrinsic<[llvm_v2f64_ty],
  2400. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2401. [IntrNoMem]>;
  2402. def int_x86_avx512_maskz_vfmadd_pd_128 :
  2403. GCCBuiltin<"__builtin_ia32_vfmaddpd128_maskz">,
  2404. Intrinsic<[llvm_v2f64_ty],
  2405. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2406. [IntrNoMem]>;
  2407. def int_x86_avx512_mask_vfmadd_pd_256 :
  2408. GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask">,
  2409. Intrinsic<[llvm_v4f64_ty],
  2410. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2411. [IntrNoMem]>;
  2412. def int_x86_avx512_mask3_vfmadd_pd_256 :
  2413. GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask3">,
  2414. Intrinsic<[llvm_v4f64_ty],
  2415. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2416. [IntrNoMem]>;
  2417. def int_x86_avx512_maskz_vfmadd_pd_256 :
  2418. GCCBuiltin<"__builtin_ia32_vfmaddpd256_maskz">,
  2419. Intrinsic<[llvm_v4f64_ty],
  2420. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2421. [IntrNoMem]>;
  2422. def int_x86_avx512_mask_vfmadd_pd_512 :
  2423. GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask">,
  2424. Intrinsic<[llvm_v8f64_ty],
  2425. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2426. llvm_i32_ty], [IntrNoMem]>;
  2427. def int_x86_avx512_mask3_vfmadd_pd_512 :
  2428. GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask3">,
  2429. Intrinsic<[llvm_v8f64_ty],
  2430. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2431. llvm_i32_ty], [IntrNoMem]>;
  2432. def int_x86_avx512_maskz_vfmadd_pd_512 :
  2433. GCCBuiltin<"__builtin_ia32_vfmaddpd512_maskz">,
  2434. Intrinsic<[llvm_v8f64_ty],
  2435. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2436. llvm_i32_ty], [IntrNoMem]>;
  2437. def int_x86_avx512_mask_vfmadd_ps_128 :
  2438. GCCBuiltin<"__builtin_ia32_vfmaddps128_mask">,
  2439. Intrinsic<[llvm_v4f32_ty],
  2440. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2441. [IntrNoMem]>;
  2442. def int_x86_avx512_mask3_vfmadd_ps_128 :
  2443. GCCBuiltin<"__builtin_ia32_vfmaddps128_mask3">,
  2444. Intrinsic<[llvm_v4f32_ty],
  2445. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2446. [IntrNoMem]>;
  2447. def int_x86_avx512_maskz_vfmadd_ps_128 :
  2448. GCCBuiltin<"__builtin_ia32_vfmaddps128_maskz">,
  2449. Intrinsic<[llvm_v4f32_ty],
  2450. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2451. [IntrNoMem]>;
  2452. def int_x86_avx512_mask_vfmadd_ps_256 :
  2453. GCCBuiltin<"__builtin_ia32_vfmaddps256_mask">,
  2454. Intrinsic<[llvm_v8f32_ty],
  2455. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2456. [IntrNoMem]>;
  2457. def int_x86_avx512_mask3_vfmadd_ps_256 :
  2458. GCCBuiltin<"__builtin_ia32_vfmaddps256_mask3">,
  2459. Intrinsic<[llvm_v8f32_ty],
  2460. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2461. [IntrNoMem]>;
  2462. def int_x86_avx512_maskz_vfmadd_ps_256 :
  2463. GCCBuiltin<"__builtin_ia32_vfmaddps256_maskz">,
  2464. Intrinsic<[llvm_v8f32_ty],
  2465. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2466. [IntrNoMem]>;
  2467. def int_x86_avx512_mask_vfmadd_ps_512 :
  2468. GCCBuiltin<"__builtin_ia32_vfmaddps512_mask">,
  2469. Intrinsic<[llvm_v16f32_ty],
  2470. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2471. llvm_i32_ty], [IntrNoMem]>;
  2472. def int_x86_avx512_mask3_vfmadd_ps_512 :
  2473. GCCBuiltin<"__builtin_ia32_vfmaddps512_mask3">,
  2474. Intrinsic<[llvm_v16f32_ty],
  2475. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2476. llvm_i32_ty], [IntrNoMem]>;
  2477. def int_x86_avx512_maskz_vfmadd_ps_512 :
  2478. GCCBuiltin<"__builtin_ia32_vfmaddps512_maskz">,
  2479. Intrinsic<[llvm_v16f32_ty],
  2480. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2481. llvm_i32_ty], [IntrNoMem]>;
  2482. def int_x86_avx512_mask_vfmaddsub_pd_128 :
  2483. GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask">,
  2484. Intrinsic<[llvm_v2f64_ty],
  2485. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2486. [IntrNoMem]>;
  2487. def int_x86_avx512_mask3_vfmaddsub_pd_128 :
  2488. GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask3">,
  2489. Intrinsic<[llvm_v2f64_ty],
  2490. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2491. [IntrNoMem]>;
  2492. def int_x86_avx512_maskz_vfmaddsub_pd_128 :
  2493. GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_maskz">,
  2494. Intrinsic<[llvm_v2f64_ty],
  2495. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2496. [IntrNoMem]>;
  2497. def int_x86_avx512_mask_vfmaddsub_pd_256 :
  2498. GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask">,
  2499. Intrinsic<[llvm_v4f64_ty],
  2500. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2501. [IntrNoMem]>;
  2502. def int_x86_avx512_mask3_vfmaddsub_pd_256 :
  2503. GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask3">,
  2504. Intrinsic<[llvm_v4f64_ty],
  2505. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2506. [IntrNoMem]>;
  2507. def int_x86_avx512_maskz_vfmaddsub_pd_256 :
  2508. GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_maskz">,
  2509. Intrinsic<[llvm_v4f64_ty],
  2510. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2511. [IntrNoMem]>;
  2512. def int_x86_avx512_mask_vfmaddsub_pd_512 :
  2513. GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask">,
  2514. Intrinsic<[llvm_v8f64_ty],
  2515. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2516. llvm_i32_ty], [IntrNoMem]>;
  2517. def int_x86_avx512_mask3_vfmaddsub_pd_512 :
  2518. GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask3">,
  2519. Intrinsic<[llvm_v8f64_ty],
  2520. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2521. llvm_i32_ty], [IntrNoMem]>;
  2522. def int_x86_avx512_maskz_vfmaddsub_pd_512 :
  2523. GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_maskz">,
  2524. Intrinsic<[llvm_v8f64_ty],
  2525. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2526. llvm_i32_ty], [IntrNoMem]>;
  2527. def int_x86_avx512_mask_vfmaddsub_ps_128 :
  2528. GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask">,
  2529. Intrinsic<[llvm_v4f32_ty],
  2530. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2531. [IntrNoMem]>;
  2532. def int_x86_avx512_mask3_vfmaddsub_ps_128 :
  2533. GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask3">,
  2534. Intrinsic<[llvm_v4f32_ty],
  2535. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2536. [IntrNoMem]>;
  2537. def int_x86_avx512_maskz_vfmaddsub_ps_128 :
  2538. GCCBuiltin<"__builtin_ia32_vfmaddsubps128_maskz">,
  2539. Intrinsic<[llvm_v4f32_ty],
  2540. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2541. [IntrNoMem]>;
  2542. def int_x86_avx512_mask_vfmaddsub_ps_256 :
  2543. GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask">,
  2544. Intrinsic<[llvm_v8f32_ty],
  2545. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2546. [IntrNoMem]>;
  2547. def int_x86_avx512_mask3_vfmaddsub_ps_256 :
  2548. GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask3">,
  2549. Intrinsic<[llvm_v8f32_ty],
  2550. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2551. [IntrNoMem]>;
  2552. def int_x86_avx512_maskz_vfmaddsub_ps_256 :
  2553. GCCBuiltin<"__builtin_ia32_vfmaddsubps256_maskz">,
  2554. Intrinsic<[llvm_v8f32_ty],
  2555. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2556. [IntrNoMem]>;
  2557. def int_x86_avx512_mask_vfmaddsub_ps_512 :
  2558. GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask">,
  2559. Intrinsic<[llvm_v16f32_ty],
  2560. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2561. llvm_i32_ty], [IntrNoMem]>;
  2562. def int_x86_avx512_mask3_vfmaddsub_ps_512 :
  2563. GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask3">,
  2564. Intrinsic<[llvm_v16f32_ty],
  2565. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2566. llvm_i32_ty], [IntrNoMem]>;
  2567. def int_x86_avx512_maskz_vfmaddsub_ps_512 :
  2568. GCCBuiltin<"__builtin_ia32_vfmaddsubps512_maskz">,
  2569. Intrinsic<[llvm_v16f32_ty],
  2570. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2571. llvm_i32_ty], [IntrNoMem]>;
  2572. def int_x86_avx512_mask3_vfmsub_pd_128 :
  2573. GCCBuiltin<"__builtin_ia32_vfmsubpd128_mask3">,
  2574. Intrinsic<[llvm_v2f64_ty],
  2575. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2576. [IntrNoMem]>;
  2577. def int_x86_avx512_mask3_vfmsub_pd_256 :
  2578. GCCBuiltin<"__builtin_ia32_vfmsubpd256_mask3">,
  2579. Intrinsic<[llvm_v4f64_ty],
  2580. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2581. [IntrNoMem]>;
  2582. def int_x86_avx512_mask3_vfmsub_pd_512 :
  2583. GCCBuiltin<"__builtin_ia32_vfmsubpd512_mask3">,
  2584. Intrinsic<[llvm_v8f64_ty],
  2585. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2586. llvm_i32_ty], [IntrNoMem]>;
  2587. def int_x86_avx512_mask3_vfmsub_ps_128 :
  2588. GCCBuiltin<"__builtin_ia32_vfmsubps128_mask3">,
  2589. Intrinsic<[llvm_v4f32_ty],
  2590. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2591. [IntrNoMem]>;
  2592. def int_x86_avx512_mask3_vfmsub_ps_256 :
  2593. GCCBuiltin<"__builtin_ia32_vfmsubps256_mask3">,
  2594. Intrinsic<[llvm_v8f32_ty],
  2595. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2596. [IntrNoMem]>;
  2597. def int_x86_avx512_mask3_vfmsub_ps_512 :
  2598. GCCBuiltin<"__builtin_ia32_vfmsubps512_mask3">,
  2599. Intrinsic<[llvm_v16f32_ty],
  2600. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2601. llvm_i32_ty], [IntrNoMem]>;
  2602. def int_x86_avx512_mask3_vfmsubadd_pd_128 :
  2603. GCCBuiltin<"__builtin_ia32_vfmsubaddpd128_mask3">,
  2604. Intrinsic<[llvm_v2f64_ty],
  2605. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2606. [IntrNoMem]>;
  2607. def int_x86_avx512_mask3_vfmsubadd_pd_256 :
  2608. GCCBuiltin<"__builtin_ia32_vfmsubaddpd256_mask3">,
  2609. Intrinsic<[llvm_v4f64_ty],
  2610. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2611. [IntrNoMem]>;
  2612. def int_x86_avx512_mask3_vfmsubadd_pd_512 :
  2613. GCCBuiltin<"__builtin_ia32_vfmsubaddpd512_mask3">,
  2614. Intrinsic<[llvm_v8f64_ty],
  2615. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2616. llvm_i32_ty], [IntrNoMem]>;
  2617. def int_x86_avx512_mask3_vfmsubadd_ps_128 :
  2618. GCCBuiltin<"__builtin_ia32_vfmsubaddps128_mask3">,
  2619. Intrinsic<[llvm_v4f32_ty],
  2620. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2621. [IntrNoMem]>;
  2622. def int_x86_avx512_mask3_vfmsubadd_ps_256 :
  2623. GCCBuiltin<"__builtin_ia32_vfmsubaddps256_mask3">,
  2624. Intrinsic<[llvm_v8f32_ty],
  2625. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2626. [IntrNoMem]>;
  2627. def int_x86_avx512_mask3_vfmsubadd_ps_512 :
  2628. GCCBuiltin<"__builtin_ia32_vfmsubaddps512_mask3">,
  2629. Intrinsic<[llvm_v16f32_ty],
  2630. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2631. llvm_i32_ty], [IntrNoMem]>;
  2632. def int_x86_avx512_mask_vfnmadd_pd_128 :
  2633. GCCBuiltin<"__builtin_ia32_vfnmaddpd128_mask">,
  2634. Intrinsic<[llvm_v2f64_ty],
  2635. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2636. [IntrNoMem]>;
  2637. def int_x86_avx512_mask_vfnmadd_pd_256 :
  2638. GCCBuiltin<"__builtin_ia32_vfnmaddpd256_mask">,
  2639. Intrinsic<[llvm_v4f64_ty],
  2640. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2641. [IntrNoMem]>;
  2642. def int_x86_avx512_mask_vfnmadd_pd_512 :
  2643. GCCBuiltin<"__builtin_ia32_vfnmaddpd512_mask">,
  2644. Intrinsic<[llvm_v8f64_ty],
  2645. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2646. llvm_i32_ty], [IntrNoMem]>;
  2647. def int_x86_avx512_mask_vfnmadd_ps_128 :
  2648. GCCBuiltin<"__builtin_ia32_vfnmaddps128_mask">,
  2649. Intrinsic<[llvm_v4f32_ty],
  2650. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2651. [IntrNoMem]>;
  2652. def int_x86_avx512_mask_vfnmadd_ps_256 :
  2653. GCCBuiltin<"__builtin_ia32_vfnmaddps256_mask">,
  2654. Intrinsic<[llvm_v8f32_ty],
  2655. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2656. [IntrNoMem]>;
  2657. def int_x86_avx512_mask_vfnmadd_ps_512 :
  2658. GCCBuiltin<"__builtin_ia32_vfnmaddps512_mask">,
  2659. Intrinsic<[llvm_v16f32_ty],
  2660. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2661. llvm_i32_ty], [IntrNoMem]>;
  2662. def int_x86_avx512_mask_vfnmsub_pd_128 :
  2663. GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask">,
  2664. Intrinsic<[llvm_v2f64_ty],
  2665. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2666. [IntrNoMem]>;
  2667. def int_x86_avx512_mask3_vfnmsub_pd_128 :
  2668. GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask3">,
  2669. Intrinsic<[llvm_v2f64_ty],
  2670. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  2671. [IntrNoMem]>;
  2672. def int_x86_avx512_mask_vfnmsub_pd_256 :
  2673. GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask">,
  2674. Intrinsic<[llvm_v4f64_ty],
  2675. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2676. [IntrNoMem]>;
  2677. def int_x86_avx512_mask3_vfnmsub_pd_256 :
  2678. GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask3">,
  2679. Intrinsic<[llvm_v4f64_ty],
  2680. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  2681. [IntrNoMem]>;
  2682. def int_x86_avx512_mask_vfnmsub_pd_512 :
  2683. GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask">,
  2684. Intrinsic<[llvm_v8f64_ty],
  2685. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2686. llvm_i32_ty], [IntrNoMem]>;
  2687. def int_x86_avx512_mask3_vfnmsub_pd_512 :
  2688. GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask3">,
  2689. Intrinsic<[llvm_v8f64_ty],
  2690. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty,
  2691. llvm_i32_ty], [IntrNoMem]>;
  2692. def int_x86_avx512_mask_vfnmsub_ps_128 :
  2693. GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask">,
  2694. Intrinsic<[llvm_v4f32_ty],
  2695. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2696. [IntrNoMem]>;
  2697. def int_x86_avx512_mask3_vfnmsub_ps_128 :
  2698. GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask3">,
  2699. Intrinsic<[llvm_v4f32_ty],
  2700. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  2701. [IntrNoMem]>;
  2702. def int_x86_avx512_mask_vfnmsub_ps_256 :
  2703. GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask">,
  2704. Intrinsic<[llvm_v8f32_ty],
  2705. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2706. [IntrNoMem]>;
  2707. def int_x86_avx512_mask3_vfnmsub_ps_256 :
  2708. GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask3">,
  2709. Intrinsic<[llvm_v8f32_ty],
  2710. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  2711. [IntrNoMem]>;
  2712. def int_x86_avx512_mask_vfnmsub_ps_512 :
  2713. GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask">,
  2714. Intrinsic<[llvm_v16f32_ty],
  2715. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2716. llvm_i32_ty], [IntrNoMem]>;
  2717. def int_x86_avx512_mask3_vfnmsub_ps_512 :
  2718. GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask3">,
  2719. Intrinsic<[llvm_v16f32_ty],
  2720. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty,
  2721. llvm_i32_ty], [IntrNoMem]>;
  2722. }
  2723. //===----------------------------------------------------------------------===//
  2724. // XOP
  2725. def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
  2726. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  2727. llvm_v2f64_ty, llvm_i8_ty],
  2728. [IntrNoMem]>;
  2729. def int_x86_xop_vpermil2pd_256 :
  2730. GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
  2731. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  2732. llvm_v4f64_ty, llvm_i8_ty],
  2733. [IntrNoMem]>;
  2734. def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
  2735. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  2736. llvm_v4f32_ty, llvm_i8_ty],
  2737. [IntrNoMem]>;
  2738. def int_x86_xop_vpermil2ps_256 :
  2739. GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
  2740. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  2741. llvm_v8f32_ty, llvm_i8_ty],
  2742. [IntrNoMem]>;
  2743. def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
  2744. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  2745. def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">,
  2746. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  2747. def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">,
  2748. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  2749. def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">,
  2750. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  2751. def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">,
  2752. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
  2753. def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">,
  2754. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
  2755. def int_x86_xop_vpcmov :
  2756. GCCBuiltin<"__builtin_ia32_vpcmov">,
  2757. Intrinsic<[llvm_v2i64_ty],
  2758. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
  2759. [IntrNoMem]>;
  2760. def int_x86_xop_vpcmov_256 :
  2761. GCCBuiltin<"__builtin_ia32_vpcmov_256">,
  2762. Intrinsic<[llvm_v4i64_ty],
  2763. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty],
  2764. [IntrNoMem]>;
  2765. def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
  2766. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  2767. llvm_i8_ty], [IntrNoMem]>;
  2768. def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
  2769. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  2770. llvm_i8_ty], [IntrNoMem]>;
  2771. def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
  2772. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  2773. llvm_i8_ty], [IntrNoMem]>;
  2774. def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
  2775. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  2776. llvm_i8_ty], [IntrNoMem]>;
  2777. def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
  2778. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  2779. llvm_i8_ty], [IntrNoMem]>;
  2780. def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
  2781. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  2782. llvm_i8_ty], [IntrNoMem]>;
  2783. def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
  2784. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  2785. llvm_i8_ty], [IntrNoMem]>;
  2786. def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
  2787. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  2788. llvm_i8_ty], [IntrNoMem]>;
  2789. def int_x86_xop_vphaddbd :
  2790. GCCBuiltin<"__builtin_ia32_vphaddbd">,
  2791. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2792. def int_x86_xop_vphaddbq :
  2793. GCCBuiltin<"__builtin_ia32_vphaddbq">,
  2794. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2795. def int_x86_xop_vphaddbw :
  2796. GCCBuiltin<"__builtin_ia32_vphaddbw">,
  2797. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2798. def int_x86_xop_vphadddq :
  2799. GCCBuiltin<"__builtin_ia32_vphadddq">,
  2800. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  2801. def int_x86_xop_vphaddubd :
  2802. GCCBuiltin<"__builtin_ia32_vphaddubd">,
  2803. Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2804. def int_x86_xop_vphaddubq :
  2805. GCCBuiltin<"__builtin_ia32_vphaddubq">,
  2806. Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2807. def int_x86_xop_vphaddubw :
  2808. GCCBuiltin<"__builtin_ia32_vphaddubw">,
  2809. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2810. def int_x86_xop_vphaddudq :
  2811. GCCBuiltin<"__builtin_ia32_vphaddudq">,
  2812. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  2813. def int_x86_xop_vphadduwd :
  2814. GCCBuiltin<"__builtin_ia32_vphadduwd">,
  2815. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2816. def int_x86_xop_vphadduwq :
  2817. GCCBuiltin<"__builtin_ia32_vphadduwq">,
  2818. Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2819. def int_x86_xop_vphaddwd :
  2820. GCCBuiltin<"__builtin_ia32_vphaddwd">,
  2821. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2822. def int_x86_xop_vphaddwq :
  2823. GCCBuiltin<"__builtin_ia32_vphaddwq">,
  2824. Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2825. def int_x86_xop_vphsubbw :
  2826. GCCBuiltin<"__builtin_ia32_vphsubbw">,
  2827. Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
  2828. def int_x86_xop_vphsubdq :
  2829. GCCBuiltin<"__builtin_ia32_vphsubdq">,
  2830. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  2831. def int_x86_xop_vphsubwd :
  2832. GCCBuiltin<"__builtin_ia32_vphsubwd">,
  2833. Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  2834. def int_x86_xop_vpmacsdd :
  2835. GCCBuiltin<"__builtin_ia32_vpmacsdd">,
  2836. Intrinsic<[llvm_v4i32_ty],
  2837. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  2838. [IntrNoMem]>;
  2839. def int_x86_xop_vpmacsdqh :
  2840. GCCBuiltin<"__builtin_ia32_vpmacsdqh">,
  2841. Intrinsic<[llvm_v2i64_ty],
  2842. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
  2843. [IntrNoMem]>;
  2844. def int_x86_xop_vpmacsdql :
  2845. GCCBuiltin<"__builtin_ia32_vpmacsdql">,
  2846. Intrinsic<[llvm_v2i64_ty],
  2847. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
  2848. [IntrNoMem]>;
  2849. def int_x86_xop_vpmacssdd :
  2850. GCCBuiltin<"__builtin_ia32_vpmacssdd">,
  2851. Intrinsic<[llvm_v4i32_ty],
  2852. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  2853. [IntrNoMem]>;
  2854. def int_x86_xop_vpmacssdqh :
  2855. GCCBuiltin<"__builtin_ia32_vpmacssdqh">,
  2856. Intrinsic<[llvm_v2i64_ty],
  2857. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
  2858. [IntrNoMem]>;
  2859. def int_x86_xop_vpmacssdql :
  2860. GCCBuiltin<"__builtin_ia32_vpmacssdql">,
  2861. Intrinsic<[llvm_v2i64_ty],
  2862. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
  2863. [IntrNoMem]>;
  2864. def int_x86_xop_vpmacsswd :
  2865. GCCBuiltin<"__builtin_ia32_vpmacsswd">,
  2866. Intrinsic<[llvm_v4i32_ty],
  2867. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
  2868. [IntrNoMem]>;
  2869. def int_x86_xop_vpmacssww :
  2870. GCCBuiltin<"__builtin_ia32_vpmacssww">,
  2871. Intrinsic<[llvm_v8i16_ty],
  2872. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
  2873. [IntrNoMem]>;
  2874. def int_x86_xop_vpmacswd :
  2875. GCCBuiltin<"__builtin_ia32_vpmacswd">,
  2876. Intrinsic<[llvm_v4i32_ty],
  2877. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
  2878. [IntrNoMem]>;
  2879. def int_x86_xop_vpmacsww :
  2880. GCCBuiltin<"__builtin_ia32_vpmacsww">,
  2881. Intrinsic<[llvm_v8i16_ty],
  2882. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
  2883. [IntrNoMem]>;
  2884. def int_x86_xop_vpmadcsswd :
  2885. GCCBuiltin<"__builtin_ia32_vpmadcsswd">,
  2886. Intrinsic<[llvm_v4i32_ty],
  2887. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
  2888. [IntrNoMem]>;
  2889. def int_x86_xop_vpmadcswd :
  2890. GCCBuiltin<"__builtin_ia32_vpmadcswd">,
  2891. Intrinsic<[llvm_v4i32_ty],
  2892. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
  2893. [IntrNoMem]>;
  2894. def int_x86_xop_vpperm :
  2895. GCCBuiltin<"__builtin_ia32_vpperm">,
  2896. Intrinsic<[llvm_v16i8_ty],
  2897. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
  2898. [IntrNoMem]>;
  2899. def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
  2900. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  2901. [IntrNoMem]>;
  2902. def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
  2903. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2904. [IntrNoMem]>;
  2905. def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
  2906. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  2907. [IntrNoMem]>;
  2908. def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
  2909. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  2910. [IntrNoMem]>;
  2911. def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
  2912. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
  2913. [IntrNoMem]>;
  2914. def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
  2915. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
  2916. [IntrNoMem]>;
  2917. def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
  2918. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
  2919. [IntrNoMem]>;
  2920. def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
  2921. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
  2922. [IntrNoMem]>;
  2923. def int_x86_xop_vpshab :
  2924. GCCBuiltin<"__builtin_ia32_vpshab">,
  2925. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  2926. [IntrNoMem]>;
  2927. def int_x86_xop_vpshad :
  2928. GCCBuiltin<"__builtin_ia32_vpshad">,
  2929. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2930. [IntrNoMem]>;
  2931. def int_x86_xop_vpshaq :
  2932. GCCBuiltin<"__builtin_ia32_vpshaq">,
  2933. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  2934. [IntrNoMem]>;
  2935. def int_x86_xop_vpshaw :
  2936. GCCBuiltin<"__builtin_ia32_vpshaw">,
  2937. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  2938. [IntrNoMem]>;
  2939. def int_x86_xop_vpshlb :
  2940. GCCBuiltin<"__builtin_ia32_vpshlb">,
  2941. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
  2942. [IntrNoMem]>;
  2943. def int_x86_xop_vpshld :
  2944. GCCBuiltin<"__builtin_ia32_vpshld">,
  2945. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
  2946. [IntrNoMem]>;
  2947. def int_x86_xop_vpshlq :
  2948. GCCBuiltin<"__builtin_ia32_vpshlq">,
  2949. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
  2950. [IntrNoMem]>;
  2951. def int_x86_xop_vpshlw :
  2952. GCCBuiltin<"__builtin_ia32_vpshlw">,
  2953. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
  2954. [IntrNoMem]>;
  2955. //===----------------------------------------------------------------------===//
  2956. // MMX
  2957. // Empty MMX state op.
  2958. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2959. def int_x86_mmx_emms : GCCBuiltin<"__builtin_ia32_emms">,
  2960. Intrinsic<[], [], []>;
  2961. def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
  2962. Intrinsic<[], [], []>;
  2963. }
  2964. // Integer arithmetic ops.
  2965. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  2966. // Addition
  2967. def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
  2968. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2969. [IntrNoMem]>;
  2970. def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
  2971. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2972. [IntrNoMem]>;
  2973. def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
  2974. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2975. [IntrNoMem]>;
  2976. def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
  2977. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2978. [IntrNoMem]>;
  2979. def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
  2980. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  2981. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  2982. def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
  2983. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  2984. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  2985. def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
  2986. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  2987. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  2988. def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
  2989. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  2990. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  2991. // Subtraction
  2992. def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
  2993. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2994. [IntrNoMem]>;
  2995. def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
  2996. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  2997. [IntrNoMem]>;
  2998. def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
  2999. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3000. [IntrNoMem]>;
  3001. def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
  3002. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3003. [IntrNoMem]>;
  3004. def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
  3005. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3006. llvm_x86mmx_ty], [IntrNoMem]>;
  3007. def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
  3008. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3009. llvm_x86mmx_ty], [IntrNoMem]>;
  3010. def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
  3011. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3012. llvm_x86mmx_ty], [IntrNoMem]>;
  3013. def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
  3014. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3015. llvm_x86mmx_ty], [IntrNoMem]>;
  3016. // Multiplication
  3017. def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
  3018. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3019. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3020. def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
  3021. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3022. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3023. def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
  3024. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3025. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3026. def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
  3027. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3028. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3029. def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
  3030. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3031. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3032. // Bitwise operations
  3033. def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
  3034. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3035. [IntrNoMem]>;
  3036. def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
  3037. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3038. [IntrNoMem]>;
  3039. def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
  3040. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3041. [IntrNoMem]>;
  3042. def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
  3043. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3044. [IntrNoMem]>;
  3045. // Averages
  3046. def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
  3047. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3048. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3049. def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
  3050. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3051. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3052. // Maximum
  3053. def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
  3054. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3055. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3056. def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
  3057. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3058. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3059. // Minimum
  3060. def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
  3061. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3062. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3063. def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
  3064. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3065. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3066. // Packed sum of absolute differences
  3067. def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
  3068. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3069. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3070. }
  3071. // Integer shift ops.
  3072. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3073. // Shift left logical
  3074. def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
  3075. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3076. llvm_x86mmx_ty], [IntrNoMem]>;
  3077. def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
  3078. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3079. llvm_x86mmx_ty], [IntrNoMem]>;
  3080. def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
  3081. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3082. llvm_x86mmx_ty], [IntrNoMem]>;
  3083. def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
  3084. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3085. llvm_x86mmx_ty], [IntrNoMem]>;
  3086. def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
  3087. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3088. llvm_x86mmx_ty], [IntrNoMem]>;
  3089. def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
  3090. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3091. llvm_x86mmx_ty], [IntrNoMem]>;
  3092. def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
  3093. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3094. llvm_x86mmx_ty], [IntrNoMem]>;
  3095. def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
  3096. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3097. llvm_x86mmx_ty], [IntrNoMem]>;
  3098. def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
  3099. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3100. llvm_i32_ty], [IntrNoMem]>;
  3101. def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
  3102. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3103. llvm_i32_ty], [IntrNoMem]>;
  3104. def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
  3105. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3106. llvm_i32_ty], [IntrNoMem]>;
  3107. def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
  3108. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3109. llvm_i32_ty], [IntrNoMem]>;
  3110. def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
  3111. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3112. llvm_i32_ty], [IntrNoMem]>;
  3113. def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
  3114. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3115. llvm_i32_ty], [IntrNoMem]>;
  3116. def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
  3117. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3118. llvm_i32_ty], [IntrNoMem]>;
  3119. def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
  3120. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3121. llvm_i32_ty], [IntrNoMem]>;
  3122. }
  3123. // Pack ops.
  3124. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3125. def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
  3126. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3127. llvm_x86mmx_ty], [IntrNoMem]>;
  3128. def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
  3129. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3130. llvm_x86mmx_ty], [IntrNoMem]>;
  3131. def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
  3132. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3133. llvm_x86mmx_ty], [IntrNoMem]>;
  3134. }
  3135. // Unpacking ops.
  3136. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3137. def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
  3138. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3139. [IntrNoMem]>;
  3140. def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
  3141. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3142. [IntrNoMem]>;
  3143. def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
  3144. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3145. [IntrNoMem]>;
  3146. def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
  3147. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3148. [IntrNoMem]>;
  3149. def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
  3150. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3151. [IntrNoMem]>;
  3152. def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
  3153. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
  3154. [IntrNoMem]>;
  3155. }
  3156. // Integer comparison ops
  3157. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3158. def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
  3159. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3160. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3161. def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
  3162. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3163. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3164. def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
  3165. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3166. llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
  3167. def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
  3168. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3169. llvm_x86mmx_ty], [IntrNoMem]>;
  3170. def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
  3171. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3172. llvm_x86mmx_ty], [IntrNoMem]>;
  3173. def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
  3174. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3175. llvm_x86mmx_ty], [IntrNoMem]>;
  3176. }
  3177. // Misc.
  3178. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3179. def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
  3180. Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
  3181. def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
  3182. Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
  3183. def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
  3184. Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
  3185. def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
  3186. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3187. llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
  3188. def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
  3189. Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
  3190. [IntrNoMem]>;
  3191. def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
  3192. Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
  3193. llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3194. }
  3195. //===----------------------------------------------------------------------===//
  3196. // BMI
  3197. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3198. def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">,
  3199. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3200. def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">,
  3201. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  3202. def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">,
  3203. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3204. def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">,
  3205. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  3206. def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">,
  3207. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3208. def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">,
  3209. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  3210. def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">,
  3211. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3212. def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">,
  3213. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  3214. }
  3215. //===----------------------------------------------------------------------===//
  3216. // FS/GS Base
  3217. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3218. def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">,
  3219. Intrinsic<[llvm_i32_ty], []>;
  3220. def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">,
  3221. Intrinsic<[llvm_i32_ty], []>;
  3222. def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">,
  3223. Intrinsic<[llvm_i64_ty], []>;
  3224. def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">,
  3225. Intrinsic<[llvm_i64_ty], []>;
  3226. def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">,
  3227. Intrinsic<[], [llvm_i32_ty]>;
  3228. def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">,
  3229. Intrinsic<[], [llvm_i32_ty]>;
  3230. def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">,
  3231. Intrinsic<[], [llvm_i64_ty]>;
  3232. def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">,
  3233. Intrinsic<[], [llvm_i64_ty]>;
  3234. }
  3235. //===----------------------------------------------------------------------===//
  3236. // FXSR
  3237. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3238. def int_x86_fxrstor : GCCBuiltin<"__builtin_ia32_fxrstor">,
  3239. Intrinsic<[], [llvm_ptr_ty], []>;
  3240. def int_x86_fxrstor64 : GCCBuiltin<"__builtin_ia32_fxrstor64">,
  3241. Intrinsic<[], [llvm_ptr_ty], []>;
  3242. def int_x86_fxsave : GCCBuiltin<"__builtin_ia32_fxsave">,
  3243. Intrinsic<[], [llvm_ptr_ty], []>;
  3244. def int_x86_fxsave64 : GCCBuiltin<"__builtin_ia32_fxsave64">,
  3245. Intrinsic<[], [llvm_ptr_ty], []>;
  3246. }
  3247. //===----------------------------------------------------------------------===//
  3248. // Half float conversion
  3249. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3250. def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">,
  3251. Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  3252. def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">,
  3253. Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
  3254. def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
  3255. Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
  3256. [IntrNoMem]>;
  3257. def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
  3258. Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
  3259. [IntrNoMem]>;
  3260. def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
  3261. Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
  3262. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3263. def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
  3264. Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
  3265. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  3266. }
  3267. //===----------------------------------------------------------------------===//
  3268. // TBM
  3269. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3270. def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
  3271. Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3272. def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
  3273. Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
  3274. }
  3275. //===----------------------------------------------------------------------===//
  3276. // RDRAND intrinsics - Return a random value and whether it is valid.
  3277. // RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and
  3278. // whether it is valid.
  3279. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3280. // These are declared side-effecting so they don't get eliminated by CSE or
  3281. // LICM.
  3282. def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
  3283. def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
  3284. def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
  3285. def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
  3286. def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
  3287. def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
  3288. }
  3289. //===----------------------------------------------------------------------===//
  3290. // ADX
  3291. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3292. def int_x86_addcarryx_u32: GCCBuiltin<"__builtin_ia32_addcarryx_u32">,
  3293. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
  3294. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3295. def int_x86_addcarryx_u64: GCCBuiltin<"__builtin_ia32_addcarryx_u64">,
  3296. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
  3297. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3298. def int_x86_addcarry_u32: GCCBuiltin<"__builtin_ia32_addcarry_u32">,
  3299. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
  3300. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3301. def int_x86_addcarry_u64: GCCBuiltin<"__builtin_ia32_addcarry_u64">,
  3302. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
  3303. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3304. def int_x86_subborrow_u32: GCCBuiltin<"__builtin_ia32_subborrow_u32">,
  3305. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
  3306. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3307. def int_x86_subborrow_u64: GCCBuiltin<"__builtin_ia32_subborrow_u64">,
  3308. Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
  3309. llvm_ptr_ty], [IntrReadWriteArgMem]>;
  3310. }
  3311. //===----------------------------------------------------------------------===//
  3312. // RTM intrinsics. Transactional Memory support.
  3313. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3314. def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">,
  3315. Intrinsic<[llvm_i32_ty], [], []>;
  3316. def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
  3317. Intrinsic<[], [], []>;
  3318. def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
  3319. Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>;
  3320. def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
  3321. Intrinsic<[llvm_i32_ty], [], []>;
  3322. }
  3323. //===----------------------------------------------------------------------===//
  3324. // AVX512
  3325. // Mask ops
  3326. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3327. // Mask instructions
  3328. // 16-bit mask
  3329. def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">,
  3330. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3331. [IntrNoMem]>;
  3332. def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">,
  3333. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3334. [IntrNoMem]>;
  3335. def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">,
  3336. Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>;
  3337. def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">,
  3338. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3339. [IntrNoMem]>;
  3340. def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">,
  3341. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3342. [IntrNoMem]>;
  3343. def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">,
  3344. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3345. [IntrNoMem]>;
  3346. def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">,
  3347. Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
  3348. [IntrNoMem]>;
  3349. def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">,
  3350. Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
  3351. [IntrNoMem]>;
  3352. def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">,
  3353. Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
  3354. [IntrNoMem]>;
  3355. }
  3356. // Conversion ops
  3357. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3358. def int_x86_avx512_cvtss2usi : GCCBuiltin<"__builtin_ia32_cvtss2usi">,
  3359. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  3360. def int_x86_avx512_cvtss2usi64 : GCCBuiltin<"__builtin_ia32_cvtss2usi64">,
  3361. Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  3362. def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_cvttss2usi">,
  3363. Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  3364. def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_cvttss2usi64">,
  3365. Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  3366. def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">,
  3367. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  3368. llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3369. def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">,
  3370. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  3371. llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
  3372. def int_x86_avx512_cvtsd2usi : GCCBuiltin<"__builtin_ia32_cvtsd2usi">,
  3373. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  3374. def int_x86_avx512_cvtsd2usi64 : GCCBuiltin<"__builtin_ia32_cvtsd2usi64">,
  3375. Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  3376. def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_cvttsd2usi">,
  3377. Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  3378. def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_cvttsd2usi64">,
  3379. Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  3380. def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd32">,
  3381. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  3382. llvm_i32_ty], [IntrNoMem]>;
  3383. def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
  3384. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  3385. llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
  3386. def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">,
  3387. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  3388. llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3389. def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">,
  3390. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
  3391. llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
  3392. def int_x86_avx512_cvtsi2sd32 : GCCBuiltin<"__builtin_ia32_cvtsi2sd32">,
  3393. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  3394. llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
  3395. def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">,
  3396. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
  3397. llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
  3398. }
  3399. // Pack ops.
  3400. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3401. def int_x86_avx512_mask_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128_mask">,
  3402. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  3403. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  3404. def int_x86_avx512_mask_packsswb_256 : GCCBuiltin<"__builtin_ia32_packsswb256_mask">,
  3405. Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
  3406. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3407. def int_x86_avx512_mask_packsswb_512 : GCCBuiltin<"__builtin_ia32_packsswb512_mask">,
  3408. Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty,
  3409. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  3410. def int_x86_avx512_mask_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128_mask">,
  3411. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3412. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  3413. def int_x86_avx512_mask_packssdw_256 : GCCBuiltin<"__builtin_ia32_packssdw256_mask">,
  3414. Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3415. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  3416. def int_x86_avx512_mask_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512_mask">,
  3417. Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3418. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3419. def int_x86_avx512_mask_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128_mask">,
  3420. Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  3421. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  3422. def int_x86_avx512_mask_packuswb_256 : GCCBuiltin<"__builtin_ia32_packuswb256_mask">,
  3423. Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
  3424. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3425. def int_x86_avx512_mask_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512_mask">,
  3426. Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty,
  3427. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  3428. def int_x86_avx512_mask_packusdw_128 : GCCBuiltin<"__builtin_ia32_packusdw128_mask">,
  3429. Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3430. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  3431. def int_x86_avx512_mask_packusdw_256 : GCCBuiltin<"__builtin_ia32_packusdw256_mask">,
  3432. Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3433. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  3434. def int_x86_avx512_mask_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512_mask">,
  3435. Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3436. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3437. }
  3438. // Vector convert
  3439. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3440. def int_x86_avx512_mask_cvttps2dq_512: GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
  3441. Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
  3442. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3443. def int_x86_avx512_mask_cvttps2udq_512: GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
  3444. Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
  3445. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3446. def int_x86_avx512_mask_cvttpd2dq_512: GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
  3447. Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
  3448. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3449. def int_x86_avx512_mask_cvttpd2udq_512: GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
  3450. Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
  3451. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3452. def int_x86_avx512_mask_rndscale_ps_512: GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
  3453. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
  3454. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3455. def int_x86_avx512_mask_rndscale_pd_512: GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
  3456. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
  3457. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3458. def int_x86_avx512_mask_cvtps2dq_512: GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
  3459. Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
  3460. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3461. def int_x86_avx512_mask_cvtpd2dq_512: GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
  3462. Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
  3463. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3464. def int_x86_avx512_mask_cvtps2udq_512: GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
  3465. Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
  3466. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3467. def int_x86_avx512_mask_cvtpd2udq_512: GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
  3468. Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
  3469. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3470. def int_x86_avx512_mask_cvtdq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
  3471. Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty,
  3472. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3473. def int_x86_avx512_mask_cvtdq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtdq2pd512_mask">,
  3474. Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty,
  3475. llvm_i8_ty], [IntrNoMem]>;
  3476. def int_x86_avx512_mask_cvtudq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
  3477. Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty,
  3478. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3479. def int_x86_avx512_mask_cvtudq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtudq2pd512_mask">,
  3480. Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty,
  3481. llvm_i8_ty], [IntrNoMem]>;
  3482. def int_x86_avx512_mask_cvtpd2ps_512 : GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
  3483. Intrinsic<[llvm_v8f32_ty], [llvm_v8f64_ty, llvm_v8f32_ty,
  3484. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3485. }
  3486. // Vector load with broadcast
  3487. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3488. def int_x86_avx512_vbroadcast_ss_512 :
  3489. GCCBuiltin<"__builtin_ia32_vbroadcastss512">,
  3490. Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
  3491. def int_x86_avx512_vbroadcast_ss_ps_512 :
  3492. GCCBuiltin<"__builtin_ia32_vbroadcastss_ps512">,
  3493. Intrinsic<[llvm_v16f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
  3494. def int_x86_avx512_vbroadcast_sd_512 :
  3495. GCCBuiltin<"__builtin_ia32_vbroadcastsd512">,
  3496. Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
  3497. def int_x86_avx512_vbroadcast_sd_pd_512 :
  3498. GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd512">,
  3499. Intrinsic<[llvm_v8f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
  3500. def int_x86_avx512_pbroadcastd_512 :
  3501. GCCBuiltin<"__builtin_ia32_pbroadcastd512">,
  3502. Intrinsic<[llvm_v16i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
  3503. def int_x86_avx512_pbroadcastd_i32_512 :
  3504. Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty], [IntrNoMem]>;
  3505. def int_x86_avx512_pbroadcastq_512 :
  3506. GCCBuiltin<"__builtin_ia32_pbroadcastq512">,
  3507. Intrinsic<[llvm_v8i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
  3508. def int_x86_avx512_pbroadcastq_i64_512 :
  3509. Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty], [IntrNoMem]>;
  3510. }
  3511. // Vector sign and zero extend
  3512. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3513. def int_x86_avx512_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq512">,
  3514. Intrinsic<[llvm_v8i64_ty], [llvm_v16i8_ty],
  3515. [IntrNoMem]>;
  3516. def int_x86_avx512_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd512">,
  3517. Intrinsic<[llvm_v16i32_ty], [llvm_v16i16_ty],
  3518. [IntrNoMem]>;
  3519. def int_x86_avx512_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd512">,
  3520. Intrinsic<[llvm_v16i32_ty], [llvm_v16i8_ty],
  3521. [IntrNoMem]>;
  3522. def int_x86_avx512_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq512">,
  3523. Intrinsic<[llvm_v8i64_ty], [llvm_v8i16_ty],
  3524. [IntrNoMem]>;
  3525. def int_x86_avx512_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq512">,
  3526. Intrinsic<[llvm_v8i64_ty], [llvm_v8i32_ty],
  3527. [IntrNoMem]>;
  3528. }
  3529. //Bitwise Ops
  3530. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3531. def int_x86_avx512_mask_pand_d_128 : GCCBuiltin<"__builtin_ia32_pandd128_mask">,
  3532. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3533. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3534. def int_x86_avx512_mask_pand_d_256 : GCCBuiltin<"__builtin_ia32_pandd256_mask">,
  3535. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3536. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3537. def int_x86_avx512_mask_pand_d_512 : GCCBuiltin<"__builtin_ia32_pandd512_mask">,
  3538. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3539. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  3540. def int_x86_avx512_mask_pand_q_128 : GCCBuiltin<"__builtin_ia32_pandq128_mask">,
  3541. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  3542. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3543. def int_x86_avx512_mask_pand_q_256 : GCCBuiltin<"__builtin_ia32_pandq256_mask">,
  3544. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  3545. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3546. def int_x86_avx512_mask_pand_q_512 : GCCBuiltin<"__builtin_ia32_pandq512_mask">,
  3547. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  3548. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3549. def int_x86_avx512_mask_pandn_d_128 : GCCBuiltin<"__builtin_ia32_pandnd128_mask">,
  3550. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3551. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3552. def int_x86_avx512_mask_pandn_d_256 : GCCBuiltin<"__builtin_ia32_pandnd256_mask">,
  3553. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3554. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3555. def int_x86_avx512_mask_pandn_d_512 : GCCBuiltin<"__builtin_ia32_pandnd512_mask">,
  3556. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3557. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  3558. def int_x86_avx512_mask_pandn_q_128 : GCCBuiltin<"__builtin_ia32_pandnq128_mask">,
  3559. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  3560. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3561. def int_x86_avx512_mask_pandn_q_256 : GCCBuiltin<"__builtin_ia32_pandnq256_mask">,
  3562. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  3563. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3564. def int_x86_avx512_mask_pandn_q_512 : GCCBuiltin<"__builtin_ia32_pandnq512_mask">,
  3565. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  3566. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3567. def int_x86_avx512_mask_por_d_128 : GCCBuiltin<"__builtin_ia32_pord128_mask">,
  3568. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3569. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3570. def int_x86_avx512_mask_por_d_256 : GCCBuiltin<"__builtin_ia32_pord256_mask">,
  3571. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3572. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3573. def int_x86_avx512_mask_por_d_512 : GCCBuiltin<"__builtin_ia32_pord512_mask">,
  3574. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3575. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  3576. def int_x86_avx512_mask_por_q_128 : GCCBuiltin<"__builtin_ia32_porq128_mask">,
  3577. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  3578. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3579. def int_x86_avx512_mask_por_q_256 : GCCBuiltin<"__builtin_ia32_porq256_mask">,
  3580. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  3581. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3582. def int_x86_avx512_mask_por_q_512 : GCCBuiltin<"__builtin_ia32_porq512_mask">,
  3583. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  3584. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3585. def int_x86_avx512_mask_pxor_d_128 : GCCBuiltin<"__builtin_ia32_pxord128_mask">,
  3586. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  3587. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3588. def int_x86_avx512_mask_pxor_d_256 : GCCBuiltin<"__builtin_ia32_pxord256_mask">,
  3589. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  3590. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  3591. def int_x86_avx512_mask_pxor_d_512 : GCCBuiltin<"__builtin_ia32_pxord512_mask">,
  3592. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  3593. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  3594. def int_x86_avx512_mask_pxor_q_128 : GCCBuiltin<"__builtin_ia32_pxorq128_mask">,
  3595. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  3596. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3597. def int_x86_avx512_mask_pxor_q_256 : GCCBuiltin<"__builtin_ia32_pxorq256_mask">,
  3598. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  3599. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3600. def int_x86_avx512_mask_pxor_q_512 : GCCBuiltin<"__builtin_ia32_pxorq512_mask">,
  3601. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  3602. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  3603. }
  3604. // Arithmetic ops
  3605. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  3606. def int_x86_avx512_mask_add_ps_128 : GCCBuiltin<"__builtin_ia32_addps128_mask">,
  3607. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3608. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3609. def int_x86_avx512_mask_add_ps_256 : GCCBuiltin<"__builtin_ia32_addps256_mask">,
  3610. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3611. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3612. def int_x86_avx512_mask_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512_mask">,
  3613. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3614. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3615. def int_x86_avx512_mask_add_pd_128 : GCCBuiltin<"__builtin_ia32_addpd128_mask">,
  3616. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3617. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3618. def int_x86_avx512_mask_add_pd_256 : GCCBuiltin<"__builtin_ia32_addpd256_mask">,
  3619. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3620. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3621. def int_x86_avx512_mask_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512_mask">,
  3622. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3623. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3624. def int_x86_avx512_mask_sub_ps_128 : GCCBuiltin<"__builtin_ia32_subps128_mask">,
  3625. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3626. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3627. def int_x86_avx512_mask_sub_ps_256 : GCCBuiltin<"__builtin_ia32_subps256_mask">,
  3628. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3629. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3630. def int_x86_avx512_mask_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512_mask">,
  3631. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3632. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3633. def int_x86_avx512_mask_sub_pd_128 : GCCBuiltin<"__builtin_ia32_subpd128_mask">,
  3634. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3635. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3636. def int_x86_avx512_mask_sub_pd_256 : GCCBuiltin<"__builtin_ia32_subpd256_mask">,
  3637. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3638. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3639. def int_x86_avx512_mask_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512_mask">,
  3640. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3641. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3642. def int_x86_avx512_mask_mul_ps_128 : GCCBuiltin<"__builtin_ia32_mulps_mask">,
  3643. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3644. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3645. def int_x86_avx512_mask_mul_ps_256 : GCCBuiltin<"__builtin_ia32_mulps256_mask">,
  3646. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3647. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3648. def int_x86_avx512_mask_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512_mask">,
  3649. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3650. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3651. def int_x86_avx512_mask_mul_pd_128 : GCCBuiltin<"__builtin_ia32_mulpd_mask">,
  3652. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3653. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3654. def int_x86_avx512_mask_mul_pd_256 : GCCBuiltin<"__builtin_ia32_mulpd256_mask">,
  3655. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3656. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3657. def int_x86_avx512_mask_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512_mask">,
  3658. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3659. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3660. def int_x86_avx512_mask_div_ps_128 : GCCBuiltin<"__builtin_ia32_divps_mask">,
  3661. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3662. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3663. def int_x86_avx512_mask_div_ps_256 : GCCBuiltin<"__builtin_ia32_divps256_mask">,
  3664. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3665. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3666. def int_x86_avx512_mask_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512_mask">,
  3667. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3668. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3669. def int_x86_avx512_mask_div_pd_128 : GCCBuiltin<"__builtin_ia32_divpd_mask">,
  3670. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3671. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3672. def int_x86_avx512_mask_div_pd_256 : GCCBuiltin<"__builtin_ia32_divpd256_mask">,
  3673. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3674. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3675. def int_x86_avx512_mask_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512_mask">,
  3676. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3677. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3678. def int_x86_avx512_mask_max_ps_128 : GCCBuiltin<"__builtin_ia32_maxps_mask">,
  3679. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3680. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3681. def int_x86_avx512_mask_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256_mask">,
  3682. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3683. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3684. def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
  3685. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3686. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3687. def int_x86_avx512_mask_max_pd_128 : GCCBuiltin<"__builtin_ia32_maxpd_mask">,
  3688. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3689. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3690. def int_x86_avx512_mask_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256_mask">,
  3691. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3692. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3693. def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
  3694. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3695. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3696. def int_x86_avx512_mask_min_ps_128 : GCCBuiltin<"__builtin_ia32_minps_mask">,
  3697. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3698. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3699. def int_x86_avx512_mask_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256_mask">,
  3700. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3701. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3702. def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
  3703. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3704. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3705. def int_x86_avx512_mask_min_pd_128 : GCCBuiltin<"__builtin_ia32_minpd_mask">,
  3706. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3707. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3708. def int_x86_avx512_mask_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256_mask">,
  3709. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3710. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3711. def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
  3712. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3713. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3714. def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round">,
  3715. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3716. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3717. def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round">,
  3718. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3719. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3720. def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round">,
  3721. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3722. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3723. def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round">,
  3724. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3725. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3726. def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round">,
  3727. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3728. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3729. def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round">,
  3730. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3731. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3732. def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round">,
  3733. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3734. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3735. def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round">,
  3736. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3737. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3738. def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round">,
  3739. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3740. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3741. def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round">,
  3742. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3743. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3744. def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round">,
  3745. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3746. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3747. def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round">,
  3748. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3749. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3750. def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_mask">,
  3751. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
  3752. llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
  3753. [IntrNoMem]>;
  3754. def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_mask">,
  3755. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
  3756. llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
  3757. [IntrNoMem]>;
  3758. def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">,
  3759. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3760. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3761. def int_x86_avx512_mask_scalef_pd_256 : GCCBuiltin<"__builtin_ia32_scalefpd256_mask">,
  3762. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3763. llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>;
  3764. def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">,
  3765. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3766. llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3767. def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">,
  3768. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3769. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3770. def int_x86_avx512_mask_scalef_ps_256 : GCCBuiltin<"__builtin_ia32_scalefps256_mask">,
  3771. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3772. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3773. def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">,
  3774. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3775. llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3776. def int_x86_avx512_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtrndss">,
  3777. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
  3778. [IntrNoMem]>;
  3779. def int_x86_avx512_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtrndsd">,
  3780. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty],
  3781. [IntrNoMem]>;
  3782. def int_x86_avx512_mask_sqrt_pd_128 : GCCBuiltin<"__builtin_ia32_sqrtpd128_mask">,
  3783. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3784. llvm_i8_ty], [IntrNoMem]>;
  3785. def int_x86_avx512_mask_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256_mask">,
  3786. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3787. llvm_i8_ty], [IntrNoMem]>;
  3788. def int_x86_avx512_mask_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512_mask">,
  3789. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3790. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3791. def int_x86_avx512_mask_sqrt_ps_128 : GCCBuiltin<"__builtin_ia32_sqrtps128_mask">,
  3792. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3793. llvm_i8_ty], [IntrNoMem]>;
  3794. def int_x86_avx512_mask_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256_mask">,
  3795. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3796. llvm_i8_ty], [IntrNoMem]>;
  3797. def int_x86_avx512_mask_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512_mask">,
  3798. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3799. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3800. def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">,
  3801. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3802. llvm_i8_ty], [IntrNoMem]>;
  3803. def int_x86_avx512_mask_getexp_pd_256 : GCCBuiltin<"__builtin_ia32_getexppd256_mask">,
  3804. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3805. llvm_i8_ty], [IntrNoMem]>;
  3806. def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">,
  3807. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3808. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3809. def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">,
  3810. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3811. llvm_i8_ty], [IntrNoMem]>;
  3812. def int_x86_avx512_mask_getexp_ps_256 : GCCBuiltin<"__builtin_ia32_getexpps256_mask">,
  3813. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3814. llvm_i8_ty], [IntrNoMem]>;
  3815. def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">,
  3816. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3817. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3818. def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">,
  3819. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
  3820. llvm_i8_ty], [IntrNoMem]>;
  3821. def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd_mask">,
  3822. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
  3823. llvm_i8_ty], [IntrNoMem]>;
  3824. def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">,
  3825. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3826. llvm_i8_ty], [IntrNoMem]>;
  3827. def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">,
  3828. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3829. llvm_i16_ty], [IntrNoMem]>;
  3830. def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss_mask">,
  3831. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
  3832. llvm_i8_ty], [IntrNoMem]>;
  3833. def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd_mask">,
  3834. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
  3835. llvm_i8_ty], [IntrNoMem]>;
  3836. def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">,
  3837. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3838. llvm_i8_ty], [IntrNoMem]>;
  3839. def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">,
  3840. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3841. llvm_i16_ty], [IntrNoMem]>;
  3842. def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
  3843. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3844. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3845. def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
  3846. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3847. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3848. def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">,
  3849. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3850. llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3851. def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">,
  3852. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3853. llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3854. def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_mask">,
  3855. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3856. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
  3857. [IntrNoMem]>;
  3858. def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_mask">,
  3859. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3860. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
  3861. [IntrNoMem]>;
  3862. def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
  3863. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3864. llvm_i16_ty, llvm_i32_ty],
  3865. [IntrNoMem]>;
  3866. def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
  3867. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3868. llvm_i8_ty, llvm_i32_ty],
  3869. [IntrNoMem]>;
  3870. def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_mask">,
  3871. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3872. llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
  3873. [IntrNoMem]>;
  3874. def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_mask">,
  3875. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3876. llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
  3877. [IntrNoMem]>;
  3878. }
  3879. // FP logical ops
  3880. let TargetPrefix = "x86" in {
  3881. def int_x86_avx512_mask_and_pd_128 : GCCBuiltin<"__builtin_ia32_andpd128_mask">,
  3882. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3883. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3884. def int_x86_avx512_mask_and_pd_256 : GCCBuiltin<"__builtin_ia32_andpd256_mask">,
  3885. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3886. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3887. def int_x86_avx512_mask_and_pd_512 : GCCBuiltin<"__builtin_ia32_andpd512_mask">,
  3888. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3889. llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3890. def int_x86_avx512_mask_and_ps_128 : GCCBuiltin<"__builtin_ia32_andps128_mask">,
  3891. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3892. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3893. def int_x86_avx512_mask_and_ps_256 : GCCBuiltin<"__builtin_ia32_andps256_mask">,
  3894. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3895. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3896. def int_x86_avx512_mask_and_ps_512 : GCCBuiltin<"__builtin_ia32_andps512_mask">,
  3897. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3898. llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
  3899. def int_x86_avx512_mask_andn_pd_128 : GCCBuiltin<"__builtin_ia32_andnpd128_mask">,
  3900. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3901. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3902. def int_x86_avx512_mask_andn_pd_256 : GCCBuiltin<"__builtin_ia32_andnpd256_mask">,
  3903. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3904. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3905. def int_x86_avx512_mask_andn_pd_512 : GCCBuiltin<"__builtin_ia32_andnpd512_mask">,
  3906. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3907. llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3908. def int_x86_avx512_mask_andn_ps_128 : GCCBuiltin<"__builtin_ia32_andnps128_mask">,
  3909. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3910. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3911. def int_x86_avx512_mask_andn_ps_256 : GCCBuiltin<"__builtin_ia32_andnps256_mask">,
  3912. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3913. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3914. def int_x86_avx512_mask_andn_ps_512 : GCCBuiltin<"__builtin_ia32_andnps512_mask">,
  3915. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3916. llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
  3917. def int_x86_avx512_mask_or_pd_128 : GCCBuiltin<"__builtin_ia32_orpd128_mask">,
  3918. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3919. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3920. def int_x86_avx512_mask_or_pd_256 : GCCBuiltin<"__builtin_ia32_orpd256_mask">,
  3921. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3922. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3923. def int_x86_avx512_mask_or_pd_512 : GCCBuiltin<"__builtin_ia32_orpd512_mask">,
  3924. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3925. llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3926. def int_x86_avx512_mask_or_ps_128 : GCCBuiltin<"__builtin_ia32_orps128_mask">,
  3927. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3928. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3929. def int_x86_avx512_mask_or_ps_256 : GCCBuiltin<"__builtin_ia32_orps256_mask">,
  3930. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3931. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3932. def int_x86_avx512_mask_or_ps_512 : GCCBuiltin<"__builtin_ia32_orps512_mask">,
  3933. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3934. llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
  3935. def int_x86_avx512_mask_xor_pd_128 : GCCBuiltin<"__builtin_ia32_xorpd128_mask">,
  3936. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  3937. llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3938. def int_x86_avx512_mask_xor_pd_256 : GCCBuiltin<"__builtin_ia32_xorpd256_mask">,
  3939. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  3940. llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3941. def int_x86_avx512_mask_xor_pd_512 : GCCBuiltin<"__builtin_ia32_xorpd512_mask">,
  3942. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  3943. llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
  3944. def int_x86_avx512_mask_xor_ps_128 : GCCBuiltin<"__builtin_ia32_xorps128_mask">,
  3945. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  3946. llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3947. def int_x86_avx512_mask_xor_ps_256 : GCCBuiltin<"__builtin_ia32_xorps256_mask">,
  3948. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  3949. llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
  3950. def int_x86_avx512_mask_xor_ps_512 : GCCBuiltin<"__builtin_ia32_xorps512_mask">,
  3951. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  3952. llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
  3953. }
  3954. // Integer arithmetic ops
  3955. let TargetPrefix = "x86" in {
  3956. def int_x86_avx512_mask_padd_b_128 : GCCBuiltin<"__builtin_ia32_paddb128_mask">,
  3957. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  3958. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  3959. def int_x86_avx512_mask_padd_b_256 : GCCBuiltin<"__builtin_ia32_paddb256_mask">,
  3960. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  3961. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3962. def int_x86_avx512_mask_padd_b_512 : GCCBuiltin<"__builtin_ia32_paddb512_mask">,
  3963. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  3964. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  3965. def int_x86_avx512_mask_padd_w_128 : GCCBuiltin<"__builtin_ia32_paddw128_mask">,
  3966. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  3967. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  3968. def int_x86_avx512_mask_padd_w_256 : GCCBuiltin<"__builtin_ia32_paddw256_mask">,
  3969. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  3970. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  3971. def int_x86_avx512_mask_padd_w_512 : GCCBuiltin<"__builtin_ia32_paddw512_mask">,
  3972. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  3973. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3974. def int_x86_avx512_mask_padds_b_128 : GCCBuiltin<"__builtin_ia32_paddsb128_mask">,
  3975. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  3976. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  3977. def int_x86_avx512_mask_padds_b_256 : GCCBuiltin<"__builtin_ia32_paddsb256_mask">,
  3978. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  3979. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3980. def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">,
  3981. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  3982. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  3983. def int_x86_avx512_mask_padds_w_128 : GCCBuiltin<"__builtin_ia32_paddsw128_mask">,
  3984. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  3985. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  3986. def int_x86_avx512_mask_padds_w_256 : GCCBuiltin<"__builtin_ia32_paddsw256_mask">,
  3987. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  3988. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  3989. def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_mask">,
  3990. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  3991. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  3992. def int_x86_avx512_mask_paddus_b_128 : GCCBuiltin<"__builtin_ia32_paddusb128_mask">,
  3993. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  3994. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  3995. def int_x86_avx512_mask_paddus_b_256 : GCCBuiltin<"__builtin_ia32_paddusb256_mask">,
  3996. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  3997. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  3998. def int_x86_avx512_mask_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">,
  3999. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  4000. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  4001. def int_x86_avx512_mask_paddus_w_128 : GCCBuiltin<"__builtin_ia32_paddusw128_mask">,
  4002. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4003. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4004. def int_x86_avx512_mask_paddus_w_256 : GCCBuiltin<"__builtin_ia32_paddusw256_mask">,
  4005. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4006. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4007. def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">,
  4008. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4009. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4010. def int_x86_avx512_mask_padd_d_128 : GCCBuiltin<"__builtin_ia32_paddd128_mask">,
  4011. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4012. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4013. def int_x86_avx512_mask_padd_d_256 : GCCBuiltin<"__builtin_ia32_paddd256_mask">,
  4014. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4015. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4016. def int_x86_avx512_mask_padd_d_512 : GCCBuiltin<"__builtin_ia32_paddd512_mask">,
  4017. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4018. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  4019. def int_x86_avx512_mask_padd_q_128 : GCCBuiltin<"__builtin_ia32_paddq128_mask">,
  4020. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  4021. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4022. def int_x86_avx512_mask_padd_q_256 : GCCBuiltin<"__builtin_ia32_paddq256_mask">,
  4023. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  4024. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4025. def int_x86_avx512_mask_padd_q_512 : GCCBuiltin<"__builtin_ia32_paddq512_mask">,
  4026. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  4027. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4028. def int_x86_avx512_mask_psub_b_128 : GCCBuiltin<"__builtin_ia32_psubb128_mask">,
  4029. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  4030. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  4031. def int_x86_avx512_mask_psub_b_256 : GCCBuiltin<"__builtin_ia32_psubb256_mask">,
  4032. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  4033. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  4034. def int_x86_avx512_mask_psub_b_512 : GCCBuiltin<"__builtin_ia32_psubb512_mask">,
  4035. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  4036. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  4037. def int_x86_avx512_mask_psub_w_128 : GCCBuiltin<"__builtin_ia32_psubw128_mask">,
  4038. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4039. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4040. def int_x86_avx512_mask_psub_w_256 : GCCBuiltin<"__builtin_ia32_psubw256_mask">,
  4041. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4042. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4043. def int_x86_avx512_mask_psub_w_512 : GCCBuiltin<"__builtin_ia32_psubw512_mask">,
  4044. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4045. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4046. def int_x86_avx512_mask_psubs_b_128 : GCCBuiltin<"__builtin_ia32_psubsb128_mask">,
  4047. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  4048. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  4049. def int_x86_avx512_mask_psubs_b_256 : GCCBuiltin<"__builtin_ia32_psubsb256_mask">,
  4050. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  4051. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  4052. def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">,
  4053. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  4054. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  4055. def int_x86_avx512_mask_psubs_w_128 : GCCBuiltin<"__builtin_ia32_psubsw128_mask">,
  4056. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4057. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4058. def int_x86_avx512_mask_psubs_w_256 : GCCBuiltin<"__builtin_ia32_psubsw256_mask">,
  4059. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4060. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4061. def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">,
  4062. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4063. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4064. def int_x86_avx512_mask_psubus_b_128 : GCCBuiltin<"__builtin_ia32_psubusb128_mask">,
  4065. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  4066. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  4067. def int_x86_avx512_mask_psubus_b_256 : GCCBuiltin<"__builtin_ia32_psubusb256_mask">,
  4068. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  4069. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  4070. def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">,
  4071. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  4072. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  4073. def int_x86_avx512_mask_psubus_w_128 : GCCBuiltin<"__builtin_ia32_psubusw128_mask">,
  4074. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4075. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4076. def int_x86_avx512_mask_psubus_w_256 : GCCBuiltin<"__builtin_ia32_psubusw256_mask">,
  4077. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4078. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4079. def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">,
  4080. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4081. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4082. def int_x86_avx512_mask_psub_d_128 : GCCBuiltin<"__builtin_ia32_psubd128_mask">,
  4083. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4084. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4085. def int_x86_avx512_mask_psub_d_256 : GCCBuiltin<"__builtin_ia32_psubd256_mask">,
  4086. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4087. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4088. def int_x86_avx512_mask_psub_d_512 : GCCBuiltin<"__builtin_ia32_psubd512_mask">,
  4089. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4090. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  4091. def int_x86_avx512_mask_psub_q_128 : GCCBuiltin<"__builtin_ia32_psubq128_mask">,
  4092. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  4093. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4094. def int_x86_avx512_mask_psub_q_256 : GCCBuiltin<"__builtin_ia32_psubq256_mask">,
  4095. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  4096. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4097. def int_x86_avx512_mask_psub_q_512 : GCCBuiltin<"__builtin_ia32_psubq512_mask">,
  4098. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  4099. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4100. def int_x86_avx512_mask_pmulu_dq_128 : GCCBuiltin<"__builtin_ia32_pmuludq128_mask">,
  4101. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4102. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4103. def int_x86_avx512_mask_pmul_dq_128 : GCCBuiltin<"__builtin_ia32_pmuldq128_mask">,
  4104. Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4105. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4106. def int_x86_avx512_mask_pmulu_dq_256 : GCCBuiltin<"__builtin_ia32_pmuludq256_mask">,
  4107. Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4108. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4109. def int_x86_avx512_mask_pmul_dq_256 : GCCBuiltin<"__builtin_ia32_pmuldq256_mask">,
  4110. Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4111. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4112. def int_x86_avx512_mask_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512_mask">,
  4113. Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4114. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4115. def int_x86_avx512_mask_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512_mask">,
  4116. Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4117. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4118. def int_x86_avx512_mask_pmull_w_128 : GCCBuiltin<"__builtin_ia32_pmullw128_mask">,
  4119. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4120. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4121. def int_x86_avx512_mask_pmull_w_256 : GCCBuiltin<"__builtin_ia32_pmullw256_mask">,
  4122. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4123. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4124. def int_x86_avx512_mask_pmull_w_512 : GCCBuiltin<"__builtin_ia32_pmullw512_mask">,
  4125. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4126. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4127. def int_x86_avx512_mask_pmull_d_128 : GCCBuiltin<"__builtin_ia32_pmulld128_mask">,
  4128. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4129. llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4130. def int_x86_avx512_mask_pmull_d_256 : GCCBuiltin<"__builtin_ia32_pmulld256_mask">,
  4131. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4132. llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4133. def int_x86_avx512_mask_pmull_d_512 : GCCBuiltin<"__builtin_ia32_pmulld512_mask">,
  4134. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4135. llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
  4136. def int_x86_avx512_mask_pmull_q_128 : GCCBuiltin<"__builtin_ia32_pmullq128_mask">,
  4137. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  4138. llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4139. def int_x86_avx512_mask_pmull_q_256 : GCCBuiltin<"__builtin_ia32_pmullq256_mask">,
  4140. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  4141. llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4142. def int_x86_avx512_mask_pmull_q_512 : GCCBuiltin<"__builtin_ia32_pmullq512_mask">,
  4143. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  4144. llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
  4145. def int_x86_avx512_mask_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512_mask">,
  4146. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4147. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4148. def int_x86_avx512_mask_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512_mask">,
  4149. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4150. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4151. def int_x86_avx512_mask_pmulhu_w_128 : GCCBuiltin<"__builtin_ia32_pmulhuw128_mask">,
  4152. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4153. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4154. def int_x86_avx512_mask_pmulhu_w_256 : GCCBuiltin<"__builtin_ia32_pmulhuw256_mask">,
  4155. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4156. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4157. def int_x86_avx512_mask_pmulh_w_128 : GCCBuiltin<"__builtin_ia32_pmulhw128_mask">,
  4158. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4159. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4160. def int_x86_avx512_mask_pmulh_w_256 : GCCBuiltin<"__builtin_ia32_pmulhw256_mask">,
  4161. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4162. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4163. def int_x86_avx512_mask_pavg_b_512 : GCCBuiltin<"__builtin_ia32_pavgb512_mask">,
  4164. Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
  4165. llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
  4166. def int_x86_avx512_mask_pavg_w_512 : GCCBuiltin<"__builtin_ia32_pavgw512_mask">,
  4167. Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
  4168. llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4169. def int_x86_avx512_mask_pavg_b_128 : GCCBuiltin<"__builtin_ia32_pavgb128_mask">,
  4170. Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
  4171. llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
  4172. def int_x86_avx512_mask_pavg_b_256 : GCCBuiltin<"__builtin_ia32_pavgb256_mask">,
  4173. Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
  4174. llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
  4175. def int_x86_avx512_mask_pavg_w_128 : GCCBuiltin<"__builtin_ia32_pavgw128_mask">,
  4176. Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
  4177. llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
  4178. def int_x86_avx512_mask_pavg_w_256 : GCCBuiltin<"__builtin_ia32_pavgw256_mask">,
  4179. Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
  4180. llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
  4181. }
  4182. // Gather and Scatter ops
  4183. let TargetPrefix = "x86" in {
  4184. def int_x86_avx512_gather_dpd_512 : GCCBuiltin<"__builtin_ia32_gathersiv8df">,
  4185. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
  4186. llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
  4187. [IntrReadArgMem]>;
  4188. def int_x86_avx512_gather_dps_512 : GCCBuiltin<"__builtin_ia32_gathersiv16sf">,
  4189. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
  4190. llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
  4191. [IntrReadArgMem]>;
  4192. def int_x86_avx512_gather_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8df">,
  4193. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
  4194. llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
  4195. [IntrReadArgMem]>;
  4196. def int_x86_avx512_gather_qps_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">,
  4197. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
  4198. llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
  4199. [IntrReadArgMem]>;
  4200. def int_x86_avx512_gather_dpq_512 : GCCBuiltin<"__builtin_ia32_gathersiv8di">,
  4201. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
  4202. llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
  4203. [IntrReadArgMem]>;
  4204. def int_x86_avx512_gather_dpi_512 : GCCBuiltin<"__builtin_ia32_gathersiv16si">,
  4205. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
  4206. llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
  4207. [IntrReadArgMem]>;
  4208. def int_x86_avx512_gather_qpq_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8di">,
  4209. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
  4210. llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
  4211. [IntrReadArgMem]>;
  4212. def int_x86_avx512_gather_qpi_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16si">,
  4213. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
  4214. llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
  4215. [IntrReadArgMem]>;
  4216. def int_x86_avx512_gather3div2_df :
  4217. GCCBuiltin<"__builtin_ia32_gather3div2df">,
  4218. Intrinsic<[llvm_v2f64_ty],
  4219. [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
  4220. [IntrReadArgMem]>;
  4221. def int_x86_avx512_gather3div2_di :
  4222. GCCBuiltin<"__builtin_ia32_gather3div2di">,
  4223. Intrinsic<[llvm_v4i32_ty],
  4224. [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
  4225. [IntrReadArgMem]>;
  4226. def int_x86_avx512_gather3div4_df :
  4227. GCCBuiltin<"__builtin_ia32_gather3div4df">,
  4228. Intrinsic<[llvm_v4f64_ty],
  4229. [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
  4230. [IntrReadArgMem]>;
  4231. def int_x86_avx512_gather3div4_di :
  4232. GCCBuiltin<"__builtin_ia32_gather3div4di">,
  4233. Intrinsic<[llvm_v8i32_ty],
  4234. [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
  4235. [IntrReadArgMem]>;
  4236. def int_x86_avx512_gather3div4_sf :
  4237. GCCBuiltin<"__builtin_ia32_gather3div4sf">,
  4238. Intrinsic<[llvm_v4f32_ty],
  4239. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
  4240. [IntrReadArgMem]>;
  4241. def int_x86_avx512_gather3div4_si :
  4242. GCCBuiltin<"__builtin_ia32_gather3div4si">,
  4243. Intrinsic<[llvm_v4i32_ty],
  4244. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
  4245. [IntrReadArgMem]>;
  4246. def int_x86_avx512_gather3div8_sf :
  4247. GCCBuiltin<"__builtin_ia32_gather3div8sf">,
  4248. Intrinsic<[llvm_v4f32_ty],
  4249. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
  4250. [IntrReadArgMem]>;
  4251. def int_x86_avx512_gather3div8_si :
  4252. GCCBuiltin<"__builtin_ia32_gather3div8si">,
  4253. Intrinsic<[llvm_v4i32_ty],
  4254. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
  4255. [IntrReadArgMem]>;
  4256. def int_x86_avx512_gather3siv2_df :
  4257. GCCBuiltin<"__builtin_ia32_gather3siv2df">,
  4258. Intrinsic<[llvm_v2f64_ty],
  4259. [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4260. [IntrReadArgMem]>;
  4261. def int_x86_avx512_gather3siv2_di :
  4262. GCCBuiltin<"__builtin_ia32_gather3siv2di">,
  4263. Intrinsic<[llvm_v4i32_ty],
  4264. [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4265. [IntrReadArgMem]>;
  4266. def int_x86_avx512_gather3siv4_df :
  4267. GCCBuiltin<"__builtin_ia32_gather3siv4df">,
  4268. Intrinsic<[llvm_v4f64_ty],
  4269. [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4270. [IntrReadArgMem]>;
  4271. def int_x86_avx512_gather3siv4_di :
  4272. GCCBuiltin<"__builtin_ia32_gather3siv4di">,
  4273. Intrinsic<[llvm_v8i32_ty],
  4274. [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4275. [IntrReadArgMem]>;
  4276. def int_x86_avx512_gather3siv4_sf :
  4277. GCCBuiltin<"__builtin_ia32_gather3siv4sf">,
  4278. Intrinsic<[llvm_v4f32_ty],
  4279. [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4280. [IntrReadArgMem]>;
  4281. def int_x86_avx512_gather3siv4_si :
  4282. GCCBuiltin<"__builtin_ia32_gather3siv4si">,
  4283. Intrinsic<[llvm_v4i32_ty],
  4284. [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
  4285. [IntrReadArgMem]>;
  4286. def int_x86_avx512_gather3siv8_sf :
  4287. GCCBuiltin<"__builtin_ia32_gather3siv8sf">,
  4288. Intrinsic<[llvm_v8f32_ty],
  4289. [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
  4290. [IntrReadArgMem]>;
  4291. def int_x86_avx512_gather3siv8_si :
  4292. GCCBuiltin<"__builtin_ia32_gather3siv8si">,
  4293. Intrinsic<[llvm_v8i32_ty],
  4294. [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
  4295. [IntrReadArgMem]>;
  4296. // scatter
  4297. def int_x86_avx512_scatter_dpd_512 : GCCBuiltin<"__builtin_ia32_scattersiv8df">,
  4298. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
  4299. llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
  4300. [IntrReadWriteArgMem]>;
  4301. def int_x86_avx512_scatter_dps_512 : GCCBuiltin<"__builtin_ia32_scattersiv16sf">,
  4302. Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
  4303. llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
  4304. [IntrReadWriteArgMem]>;
  4305. def int_x86_avx512_scatter_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8df">,
  4306. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
  4307. llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
  4308. [IntrReadWriteArgMem]>;
  4309. def int_x86_avx512_scatter_qps_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">,
  4310. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
  4311. llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
  4312. [IntrReadWriteArgMem]>;
  4313. def int_x86_avx512_scatter_dpq_512 : GCCBuiltin<"__builtin_ia32_scattersiv8di">,
  4314. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
  4315. llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
  4316. [IntrReadWriteArgMem]>;
  4317. def int_x86_avx512_scatter_dpi_512 : GCCBuiltin<"__builtin_ia32_scattersiv16si">,
  4318. Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
  4319. llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
  4320. [IntrReadWriteArgMem]>;
  4321. def int_x86_avx512_scatter_qpq_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8di">,
  4322. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
  4323. llvm_i32_ty],
  4324. [IntrReadWriteArgMem]>;
  4325. def int_x86_avx512_scatter_qpi_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16si">,
  4326. Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty,
  4327. llvm_i32_ty],
  4328. [IntrReadWriteArgMem]>;
  4329. def int_x86_avx512_scatterdiv2_df :
  4330. GCCBuiltin<"__builtin_ia32_scatterdiv2df">,
  4331. Intrinsic<[],
  4332. [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
  4333. [IntrReadWriteArgMem]>;
  4334. def int_x86_avx512_scatterdiv2_di :
  4335. GCCBuiltin<"__builtin_ia32_scatterdiv2di">,
  4336. Intrinsic<[],
  4337. [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
  4338. [IntrReadWriteArgMem]>;
  4339. def int_x86_avx512_scatterdiv4_df :
  4340. GCCBuiltin<"__builtin_ia32_scatterdiv4df">,
  4341. Intrinsic<[],
  4342. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
  4343. [IntrReadWriteArgMem]>;
  4344. def int_x86_avx512_scatterdiv4_di :
  4345. GCCBuiltin<"__builtin_ia32_scatterdiv4di">,
  4346. Intrinsic<[],
  4347. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
  4348. [IntrReadWriteArgMem]>;
  4349. def int_x86_avx512_scatterdiv4_sf :
  4350. GCCBuiltin<"__builtin_ia32_scatterdiv4sf">,
  4351. Intrinsic<[],
  4352. [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
  4353. [IntrReadWriteArgMem]>;
  4354. def int_x86_avx512_scatterdiv4_si :
  4355. GCCBuiltin<"__builtin_ia32_scatterdiv4si">,
  4356. Intrinsic<[],
  4357. [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
  4358. [IntrReadWriteArgMem]>;
  4359. def int_x86_avx512_scatterdiv8_sf :
  4360. GCCBuiltin<"__builtin_ia32_scatterdiv8sf">,
  4361. Intrinsic<[],
  4362. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
  4363. [IntrReadWriteArgMem]>;
  4364. def int_x86_avx512_scatterdiv8_si :
  4365. GCCBuiltin<"__builtin_ia32_scatterdiv8si">,
  4366. Intrinsic<[],
  4367. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
  4368. [IntrReadWriteArgMem]>;
  4369. def int_x86_avx512_scattersiv2_df :
  4370. GCCBuiltin<"__builtin_ia32_scattersiv2df">,
  4371. Intrinsic<[],
  4372. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
  4373. [IntrReadWriteArgMem]>;
  4374. def int_x86_avx512_scattersiv2_di :
  4375. GCCBuiltin<"__builtin_ia32_scattersiv2di">,
  4376. Intrinsic<[],
  4377. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
  4378. [IntrReadWriteArgMem]>;
  4379. def int_x86_avx512_scattersiv4_df :
  4380. GCCBuiltin<"__builtin_ia32_scattersiv4df">,
  4381. Intrinsic<[],
  4382. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
  4383. [IntrReadWriteArgMem]>;
  4384. def int_x86_avx512_scattersiv4_di :
  4385. GCCBuiltin<"__builtin_ia32_scattersiv4di">,
  4386. Intrinsic<[],
  4387. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
  4388. [IntrReadWriteArgMem]>;
  4389. def int_x86_avx512_scattersiv4_sf :
  4390. GCCBuiltin<"__builtin_ia32_scattersiv4sf">,
  4391. Intrinsic<[],
  4392. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
  4393. [IntrReadWriteArgMem]>;
  4394. def int_x86_avx512_scattersiv4_si :
  4395. GCCBuiltin<"__builtin_ia32_scattersiv4si">,
  4396. Intrinsic<[],
  4397. [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
  4398. [IntrReadWriteArgMem]>;
  4399. def int_x86_avx512_scattersiv8_sf :
  4400. GCCBuiltin<"__builtin_ia32_scattersiv8sf">,
  4401. Intrinsic<[],
  4402. [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
  4403. [IntrReadWriteArgMem]>;
  4404. def int_x86_avx512_scattersiv8_si :
  4405. GCCBuiltin<"__builtin_ia32_scattersiv8si">,
  4406. Intrinsic<[],
  4407. [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
  4408. [IntrReadWriteArgMem]>;
  4409. // gather prefetch
  4410. def int_x86_avx512_gatherpf_dpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
  4411. Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
  4412. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4413. def int_x86_avx512_gatherpf_dps_512 : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
  4414. Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
  4415. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4416. def int_x86_avx512_gatherpf_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
  4417. Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
  4418. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4419. def int_x86_avx512_gatherpf_qps_512 : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
  4420. Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
  4421. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4422. // scatter prefetch
  4423. def int_x86_avx512_scatterpf_dpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
  4424. Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
  4425. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4426. def int_x86_avx512_scatterpf_dps_512 : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
  4427. Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
  4428. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4429. def int_x86_avx512_scatterpf_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
  4430. Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
  4431. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4432. def int_x86_avx512_scatterpf_qps_512 : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
  4433. Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
  4434. llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
  4435. }
  4436. // AVX-512 conflict detection
  4437. let TargetPrefix = "x86" in {
  4438. def int_x86_avx512_mask_conflict_d_512 :
  4439. GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">,
  4440. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  4441. llvm_v16i32_ty, llvm_i16_ty],
  4442. [IntrNoMem]>;
  4443. def int_x86_avx512_mask_conflict_q_512 :
  4444. GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">,
  4445. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  4446. llvm_v8i64_ty, llvm_i8_ty],
  4447. [IntrNoMem]>;
  4448. def int_x86_avx512_mask_lzcnt_d_512 :
  4449. GCCBuiltin<"__builtin_ia32_vplzcntd_512_mask">,
  4450. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
  4451. llvm_v16i32_ty, llvm_i16_ty],
  4452. [IntrNoMem]>;
  4453. def int_x86_avx512_mask_lzcnt_q_512 :
  4454. GCCBuiltin<"__builtin_ia32_vplzcntq_512_mask">,
  4455. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
  4456. llvm_v8i64_ty, llvm_i8_ty],
  4457. [IntrNoMem]>;
  4458. }
  4459. // Vector blend
  4460. let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
  4461. def int_x86_avx512_mask_blend_ps_512 : GCCBuiltin<"__builtin_ia32_blendmps_512_mask">,
  4462. Intrinsic<[llvm_v16f32_ty],
  4463. [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
  4464. [IntrNoMem]>;
  4465. def int_x86_avx512_mask_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendmps_256_mask">,
  4466. Intrinsic<[llvm_v8f32_ty],
  4467. [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
  4468. [IntrNoMem]>;
  4469. def int_x86_avx512_mask_blend_ps_128 : GCCBuiltin<"__builtin_ia32_blendmps_128_mask">,
  4470. Intrinsic<[llvm_v4f32_ty],
  4471. [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
  4472. [IntrNoMem]>;
  4473. def int_x86_avx512_mask_blend_pd_512 : GCCBuiltin<"__builtin_ia32_blendmpd_512_mask">,
  4474. Intrinsic<[llvm_v8f64_ty],
  4475. [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
  4476. [IntrNoMem]>;
  4477. def int_x86_avx512_mask_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendmpd_256_mask">,
  4478. Intrinsic<[llvm_v4f64_ty],
  4479. [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
  4480. [IntrNoMem]>;
  4481. def int_x86_avx512_mask_blend_pd_128 : GCCBuiltin<"__builtin_ia32_blendmpd_128_mask">,
  4482. Intrinsic<[llvm_v2f64_ty],
  4483. [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
  4484. [IntrNoMem]>;
  4485. def int_x86_avx512_mask_blend_d_512 : GCCBuiltin<"__builtin_ia32_blendmd_512_mask">,
  4486. Intrinsic<[llvm_v16i32_ty],
  4487. [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  4488. [IntrNoMem]>;
  4489. def int_x86_avx512_mask_blend_q_512 : GCCBuiltin<"__builtin_ia32_blendmq_512_mask">,
  4490. Intrinsic<[llvm_v8i64_ty],
  4491. [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  4492. [IntrNoMem]>;
  4493. def int_x86_avx512_mask_blend_d_256 : GCCBuiltin<"__builtin_ia32_blendmd_256_mask">,
  4494. Intrinsic<[llvm_v8i32_ty],
  4495. [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  4496. [IntrNoMem]>;
  4497. def int_x86_avx512_mask_blend_q_256 : GCCBuiltin<"__builtin_ia32_blendmq_256_mask">,
  4498. Intrinsic<[llvm_v4i64_ty],
  4499. [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  4500. [IntrNoMem]>;
  4501. def int_x86_avx512_mask_blend_d_128 : GCCBuiltin<"__builtin_ia32_blendmd_128_mask">,
  4502. Intrinsic<[llvm_v4i32_ty],
  4503. [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  4504. [IntrNoMem]>;
  4505. def int_x86_avx512_mask_blend_q_128 : GCCBuiltin<"__builtin_ia32_blendmq_128_mask">,
  4506. Intrinsic<[llvm_v2i64_ty],
  4507. [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  4508. [IntrNoMem]>;
  4509. def int_x86_avx512_mask_blend_w_512 : GCCBuiltin<"__builtin_ia32_blendmw_512_mask">,
  4510. Intrinsic<[llvm_v32i16_ty],
  4511. [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  4512. [IntrNoMem]>;
  4513. def int_x86_avx512_mask_blend_w_256 : GCCBuiltin<"__builtin_ia32_blendmw_256_mask">,
  4514. Intrinsic<[llvm_v16i16_ty],
  4515. [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  4516. [IntrNoMem]>;
  4517. def int_x86_avx512_mask_blend_w_128 : GCCBuiltin<"__builtin_ia32_blendmw_128_mask">,
  4518. Intrinsic<[llvm_v8i16_ty],
  4519. [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  4520. [IntrNoMem]>;
  4521. def int_x86_avx512_mask_blend_b_512 : GCCBuiltin<"__builtin_ia32_blendmb_512_mask">,
  4522. Intrinsic<[llvm_v64i8_ty],
  4523. [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
  4524. [IntrNoMem]>;
  4525. def int_x86_avx512_mask_blend_b_256 : GCCBuiltin<"__builtin_ia32_blendmb_256_mask">,
  4526. Intrinsic<[llvm_v32i8_ty],
  4527. [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
  4528. [IntrNoMem]>;
  4529. def int_x86_avx512_mask_blend_b_128 : GCCBuiltin<"__builtin_ia32_blendmb_128_mask">,
  4530. Intrinsic<[llvm_v16i8_ty],
  4531. [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
  4532. [IntrNoMem]>;
  4533. }
  4534. let TargetPrefix = "x86" in {
  4535. def int_x86_avx512_mask_valign_q_512 : GCCBuiltin<"__builtin_ia32_alignq512_mask">,
  4536. Intrinsic<[llvm_v8i64_ty],
  4537. [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_i8_ty],
  4538. [IntrNoMem]>;
  4539. def int_x86_avx512_mask_valign_d_512 : GCCBuiltin<"__builtin_ia32_alignd512_mask">,
  4540. Intrinsic<[llvm_v16i32_ty],
  4541. [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i8_ty, llvm_v16i32_ty, llvm_i16_ty],
  4542. [IntrNoMem]>;
  4543. }
  4544. // Compares
  4545. let TargetPrefix = "x86" in {
  4546. // 512-bit
  4547. def int_x86_avx512_mask_pcmpeq_b_512 : GCCBuiltin<"__builtin_ia32_pcmpeqb512_mask">,
  4548. Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
  4549. [IntrNoMem]>;
  4550. def int_x86_avx512_mask_pcmpeq_w_512 : GCCBuiltin<"__builtin_ia32_pcmpeqw512_mask">,
  4551. Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  4552. [IntrNoMem]>;
  4553. def int_x86_avx512_mask_pcmpeq_d_512 : GCCBuiltin<"__builtin_ia32_pcmpeqd512_mask">,
  4554. Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  4555. [IntrNoMem]>;
  4556. def int_x86_avx512_mask_pcmpeq_q_512 : GCCBuiltin<"__builtin_ia32_pcmpeqq512_mask">,
  4557. Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  4558. [IntrNoMem]>;
  4559. def int_x86_avx512_mask_pcmpgt_b_512: GCCBuiltin<"__builtin_ia32_pcmpgtb512_mask">,
  4560. Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
  4561. [IntrNoMem]>;
  4562. def int_x86_avx512_mask_pcmpgt_w_512: GCCBuiltin<"__builtin_ia32_pcmpgtw512_mask">,
  4563. Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
  4564. [IntrNoMem]>;
  4565. def int_x86_avx512_mask_pcmpgt_d_512: GCCBuiltin<"__builtin_ia32_pcmpgtd512_mask">,
  4566. Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
  4567. [IntrNoMem]>;
  4568. def int_x86_avx512_mask_pcmpgt_q_512: GCCBuiltin<"__builtin_ia32_pcmpgtq512_mask">,
  4569. Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
  4570. [IntrNoMem]>;
  4571. def int_x86_avx512_mask_cmp_b_512: GCCBuiltin<"__builtin_ia32_cmpb512_mask">,
  4572. Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
  4573. llvm_i64_ty], [IntrNoMem]>;
  4574. def int_x86_avx512_mask_cmp_w_512: GCCBuiltin<"__builtin_ia32_cmpw512_mask">,
  4575. Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
  4576. llvm_i32_ty], [IntrNoMem]>;
  4577. def int_x86_avx512_mask_cmp_d_512: GCCBuiltin<"__builtin_ia32_cmpd512_mask">,
  4578. Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
  4579. llvm_i16_ty], [IntrNoMem ]>;
  4580. def int_x86_avx512_mask_cmp_q_512: GCCBuiltin<"__builtin_ia32_cmpq512_mask">,
  4581. Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
  4582. llvm_i8_ty], [IntrNoMem]>;
  4583. def int_x86_avx512_mask_ucmp_b_512: GCCBuiltin<"__builtin_ia32_ucmpb512_mask">,
  4584. Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
  4585. llvm_i64_ty], [IntrNoMem]>;
  4586. def int_x86_avx512_mask_ucmp_w_512: GCCBuiltin<"__builtin_ia32_ucmpw512_mask">,
  4587. Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
  4588. llvm_i32_ty], [IntrNoMem]>;
  4589. def int_x86_avx512_mask_ucmp_d_512: GCCBuiltin<"__builtin_ia32_ucmpd512_mask">,
  4590. Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
  4591. llvm_i16_ty], [IntrNoMem]>;
  4592. def int_x86_avx512_mask_ucmp_q_512: GCCBuiltin<"__builtin_ia32_ucmpq512_mask">,
  4593. Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
  4594. llvm_i8_ty], [IntrNoMem]>;
  4595. // 256-bit
  4596. def int_x86_avx512_mask_pcmpeq_b_256 : GCCBuiltin<"__builtin_ia32_pcmpeqb256_mask">,
  4597. Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
  4598. [IntrNoMem]>;
  4599. def int_x86_avx512_mask_pcmpeq_w_256 : GCCBuiltin<"__builtin_ia32_pcmpeqw256_mask">,
  4600. Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  4601. [IntrNoMem]>;
  4602. def int_x86_avx512_mask_pcmpeq_d_256 : GCCBuiltin<"__builtin_ia32_pcmpeqd256_mask">,
  4603. Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  4604. [IntrNoMem]>;
  4605. def int_x86_avx512_mask_pcmpeq_q_256 : GCCBuiltin<"__builtin_ia32_pcmpeqq256_mask">,
  4606. Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  4607. [IntrNoMem]>;
  4608. def int_x86_avx512_mask_pcmpgt_b_256: GCCBuiltin<"__builtin_ia32_pcmpgtb256_mask">,
  4609. Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
  4610. [IntrNoMem]>;
  4611. def int_x86_avx512_mask_pcmpgt_w_256: GCCBuiltin<"__builtin_ia32_pcmpgtw256_mask">,
  4612. Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
  4613. [IntrNoMem]>;
  4614. def int_x86_avx512_mask_pcmpgt_d_256: GCCBuiltin<"__builtin_ia32_pcmpgtd256_mask">,
  4615. Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
  4616. [IntrNoMem]>;
  4617. def int_x86_avx512_mask_pcmpgt_q_256: GCCBuiltin<"__builtin_ia32_pcmpgtq256_mask">,
  4618. Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
  4619. [IntrNoMem]>;
  4620. def int_x86_avx512_mask_cmp_b_256: GCCBuiltin<"__builtin_ia32_cmpb256_mask">,
  4621. Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
  4622. llvm_i32_ty], [IntrNoMem]>;
  4623. def int_x86_avx512_mask_cmp_w_256: GCCBuiltin<"__builtin_ia32_cmpw256_mask">,
  4624. Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
  4625. llvm_i16_ty], [IntrNoMem]>;
  4626. def int_x86_avx512_mask_cmp_d_256: GCCBuiltin<"__builtin_ia32_cmpd256_mask">,
  4627. Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
  4628. llvm_i8_ty], [IntrNoMem]>;
  4629. def int_x86_avx512_mask_cmp_q_256: GCCBuiltin<"__builtin_ia32_cmpq256_mask">,
  4630. Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
  4631. llvm_i8_ty], [IntrNoMem]>;
  4632. def int_x86_avx512_mask_ucmp_b_256: GCCBuiltin<"__builtin_ia32_ucmpb256_mask">,
  4633. Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
  4634. llvm_i32_ty], [IntrNoMem]>;
  4635. def int_x86_avx512_mask_ucmp_w_256: GCCBuiltin<"__builtin_ia32_ucmpw256_mask">,
  4636. Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
  4637. llvm_i16_ty], [IntrNoMem]>;
  4638. def int_x86_avx512_mask_ucmp_d_256: GCCBuiltin<"__builtin_ia32_ucmpd256_mask">,
  4639. Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
  4640. llvm_i8_ty], [IntrNoMem]>;
  4641. def int_x86_avx512_mask_ucmp_q_256: GCCBuiltin<"__builtin_ia32_ucmpq256_mask">,
  4642. Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
  4643. llvm_i8_ty], [IntrNoMem]>;
  4644. // 128-bit
  4645. def int_x86_avx512_mask_pcmpeq_b_128 : GCCBuiltin<"__builtin_ia32_pcmpeqb128_mask">,
  4646. Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
  4647. [IntrNoMem]>;
  4648. def int_x86_avx512_mask_pcmpeq_w_128 : GCCBuiltin<"__builtin_ia32_pcmpeqw128_mask">,
  4649. Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  4650. [IntrNoMem]>;
  4651. def int_x86_avx512_mask_pcmpeq_d_128 : GCCBuiltin<"__builtin_ia32_pcmpeqd128_mask">,
  4652. Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  4653. [IntrNoMem]>;
  4654. def int_x86_avx512_mask_pcmpeq_q_128 : GCCBuiltin<"__builtin_ia32_pcmpeqq128_mask">,
  4655. Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  4656. [IntrNoMem]>;
  4657. def int_x86_avx512_mask_pcmpgt_b_128: GCCBuiltin<"__builtin_ia32_pcmpgtb128_mask">,
  4658. Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
  4659. [IntrNoMem]>;
  4660. def int_x86_avx512_mask_pcmpgt_w_128: GCCBuiltin<"__builtin_ia32_pcmpgtw128_mask">,
  4661. Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
  4662. [IntrNoMem]>;
  4663. def int_x86_avx512_mask_pcmpgt_d_128: GCCBuiltin<"__builtin_ia32_pcmpgtd128_mask">,
  4664. Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  4665. [IntrNoMem]>;
  4666. def int_x86_avx512_mask_pcmpgt_q_128: GCCBuiltin<"__builtin_ia32_pcmpgtq128_mask">,
  4667. Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
  4668. [IntrNoMem]>;
  4669. def int_x86_avx512_mask_cmp_b_128: GCCBuiltin<"__builtin_ia32_cmpb128_mask">,
  4670. Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  4671. llvm_i16_ty], [IntrNoMem]>;
  4672. def int_x86_avx512_mask_cmp_w_128: GCCBuiltin<"__builtin_ia32_cmpw128_mask">,
  4673. Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
  4674. llvm_i8_ty], [IntrNoMem]>;
  4675. def int_x86_avx512_mask_cmp_d_128: GCCBuiltin<"__builtin_ia32_cmpd128_mask">,
  4676. Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
  4677. llvm_i8_ty], [IntrNoMem]>;
  4678. def int_x86_avx512_mask_cmp_q_128: GCCBuiltin<"__builtin_ia32_cmpq128_mask">,
  4679. Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
  4680. llvm_i8_ty], [IntrNoMem]>;
  4681. def int_x86_avx512_mask_ucmp_b_128: GCCBuiltin<"__builtin_ia32_ucmpb128_mask">,
  4682. Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
  4683. llvm_i16_ty], [IntrNoMem]>;
  4684. def int_x86_avx512_mask_ucmp_w_128: GCCBuiltin<"__builtin_ia32_ucmpw128_mask">,
  4685. Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
  4686. llvm_i8_ty], [IntrNoMem]>;
  4687. def int_x86_avx512_mask_ucmp_d_128: GCCBuiltin<"__builtin_ia32_ucmpd128_mask">,
  4688. Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
  4689. llvm_i8_ty], [IntrNoMem]>;
  4690. def int_x86_avx512_mask_ucmp_q_128: GCCBuiltin<"__builtin_ia32_ucmpq128_mask">,
  4691. Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
  4692. llvm_i8_ty], [IntrNoMem]>;
  4693. }
  4694. // Compress, Expand
  4695. let TargetPrefix = "x86" in {
  4696. def int_x86_avx512_mask_compress_ps_512 :
  4697. GCCBuiltin<"__builtin_ia32_compresssf512_mask">,
  4698. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  4699. llvm_i16_ty], [IntrNoMem]>;
  4700. def int_x86_avx512_mask_compress_pd_512 :
  4701. GCCBuiltin<"__builtin_ia32_compressdf512_mask">,
  4702. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  4703. llvm_i8_ty], [IntrNoMem]>;
  4704. def int_x86_avx512_mask_compress_ps_256 :
  4705. GCCBuiltin<"__builtin_ia32_compresssf256_mask">,
  4706. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  4707. llvm_i8_ty], [IntrNoMem]>;
  4708. def int_x86_avx512_mask_compress_pd_256 :
  4709. GCCBuiltin<"__builtin_ia32_compressdf256_mask">,
  4710. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  4711. llvm_i8_ty], [IntrNoMem]>;
  4712. def int_x86_avx512_mask_compress_ps_128 :
  4713. GCCBuiltin<"__builtin_ia32_compresssf128_mask">,
  4714. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  4715. llvm_i8_ty], [IntrNoMem]>;
  4716. def int_x86_avx512_mask_compress_pd_128 :
  4717. GCCBuiltin<"__builtin_ia32_compressdf128_mask">,
  4718. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  4719. llvm_i8_ty], [IntrNoMem]>;
  4720. def int_x86_avx512_mask_compress_store_ps_512 :
  4721. GCCBuiltin<"__builtin_ia32_compressstoresf512_mask">,
  4722. Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty,
  4723. llvm_i16_ty], [IntrReadWriteArgMem]>;
  4724. def int_x86_avx512_mask_compress_store_pd_512 :
  4725. GCCBuiltin<"__builtin_ia32_compressstoredf512_mask">,
  4726. Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty,
  4727. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4728. def int_x86_avx512_mask_compress_store_ps_256 :
  4729. GCCBuiltin<"__builtin_ia32_compressstoresf256_mask">,
  4730. Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty,
  4731. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4732. def int_x86_avx512_mask_compress_store_pd_256 :
  4733. GCCBuiltin<"__builtin_ia32_compressstoredf256_mask">,
  4734. Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty,
  4735. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4736. def int_x86_avx512_mask_compress_store_ps_128 :
  4737. GCCBuiltin<"__builtin_ia32_compressstoresf128_mask">,
  4738. Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty,
  4739. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4740. def int_x86_avx512_mask_compress_store_pd_128 :
  4741. GCCBuiltin<"__builtin_ia32_compressstoredf128_mask">,
  4742. Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty,
  4743. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4744. def int_x86_avx512_mask_compress_d_512 :
  4745. GCCBuiltin<"__builtin_ia32_compresssi512_mask">,
  4746. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4747. llvm_i16_ty], [IntrNoMem]>;
  4748. def int_x86_avx512_mask_compress_q_512 :
  4749. GCCBuiltin<"__builtin_ia32_compressdi512_mask">,
  4750. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  4751. llvm_i8_ty], [IntrNoMem]>;
  4752. def int_x86_avx512_mask_compress_d_256 :
  4753. GCCBuiltin<"__builtin_ia32_compresssi256_mask">,
  4754. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4755. llvm_i8_ty], [IntrNoMem]>;
  4756. def int_x86_avx512_mask_compress_q_256 :
  4757. GCCBuiltin<"__builtin_ia32_compressdi256_mask">,
  4758. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  4759. llvm_i8_ty], [IntrNoMem]>;
  4760. def int_x86_avx512_mask_compress_d_128 :
  4761. GCCBuiltin<"__builtin_ia32_compresssi128_mask">,
  4762. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4763. llvm_i8_ty], [IntrNoMem]>;
  4764. def int_x86_avx512_mask_compress_q_128 :
  4765. GCCBuiltin<"__builtin_ia32_compressdi128_mask">,
  4766. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  4767. llvm_i8_ty], [IntrNoMem]>;
  4768. def int_x86_avx512_mask_compress_store_d_512 :
  4769. GCCBuiltin<"__builtin_ia32_compressstoresi512_mask">,
  4770. Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty,
  4771. llvm_i16_ty], [IntrReadWriteArgMem]>;
  4772. def int_x86_avx512_mask_compress_store_q_512 :
  4773. GCCBuiltin<"__builtin_ia32_compressstoredi512_mask">,
  4774. Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty,
  4775. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4776. def int_x86_avx512_mask_compress_store_d_256 :
  4777. GCCBuiltin<"__builtin_ia32_compressstoresi256_mask">,
  4778. Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty,
  4779. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4780. def int_x86_avx512_mask_compress_store_q_256 :
  4781. GCCBuiltin<"__builtin_ia32_compressstoredi256_mask">,
  4782. Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty,
  4783. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4784. def int_x86_avx512_mask_compress_store_d_128 :
  4785. GCCBuiltin<"__builtin_ia32_compressstoresi128_mask">,
  4786. Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty,
  4787. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4788. def int_x86_avx512_mask_compress_store_q_128 :
  4789. GCCBuiltin<"__builtin_ia32_compressstoredi128_mask">,
  4790. Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty,
  4791. llvm_i8_ty], [IntrReadWriteArgMem]>;
  4792. // expand
  4793. def int_x86_avx512_mask_expand_ps_512 :
  4794. GCCBuiltin<"__builtin_ia32_expandsf512_mask">,
  4795. Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  4796. llvm_i16_ty], [IntrNoMem]>;
  4797. def int_x86_avx512_mask_expand_pd_512 :
  4798. GCCBuiltin<"__builtin_ia32_expanddf512_mask">,
  4799. Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  4800. llvm_i8_ty], [IntrNoMem]>;
  4801. def int_x86_avx512_mask_expand_ps_256 :
  4802. GCCBuiltin<"__builtin_ia32_expandsf256_mask">,
  4803. Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  4804. llvm_i8_ty], [IntrNoMem]>;
  4805. def int_x86_avx512_mask_expand_pd_256 :
  4806. GCCBuiltin<"__builtin_ia32_expanddf256_mask">,
  4807. Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  4808. llvm_i8_ty], [IntrNoMem]>;
  4809. def int_x86_avx512_mask_expand_ps_128 :
  4810. GCCBuiltin<"__builtin_ia32_expandsf128_mask">,
  4811. Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  4812. llvm_i8_ty], [IntrNoMem]>;
  4813. def int_x86_avx512_mask_expand_pd_128 :
  4814. GCCBuiltin<"__builtin_ia32_expanddf128_mask">,
  4815. Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  4816. llvm_i8_ty], [IntrNoMem]>;
  4817. def int_x86_avx512_mask_expand_load_ps_512 :
  4818. GCCBuiltin<"__builtin_ia32_expandloadsf512_mask">,
  4819. Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty,
  4820. llvm_i16_ty], [IntrReadArgMem]>;
  4821. def int_x86_avx512_mask_expand_load_pd_512 :
  4822. GCCBuiltin<"__builtin_ia32_expandloaddf512_mask">,
  4823. Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty,
  4824. llvm_i8_ty], [IntrReadArgMem]>;
  4825. def int_x86_avx512_mask_expand_load_ps_256 :
  4826. GCCBuiltin<"__builtin_ia32_expandloadsf256_mask">,
  4827. Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty,
  4828. llvm_i8_ty], [IntrReadArgMem]>;
  4829. def int_x86_avx512_mask_expand_load_pd_256 :
  4830. GCCBuiltin<"__builtin_ia32_expandloaddf256_mask">,
  4831. Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty,
  4832. llvm_i8_ty], [IntrReadArgMem]>;
  4833. def int_x86_avx512_mask_expand_load_ps_128 :
  4834. GCCBuiltin<"__builtin_ia32_expandloadsf128_mask">,
  4835. Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty,
  4836. llvm_i8_ty], [IntrReadArgMem]>;
  4837. def int_x86_avx512_mask_expand_load_pd_128 :
  4838. GCCBuiltin<"__builtin_ia32_expandloaddf128_mask">,
  4839. Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty,
  4840. llvm_i8_ty], [IntrReadArgMem]>;
  4841. def int_x86_avx512_mask_expand_d_512 :
  4842. GCCBuiltin<"__builtin_ia32_expandsi512_mask">,
  4843. Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
  4844. llvm_i16_ty], [IntrNoMem]>;
  4845. def int_x86_avx512_mask_expand_q_512 :
  4846. GCCBuiltin<"__builtin_ia32_expanddi512_mask">,
  4847. Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
  4848. llvm_i8_ty], [IntrNoMem]>;
  4849. def int_x86_avx512_mask_expand_d_256 :
  4850. GCCBuiltin<"__builtin_ia32_expandsi256_mask">,
  4851. Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
  4852. llvm_i8_ty], [IntrNoMem]>;
  4853. def int_x86_avx512_mask_expand_q_256 :
  4854. GCCBuiltin<"__builtin_ia32_expanddi256_mask">,
  4855. Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
  4856. llvm_i8_ty], [IntrNoMem]>;
  4857. def int_x86_avx512_mask_expand_d_128 :
  4858. GCCBuiltin<"__builtin_ia32_expandsi128_mask">,
  4859. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
  4860. llvm_i8_ty], [IntrNoMem]>;
  4861. def int_x86_avx512_mask_expand_q_128 :
  4862. GCCBuiltin<"__builtin_ia32_expanddi128_mask">,
  4863. Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
  4864. llvm_i8_ty], [IntrNoMem]>;
  4865. def int_x86_avx512_mask_expand_load_d_512 :
  4866. GCCBuiltin<"__builtin_ia32_expandloadsi512_mask">,
  4867. Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty,
  4868. llvm_i16_ty], [IntrReadArgMem]>;
  4869. def int_x86_avx512_mask_expand_load_q_512 :
  4870. GCCBuiltin<"__builtin_ia32_expandloaddi512_mask">,
  4871. Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty,
  4872. llvm_i8_ty], [IntrReadArgMem]>;
  4873. def int_x86_avx512_mask_expand_load_d_256 :
  4874. GCCBuiltin<"__builtin_ia32_expandloadsi256_mask">,
  4875. Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty,
  4876. llvm_i8_ty], [IntrReadArgMem]>;
  4877. def int_x86_avx512_mask_expand_load_q_256 :
  4878. GCCBuiltin<"__builtin_ia32_expandloaddi256_mask">,
  4879. Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty,
  4880. llvm_i8_ty], [IntrReadArgMem]>;
  4881. def int_x86_avx512_mask_expand_load_d_128 :
  4882. GCCBuiltin<"__builtin_ia32_expandloadsi128_mask">,
  4883. Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty,
  4884. llvm_i8_ty], [IntrReadArgMem]>;
  4885. def int_x86_avx512_mask_expand_load_q_128 :
  4886. GCCBuiltin<"__builtin_ia32_expandloaddi128_mask">,
  4887. Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty,
  4888. llvm_i8_ty], [IntrReadArgMem]>;
  4889. }
  4890. // Misc.
  4891. let TargetPrefix = "x86" in {
  4892. def int_x86_avx512_mask_cmp_ps_512 :
  4893. GCCBuiltin<"__builtin_ia32_cmpps512_mask">,
  4894. Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
  4895. llvm_i32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
  4896. def int_x86_avx512_mask_cmp_pd_512 :
  4897. GCCBuiltin<"__builtin_ia32_cmppd512_mask">,
  4898. Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
  4899. llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
  4900. def int_x86_avx512_mask_cmp_ps_256 :
  4901. GCCBuiltin<"__builtin_ia32_cmpps256_mask">,
  4902. Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
  4903. llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4904. def int_x86_avx512_mask_cmp_pd_256 :
  4905. GCCBuiltin<"__builtin_ia32_cmppd256_mask">,
  4906. Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
  4907. llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4908. def int_x86_avx512_mask_cmp_ps_128 :
  4909. GCCBuiltin<"__builtin_ia32_cmpps128_mask">,
  4910. Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
  4911. llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4912. def int_x86_avx512_mask_cmp_pd_128 :
  4913. GCCBuiltin<"__builtin_ia32_cmppd128_mask">,
  4914. Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
  4915. llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
  4916. def int_x86_avx512_movntdqa :
  4917. GCCBuiltin<"__builtin_ia32_movntdqa512">,
  4918. Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
  4919. }
  4920. //===----------------------------------------------------------------------===//
  4921. // SHA intrinsics
  4922. let TargetPrefix = "x86" in {
  4923. def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
  4924. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
  4925. [IntrNoMem]>;
  4926. def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
  4927. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  4928. def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
  4929. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  4930. def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">,
  4931. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  4932. def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">,
  4933. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
  4934. [IntrNoMem]>;
  4935. def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">,
  4936. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  4937. def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">,
  4938. Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
  4939. }