[llvm] r214429 - Disable IsSub subregister assert. pr18663.

Bill Wendling isanbard at gmail.com
Sun Aug 3 21:31:09 PDT 2014


Done. Thanks!

-bw

On Jul 31, 2014, at 2:28 PM, Hal Finkel <hfinkel at anl.gov> wrote:

> Bill,
> 
> I'd like this pulled into the release branch. I'm not sure if the antidependency breaking falls under Andy's or Jakob's ownership domain.
> 
> Thanks again,
> Hal
> 
> ----- Original Message -----
>> From: "Will Schmidt" <will_schmidt at vnet.ibm.com>
>> To: llvm-commits at cs.uiuc.edu
>> Sent: Thursday, July 31, 2014 2:50:54 PM
>> Subject: [llvm] r214429 - Disable IsSub subregister assert. pr18663.
>> 
>> Author: willschm
>> Date: Thu Jul 31 14:50:53 2014
>> New Revision: 214429
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=214429&view=rev
>> Log:
>> 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, 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.
>> 
>> (Comment from Hal)
>> 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.
>> 
>> 
>> 
>> 
>> 
>> Added:
>>    llvm/trunk/test/CodeGen/PowerPC/pr18663-2.ll
>>    llvm/trunk/test/CodeGen/PowerPC/pr18663.ll
>> Modified:
>>    llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp
>> 
>> Modified: llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp?rev=214429&r1=214428&r2=214429&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AggressiveAntiDepBreaker.cpp Thu Jul 31
>> 14:50:53 2014
>> @@ -582,7 +582,9 @@ bool AggressiveAntiDepBreaker::FindSuita
>>     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;
>>   }
>> 
>> Added: llvm/trunk/test/CodeGen/PowerPC/pr18663-2.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/pr18663-2.ll?rev=214429&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/PowerPC/pr18663-2.ll (added)
>> +++ llvm/trunk/test/CodeGen/PowerPC/pr18663-2.ll Thu Jul 31 14:50:53
>> 2014
>> @@ -0,0 +1,153 @@
>> +; 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" }
>> +
>> 
>> Added: llvm/trunk/test/CodeGen/PowerPC/pr18663.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/pr18663.ll?rev=214429&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/PowerPC/pr18663.ll (added)
>> +++ llvm/trunk/test/CodeGen/PowerPC/pr18663.ll Thu Jul 31 14:50:53
>> 2014
>> @@ -0,0 +1,298 @@
>> +; 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
>> +  %1 = load double* undef, align 8
>> +  %call18 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 6)
>> +  %2 = load double* undef, align 8
>> +  %call21 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 7)
>> +  %3 = load double* undef, align 8
>> +  %call33 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 3)
>> +  %4 = load double* null, align 8
>> +  %5 = load double* undef, align 8
>> +  %call45 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 7)
>> +  %6 = load double* undef, align 8
>> +  %call48 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 0)
>> +  %7 = load double* undef, align 8
>> +  %call66 = tail call dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*
>> %this, i32 zeroext 6)
>> +  %8 = load double* undef, align 8
>> +  %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
>> +  store double %mul9768, double* undef, align 8
>> +  ret void
>> +}
>> +
>> +declare dereferenceable(24) %class.Point.1*
>> @_ZNK18TriaObjectAccessorILi3ELi3EE6vertexEj(%class.TriaObjectAccessor.57*,
>> i32 zeroext) #0
>> +
>> 
>> 
>> _______________________________________________
>> 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