Changeset: be84d4420182 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/be84d4420182 Modified Files: gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_unique.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/mal/pcre.c Branch: default Log Message:
Extract constants from loops when possible diffs (truncated from 734 to 300 lines): diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -222,7 +222,7 @@ hashselect(BAT *b, BATiter *bi, struct c const oid e = (oid) (i+limit-pr_off+hseq); \ if (im[icnt] & mask) { \ if ((im[icnt] & ~innermask) == 0) { \ - while (p < ci->ncand && o < e) { \ + while (p < ncand && o < e) { \ v = src[o-hseq]; \ if ((ADD) == NULL) { \ BBPreclaim(bn); \ @@ -233,7 +233,7 @@ hashselect(BAT *b, BATiter *bi, struct c o = canditer_next(ci); \ } \ } else { \ - while (p < ci->ncand && o < e) { \ + while (p < ncand && o < e) { \ v = src[o-hseq]; \ if ((ADD) == NULL) { \ BBPreclaim(bn); \ @@ -245,7 +245,7 @@ hashselect(BAT *b, BATiter *bi, struct c } \ } \ } else { \ - while (p < ci->ncand && o < e) { \ + while (p < ncand && o < e) { \ p++; \ o = canditer_next(ci); \ } \ @@ -258,7 +258,7 @@ hashselect(BAT *b, BATiter *bi, struct c const oid e = (oid) (i+limit-pr_off+hseq); \ if (im[icnt] & mask) { \ if ((im[icnt] & ~innermask) == 0) { \ - while (p < ci->ncand && o < e) { \ + while (p < ncand && o < e) { \ v = src[o-hseq]; \ if ((ADD) == NULL) { \ BBPreclaim(bn); \ @@ -269,7 +269,7 @@ hashselect(BAT *b, BATiter *bi, struct c o = canditer_next_dense(ci); \ } \ } else { \ - while (p < ci->ncand && o < e) { \ + while (p < ncand && o < e) { \ v = src[o-hseq]; \ if ((ADD) == NULL) { \ BBPreclaim(bn); \ @@ -281,7 +281,7 @@ hashselect(BAT *b, BATiter *bi, struct c } \ } \ } else { \ - BUN skip_sz = MIN(ci->ncand - p, e - o); \ + BUN skip_sz = MIN(ncand - p, e - o); \ p += skip_sz; \ o += skip_sz; \ ci->next += skip_sz; \ @@ -301,7 +301,7 @@ hashselect(BAT *b, BATiter *bi, struct c const uint8_t rpp = ATOMelmshift(IMPS_PAGE >> bi->shift); \ o = canditer_next(ci); \ for (i = 0, dcnt = 0, icnt = 0, p = 0; \ - dcnt < imprints->dictcnt && i <= w - hseq + pr_off && p < ci->ncand; \ + dcnt < imprints->dictcnt && i <= w - hseq + pr_off && p < ncand; \ dcnt++) { \ GDK_CHECK_TIMEOUT(timeoffset, counter, GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \ limit = ((BUN) d[dcnt].cnt) << rpp; \ @@ -375,7 +375,7 @@ quickins(oid *dst, BUN cnt, oid o, BAT * impsloop(ISDENSE, TEST, \ dst = buninsfix(bn, dst, cnt, o, \ (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) \ - * (dbl) (ci->ncand-p) * 1.1 + 1024), \ + * (dbl) (ncand-p) * 1.1 + 1024), \ maximum)); \ } else { \ impsloop(ISDENSE, TEST, dst = quickins(dst, cnt, o, bn)); \ @@ -406,6 +406,7 @@ quickins(oid *dst, BUN cnt, oid o, BAT * /* choose number of bits */ #define bitswitch(ISDENSE, TEST, TYPE) \ do { \ + BUN ncand = ci->ncand; \ assert(imprints); \ *algo = parent ? "parent imprints select " #TEST " (canditer_next" #ISDENSE ")" : "imprints select " #TEST " (canditer_next" #ISDENSE ")"; \ switch (imprints->bits) { \ @@ -434,15 +435,16 @@ quickins(oid *dst, BUN cnt, oid o, BAT * /* core scan select loop with & without candidates */ #define scanloop(NAME,canditer_next,TEST) \ do { \ + BUN ncand = ci->ncand; \ *algo = "select: " #NAME " " #TEST " (" #canditer_next ")"; \ if (BATcapacity(bn) < maximum) { \ - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { \ + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { \ o = canditer_next(ci); \ v = src[o-hseq]; \ if (TEST) { \ dst = buninsfix(bn, dst, cnt, o, \ (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) \ - * (dbl) (ci->ncand-p) * 1.1 + 1024), \ + * (dbl) (ncand-p) * 1.1 + 1024), \ maximum); \ if (dst == NULL) { \ BBPreclaim(bn); \ @@ -452,7 +454,7 @@ quickins(oid *dst, BUN cnt, oid o, BAT * } \ } \ } else { \ - TIMEOUT_LOOP(ci->ncand, timeoffset) { \ + TIMEOUT_LOOP(ncand, timeoffset) { \ o = canditer_next(ci); \ v = src[o-hseq]; \ assert(cnt < BATcapacity(bn)); \ @@ -604,7 +606,7 @@ fullscan_any(BAT *b, BATiter *bi, struct const void *restrict nil = ATOMnilptr(b->ttype); int (*cmp)(const void *, const void *) = ATOMcompare(b->ttype); oid o; - BUN p; + BUN p, ncand = ci->ncand; int c; (void) maximum; @@ -619,13 +621,13 @@ fullscan_any(BAT *b, BATiter *bi, struct if (equi) { *algo = "select: fullscan equi"; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); v = BUNtail(*bi, o-hseq); if ((*cmp)(tl, v) == 0) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -635,13 +637,13 @@ fullscan_any(BAT *b, BATiter *bi, struct } } } else { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next(ci); v = BUNtail(*bi, o-hseq); if ((*cmp)(tl, v) == 0) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -654,7 +656,7 @@ fullscan_any(BAT *b, BATiter *bi, struct } else if (anti) { *algo = "select: fullscan anti"; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); v = BUNtail(*bi, o-hseq); if ((nil == NULL || (*cmp)(v, nil) != 0) && @@ -666,7 +668,7 @@ fullscan_any(BAT *b, BATiter *bi, struct (!hi && c == 0))))) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -676,7 +678,7 @@ fullscan_any(BAT *b, BATiter *bi, struct } } } else { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next(ci); v = BUNtail(*bi, o-hseq); if ((nil == NULL || (*cmp)(v, nil) != 0) && @@ -688,7 +690,7 @@ fullscan_any(BAT *b, BATiter *bi, struct (!hi && c == 0))))) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -701,7 +703,7 @@ fullscan_any(BAT *b, BATiter *bi, struct } else { *algo = "select: fullscan range"; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); v = BUNtail(*bi, o-hseq); if ((nil == NULL || (*cmp)(v, nil) != 0) && @@ -713,7 +715,7 @@ fullscan_any(BAT *b, BATiter *bi, struct (hi && c == 0)))) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -723,7 +725,7 @@ fullscan_any(BAT *b, BATiter *bi, struct } } } else { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next(ci); v = BUNtail(*bi, o-hseq); if ((nil == NULL || (*cmp)(v, nil) != 0) && @@ -735,7 +737,7 @@ fullscan_any(BAT *b, BATiter *bi, struct (hi && c == 0)))) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -761,7 +763,7 @@ fullscan_str(BAT *b, BATiter *bi, struct BUN maximum, Imprints *imprints, const char **algo) { var_t pos; - BUN p; + BUN p, ncand = ci->ncand; oid o; lng timeoffset = 0; QryCtx *qry_ctx = MT_thread_get_qry_ctx(); @@ -788,12 +790,12 @@ fullscan_str(BAT *b, BATiter *bi, struct const unsigned char *ptr = (const unsigned char *) bi->base; pos -= GDK_VAROFFSET; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); if (ptr[o - hseq] == pos) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -803,12 +805,12 @@ fullscan_str(BAT *b, BATiter *bi, struct } } } else { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next(ci); if (ptr[o - hseq] == pos) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -824,12 +826,12 @@ fullscan_str(BAT *b, BATiter *bi, struct const unsigned short *ptr = (const unsigned short *) bi->base; pos -= GDK_VAROFFSET; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); if (ptr[o - hseq] == pos) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -839,12 +841,12 @@ fullscan_str(BAT *b, BATiter *bi, struct } } } else { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next(ci); if (ptr[o - hseq] == pos) { dst = buninsfix(bn, dst, cnt, o, (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), + * (dbl) (ncand-p) * 1.1 + 1024), maximum); if (dst == NULL) { BBPreclaim(bn); @@ -860,12 +862,12 @@ fullscan_str(BAT *b, BATiter *bi, struct case 4: { const unsigned int *ptr = (const unsigned int *) bi->base; if (ci->tpe == cand_dense) { - TIMEOUT_LOOP_IDX(p, ci->ncand, timeoffset) { + TIMEOUT_LOOP_IDX(p, ncand, timeoffset) { o = canditer_next_dense(ci); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list