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;
|
Scheme_IR_Let_Header *head;
|
||||||
|
|
||||||
head = MALLOC_ONE_TAGGED(Scheme_IR_Let_Header);
|
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->body = first;
|
||||||
head->count = num_bindings;
|
head->count = num_bindings;
|
||||||
head->num_clauses = num_clauses;
|
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);
|
return letrec_check_wcm(expr, frame, pos);
|
||||||
case scheme_ir_lambda_type:
|
case scheme_ir_lambda_type:
|
||||||
return letrec_check_lambda(expr, frame, pos);
|
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);
|
return letrec_check_lets(expr, frame, pos);
|
||||||
case scheme_ir_toplevel_type: /* var ref to a top level */
|
case scheme_ir_toplevel_type: /* var ref to a top level */
|
||||||
return expr;
|
return expr;
|
||||||
|
|
|
@ -492,7 +492,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int flags,
|
||||||
goto try_again;
|
goto try_again;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtype == scheme_ir_let_void_type) {
|
if (vtype == scheme_ir_let_header_type) {
|
||||||
/* recognize another (let ([x <omittable>]) ...) pattern: */
|
/* recognize another (let ([x <omittable>]) ...) pattern: */
|
||||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
||||||
int i;
|
int i;
|
||||||
|
@ -841,7 +841,7 @@ static Scheme_Object *replace_tail_inside(Scheme_Object *alt, Scheme_Object *ins
|
||||||
else
|
else
|
||||||
scheme_signal_error("internal error: strange inside replacement");
|
scheme_signal_error("internal error: strange inside replacement");
|
||||||
break;
|
break;
|
||||||
case scheme_ir_let_void_type:
|
case scheme_ir_let_header_type:
|
||||||
((Scheme_IR_Let_Header *)inside)->body = alt;
|
((Scheme_IR_Let_Header *)inside)->body = alt;
|
||||||
break;
|
break;
|
||||||
case scheme_ir_let_value_type:
|
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 */
|
replace_tail_inside() needs to be consistent with this function */
|
||||||
{
|
{
|
||||||
while (1) {
|
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;
|
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)*_t2;
|
||||||
int i;
|
int i;
|
||||||
*_inside = *_t2;
|
*_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 ...))
|
/* check for (let-values ([(: mk ? ref- set-!) (make-struct-type ...)]) (values ...))
|
||||||
as generated by the expansion of `struct' */
|
as generated by the expansion of `struct' */
|
||||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)e;
|
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_)
|
if (SCHEME_TYPE(expr) > _scheme_ir_values_types_)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* for scheme_ir_let_void_type
|
/* for scheme_ir_let_header_type
|
||||||
and scheme_begin_sequence_type */
|
and scheme_begin_sequence_type */
|
||||||
if (fuel > 0) {
|
if (fuel > 0) {
|
||||||
Scheme_Object *tail = expr, *inside = NULL;
|
Scheme_Object *tail = expr, *inside = NULL;
|
||||||
|
@ -1727,7 +1727,7 @@ static int estimate_expr_size(Scheme_Object *expr, int sz, int fuel)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case scheme_ir_let_void_type:
|
case scheme_ir_let_header_type:
|
||||||
{
|
{
|
||||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)expr;
|
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)expr;
|
||||||
Scheme_Object *body;
|
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 = 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->count = expected;
|
||||||
lh->num_clauses = 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);
|
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;
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)expr;
|
||||||
int i;
|
int i;
|
||||||
|
@ -4011,7 +4011,7 @@ static Scheme_Object *flatten_sequence(Scheme_Object *o, Optimize_Info *info, in
|
||||||
s3 = (Scheme_Sequence *)o3;
|
s3 = (Scheme_Sequence *)o3;
|
||||||
extra += s3->count;
|
extra += s3->count;
|
||||||
split++;
|
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;
|
move_to_let = count - i - 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4041,7 +4041,7 @@ static Scheme_Object *flatten_sequence(Scheme_Object *o, Optimize_Info *info, in
|
||||||
for (j = 0; j < s3->count; j++) {
|
for (j = 0; j < s3->count; j++) {
|
||||||
s2->array[k++] = s3->array[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`: */
|
/* move rest under `let`: */
|
||||||
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)o3;
|
Scheme_IR_Let_Header *head = (Scheme_IR_Let_Header *)o3;
|
||||||
Scheme_IR_Let_Value *irlv;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case scheme_ir_let_void_type:
|
case scheme_ir_let_header_type:
|
||||||
{
|
{
|
||||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)o;
|
||||||
int i;
|
int i;
|
||||||
|
@ -5411,7 +5411,7 @@ int scheme_is_statically_proc(Scheme_Object *value, Optimize_Info *info)
|
||||||
return 1;
|
return 1;
|
||||||
else if (SAME_TYPE(SCHEME_TYPE(value), scheme_case_lambda_sequence_type)) {
|
else if (SAME_TYPE(SCHEME_TYPE(value), scheme_case_lambda_sequence_type)) {
|
||||||
return 1;
|
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. */
|
/* Look for (let ([x <omittable>]) <proc>), which is generated for optional arguments. */
|
||||||
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)value;
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)value;
|
||||||
if (lh->num_clauses == 1) {
|
if (lh->num_clauses == 1) {
|
||||||
|
@ -5436,7 +5436,7 @@ Scheme_Object *scheme_make_noninline_proc(Scheme_Object *e)
|
||||||
{
|
{
|
||||||
Scheme_Object *ni;
|
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() */
|
/* 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_Header *lh = (Scheme_IR_Let_Header *)e;
|
||||||
Scheme_IR_Let_Value *lv = (Scheme_IR_Let_Value *)lh->body;
|
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)) */
|
or (let ([x (begin M ... N)]) P) => (begin M ... (let ([x N]) P)) */
|
||||||
if (head->num_clauses == 1) {
|
if (head->num_clauses == 1) {
|
||||||
irlv = (Scheme_IR_Let_Value *)head->body; /* ([x ...]) */
|
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 ...]) ...) */
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)irlv->value; /* (let~ ([y ...]) ...) */
|
||||||
|
|
||||||
if (!lh->num_clauses) {
|
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;
|
Scheme_Sequence *seq = (Scheme_Sequence *)value;
|
||||||
value = seq->array[seq->count - 1];
|
value = seq->array[seq->count - 1];
|
||||||
indirect++;
|
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;
|
Scheme_IR_Let_Header *head2 = (Scheme_IR_Let_Header *)value;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -6967,7 +6967,7 @@ static int is_general_lambda(Scheme_Object *e, Optimize_Info *info)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* recognize (let ([x <proc>]) x) */
|
/* 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;
|
Scheme_IR_Let_Header *lh = (Scheme_IR_Let_Header *)e;
|
||||||
if (!(SCHEME_LET_FLAGS(lh) & SCHEME_LET_RECURSIVE)
|
if (!(SCHEME_LET_FLAGS(lh) & SCHEME_LET_RECURSIVE)
|
||||||
&& (lh->count == 1)
|
&& (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)
|
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
|
/* This is a tedious case to recognize the pattern
|
||||||
(let ([x rhs] ...) (values x ...))
|
(let ([x rhs] ...) (values x ...))
|
||||||
which might be the result of expansion that involved a local
|
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;
|
return scheme_true;
|
||||||
else
|
else
|
||||||
return optimize_lambda(expr, info, context);
|
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);
|
return scheme_optimize_lets(expr, info, 0, context);
|
||||||
case scheme_ir_toplevel_type:
|
case scheme_ir_toplevel_type:
|
||||||
info->size += 1;
|
info->size += 1;
|
||||||
|
@ -7900,7 +7900,7 @@ Scheme_Object *optimize_clone(int single_use, Scheme_Object *expr, Optimize_Info
|
||||||
|
|
||||||
return (Scheme_Object *)app2;
|
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_IR_Let_Header *head = (Scheme_IR_Let_Header *)expr, *head2;
|
||||||
Scheme_Object *body;
|
Scheme_Object *body;
|
||||||
|
@ -7909,7 +7909,7 @@ Scheme_Object *optimize_clone(int single_use, Scheme_Object *expr, Optimize_Info
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
head2 = MALLOC_ONE_TAGGED(Scheme_IR_Let_Header);
|
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->count = head->count;
|
||||||
head2->num_clauses = head->num_clauses;
|
head2->num_clauses = head->num_clauses;
|
||||||
SCHEME_LET_FLAGS(head2) = SCHEME_LET_FLAGS(head);
|
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
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case scheme_ir_let_void_type:
|
case scheme_ir_let_header_type:
|
||||||
{
|
{
|
||||||
Scheme_Let_Header *let = (Scheme_Let_Header *)root;
|
Scheme_Let_Header *let = (Scheme_Let_Header *)root;
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ enum {
|
||||||
scheme_ir_local_type, /* 30 */
|
scheme_ir_local_type, /* 30 */
|
||||||
scheme_ir_lambda_type, /* 31 */
|
scheme_ir_lambda_type, /* 31 */
|
||||||
scheme_ir_let_value_type, /* 32 */
|
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_toplevel_type, /* 34 */
|
||||||
scheme_ir_quote_syntax_type, /* 35 */
|
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_let_void_type, "<let-void-code>");
|
||||||
set_name(scheme_ir_local_type, "<local-semi-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_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_toplevel_type, "<variable-semi-code>");
|
||||||
set_name(scheme_ir_quote_syntax_type, "<quote-syntax-semi-code>");
|
set_name(scheme_ir_quote_syntax_type, "<quote-syntax-semi-code>");
|
||||||
set_name(scheme_letrec_type, "<letrec-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_lambda_type, unclosed_proc);
|
||||||
GC_REG_TRAV(scheme_ir_local_type, ir_local);
|
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_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_toplevel_type, toplevel_obj);
|
||||||
GC_REG_TRAV(scheme_ir_quote_syntax_type, local_obj);
|
GC_REG_TRAV(scheme_ir_quote_syntax_type, local_obj);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user