<div dir="ltr">Hello,<div><br></div><div>I was trying a basic example on LLVM GVN Hoist and output differs from what I expect. Am I missing something ?</div><div><br></div><div><b>Code</b> :</div><div><br></div><div><div>int main()</div><div>{</div><div><span style="white-space:pre-wrap">        </span>int x = 7;</div><div><span style="white-space:pre-wrap">       </span>int a = 0;</div><div><span style="white-space:pre-wrap">       </span>if(a == 7){</div><div><span style="white-space:pre-wrap">              </span>x = 1;</div><div><span style="white-space:pre-wrap">           </span>a = 8 * x;</div><div><span style="white-space:pre-wrap">       </span>} else {</div><div><span style="white-space:pre-wrap">         </span>x = 1;</div><div><span style="white-space:pre-wrap">           </span>a = 2 * x;</div><div><span style="white-space:pre-wrap">       </span>}</div><div><span style="white-space:pre-wrap">        </span>return 0;</div><div>}</div></div><div><br></div><div><b>Commands</b> :</div><div>clang-8 -O0 -S -emit-llvm test.c<br></div><div>opt-8 -gvn-hoist -S < test.ll<br></div><div><br></div><div><b>Output :</b></div><div><b><br></b></div><div><div>; ModuleID = '<stdin>'</div><div>source_filename = "test.c"</div><div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"</div><div>target triple = "x86_64-pc-linux-gnu"</div><div><br></div><div>; Function Attrs: noinline nounwind optnone uwtable</div><div>define dso_local i32 @main() #0 {</div><div>  %1 = alloca i32, align 4</div><div>  %2 = alloca i32, align 4</div><div>  %3 = alloca i32, align 4</div><div>  store i32 0, i32* %1, align 4</div><div>  store i32 7, i32* %2, align 4</div><div>  store i32 0, i32* %3, align 4</div><div>  %4 = load i32, i32* %3, align 4</div><div>  %5 = icmp eq i32 %4, 7</div><div>  br i1 %5, label %6, label %9</div><div><br></div><div>; <label>:6:                                      ; preds = %0</div><div>  store i32 1, i32* %2, align 4</div><div>  %7 = load i32, i32* %2, align 4</div><div>  %8 = mul nsw i32 8, %7</div><div>  store i32 %8, i32* %3, align 4</div><div>  br label %12</div><div><br></div><div>; <label>:9:                                      ; preds = %0</div><div>  store i32 1, i32* %2, align 4</div><div>  %10 = load i32, i32* %2, align 4</div><div>  %11 = mul nsw i32 2, %10</div><div>  store i32 %11, i32* %3, align 4</div><div>  br label %12</div><div><br></div><div>; <label>:12:                                     ; preds = %9, %6</div><div>  ret i32 0</div><div>}</div><div><br></div><div>attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }</div><div><br></div><div>!llvm.module.flags = !{!0}</div><div>!llvm.ident = !{!1}</div><div><br></div><div>!0 = !{i32 1, !"wchar_size", i32 4}</div><div>!1 = !{!"clang version 8.0.0-svn356034-1~exp1~20190313093039.54 (branches/release_80)"}</div><div><br></div><div>Thank you,</div><div>Digvijay</div></div></div>