diff options
-rw-r--r-- | src/lj_ir.h | 1 | ||||
-rw-r--r-- | src/lj_opt_mem.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h index 9fd4e275..6d974ed2 100644 --- a/src/lj_ir.h +++ b/src/lj_ir.h | |||
@@ -346,6 +346,7 @@ typedef struct IRType1 { uint8_t irt; } IRType1; | |||
346 | #define irt_isu32(t) (irt_type(t) == IRT_U32) | 346 | #define irt_isu32(t) (irt_type(t) == IRT_U32) |
347 | #define irt_isi64(t) (irt_type(t) == IRT_I64) | 347 | #define irt_isi64(t) (irt_type(t) == IRT_I64) |
348 | #define irt_isu64(t) (irt_type(t) == IRT_U64) | 348 | #define irt_isu64(t) (irt_type(t) == IRT_U64) |
349 | #define irt_isp32(t) (irt_type(t) == IRT_P32) | ||
349 | 350 | ||
350 | #define irt_isfp(t) (irt_isnum(t) || irt_isfloat(t)) | 351 | #define irt_isfp(t) (irt_isnum(t) || irt_isfloat(t)) |
351 | #define irt_isinteger(t) (irt_typerange((t), IRT_I8, IRT_INT)) | 352 | #define irt_isinteger(t) (irt_typerange((t), IRT_I8, IRT_INT)) |
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c index 04b95a6f..214fb632 100644 --- a/src/lj_opt_mem.c +++ b/src/lj_opt_mem.c | |||
@@ -879,6 +879,8 @@ int lj_opt_fwd_wasnonnil(jit_State *J, IROpT loadop, IRRef xref) | |||
879 | if (skref == xkref || !irref_isk(skref) || !irref_isk(xkref)) | 879 | if (skref == xkref || !irref_isk(skref) || !irref_isk(xkref)) |
880 | return 0; /* A nil store with same const key or var key MAY alias. */ | 880 | return 0; /* A nil store with same const key or var key MAY alias. */ |
881 | /* Different const keys CANNOT alias. */ | 881 | /* Different const keys CANNOT alias. */ |
882 | } else if (irt_isp32(IR(skref)->t) != irt_isp32(IR(xkref)->t)) { | ||
883 | return 0; /* HREF and HREFK MAY alias. */ | ||
882 | } /* Different key types CANNOT alias. */ | 884 | } /* Different key types CANNOT alias. */ |
883 | } /* Other non-nil stores MAY alias. */ | 885 | } /* Other non-nil stores MAY alias. */ |
884 | ref = store->prev; | 886 | ref = store->prev; |