From f0d09dbef123924f6533db5b94507d058720e53c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 25 Dec 2015 07:14:40 -0600 Subject: [PATCH] make JIT recognize literal struct predicatates, etc. Mka the closure specializer handle literal struct operations (as opposed to just references to struct operations). --- racket/src/racket/src/jitinline.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/racket/src/racket/src/jitinline.c b/racket/src/racket/src/jitinline.c index 616ac701ca..32743f1cf9 100644 --- a/racket/src/racket/src/jitinline.c +++ b/racket/src/racket/src/jitinline.c @@ -178,7 +178,8 @@ static int inlineable_struct_prim(Scheme_Object *o, mz_jit_state *jitter, int ex return check_val_struct_prim(p, arity); } } - return 0; + + return check_val_struct_prim(o, 1); } int scheme_inlined_unary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state *jitter) @@ -371,6 +372,9 @@ static int generate_inlined_type_test(mz_jit_state *jitter, Scheme_App2_Rec *app static Scheme_Object *extract_struct_constant(mz_jit_state *jitter, Scheme_Object *rator) { + if (SCHEME_PROCP(rator)) + return rator; + if (SAME_TYPE(SCHEME_TYPE(rator), scheme_toplevel_type) && (SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST) { rator = scheme_extract_global(rator, jitter->nc, 0);