Skip to content

Instantly share code, notes, and snippets.

@pcwalton
Created August 8, 2016 22:47
Show Gist options
  • Save pcwalton/3dbfe14ea18a70bd96f7c74e27696663 to your computer and use it in GitHub Desktop.
Save pcwalton/3dbfe14ea18a70bd96f7c74e27696663 to your computer and use it in GitHub Desktop.
; ModuleID = 'out-reduced.bc'
source_filename = "webrender.cgu-0.rs"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin"
%str_slice = type { i8*, i64 }
%"5.alloc::raw_vec::RawVec<tiling::PackedLayer>" = type { %"2.std::ptr::Unique<tiling::PackedLayer>", i64 }
%"2.std::ptr::Unique<tiling::PackedLayer>" = type { %"2.core::nonzero::NonZero<*const tiling::PackedLayer>", %"2.std::marker::PhantomData<tiling::PackedLayer>" }
%"2.core::nonzero::NonZero<*const tiling::PackedLayer>" = type { %"tiling::PackedLayer"* }
%"tiling::PackedLayer" = type { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>", %"23.euclid::Rect<internal_types::DevicePixel>", [4 x %"23.euclid::Point4D<f32>"] }
%"23.euclid::Matrix4D<f32>" = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%"23.euclid::Rect<internal_types::DevicePixel>" = type { %"23.euclid::Point2D<internal_types::DevicePixel>", %"23.euclid::Size2D<internal_types::DevicePixel>" }
%"23.euclid::Point2D<internal_types::DevicePixel>" = type { %"internal_types::DevicePixel", %"internal_types::DevicePixel" }
%"internal_types::DevicePixel" = type { i32 }
%"23.euclid::Size2D<internal_types::DevicePixel>" = type { %"internal_types::DevicePixel", %"internal_types::DevicePixel" }
%"23.euclid::Point4D<f32>" = type { float, float, float, float }
%"2.std::marker::PhantomData<tiling::PackedLayer>" = type {}
%"5.alloc::raw_vec::RawVec<std::vec::Vec<tiling::PackedLayer>>" = type { %"2.std::ptr::Unique<std::vec::Vec<tiling::PackedLayer>>", i64 }
%"2.std::ptr::Unique<std::vec::Vec<tiling::PackedLayer>>" = type { %"2.core::nonzero::NonZero<*const std::vec::Vec<tiling::PackedLayer>>", %"2.std::marker::PhantomData<std::vec::Vec<tiling::PackedLayer>>" }
%"2.core::nonzero::NonZero<*const std::vec::Vec<tiling::PackedLayer>>" = type { %"3.std::vec::Vec<tiling::PackedLayer>"* }
%"3.std::vec::Vec<tiling::PackedLayer>" = type { %"5.alloc::raw_vec::RawVec<tiling::PackedLayer>", i64 }
%"2.std::marker::PhantomData<std::vec::Vec<tiling::PackedLayer>>" = type {}
%"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>" = type { %"5.alloc::raw_vec::RawVec<std::vec::Vec<tiling::PackedLayer>>", i64 }
%"3.std::vec::Vec<std::option::Option<usize>>" = type { %"5.alloc::raw_vec::RawVec<std::option::Option<usize>>", i64 }
%"5.alloc::raw_vec::RawVec<std::option::Option<usize>>" = type { %"2.std::ptr::Unique<std::option::Option<usize>>", i64 }
%"2.std::ptr::Unique<std::option::Option<usize>>" = type { %"2.core::nonzero::NonZero<*const std::option::Option<usize>>", %"2.std::marker::PhantomData<std::option::Option<usize>>" }
%"2.core::nonzero::NonZero<*const std::option::Option<usize>>" = type { %"2.std::option::Option<usize>"* }
%"2.std::option::Option<usize>" = type { i64, [0 x i64], [1 x i64] }
%"2.std::marker::PhantomData<std::option::Option<usize>>" = type {}
%"3.std::vec::Vec<tiling::StackingContext>" = type { %"5.alloc::raw_vec::RawVec<tiling::StackingContext>", i64 }
%"5.alloc::raw_vec::RawVec<tiling::StackingContext>" = type { %"2.std::ptr::Unique<tiling::StackingContext>", i64 }
%"2.std::ptr::Unique<tiling::StackingContext>" = type { %"2.core::nonzero::NonZero<*const tiling::StackingContext>", %"2.std::marker::PhantomData<tiling::StackingContext>" }
%"2.core::nonzero::NonZero<*const tiling::StackingContext>" = type { %"tiling::StackingContext"* }
%"tiling::StackingContext" = type { %"36.webrender_traits::PipelineId", %"23.euclid::Matrix4D<f32>", %"23.euclid::Rect<f32>", %"23.euclid::Point2D<f32>", %"3.std::vec::Vec<tiling::StackingContextItem>", %"36.webrender_traits::ScrollLayerId", %"23.euclid::Matrix4D<f32>", %"2.std::option::Option<tiling::TransformedRect>", i8, %"3.std::vec::Vec<internal_types::CompositionOp>", %"23.euclid::Rect<f32>", %"2.std::option::Option<euclid::Rect<internal_types::DevicePixel>>", %"2.std::option::Option<tiling::StackingContextIndex>" }
%"36.webrender_traits::PipelineId" = type { i32, i32 }
%"23.euclid::Point2D<f32>" = type { float, float }
%"3.std::vec::Vec<tiling::StackingContextItem>" = type { %"5.alloc::raw_vec::RawVec<tiling::StackingContextItem>", i64 }
%"5.alloc::raw_vec::RawVec<tiling::StackingContextItem>" = type { %"2.std::ptr::Unique<tiling::StackingContextItem>", i64 }
%"2.std::ptr::Unique<tiling::StackingContextItem>" = type { %"2.core::nonzero::NonZero<*const tiling::StackingContextItem>", %"2.std::marker::PhantomData<tiling::StackingContextItem>" }
%"2.core::nonzero::NonZero<*const tiling::StackingContextItem>" = type { %"tiling::StackingContextItem"* }
%"tiling::StackingContextItem" = type { i64, [0 x i64], [1 x i64] }
%"2.std::marker::PhantomData<tiling::StackingContextItem>" = type {}
%"36.webrender_traits::ScrollLayerId" = type { %"36.webrender_traits::PipelineId", %"36.webrender_traits::ScrollLayerInfo" }
%"36.webrender_traits::ScrollLayerInfo" = type { i64, [0 x i64], [1 x i64] }
%"2.std::option::Option<tiling::TransformedRect>" = type { i32, [0 x i32], [25 x i32] }
%"3.std::vec::Vec<internal_types::CompositionOp>" = type { %"5.alloc::raw_vec::RawVec<internal_types::CompositionOp>", i64 }
%"5.alloc::raw_vec::RawVec<internal_types::CompositionOp>" = type { %"2.std::ptr::Unique<internal_types::CompositionOp>", i64 }
%"2.std::ptr::Unique<internal_types::CompositionOp>" = type { %"2.core::nonzero::NonZero<*const internal_types::CompositionOp>", %"2.std::marker::PhantomData<internal_types::CompositionOp>" }
%"2.core::nonzero::NonZero<*const internal_types::CompositionOp>" = type { %"internal_types::CompositionOp"* }
%"internal_types::CompositionOp" = type { i8, [3 x i8], [3 x i32] }
%"2.std::marker::PhantomData<internal_types::CompositionOp>" = type {}
%"23.euclid::Rect<f32>" = type { %"23.euclid::Point2D<f32>", %"23.euclid::Size2D<f32>" }
%"23.euclid::Size2D<f32>" = type { float, float }
%"2.std::option::Option<euclid::Rect<internal_types::DevicePixel>>" = type { i32, [0 x i32], [4 x i32] }
%"2.std::option::Option<tiling::StackingContextIndex>" = type { i64, [0 x i64], [1 x i64] }
%"2.std::marker::PhantomData<tiling::StackingContext>" = type {}
%"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] }
%"8.unwind::libunwind::_Unwind_Context" = type {}
@"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17hd4aed9e7c703f81cE" = external global { %str_slice, %str_slice, i32 }
@panic_bounds_check_loc22490 = external hidden unnamed_addr constant { %str_slice, i32 }, align 8
@panic_bounds_check_loc22492 = external hidden unnamed_addr constant { %str_slice, i32 }, align 8
; Function Attrs: cold noinline uwtable
declare hidden fastcc void @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$6double17hb0941eca5c1c45e1E"(%"5.alloc::raw_vec::RawVec<tiling::PackedLayer>"* nocapture dereferenceable(16)) unnamed_addr #0
; Function Attrs: cold noinline uwtable
declare hidden fastcc void @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$6double17hccbe19d61bbb7c9dE"(%"5.alloc::raw_vec::RawVec<std::vec::Vec<tiling::PackedLayer>>"* nocapture dereferenceable(16)) unnamed_addr #0
; Function Attrs: nounwind uwtable
declare hidden fastcc void @"_ZN44_$LT$euclid..matrix4d..Matrix4D$LT$T$GT$$GT$6invert17h7cb9aead3b48b7fcE"(%"23.euclid::Matrix4D<f32>"* noalias nocapture dereferenceable(64), %"23.euclid::Matrix4D<f32>"* noalias readonly dereferenceable(64)) unnamed_addr #1
; Function Attrs: uwtable
define hidden fastcc void @_ZN9webrender6tiling12AlphaBatcher16add_layer_to_ubo17hf49e06183f51c095E({ i64, i32 }* noalias nocapture dereferenceable(16), %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* nocapture dereferenceable(24), %"3.std::vec::Vec<std::option::Option<usize>>"* nocapture readonly dereferenceable(24), i64, %"3.std::vec::Vec<tiling::StackingContext>"* %.0.0.val, i64 %.0.6.val) unnamed_addr #2 personality i32 (i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
entry-block:
%value.i.sroa.0 = alloca { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }, align 8
%value.i.sroa.8 = alloca [4 x %"23.euclid::Point4D<f32>"], align 8
%tmp44.sroa.0 = alloca { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }, align 8
%tmp45 = alloca %"23.euclid::Matrix4D<f32>", align 8
%tmp46 = alloca %"23.euclid::Matrix4D<f32>", align 8
%tmp48 = alloca [4 x %"23.euclid::Point4D<f32>"], align 8
%.idx21 = getelementptr %"3.std::vec::Vec<std::option::Option<usize>>", %"3.std::vec::Vec<std::option::Option<usize>>"* %2, i64 0, i32 0, i32 0, i32 0, i32 0
%.idx22 = getelementptr %"3.std::vec::Vec<std::option::Option<usize>>", %"3.std::vec::Vec<std::option::Option<usize>>"* %2, i64 0, i32 1
%.idx22.val = load i64, i64* %.idx22, align 8, !alias.scope !0
%4 = icmp ugt i64 %.idx22.val, %3
br i1 %4, label %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hd0c0443db373d30aE.exit", label %panic.i, !prof !3
panic.i: ; preds = %entry-block
tail call void @_ZN4core9panicking18panic_bounds_check17ha883fe1527ce6884E({ %str_slice, i32 }* nonnull @panic_bounds_check_loc22490, i64 %3, i64 %.idx22.val)
unreachable
"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hd0c0443db373d30aE.exit": ; preds = %entry-block
%.idx21.val = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %.idx21, align 8, !alias.scope !4
%5 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %.idx21.val, i64 %3, i32 0
%6 = load i64, i64* %5, align 8, !range !7
%switch = icmp eq i64 %6, 1
br i1 %switch, label %bb3, label %bb2
bb2: ; preds = %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hd0c0443db373d30aE.exit"
%.idx24 = getelementptr %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 1
%.idx24.val = load i64, i64* %.idx24, align 8
%7 = icmp eq i64 %.idx24.val, 0
br i1 %7, label %bb14, label %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h654cb74e8494e2e1E.exit"
bb3: ; preds = %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hd0c0443db373d30aE.exit"
%8 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %.idx21.val, i64 %3, i32 2, i64 0
%9 = load i64, i64* %8, align 8
%.pre44 = getelementptr %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 1
br label %bb4
bb4: ; preds = %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit", %bb3
%.idx23.pre-phi = phi i64* [ %.idx24, %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit" ], [ %.pre44, %bb3 ]
%index_in_ubo.0 = phi i64 [ %.idx25.val, %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit" ], [ %9, %bb3 ]
%.idx23.val = load i64, i64* %.idx23.pre-phi, align 8
%10 = add i64 %.idx23.val, -1
%11 = trunc i64 %index_in_ubo.0 to i32
%12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %0, i64 0, i32 0
store i64 %10, i64* %12, align 8
%13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %0, i64 0, i32 1
store i32 %11, i32* %13, align 8
ret void
"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h654cb74e8494e2e1E.exit": ; preds = %bb2
%14 = getelementptr inbounds %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 0, i32 0, i32 0, i32 0
%15 = load %"3.std::vec::Vec<tiling::PackedLayer>"*, %"3.std::vec::Vec<tiling::PackedLayer>"** %14, align 8, !alias.scope !8, !nonnull !13
%16 = add i64 %.idx24.val, -1
%.idx26 = getelementptr %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %15, i64 %16, i32 1
%.idx26.val = load i64, i64* %.idx26, align 8
%17 = icmp eq i64 %.idx26.val, %.0.6.val
br i1 %17, label %bb14, label %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h033c5ccaeb7a4205E.exit"
bb14: ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h654cb74e8494e2e1E.exit", %bb2
%18 = icmp eq i64 %.idx22.val, 0
br i1 %18, label %bb19, label %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.preheader"
"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.preheader": ; preds = %bb14
br label %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46"
bb19.loopexit: ; preds = %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46"
%.pre = load i64, i64* %.idx24, align 8, !noalias !14
br label %bb19
bb19: ; preds = %bb19.loopexit, %bb14
%19 = phi i64 [ %.pre, %bb19.loopexit ], [ %.idx24.val, %bb14 ]
%.idx.i47 = getelementptr %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 0, i32 1
%.idx.val.i48 = load i64, i64* %.idx.i47, align 8, !noalias !14
%20 = icmp eq i64 %19, %.idx.val.i48
br i1 %20, label %bb4.i50, label %bb26
bb4.i50: ; preds = %bb19
%21 = getelementptr inbounds %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 0
tail call fastcc void @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$6double17hccbe19d61bbb7c9dE"(%"5.alloc::raw_vec::RawVec<std::vec::Vec<tiling::PackedLayer>>"* dereferenceable(16) %21)
%.pre.i51 = load i64, i64* %.idx24, align 8, !noalias !14
br label %bb26
panic.i45: ; preds = %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.bb21_crit_edge"
tail call void @_ZN4core9panicking18panic_bounds_check17ha883fe1527ce6884E({ %str_slice, i32 }* nonnull @panic_bounds_check_loc22492, i64 %22, i64 %.idx31.val.pre)
unreachable
"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46": ; preds = %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.bb21_crit_edge", %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.preheader"
%iter.sroa.0.04049 = phi i64 [ %22, %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.bb21_crit_edge" ], [ 0, %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.preheader" ]
%.idx30.val = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %.idx21, align 8, !alias.scope !17
%22 = add nuw i64 %iter.sroa.0.04049, 1
%23 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %.idx30.val, i64 %iter.sroa.0.04049, i32 0
store i64 0, i64* %23, align 8
%24 = icmp ult i64 %22, %.idx22.val
br i1 %24, label %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.bb21_crit_edge", label %bb19.loopexit
"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46.bb21_crit_edge": ; preds = %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46"
%.idx31.val.pre = load i64, i64* %.idx22, align 8
%25 = icmp ugt i64 %.idx31.val.pre, %22
br i1 %25, label %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit46", label %panic.i45, !prof !3
bb26: ; preds = %bb4.i50, %bb19
%26 = phi i64 [ %.pre.i51, %bb4.i50 ], [ %19, %bb19 ]
%27 = getelementptr inbounds %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 0, i32 0, i32 0, i32 0
%28 = load %"3.std::vec::Vec<tiling::PackedLayer>"*, %"3.std::vec::Vec<tiling::PackedLayer>"** %27, align 8, !alias.scope !20, !noalias !14, !nonnull !13
%29 = getelementptr inbounds %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %28, i64 %26
%tmp16.sroa.0.0..sroa_cast.i = bitcast %"3.std::vec::Vec<tiling::PackedLayer>"* %29 to i8**
store i8* inttoptr (i64 1 to i8*), i8** %tmp16.sroa.0.0..sroa_cast.i, align 8, !noalias !14
%tmp16.sroa.2.0..sroa_idx14.i = getelementptr inbounds %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %28, i64 %26, i32 0, i32 1
%30 = bitcast i64* %tmp16.sroa.2.0..sroa_idx14.i to i8*
call void @llvm.memset.p0i8.i64(i8* %30, i8 0, i64 16, i32 8, i1 false)
%31 = load i64, i64* %.idx24, align 8, !noalias !14
%32 = add i64 %31, 1
store i64 %32, i64* %.idx24, align 8, !noalias !14
%33 = icmp eq i64 %32, 0
br i1 %33, label %bb3.i41, label %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h033c5ccaeb7a4205E.exit"
bb3.i41: ; preds = %bb26
tail call void @_ZN4core9panicking5panic17hbfac80217e56ecbeE({ %str_slice, %str_slice, i32 }* noalias nonnull readonly dereferenceable(40) @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17hd4aed9e7c703f81cE")
unreachable
"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h033c5ccaeb7a4205E.exit": ; preds = %bb26, %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h654cb74e8494e2e1E.exit"
%34 = phi i64 [ %32, %bb26 ], [ %.idx24.val, %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h654cb74e8494e2e1E.exit" ]
%35 = getelementptr inbounds %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>", %"3.std::vec::Vec<std::vec::Vec<tiling::PackedLayer>>"* %1, i64 0, i32 0, i32 0, i32 0, i32 0
%36 = load %"3.std::vec::Vec<tiling::PackedLayer>"*, %"3.std::vec::Vec<tiling::PackedLayer>"** %35, align 8, !alias.scope !23, !nonnull !13
%37 = add i64 %34, -1
%38 = getelementptr inbounds %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %36, i64 %37
%.idx25 = getelementptr %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %36, i64 %37, i32 1
%.idx25.val = load i64, i64* %.idx25, align 8
%.idx20 = getelementptr %"3.std::vec::Vec<tiling::StackingContext>", %"3.std::vec::Vec<tiling::StackingContext>"* %.0.0.val, i64 0, i32 1
%.idx20.val = load i64, i64* %.idx20, align 8, !alias.scope !26
%39 = icmp ugt i64 %.idx20.val, %3
br i1 %39, label %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hba8e960f35a44c5cE.exit", label %panic.i39, !prof !3
panic.i39: ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h033c5ccaeb7a4205E.exit"
tail call void @_ZN4core9panicking18panic_bounds_check17ha883fe1527ce6884E({ %str_slice, i32 }* nonnull @panic_bounds_check_loc22490, i64 %3, i64 %.idx20.val)
unreachable
"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hba8e960f35a44c5cE.exit": ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h033c5ccaeb7a4205E.exit"
%.idx = getelementptr %"3.std::vec::Vec<tiling::StackingContext>", %"3.std::vec::Vec<tiling::StackingContext>"* %.0.0.val, i64 0, i32 0, i32 0, i32 0, i32 0
%.idx.val = load %"tiling::StackingContext"*, %"tiling::StackingContext"** %.idx, align 8, !alias.scope !29
%40 = getelementptr inbounds %"tiling::StackingContext", %"tiling::StackingContext"* %.idx.val, i64 %3, i32 6
%41 = bitcast %"23.euclid::Matrix4D<f32>"* %40 to i8*
%42 = bitcast %"23.euclid::Matrix4D<f32>"* %tmp45 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %42, i8* %41, i64 64, i32 4, i1 false)
call fastcc void @"_ZN44_$LT$euclid..matrix4d..Matrix4D$LT$T$GT$$GT$6invert17h7cb9aead3b48b7fcE"(%"23.euclid::Matrix4D<f32>"* noalias nocapture nonnull dereferenceable(64) %tmp46, %"23.euclid::Matrix4D<f32>"* noalias readonly dereferenceable(64) %40)
%43 = getelementptr inbounds %"tiling::StackingContext", %"tiling::StackingContext"* %.idx.val, i64 %3, i32 7, i32 0
%44 = load i32, i32* %43, align 4, !range !32, !alias.scope !33
%not.switch.i = icmp eq i32 %44, 1
br i1 %not.switch.i, label %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hd135f9f68b8e604fE.exit", label %bb3.i34
bb3.i34: ; preds = %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hba8e960f35a44c5cE.exit"
tail call void @_ZN4core9panicking5panic17hbfac80217e56ecbeE({ %str_slice, %str_slice, i32 }* noalias nonnull readonly dereferenceable(40) @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17hd4aed9e7c703f81cE")
unreachable
"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hd135f9f68b8e604fE.exit": ; preds = %"_ZN80_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Index$LT$usize$GT$$GT$5index17hba8e960f35a44c5cE.exit"
%45 = getelementptr inbounds %"tiling::StackingContext", %"tiling::StackingContext"* %.idx.val, i64 %3, i32 7, i32 2, i64 8
%46 = bitcast i32* %45 to i8*
%47 = bitcast [4 x %"23.euclid::Point4D<f32>"]* %tmp48 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %47, i8* %46, i64 64, i32 4, i1 false)
%tmp53.sroa.0.0..sroa_idx = getelementptr inbounds %"tiling::StackingContext", %"tiling::StackingContext"* %.idx.val, i64 %3, i32 11, i32 0
%tmp53.sroa.0.0.copyload = load i32, i32* %tmp53.sroa.0.0..sroa_idx, align 4
%tmp53.sroa.2.0..sroa_idx1 = getelementptr inbounds %"tiling::StackingContext", %"tiling::StackingContext"* %.idx.val, i64 %3, i32 11, i32 2, i64 0
%48 = bitcast i32* %tmp53.sroa.2.0..sroa_idx1 to <4 x i32>*
%49 = load <4 x i32>, <4 x i32>* %48, align 4
%switch1.i = icmp eq i32 %tmp53.sroa.0.0.copyload, 0
br i1 %switch1.i, label %bb3.i, label %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE.exit"
bb3.i: ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hd135f9f68b8e604fE.exit"
tail call void @_ZN4core9panicking5panic17hbfac80217e56ecbeE({ %str_slice, %str_slice, i32 }* noalias nonnull readonly dereferenceable(40) @"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap14_MSG_FILE_LINE17hd4aed9e7c703f81cE"), !noalias !36
unreachable
"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE.exit": ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17hd135f9f68b8e604fE.exit"
%tmp44.sroa.0.0..sroa_cast7 = bitcast { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }* %tmp44.sroa.0 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp44.sroa.0.0..sroa_cast7, i8* %42, i64 64, i32 8, i1 false)
%tmp44.sroa.0.64..sroa_cast = bitcast %"23.euclid::Matrix4D<f32>"* %tmp46 to i8*
%tmp44.sroa.0.64..sroa_idx = getelementptr inbounds { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }, { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }* %tmp44.sroa.0, i64 0, i32 1
%tmp44.sroa.0.64..sroa_cast8 = bitcast %"23.euclid::Matrix4D<f32>"* %tmp44.sroa.0.64..sroa_idx to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp44.sroa.0.64..sroa_cast8, i8* %tmp44.sroa.0.64..sroa_cast, i64 64, i32 8, i1 false)
%value.i.sroa.0.0..sroa_cast32 = bitcast { %"23.euclid::Matrix4D<f32>", %"23.euclid::Matrix4D<f32>" }* %value.i.sroa.0 to i8*
call void @llvm.lifetime.start(i64 128, i8* %value.i.sroa.0.0..sroa_cast32)
%value.i.sroa.8.0..sroa_cast30 = bitcast [4 x %"23.euclid::Point4D<f32>"]* %value.i.sroa.8 to i8*
call void @llvm.lifetime.start(i64 64, i8* %value.i.sroa.8.0..sroa_cast30)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %value.i.sroa.0.0..sroa_cast32, i8* %tmp44.sroa.0.0..sroa_cast7, i64 128, i32 8, i1 false)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %value.i.sroa.8.0..sroa_cast30, i8* %47, i64 64, i32 8, i1 false)
%50 = load i64, i64* %.idx25, align 8, !noalias !40
%.idx.i = getelementptr %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %36, i64 %37, i32 0, i32 1
%.idx.val.i = load i64, i64* %.idx.i, align 8, !noalias !40
%51 = icmp eq i64 %50, %.idx.val.i
br i1 %51, label %bb4.i, label %"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E.exit"
bb4.i: ; preds = %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE.exit"
%52 = getelementptr inbounds %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %38, i64 0, i32 0
tail call fastcc void @"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$6double17hb0941eca5c1c45e1E"(%"5.alloc::raw_vec::RawVec<tiling::PackedLayer>"* dereferenceable(16) %52), !noalias !40
%.pre.i = load i64, i64* %.idx25, align 8, !noalias !40
br label %"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E.exit"
"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E.exit": ; preds = %bb4.i, %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE.exit"
%53 = phi i64 [ %.pre.i, %bb4.i ], [ %50, %"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE.exit" ]
%54 = getelementptr inbounds %"3.std::vec::Vec<tiling::PackedLayer>", %"3.std::vec::Vec<tiling::PackedLayer>"* %38, i64 0, i32 0, i32 0, i32 0, i32 0
%55 = load %"tiling::PackedLayer"*, %"tiling::PackedLayer"** %54, align 8, !alias.scope !43, !noalias !40, !nonnull !13
%56 = getelementptr inbounds %"tiling::PackedLayer", %"tiling::PackedLayer"* %55, i64 %53
%value.i.sroa.0.0..sroa_cast = bitcast %"tiling::PackedLayer"* %56 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %value.i.sroa.0.0..sroa_cast, i8* %value.i.sroa.0.0..sroa_cast32, i64 128, i32 4, i1 false)
%value.i.sroa.4.0..sroa_idx19 = getelementptr inbounds %"tiling::PackedLayer", %"tiling::PackedLayer"* %55, i64 %53, i32 2, i32 0, i32 0, i32 0
%57 = bitcast i32* %value.i.sroa.4.0..sroa_idx19 to <4 x i32>*
store <4 x i32> %49, <4 x i32>* %57, align 4
%value.i.sroa.8.0..sroa_idx = getelementptr inbounds %"tiling::PackedLayer", %"tiling::PackedLayer"* %55, i64 %53, i32 3
%value.i.sroa.8.0..sroa_cast = bitcast [4 x %"23.euclid::Point4D<f32>"]* %value.i.sroa.8.0..sroa_idx to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %value.i.sroa.8.0..sroa_cast, i8* %value.i.sroa.8.0..sroa_cast30, i64 64, i32 4, i1 false)
%58 = load i64, i64* %.idx25, align 8, !noalias !40
%59 = add i64 %58, 1
store i64 %59, i64* %.idx25, align 8, !noalias !40
call void @llvm.lifetime.end(i64 128, i8* %value.i.sroa.0.0..sroa_cast32)
call void @llvm.lifetime.end(i64 64, i8* %value.i.sroa.8.0..sroa_cast30)
%.idx29.val = load i64, i64* %.idx22, align 8
%60 = icmp ugt i64 %.idx29.val, %3
br i1 %60, label %"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit", label %panic.i32, !prof !3
panic.i32: ; preds = %"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E.exit"
tail call void @_ZN4core9panicking18panic_bounds_check17ha883fe1527ce6884E({ %str_slice, i32 }* nonnull @panic_bounds_check_loc22492, i64 %3, i64 %.idx29.val)
unreachable
"_ZN83_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..IndexMut$LT$usize$GT$$GT$9index_mut17h2dc5bb73a2131dbaE.exit": ; preds = %"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E.exit"
%.idx28.val = load %"2.std::option::Option<usize>"*, %"2.std::option::Option<usize>"** %.idx21, align 8, !alias.scope !17
%61 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %.idx28.val, i64 %3, i32 0
store i64 1, i64* %61, align 8
%62 = getelementptr inbounds %"2.std::option::Option<usize>", %"2.std::option::Option<usize>"* %.idx28.val, i64 %3, i32 2, i64 0
store i64 %.idx25.val, i64* %62, align 8
br label %bb4
}
; Function Attrs: nounwind
declare i32 @rust_eh_personality(i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*) unnamed_addr #3
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #4
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #4
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #4
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking5panic17hbfac80217e56ecbeE({ %str_slice, %str_slice, i32 }* noalias readonly dereferenceable(40)) unnamed_addr #5
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #4
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking18panic_bounds_check17ha883fe1527ce6884E({ %str_slice, i32 }* noalias readonly dereferenceable(24), i64, i64) unnamed_addr #5
attributes #0 = { cold noinline uwtable "no-frame-pointer-elim"="true" }
attributes #1 = { nounwind uwtable "no-frame-pointer-elim"="true" }
attributes #2 = { uwtable "no-frame-pointer-elim"="true" }
attributes #3 = { nounwind "no-frame-pointer-elim"="true" }
attributes #4 = { argmemonly nounwind }
attributes #5 = { cold noinline noreturn "no-frame-pointer-elim"="true" }
!0 = !{!1}
!1 = distinct !{!1, !2, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17he04a796349799039E: argument 0"}
!2 = distinct !{!2, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17he04a796349799039E"}
!3 = !{!"branch_weights", i32 2000, i32 1}
!4 = !{!5, !1}
!5 = distinct !{!5, !6, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17hcd2efec8403f0946E: argument 0"}
!6 = distinct !{!6, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17hcd2efec8403f0946E"}
!7 = !{i64 0, i64 2}
!8 = !{!9, !11}
!9 = distinct !{!9, !10, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE: argument 0"}
!10 = distinct !{!10, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE"}
!11 = distinct !{!11, !12, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17h9e97cdac8f6bd1adE: argument 0"}
!12 = distinct !{!12, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17h9e97cdac8f6bd1adE"}
!13 = !{}
!14 = !{!15}
!15 = distinct !{!15, !16, !"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17h6f9cf67417220912E: argument 0"}
!16 = distinct !{!16, !"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17h6f9cf67417220912E"}
!17 = !{!18}
!18 = distinct !{!18, !19, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17hcd2efec8403f0946E: argument 0"}
!19 = distinct !{!19, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17hcd2efec8403f0946E"}
!20 = !{!21}
!21 = distinct !{!21, !22, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE: argument 0"}
!22 = distinct !{!22, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE"}
!23 = !{!24}
!24 = distinct !{!24, !25, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE: argument 0"}
!25 = distinct !{!25, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h0d47bdb531e4279dE"}
!26 = !{!27}
!27 = distinct !{!27, !28, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17hbf36f68d5f175d06E: argument 0"}
!28 = distinct !{!28, !"_ZN67_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17hbf36f68d5f175d06E"}
!29 = !{!30, !27}
!30 = distinct !{!30, !31, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h76898a8a2e5b9f8eE: argument 0"}
!31 = distinct !{!31, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h76898a8a2e5b9f8eE"}
!32 = !{i32 0, i32 2}
!33 = !{!34}
!34 = distinct !{!34, !35, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6as_ref17h8f76f18df275ef03E: argument 0"}
!35 = distinct !{!35, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6as_ref17h8f76f18df275ef03E"}
!36 = !{!37, !39}
!37 = distinct !{!37, !38, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE: argument 0"}
!38 = distinct !{!38, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE"}
!39 = distinct !{!39, !38, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$6unwrap17h8cb8e2f14e416bceE: argument 1"}
!40 = !{!41}
!41 = distinct !{!41, !42, !"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E: argument 0"}
!42 = distinct !{!42, !"_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17he6350fa1279e5265E"}
!43 = !{!44}
!44 = distinct !{!44, !45, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h174b3ce71746e677E: argument 0"}
!45 = distinct !{!45, !"_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h174b3ce71746e677E"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment