/* PR c/102989 */ /* { dg-do run { target bitint } } */ /* { dg-options "-std=c23 -pedantic-errors" } */ /* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ /* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ __attribute__((noipa)) void foo (int *p) { *p = 1; } #if __BITINT_MAXWIDTH__ >= 135 __attribute__((noipa)) void test135 (unsigned _BitInt(135) *p, _BitInt(135) *q, int *r, int i, int j, int k) { int l; for (l = 0; l < 15; ++l) { r[l * 4] = p[l * 2] < p[l * 2 + 1]; r[l * 4 + 1] = p[l * 2 + i] <= p[l * 2 + 1 + i]; r[l * 4 + 2] = p[l * 2 + j] > p[l * 2 + 1 + j]; r[l * 4 + 3] = p[l * 2 + k] >= p[l * 2 + 1 + k]; } r[60] = 0; if (p[30] < p[31]) foo (r + 60); r[61] = 0; if (p[30 + i] <= p[31 + i]) foo (r + 61); r[62] = 0; if (p[30 + j] > p[31 + j]) foo (r + 62); r[63] = 0; if (p[30 + k] >= p[31 + k]) foo (r + 63); for (l = 0; l < 15; ++l) { r[64 + l * 4] = q[l * 2] < q[l * 2 + 1]; r[64 + l * 4 + 1] = q[l * 2 + i] <= q[l * 2 + 1 + i]; r[64 + l * 4 + 2] = q[l * 2 + j] > q[l * 2 + 1 + j]; r[64 + l * 4 + 3] = q[l * 2 + k] >= q[l * 2 + 1 + k]; } r[124] = 0; if (q[30] < q[31]) foo (r + 124); r[125] = 0; if (q[30 + i] <= q[31 + i]) foo (r + 125); r[126] = 0; if (q[30 + j] > q[31 + j]) foo (r + 126); r[127] = 0; if (q[30 + k] >= q[31 + k]) foo (r + 127); r[128] = p[1] > 6186175750610900443940276860313653051587uwb; r[129] = p[1 + i] >= 6186175750610900443940276860313653051587uwb; r[130] = p[1 + j] < 6186175750610900443940276860313653051587uwb; r[131] = p[1 + k] <= 6186175750610900443940276860313653051587uwb; r[132] = p[9] > 532538687817519087313655352171198726194uwb; r[133] = p[9 + i] >= 532538687817519087313655352171198726194uwb; r[134] = p[9 + j] < 532538687817519087313655352171198726194uwb; r[135] = p[9 + k] <= 532538687817519087313655352171198726194uwb; r[136] = p[26] > 21437789116019123198192600268201397321728uwb; r[137] = p[26 + i] >= 21437789116019123198192600268201397321728uwb; r[138] = p[26 + j] < 21437789116019123198192600268201397321728uwb; r[139] = p[26 + k] <= 21437789116019123198192600268201397321728uwb; r[140] = 0; if (p[27] > 21437789116019123198192600268201397321728uwb) foo (r + 140); r[141] = 0; if (p[27 + i] >= 21437789116019123198192600268201397321728uwb) foo (r + 141); r[142] = 0; if (p[27 + j] < 21437789116019123198192600268201397321728uwb) foo (r + 142); r[143] = 0; if (p[27 + k] <= 21437789116019123198192600268201397321728uwb) foo (r + 143); r[144] = q[1] > -16254965323536794558278256870539623121621wb; r[145] = q[1 + i] >= -16254965323536794558278256870539623121621wb; r[146] = q[1 + j] < -16254965323536794558278256870539623121621wb; r[147] = q[1 + k] <= -16254965323536794558278256870539623121621wb; r[148] = q[9] > 18613347261447279579326452222842126033978wb; r[149] = q[9 + i] >= 18613347261447279579326452222842126033978wb; r[150] = q[9 + j] < 18613347261447279579326452222842126033978wb; r[151] = q[9 + k] <= 18613347261447279579326452222842126033978wb; r[152] = q[26] > -17354400712967861636632104979020178784256wb; r[153] = q[26 + i] >= -17354400712967861636632104979020178784256wb; r[154] = q[26 + j] < -17354400712967861636632104979020178784256wb; r[155] = q[26 + k] <= -17354400712967861636632104979020178784256wb; r[156] = 0; if (q[27] > -17354400712967861636632104979020178784256wb) foo (r + 156); r[157] = 0; if (q[27 + i] >= -17354400712967861636632104979020178784256wb) foo (r + 157); r[158] = 0; if (q[27 + j] < -17354400712967861636632104979020178784256wb) foo (r + 158); r[159] = 0; if (q[27 + k] <= -17354400712967861636632104979020178784256wb) foo (r + 159); } __attribute__((noipa)) void check135 (void) { static unsigned _BitInt(135) p[] = { 6186175750610900443940276860313653051587uwb, 1185851028480769106318384044302924011586uwb, 2130297273067766631305678853840898568773uwb, 41295820948916414032635520696820459346946uwb, 37051876633129642187163899121207069631425uwb, 15692033609114144435279308788278869814829uwb, 34806164389591686493621017551199759953285uwb, 39807523118275305743074861168614282970261uwb, 532538687817519087313655352171198726194uwb, 532538687817519087313655352171198726194uwb - 1, 24327491730922412594497820631861542598095uwb, 24327491730922412594497820631861542598095uwb + 1, 19767147107472646435672732641055578521600uwb, 19767147107472646435672732641055578521600uwb - 18446744073709551616uwb, 19767147107472646435672732641055578521600uwb, 19767147107472646435672732641055578521600uwb - 1, 19767147107472646435672732641055578521600uwb, 19767147107472646435672732641055578521600uwb + 1, 19767147107472646435672732641055578521600uwb, 19767147107472646435672732641055578521600uwb, 21437789116019123198192600268201397321728uwb, 21437789116019123198192600268201397321728uwb - 340282366920938463463374607431768211456uwb, 21437789116019123198192600268201397321728uwb, 21437789116019123198192600268201397321728uwb + 340282366920938463463374607431768211456uwb, 21437789116019123198192600268201397321728uwb, 21437789116019123198192600268201397321728uwb - 1, 21437789116019123198192600268201397321728uwb, 21437789116019123198192600268201397321728uwb + 1, 21437789116019123198192600268201397321728uwb, 21437789116019123198192600268201397321728uwb, 40857776145745083896508605528597836546969uwb, 40857776145745083896508605528597836546969uwb }; static _BitInt(135) q[] = { -16254965323536794558278256870539623121621wb, 3211106991591472362840917277276886624653wb, -11957968557477998661714306628455379156870wb, 573207689638265971114859293369887620578wb, 13215265693976315010419972479490962566290wb, -14420717597022955156949317923525514408615wb, 9945875060497908168424655458843572357117wb, 17414314981046040218358459297638362112560wb, 18613347261447279579326452222842126033978wb, 18613347261447279579326452222842126033978wb - 1, -7726660695587525737931429184041790718605wb, -7726660695587525737931429184041790718605wb + 1, 10658663373399224161452650292046381187072wb, 10658663373399224161452650292046381187072wb - 18446744073709551616wb, 10658663373399224161452650292046381187072wb, 10658663373399224161452650292046381187072wb - 1, 10658663373399224161452650292046381187072wb, 10658663373399224161452650292046381187072wb + 1, 10658663373399224161452650292046381187072wb, 10658663373399224161452650292046381187072wb, -17354400712967861636632104979020178784256wb, -17354400712967861636632104979020178784256wb - 340282366920938463463374607431768211456wb, -17354400712967861636632104979020178784256wb, -17354400712967861636632104979020178784256wb + 340282366920938463463374607431768211456wb, -17354400712967861636632104979020178784256wb, -17354400712967861636632104979020178784256wb - 1, -17354400712967861636632104979020178784256wb, -17354400712967861636632104979020178784256wb + 1, -17354400712967861636632104979020178784256wb, -17354400712967861636632104979020178784256wb, -9715765131124575245669270443035217820180wb, -9715765131124575245669270443035217820180wb }; int r[160]; static int e[160] = { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, }; test135 (p, q, r, 0, 0, 0); for (int i = 0; i < 160; ++i) if (r[i] != e[i]) __builtin_abort (); } #endif #if __BITINT_MAXWIDTH__ >= 192 __attribute__((noipa)) void test192 (unsigned _BitInt(192) *p, _BitInt(192) *q, int *r, int i, int j, int k) { int l; for (l = 0; l < 15; ++l) { r[l * 4] = p[l * 2] < p[l * 2 + 1]; r[l * 4 + 1] = p[l * 2 + i] <= p[l * 2 + 1 + i]; r[l * 4 + 2] = p[l * 2 + j] > p[l * 2 + 1 + j]; r[l * 4 + 3] = p[l * 2 + k] >= p[l * 2 + 1 + k]; } r[60] = 0; if (p[30] < p[31]) foo (r + 60); r[61] = 0; if (p[30 + i] <= p[31 + i]) foo (r + 61); r[62] = 0; if (p[30 + j] > p[31 + j]) foo (r + 62); r[63] = 0; if (p[30 + k] >= p[31 + k]) foo (r + 63); for (l = 0; l < 15; ++l) { r[64 + l * 4] = q[l * 2] < q[l * 2 + 1]; r[64 + l * 4 + 1] = q[l * 2 + i] <= q[l * 2 + 1 + i]; r[64 + l * 4 + 2] = q[l * 2 + j] > q[l * 2 + 1 + j]; r[64 + l * 4 + 3] = q[l * 2 + k] >= q[l * 2 + 1 + k]; } r[124] = 0; if (q[30] < q[31]) foo (r + 124); r[125] = 0; if (q[30 + i] <= q[31 + i]) foo (r + 125); r[126] = 0; if (q[30 + j] > q[31 + j]) foo (r + 126); r[127] = 0; if (q[30 + k] >= q[31 + k]) foo (r + 127); r[128] = p[1] > 1301676158706974885001669913388788249117177822518209770103uwb; r[129] = p[1 + i] >= 1301676158706974885001669913388788249117177822518209770103uwb; r[130] = p[1 + j] < 1301676158706974885001669913388788249117177822518209770103uwb; r[131] = p[1 + k] <= 1301676158706974885001669913388788249117177822518209770103uwb; r[132] = p[9] > 4156228030920822065505406977886113255775912982125511770811uwb; r[133] = p[9 + i] >= 4156228030920822065505406977886113255775912982125511770811uwb; r[134] = p[9 + j] < 4156228030920822065505406977886113255775912982125511770811uwb; r[135] = p[9 + k] <= 4156228030920822065505406977886113255775912982125511770811uwb; r[136] = p[26] > 2105720889788939126298431571815399749254098004540680830976uwb; r[137] = p[26 + i] >= 2105720889788939126298431571815399749254098004540680830976uwb; r[138] = p[26 + j] < 2105720889788939126298431571815399749254098004540680830976uwb; r[139] = p[26 + k] <= 2105720889788939126298431571815399749254098004540680830976uwb; r[140] = 0; if (p[27] > 2105720889788939126298431571815399749254098004540680830976uwb) foo (r + 140); r[141] = 0; if (p[27 + i] >= 2105720889788939126298431571815399749254098004540680830976uwb) foo (r + 141); r[142] = 0; if (p[27 + j] < 2105720889788939126298431571815399749254098004540680830976uwb) foo (r + 142); r[143] = 0; if (p[27 + k] <= 2105720889788939126298431571815399749254098004540680830976uwb) foo (r + 143); r[144] = q[1] > 1979551028038258779576810033088645171455206196499080052958wb; r[145] = q[1 + i] >= 1979551028038258779576810033088645171455206196499080052958wb; r[146] = q[1 + j] < 1979551028038258779576810033088645171455206196499080052958wb; r[147] = q[1 + k] <= 1979551028038258779576810033088645171455206196499080052958wb; r[148] = q[9] > -1885318755168553153865626302112859755681798781213110674779wb; r[149] = q[9 + i] >= -1885318755168553153865626302112859755681798781213110674779wb; r[150] = q[9 + j] < -1885318755168553153865626302112859755681798781213110674779wb; r[151] = q[9 + k] <= -1885318755168553153865626302112859755681798781213110674779wb; r[152] = q[26] > 2339763120586619043754378424358306157273374438118242910208wb; r[153] = q[26 + i] >= 2339763120586619043754378424358306157273374438118242910208wb; r[154] = q[26 + j] < 2339763120586619043754378424358306157273374438118242910208wb; r[155] = q[26 + k] <= 2339763120586619043754378424358306157273374438118242910208wb; r[156] = 0; if (q[27] > 2339763120586619043754378424358306157273374438118242910208wb) foo (r + 156); r[157] = 0; if (q[27 + i] >= 2339763120586619043754378424358306157273374438118242910208wb) foo (r + 157); r[158] = 0; if (q[27 + j] < 2339763120586619043754378424358306157273374438118242910208wb) foo (r + 158); r[159] = 0; if (q[27 + k] <= 2339763120586619043754378424358306157273374438118242910208wb) foo (r + 159); } __attribute__((noipa)) void check192 (void) { static unsigned _BitInt(192) p[] = { 1301676158706974885001669913388788249117177822518209770103uwb, 747337726037626556190542632789198678519387021556252140610uwb, 3725653947307680330137362665700857624320118783723331730354uwb, 5392755653771808504964234887707929379898418126658160517063uwb, 909108582379360036592925704487999488985548889672948755121uwb, 1640061693011887757120264107651184372780544025461004778485uwb, 1730451763775632602140993282640477950273220311662029360199uwb, 5445606583665251502205919499903327925600190799372595230746uwb, 4156228030920822065505406977886113255775912982125511770811uwb, 4156228030920822065505406977886113255775912982125511770811uwb - 1, 4265142937033285044176150866007262334836422938393615775285uwb, 4265142937033285044176150866007262334836422938393615775285uwb + 1, 5906690378849769161966354556531052466604912051358709841920uwb, 5906690378849769161966354556531052466604912051358709841920uwb - 18446744073709551616uwb, 5906690378849769161966354556531052466604912051358709841920uwb, 5906690378849769161966354556531052466604912051358709841920uwb - 1, 5906690378849769161966354556531052466604912051358709841920uwb, 5906690378849769161966354556531052466604912051358709841920uwb + 1, 5906690378849769161966354556531052466604912051358709841920uwb, 5906690378849769161966354556531052466604912051358709841920uwb, 2105720889788939126298431571815399749254098004540680830976uwb, 2105720889788939126298431571815399749254098004540680830976uwb - 340282366920938463463374607431768211456uwb, 2105720889788939126298431571815399749254098004540680830976uwb, 2105720889788939126298431571815399749254098004540680830976uwb + 340282366920938463463374607431768211456uwb, 2105720889788939126298431571815399749254098004540680830976uwb, 2105720889788939126298431571815399749254098004540680830976uwb - 1, 2105720889788939126298431571815399749254098004540680830976uwb, 2105720889788939126298431571815399749254098004540680830976uwb + 1, 2105720889788939126298431571815399749254098004540680830976uwb, 2105720889788939126298431571815399749254098004540680830976uwb, 3158000566128353648045936726901376808119543972196705250436uwb, 3158000566128353648045936726901376808119543972196705250436uwb }; static _BitInt(192) q[] = { 1979551028038258779576810033088645171455206196499080052958wb, -2365185798961627132333096424325796455553365108690644933803wb, -72665485213084327598421838628274737858136897938197299611wb, -2684371926785696941292431816009231520283744219656369376907wb, 2328570543620873568764731049988092721657822189058449467691wb, 1166480801277674369406023216484203046859890984318705969207wb, 2554342282302399647952757689834517321971737916674443522004wb, -844209391020771146100885710857828304368226088928768368272wb, -1885318755168553153865626302112859755681798781213110674779wb, -1885318755168553153865626302112859755681798781213110674779wb - 1, -2489570249266057242333359792314407344590632488455880158241wb, -2489570249266057242333359792314407344590632488455880158241wb + 1, -1791854374279093549336635324484455337109530403038654627840wb, -1791854374279093549336635324484455337109530403038654627840wb - 18446744073709551616wb, -1791854374279093549336635324484455337109530403038654627840wb, -1791854374279093549336635324484455337109530403038654627840wb - 1, -1791854374279093549336635324484455337109530403038654627840wb, -1791854374279093549336635324484455337109530403038654627840wb + 1, -1791854374279093549336635324484455337109530403038654627840wb, -1791854374279093549336635324484455337109530403038654627840wb, 2339763120586619043754378424358306157273374438118242910208wb, 2339763120586619043754378424358306157273374438118242910208wb - 340282366920938463463374607431768211456wb, 2339763120586619043754378424358306157273374438118242910208wb, 2339763120586619043754378424358306157273374438118242910208wb + 340282366920938463463374607431768211456wb, 2339763120586619043754378424358306157273374438118242910208wb, 2339763120586619043754378424358306157273374438118242910208wb - 1, 2339763120586619043754378424358306157273374438118242910208wb, 2339763120586619043754378424358306157273374438118242910208wb + 1, 2339763120586619043754378424358306157273374438118242910208wb, 2339763120586619043754378424358306157273374438118242910208wb, -3052391096360403193678321062607799919228465512652019987951wb, -3052391096360403193678321062607799919228465512652019987951wb }; int r[160]; static int e[160] = { 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0 }; test192 (p, q, r, 0, 0, 0); for (int i = 0; i < 160; ++i) if (r[i] != e[i]) __builtin_abort (); } #endif int main () { #if __BITINT_MAXWIDTH__ >= 135 check135 (); #endif #if __BITINT_MAXWIDTH__ >= 192 check192 (); #endif return 0; }