<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class="">On Aug 21, 2017, at 12:28 AM, Frozen via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" class="">cfe-dev@lists.llvm.org</a>> wrote:</div><div class=""><div style="line-height: 1.7; font-size: 14px; font-family: Arial;" class=""><div class="">Simple Example:<br class=""><br class="">int main()</div><div class="">{</div><div class="">  int x;</div><div class="">  if (x || 1) {}</div><div class="">}</div><div class=""><br class=""></div><div class="">Clang can not evaluate this condition and will emit IR like this:</div><div class=""><br class=""></div><div class="">define signext i32 @main() #0 {</div><div class="">entry:</div><div class="">  %retval = alloca i32, align 4</div><div class="">  %x = alloca i32, align 4</div><div class="">  store i32 0, i32* %retval, align 4</div><div class="">  %0 = load i32, i32* %x, align 4</div><div class="">  %tobool = icmp ne i32 %0, 0</div><div class="">  br i1 %tobool, label %if.then, label %lor.lhs.false</div><div class=""><br class=""></div><div class="">lor.lhs.false:                                    ; preds = %entry</div><div class="">  br i1 true, label %if.then, label %if.end</div><div class=""><br class=""></div><div class="">if.then:                                          ; preds = %lor.lhs.false, %entry</div><div class="">  br label %if.end</div><div class=""><br class=""></div><div class="">if.end:                                           ; preds = %if.then, %lor.lhs.false</div><div class="">  %1 = load i32, i32* %retval, align 4</div><div class="">  ret i32 %1</div><div class="">}</div><div class=""><br class=""></div><div class="">However, when we swap the position of LHS and RHS(i.e. if (1 || x), Clang can recognize it:</div><div class=""><br class=""></div><div class="">define signext i32 @main() #0 {</div><div class="">entry:</div><div class="">  %x = alloca i32, align 4</div><div class="">  ret i32 0</div><div class="">}<br class=""><br class="">I also find the root issue and propose one potential solution in comment 2 of this link: <a href="https://bugs.llvm.org/show_bug.cgi?id=34229" _src="https://bugs.llvm.org/show_bug.cgi?id=34229" class="">https://bugs.llvm.org/show_bug.cgi?id=34229</a><br class=""> <br class="">Any idea?<br class=""></div></div></div></blockquote><div><br class=""></div>There will always be some example of something that we generate less efficiently at -O0 than we could.  Why is this example specifically worth optimizing?</div><div><br class=""></div><div>John.</div></body></html>