[LLVMdev] "Refactoring" Basic Blocks into a new function
Evan Jones
ejones at uwaterloo.ca
Tue Apr 19 19:56:31 PDT 2005
On Apr 19, 2005, at 22:10, Evan Jones wrote:
> I just found the Interval class, and it looks like it could help me
> out here. I want to locate the Interval that begins with the call to
> the "magic" begin(), and ends with the call to the "magic" end(), if
> it exists. If there is no such valid interval, then I want to detect
> that and return an error. Can I make this happen by using the
> IntervalPartition pass? It looks like LLVM has some functionality that
> I could use *some where.* I just can't quite figure out how to make
> use of it.
Ah ha! I figured out the succ_begin() and pred_begin() functions. This
looks like it *might* be a better way to do things. At the very least,
I can verify that I have located the chunk of code between begin() and
end() correctly:
1. All predecessors must be in the interval, except for the initial
block, which must have a single predecessor: the block that used to
contain the begin() call.
2. All successors must be in the interval, except for the last block,
which must have a single successor: the block that was created when
splitting the block with the end() call.
However, since I am creating the Interval manually, it is possible that
one of these errors occurs because the blocks are returned out of order
by the Function::begin() iterator. However, since I only need to worry
about handling code that is produced by llvm-gcc, I'm not going to
worry about it.
On to issue #2.
Evan Jones
More information about the llvm-dev
mailing list