<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText>Hi Hal, et al<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>To give you a datapoint - I have a reduced c example that fails due to r219135 (attached) for arm (and aarch64) at -O2 and -O3. The example comes from csmith.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I must admit that the .ll is beyond my ken, but my reading of the generated ARM assembly (also attached) is that the final value of d is being printed rather than the array reference. The global variable e is also not being updated to alias global b.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Hope that helps you to root out some bugs.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Ta<o:p></o:p></p><p class=MsoPlainText>Rich<o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> llvm-commits-bounces@cs.uiuc.edu [mailto:llvm-commits-bounces@cs.uiuc.edu] <b>On Behalf Of </b>Lang Hames<br><b>Sent:</b> 09 October 2014 21:04<br><b>To:</b> Hal Finkel<br><b>Cc:</b> Commit Messages and Patches for LLVM; Nicholas White<br><b>Subject:</b> Re: [llvm] r219135 - [BasicAA] Revert "Revert r218714 - Make better use of zext and sign information."<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Thanks very much Hal.<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Cheers,<o:p></o:p></p></div><div><p class=MsoNormal>Lang.<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>On Thu, Oct 9, 2014 at 1:00 PM, Hal Finkel <<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>> wrote:<o:p></o:p></p><p class=MsoNormal>----- Original Message -----<br>> From: "Hal Finkel" <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>><br>> To: "James Molloy" <<a href="mailto:james@jamesmolloy.co.uk">james@jamesmolloy.co.uk</a>><br>> Cc: "Commit Messages and Patches for LLVM" <<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a>>, "Nicholas White" <<a href="mailto:n.j.white@gmail.com">n.j.white@gmail.com</a>><br>> Sent: Thursday, October 9, 2014 2:55:16 PM<br>> Subject: Re: [llvm] r219135 - [BasicAA] Revert "Revert r218714 - Make better  use of zext and sign information."<br>><br>> ----- Original Message -----<br>> > From: "James Molloy" <<a href="mailto:james@jamesmolloy.co.uk">james@jamesmolloy.co.uk</a>><br>> > To: "Hal Finkel" <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>><br>> > Cc: "Lang Hames" <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>>, "Commit Messages and Patches<br>> > for LLVM" <<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a>>, "Nicholas<br>> > White" <<a href="mailto:n.j.white@gmail.com">n.j.white@gmail.com</a>><br>> > Sent: Thursday, October 9, 2014 2:52:08 PM<br>> > Subject: Re: [llvm] r219135 - [BasicAA] Revert "Revert r218714 -<br>> > Make better use of zext and sign information."<br>> ><br>> ><br>> > Hi,<br>> ><br>> ><br>> > I've just narrowed down a build failure on povray in SPEC2k6 to<br>> > this<br>> > too.<br>> ><br>> ><br>> > Could you please revert?<br>><br>> Yes, will do now.<br><br>r219432.<br><span style='color:#888888'><br><span class=hoenzb> -Hal</span></span><o:p></o:p></p><div><div><p class=MsoNormal><br>><br>>  -Hal<br>><br>> >I can try and get you a testcase in the<br>> > morning (SPEC2k6 testcases need to be anonymised which takes time<br>> > :(<br>> > )<br>> ><br>> ><br>> > Cheers,<br>> ><br>> ><br>> > James<br>> ><br>> ><br>> > On 9 October 2014 19:45, Hal Finkel < <a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a> > wrote:<br>> ><br>> ><br>> > ----- Original Message -----<br>> > > From: "Lang Hames" < <a href="mailto:lhames@gmail.com">lhames@gmail.com</a> ><br>> > > To: "Hal Finkel" < <a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a> ><br>> > > Cc: "Commit Messages and Patches for LLVM" <<br>> > > <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a> >, "Nicholas White" <<br>> > > <a href="mailto:n.j.white@gmail.com">n.j.white@gmail.com</a><br>> > > ><br>> > > Sent: Thursday, October 9, 2014 1:34:19 PM<br>> > > Subject: Re: [llvm] r219135 - [BasicAA] Revert "Revert r218714 -<br>> > > Make better use of zext and sign information."<br>> > ><br>> > ><br>> > > Hi Hal, Nick,<br>> > ><br>> > ><br>> > > It looks like this broke SPEC2k6/464.h264ref on x86-64 (and<br>> > > possibly<br>> > > ARM as well - I'm still investigating there). Do you guys have<br>> > > access to SPEC2k6? Have you seen any failures locally?<br>> ><br>> > I do, but I don't have it running nightly (likely should). Feel<br>> > free<br>> > to revert while we figure it out.<br>> ><br>> > Thanks again,<br>> > Hal<br>> ><br>> ><br>> ><br>> > ><br>> > ><br>> > > Cheers,<br>> > > Lang.<br>> > ><br>> > ><br>> > ><br>> > ><br>> > > On Mon, Oct 6, 2014 at 11:38 AM, Hal Finkel < <a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a> ><br>> > > wrote:<br>> > ><br>> > ><br>> > > Author: hfinkel<br>> > > Date: Mon Oct 6 13:37:59 2014<br>> > > New Revision: 219135<br>> > ><br>> > > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=219135&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=219135&view=rev</a><br>> > > Log:<br>> > > [BasicAA] Revert "Revert r218714 - Make better use of zext and<br>> > > sign<br>> > > information."<br>> > ><br>> > > This reverts r218944, which reverted r218714, plus a bug fix.<br>> > ><br>> > > Description of the bug in r218714 (by Nick)<br>> > ><br>> > > The original patch forgot to check if the Scale in<br>> > > VariableGEPIndex<br>> > > flipped the<br>> > > sign of the variable. The BasicAA pass iterates over the<br>> > > instructions<br>> > > in the<br>> > > order they appear in the function, and so<br>> > > BasicAliasAnalysis::aliasGEP is<br>> > > called with the variable it first comes across as parameter GEP1.<br>> > > Adding a<br>> > > %reorder label puts the definition of %a after %b so aliasGEP is<br>> > > called with %b<br>> > > as the first parameter and %a as the second. aliasGEP later<br>> > > calculates that %a<br>> > > == %b + 1 - %idxprom where %idxprom >= 0 (if %a was passed as the<br>> > > first<br>> > > parameter it would calculate %b == %a - 1 + %idxprom where<br>> > > %idxprom<br>> > > >= 0) -<br>> > > ignoring that %idxprom is scaled by -1 here lead the patch to<br>> > > incorrectly<br>> > > conclude that %a > %b.<br>> > ><br>> > > Revised patch by Nick White, thanks! Thanks to Lang to isolating<br>> > > the<br>> > > bug.<br>> > > Slightly modified by me to add an early exit from the loop and<br>> > > avoid<br>> > > unnecessary, but expensive, function calls.<br>> > ><br>> > > Original commit message:<br>> > ><br>> > > Two related things:<br>> > ><br>> > > 1. Fixes a bug when calculating the offset in<br>> > > GetLinearExpression.<br>> > > The code<br>> > > previously used zext to extend the offset, so negative offsets<br>> > > were<br>> > > converted<br>> > > to large positive ones.<br>> > ><br>> > > 2. Enhance aliasGEP to deduce that, if the difference between two<br>> > > GEP<br>> > > allocations is positive and all the variables that govern the<br>> > > offset<br>> > > are also<br>> > > positive (i.e. the offset is strictly after the higher base<br>> > > pointer),<br>> > > then<br>> > > locations that fit in the gap between the two base pointers are<br>> > > NoAlias.<br>> > ><br>> > > Patch by Nick White!<br>> > ><br>> > > Added:<br>> > > llvm/trunk/test/Analysis/BasicAA/zext.ll<br>> > > Modified:<br>> > > llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp<br>> > > llvm/trunk/test/Analysis/BasicAA/phi-aa.ll<br>> > ><br>> > > Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp<br>> > > URL:<br>> > > <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=219135&r1=219134&r2=219135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=219135&r1=219134&r2=219135&view=diff</a><br>> > > ==============================================================================<br>> > > --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)<br>> > > +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Mon Oct 6<br>> > > 13:37:59<br>> > > 2014<br>> > > @@ -254,7 +254,10 @@ static Value *GetLinearExpression(Value<br>> > > Value *Result = GetLinearExpression(CastOp, Scale, Offset,<br>> > > Extension,<br>> > > DL, Depth+1, AT, DT);<br>> > > Scale = Scale.zext(OldWidth);<br>> > > - Offset = Offset.zext(OldWidth);<br>> > > +<br>> > > + // We have to sign-extend even if Extension == EK_ZeroExt as we<br>> > > can't<br>> > > + // decompose a sign extension (i.e. zext(x - 1) != zext(x) -<br>> > > zext(-1)).<br>> > > + Offset = Offset.sext(OldWidth);<br>> > ><br>> > > return Result;<br>> > > }<br>> > > @@ -1055,8 +1058,38 @@ BasicAliasAnalysis::aliasGEP(const GEPOp<br>> > > // Grab the least significant bit set in any of the scales.<br>> > > if (!GEP1VariableIndices.empty()) {<br>> > > uint64_t Modulo = 0;<br>> > > - for (unsigned i = 0, e = GEP1VariableIndices.size(); i != e;<br>> > > ++i)<br>> > > + bool AllPositive = true;<br>> > > + for (unsigned i = 0, e = GEP1VariableIndices.size();<br>> > > + i != e && AllPositive; ++i) {<br>> > > + const Value *V = GEP1VariableIndices[i].V;<br>> > > Modulo |= (uint64_t)GEP1VariableIndices[i].Scale;<br>> > > +<br>> > > + bool SignKnownZero, SignKnownOne;<br>> > > + ComputeSignBit(<br>> > > + const_cast<Value *>(V),<br>> > > + SignKnownZero, SignKnownOne,<br>> > > + DL, 0, AT, nullptr, DT);<br>> > > +<br>> > > + // Zero-extension widens the variable, and so forces the sign<br>> > > + // bit to zero.<br>> > > + bool IsZExt = GEP1VariableIndices[i].Extension == EK_ZeroExt;<br>> > > + SignKnownZero |= IsZExt;<br>> > > + SignKnownOne &= !IsZExt;<br>> > > +<br>> > > + // If the variable begins with a zero then we know it's<br>> > > + // positive, regardless of whether the value is signed or<br>> > > + // unsigned.<br>> > > + int64_t Scale = GEP1VariableIndices[i].Scale;<br>> > > + AllPositive &=<br>> > > + (SignKnownZero && Scale >= 0) ||<br>> > > + (SignKnownOne && Scale < 0);<br>> > > +<br>> > > + // If the Value is currently positive but could change in a<br>> > > cycle,<br>> > > + // then we can't guarantee it'll always br positive.<br>> > > + if (AllPositive && !isValueEqualInPotentialCycles(V, V))<br>> > > + AllPositive = false;<br>> > > + }<br>> > > +<br>> > > Modulo = Modulo ^ (Modulo & (Modulo - 1));<br>> > ><br>> > > // We can compute the difference between the two addresses<br>> > > @@ -1066,6 +1099,12 @@ BasicAliasAnalysis::aliasGEP(const GEPOp<br>> > > if (V1Size != UnknownSize && V2Size != UnknownSize &&<br>> > > ModOffset >= V2Size && V1Size <= Modulo - ModOffset)<br>> > > return NoAlias;<br>> > > +<br>> > > + // If we know all the variables are positive, then GEP1 >=<br>> > > GEP1BasePtr.<br>> > > + // If GEP1BasePtr > V2 (GEP1BaseOffset > 0) then we know the<br>> > > pointers<br>> > > + // don't alias if V2Size can fit in the gap between V2 and<br>> > > GEP1BasePtr.<br>> > > + if (AllPositive && GEP1BaseOffset > 0 && V2Size <= (uint64_t)<br>> > > GEP1BaseOffset)<br>> > > + return NoAlias;<br>> > > }<br>> > ><br>> > > // Statically, we can see that the base objects are the same, but<br>> > > the<br>> > ><br>> > > Modified: llvm/trunk/test/Analysis/BasicAA/phi-aa.ll<br>> > > URL:<br>> > > <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/phi-aa.ll?rev=219135&r1=219134&r2=219135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/phi-aa.ll?rev=219135&r1=219134&r2=219135&view=diff</a><br>> > > ==============================================================================<br>> > > --- llvm/trunk/test/Analysis/BasicAA/phi-aa.ll (original)<br>> > > +++ llvm/trunk/test/Analysis/BasicAA/phi-aa.ll Mon Oct 6 13:37:59<br>> > > 2014<br>> > > @@ -39,6 +39,7 @@ return:<br>> > ><br>> > > ; CHECK-LABEL: pr18068<br>> > > ; CHECK: MayAlias: i32* %0, i32* %arrayidx5<br>> > > +; CHECK: NoAlias: i32* %arrayidx13, i32* %arrayidx5<br>> > ><br>> > > define i32 @pr18068(i32* %jj7, i32* %j) {<br>> > > entry:<br>> > ><br>> > > Added: llvm/trunk/test/Analysis/BasicAA/zext.ll<br>> > > URL:<br>> > > <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/zext.ll?rev=219135&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/zext.ll?rev=219135&view=auto</a><br>> > > ==============================================================================<br>> > > --- llvm/trunk/test/Analysis/BasicAA/zext.ll (added)<br>> > > +++ llvm/trunk/test/Analysis/BasicAA/zext.ll Mon Oct 6 13:37:59<br>> > > 2014<br>> > > @@ -0,0 +1,87 @@<br>> > > +; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info<br>> > > -disable-output 2>&1 | FileCheck %s<br>> > > +target datalayout =<br>> > > "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"<br>> > > +target triple = "x86_64-unknown-linux-gnu"<br>> > > +<br>> > > +; CHECK-LABEL: test_with_zext<br>> > > +; CHECK: NoAlias: i8* %a, i8* %b<br>> > > +<br>> > > +define void @test_with_zext() {<br>> > > + %1 = tail call i8* @malloc(i64 120)<br>> > > + %a = getelementptr inbounds i8* %1, i64 8<br>> > > + %2 = getelementptr inbounds i8* %1, i64 16<br>> > > + %3 = zext i32 3 to i64<br>> > > + %b = getelementptr inbounds i8* %2, i64 %3<br>> > > + ret void<br>> > > +}<br>> > > +<br>> > > +; CHECK-LABEL: test_with_lshr<br>> > > +; CHECK: NoAlias: i8* %a, i8* %b<br>> > > +<br>> > > +define void @test_with_lshr(i64 %i) {<br>> > > + %1 = tail call i8* @malloc(i64 120)<br>> > > + %a = getelementptr inbounds i8* %1, i64 8<br>> > > + %2 = getelementptr inbounds i8* %1, i64 16<br>> > > + %3 = lshr i64 %i, 2<br>> > > + %b = getelementptr inbounds i8* %2, i64 %3<br>> > > + ret void<br>> > > +}<br>> > > +<br>> > > +; CHECK-LABEL: test_with_a_loop<br>> > > +; CHECK: NoAlias: i8* %a, i8* %b<br>> > > +<br>> > > +define void @test_with_a_loop() {<br>> > > + %1 = tail call i8* @malloc(i64 120)<br>> > > + %a = getelementptr inbounds i8* %1, i64 8<br>> > > + %2 = getelementptr inbounds i8* %1, i64 16<br>> > > + br label %for.loop<br>> > > +<br>> > > +for.loop:<br>> > > + %i = phi i32 [ 0, %0 ], [ %i.next, %for.loop ]<br>> > > + %3 = zext i32 %i to i64<br>> > > + %b = getelementptr inbounds i8* %2, i64 %3<br>> > > + %i.next = add nuw nsw i32 %i, 1<br>> > > + %4 = icmp eq i32 %i.next, 10<br>> > > + br i1 %4, label %for.loop.exit, label %for.loop<br>> > > +<br>> > > +for.loop.exit:<br>> > > + ret void<br>> > > +}<br>> > > +<br>> > > +; CHECK-LABEL: test_sign_extension<br>> > > +; CHECK: PartialAlias: i64* %b.i64, i8* %a<br>> > > +<br>> > > +define void @test_sign_extension(i32 %p) {<br>> > > + %1 = tail call i8* @malloc(i64 120)<br>> > > + %p.64 = zext i32 %p to i64<br>> > > + %a = getelementptr inbounds i8* %1, i64 %p.64<br>> > > + %p.minus1 = add i32 %p, -1<br>> > > + %p.minus1.64 = zext i32 %p.minus1 to i64<br>> > > + %b.i8 = getelementptr inbounds i8* %1, i64 %p.minus1.64<br>> > > + %b.i64 = bitcast i8* %b.i8 to i64*<br>> > > + ret void<br>> > > +}<br>> > > +<br>> > > +; CHECK-LABEL: test_fe_tools<br>> > > +; CHECK: PartialAlias: i32* %a, i32* %b<br>> > > +<br>> > > +define void @test_fe_tools([8 x i32]* %values) {<br>> > > + br label %reorder<br>> > > +<br>> > > +for.loop:<br>> > > + %i = phi i32 [ 0, %reorder ], [ %i.next, %for.loop ]<br>> > > + %idxprom = zext i32 %i to i64<br>> > > + %b = getelementptr inbounds [8 x i32]* %values, i64 0, i64<br>> > > %idxprom<br>> > > + %i.next = add nuw nsw i32 %i, 1<br>> > > + %1 = icmp eq i32 %i.next, 10<br>> > > + br i1 %1, label %for.loop.exit, label %for.loop<br>> > > +<br>> > > +reorder:<br>> > > + %a = getelementptr inbounds [8 x i32]* %values, i64 0, i64 1<br>> > > + br label %for.loop<br>> > > +<br>> > > +for.loop.exit:<br>> > > + ret void<br>> > > +}<br>> > > +<br>> > > +; Function Attrs: nounwind<br>> > > +declare noalias i8* @malloc(i64)<br>> > ><br>> > ><br>> > > _______________________________________________<br>> > > llvm-commits mailing list<br>> > > <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>> > > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>> > ><br>> > ><br>> ><br>> > --<br>> > Hal Finkel<br>> > Assistant Computational Scientist<br>> > Leadership Computing Facility<br>> > Argonne National Laboratory<br>> ><br>> ><br>> > _______________________________________________<br>> > llvm-commits mailing list<br>> > <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>> ><br>> ><br>><br>> --<br>> Hal Finkel<br>> Assistant Computational Scientist<br>> Leadership Computing Facility<br>> Argonne National Laboratory<br>> _______________________________________________<br>> llvm-commits mailing list<br>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>><br><br>--<br>Hal Finkel<br>Assistant Computational Scientist<br>Leadership Computing Facility<br>Argonne National Laboratory<o:p></o:p></p></div></div></div><p class=MsoNormal><o:p> </o:p></p></div></div></div></body></html>