[LLVMdev] Avoiding Constant Folding

Eli Friedman eli.friedman at gmail.com
Mon Jun 13 22:12:42 PDT 2011


On Mon, Jun 13, 2011 at 5:33 PM, Cuong Pham <phamcuongbk at gmail.com> wrote:
>
> Hi All,
>
> My codegen is trying to generate some thing like this:
>
> entry:
> ....
>  %34 = icmp ne i32 %33, 15
>  br i1 %34, label %then, label %else
>
> then:                                             ; preds = %entry
>  %returnValue = or i1 true, false
> ....
>  br label %ifmerge
>
> else:                                             ; preds = %entry
>  br label %ifmerge
>
> ifmerge:                                          ; preds = %else, %then
> ...
>  %41 = icmp ne i32 %40, 15
>  br i1 %41, label %then1, label %else3
>
> then1:                                            ; preds = %ifmerge
>  %returnValue2 = or i1 true, %returnValue
>
> else3:                                            ; preds = %ifmerge
>  br label %ifmerge4
>
> ifmerge4:                                         ; preds = %else3, %then1
> ....
>
> And I'm getting the following error:
> Instruction does not dominate all uses!
>  %returnValue = or i1 true, false
>  %returnValue2 = or i1 true, %returnValue
> Broken module found, compilation aborted!
>
> >From the code I can see all the operands are i1 type, so the 'or'
> instructions should be valid. Could some one give me some clues how to fix
> this problem?

Maybe take a look at http://llvm.org/docs/tutorial/LangImpl7.html ?
The simplest way to avoid "Instruction does not dominate all uses!"
errors is to avoid having values defined in a different block from the
use.

-Eli




More information about the llvm-dev mailing list