<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><br>
</p>
<div class="moz-cite-prefix">On 3/12/21 3:35 PM, Philip Reames via
llvm-commits wrote:<br>
</div>
<blockquote type="cite"
cite="mid:66fc1184-dab2-d55f-ebbc-905e3509158d@philipreames.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p><br>
</p>
<div class="moz-cite-prefix">On 3/12/21 3:22 PM, Philip Reames via
llvm-commits wrote:<br>
</div>
<blockquote type="cite"
cite="mid:8723f55c-d3d5-7382-df43-612a92e4a8ce@philipreames.com">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<p><br>
</p>
<div class="moz-cite-prefix">On 3/12/21 2:59 PM, Jordan
Rupprecht wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<div dir="ltr">
<div dir="ltr"><br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, Mar 12, 2021 at
4:29 PM Philip Reames <<a
href="mailto:listmail@philipreames.com"
moz-do-not-send="true">listmail@philipreames.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<p>Jordan,</p>
<p>Please revert this change.</p>
<p>There's a couple of problems here:</p>
<ul>
<li>The change reverted looks obviously innocent.
(e.g. it's bailing out of a transform slightly
more often)</li>
</ul>
</div>
</blockquote>
<div>I don't disagree that it "looks obviously innocent",
but the proof is in the pudding: the reproducer I posted
compiles ~instantly at one commit prior, and times out
at the culprit commit. A change "looking" good should
never be a basis for saying it must be correct and
should not be reverted, especially when there is
evidence it is a problem. At least, that's my
personal opinion, but I should think that's a fairly
basic and widely held belief.</div>
</div>
</div>
</blockquote>
<p>You're correct, but missing the point I was getting at.
Admittedly, poorly worded. <br>
</p>
<p>While looking obviously innocent isn't reason not to revert
itself, it's definitely reason to take a slightly closer look
and make sure there's nothing else going on. This is
particularly relevant given the other points in this
discussion.<br>
</p>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<ul>
<li>The change reverted was itself fixing a
functional bug. At a minimum, we'd need a larger
revert to get ToT back to a sane state.</li>
</ul>
</div>
</blockquote>
<div>The fix is introducing a different bug, and one which
seems more widespread. At the very least, we haven't
observed any of the crashes mentioned in PR49466, but we
did notice a compile timeout in several different
compilation units.</div>
</div>
</div>
</blockquote>
<p>Bug? Discussion? Response to original commit?</p>
<p>Your observation may be true *for you*. It is not
necessarily true for anyone else, and you bear the burden of
making the case. Particularly when reverting a functional
fix.<br>
</p>
<p>To be clear, I'm not saying you're wrong. I'm saying you
haven't given anyone else enough information to tell if you
are or not. <br>
</p>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<ul>
<li>It is generally considered reasonable to provide
a test case and wait a bit before reverting, at
least once the patch is more than a few hours old.</li>
</ul>
</div>
</blockquote>
<div>Sorry about that. I'll concede that I got a little
trigger happy here, but I was hoping that would be
waived by the fact that I gave a simple, concrete
reproducer. <br>
</div>
</div>
</div>
</blockquote>
Thanks for the acknowledgement. To be fair, it would have been
less of an issue if the reproducer worked straight forwardly.<br>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<ul>
<li>Failure to provide an IR test case.</li>
</ul>
</div>
</blockquote>
<div>(ditto, but see one below) </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<ul>
<li>Your test case does not reproduce. Or at least,
it doesn't reproduce when compiled with clang10 to
IR and then run through (very recent, but without
your change) ToT opt -O2. If there's something
specific about the interaction of clang and opt
ToT, reducing this down to a IR test case becomes
particularly important.</li>
</ul>
</div>
</blockquote>
<div>This comment is going *way* off track -- the
reproducer I posted *does* reproduce, at least for me,
in the configuration I posted (a C++ source file, and
just "clang -O2"). By saying it doesn't reproduce in a
mixed configuration of an old version of clang to do the
C++ -> IR combined with a ToT version of opt -O2 to
do the IR -> object file is misleading -- it's true,
but that's not at all what I was claiming, and I don't
know where it's coming from.</div>
</div>
</div>
</blockquote>
<p>I actually don't think this is going off track at all. Our
default is for IR test cases for IR problems. Any reverting
commit should generally include a test case suitable for
checkin (w/a bit of cleanup) once the patch is fixed. I'll
admit, we're not strict about this, but the expectation is
definitely there.<br>
</p>
<p>The discussion of the hybrid configuration is relevant
*because* you didn't provide a test case in a form I could
easily use. I don't work on clang, don't build it regularly,
and shouldn't have to investigate a LLVM codegen regression.
<br>
</p>
<p>(See also below.)<br>
</p>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<ul>
</ul>
<p>Philip<br>
</p>
<p>p.s. To be clear, I'm happy to look at your
original issue this afternoon if you've got
something I can reproduce.</p>
</div>
</blockquote>
<div>Here's an IR reproducer with IR generated from ToT
before my revert (at
dfd27ebbd0eb137c9a439b7c537bb87ba903efd3):</div>
</div>
</div>
</blockquote>
<p>Ok, we have a problem here. None of the following reproduce
for me:<br>
</p>
<p>$ ./llc -O2 jordan.ll<br>
$ ./llc -O2 jordan.ll<br>
$ ./llc -O2 jordan.ll --filetype=obj<br>
$ ./llc -O3 jordan.ll --filetype=obj<br>
</p>
<p>LLC is ToT, just built with your change reverted locally.<br>
</p>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<div>$ bin/clang -c /tmp/repro.cc -O1 -S -emit-llvm -o
/tmp/repro.ll</div>
<div>$ bin/clang -c /tmp/repro.ll -O2 -o /tmp/repro.o #
hangs</div>
</div>
</div>
</blockquote>
<p>Given the preceding, I am now asserting this is likely some
clang specific problem. I've got a build of clang running
now, will report back in a bit.</p>
</blockquote>
<p>With a newly build clang, I can reproduce what you're seeing.
However, no attempt to mine to get IR out clang - I'm no expert
here - has generated anything standalone reproducible in IR.</p>
<p>Looking at debug output does make it look the transform
affected by the revert is involved in the infinite loop, but I
*strongly* suspect the actual revert is just massaging the issue
enough to avoid something lurking.</p>
<p>I will spend some time this afternoon investigating this. <br>
</p>
</blockquote>
<p>JFYI, found the root issue. As expected, it wasn't directly
related to the reverted change.</p>
<p>Instead, it appears to be a bug introduced with d9e93e8e57 early
last week. I'll work up a fix and land it, probably tomorrow.
There's one more interaction I want to make sure I understand, and
I'm out of time for today.<br>
</p>
<blockquote type="cite"
cite="mid:66fc1184-dab2-d55f-ebbc-905e3509158d@philipreames.com">
<p> </p>
<p>I would strongly suggest you follow up with clang folks to
figure out why clang and llc are not matching behavior. That's
a serious problem.<br>
</p>
<blockquote type="cite"
cite="mid:8723f55c-d3d5-7382-df43-612a92e4a8ce@philipreames.com">
<p>The other option is that this is someway specific to your
configuration. <br>
</p>
<p><br>
</p>
<blockquote type="cite"
cite="mid:CABC7LbQs-_8Ohz828W5UtV82eCKubrwTS2WUk-MVSRetgNX4Zg@mail.gmail.com">
<div dir="ltr">
<div class="gmail_quote">
<div><br>
</div>
<div>; ModuleID = '/tmp/repro.cc'<br>
source_filename = "/tmp/repro.cc"<br>
target datalayout =
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"<br>
target triple = "x86_64-unknown-linux-gnu"<br>
<br>
%class.D = type { i64 }<br>
%class.a = type { %class.g }<br>
%class.g = type { i32*, i32* }<br>
<br>
$_ZNK1aIliEixEl = comdat any<br>
<br>
$_ZNK1aIliE1jEv = comdat any<br>
<br>
@o = dso_local local_unnamed_addr global i32 0, align 4<br>
@p = dso_local local_unnamed_addr global i32 0, align 4<br>
@.str = private unnamed_addr constant [1 x i8]
zeroinitializer, align 1<br>
<br>
; Function Attrs: uwtable mustprogress<br>
define dso_local void @_ZN1D1qERK1aIliE(%class.D*
nocapture nonnull dereferenceable(8) %0, %class.a*
nonnull align 8 dereferenceable(16) %1)
local_unnamed_addr #0 align 2 {<br>
%3 = call i64 @_ZNK1aIliEixEl(%class.a* nonnull
dereferenceable(16) %1, i64 0) #3<br>
%4 = icmp eq i64 %3, 0<br>
br i1 %4, label %26, label %5<br>
<br>
5: ;
preds = %2<br>
%6 = call i64 @_ZNK1aIliE1jEv(%class.a* nonnull
dereferenceable(16) %1)<br>
%7 = icmp eq i64 %6, 0<br>
br i1 %7, label %26, label %8<br>
<br>
8: ;
preds = %5<br>
%9 = getelementptr inbounds %class.D, %class.D* %0,
i64 0, i32 0<br>
br label %10<br>
<br>
10: ;
preds = %8, %18<br>
%11 = phi i64 [ 0, %8 ], [ %23, %18 ]<br>
%12 = call i64 @_ZNK1aIliEixEl(%class.a* nonnull
dereferenceable(16) %1, i64 %11) #3<br>
%13 = icmp eq i64 %12, 0<br>
br i1 %13, label %18, label %14<br>
<br>
14: ;
preds = %10, %14<br>
%15 = load i32, i32* @o, align 4, !tbaa !2<br>
%16 = call i32 @_Z3fn1IiiEiT_T0_PKc(i32 %15, i32 0,
i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str,
i64 0, i64 0))<br>
%17 = icmp eq i32 %16, 0<br>
br i1 %17, label %18, label %14, !llvm.loop !6<br>
<br>
18: ;
preds = %14, %10<br>
%19 = call i64 @_ZNK1aIliEixEl(%class.a* nonnull
dereferenceable(16) %1, i64 %11) #3<br>
%20 = load i32, i32* @p, align 4, !tbaa !2<br>
%21 = sext i32 %20 to i64<br>
%22 = sdiv i64 %19, %21<br>
store i64 %22, i64* %9, align 8, !tbaa !9<br>
%23 = add i64 %11, 1<br>
%24 = call i64 @_ZNK1aIliE1jEv(%class.a* nonnull
dereferenceable(16) %1)<br>
%25 = icmp eq i64 %24, 0<br>
br i1 %25, label %26, label %10, !llvm.loop !12<br>
<br>
26: ;
preds = %18, %5, %2<br>
ret void<br>
}<br>
<br>
; Function Attrs: nounwind uwtable willreturn
mustprogress<br>
define linkonce_odr dso_local i64
@_ZNK1aIliEixEl(%class.a* nonnull dereferenceable(16)
%0, i64 %1) local_unnamed_addr #1 comdat align 2 {<br>
%3 = getelementptr inbounds %class.a, %class.a* %0,
i64 0, i32 0, i32 0<br>
%4 = load i32*, i32** %3, align 8, !tbaa !13<br>
%5 = getelementptr inbounds i32, i32* %4, i64 %1<br>
%6 = load i32, i32* %5, align 4, !tbaa !2<br>
%7 = sext i32 %6 to i64<br>
ret i64 %7<br>
}<br>
<br>
; Function Attrs: nounwind uwtable willreturn
mustprogress<br>
define linkonce_odr dso_local i64
@_ZNK1aIliE1jEv(%class.a* nonnull dereferenceable(16)
%0) local_unnamed_addr #1 comdat align 2 {<br>
%2 = getelementptr inbounds %class.a, %class.a* %0,
i64 0, i32 0, i32 1<br>
%3 = load i32*, i32** %2, align 8, !tbaa !16<br>
%4 = getelementptr inbounds %class.a, %class.a* %0,
i64 0, i32 0, i32 0<br>
%5 = load i32*, i32** %4, align 8, !tbaa !13<br>
%6 = ptrtoint i32* %3 to i64<br>
%7 = ptrtoint i32* %5 to i64<br>
%8 = sub i64 %6, %7<br>
%9 = ashr exact i64 %8, 2<br>
ret i64 %9<br>
}<br>
<br>
declare dso_local i32 @_Z3fn1IiiEiT_T0_PKc(i32, i32,
i8*) local_unnamed_addr #2<br>
<br>
attributes #0 = { uwtable mustprogress
"frame-pointer"="none" "no-trapping-math"="true"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87"
"tune-cpu"="generic" }<br>
attributes #1 = { nounwind uwtable willreturn
mustprogress "frame-pointer"="none"
"no-trapping-math"="true"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87"
"tune-cpu"="generic" }<br>
attributes #2 = { "frame-pointer"="none"
"no-trapping-math"="true"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87"
"tune-cpu"="generic" }<br>
attributes #3 = { nounwind }<br>
<br>
!llvm.module.flags = !{!0}<br>
!llvm.ident = !{!1}<br>
<br>
!0 = !{i32 1, !"wchar_size", i32 4}<br>
!1 = !{!"clang version 13.0.0 (<a
href="https://github.com/llvm/llvm-project.git"
moz-do-not-send="true">https://github.com/llvm/llvm-project.git</a>
dfd27ebbd0eb137c9a439b7c537bb87ba903efd3)"}<br>
!2 = !{!3, !3, i64 0}<br>
!3 = !{!"int", !4, i64 0}<br>
!4 = !{!"omnipotent char", !5, i64 0}<br>
!5 = !{!"Simple C++ TBAA"}<br>
!6 = distinct !{!6, !7, !8}<br>
!7 = !{!"llvm.loop.mustprogress"}<br>
!8 = !{!"llvm.loop.unroll.disable"}<br>
!9 = !{!10, !11, i64 0}<br>
!10 = !{!"_ZTS1D", !11, i64 0}<br>
!11 = !{!"long", !4, i64 0}<br>
!12 = distinct !{!12, !7, !8}<br>
!13 = !{!14, !15, i64 0}<br>
!14 = !{!"_ZTS1g", !15, i64 0, !15, i64 8}<br>
!15 = !{!"any pointer", !4, i64 0}<br>
</div>
<div>!16 = !{!14, !15, i64 8}</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<p> </p>
<div>On 3/12/21 1:59 PM, Jordan Rupprecht via
llvm-commits wrote:<br>
</div>
<blockquote type="cite">
<pre>Author: Jordan Rupprecht
Date: 2021-03-12T13:59:14-08:00
New Revision: 8d20f2c2c66eb486ff23cc3d55a53bd840b36971
URL: <a href="https://github.com/llvm/llvm-project/commit/8d20f2c2c66eb486ff23cc3d55a53bd840b36971" target="_blank" class="cremed" moz-do-not-send="true">https://github.com/llvm/llvm-project/commit/8d20f2c2c66eb486ff23cc3d55a53bd840b36971</a>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/8d20f2c2c66eb486ff23cc3d55a53bd840b36971.diff" target="_blank" class="cremed" moz-do-not-send="true">https://github.com/llvm/llvm-project/commit/8d20f2c2c66eb486ff23cc3d55a53bd840b36971.diff</a>
LOG: Revert "[CodeGenPrepare] Fix isIVIncrement (PR49466)"
This reverts commit cf82700af8c658ae09b14c3d01bb1e73e48d3bd3 due to a compile timeout when building the following with `clang -O2`:
```
template <class, class = int> class a;
struct b {
using d = int *;
};
struct e {
using f = b::d;
};
class g {
public:
e::f h;
e::f i;
};
template <class, class> class a : g {
public:
long j() const { return i - h; }
long operator[](long) const noexcept;
};
template <class c, class k> long a<c, k>::operator[](long l) const noexcept {
return h[l];
}
template <typename m, typename n> int fn1(m, n, const char *);
int o, p;
class D {
void q(const a<long> &);
long r;
};
void D::q(const a<long> &l) {
int s;
if (l[0])
for (; l.j(); ++s) {
if (l[s])
while (fn1(o, 0, ""))
;
r = l[s] / p;
}
}
```
Added:
Modified:
llvm/lib/CodeGen/CodeGenPrepare.cpp
Removed:
llvm/test/CodeGen/X86/pr49466.ll
################################################################################
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 0f698dd3b190..0b1156e2ace7 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -1332,7 +1332,7 @@ getIVIncrement(const PHINode *PN, const LoopInfo *LI) {
static bool isIVIncrement(const BinaryOperator *BO, const LoopInfo *LI) {
auto *PN = dyn_cast<PHINode>(BO->getOperand(0));
- if (!PN || LI->getLoopFor(BO->getParent()) != LI->getLoopFor(PN->getParent()))
+ if (!PN)
return false;
if (auto IVInc = getIVIncrement(PN, LI))
return IVInc->first == BO;
@@ -1347,7 +1347,6 @@ bool CodeGenPrepare::replaceMathCmpWithIntrinsic(BinaryOperator *BO,
if (!isIVIncrement(BO, LI))
return false;
const Loop *L = LI->getLoopFor(BO->getParent());
- assert(L && "L should not be null after isIVIncrement()");
// Do not risk on moving increment into a child loop.
if (LI->getLoopFor(Cmp->getParent()) != L)
return false;
diff --git a/llvm/test/CodeGen/X86/pr49466.ll b/llvm/test/CodeGen/X86/pr49466.ll
deleted file mode 100644
index 4f6574d9bbf2..000000000000
--- a/llvm/test/CodeGen/X86/pr49466.ll
+++ /dev/null
@@ -1,122 +0,0 @@
-; RUN: opt < %s -O2 -codegenprepare -S | FileCheck %s
-
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-@b = dso_local local_unnamed_addr global i64 0, align 8
-@c = dso_local local_unnamed_addr global i64 0, align 8
-@d = dso_local local_unnamed_addr global i64 0, align 8
-@e = dso_local local_unnamed_addr global i64 0, align 8
-@f = dso_local local_unnamed_addr global i64 0, align 8
-@g = dso_local local_unnamed_addr global i64 0, align 8
-
-; CHECK-LABEL: @m(
-
-define dso_local i32 @m() local_unnamed_addr {
-entry:
- %0 = load i64, i64* @f, align 8
- %1 = inttoptr i64 %0 to i32*
- %2 = load i64, i64* @c, align 8
- %conv18 = trunc i64 %2 to i32
- %cmp = icmp slt i32 %conv18, 3
- %3 = load i64, i64* @d, align 8
- %conv43 = trunc i64 %3 to i8
- %tobool40.not = icmp eq i8 %conv43, 0
- br label %for.cond
-
-for.cond: ; preds = %for.cond39.preheader, %entry
- %j.0 = phi i32 [ undef, %entry ], [ %j.1.lcssa, %for.cond39.preheader ]
- %p.0 = phi i64 [ undef, %entry ], [ %p.1.lcssa, %for.cond39.preheader ]
- %i.0 = phi i32 [ undef, %entry ], [ %i.1.lcssa, %for.cond39.preheader ]
- %cmp73 = icmp slt i32 %i.0, 3
- br i1 %cmp73, label %for.body.preheader, label %for.cond39.preheader
-
-for.body.preheader: ; preds = %for.cond
- br label %for.body
-
-for.cond1.loopexit: ; preds = %for.inc34.preheader, %for.end12
- br i1 %cmp, label %for.body, label %for.cond39.preheader.loopexit
-
-for.cond39.preheader.loopexit: ; preds = %for.cond1.loopexit
- br label %for.cond39.preheader
-
-for.cond39.preheader: ; preds = %for.cond39.preheader.loopexit, %for.cond
- %j.1.lcssa = phi i32 [ %j.0, %for.cond ], [ %conv18, %for.cond39.preheader.loopexit ]
- %p.1.lcssa = phi i64 [ %p.0, %for.cond ], [ 0, %for.cond39.preheader.loopexit ]
- %i.1.lcssa = phi i32 [ %i.0, %for.cond ], [ %conv18, %for.cond39.preheader.loopexit ]
- br i1 %tobool40.not, label %for.cond, label %for.inc42.preheader
-
-for.inc42.preheader: ; preds = %for.cond39.preheader
- br label %for.inc42
-
-for.body: ; preds = %for.body.preheader, %for.cond1.loopexit
- %l.176 = phi i8 [ %sub, %for.cond1.loopexit ], [ 0, %for.body.preheader ]
- %p.175 = phi i64 [ 0, %for.cond1.loopexit ], [ %p.0, %for.body.preheader ]
- %j.174 = phi i32 [ %conv18, %for.cond1.loopexit ], [ %j.0, %for.body.preheader ]
- %tobool.not = icmp eq i32 %j.174, 0
- br i1 %tobool.not, label %cleanup45, label %for.cond2.preheader
-
-for.cond2.preheader: ; preds = %for.body
- %tobool3.not69 = icmp eq i64 %p.175, 0
- %.pr.pre = load i64, i64* @e, align 8
- br i1 %tobool3.not69, label %for.end12, label %for.body4.preheader
-
-for.body4.preheader: ; preds = %for.cond2.preheader
- %4 = sub i64 0, %p.175
- %xtraiter = and i64 %4, 7
- %lcmp.mod.not = icmp eq i64 %xtraiter, 0
- br i1 %lcmp.mod.not, label %for.body4.prol.loopexit, label %for.body4.prol.preheader
-
-for.body4.prol.preheader: ; preds = %for.body4.preheader
- %5 = mul nsw i64 %xtraiter, -1
- br label %for.body4.prol
-
-for.body4.prol: ; preds = %for.body4.prol.preheader, %for.body4.prol
- %lsr.iv = phi i64 [ 0, %for.body4.prol.preheader ], [ %lsr.iv.next, %for.body4.prol ]
- %lsr.iv.next = add nsw i64 %lsr.iv, -1
- %prol.iter.cmp.not = icmp eq i64 %5, %lsr.iv.next
- br i1 %prol.iter.cmp.not, label %for.body4.prol.loopexit.loopexit, label %for.body4.prol
-
-for.body4.prol.loopexit.loopexit: ; preds = %for.body4.prol
- %6 = sub i64 %p.175, %lsr.iv.next
- br label %for.body4.prol.loopexit
-
-for.body4.prol.loopexit: ; preds = %for.body4.prol.loopexit.loopexit, %for.body4.preheader
- %p.270.unr = phi i64 [ %p.175, %for.body4.preheader ], [ %6, %for.body4.prol.loopexit.loopexit ]
- %7 = icmp ugt i64 %p.175, -8
- br i1 %7, label %for.end12, label %for.body4.preheader89
-
-for.body4.preheader89: ; preds = %for.body4.prol.loopexit
- br label %for.body4
-
-for.body4: ; preds = %for.body4.preheader89, %for.body4
- %p.270 = phi i64 [ %inc11.7, %for.body4 ], [ %p.270.unr, %for.body4.preheader89 ]
- %inc11.7 = add i64 %p.270, 8
- %tobool3.not.7 = icmp eq i64 %inc11.7, 0
- br i1 %tobool3.not.7, label %for.end12.loopexit, label %for.body4
-
-for.end12.loopexit: ; preds = %for.body4
- br label %for.end12
-
-for.end12: ; preds = %for.end12.loopexit, %for.body4.prol.loopexit, %for.cond2.preheader
- %8 = load i32, i32* %1, align 4
- %conv23 = zext i32 %8 to i64
- %9 = load i64, i64* @b, align 8
- %div24 = udiv i64 %9, %conv23
- store i64 %div24, i64* @b, align 8
- %sub = add i8 %l.176, -1
- %tobool32.not72 = icmp eq i64 %.pr.pre, 0
- br i1 %tobool32.not72, label %for.cond1.loopexit, label %for.inc34.preheader
-
-for.inc34.preheader: ; preds = %for.end12
- store i64 0, i64* @e, align 8
- br label %for.cond1.loopexit
-
-for.inc42: ; preds = %for.inc42.preheader, %for.inc42
- br label %for.inc42
-
-cleanup45: ; preds = %for.body
- %cmp13 = icmp ne i8 %l.176, 0
- %conv16 = zext i1 %cmp13 to i32
- ret i32 %conv16
-}
_______________________________________________
llvm-commits mailing list
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" moz-do-not-send="true">llvm-commits@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank" class="cremed" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
llvm-commits mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org" moz-do-not-send="true">llvm-commits@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
llvm-commits mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
</body>
</html>