Skip to content

Commit

Permalink
realloc cmpmask in all cases
Browse files Browse the repository at this point in the history
  • Loading branch information
tthsqe12 committed Jul 6, 2020
1 parent 6dd9f22 commit c300499
Show file tree
Hide file tree
Showing 12 changed files with 41 additions and 58 deletions.
9 changes: 3 additions & 6 deletions fmpz_mpoly/div_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,6 @@ void fmpz_mpoly_div_monagan_pearce(fmpz_mpoly_t q, const fmpz_mpoly_t poly2,
int free2 = 0, free3 = 0;
fmpz_mpoly_t temp1;
fmpz_mpoly_struct * tq;
TMP_INIT;

/* check divisor is nonzero */
if (poly3->length == 0)
Expand All @@ -725,13 +724,11 @@ void fmpz_mpoly_div_monagan_pearce(fmpz_mpoly_t q, const fmpz_mpoly_t poly2,
return;
}

TMP_START;

/* maximum bits in quotient exps and inputs is max for poly2 and poly3 */
exp_bits = FLINT_MAX(poly2->bits, poly3->bits);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -785,7 +782,7 @@ void fmpz_mpoly_div_monagan_pearce(fmpz_mpoly_t q, const fmpz_mpoly_t poly2,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -825,5 +822,5 @@ void fmpz_mpoly_div_monagan_pearce(fmpz_mpoly_t q, const fmpz_mpoly_t poly2,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
8 changes: 4 additions & 4 deletions fmpz_mpoly/divrem_ideal_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -715,11 +715,9 @@ void fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** q, fmpz_mpoly_t
return;
}


TMP_START;

free3 = (int *) TMP_ALLOC(len*sizeof(int));

exp3 = (ulong **) TMP_ALLOC(len*sizeof(ulong *));

/* compute maximum degrees that can occur in any input or output polys */
Expand All @@ -730,7 +728,7 @@ void fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** q, fmpz_mpoly_t
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -808,7 +806,7 @@ void fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** q, fmpz_mpoly_t

exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);
N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -862,5 +860,7 @@ void fmpz_mpoly_divrem_ideal_monagan_pearce(fmpz_mpoly_struct ** q, fmpz_mpoly_t
flint_free(exp3[i]);
}

flint_free(cmpmask);

TMP_END;
}
11 changes: 3 additions & 8 deletions fmpz_mpoly/divrem_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,6 @@ void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r,
int free2 = 0, free3 = 0;
fmpz_mpoly_t temp1, temp2;
fmpz_mpoly_struct * tq, * tr;
TMP_INIT;

/* check divisor is nonzero */
if (poly3->length == 0)
Expand All @@ -754,13 +753,11 @@ void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r,
return;
}

TMP_START;

exp_bits = FLINT_MAX(poly2->bits, poly3->bits);
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -830,7 +827,7 @@ void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -860,14 +857,12 @@ void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r,
if (q == poly2 || q == poly3)
{
fmpz_mpoly_swap(temp1, q, ctx);

fmpz_mpoly_clear(temp1, ctx);
}

if (r == poly2 || r == poly3)
{
fmpz_mpoly_swap(temp2, r, ctx);

fmpz_mpoly_clear(temp2, ctx);
}

Expand All @@ -882,5 +877,5 @@ void fmpz_mpoly_divrem_monagan_pearce(fmpz_mpoly_t q, fmpz_mpoly_t r,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
7 changes: 3 additions & 4 deletions fmpz_mpoly/quasidiv_heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -800,7 +800,6 @@ void fmpz_mpoly_quasidiv_heap(fmpz_t scale, fmpz_mpoly_t q,
int free2 = 0, free3 = 0;
fmpz_mpoly_t temp1;
fmpz_mpoly_struct * tq;
TMP_INIT;

/* check divisor is nonzero */
if (poly3->length == 0)
Expand All @@ -815,10 +814,9 @@ void fmpz_mpoly_quasidiv_heap(fmpz_t scale, fmpz_mpoly_t q,
return;
}

TMP_START;
exp_bits = FLINT_MAX(poly2->bits, poly3->bits);
N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -874,6 +872,7 @@ void fmpz_mpoly_quasidiv_heap(fmpz_t scale, fmpz_mpoly_t q,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -913,5 +912,5 @@ void fmpz_mpoly_quasidiv_heap(fmpz_t scale, fmpz_mpoly_t q,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
7 changes: 3 additions & 4 deletions fmpz_mpoly/quasidivrem_heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,6 @@ void fmpz_mpoly_quasidivrem_heap(fmpz_t scale, fmpz_mpoly_t q, fmpz_mpoly_t r,
int free2 = 0, free3 = 0;
fmpz_mpoly_t temp1, temp2;
fmpz_mpoly_struct * tq, * tr;
TMP_INIT;

/* check divisor is nonzero */
if (poly3->length == 0)
Expand All @@ -784,12 +783,11 @@ void fmpz_mpoly_quasidivrem_heap(fmpz_t scale, fmpz_mpoly_t q, fmpz_mpoly_t r,
return;
}

TMP_START;
exp_bits = FLINT_MAX(poly2->bits, poly3->bits);
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -863,6 +861,7 @@ void fmpz_mpoly_quasidivrem_heap(fmpz_t scale, fmpz_mpoly_t q, fmpz_mpoly_t r,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -914,5 +913,5 @@ void fmpz_mpoly_quasidivrem_heap(fmpz_t scale, fmpz_mpoly_t q, fmpz_mpoly_t r,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
6 changes: 4 additions & 2 deletions fmpz_mpoly/quasidivrem_ideal_heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ void fmpz_mpoly_quasidivrem_ideal_heap(fmpz_t scale,
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -755,7 +755,7 @@ void fmpz_mpoly_quasidivrem_ideal_heap(fmpz_t scale,

exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);
N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -808,5 +808,7 @@ void fmpz_mpoly_quasidivrem_ideal_heap(fmpz_t scale,
flint_free(exp3[i]);
}

flint_free(cmpmask);

TMP_END;
}
9 changes: 3 additions & 6 deletions fq_nmod_mpoly/div_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ void fq_nmod_mpoly_div_monagan_pearce(fq_nmod_mpoly_t q,
int free2 = 0, free3 = 0;
fq_nmod_mpoly_t temp1;
fq_nmod_mpoly_struct * tq;
TMP_INIT;

if (poly3->length == 0)
{
Expand All @@ -261,13 +260,11 @@ void fq_nmod_mpoly_div_monagan_pearce(fq_nmod_mpoly_t q,
return;
}

TMP_START;

exp_bits = FLINT_MAX(poly2->bits, poly3->bits);
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -323,7 +320,7 @@ void fq_nmod_mpoly_div_monagan_pearce(fq_nmod_mpoly_t q,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);


Expand Down Expand Up @@ -364,5 +361,5 @@ void fq_nmod_mpoly_div_monagan_pearce(fq_nmod_mpoly_t q,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
6 changes: 4 additions & 2 deletions fq_nmod_mpoly/divrem_ideal_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ void fq_nmod_mpoly_divrem_ideal_monagan_pearce(fq_nmod_mpoly_struct ** q,
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -413,7 +413,7 @@ void fq_nmod_mpoly_divrem_ideal_monagan_pearce(fq_nmod_mpoly_struct ** q,

exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);
N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -466,5 +466,7 @@ void fq_nmod_mpoly_divrem_ideal_monagan_pearce(fq_nmod_mpoly_struct ** q,
flint_free(exp3[i]);
}

flint_free(cmpmask);

TMP_END;
}
9 changes: 3 additions & 6 deletions fq_nmod_mpoly/divrem_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ void fq_nmod_mpoly_divrem_monagan_pearce(fq_nmod_mpoly_t q, fq_nmod_mpoly_t r,
int free2 = 0, free3 = 0;
fq_nmod_mpoly_t temp1, temp2;
fq_nmod_mpoly_struct * tq, * tr;
TMP_INIT;

if (poly3->length == 0)
{
Expand All @@ -274,13 +273,11 @@ void fq_nmod_mpoly_divrem_monagan_pearce(fq_nmod_mpoly_t q, fq_nmod_mpoly_t r,
return;
}

TMP_START;

exp_bits = FLINT_MAX(poly2->bits, poly3->bits);
exp_bits = mpoly_fix_bits(exp_bits, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -352,7 +349,7 @@ void fq_nmod_mpoly_divrem_monagan_pearce(fq_nmod_mpoly_t q, fq_nmod_mpoly_t r,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -402,5 +399,5 @@ void fq_nmod_mpoly_divrem_monagan_pearce(fq_nmod_mpoly_t q, fq_nmod_mpoly_t r,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
10 changes: 3 additions & 7 deletions nmod_mpoly/div_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,6 @@ void nmod_mpoly_div_monagan_pearce(nmod_mpoly_t q,
int free2 = 0, free3 = 0;
nmod_mpoly_t temp1;
nmod_mpoly_struct * tq;
TMP_INIT;

if (poly3->length == 0)
{
Expand All @@ -509,12 +508,10 @@ void nmod_mpoly_div_monagan_pearce(nmod_mpoly_t q,
return;
}

TMP_START;

exp_bits = FLINT_MAX(poly2->bits, poly3->bits);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -569,10 +566,9 @@ void nmod_mpoly_div_monagan_pearce(nmod_mpoly_t q,
exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);


exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
mpoly_repack_monomials(exp2, exp_bits, old_exp2, old_exp_bits,
poly2->length, ctx->minfo);
Expand Down Expand Up @@ -610,5 +606,5 @@ void nmod_mpoly_div_monagan_pearce(nmod_mpoly_t q,
if (free3)
flint_free(exp3);

TMP_END;
flint_free(cmpmask);
}
6 changes: 4 additions & 2 deletions nmod_mpoly/divrem_ideal_monagan_pearce.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ void nmod_mpoly_divrem_ideal_monagan_pearce(nmod_mpoly_struct ** q, nmod_mpoly_t
exp_bits = FLINT_MAX(exp_bits, poly3[i]->bits);

N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_malloc(N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

/* ensure input exponents packed to same size as output exponents */
Expand Down Expand Up @@ -614,7 +614,7 @@ void nmod_mpoly_divrem_ideal_monagan_pearce(nmod_mpoly_struct ** q, nmod_mpoly_t

exp_bits = mpoly_fix_bits(exp_bits + 1, ctx->minfo);
N = mpoly_words_per_exp(exp_bits, ctx->minfo);
cmpmask = (ulong*) TMP_ALLOC(N*sizeof(ulong));
cmpmask = (ulong *) flint_realloc(cmpmask, N*sizeof(ulong));
mpoly_get_cmpmask(cmpmask, N, exp_bits, ctx->minfo);

exp2 = (ulong *) flint_malloc(N*poly2->length*sizeof(ulong));
Expand Down Expand Up @@ -667,5 +667,7 @@ void nmod_mpoly_divrem_ideal_monagan_pearce(nmod_mpoly_struct ** q, nmod_mpoly_t
flint_free(exp3[i]);
}

flint_free(cmpmask);

TMP_END;
}

0 comments on commit c300499

Please sign in to comment.