Require target lra in gcc.dg/pr108095.c
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / bitint-42.c
blob10cd95bcac519e85b95efe586658363f6a2cc6f0
1 /* PR c/102989 */
2 /* { dg-do run { target bitint } } */
3 /* { dg-options "-std=c2x -pedantic-errors" } */
4 /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */
5 /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */
7 #if __BITINT_MAXWIDTH__ >= 156
8 struct S156 { unsigned _BitInt(156) a : 135; _BitInt(156) b : 2; };
9 struct T156 { _BitInt(156) a : 2; unsigned _BitInt(156) b : 135; _BitInt(156) c : 2; };
11 __attribute__((noipa)) _BitInt(156)
12 test156 (struct S156 *p, struct T156 *q, struct T156 *r, int n)
14 r[0].b = p[0].a + q[0].b;
15 r[1].b = p[1].a * q[1].b;
16 r[2].a = p[2].a == q[2].b;
17 r[3].a = p[3].a < q[3].b;
18 r[4].b = p[4].a << n;
19 return p[5].a + q[5].b;
21 #endif
23 #if __BITINT_MAXWIDTH__ >= 495
24 struct S495 { unsigned _BitInt(495) a : 471; _BitInt(495) b : 2; };
25 struct T495 { _BitInt(495) a : 2; unsigned _BitInt(495) b : 471; _BitInt(495) c : 2; };
27 __attribute__((noipa)) _BitInt(495)
28 test495 (struct S495 *p, struct T495 *q, struct T495 *r, int n)
30 r[0].b = p[0].a + q[0].b;
31 r[1].b = p[1].a * q[1].b;
32 r[2].a = p[2].a == q[2].b;
33 r[3].a = p[3].a < q[3].b;
34 r[4].b = p[4].a << n;
35 return p[5].a + q[5].b;
37 #endif
39 #if __BITINT_MAXWIDTH__ >= 575
40 struct T575 { _BitInt(575) a : 2; _BitInt(575) b : 382; _BitInt(575) c : 2; };
42 __attribute__((noipa)) _BitInt(575)
43 test575 (struct T575 *q, _BitInt(575) x)
45 return q->b + x;
47 #endif
49 int
50 main ()
52 #if __BITINT_MAXWIDTH__ >= 156
53 static struct S156 p156[] = {
54 { 6086908847973295618751425718189955476089uwb, 0wb },
55 { 22782605434509677806291360175224474025979uwb, 1wb },
56 { 37470702016132547913133822619863997855935uwb, -1wb },
57 { 35506973813062189967442086745146532460068uwb, -2wb },
58 { 30541197841349399254932135707861871578815uwb, -2wb },
59 { 42800615576623455179183425579556615564998uwb, 1wb },
60 { 83771790414073692613953222993102430597uwb, 0wb },
61 { 36412564746565547536452588666710660799602uwb, 1wb },
62 { 33301340481967309644890101787523367044846uwb, -1wb },
63 { 12245185680611854260212331160624126801841uwb, -2wb },
64 { 35828279900949208432533857460683046288424uwb, -1wb },
65 { 4123278359205456806488911776768785478962uwb, 1wb }
67 static struct T156 q156[] = {
68 { -2wb, 20935792668463008606182638244678610336415uwb, 0wb },
69 { -1wb, 209336580249060835473242979959042853484uwb, -1wb },
70 { 0wb, 26553091584512375040647771207085289684805uwb, -2wb },
71 { 1wb, 8584102019879028804166913978503267690027uwb, 1wb },
72 { -2wb, 3364986457594728242491236670969190237662uwb, 0wb },
73 { 1wb, 28487958103578401823549712846248514887291uwb, -1wb },
74 { 1wb, 30323438060061607929914857363700386658179uwb, -2wb },
75 { -2wb, 38436123658875864126535628489050345446219uwb, 1wb },
76 { -1wb, 33301340481967309644890101787523367044846uwb, -1wb },
77 { 0wb, 18081372790322879821963779970917788200718uwb, 0wb },
78 { 1wb, 35310198378318023568520640435634029391465uwb, -2wb },
79 { -2wb, 16532060682830030166332649597929082719904uwb, -1wb }
81 struct T156 r156[12];
82 static unsigned _BitInt(135) e156[] = {
83 27022701516436304224934063962868565812504uwb,
84 29613894605882195495382184794066465590244uwb,
85 0uwb,
86 0uwb,
87 25008039169844990156837660987808592822272uwb,
88 27732430714321733679421188674538799385921uwb,
89 30407209850475681622528810586693489088776uwb,
90 9125928536800138281422179636318960655206uwb,
91 1uwb,
92 1uwb,
93 27059094310193532424702800326126974533632uwb,
94 20655339042035486972821561374697868198866uwb
96 for (int i = 0; i < 12; ++i)
98 r156[i].a = (i & 1) ? 1wb : -2wb;
99 r156[i].b = (i & 1) ? 14518714321960041107770649917088777022122uwb : 29037428643920082215541299834177554044245uwb;
100 r156[i].c = (i & 1) ? -2wb : 1wb;
102 r156[5].b = test156 (&p156[0], &q156[0], &r156[0], 17);
103 r156[11].b = test156 (&p156[6], &q156[6], &r156[6], 117);
104 for (int i = 0; i < 12; ++i)
105 if ((((i % 6) - 2U <= 1U) ? r156[i].a : r156[i].b) != e156[i])
106 __builtin_abort ();
107 else if ((((i % 6) - 2U > 1U) && r156[i].a != ((i & 1) ? 1wb : -2wb))
108 || (((i % 6) - 2U <= 1U) && r156[i].b != ((i & 1) ? 14518714321960041107770649917088777022122uwb : 29037428643920082215541299834177554044245uwb))
109 || r156[i].c != ((i & 1) ? -2wb : 1wb))
110 __builtin_abort ();
111 #endif
112 #if __BITINT_MAXWIDTH__ >= 495
113 static struct S495 p495[] = {
114 { 5900641461698162830220261443910312286116186030711054026202132317287171989449954433727605565187406942318472276126021616097079737645240098454013uwb, 0wb },
115 { 5619335266199392590390116416034736345432323405939461237257863293465693217703812518219356211176818397041537700744525965483063880249177661765822uwb, -1wb },
116 { 744675643612988167093151199551285556694415176163561012938968935653355128760309622135847398882788196739068398576440472762370028310765535983503uwb, 1wb },
117 { 4710120587609940729927891635083547264060530096467790505615232580303577049694742313824211264116793595223025831432779325089965241897060863692416uwb, -2wb },
118 { 4700240735957362687308898816111021174982406591648489926246999776223031821022674194534613241738369983608058217658021289655774135981827101958355uwb, -1wb },
119 { 1876262100946684033144524627883805711239772124030259629263615724983251183045150901527994496938087455223125779829665212386349414296844947524925uwb, 0wb },
120 { 2635441776228543412090459941414006837629084474712903013295503578947861806271451688519107975488661564459243720565422264844084425272156107387136uwb, 1wb },
121 { 2630153258749552262848995430888671592867309014306367216498408256861265344131972108995527284590063838830515851856437258905217521364301962720643uwb, -2wb },
122 { 2745338434240621337939928605056928843351970485626602387969150293308450866745407501724727739848971206349186529783705440219203189970551219879381uwb, 1wb },
123 { 2688974451781009079406742432598239379065348006788221659938456041627730645258351669705421830999330571339577238631004906071154604486839621759962uwb, -1wb },
124 { 4974200409958136921019163732486769139044513968318459321751943678326303994594283963911023171617076265195547773578798591476134329493900866070930uwb, -2wb },
125 { 5308892348567193242289576342108929297198516978578910066291782408432432101971103786646801744963140659914127252602243854634890888430591500677669uwb, 0wb }
127 static struct T495 q495[] = {
128 { 0wb, 4301604554146816407338627211447119428992719156607107928889754501636100741327050147838502142108071735464603549268761292458205988617578325763173uwb, -2wb },
129 { -1wb, 2715194601730000102297343743781623149283369741076005412784114057373119142888076403665408178274328506558203084450300859444566357959934633829946uwb, -1wb },
130 { -2wb, 744675643612988167093151199551285556694415176163561012938968935653355128760309622135847398882788196739068398576440472762370028310765535983503uwb, 0wb },
131 { 1wb, 2905575297593112682176271367301360286079539486548283169761776505152778266677295498111968142984117916873706310434203454796302860902084876845657uwb, 1wb },
132 { -2wb, 1837917528781539509450058185492923533367227689379651913582946492506072644598679412452807791857307066254676899775684162126897712525287848351976uwb, -2wb },
133 { -1wb, 2319680246150988952074978951387405463389161562155916967834748191217991286707290863021474691040798411643120909475843121856853198824610064919029uwb, -1wb },
134 { 0wb, 995091385198857217634636856758679675740255626224651591597840191331701102225958567078470825514618566121501749811346910563358603344922083332530uwb, 0wb },
135 { 1wb, 1935767072657166967374130326547364176008146414333487504728787607207566058414790635912675474199093488415105292641061350133643468776770358124726uwb, 1wb },
136 { -1wb, 2323578462079768493720340989036535936419394491913499982954052044299468738290318204298367303716254084159730145465632640799602734853085685711959uwb, -1wb },
137 { 0wb, 3134743387837581735890167538039234659353143305621277824366534871456819272038615182289564667918939704822338586693965843434870517084569520632192uwb, 1wb },
138 { -2wb, 6069214031750054027161180881734548627596253190931156326304738913835931214674310539698411833298960086513572699541120829870803305974299213978797uwb, -2wb },
139 { 1wb, 3475118701665891960802877416318617212624733636229950713368672781946851382777667645205965216548373630879140490108440746796343158443948723601215uwb, 0wb }
141 struct T495 r495[12];
142 static unsigned _BitInt(471) e495[] = {
143 4105080878509056910641706565917653774193674439925640176070095882154968553394649854768634849749595921611538850548285598212613898764208491978338uwb,
144 4272455060900825442658035799123612713461581925816375155025420465351224978751666594799676382302564435552275519560187020810679530912731598360332uwb,
145 1uwb,
146 0uwb,
147 193936707178394586072944129724741337251602515686017126954836162236154016065720970574348980545042390967692432385246117380757295497134607826944uwb,
148 4195942347097672985219503579271211174628933686186176597098363916201242469752441764549469187978885866866246689305508334243202613121455012443954uwb,
149 3630533161427400629725096798172686513369340100937554604893343770279562908497410255597578801003280130580745470376769175407443028617078190719666uwb,
150 3017199903252810774645258484587879229328468140025245420287647204420639096996138928094942159316263828975261069022192893745856107126530044652322uwb,
151 0uwb,
152 1uwb,
153 4881485695834897810379845656011652834144895329454510745024612553531749469753415260371487385803388022234443037087409795804654957238790836453376uwb,
154 2686845912897162876175271668987768568908019867416339000638664253610979307366416705055294103965631534621730767864187291088562219375930292040036uwb
156 for (int i = 0; i < 12; ++i)
158 r495[i].a = (i & 1) ? 1wb : -2wb;
159 r495[i].b = (i & 1) ? 4064776758223948217944788059626518627276820498261681186014527291178869451588236484531648571697255170781024649897664873561781218332406621492565uwb : 2032388379111974108972394029813259313638410249130840593007263645589434725794118242265824285848627585390512324948832436780890609166203310746282uwb;
160 r495[i].c = (i & 1) ? -2wb : 1wb;
162 r495[5].b = test495 (&p495[0], &q495[0], &r495[0], 17);
163 r495[11].b = test495 (&p495[6], &q495[6], &r495[6], 117);
164 for (int i = 0; i < 12; ++i)
165 if ((((i % 6) - 2U <= 1U) ? r495[i].a : r495[i].b) != e495[i])
166 __builtin_abort ();
167 else if ((((i % 6) - 2U > 1U) && r495[i].a != ((i & 1) ? 1wb : -2wb))
168 || (((i % 6) - 2U <= 1U) && r495[i].b != ((i & 1) ? 4064776758223948217944788059626518627276820498261681186014527291178869451588236484531648571697255170781024649897664873561781218332406621492565uwb : 2032388379111974108972394029813259313638410249130840593007263645589434725794118242265824285848627585390512324948832436780890609166203310746282uwb))
169 || r495[i].c != ((i & 1) ? -2wb : 1wb))
170 __builtin_abort ();
171 #endif
172 #if __BITINT_MAXWIDTH__ >= 575
173 struct T575 q575[] = {
174 { 0wb, 96684809381001318096256993724350755663760586347837309196134430400012751231961429238828670682891585656560169817843wb, -2wb },
175 { -1wb, -2736587102891263842950610428227571747319762162345429601728737031966764668220310874246707348170368842425752759862563wb, 1wb }
177 if (test575 (&q575[0], -20620110861486347200204305994458440394552720887062830768778333216240622422772611435913937143052282943196256683484434522946545384240670168537704102522242938522404309878852322wb)
178 != -20620110861486347200204305994458440394552720887062830768778236531431241421454515178920212792296619182609908846175238388516145371489438207108465273851560046936747749709034479wb)
179 __builtin_abort ();
180 if (test575 (&q575[1], 42621052848920155042866550876502212956983884683310087431575669593007353224147609487103322505341199223508939436382180596125666953651582557283994756434373621037386194691552808wb)
181 != 42621052848920155042866550876502212956983884683310087431572933005904461960304658876675094933593879461346594006780451859093700188983362246409748049086203252194960441931690245wb)
182 __builtin_abort ();
183 #endif