merge unresolver implementations
Merge the original implementation for cross-module inlining with the new one for recompiling.
This commit is contained in:
parent
be628e21a6
commit
0619af508b
|
@ -1867,7 +1867,7 @@ static Scheme_IR_Let_Header *make_header(Scheme_Object *first, int num_bindings,
|
|||
Scheme_IR_Let_Header *head;
|
||||
|
||||
head = MALLOC_ONE_TAGGED(Scheme_IR_Let_Header);
|
||||
head->iso.so.type = scheme_ir_let_void_type;
|
||||
head->iso.so.type = scheme_ir_let_header_type;
|
||||
head->body = first;
|
||||
head->count = num_bindings;
|
||||
head->num_clauses = num_clauses;
|
||||
|
|
|
@ -1045,7 +1045,7 @@ static Scheme_Object *letrec_check_expr(Scheme_Object *expr, Letrec_Check_Frame
|
|||
return letrec_check_wcm(expr, frame, pos);
|
||||
case scheme_ir_lambda_type:
|
||||
return letrec_check_lambda(expr, frame, pos);
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
return letrec_check_lets(expr, frame, pos);
|
||||
case scheme_ir_toplevel_type: /* var ref to a top level */
|
||||
return expr;
|
||||
|
|
|
@ -492,7 +492,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int flags,
|
|||
goto try_again;
|
||||
}
|
||||
|
||||
if (vtype == scheme_ir_let_void_type) {
|
||||
if (vtype == scheme_ir_let_header_type) {
|
||||
/* recognize another (let ([x <omittable>]) ...) pattern: */
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
||||
int i;
|
||||
|
@ -841,7 +841,7 @@ static Scheme_Object *replace_tail_inside(Scheme_Object *alt, Scheme_Object *ins
|
|||
else
|
||||
scheme_signal_error("internal error: strange inside replacement");
|
||||
break;
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
((Scheme_IR_Let_Header *)inside)->body = alt;
|
||||
break;
|
||||
case scheme_ir_let_value_type:
|
||||
|
@ -860,7 +860,7 @@ static void extract_tail_inside(Scheme_Object **_t2, Scheme_Object **_inside)
|
|||
replace_tail_inside() needs to be consistent with this function */
|
||||
{
|
||||
while (1) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(*_t2), scheme_ir_let_void_type)) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(*_t2), scheme_ir_let_header_type)) {
|
||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)*_t2;
|
||||
int i;
|
||||
*_inside = *_t2;
|
||||
|
@ -1240,7 +1240,7 @@ Scheme_Object *scheme_is_simple_make_struct_type(Scheme_Object *e, int vals, int
|
|||
}
|
||||
}
|
||||
|
||||
if (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_void_type)) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_header_type)) {
|
||||
/* check for (let-values ([(: mk ? ref- set-!) (make-struct-type ...)]) (values ...))
|
||||
as generated by the expansion of `struct' */
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)e;
|
||||
|
@ -1396,7 +1396,7 @@ static int single_valued_noncm_expression(Scheme_Object *expr, int fuel)
|
|||
if (SCHEME_TYPE(expr) > _scheme_ir_values_types_)
|
||||
return 1;
|
||||
|
||||
/* for scheme_ir_let_void_type
|
||||
/* for scheme_ir_let_header_type
|
||||
and scheme_begin_sequence_type */
|
||||
if (fuel > 0) {
|
||||
Scheme_Object *tail = expr, *inside = NULL;
|
||||
|
@ -1727,7 +1727,7 @@ static int estimate_expr_size(Scheme_Object *expr, int sz, int fuel)
|
|||
|
||||
break;
|
||||
}
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
{
|
||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)expr;
|
||||
Scheme_Object *body;
|
||||
|
@ -1826,7 +1826,7 @@ static Scheme_Object *apply_inlined(Scheme_Lambda *lam, Optimize_Info *info,
|
|||
}
|
||||
|
||||
lh = MALLOC_ONE_TAGGED(Scheme_IR_Let_Header);
|
||||
lh->iso.so.type = scheme_ir_let_void_type;
|
||||
lh->iso.so.type = scheme_ir_let_header_type;
|
||||
lh->count = expected;
|
||||
lh->num_clauses = expected;
|
||||
|
||||
|
@ -2538,7 +2538,7 @@ static Scheme_Object *expr_implies_predicate(Scheme_Object *expr, Optimize_Info
|
|||
|
||||
return expr_implies_predicate(seq->array[seq->count-1], info, _involves_k_cross, fuel-1);
|
||||
}
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
{
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)expr;
|
||||
int i;
|
||||
|
@ -4011,7 +4011,7 @@ static Scheme_Object *flatten_sequence(Scheme_Object *o, Optimize_Info *info, in
|
|||
s3 = (Scheme_Sequence *)o3;
|
||||
extra += s3->count;
|
||||
split++;
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(o3), scheme_ir_let_void_type) && !(!i && b0)) {
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(o3), scheme_ir_let_header_type) && !(!i && b0)) {
|
||||
move_to_let = count - i - 1;
|
||||
break;
|
||||
}
|
||||
|
@ -4041,7 +4041,7 @@ static Scheme_Object *flatten_sequence(Scheme_Object *o, Optimize_Info *info, in
|
|||
for (j = 0; j < s3->count; j++) {
|
||||
s2->array[k++] = s3->array[j];
|
||||
}
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(o3), scheme_ir_let_void_type) && !(!i && b0)) {
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(o3), scheme_ir_let_header_type) && !(!i && b0)) {
|
||||
/* move rest under `let`: */
|
||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)o3;
|
||||
Scheme_IR_Let_Value *irlv;
|
||||
|
@ -5313,7 +5313,7 @@ int scheme_is_liftable(Scheme_Object *o, Scheme_Hash_Tree *exclude_vars, int fue
|
|||
return 1;
|
||||
}
|
||||
break;
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
{
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
||||
int i;
|
||||
|
@ -5411,7 +5411,7 @@ int scheme_is_statically_proc(Scheme_Object *value, Optimize_Info *info)
|
|||
return 1;
|
||||
else if (SAME_TYPE(SCHEME_TYPE(value), scheme_case_lambda_sequence_type)) {
|
||||
return 1;
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(value), scheme_ir_let_void_type)) {
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(value), scheme_ir_let_header_type)) {
|
||||
/* Look for (let ([x <omittable>]) <proc>), which is generated for optional arguments. */
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)value;
|
||||
if (lh->num_clauses == 1) {
|
||||
|
@ -5436,7 +5436,7 @@ Scheme_Object *scheme_make_noninline_proc(Scheme_Object *e)
|
|||
{
|
||||
Scheme_Object *ni;
|
||||
|
||||
while (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_void_type)) {
|
||||
while (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_header_type)) {
|
||||
/* This must be (let ([x <omittable>]) <proc>); see scheme_is_statically_proc() */
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)e;
|
||||
Scheme_IR_Let_Value *lv = (Scheme_IR_Let_Value *)lh->body;
|
||||
|
@ -5912,7 +5912,7 @@ scheme_optimize_lets(Scheme_Object *form, Optimize_Info *info, int for_inline, i
|
|||
or (let ([x (begin M ... N)]) P) => (begin M ... (let ([x N]) P)) */
|
||||
if (head->num_clauses == 1) {
|
||||
irlv = (Scheme_IR_Let_Value *)head->body; /* ([x ...]) */
|
||||
if (SAME_TYPE(SCHEME_TYPE(irlv->value), scheme_ir_let_void_type)) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(irlv->value), scheme_ir_let_header_type)) {
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)irlv->value; /* (let~ ([y ...]) ...) */
|
||||
|
||||
if (!lh->num_clauses) {
|
||||
|
@ -6192,7 +6192,7 @@ scheme_optimize_lets(Scheme_Object *form, Optimize_Info *info, int for_inline, i
|
|||
Scheme_Sequence *seq = (Scheme_Sequence *)value;
|
||||
value = seq->array[seq->count - 1];
|
||||
indirect++;
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(value), scheme_ir_let_void_type)) {
|
||||
} else if (SAME_TYPE(SCHEME_TYPE(value), scheme_ir_let_header_type)) {
|
||||
Scheme_IR_Let_Header *head2 = (Scheme_IR_Let_Header *)value;
|
||||
int i;
|
||||
|
||||
|
@ -6967,7 +6967,7 @@ static int is_general_lambda(Scheme_Object *e, Optimize_Info *info)
|
|||
}
|
||||
|
||||
/* recognize (let ([x <proc>]) x) */
|
||||
if (SCHEME_TYPE(e) == scheme_ir_let_void_type) {
|
||||
if (SCHEME_TYPE(e) == scheme_ir_let_header_type) {
|
||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)e;
|
||||
if (!(SCHEME_LET_FLAGS(lh) & SCHEME_LET_RECURSIVE)
|
||||
&& (lh->count == 1)
|
||||
|
@ -7000,7 +7000,7 @@ void install_definition(Scheme_Object *vec, int pos, Scheme_Object *var, Scheme_
|
|||
|
||||
int split_define_values(Scheme_Object *e, int n, Scheme_Object *vars, Scheme_Object *vec, int offset)
|
||||
{
|
||||
if (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_void_type)) {
|
||||
if (SAME_TYPE(SCHEME_TYPE(e), scheme_ir_let_header_type)) {
|
||||
/* This is a tedious case to recognize the pattern
|
||||
(let ([x rhs] ...) (values x ...))
|
||||
which might be the result of expansion that involved a local
|
||||
|
@ -7714,7 +7714,7 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in
|
|||
return scheme_true;
|
||||
else
|
||||
return optimize_lambda(expr, info, context);
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
return scheme_optimize_lets(expr, info, 0, context);
|
||||
case scheme_ir_toplevel_type:
|
||||
info->size += 1;
|
||||
|
@ -7900,7 +7900,7 @@ Scheme_Object *optimize_clone(int single_use, Scheme_Object *expr, Optimize_Info
|
|||
|
||||
return (Scheme_Object *)app2;
|
||||
}
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
{
|
||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)expr, *head2;
|
||||
Scheme_Object *body;
|
||||
|
@ -7909,7 +7909,7 @@ Scheme_Object *optimize_clone(int single_use, Scheme_Object *expr, Optimize_Info
|
|||
int i;
|
||||
|
||||
head2 = MALLOC_ONE_TAGGED(Scheme_IR_Let_Header);
|
||||
head2->iso.so.type = scheme_ir_let_void_type;
|
||||
head2->iso.so.type = scheme_ir_let_header_type;
|
||||
head2->count = head->count;
|
||||
head2->num_clauses = head->num_clauses;
|
||||
SCHEME_LET_FLAGS(head2) = SCHEME_LET_FLAGS(head);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2956,7 +2956,7 @@ intptr_t scheme_count_memory(Scheme_Object *root, Scheme_Hash_Table *ht)
|
|||
#endif
|
||||
}
|
||||
break;
|
||||
case scheme_ir_let_void_type:
|
||||
case scheme_ir_let_header_type:
|
||||
{
|
||||
Scheme_Let_Header *let = (Scheme_Let_Header *)root;
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ enum {
|
|||
scheme_ir_local_type, /* 30 */
|
||||
scheme_ir_lambda_type, /* 31 */
|
||||
scheme_ir_let_value_type, /* 32 */
|
||||
scheme_ir_let_void_type, /* 33 */
|
||||
scheme_ir_let_header_type, /* 33 */
|
||||
scheme_ir_toplevel_type, /* 34 */
|
||||
scheme_ir_quote_syntax_type, /* 35 */
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ scheme_init_type ()
|
|||
set_name(scheme_let_void_type, "<let-void-code>");
|
||||
set_name(scheme_ir_local_type, "<local-semi-code>");
|
||||
set_name(scheme_ir_let_value_type, "<let-value-semi-code>");
|
||||
set_name(scheme_ir_let_void_type, "<let-void-semi-code>");
|
||||
set_name(scheme_ir_let_header_type, "<let-header-semi-code>");
|
||||
set_name(scheme_ir_toplevel_type, "<variable-semi-code>");
|
||||
set_name(scheme_ir_quote_syntax_type, "<quote-syntax-semi-code>");
|
||||
set_name(scheme_letrec_type, "<letrec-code>");
|
||||
|
@ -592,7 +592,7 @@ void scheme_register_traversers(void)
|
|||
GC_REG_TRAV(scheme_ir_lambda_type, unclosed_proc);
|
||||
GC_REG_TRAV(scheme_ir_local_type, ir_local);
|
||||
GC_REG_TRAV(scheme_ir_let_value_type, ir_let_value);
|
||||
GC_REG_TRAV(scheme_ir_let_void_type, let_header);
|
||||
GC_REG_TRAV(scheme_ir_let_header_type, let_header);
|
||||
GC_REG_TRAV(scheme_ir_toplevel_type, toplevel_obj);
|
||||
GC_REG_TRAV(scheme_ir_quote_syntax_type, local_obj);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user