[LLVMdev] SwitchInstr::removeCase() doesn't remove PHINodes' predecessors

Nuno Lopes nunoplopes at sapo.pt
Sat Sep 27 03:13:23 PDT 2008


>> PHINode should have one entry for each predecessor of its parent basic
>> block!
>>         %ret.0 = phi i32 [ 0, %ifthen ], [ 1, %ifelse ]         ; <i32>
>> [#uses=1]
>> Broken module found, compilation aborted!
>>
>> This is because myphi is not reachable from ifthen anymore. My question 
>> is:
>> is this a bug (or missing feature) or do I need to take care of the PHI
>> Nodes myself?
>
> You get to take care of it yourself.
>
>  If it is the later what's the best way to handle that? (from
>> what I could see I would need to iterate over all the instructions in the
>> target BB and fix PHI Nodes if the target block becomes unreachable).
>
> TargetBB->removePredecessor(SwitchBB). Note that you should call this
> before you call removeCase!

Ok, thank you!
It's working now. I was afraid that removePredecessor() wouldn't work if the 
switchBB had more than one jump to the TargetBB, but it works :)

Thanks,
Nuno 




More information about the llvm-dev mailing list