<div dir="ltr">The IR difference is real - it seems to depend on whether you're building debug or release.<br><br>This didn't change if I specified triple+layout with:<br>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>target triple = "x86_64-unknown-linux-gnu"<br><br>Here's what I show using a debug build of opt on x86-64 on macOS (note: different blocks, different phi, etc):<br><br>$ ./opt -S ../../llvm/test/Transforms/SimplifyCFG/pr34131.ll -simplifycfg<br>; ModuleID = '../../llvm/test/Transforms/SimplifyCFG/pr34131.ll'<br>source_filename = "../../llvm/test/Transforms/SimplifyCFG/pr34131.ll"<br><br>define void @patatino() {<br>bb1:<br>  br i1 undef, label %bb4, label %bb11<br><br>bb4:                                              ; preds = %bb6, %bb4, %bb1<br>  %.pr = phi i1 [ undef, %bb4 ], [ true, %bb1 ], [ true, %bb6 ]<br>  br i1 %.pr, label %bb4, label %bb6<br><br>bb6:                                              ; preds = %bb4<br>  %tmp = or i64 undef, 1<br>  %tmp8 = icmp ult i64 %tmp, 0<br>  %or.cond = and i1 undef, %tmp8<br>  %tmp13 = icmp ult i64 0, 0<br>  %or.cond2 = and i1 %or.cond, %tmp13<br>  %tmp15 = icmp ult i64 undef, 0<br>  %or.cond3 = and i1 %or.cond2, %tmp15<br>  %tmp19 = or i64 undef, 5<br>  %tmp20 = icmp ult i64 %tmp19, 0<br>  %or.cond4 = and i1 %or.cond3, %tmp20<br>  %tmp22 = or i64 undef, 6<br>  %tmp23 = icmp ult i64 %tmp22, 0<br>  %or.cond5 = and i1 %or.cond4, %tmp23<br>  %tmp25 = or i64 undef, 7<br>  %tmp26 = icmp ult i64 %tmp25, 0<br>  %or.cond6 = and i1 %or.cond5, %tmp26<br>  %tmp28 = or i64 undef, 8<br>  %tmp29 = icmp ult i64 %tmp28, 0<br>  %or.cond7 = and i1 %or.cond6, %tmp29<br>  %or.cond7.not = xor i1 %or.cond7, true<br>  %.not = xor i1 undef, true<br>  %brmerge = or i1 %or.cond7.not, %.not<br>  %.not8 = xor i1 undef, true<br>  %brmerge9 = or i1 %brmerge, %.not8<br>  %.not10 = xor i1 undef, true<br>  %brmerge11 = or i1 %brmerge9, %.not10<br>  %.not12 = xor i1 undef, true<br>  %brmerge13 = or i1 %brmerge11, %.not12<br>  %.not14 = xor i1 undef, true<br>  %brmerge15 = or i1 %brmerge13, %.not14<br>  %.not16 = xor i1 undef, true<br>  %brmerge17 = or i1 %brmerge15, %.not16<br>  %.not18 = xor i1 undef, true<br>  %brmerge19 = or i1 %brmerge17, %.not18<br>  %.not20 = xor i1 undef, true<br>  %brmerge21 = or i1 %brmerge19, %.not20<br>  br i1 %brmerge21, label %bb11, label %bb4<br><br>bb11:                                             ; preds = %bb6, %bb1<br>  ret void<br>}<br><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 9, 2017 at 1:09 PM, Davide Italiano <span dir="ltr"><<a href="mailto:davide@freebsd.org" target="_blank">davide@freebsd.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">On Wed, Aug 9, 2017 at 11:56 AM, Sanjay Patel via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: spatel<br>
> Date: Wed Aug  9 11:56:26 2017<br>
> New Revision: 310510<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=310510&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=310510&view=rev</a><br>
> Log:<br>
> [SimplifyCFG] remove checks for crasher test from r310481<br>
><br>
> Not sure why the earlier version would fail, but trying to get the bots<br>
> (and my local machine) to pass again.<br>
<br>
</span>I suspect a bug in lit or filecheck, FWIW.<br>
How does your IR look like? Is it different from this one?<br>
<br>
$ ./opt -simplifycfg -S -o - blah.ll<br>
<br>
define void @patatino() {<br>
  br label %bb1<br>
<br>
bb1:                                              ; preds = %bb6, %0<br>
<span class="gmail-">  br i1 undef, label %bb4, label %bb9.critedge<br>
<br>
</span><span class="gmail-">bb4:                                              ; preds = %bb4, %bb1<br>
</span><span class="gmail-">  %.pr = phi i1 [ undef, %bb4 ], [ true, %bb1 ]<br>
</span><span class="gmail-">  br i1 %.pr, label %bb4, label %bb6<br>
<br>
</span>bb6:                                              ; preds = %bb4<br>
<span class="gmail-">  %tmp = or i64 undef, 1<br>
</span><span class="gmail-">  %tmp8 = icmp ult i64 %tmp, 0<br>
</span><span class="gmail-">  %or.cond = and i1 undef, %tmp8<br>
</span><span class="gmail-">  %tmp13 = icmp ult i64 0, 0<br>
</span><span class="gmail-">  %or.cond2 = and i1 %or.cond, %tmp13<br>
</span><span class="gmail-">  %tmp15 = icmp ult i64 undef, 0<br>
</span><span class="gmail-">  %or.cond3 = and i1 %or.cond2, %tmp15<br>
</span><span class="gmail-">  %tmp19 = or i64 undef, 5<br>
</span><span class="gmail-">  %tmp20 = icmp ult i64 %tmp19, 0<br>
</span><span class="gmail-">  %or.cond4 = and i1 %or.cond3, %tmp20<br>
</span><span class="gmail-">  %tmp22 = or i64 undef, 6<br>
</span><span class="gmail-">  %tmp23 = icmp ult i64 %tmp22, 0<br>
</span><span class="gmail-">  %or.cond5 = and i1 %or.cond4, %tmp23<br>
</span><span class="gmail-">  %tmp25 = or i64 undef, 7<br>
</span><span class="gmail-">  %tmp26 = icmp ult i64 %tmp25, 0<br>
</span><span class="gmail-">  %or.cond6 = and i1 %or.cond5, %tmp26<br>
</span><span class="gmail-">  %tmp28 = or i64 undef, 8<br>
</span><span class="gmail-">  %tmp29 = icmp ult i64 %tmp28, 0<br>
</span><span class="gmail-">  %or.cond7 = and i1 %or.cond6, %tmp29<br>
</span><span class="gmail-">  %or.cond7.not = xor i1 %or.cond7, true<br>
</span><span class="gmail-">  %.not = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge = or i1 %or.cond7.not, %.not<br>
</span><span class="gmail-">  %.not8 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge9 = or i1 %brmerge, %.not8<br>
</span><span class="gmail-">  %.not10 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge11 = or i1 %brmerge9, %.not10<br>
</span><span class="gmail-">  %.not12 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge13 = or i1 %brmerge11, %.not12<br>
</span><span class="gmail-">  %.not14 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge15 = or i1 %brmerge13, %.not14<br>
</span><span class="gmail-">  %.not16 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge17 = or i1 %brmerge15, %.not16<br>
</span><span class="gmail-">  %.not18 = xor i1 undef, true<br>
</span><span class="gmail-">  %brmerge19 = or i1 %brmerge17, %.not18<br>
</span><span class="gmail-">  br i1 %brmerge19, label %bb11, label %bb1<br>
<br>
</span>bb9.critedge:                                     ; preds = %bb1<br>
  br label %bb11<br>
<span class="gmail-"><br>
bb11:                                             ; preds = %bb6, %bb9.critedge<br>
</span>  ret void<br>
}<br>
</blockquote></div><br></div></div>