[patch/rfc] disable IsSub subregister assert. pr18663

Hal Finkel hfinkel at anl.gov
Thu Jul 31 06:30:30 PDT 2014


----- Original Message -----
> From: "Hal Finkel" <hfinkel at anl.gov>
> To: "will schmidt" <will_schmidt at vnet.ibm.com>
> Cc: llvm-commits at cs.uiuc.edu
> Sent: Thursday, July 31, 2014 7:53:57 AM
> Subject: Re: [patch/rfc] disable IsSub subregister assert.  pr18663
> 
> ----- Original Message -----
> > From: "Will Schmidt" <will_schmidt at vnet.ibm.com>
> > To: llvm-commits at cs.uiuc.edu
> > Cc: "Hal Finkel" <hfinkel at anl.gov>
> > Sent: Wednesday, July 30, 2014 5:09:38 PM
> > Subject: [patch/rfc] disable IsSub subregister assert.  pr18663
> > 
> > 
> > This is a follow-up to the activity in the bug at
> > http://llvm.org/bugs/show_bug.cgi?id=18663 .  The underlying issue
> > has
> > to do with how the KILL pseudo-instruction is handled.  I defer to
> > Hal/Jakob/Uli for additional details and background.
> > 
> > This will disable the (bad?) assert,

Also, just to provide everyone else with some context, this assert was not bad when it was written. At that time, we only generated KILL pseudo instructions around subregister copies. This logic, unfortunately, had its own problems. In r199797, the relevant logic in MachineCopyPropagation was replaced to generate KILLs for other kinds of copies too. This change in semantics broke this now-problematic assumption in AggressiveAntiDepBreaker. The AggressiveAntiDepBreaker really needs a proper cleanup to deal with the change, but removing the assert (which just allows the function to return false) is a safe conservative behavior, and should do for the time being.

 -Hal

> add an associated fixme
> > comment,
> > and add a pair of tests.
> > 
> > The code change and the pr18663-2.ll test are copied from the
> > referenced
> > bug.  That test does not immediately fail in my environment, but I
> > have
> > added the pr18663.ll test which does.
> 
> Okay. The problem with test cases for this bug is that they're very
> fragile.
> 
> > 
> > Tested on assorted PPC64* boxes, and x86_64.
> > 
> > OK to commit?
> 
> Yes, LGTM (there are a few comments in the test case inline below).
> Thanks for working on this.
> 
>  -Hal
> 
> P.S. Please send patches to the mailing list as attachments, not
> inline text.
> 
> > 
> > Thanks,
> > -Will
> > 
> > ---
> > 
> > diff --git a/lib/CodeGen/AggressiveAntiDepBreaker.cpp
> > b/lib/CodeGen/AggressiveAntiDepBreaker.cpp
> > index 0f38c64..b8f25a4 100644
> > --- a/lib/CodeGen/AggressiveAntiDepBreaker.cpp
> > +++ b/lib/CodeGen/AggressiveAntiDepBreaker.cpp
> > @@ -582,7 +582,9 @@ bool
> > AggressiveAntiDepBreaker::FindSuitableFreeRegisters(
> >      unsigned Reg = Regs[i];
> >      if (Reg == SuperReg) continue;
> >      bool IsSub = TRI->isSubRegister(SuperReg, Reg);
> > -    assert(IsSub && "Expecting group subregister");
> > +    // FIXME: remove this once PR18663 has been properly fixed.
> > For
> > now,
> > +    // return a conservative answer:
> > +    //assert(IsSub && "Expecting group subregister");
> >      if (!IsSub)
> >        return false;
> >    }
> > diff --git a/test/CodeGen/PowerPC/pr18663-2.ll
> > b/test/CodeGen/PowerPC/pr18663-2.ll
> > new file mode 100644
> > index 0000000..3d47482
> > --- /dev/null
> > +++ b/test/CodeGen/PowerPC/pr18663-2.ll
> > @@ -0,0 +1,157 @@
> > +; ModuleID = 'pr18663-2.bc'
> 
> We don't need this module line.
> 
> > +; RUN: llc < %s -march=ppc64 -mtriple=powerpc64-unknown-linux-gnu
> > +; RUN: llc < %s -march=ppc64le
> > -mtriple=powerpc64le-unknown-linux-gnu
> > +
> > +%"class.std::__1::locale::id.1580.4307.4610.8491" = type {
> > %"struct.std::__1::once_flag.1579.4306.4609.8490", i32 }
> > +%"struct.std::__1::once_flag.1579.4306.4609.8490" = type { i64 }
> > +%"class.Foam::IOerror.1581.4308.4611.8505" = type {
> > %"class.Foam::error.1535.4262.4565.8504",
> > %"class.Foam::string.1530.4257.4560.8499", i32, i32 }
> > +%"class.Foam::error.1535.4262.4565.8504" = type {
> > %"class.std::exception.1523.4250.4553.8492", [36 x i8],
> > %"class.Foam::string.1530.4257.4560.8499",
> > %"class.Foam::string.1530.4257.4560.8499", i32, i8, i8,
> > %"class.Foam::OStringStream.1534.4261.4564.8503"* }
> > +%"class.std::exception.1523.4250.4553.8492" = type { i32 (...)** }
> > +%"class.Foam::OStringStream.1534.4261.4564.8503" = type {
> > %"class.Foam::OSstream.1533.4260.4563.8502" }
> > +%"class.Foam::OSstream.1533.4260.4563.8502" = type { [50 x i8],
> > %"class.Foam::fileName.1531.4258.4561.8500",
> > %"class.std::__1::basic_ostream.1532.4259.4562.8501"* }
> > +%"class.Foam::fileName.1531.4258.4561.8500" = type {
> > %"class.Foam::string.1530.4257.4560.8499" }
> > +%"class.std::__1::basic_ostream.1532.4259.4562.8501" = type { i32
> > (...)**, [148 x i8] }
> > +%"class.Foam::string.1530.4257.4560.8499" = type {
> > %"class.std::__1::basic_string.1529.4256.4559.8498" }
> > +%"class.std::__1::basic_string.1529.4256.4559.8498" = type {
> > %"class.std::__1::__compressed_pair.1528.4255.4558.8497" }
> > +%"class.std::__1::__compressed_pair.1528.4255.4558.8497" = type {
> > %"class.std::__1::__libcpp_compressed_pair_imp.1527.4254.4557.8496"
> > }
> > +%"class.std::__1::__libcpp_compressed_pair_imp.1527.4254.4557.8496"
> > = type { %"struct.std::__1::basic_string<char,
> > std::__1::char_traits<char>, std::__1::allocator<char>
> > >::__rep.1526.4253.4556.8495" }
> > +%"struct.std::__1::basic_string<char, std::__1::char_traits<char>,
> > std::__1::allocator<char> >::__rep.1526.4253.4556.8495" = type {
> > %union.anon.1525.4252.4555.8494 }
> > +%union.anon.1525.4252.4555.8494 = type {
> > %"struct.std::__1::basic_string<char, std::__1::char_traits<char>,
> > std::__1::allocator<char> >::__long.1524.4251.4554.8493" }
> > +%"struct.std::__1::basic_string<char, std::__1::char_traits<char>,
> > std::__1::allocator<char> >::__long.1524.4251.4554.8493" = type {
> > i64, i64, i8* }
> > +
> > + at .str3 = external unnamed_addr constant [16 x i8], align 1
> > + at _ZNSt3__15ctypeIcE2idE = external global
> > %"class.std::__1::locale::id.1580.4307.4610.8491"
> > + at _ZN4Foam12FatalIOErrorE = external global
> > %"class.Foam::IOerror.1581.4308.4611.8505"
> > + at .str204 = external unnamed_addr constant [18 x i8], align 1
> > + at .str205 = external unnamed_addr constant [34 x i8], align 1
> > +
> > +declare void @_ZN4FoamlsERNS_7OstreamEPKc() #0
> > +
> > +declare i32 @__gxx_personality_v0(...)
> > +
> > +declare void @_ZNKSt3__18ios_base6getlocEv() #0
> > +
> > +declare void @_ZNKSt3__16locale9use_facetERNS0_2idE() #0
> > +
> > +; Function Attrs: noreturn
> > +declare void
> > @_ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv()
> > #1 align 2
> > +
> > +declare void @_ZN4Foam6string6expandEb() #0
> > +
> > +declare void
> > @_ZN4Foam8IFstreamC1ERKNS_8fileNameENS_8IOstream12streamFormatENS4_13versionNumberE()
> > #0
> > +
> > +declare void @_ZN4Foam7IOerrorclEPKcS2_iRKNS_8IOstreamE() #0
> > +
> > +declare void @_ZN4Foam7IOerror4exitEi() #0
> > +
> > +; Function Attrs: inlinehint
> > +declare void @_ZN4Foam8fileName12stripInvalidEv() #2 align 2
> > +
> > +define void @_ZN4Foam3CSVINS_6VectorIdEEE4readEv() #0 align 2 {
> > +entry:
> > +  invoke void @_ZN4Foam6string6expandEb()
> > +          to label %invoke.cont unwind label %lpad
> > +
> > +invoke.cont:                                      ; preds = %entry
> > +  br i1 undef, label %if.then.i.i.i.i176, label
> > %_ZN4Foam6stringC2ERKS0_.exit.i
> > +
> > +if.then.i.i.i.i176:                               ; preds =
> > %invoke.cont
> > +  invoke void
> > @_ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv()
> > +          to label %.noexc unwind label %lpad
> > +
> > +.noexc:                                           ; preds =
> > %if.then.i.i.i.i176
> > +  unreachable
> > +
> > +_ZN4Foam6stringC2ERKS0_.exit.i:                   ; preds =
> > %invoke.cont
> > +  invoke void @_ZN4Foam8fileName12stripInvalidEv()
> > +          to label %invoke.cont2 unwind label %lpad.i
> > +
> > +lpad.i:                                           ; preds =
> > %_ZN4Foam6stringC2ERKS0_.exit.i
> > +  %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +invoke.cont2:                                     ; preds =
> > %_ZN4Foam6stringC2ERKS0_.exit.i
> > +  invoke void
> > @_ZN4Foam8IFstreamC1ERKNS_8fileNameENS_8IOstream12streamFormatENS4_13versionNumberE()
> > +          to label %invoke.cont4 unwind label %lpad3
> > +
> > +invoke.cont4:                                     ; preds =
> > %invoke.cont2
> > +  br i1 undef, label %for.body, label %if.then
> > +
> > +if.then:                                          ; preds =
> > %invoke.cont4
> > +  invoke void @_ZN4Foam7IOerrorclEPKcS2_iRKNS_8IOstreamE()
> > +          to label %invoke.cont8 unwind label %lpad5
> > +
> > +invoke.cont8:                                     ; preds =
> > %if.then
> > +  invoke void @_ZN4FoamlsERNS_7OstreamEPKc()
> > +          to label %memptr.end.i unwind label %lpad5
> > +
> > +memptr.end.i:                                     ; preds =
> > %invoke.cont8
> > +  invoke void @_ZN4Foam7IOerror4exitEi()
> > +          to label %if.end unwind label %lpad5
> > +
> > +lpad:                                             ; preds =
> > %if.then.i.i.i.i176, %entry
> > +  %1 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +lpad3:                                            ; preds =
> > %invoke.cont2
> > +  %2 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +lpad5:                                            ; preds =
> > %memptr.end.i, %invoke.cont8, %if.then
> > +  %3 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +if.end:                                           ; preds =
> > %memptr.end.i
> > +  br i1 undef, label %for.body, label %vector.body
> > +
> > +for.body:                                         ; preds =
> > %if.end,
> > %invoke.cont4
> > +  invoke void @_ZNKSt3__18ios_base6getlocEv()
> > +          to label %.noexc205 unwind label %lpad19
> > +
> > +.noexc205:                                        ; preds =
> > %for.body
> > +  invoke void @_ZNKSt3__16locale9use_facetERNS0_2idE()
> > +          to label %invoke.cont.i.i.i unwind label %lpad.i.i.i
> > +
> > +invoke.cont.i.i.i:                                ; preds =
> > %.noexc205
> > +  unreachable
> > +
> > +lpad.i.i.i:                                       ; preds =
> > %.noexc205
> > +  %4 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +lpad19:                                           ; preds =
> > %for.body
> > +  %5 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)*
> > @__gxx_personality_v0 to i8*)
> > +          cleanup
> > +  br label %ehcleanup142
> > +
> > +vector.body:                                      ; preds =
> > %vector.body, %if.end
> > +  %vec.phi = phi <8 x i32> [ %10, %vector.body ], [ undef, %if.end
> > ]
> > +  %vec.phi1302 = phi <8 x i32> [ %11, %vector.body ], [ undef,
> > %if.end ]
> > +  %vec.phi1303 = phi <8 x i32> [ %12, %vector.body ], [ undef,
> > %if.end ]
> > +  %vec.phi1304 = phi <8 x i32> [ %13, %vector.body ], [ undef,
> > %if.end ]
> > +  %6 = icmp sgt <8 x i32> undef, %vec.phi
> > +  %7 = icmp sgt <8 x i32> undef, %vec.phi1302
> > +  %8 = icmp sgt <8 x i32> undef, %vec.phi1303
> > +  %9 = icmp sgt <8 x i32> undef, %vec.phi1304
> > +  %10 = select <8 x i1> %6, <8 x i32> undef, <8 x i32> %vec.phi
> > +  %11 = select <8 x i1> %7, <8 x i32> undef, <8 x i32>
> > %vec.phi1302
> > +  %12 = select <8 x i1> %8, <8 x i32> undef, <8 x i32>
> > %vec.phi1303
> > +  %13 = select <8 x i1> %9, <8 x i32> undef, <8 x i32>
> > %vec.phi1304
> > +  br label %vector.body
> > +
> > +ehcleanup142:                                     ; preds =
> > %lpad19,
> > %lpad.i.i.i, %lpad5, %lpad3, %lpad, %lpad.i
> > +  resume { i8*, i32 } undef
> > +}
> > +
> > +attributes #0 = { "less-precise-fpmad"="false"
> > "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
> > "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> > "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> > "use-soft-float"="false" }
> > +attributes #1 = { noreturn "less-precise-fpmad"="false"
> > "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
> > "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> > "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> > "use-soft-float"="false" }
> > +attributes #2 = { inlinehint "less-precise-fpmad"="false"
> > "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
> > "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> > "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> > "use-soft-float"="false" }
> > +
> > +!llvm.ident = !{!0}
> > +
> > +!0 = metadata !{metadata !"clang version 3.5 (trunk)"}
> > diff --git a/test/CodeGen/PowerPC/pr18663.ll
> > b/test/CodeGen/PowerPC/pr18663.ll
> > new file mode 100644
> > index 0000000..f040529
> > --- /dev/null
> > +++ b/test/CodeGen/PowerPC/pr18663.ll
> > @@ -0,0 +1,309 @@
> > +; ModuleID = 'pr18663.bc'
> > +; RUN: llc < %s -march=ppc64 -mtriple=powerpc64-unknown-linux-gnu
> > +; RUN: llc < %s -march=ppc64le
> > -mtriple=powerpc64le-unknown-linux-gnu
> > +
> > +%class.Point.1 = type { %class.Tensor.0 }
> > +%class.Tensor.0 = type { [3 x double] }
> > +%class.TriaObjectAccessor.57 = type { %class.TriaAccessor.56 }
> > +%class.TriaAccessor.56 = type { i32, i32, %class.Triangulation.55*
> > }
> > +%class.Triangulation.55 = type { %class.Subscriptor,
> > %"class.std::vector.46", %"class.std::vector",
> > %"class.std::vector.3.8", [255 x %class.Boundary.50*], i32,
> > %struct.TriaNumberCache.54 }
> > +%class.Subscriptor = type { i32 (...)**, i32,
> > %"class.std::type_info.2"* }
> > +%"class.std::type_info.2" = type { i32 (...)**, i8* }
> > +%"class.std::vector.46" = type { %"struct.std::_Vector_base.45" }
> > +%"struct.std::_Vector_base.45" = type {
> > %"struct.std::_Vector_base<TriangulationLevel<3> *,
> > std::allocator<TriangulationLevel<3> *> >::_Vector_impl.44" }
> > +%"struct.std::_Vector_base<TriangulationLevel<3> *,
> > std::allocator<TriangulationLevel<3> *> >::_Vector_impl.44" = type
> > {
> > %class.TriangulationLevel.43**, %class.TriangulationLevel.43**,
> > %class.TriangulationLevel.43** }
> > +%class.TriangulationLevel.43 = type {
> > %class.TriangulationLevel.0.37,
> > %"struct.TriangulationLevel<3>::HexesData.42" }
> > +%class.TriangulationLevel.0.37 = type {
> > %class.TriangulationLevel.1.31,
> > %"struct.TriangulationLevel<2>::QuadsData.36" }
> > +%class.TriangulationLevel.1.31 = type { %class.TriangulationLevel,
> > %"struct.TriangulationLevel<1>::LinesData.30" }
> > +%class.TriangulationLevel = type { %"class.std::vector.3.8",
> > %"class.std::vector.3.8", %"class.std::vector.7.12",
> > %"class.std::vector.12.15" }
> > +%"class.std::vector.7.12" = type { %"struct.std::_Vector_base" }
> > +%"struct.std::_Vector_base" = type {
> > %"struct.std::_Vector_base<std::pair<int, int>,
> > std::allocator<std::pair<int, int> > >::_Vector_impl.10" }
> > +%"struct.std::_Vector_base<std::pair<int, int>,
> > std::allocator<std::pair<int, int> > >::_Vector_impl.10" = type {
> > %"struct.std::pair.9"*, %"struct.std::pair.9"*,
> > %"struct.std::pair.9"* }
> > +%"struct.std::pair.9" = type opaque
> > +%"class.std::vector.12.15" = type {
> > %"struct.std::_Vector_base.13.14" }
> > +%"struct.std::_Vector_base.13.14" = type {
> > %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned
> > int> >::_Vector_impl.13" }
> > +%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned
> > int> >::_Vector_impl.13" = type { i32*, i32*, i32* }
> > +%"struct.TriangulationLevel<1>::LinesData.30" = type {
> > %"class.std::vector.17.20", %"class.std::vector.22.23",
> > %"class.std::vector.3.8", %"class.std::vector.3.8",
> > %"class.std::vector.27.26", %"class.std::vector.32.29" }
> > +%"class.std::vector.17.20" = type {
> > %"struct.std::_Vector_base.18.19" }
> > +%"struct.std::_Vector_base.18.19" = type {
> > %"struct.std::_Vector_base<Line, std::allocator<Line>
> > >::_Vector_impl.18" }
> > +%"struct.std::_Vector_base<Line, std::allocator<Line>
> > >::_Vector_impl.18" = type { %class.Line.17*, %class.Line.17*,
> > %class.Line.17* }
> > +%class.Line.17 = type { [2 x i32] }
> > +%"class.std::vector.22.23" = type {
> > %"struct.std::_Vector_base.23.22" }
> > +%"struct.std::_Vector_base.23.22" = type {
> > %"struct.std::_Vector_base<int, std::allocator<int>
> > >::_Vector_impl.21" }
> > +%"struct.std::_Vector_base<int, std::allocator<int>
> > >::_Vector_impl.21" = type { i32*, i32*, i32* }
> > +%"class.std::vector.27.26" = type {
> > %"struct.std::_Vector_base.28.25" }
> > +%"struct.std::_Vector_base.28.25" = type {
> > %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned
> > char> >::_Vector_impl.24" }
> > +%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned
> > char> >::_Vector_impl.24" = type { i8*, i8*, i8* }
> > +%"class.std::vector.32.29" = type {
> > %"struct.std::_Vector_base.33.28" }
> > +%"struct.std::_Vector_base.33.28" = type {
> > %"struct.std::_Vector_base<void *, std::allocator<void *>
> > >::_Vector_impl.27" }
> > +%"struct.std::_Vector_base<void *, std::allocator<void *>
> > >::_Vector_impl.27" = type { i8**, i8**, i8** }
> > +%"struct.TriangulationLevel<2>::QuadsData.36" = type {
> > %"class.std::vector.37.35", %"class.std::vector.22.23",
> > %"class.std::vector.3.8", %"class.std::vector.3.8",
> > %"class.std::vector.27.26", %"class.std::vector.32.29" }
> > +%"class.std::vector.37.35" = type {
> > %"struct.std::_Vector_base.38.34" }
> > +%"struct.std::_Vector_base.38.34" = type {
> > %"struct.std::_Vector_base<Quad, std::allocator<Quad>
> > >::_Vector_impl.33" }
> > +%"struct.std::_Vector_base<Quad, std::allocator<Quad>
> > >::_Vector_impl.33" = type { %class.Quad.32*, %class.Quad.32*,
> > %class.Quad.32* }
> > +%class.Quad.32 = type { [4 x i32] }
> > +%"struct.TriangulationLevel<3>::HexesData.42" = type {
> > %"class.std::vector.42.41", %"class.std::vector.22.23",
> > %"class.std::vector.3.8", %"class.std::vector.3.8",
> > %"class.std::vector.27.26", %"class.std::vector.32.29",
> > %"class.std::vector.3.8" }
> > +%"class.std::vector.42.41" = type {
> > %"struct.std::_Vector_base.43.40" }
> > +%"struct.std::_Vector_base.43.40" = type {
> > %"struct.std::_Vector_base<Hexahedron, std::allocator<Hexahedron>
> > >::_Vector_impl.39" }
> > +%"struct.std::_Vector_base<Hexahedron, std::allocator<Hexahedron>
> > >::_Vector_impl.39" = type { %class.Hexahedron.38*,
> > %class.Hexahedron.38*, %class.Hexahedron.38* }
> > +%class.Hexahedron.38= type { [6 x i32] }
> > +%"class.std::vector" = type { %"struct.std::_Vector_base.48.48" }
> > +%"struct.std::_Vector_base.48.48" = type {
> > %"struct.std::_Vector_base<Point<3>, std::allocator<Point<3> >
> > >::_Vector_impl.47" }
> > +%"struct.std::_Vector_base<Point<3>, std::allocator<Point<3> >
> > >::_Vector_impl.47" = type { %class.Point.1*, %class.Point.1*,
> > %class.Point.1* }
> > +%"class.std::vector.3.8" = type { %"struct.std::_Bvector_base.7" }
> > +%"struct.std::_Bvector_base.7" = type {
> > %"struct.std::_Bvector_base<std::allocator<bool>
> > >::_Bvector_impl.6"
> > }
> > +%"struct.std::_Bvector_base<std::allocator<bool>
> > >::_Bvector_impl.6"
> > = type { %"struct.std::_Bit_iterator.5",
> > %"struct.std::_Bit_iterator.5", i64* }
> > +%"struct.std::_Bit_iterator.5" = type {
> > %"struct.std::_Bit_iterator_base.base.4", [4 x i8] }
> > +%"struct.std::_Bit_iterator_base.base.4" = type <{ i64*, i32 }>
> > +%class.Boundary.50 = type opaque
> > +%struct.TriaNumberCache.54 = type { %struct.TriaNumberCache.52.52,
> > i32, %"class.std::vector.12.15", i32, %"class.std::vector.12.15" }
> > +%struct.TriaNumberCache.52.52 = type {
> > %struct.TriaNumberCache.53.51, i32, %"class.std::vector.12.15",
> > i32,
> > %"class.std::vector.12.15" }
> > +%struct.TriaNumberCache.53.51 = type { i32,
> > %"class.std::vector.12.15", i32, %"class.std::vector.12.15" }
> > +
> > +define void
> > @_ZNK18TriaObjectAccessorILi3ELi3EE10barycenterEv(%class.Point.1*
> > noalias nocapture sret %agg.result, %class.TriaObjectAccessor.57*
> > %this) #0 align 2 {
> > +entry:
> > +  %0 = load double* null, align 8, !tbaa !1
> > +  %1 = load double* undef, align 8, !tbaa !1
> > +  %call18 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 6)
> > +  %2 = load double* undef, align 8, !tbaa !1
> > +  %call21 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 7)
> > +  %3 = load double* undef, align 8, !tbaa !1
> > +  %call33 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 3)
> > +  %4 = load double* null, align 8, !tbaa !1
> > +  %5 = load double* undef, align 8, !tbaa !1
> > +  %call45 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 7)
> > +  %6 = load double* undef, align 8, !tbaa !1
> > +  %call48 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 0)
> > +  %7 = load double* undef, align 8, !tbaa !1
> > +  %call66 = tail call dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
> > %this, i32 zeroext 6)
> > +  %8 = load double* undef, align 8, !tbaa !1
> > +  %mul334 = fmul double undef, 2.000000e+00
> > +  %mul579 = fmul double %2, %5
> > +  %mul597 = fmul double undef, %mul579
> > +  %mul679 = fmul double %2, %8
> > +  %mul1307 = fmul double undef, %1
> > +  %mul2092 = fmul double undef, %4
> > +  %mul2679 = fmul double undef, undef
> > +  %mul2931 = fmul double undef, %3
> > +  %mul3094 = fmul double undef, %3
> > +  %mul3096 = fmul double %mul3094, %8
> > +  %sub3097 = fsub double 0.000000e+00, %mul3096
> > +  %add3105 = fadd double undef, %sub3097
> > +  %add3113 = fadd double 0.000000e+00, %add3105
> > +  %sub3121 = fsub double %add3113, undef
> > +  %sub3129 = fsub double %sub3121, undef
> > +  %add3137 = fadd double undef, %sub3129
> > +  %add3145 = fadd double undef, %add3137
> > +  %sub3153 = fsub double %add3145, undef
> > +  %sub3162 = fsub double %sub3153, 0.000000e+00
> > +  %add3171 = fadd double undef, %sub3162
> > +  %add3180 = fadd double undef, %add3171
> > +  %add3189 = fadd double 0.000000e+00, %add3180
> > +  %mul3197 = fmul double %4, %mul2679
> > +  %sub3198 = fsub double %add3189, %mul3197
> > +  %sub3207 = fsub double %sub3198, 0.000000e+00
> > +  %mul3212 = fmul double %2, undef
> > +  %mul3214 = fmul double %mul3212, undef
> > +  %sub3215 = fsub double %sub3207, %mul3214
> > +  %mul3222 = fmul double %5, 0.000000e+00
> > +  %sub3223 = fsub double %sub3215, %mul3222
> > +  %mul3228 = fmul double %2, undef
> > +  %mul3230 = fmul double %3, %mul3228
> > +  %add3231 = fadd double %mul3230, %sub3223
> > +  %mul3236 = fmul double undef, undef
> > +  %mul3238 = fmul double %mul3236, %8
> > +  %add3239 = fadd double %mul3238, %add3231
> > +  %mul3244 = fmul double %mul1307, %3
> > +  %mul3246 = fmul double %mul3244, %7
> > +  %sub3247 = fsub double %add3239, %mul3246
> > +  %mul3252 = fmul double undef, undef
> > +  %mul3254 = fmul double %mul3252, %7
> > +  %add3255 = fadd double %mul3254, %sub3247
> > +  %sub3263 = fsub double %add3255, undef
> > +  %add3271 = fadd double 0.000000e+00, %sub3263
> > +  %sub3279 = fsub double %add3271, undef
> > +  %sub3287 = fsub double %sub3279, undef
> > +  %mul3292 = fmul double %mul1307, %5
> > +  %mul3294 = fmul double %mul3292, undef
> > +  %add3295 = fadd double %mul3294, %sub3287
> > +  %add3303 = fadd double undef, %add3295
> > +  %add3311 = fadd double 0.000000e+00, %add3303
> > +  %mul3318 = fmul double undef, %7
> > +  %sub3319 = fsub double %add3311, %mul3318
> > +  %mul3326 = fmul double %4, %mul3228
> > +  %sub3327 = fsub double %sub3319, %mul3326
> > +  %mul3334 = fmul double undef, %8
> > +  %sub3335 = fsub double %sub3327, %mul3334
> > +  %add3343 = fadd double undef, %sub3335
> > +  %mul3350 = fmul double %mul3212, %7
> > +  %add3351 = fadd double %mul3350, %add3343
> > +  %mul3358 = fmul double %mul2092, undef
> > +  %sub3359 = fsub double %add3351, %mul3358
> > +  %mul3362 = fmul double undef, %1
> > +  %mul3366 = fmul double 0.000000e+00, %8
> > +  %add3367 = fadd double %mul3366, %sub3359
> > +  %mul3372 = fmul double %mul3362, %5
> > +  %sub3375 = fsub double %add3367, undef
> > +  %add3383 = fadd double undef, %sub3375
> > +  %mul3389 = fmul double %2, 0.000000e+00
> > +  %mul3391 = fmul double %4, %mul3389
> > +  %sub3392 = fsub double %add3383, %mul3391
> > +  %mul3396 = fmul double undef, 0.000000e+00
> > +  %mul3400 = fmul double undef, %7
> > +  %sub3401 = fsub double %sub3392, %mul3400
> > +  %mul3407 = fmul double %mul3396, %4
> > +  %mul3409 = fmul double %mul3407, %8
> > +  %add3410 = fadd double %mul3409, %sub3401
> > +  %add3419 = fadd double undef, %add3410
> > +  %mul3423 = fmul double undef, %mul334
> > +  %add3428 = fadd double undef, %add3419
> > +  %add3437 = fadd double undef, %add3428
> > +  %mul3443 = fmul double %mul3423, %3
> > +  %mul3445 = fmul double %mul3443, %8
> > +  %sub3446 = fsub double %add3437, %mul3445
> > +  %mul3453 = fmul double %mul3372, undef
> > +  %add3454 = fadd double %mul3453, %sub3446
> > +  %add3462 = fadd double 0.000000e+00, %add3454
> > +  %mul3467 = fmul double %mul3362, %3
> > +  %mul3469 = fmul double %mul3467, %8
> > +  %sub3470 = fsub double %add3462, %mul3469
> > +  %add3478 = fadd double 0.000000e+00, %sub3470
> > +  %sub3486 = fsub double %add3478, undef
> > +  %mul3490 = fmul double %mul334, 0.000000e+00
> > +  %mul3492 = fmul double %2, %mul3490
> > +  %mul3494 = fmul double %mul3492, undef
> > +  %sub3495 = fsub double %sub3486, %mul3494
> > +  %sub3503 = fsub double %sub3495, undef
> > +  %sub3512 = fsub double %sub3503, undef
> > +  %add3520 = fadd double undef, %sub3512
> > +  %sub3528 = fsub double %add3520, undef
> > +  %add3537 = fadd double undef, %sub3528
> > +  %add3545 = fadd double 0.000000e+00, %add3537
> > +  %sub3553 = fsub double %add3545, undef
> > +  %add3561 = fadd double undef, %sub3553
> > +  %sub3569 = fsub double %add3561, undef
> > +  %mul3574 = fmul double undef, undef
> > +  %mul3576 = fmul double %mul3574, %7
> > +  %add3577 = fadd double %mul3576, %sub3569
> > +  %sub3585 = fsub double %add3577, undef
> > +  %mul3592 = fmul double %4, undef
> > +  %sub3593 = fsub double %sub3585, %mul3592
> > +  %mul3598 = fmul double %2, undef
> > +  %mul3600 = fmul double %mul3598, %7
> > +  %add3601 = fadd double %mul3600, %sub3593
> > +  %mul3608 = fmul double %mul3598, undef
> > +  %sub3609 = fsub double %add3601, %mul3608
> > +  %sub3618 = fsub double %sub3609, undef
> > +  %add3627 = fadd double undef, %sub3618
> > +  %add3635 = fadd double undef, %add3627
> > +  %mul3638 = fmul double undef, %2
> > +  %mul3640 = fmul double %mul3638, %5
> > +  %mul3642 = fmul double %mul3640, %7
> > +  %sub3643 = fsub double %add3635, %mul3642
> > +  %mul3648 = fmul double %1, undef
> > +  %mul3650 = fmul double %mul3648, %8
> > +  %sub3651 = fsub double %sub3643, %mul3650
> > +  %mul3656 = fmul double %mul3638, %4
> > +  %mul3658 = fmul double %mul3656, %8
> > +  %add3659 = fadd double %mul3658, %sub3651
> > +  %mul3666 = fmul double %5, 0.000000e+00
> > +  %add3667 = fadd double %mul3666, %add3659
> > +  %sub3675 = fsub double %add3667, undef
> > +  %mul3680 = fmul double %mul3638, %3
> > +  %mul3682 = fmul double %mul3680, %8
> > +  %sub3683 = fsub double %sub3675, %mul3682
> > +  %add3692 = fadd double 0.000000e+00, %sub3683
> > +  %mul3696 = fmul double undef, undef
> > +  %mul3698 = fmul double %mul3696, %4
> > +  %mul3700 = fmul double %mul3698, %8
> > +  %add3701 = fadd double %mul3700, %add3692
> > +  %sub3710 = fsub double %add3701, undef
> > +  %mul3716 = fmul double undef, %3
> > +  %mul3718 = fmul double %mul3716, %8
> > +  %sub3719 = fsub double %sub3710, %mul3718
> > +  %add3727 = fadd double undef, %sub3719
> > +  %mul3734 = fmul double %mul3574, %8
> > +  %add3735 = fadd double %mul3734, %add3727
> > +  %sub3743 = fsub double %add3735, 0.000000e+00
> > +  %add3751 = fadd double 0.000000e+00, %sub3743
> > +  %mul3758 = fmul double %6, 0.000000e+00
> > +  %sub3759 = fsub double %add3751, %mul3758
> > +  %mul3764 = fmul double undef, %mul2931
> > +  %mul3766 = fmul double %mul3764, undef
> > +  %sub3767 = fsub double %sub3759, %mul3766
> > +  %add3775 = fadd double 0.000000e+00, %sub3767
> > +  %add3783 = fadd double undef, %add3775
> > +  %sub3791 = fsub double %add3783, 0.000000e+00
> > +  %add3799 = fadd double undef, %sub3791
> > +  %sub3807 = fsub double %add3799, undef
> > +  %mul3814 = fmul double 0.000000e+00, undef
> > +  %add3815 = fadd double %mul3814, %sub3807
> > +  %mul3822 = fmul double %mul597, undef
> > +  %sub3823 = fsub double %add3815, %mul3822
> > +  %add3831 = fadd double undef, %sub3823
> > +  %mul3836 = fmul double undef, %mul679
> > +  %mul3838 = fmul double %6, %mul3836
> > +  %sub3839 = fsub double %add3831, %mul3838
> > +  %add3847 = fadd double undef, %sub3839
> > +  %add3855 = fadd double undef, %add3847
> > +  %mul3858 = fmul double undef, %8
> > +  %mul3860 = fmul double undef, %mul3858
> > +  %mul3862 = fmul double %6, %mul3860
> > +  %sub3863 = fsub double %add3855, %mul3862
> > +  %add3872 = fadd double undef, %sub3863
> > +  %sub3880 = fsub double %add3872, undef
> > +  %sub3889 = fsub double %sub3880, undef
> > +  %sub3898 = fsub double %sub3889, undef
> > +  %add3907 = fadd double undef, %sub3898
> > +  %sub3915 = fsub double %add3907, 0.000000e+00
> > +  %add3923 = fadd double undef, %sub3915
> > +  %mul3930 = fmul double %3, undef
> > +  %add3931 = fadd double %mul3930, %add3923
> > +  %add3940 = fadd double undef, %add3931
> > +  %sub3949 = fsub double %add3940, undef
> > +  %mul3952 = fmul double %2, %3
> > +  %sub3957 = fsub double %sub3949, undef
> > +  %sub3966 = fsub double %sub3957, undef
> > +  %add3975 = fadd double undef, %sub3966
> > +  %add3983 = fadd double undef, %add3975
> > +  %sub3992 = fsub double %add3983, undef
> > +  %mul3997 = fmul double undef, %mul3952
> > +  %mul3999 = fmul double %mul3997, %8
> > +  %add4000 = fadd double %mul3999, %sub3992
> > +  %sub4008 = fsub double %add4000, undef
> > +  %add4017 = fadd double undef, %sub4008
> > +  %add4026 = fadd double 0.000000e+00, %add4017
> > +  %mul4034 = fmul double %6, undef
> > +  %sub4035 = fsub double %add4026, %mul4034
> > +  %add4043 = fadd double undef, %sub4035
> > +  %sub4051 = fsub double %add4043, 0.000000e+00
> > +  %mul4916 = fmul double 0.000000e+00, %sub4051
> > +  %mul4917 = fmul double %mul4916, 0x3FC5555555555555
> > +  %mul7317 = fmul double 0.000000e+00, %3
> > +  %mul7670 = fmul double %0, %mul7317
> > +  %mul8882 = fmul double %0, 0.000000e+00
> > +  %mul8884 = fmul double undef, %mul8882
> > +  %sub8885 = fsub double 0.000000e+00, %mul8884
> > +  %mul8892 = fmul double %mul7670, undef
> > +  %add8893 = fadd double %mul8892, %sub8885
> > +  %mul8900 = fmul double undef, undef
> > +  %add8901 = fadd double %mul8900, %add8893
> > +  %mul9767 = fmul double 0.000000e+00, %add8901
> > +  %mul9768 = fmul double %mul9767, 0x3FC5555555555555
> > +  store double %mul4917, double* undef, align 8, !tbaa !1
> > +  store double %mul9768, double* undef, align 8, !tbaa !1
> > +  ret void
> > +}
> > +
> > +declare dereferenceable(24) %class.Point.1*
> > @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*,
> > i32 zeroext) #0
> > +
> > +attributes #0 = { "less-precise-fpmad"="false"
> > "no-frame-pointer-elim"="false" "no-infs-fp-math"="false"
> > "no-nans-fp-math"="false" "no-realign-stack"
> > "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> > "use-soft-float"="false" }
> 
> We don't need these attributes, I imagine, please remove them.
> 
> > +
> > +!llvm.ident = !{!0}
> > +
> > +!0 = metadata !{metadata !"clang version 3.5.0 (trunk 214084)"}
> > +!1 = metadata !{metadata !2, metadata !2, i64 0}
> > +!2 = metadata !{metadata !"double", metadata !3, i64 0}
> > +!3 = metadata !{metadata !"omnipotent char", metadata !4, i64 0}
> > +!4 = metadata !{metadata !"Simple C/C++ TBAA"}
> > +
> 
> If the test still fails if the TBAA metadata is removed, then remove
> the metadata too.
> 
>  -Hal
> 
> > 
> > 
> > 
> 
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list