| /* PR c/102989 */ |
| /* { dg-do run { target { bitint && int32plus } } } */ |
| /* { dg-options "-std=gnu23" } */ |
| /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ |
| /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ |
| |
| #if __BITINT_MAXWIDTH__ >= 251 |
| __attribute__((noipa)) _BitInt(251) |
| foo_251 (_BitInt(251) x, _BitInt(251) y, _BitInt(251) z) |
| { |
| return (x * 42) + (y + z) * -13295847598437589437584395wb; |
| } |
| |
| __attribute__((noipa)) _BitInt(251) |
| bar_251 (_BitInt(251) x, unsigned _BitInt(211) y, _BitInt(251) z) |
| { |
| if (x >= 139845735984wb || x <= -139845735984wb) |
| __builtin_unreachable (); |
| return (x * 42) + y * z; |
| } |
| #endif |
| |
| #if __BITINT_MAXWIDTH__ >= 274 && defined(__SIZEOF_INT128__) |
| __attribute__((noipa)) _BitInt(574) |
| foo_574 (_BitInt(574) x, __int128 y, int z) |
| { |
| return x * y + x * z; |
| } |
| #endif |
| |
| #if __BITINT_MAXWIDTH__ >= 274 |
| __attribute__((noipa)) unsigned _BitInt(574) |
| bar_574 (unsigned _BitInt(574) x, _BitInt(231) y, unsigned _BitInt(231) z, unsigned _BitInt(574) a) |
| { |
| _BitInt(287) w = y; |
| _BitInt(231) v = (_BitInt(231)) z; |
| _BitInt(287) u = v; |
| return x * w + a * u; |
| } |
| |
| __attribute__((noipa)) unsigned _BitInt(271) |
| baz_574 (unsigned _BitInt(271) x, _BitInt(574) y) |
| { |
| if (y >= 139845735984wb || y <= -139845735984wb) |
| __builtin_unreachable (); |
| return x * (unsigned _BitInt(271)) y; |
| } |
| #endif |
| |
| int |
| main () |
| { |
| #if __BITINT_MAXWIDTH__ >= 251 |
| static _BitInt(251) s251[] = { |
| 14492268074422240072381201900068160215333038638908804267546082474872103453wb, |
| 675218251468166080020913826378654880460963853057558284085495091870180550wb, |
| -675218251468166080020959605725458087975245668339558473870927889256690061wb, |
| -139845735981wb, |
| 324639141258847384727959753569292057577687203071371684930924253wb, |
| 1087290800830wb |
| }; |
| _BitInt(251) a251 = foo_251 (s251[0], s251[1], s251[2]); |
| if (a251 != 1217350477377202249120031439408588187131962868502518732097281406269161025871wb) |
| __builtin_abort (); |
| _BitInt(251) b251 = bar_251 (s251[3], s251[4], s251[5]); |
| if (b251 != 352977151880095667263614472150365012179801988966714554955131068402918618788wb) |
| __builtin_abort (); |
| #endif |
| #if __BITINT_MAXWIDTH__ >= 574 |
| static _BitInt(574) s574 |
| = -219356128782553279814913626158411711140801689317931406799100755440262023325014648411412728943485405803043129187408541215111743475318581wb; |
| #ifdef __SIZEOF_INT128__ |
| _BitInt(574) a574 = foo_574 (s574, 82625523151678902953603407887262843433wb, -1845137725); |
| if (a574 != -18124414897185514989959611747585480593042904176332662608326479231051632926435887114574980277665683285141927551496724599123576825185653577703648854819279658769883513402160348wb) |
| __builtin_abort (); |
| #endif |
| static unsigned _BitInt(574) u574[] = { |
| 52437079816179410811636905891411754807147405868482583243559735153324503490239312503359712796401481190029201386135205713917847314204739635852931994918423899615130723009259686uwb, |
| 45269866460552189474732773540973151549203847819115194862112414296072167098695417407106646749337072175534165739911745591080506448641600205866240027517670273657001894552180234uwb, |
| 9180917912712609437909586196568830786346456714119640856730259437790973527459849487895103863584234525859590698749982125884487194000401583172193548884761272331911564480124878uwb, |
| 11049512233686559553687636036663446413022165259892524030717648180326957779916930880483808447448446584642734113622685260963900225478745988370450191005955141795745690734947571uwb, |
| 47663369272354253242910978827267365842851495123515313737663958515768452802250710665542640440990559573730917816406856556730100799652539291367902764980370386873495017607993411uwb, |
| 18215014622276393791745550421148998901660352490811211087424965165803902184090598141881549641537877241526565777992183348471991467868259791203907545956986039786453071578011434uwb, |
| 31740235950157332221439070489628722839769958133906789091713734411951000853909663917518016071789015372380206595539133512032995220911059581277451361109633464034310397164665564uwb, |
| 10450847162543795294901585004050399762545006892613453868263703161802323302908254646557151245191494710406620278412346326386062698341158038281632905480774145352377805385543092uwb, |
| 19453023158842453405396915599369210861261573519874550548893523502986640805175433191781338575797970717670733269190857402493766307964168520080852675173587364248259309552168430uwb, |
| 41244368675818170615108799247368989151384052534670384186902588532722396202878099538345240688084993610469542913084982675850069064350042690913662957238816036434888665664037846uwb, |
| 16719362016737006280008309688585219733130381598157287999202010698266470616548718462522730730476541950851348747767571521700255425942578137654761356039235313588531776459325708uwb, |
| 10475917472649802727102296550431840421435279490948846996006476240420369031587862359912739671064811272746210509826242404174149288385636488194271969135287801110662285317095981uwb, |
| 1163912911803352668493394805506325912661919234067386269274323760640925113542354050648690202267829712352143945896104268132186183304256748687336699391633352420957751382619669uwb, |
| 8802741787945718202007440863180520530918335416409181790035566968168103145420485853909047361251267032896173190843315221928932703515727560628431319297083973682964053958087246uwb, |
| 19791342948421817380238010195638893503615644292584928829415951859564239969766035100704913746176442012398341262166756998845831007892328794072245007765812537811265165604315700uwb, |
| 16642284329136906697237309134287786314682533828330755403465475806950133035971596597211127434533311710048393623437103786994963036388804007132262710130242198695003152238215628uwb, |
| 2155325970411161010229823956524370uwb, |
| 697446886254974788952071928578631979965uwb, |
| 108165657554251490446057511316485495uwb, |
| 9487120152929104576906851118100261958096487535uwb, |
| -136538663022088871346045694473572wb, |
| -1666960912074801530926062313122413146603wb, |
| -15940673946961553912565090695396320wb, |
| 264462353975419400604468749561884442664wb, |
| 50826882861731683785919742135963976479884717145067744452535625618737864973658554226615085532399945662542810296565555980855512176679463978891752486331179893311834461777517318uwb, |
| 16170033701813896205634802741964500343094214191596485883117074926829904835328260995277267910766680743976283458668064421272599104442706448899915189301332650772687724575723182uwb, |
| 13009027737564179578240898152688856367334005472217232817755080920783012286505432066490161649175068937710374621121911926344239719476459487715714492624089105621335225676985872uwb, |
| 49336707246523391872334763713437428863232354140618977476842520346079224652928216135156362963444355821534349959448992339768542254081420292190058456423815350822979116396882390uwb, |
| 1026180591140992942712368030740883182331172637458255292975945323684907793150051875uwb, |
| 61832600368276133515125630254911797508782837275302959978515764023224306276632966792579100265310761243411314314780717702156716099193191615778530561481120811604064555385654220uwb, |
| 3635377841759794164811391623635227990564259993543952474130713407348044048553863186uwb, |
| -139845735971wb |
| }; |
| for (int i = 0; i < 6; ++i) |
| if (bar_574 (u574[4 * i], u574[4 * i + 1], u574[4 * i + 2], u574[4 * i + 3]) != u574[i + 24]) |
| __builtin_abort (); |
| if (baz_574 (u574[30], u574[31]) != 1212103790378493380735221770817318414499452864884443699768488049528961780122040714uwb) |
| __builtin_abort (); |
| #endif |
| } |