summaryrefslogtreecommitdiff
path: root/src/lj_ir.h
diff options
context:
space:
mode:
authorMike Pall <mike>2011-02-03 04:13:51 +0100
committerMike Pall <mike>2011-02-03 04:22:27 +0100
commitdf65b8b419c12327254dec0df116c62525aaabad (patch)
treeb4ba6ea2841692123b49b3033420dbb7282cbcd6 /src/lj_ir.h
parent1027018b2135caf45057c3d3b3da03ffb0c6add3 (diff)
downloadluajit-df65b8b419c12327254dec0df116c62525aaabad.tar.gz
luajit-df65b8b419c12327254dec0df116c62525aaabad.tar.bz2
luajit-df65b8b419c12327254dec0df116c62525aaabad.zip
FFI: Rename IR_CNEWP to IR_CNEWI and use it to box 64 bit integers.
Generates smaller IR and DCE eliminates many intermediate boxes. Needs allocation sinking to eliminate the boxes kept alive by PHIs.
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r--src/lj_ir.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h
index dfafc5db..bde0ac04 100644
--- a/src/lj_ir.h
+++ b/src/lj_ir.h
@@ -113,7 +113,7 @@
113 _(TNEW, AW, lit, lit) \ 113 _(TNEW, AW, lit, lit) \
114 _(TDUP, AW, ref, ___) \ 114 _(TDUP, AW, ref, ___) \
115 _(CNEW, AW, ref, ref) \ 115 _(CNEW, AW, ref, ref) \
116 _(CNEWP, NW, ref, ref) /* CSE is ok, not marked as A. */ \ 116 _(CNEWI, NW, ref, ref) /* CSE is ok, not marked as A. */ \
117 \ 117 \
118 /* Write barriers. */ \ 118 /* Write barriers. */ \
119 _(TBAR, S , ref, ___) \ 119 _(TBAR, S , ref, ___) \
@@ -188,7 +188,9 @@ IRFPMDEF(FPMENUM)
188 _(UDATA_UDTYPE, offsetof(GCudata, udtype)) \ 188 _(UDATA_UDTYPE, offsetof(GCudata, udtype)) \
189 _(UDATA_FILE, sizeof(GCudata)) \ 189 _(UDATA_FILE, sizeof(GCudata)) \
190 _(CDATA_TYPEID, offsetof(GCcdata, typeid)) \ 190 _(CDATA_TYPEID, offsetof(GCcdata, typeid)) \
191 _(CDATA_PTR, sizeof(GCcdata)) 191 _(CDATA_PTR, sizeof(GCcdata)) \
192 _(CDATA_INT64, sizeof(GCcdata)) \
193 _(CDATA_INT64HI, sizeof(GCcdata) + 4)
192 194
193typedef enum { 195typedef enum {
194#define FLENUM(name, ofs) IRFL_##name, 196#define FLENUM(name, ofs) IRFL_##name,
@@ -588,12 +590,12 @@ typedef union IRIns {
588#define ir_kptr(ir) \ 590#define ir_kptr(ir) \
589 check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, mref((ir)->ptr, void)) 591 check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, mref((ir)->ptr, void))
590 592
593LJ_STATIC_ASSERT((int)IRT_GUARD == (int)IRM_W);
594
591/* A store or any other op with a non-weak guard has a side-effect. */ 595/* A store or any other op with a non-weak guard has a side-effect. */
592static LJ_AINLINE int ir_sideeff(IRIns *ir) 596static LJ_AINLINE int ir_sideeff(IRIns *ir)
593{ 597{
594 return (((ir->t.irt | ~IRT_GUARD) & lj_ir_mode[ir->o]) >= IRM_S); 598 return (((ir->t.irt | ~IRT_GUARD) & lj_ir_mode[ir->o]) >= IRM_S);
595} 599}
596 600
597LJ_STATIC_ASSERT((int)IRT_GUARD == (int)IRM_W);
598
599#endif 601#endif