Skip to content

Commit

Permalink
Delete optrees after code generation
Browse files Browse the repository at this point in the history
This saves 15-20% on the size of store files and reduces compiler memory
usage correspondingly.
  • Loading branch information
sorear committed Oct 25, 2010
1 parent e671cca commit cfa7a9d
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/CSharpBackend.pm
Expand Up @@ -422,9 +422,13 @@ sub resolve_lex {
sub codegen_sub {
my @enter = enter_code($_);
my $ops;
# XXX sub1 will only be done once per sub, and code is never introspected
# (it's in a sucky format anyway), so this is safe, and it makes dumps
# much smaller.
my $code = delete $_->{code};
# TODO: Bind a return value here to catch non-ro sub use
if ($_->gather_hack) {
$ops = CgOp::prog(@enter, CgOp::sink($_->code->cgop($_)),
$ops = CgOp::prog(@enter, CgOp::sink($code->cgop($_)),
CgOp::rawscall('Kernel.Take', CgOp::scopedlex('EMPTY')));
} elsif ($_->parametric_role_hack) {
my $obj = $unit->deref($_->parametric_role_hack);
Expand All @@ -449,7 +453,7 @@ sub codegen_sub {
CgOp::fetch(CgOp::scopedlex($b)));
}
}
$ops = CgOp::prog(@enter, CgOp::sink($_->code->cgop($_)),
$ops = CgOp::prog(@enter, CgOp::sink($code->cgop($_)),
CgOp::letn("!mo", CgOp::rawnew('clr:DynMetaObject',
CgOp::clr_string($obj->name)),
"!to", CgOp::rawnew('clr:DynObject', CgOp::letvar('!mo')),
Expand All @@ -462,10 +466,10 @@ sub codegen_sub {
} elsif ($_->returnable) {
$ops = CgOp::prog(@enter,
CgOp::return(CgOp::span("rstart", "rend", 0,
$_->code->cgop($_))),
$code->cgop($_))),
CgOp::ehspan(4, undef, 0, "rstart", "rend", "rend"));
} else {
$ops = CgOp::prog(@enter, CgOp::return($_->code->cgop($_)));
$ops = CgOp::prog(@enter, CgOp::return($code->cgop($_)));
}

local %haslet;
Expand Down
1 change: 1 addition & 0 deletions src/Metamodel.pm
Expand Up @@ -718,6 +718,7 @@ our %units;
for (keys %{ $u2->tdeps }) {
$units{$_} //= CompilerDriver::metadata_for($_);
$self->tdeps->{$_} //= $u2->tdeps->{$_};
$u2->tdeps->{$_} = $self->tdeps->{$_}; # save a bit of memory
}
our $rec; local $rec = sub {
my (@path) = @_;
Expand Down

0 comments on commit cfa7a9d

Please sign in to comment.