aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c21
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
388LJFOLD(SNEW KPTR KINT) 388LJFOLD(SNEW KKPTR KINT)
389LJFOLDF(kfold_snew_kptr) 389LJFOLDF(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
411LJFOLD(STRREF SNEW any) 411LJFOLD(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
457LJFOLD(ADD KPTR KINT) 457LJFOLD(ADD KPTR KINT)
458LJFOLD(ADD KPTR KINT64) 458LJFOLD(ADD KPTR KINT64)
459LJFOLD(ADD KKPTR KINT)
460LJFOLD(ADD KKPTR KINT64)
459LJFOLDF(kfold_add_kptr) 461LJFOLDF(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)
1574LJFOLDX(lj_opt_fwd_aload) 1576LJFOLDX(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. */
1577LJFOLD(HLOAD KPTR) 1579LJFOLD(HLOAD KKPTR)
1578LJFOLDF(kfold_hload_kptr) 1580LJFOLDF(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)
1625LJFOLDF(fwd_href_tnew) 1627LJFOLDF(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
1763LJFOLD(XLOAD KPTR any) 1765/* Only fold for KKPTR. The pointer _and_ the contents must be const. */
1766LJFOLD(XLOAD KKPTR any)
1764LJFOLDF(xload_kptr) 1767LJFOLDF(xload_kptr)
1765{ 1768{
1766 TRef tr = kfold_xload(J, fins, ir_kptr(fleft)); 1769 TRef tr = kfold_xload(J, fins, ir_kptr(fleft));