[LLVMdev] Specify dominator for BasicBlock to avoid "Instruction does not dominate all uses!"
Devang Patel
dpatel at apple.com
Mon Oct 11 10:59:03 PDT 2010
On Oct 11, 2010, at 9:05 AM, Xinfinity wrote:
>
> Hi,
>
> I am working on a pass aimed to unify multiple exits of a loop into a unique
> basic block. The approach is straight forward:
> I create a unique BasicBlock BB_unique that has as predecessors all the exit
> blocks of the loop, it contains a phi instruction and a switch to redirect
> the flow correctly. Additionally, for each initial exit block I create an
> associated block that will jump to the original successors of the exit
> block.
> In short:
>
> B1 B2 B3 BB4
> | | | |
> \ | / |
> ExitBB1 ExitBB2
> | | | |
> / \ / \
> EBB1.1 EBB1.2 EBB2.1 EBB2.2
>
>
> becomes:
>
> B1 B2 B3 BB4
> | | | |
> \ | / |
> ExitBB1 ExitBB2
> | |
> ----------------------------------
> |
> BB_unique
> / \
> ExitBB1_redirect ExitBB2_redirect
> | | | |
> / \ / \
> EBB1.1 EBB1.2 EBB2.1 EBB2.2
>
> And BB_unique contains:
> %PHI_uniqueExit = phi i8 [ 0, %ExitBB1 ], [ 1, %ExitBB2 ]
> switch i8 %PHI_uniqueExit, label %switch_default [
> i8 0, label %ExitBB1_redirect
> i8 1, label %ExitBB2_redirect
> ]
>
> The problem is that all instructions defined in ExitBB1 seem to not dominate
> their uses, if they are used in successors of ExitBB1_redirect (similar for
> ExitBB2). I understand that this comes from the fact that the verifier
> considers that block EBB1.1 can be reached from BB_unique on another path
> than from ExitBB1.
One approach is to use insert PHI nodes in BB_unique for values defined in ExitBB1 and use these phi nodes in ExitBB1_redirect.
-
Devang
> And this gives the error "Instruction does not dominate
> all uses!" if Instruction is defined in ExitBB1 and used in EBB1.1. However,
> because of the switch instruction, this is not possible.
>
> I tried to set the immediate dominator of ExitBB1_redirect to be ExitBB1
> instead of BB_unique, but the error is still there.
> The simple solution would be to move the body of ExitBB1 entirely into
> ExitBB1_redirect, but this is not possible if there are any PHI
> instructions.
> Is there a clean solution to this problem? Can I inform the verifier that no
> other path exists to reach ExitBB1_redirect, except from ExitBB1?
>
>
> Thanks,
> Alexandra
>
>
> --
> View this message in context: http://old.nabble.com/Specify-dominator-for-BasicBlock-to-avoid-%22Instruction-does-not-dominate-all-uses%21%22-tp29935454p29935454.html
> Sent from the LLVM - Dev mailing list archive at Nabble.com.
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list