[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