diff options
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r-- | src/lj_opt_fold.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index e79e7ab3..bc53b168 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -385,7 +385,7 @@ LJFOLDF(kfold_int64comp0) | |||
385 | 385 | ||
386 | /* -- Constant folding for strings ---------------------------------------- */ | 386 | /* -- Constant folding for strings ---------------------------------------- */ |
387 | 387 | ||
388 | LJFOLD(SNEW KPTR KINT) | 388 | LJFOLD(SNEW KKPTR KINT) |
389 | LJFOLDF(kfold_snew_kptr) | 389 | LJFOLDF(kfold_snew_kptr) |
390 | { | 390 | { |
391 | GCstr *s = lj_str_new(J->L, (const char *)ir_kptr(fleft), (size_t)fright->i); | 391 | GCstr *s = lj_str_new(J->L, (const char *)ir_kptr(fleft), (size_t)fright->i); |
@@ -405,7 +405,7 @@ LJFOLDF(kfold_strref) | |||
405 | { | 405 | { |
406 | GCstr *str = ir_kstr(fleft); | 406 | GCstr *str = ir_kstr(fleft); |
407 | lua_assert((MSize)fright->i < str->len); | 407 | lua_assert((MSize)fright->i < str->len); |
408 | return lj_ir_kptr(J, (char *)strdata(str) + fright->i); | 408 | return lj_ir_kkptr(J, (char *)strdata(str) + fright->i); |
409 | } | 409 | } |
410 | 410 | ||
411 | LJFOLD(STRREF SNEW any) | 411 | LJFOLD(STRREF SNEW any) |
@@ -451,11 +451,13 @@ LJFOLDF(kfold_add_kgc) | |||
451 | #else | 451 | #else |
452 | ptrdiff_t ofs = fright->i; | 452 | ptrdiff_t ofs = fright->i; |
453 | #endif | 453 | #endif |
454 | return lj_ir_kptr(J, (char *)o + ofs); | 454 | return lj_ir_kkptr(J, (char *)o + ofs); |
455 | } | 455 | } |
456 | 456 | ||
457 | LJFOLD(ADD KPTR KINT) | 457 | LJFOLD(ADD KPTR KINT) |
458 | LJFOLD(ADD KPTR KINT64) | 458 | LJFOLD(ADD KPTR KINT64) |
459 | LJFOLD(ADD KKPTR KINT) | ||
460 | LJFOLD(ADD KKPTR KINT64) | ||
459 | LJFOLDF(kfold_add_kptr) | 461 | LJFOLDF(kfold_add_kptr) |
460 | { | 462 | { |
461 | void *p = ir_kptr(fleft); | 463 | void *p = ir_kptr(fleft); |
@@ -464,7 +466,7 @@ LJFOLDF(kfold_add_kptr) | |||
464 | #else | 466 | #else |
465 | ptrdiff_t ofs = fright->i; | 467 | ptrdiff_t ofs = fright->i; |
466 | #endif | 468 | #endif |
467 | return lj_ir_kptr(J, (char *)p + ofs); | 469 | return lj_ir_kptr_(J, fleft->o, (char *)p + ofs); |
468 | } | 470 | } |
469 | 471 | ||
470 | /* -- Constant folding of conversions ------------------------------------- */ | 472 | /* -- Constant folding of conversions ------------------------------------- */ |
@@ -1574,8 +1576,8 @@ LJFOLD(ALOAD any) | |||
1574 | LJFOLDX(lj_opt_fwd_aload) | 1576 | LJFOLDX(lj_opt_fwd_aload) |
1575 | 1577 | ||
1576 | /* From HREF fwd (see below). Must eliminate, not supported by fwd/backend. */ | 1578 | /* From HREF fwd (see below). Must eliminate, not supported by fwd/backend. */ |
1577 | LJFOLD(HLOAD KPTR) | 1579 | LJFOLD(HLOAD KKPTR) |
1578 | LJFOLDF(kfold_hload_kptr) | 1580 | LJFOLDF(kfold_hload_kkptr) |
1579 | { | 1581 | { |
1580 | UNUSED(J); | 1582 | UNUSED(J); |
1581 | lua_assert(ir_kptr(fleft) == niltvg(J2G(J))); | 1583 | lua_assert(ir_kptr(fleft) == niltvg(J2G(J))); |
@@ -1625,7 +1627,7 @@ LJFOLD(HREF TNEW any) | |||
1625 | LJFOLDF(fwd_href_tnew) | 1627 | LJFOLDF(fwd_href_tnew) |
1626 | { | 1628 | { |
1627 | if (lj_opt_fwd_href_nokey(J)) | 1629 | if (lj_opt_fwd_href_nokey(J)) |
1628 | return lj_ir_kptr(J, niltvg(J2G(J))); | 1630 | return lj_ir_kkptr(J, niltvg(J2G(J))); |
1629 | return NEXTFOLD; | 1631 | return NEXTFOLD; |
1630 | } | 1632 | } |
1631 | 1633 | ||
@@ -1638,7 +1640,7 @@ LJFOLDF(fwd_href_tdup) | |||
1638 | lj_ir_kvalue(J->L, &keyv, fright); | 1640 | lj_ir_kvalue(J->L, &keyv, fright); |
1639 | if (lj_tab_get(J->L, ir_ktab(IR(fleft->op1)), &keyv) == niltvg(J2G(J)) && | 1641 | if (lj_tab_get(J->L, ir_ktab(IR(fleft->op1)), &keyv) == niltvg(J2G(J)) && |
1640 | lj_opt_fwd_href_nokey(J)) | 1642 | lj_opt_fwd_href_nokey(J)) |
1641 | return lj_ir_kptr(J, niltvg(J2G(J))); | 1643 | return lj_ir_kkptr(J, niltvg(J2G(J))); |
1642 | return NEXTFOLD; | 1644 | return NEXTFOLD; |
1643 | } | 1645 | } |
1644 | 1646 | ||
@@ -1760,7 +1762,8 @@ LJFOLDF(fwd_sload) | |||
1760 | } | 1762 | } |
1761 | } | 1763 | } |
1762 | 1764 | ||
1763 | LJFOLD(XLOAD KPTR any) | 1765 | /* Only fold for KKPTR. The pointer _and_ the contents must be const. */ |
1766 | LJFOLD(XLOAD KKPTR any) | ||
1764 | LJFOLDF(xload_kptr) | 1767 | LJFOLDF(xload_kptr) |
1765 | { | 1768 | { |
1766 | TRef tr = kfold_xload(J, fins, ir_kptr(fleft)); | 1769 | TRef tr = kfold_xload(J, fins, ir_kptr(fleft)); |