Bblock.pm revision 7c478bd95313f5f23a4c958a745db2134aa03244
package B::Bblock;
use Exporter ();
@ISA = "Exporter";
@EXPORT_OK = qw(find_leaders);
use B::Terse;
use strict;
my $bblock;
my @bblock_ends;
sub mark_leader {
my $op = shift;
if ($$op) {
}
}
sub remove_sortblock{
foreach (keys %$bblock){
}
}
sub find_leaders {
$bblock = {};
return $bblock;
}
# Debugging
sub walk_bblocks {
$bblock = {};
mark_leader($start);
}
}
foreach $bb (@bblock_ends) {
}
}
print "-------\n";
}
sub walk_bblocks_obj {
my $cvref = shift;
}
sub B::OP::mark_if_leader {}
sub B::COP::mark_if_leader {
my $op = shift;
mark_leader($op);
}
}
sub B::LOOP::mark_if_leader {
my $op = shift;
mark_leader($op->next);
}
sub B::LOGOP::mark_if_leader {
my $op = shift;
mark_leader($op->next);
if ($opname eq "entertry") {
} else {
}
}
sub B::LISTOP::mark_if_leader {
my $op = shift;
mark_leader($op->next);
}
}
sub B::PMOP::mark_if_leader {
my $op = shift;
if ($$replroot) {
mark_leader($op->next);
}
}
}
# PMOP stuff omitted
sub compile {
my @options = @_;
B::clearsym();
if (@options) {
return sub {
my $objname;
eval "walk_bblocks_obj(\\&$objname)";
die "walk_bblocks_obj(\\&$objname) failed: $@" if $@;
}
}
} else {
}
}
# Basic block leaders:
# Any COP (pp_nextstate) with a non-NULL label
# [The op after a pp_enter] Omit
# [The op after a pp_entersub. Don't count this one.]
# The ops pointed at by nextop, redoop and lastop->op_next of a LOOP
# The ops pointed at by op_next and op_other of a LOGOP, except
# for pp_entertry which has op_next and op_other->op_next
# The op pointed at by op_pmreplstart of a PMOP
# The op pointed at by op_other->op_pmreplstart of pp_substcont?
# [The op after a pp_return] Omit
1;
=head1 NAME
B::Bblock - Walk basic blocks
=head1 SYNOPSIS
perl -MO=Bblock[,OPTIONS] foo.pl
=head1 DESCRIPTION
This module is used by the B::CC back end. It walks "basic blocks".
A basic block is a series of operations which is known to execute from
start to finish, with no possiblity of branching or halting.
=head1 AUTHOR
Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
=cut