Skip to content

Instantly share code, notes, and snippets.

@emilio
Created March 12, 2018 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emilio/93875578cfd1399a18ce764917f57ab4 to your computer and use it in GitHub Desktop.
Save emilio/93875578cfd1399a18ce764917f57ab4 to your computer and use it in GitHub Desktop.
; ModuleID = 'test-no-pgo.test0.rcgu.bc'
source_filename = "test0-317d481089b8c8fe83113de504472633.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"std::env::ArgsOs" = type { [0 x i64], %"std::sys::unix::args::Args", [0 x i64] }
%"std::sys::unix::args::Args" = type { [0 x i8], %"core::marker::PhantomData<*mut ()>", [0 x i8], %"alloc::vec::IntoIter<std::ffi::os_str::OsString>", [0 x i64] }
%"core::marker::PhantomData<*mut ()>" = type {}
%"alloc::vec::IntoIter<std::ffi::os_str::OsString>" = type { [0 x i8], %"core::marker::PhantomData<std::ffi::os_str::OsString>", [0 x i8], i64*, [0 x i64], i64, [0 x i64], %"std::ffi::os_str::OsString"*, [0 x i64], %"std::ffi::os_str::OsString"*, [0 x i64] }
%"core::marker::PhantomData<std::ffi::os_str::OsString>" = type {}
%"std::ffi::os_str::OsString" = type { [0 x i64], %"std::sys::unix::os_str::Buf", [0 x i64] }
%"std::sys::unix::os_str::Buf" = type { [0 x i64], %"alloc::vec::Vec<u8>", [0 x i64] }
%"alloc::vec::Vec<u8>" = type { [0 x i64], { i8*, i64 }, [0 x i64], i64, [0 x i64] }
%"alloc::string::String" = type { [0 x i64], %"alloc::vec::Vec<u8>", [0 x i64] }
%Planet = type { [0 x i64], %Vec3, [0 x i64], %Vec3, [0 x i64], double, [0 x i64] }
%Vec3 = type { [0 x i64], double, [0 x i64], double, [0 x i64], double, [0 x i64] }
%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>" = type { [0 x i64], i64, [3 x i64] }
%"core::option::Option<std::ffi::os_str::OsString>" = type { [0 x i64], {}*, [2 x i64] }
%"core::fmt::Arguments" = type { [0 x i64], { [0 x { [0 x i8]*, i64 }]*, i64 }, [0 x i64], %"core::option::Option<&[core::fmt::rt::v1::Argument]>", [0 x i64], { [0 x { i8*, i8* }]*, i64 }, [0 x i64] }
%"core::option::Option<&[core::fmt::rt::v1::Argument]>" = type { [0 x i64], {}*, [1 x i64] }
%"core::fmt::rt::v1::Argument" = type { [0 x i64], %"core::fmt::rt::v1::Position", [0 x i64], %"core::fmt::rt::v1::FormatSpec", [0 x i64] }
%"core::fmt::rt::v1::Position" = type { [0 x i64], i64, [1 x i64] }
%"core::fmt::rt::v1::FormatSpec" = type { [0 x i64], %"core::fmt::rt::v1::Count", [0 x i64], %"core::fmt::rt::v1::Count", [0 x i32], i32, [0 x i32], i32, [0 x i8], i8, [7 x i8] }
%"core::fmt::rt::v1::Count" = type { [0 x i64], i64, [1 x i64] }
%"unwind::libunwind::_Unwind_Exception" = type { [0 x i64], i64, [0 x i64], void (i32, %"unwind::libunwind::_Unwind_Exception"*)*, [0 x i64], [6 x i64], [0 x i64] }
%"unwind::libunwind::_Unwind_Context" = type { [0 x i8] }
%"core::fmt::Formatter" = type { [0 x i64], %"core::option::Option<usize>", [0 x i64], %"core::option::Option<usize>", [0 x i64], { {}*, {}* }, [0 x i64], { i64*, i64* }, [0 x i64], { [0 x { i8*, i8* }]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i8], i8, [7 x i8] }
%"core::option::Option<usize>" = type { [0 x i64], i64, [1 x i64] }
@vtable.4 = private unnamed_addr constant { void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* } { void (i8**)* @_ZN4core3ptr13drop_in_place17h3bd07621d6b15e9aE, i64 8, i64 8, i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E", i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E", i32 (i8*)* @_ZN4core3ops8function6FnOnce9call_once17he8c51a13e1ce2e56E }, align 8
@_ZN4test6BODIES17h6b5b7f6a11be243fE = internal unnamed_addr constant { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } } { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef }, [0 x i8] undef, double 0x4043BD3CC9BE45DE, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x40135DA0343CD92C, [0 x i8] undef, double 0xBFF290ABC01FDB7C, [0 x i8] undef, double 0xBFBA86F96C25EBF0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FE367069B93CCBC, [0 x i8] undef, double 0x40067EF2F57D949B, [0 x i8] undef, double 0xBF99D2D79A5A0715, [0 x i8] undef }, [0 x i8] undef, double 0x3FA34C95D9AB33D8, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x4020AFCDC332CA67, [0 x i8] undef, double 0x40107FCB31DE01B0, [0 x i8] undef, double 0xBFD9D353E1EB467C, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0xBFF02C21B8879442, [0 x i8] undef, double 0x3FFD35E9BF1F8F13, [0 x i8] undef, double 0x3F813C485F1123B4, [0 x i8] undef }, [0 x i8] undef, double 0x3F871D490D07C637, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x4029C9EACEA7D9CF, [0 x i8] undef, double 0xC02E38E8D626667E, [0 x i8] undef, double 0xBFCC9557BE257DA0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FF1531CA9911BEF, [0 x i8] undef, double 0x3FEBCC7F3E54BBC5, [0 x i8] undef, double 0xBF862F6BFAF23E7C, [0 x i8] undef }, [0 x i8] undef, double 0x3F5C3DD29CF41EB3, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x402EC267A905572A, [0 x i8] undef, double 0xC039EB5833C8A220, [0 x i8] undef, double 0x3FC6F1F393ABE540, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FEF54B61659BC4A, [0 x i8] undef, double 0x3FE307C631C4FBA3, [0 x i8] undef, double 0xBFA1CB88587665F6, [0 x i8] undef }, [0 x i8] undef, double 0x3F60A8F3531799AC, [0 x i8] undef } }, align 8
@str.q = internal constant [0 x i8] zeroinitializer
@str.r = internal constant [1 x i8] c"\0A"
@ref.s = private unnamed_addr constant [2 x { [0 x i8]*, i64 }] [{ [0 x i8]*, i64 } { [0 x i8]* @str.q, i64 0 }, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([1 x i8]* @str.r to [0 x i8]*), i64 1 }], align 8
@ref.t = private unnamed_addr constant { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } } { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 1, [0 x i8] undef, i64 0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] } { [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, i32 32, [0 x i8] undef, i32 0, [0 x i8] undef, i8 3, [7 x i8] undef }, [0 x i8] undef } }, align 8
@ref.v = private unnamed_addr constant { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } } { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 1, [0 x i8] undef, i64 0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 0, [0 x i8] undef, i64 9, [0 x i8] undef }, [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, i32 32, [0 x i8] undef, i32 0, [0 x i8] undef, i8 3, [7 x i8] undef }, [0 x i8] undef } }, align 8
; Function Attrs: uwtable
define hidden i64 @_ZN3std2rt10lang_start17h7057daff8a3d666bE(void ()* nonnull, i64, i8**) unnamed_addr #0 {
%4 = alloca i8*, align 8
%5 = bitcast i8** %4 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %5)
%6 = bitcast i8** %4 to void ()**
store void ()* %0, void ()** %6, align 8
%7 = bitcast i8** %4 to {}*
%8 = call i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull %7, {}* noalias nonnull readonly bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* }* @vtable.4 to {}*), i64 %1, i8** %2)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5)
ret i64 %8
}
; Function Attrs: uwtable
define internal i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E"(i8** noalias nocapture readonly dereferenceable(8)) unnamed_addr #0 {
%2 = bitcast i8** %0 to void ()**
%3 = load void ()*, void ()** %2, align 8, !nonnull !1
tail call void %3()
%4 = tail call i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"()
ret i32 %4
}
; Function Attrs: uwtable
define internal i32 @_ZN4core3ops8function6FnOnce9call_once17he8c51a13e1ce2e56E(i8* nonnull) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
%2 = bitcast i8* %0 to void ()*
tail call void %2(), !noalias !2
%3 = tail call i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"(), !noalias !2
ret i32 %3
}
; Function Attrs: norecurse nounwind readnone uwtable
define internal void @_ZN4core3ptr13drop_in_place17h3bd07621d6b15e9aE(i8** nocapture) unnamed_addr #1 {
ret void
}
; Function Attrs: uwtable
define internal fastcc void @_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E(%"std::env::ArgsOs"* nocapture) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
%2 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 7
%3 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !5
%4 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 9
%5 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %4, align 8, !noalias !5
%6 = icmp eq %"std::ffi::os_str::OsString"* %3, %5
br i1 %6, label %17, label %7
; <label>:7: ; preds = %1
br label %8
; <label>:8: ; preds = %25, %7
%9 = phi %"std::ffi::os_str::OsString"* [ %26, %25 ], [ %5, %7 ]
%10 = phi %"std::ffi::os_str::OsString"* [ %27, %25 ], [ %3, %7 ]
%11 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %10, i64 1
store %"std::ffi::os_str::OsString"* %11, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !5
%12 = bitcast %"std::ffi::os_str::OsString"* %10 to {}**
%13 = load {}*, {}** %12, align 8
%14 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %10, i64 0, i32 1, i32 1, i32 1, i32 1
%15 = load i64, i64* %14, align 8
%16 = icmp eq {}* %13, null
br i1 %16, label %17, label %29
; <label>:17: ; preds = %25, %8, %1
%18 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 5
%19 = load i64, i64* %18, align 8
%20 = icmp eq i64 %19, 0
br i1 %20, label %35, label %21
; <label>:21: ; preds = %17
%22 = bitcast %"std::env::ArgsOs"* %0 to i8**
%23 = load i8*, i8** %22, align 8, !nonnull !1
%24 = mul i64 %19, 24
tail call void @__rust_dealloc(i8* nonnull %23, i64 %24, i64 8) #6
br label %35
; <label>:25: ; preds = %31, %29
%26 = phi %"std::ffi::os_str::OsString"* [ %34, %31 ], [ %9, %29 ]
%27 = phi %"std::ffi::os_str::OsString"* [ %33, %31 ], [ %11, %29 ]
%28 = icmp eq %"std::ffi::os_str::OsString"* %27, %26
br i1 %28, label %17, label %8
; <label>:29: ; preds = %8
%30 = icmp eq i64 %15, 0
br i1 %30, label %25, label %31
; <label>:31: ; preds = %29
%32 = bitcast {}* %13 to i8*
tail call void @__rust_dealloc(i8* %32, i64 %15, i64 1) #6
%33 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !5
%34 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %4, align 8, !noalias !5
br label %25
; <label>:35: ; preds = %21, %17
ret void
}
; Function Attrs: nounwind uwtable
define internal fastcc void @_ZN4core3ptr13drop_in_place17hce82c5074859547eE(%"alloc::string::String"* nocapture readonly) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
%2 = getelementptr %"alloc::string::String", %"alloc::string::String"* %0, i64 0, i32 1, i32 1, i32 1
%3 = load i64, i64* %2, align 8
%4 = icmp eq i64 %3, 0
br i1 %4, label %8, label %5
; <label>:5: ; preds = %1
%6 = bitcast %"alloc::string::String"* %0 to i8**
%7 = load i8*, i8** %6, align 8
tail call void @__rust_dealloc(i8* %7, i64 %3, i64 1) #6
br label %8
; <label>:8: ; preds = %5, %1
ret void
}
; Function Attrs: nounwind readonly uwtable
define internal fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias readonly dereferenceable(280)) unnamed_addr #3 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
%2 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 7
%3 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 3
%4 = bitcast i64* %3 to double*
%5 = load double, double* %4, align 8, !alias.scope !10
%6 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 4
%7 = bitcast i64* %6 to double*
%8 = load double, double* %7, align 8, !alias.scope !10
%9 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 5
%10 = bitcast i64* %9 to double*
%11 = load double, double* %10, align 8, !alias.scope !10
%12 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 5
%13 = load double, double* %12, align 8
%14 = bitcast [5 x %Planet]* %0 to double*
%15 = load double, double* %14, align 8, !noalias !13
%16 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 1, i32 3
%17 = load double, double* %16, align 8, !noalias !13
%18 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 1, i32 5
%19 = load double, double* %18, align 8, !noalias !13
%20 = insertelement <2 x double> undef, double %15, i32 0
%21 = insertelement <2 x double> %20, double %19, i32 1
%22 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 14
%23 = bitcast i64* %2 to double*
%24 = load double, double* %23, align 8, !alias.scope !22, !noalias !23
%25 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 8
%26 = bitcast i64* %25 to double*
%27 = load double, double* %26, align 8, !alias.scope !22, !noalias !23
%28 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 9
%29 = bitcast i64* %28 to double*
%30 = load double, double* %29, align 8, !alias.scope !22, !noalias !23
%31 = fsub double %17, %27
%32 = insertelement <2 x double> undef, double %24, i32 0
%33 = insertelement <2 x double> %32, double %30, i32 1
%34 = fsub <2 x double> %21, %33
%35 = fmul <2 x double> %34, %34
%36 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 21
%37 = bitcast i64* %22 to double*
%38 = load double, double* %37, align 8, !alias.scope !22, !noalias !23
%39 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 15
%40 = bitcast i64* %39 to double*
%41 = load double, double* %40, align 8, !alias.scope !22, !noalias !23
%42 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 16
%43 = bitcast i64* %42 to double*
%44 = load double, double* %43, align 8, !alias.scope !22, !noalias !23
%45 = fsub double %17, %41
%46 = insertelement <2 x double> undef, double %38, i32 0
%47 = insertelement <2 x double> %46, double %44, i32 1
%48 = fsub <2 x double> %21, %47
%49 = fmul <2 x double> %48, %48
%50 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 28
%51 = bitcast i64* %36 to double*
%52 = load double, double* %51, align 8, !alias.scope !22, !noalias !23
%53 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 22
%54 = bitcast i64* %53 to double*
%55 = load double, double* %54, align 8, !alias.scope !22, !noalias !23
%56 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 23
%57 = bitcast i64* %56 to double*
%58 = load double, double* %57, align 8, !alias.scope !22, !noalias !23
%59 = fsub double %17, %55
%60 = insertelement <2 x double> undef, double %52, i32 0
%61 = insertelement <2 x double> %60, double %58, i32 1
%62 = fsub <2 x double> %21, %61
%63 = fmul <2 x double> %62, %62
%64 = bitcast i64* %50 to double*
%65 = load double, double* %64, align 8, !alias.scope !22, !noalias !23
%66 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 29
%67 = bitcast i64* %66 to double*
%68 = load double, double* %67, align 8, !alias.scope !22, !noalias !23
%69 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 30
%70 = bitcast i64* %69 to double*
%71 = load double, double* %70, align 8, !alias.scope !22, !noalias !23
%72 = fsub double %17, %68
%73 = insertelement <2 x double> undef, double %65, i32 0
%74 = insertelement <2 x double> %73, double %71, i32 1
%75 = fsub <2 x double> %21, %74
%76 = fmul <2 x double> %75, %75
%77 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 14
%78 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 10
%79 = bitcast i64* %78 to double*
%80 = load double, double* %79, align 8, !alias.scope !10
%81 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 11
%82 = bitcast i64* %81 to double*
%83 = load double, double* %82, align 8, !alias.scope !10
%84 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 12
%85 = bitcast i64* %84 to double*
%86 = load double, double* %85, align 8, !alias.scope !10
%87 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 13
%88 = bitcast i64* %87 to double*
%89 = load double, double* %88, align 8
%90 = bitcast i64* %2 to double*
%91 = load double, double* %90, align 8, !noalias !13
%92 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 8
%93 = bitcast i64* %92 to double*
%94 = load double, double* %93, align 8, !noalias !13
%95 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 9
%96 = bitcast i64* %95 to double*
%97 = load double, double* %96, align 8, !noalias !13
%98 = insertelement <2 x double> undef, double %91, i32 0
%99 = insertelement <2 x double> %98, double %97, i32 1
%100 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 21
%101 = bitcast i64* %77 to double*
%102 = load double, double* %101, align 8, !alias.scope !22, !noalias !23
%103 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 15
%104 = bitcast i64* %103 to double*
%105 = load double, double* %104, align 8, !alias.scope !22, !noalias !23
%106 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 16
%107 = bitcast i64* %106 to double*
%108 = load double, double* %107, align 8, !alias.scope !22, !noalias !23
%109 = fsub double %94, %105
%110 = insertelement <2 x double> undef, double %102, i32 0
%111 = insertelement <2 x double> %110, double %108, i32 1
%112 = fsub <2 x double> %99, %111
%113 = fmul <2 x double> %112, %112
%114 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 28
%115 = bitcast i64* %100 to double*
%116 = load double, double* %115, align 8, !alias.scope !22, !noalias !23
%117 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 22
%118 = bitcast i64* %117 to double*
%119 = load double, double* %118, align 8, !alias.scope !22, !noalias !23
%120 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 23
%121 = bitcast i64* %120 to double*
%122 = load double, double* %121, align 8, !alias.scope !22, !noalias !23
%123 = fsub double %94, %119
%124 = insertelement <2 x double> undef, double %116, i32 0
%125 = insertelement <2 x double> %124, double %122, i32 1
%126 = fsub <2 x double> %99, %125
%127 = fmul <2 x double> %126, %126
%128 = bitcast i64* %114 to double*
%129 = load double, double* %128, align 8, !alias.scope !22, !noalias !23
%130 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 29
%131 = bitcast i64* %130 to double*
%132 = load double, double* %131, align 8, !alias.scope !22, !noalias !23
%133 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 30
%134 = bitcast i64* %133 to double*
%135 = load double, double* %134, align 8, !alias.scope !22, !noalias !23
%136 = fsub double %94, %132
%137 = insertelement <2 x double> undef, double %129, i32 0
%138 = insertelement <2 x double> %137, double %135, i32 1
%139 = fsub <2 x double> %99, %138
%140 = fmul <2 x double> %139, %139
%141 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 21
%142 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 17
%143 = bitcast i64* %142 to double*
%144 = load double, double* %143, align 8, !alias.scope !10
%145 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 18
%146 = bitcast i64* %145 to double*
%147 = load double, double* %146, align 8, !alias.scope !10
%148 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 19
%149 = bitcast i64* %148 to double*
%150 = load double, double* %149, align 8, !alias.scope !10
%151 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 20
%152 = bitcast i64* %151 to double*
%153 = load double, double* %152, align 8
%154 = bitcast i64* %77 to double*
%155 = load double, double* %154, align 8, !noalias !13
%156 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 15
%157 = bitcast i64* %156 to double*
%158 = load double, double* %157, align 8, !noalias !13
%159 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 16
%160 = bitcast i64* %159 to double*
%161 = load double, double* %160, align 8, !noalias !13
%162 = insertelement <2 x double> undef, double %155, i32 0
%163 = insertelement <2 x double> %162, double %161, i32 1
%164 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 28
%165 = bitcast i64* %141 to double*
%166 = load double, double* %165, align 8, !alias.scope !22, !noalias !23
%167 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 22
%168 = bitcast i64* %167 to double*
%169 = load double, double* %168, align 8, !alias.scope !22, !noalias !23
%170 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 23
%171 = bitcast i64* %170 to double*
%172 = load double, double* %171, align 8, !alias.scope !22, !noalias !23
%173 = fsub double %158, %169
%174 = insertelement <2 x double> undef, double %166, i32 0
%175 = insertelement <2 x double> %174, double %172, i32 1
%176 = fsub <2 x double> %163, %175
%177 = fmul <2 x double> %176, %176
%178 = bitcast i64* %164 to double*
%179 = load double, double* %178, align 8, !alias.scope !22, !noalias !23
%180 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 29
%181 = bitcast i64* %180 to double*
%182 = load double, double* %181, align 8, !alias.scope !22, !noalias !23
%183 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 30
%184 = bitcast i64* %183 to double*
%185 = load double, double* %184, align 8, !alias.scope !22, !noalias !23
%186 = fsub double %158, %182
%187 = insertelement <2 x double> undef, double %179, i32 0
%188 = insertelement <2 x double> %187, double %185, i32 1
%189 = fsub <2 x double> %163, %188
%190 = fmul <2 x double> %189, %189
%191 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 24
%192 = bitcast i64* %191 to double*
%193 = load double, double* %192, align 8, !alias.scope !10
%194 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 25
%195 = bitcast i64* %194 to double*
%196 = load double, double* %195, align 8, !alias.scope !10
%197 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 26
%198 = bitcast i64* %197 to double*
%199 = load double, double* %198, align 8, !alias.scope !10
%200 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 27
%201 = bitcast i64* %200 to double*
%202 = load double, double* %201, align 8
%203 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 28
%204 = bitcast i64* %141 to double*
%205 = load double, double* %204, align 8, !noalias !13
%206 = insertelement <2 x double> undef, double %205, i32 0
%207 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 23
%208 = bitcast i64* %207 to double*
%209 = load double, double* %208, align 8, !noalias !13
%210 = insertelement <2 x double> %206, double %209, i32 1
%211 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 22
%212 = bitcast i64* %211 to double*
%213 = load double, double* %212, align 8, !noalias !13
%214 = fmul double %193, %193
%215 = fmul double %196, %196
%216 = fadd double %214, %215
%217 = fmul double %199, %199
%218 = fadd double %216, %217
%219 = fmul double %218, %202
%220 = fmul double %219, 5.000000e-01
%221 = fmul double %5, %5
%222 = fmul double %8, %8
%223 = fadd double %221, %222
%224 = fmul double %11, %11
%225 = fadd double %223, %224
%226 = fmul double %225, %13
%227 = fmul double %226, 5.000000e-01
%228 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 13
%229 = bitcast i64* %228 to double*
%230 = load double, double* %229, align 8, !alias.scope !22, !noalias !23
%231 = extractelement <2 x double> %35, i32 0
%232 = fmul double %31, %31
%233 = fadd double %231, %232
%234 = extractelement <2 x double> %35, i32 1
%235 = fadd double %233, %234
%236 = tail call double @llvm.sqrt.f64(double %235) #6
%237 = fdiv double %230, %236
%238 = fadd double %237, 0.000000e+00
%239 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 20
%240 = bitcast i64* %239 to double*
%241 = load double, double* %240, align 8, !alias.scope !22, !noalias !23
%242 = extractelement <2 x double> %49, i32 0
%243 = fmul double %45, %45
%244 = fadd double %242, %243
%245 = extractelement <2 x double> %49, i32 1
%246 = fadd double %244, %245
%247 = tail call double @llvm.sqrt.f64(double %246) #6
%248 = fdiv double %241, %247
%249 = fadd double %238, %248
%250 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 27
%251 = bitcast i64* %250 to double*
%252 = load double, double* %251, align 8, !alias.scope !22, !noalias !23
%253 = extractelement <2 x double> %63, i32 0
%254 = fmul double %59, %59
%255 = fadd double %253, %254
%256 = extractelement <2 x double> %63, i32 1
%257 = fadd double %255, %256
%258 = tail call double @llvm.sqrt.f64(double %257) #6
%259 = fdiv double %252, %258
%260 = fadd double %249, %259
%261 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 34
%262 = bitcast i64* %261 to double*
%263 = load double, double* %262, align 8, !alias.scope !22, !noalias !23
%264 = extractelement <2 x double> %76, i32 0
%265 = fmul double %72, %72
%266 = fadd double %264, %265
%267 = extractelement <2 x double> %76, i32 1
%268 = fadd double %266, %267
%269 = tail call double @llvm.sqrt.f64(double %268) #6
%270 = fdiv double %263, %269
%271 = fadd double %260, %270
%272 = fmul double %13, %271
%273 = fsub double %227, %272
%274 = fadd double %273, 0.000000e+00
%275 = fmul double %80, %80
%276 = fmul double %83, %83
%277 = fadd double %275, %276
%278 = fmul double %86, %86
%279 = fadd double %277, %278
%280 = fmul double %279, %89
%281 = fmul double %280, 5.000000e-01
%282 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 20
%283 = bitcast i64* %282 to double*
%284 = load double, double* %283, align 8, !alias.scope !22, !noalias !23
%285 = extractelement <2 x double> %113, i32 0
%286 = fmul double %109, %109
%287 = fadd double %285, %286
%288 = extractelement <2 x double> %113, i32 1
%289 = fadd double %287, %288
%290 = tail call double @llvm.sqrt.f64(double %289) #6
%291 = fdiv double %284, %290
%292 = fadd double %291, 0.000000e+00
%293 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 27
%294 = bitcast i64* %293 to double*
%295 = load double, double* %294, align 8, !alias.scope !22, !noalias !23
%296 = extractelement <2 x double> %127, i32 0
%297 = fmul double %123, %123
%298 = fadd double %296, %297
%299 = extractelement <2 x double> %127, i32 1
%300 = fadd double %298, %299
%301 = tail call double @llvm.sqrt.f64(double %300) #6
%302 = fdiv double %295, %301
%303 = fadd double %292, %302
%304 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 34
%305 = bitcast i64* %304 to double*
%306 = load double, double* %305, align 8, !alias.scope !22, !noalias !23
%307 = extractelement <2 x double> %140, i32 0
%308 = fmul double %136, %136
%309 = fadd double %307, %308
%310 = extractelement <2 x double> %140, i32 1
%311 = fadd double %309, %310
%312 = tail call double @llvm.sqrt.f64(double %311) #6
%313 = fdiv double %306, %312
%314 = fadd double %303, %313
%315 = fmul double %89, %314
%316 = fsub double %281, %315
%317 = fadd double %274, %316
%318 = fmul double %144, %144
%319 = fmul double %147, %147
%320 = fadd double %318, %319
%321 = fmul double %150, %150
%322 = fadd double %320, %321
%323 = fmul double %322, %153
%324 = fmul double %323, 5.000000e-01
%325 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 27
%326 = bitcast i64* %325 to double*
%327 = load double, double* %326, align 8, !alias.scope !22, !noalias !23
%328 = extractelement <2 x double> %177, i32 0
%329 = fmul double %173, %173
%330 = fadd double %328, %329
%331 = extractelement <2 x double> %177, i32 1
%332 = fadd double %330, %331
%333 = tail call double @llvm.sqrt.f64(double %332) #6
%334 = fdiv double %327, %333
%335 = fadd double %334, 0.000000e+00
%336 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 34
%337 = bitcast i64* %336 to double*
%338 = load double, double* %337, align 8, !alias.scope !22, !noalias !23
%339 = extractelement <2 x double> %190, i32 0
%340 = fmul double %186, %186
%341 = fadd double %339, %340
%342 = extractelement <2 x double> %190, i32 1
%343 = fadd double %341, %342
%344 = tail call double @llvm.sqrt.f64(double %343) #6
%345 = fdiv double %338, %344
%346 = fadd double %335, %345
%347 = fmul double %153, %346
%348 = fsub double %324, %347
%349 = fadd double %317, %348
%350 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 34
%351 = bitcast i64* %350 to double*
%352 = load double, double* %351, align 8, !alias.scope !22, !noalias !23
%353 = bitcast i64* %203 to double*
%354 = load double, double* %353, align 8, !alias.scope !22, !noalias !23
%355 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 29
%356 = bitcast i64* %355 to double*
%357 = load double, double* %356, align 8, !alias.scope !22, !noalias !23
%358 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 30
%359 = bitcast i64* %358 to double*
%360 = load double, double* %359, align 8, !alias.scope !22, !noalias !23
%361 = fsub double %213, %357
%362 = insertelement <2 x double> undef, double %354, i32 0
%363 = insertelement <2 x double> %362, double %360, i32 1
%364 = fsub <2 x double> %210, %363
%365 = fmul double %361, %361
%366 = fmul <2 x double> %364, %364
%367 = extractelement <2 x double> %366, i32 0
%368 = fadd double %367, %365
%369 = extractelement <2 x double> %366, i32 1
%370 = fadd double %368, %369
%371 = tail call double @llvm.sqrt.f64(double %370) #6
%372 = fdiv double %352, %371
%373 = fadd double %372, 0.000000e+00
%374 = fmul double %202, %373
%375 = fsub double %220, %374
%376 = fadd double %349, %375
%377 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 31
%378 = bitcast i64* %377 to double*
%379 = load double, double* %378, align 8, !alias.scope !10
%380 = fmul double %379, %379
%381 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 32
%382 = bitcast i64* %381 to <2 x double>*
%383 = load <2 x double>, <2 x double>* %382, align 8, !alias.scope !10
%384 = fmul <2 x double> %383, %383
%385 = extractelement <2 x double> %384, i32 0
%386 = fadd double %380, %385
%387 = extractelement <2 x double> %384, i32 1
%388 = fadd double %386, %387
%389 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 34
%390 = bitcast i64* %389 to double*
%391 = load double, double* %390, align 8
%392 = fmul double %388, %391
%393 = fmul double %392, 5.000000e-01
%394 = fmul double %391, 0.000000e+00
%395 = fsub double %393, %394
%396 = fadd double %376, %395
ret double %396
}
; Function Attrs: uwtable
define internal void @_ZN4test4main17h6f2dd3dc2bc8dfe6E() unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality {
%1 = alloca { [0 x i64], %"alloc::string::String", [0 x i64] }, align 8
%2 = alloca %"std::ffi::os_str::OsString", align 8
%3 = alloca %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", align 8
%4 = alloca %"core::option::Option<std::ffi::os_str::OsString>", align 8
%5 = alloca double, align 8
%6 = alloca [1 x { i8*, i8* }], align 8
%7 = alloca %"core::fmt::Arguments", align 8
%8 = alloca double, align 8
%9 = alloca [1 x { i8*, i8* }], align 8
%10 = alloca %"core::fmt::Arguments", align 8
%11 = alloca [5 x %Planet], align 16
%12 = alloca [1 x { i8*, i8* }], align 8
%13 = alloca %"core::fmt::Arguments", align 8
%14 = alloca %"std::env::ArgsOs", align 8
%15 = alloca [2 x i64], align 8
%16 = alloca i32, align 4
%17 = bitcast i32* %16 to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %17)
%18 = bitcast [2 x i64]* %15 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %18)
%19 = bitcast %"std::env::ArgsOs"* %14 to i8*
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %19)
call void @_ZN3std3env7args_os17h0e97fc174faccbd6E(%"std::env::ArgsOs"* noalias nocapture nonnull sret dereferenceable(32) %14)
%20 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %4 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %20), !noalias !24
invoke void @"_ZN67_$LT$std..env..ArgsOs$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h2da8ead691074258E"(%"core::option::Option<std::ffi::os_str::OsString>"* noalias nocapture nonnull sret dereferenceable(24) %4, %"std::env::ArgsOs"* nonnull dereferenceable(32) %14)
to label %21 unwind label %464
; <label>:21: ; preds = %0
%22 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %4 to {}**
%23 = load {}*, {}** %22, align 8, !noalias !24
%24 = icmp eq {}* %23, null
br i1 %24, label %28, label %25
; <label>:25: ; preds = %21
%26 = getelementptr inbounds %"core::option::Option<std::ffi::os_str::OsString>", %"core::option::Option<std::ffi::os_str::OsString>"* %4, i64 0, i32 2, i64 0
%27 = bitcast i64* %26 to <2 x i64>*
br label %38
; <label>:28: ; preds = %34, %21
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %20), !noalias !24
br label %91
; <label>:29: ; preds = %38
%30 = extractelement <2 x i64> %42, i32 0
%31 = icmp eq i64 %30, 0
br i1 %31, label %33, label %32
; <label>:32: ; preds = %29
call void @__rust_dealloc(i8* %41, i64 %30, i64 1) #6, !noalias !24
br label %33
; <label>:33: ; preds = %32, %29
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %20), !noalias !24
invoke void @"_ZN67_$LT$std..env..ArgsOs$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h2da8ead691074258E"(%"core::option::Option<std::ffi::os_str::OsString>"* noalias nocapture nonnull sret dereferenceable(24) %4, %"std::env::ArgsOs"* nonnull dereferenceable(32) %14)
to label %34 unwind label %462
; <label>:34: ; preds = %33
%35 = add nsw i64 %40, -1
%36 = load {}*, {}** %22, align 8, !noalias !24
%37 = icmp eq {}* %36, null
br i1 %37, label %28, label %38
; <label>:38: ; preds = %34, %25
%39 = phi {}* [ %23, %25 ], [ %36, %34 ]
%40 = phi i64 [ 1, %25 ], [ %35, %34 ]
%41 = bitcast {}* %39 to i8*
%42 = load <2 x i64>, <2 x i64>* %27, align 8
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %20), !noalias !24
%43 = icmp eq i64 %40, 0
br i1 %43, label %44, label %29
; <label>:44: ; preds = %38
%45 = bitcast %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %45), !noalias !27
%46 = bitcast %"std::ffi::os_str::OsString"* %2 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %46), !noalias !27
%47 = bitcast %"std::ffi::os_str::OsString"* %2 to {}**
store {}* %39, {}** %47, align 8
%48 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %2, i64 0, i32 1, i32 1, i32 1, i32 1
%49 = bitcast i64* %48 to <2 x i64>*
store <2 x i64> %42, <2 x i64>* %49, align 8
invoke void @_ZN3std3ffi6os_str8OsString11into_string17h567757e2e42e16abE(%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* noalias nocapture nonnull sret dereferenceable(32) %3, %"std::ffi::os_str::OsString"* noalias nocapture nonnull dereferenceable(24) %2)
to label %50 unwind label %464
; <label>:50: ; preds = %44
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %46), !noalias !27
%51 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3, i64 0, i32 0, i64 0
%52 = load i64, i64* %51, align 8, !range !34, !alias.scope !35, !noalias !38
%53 = icmp eq i64 %52, 1
br i1 %53, label %54, label %63
; <label>:54: ; preds = %50
%55 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3, i64 0, i32 2, i64 1
%56 = load i64, i64* %55, align 8, !alias.scope !35, !noalias !38
%57 = icmp eq i64 %56, 0
br i1 %57, label %62, label %58
; <label>:58: ; preds = %54
%59 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3, i64 0, i32 2
%60 = bitcast [3 x i64]* %59 to i8**
%61 = load i8*, i8** %60, align 8, !alias.scope !35, !noalias !38
call void @__rust_dealloc(i8* %61, i64 %56, i64 1) #6, !noalias !40
br label %62
; <label>:62: ; preds = %58, %54
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %45), !noalias !27
br label %91
; <label>:63: ; preds = %50
%64 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3, i64 0, i32 2
%65 = bitcast [3 x i64]* %64 to {}**
%66 = load {}*, {}** %65, align 8
%67 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %3, i64 0, i32 2, i64 1
%68 = bitcast i64* %67 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %18, i8* nonnull %68, i64 16, i32 8, i1 false)
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %45), !noalias !27
%69 = icmp eq {}* %66, null
br i1 %69, label %91, label %73
; <label>:70: ; preds = %73
%71 = landingpad { i8*, i32 }
cleanup
%72 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %1 to %"alloc::string::String"*
call fastcc void @_ZN4core3ptr13drop_in_place17hce82c5074859547eE(%"alloc::string::String"* nonnull %72) #7, !noalias !41
br label %466
; <label>:73: ; preds = %63
%74 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %1 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %74), !noalias !41
%75 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %1 to {}**
store {}* %66, {}** %75, align 8
%76 = getelementptr inbounds { [0 x i64], %"alloc::string::String", [0 x i64] }, { [0 x i64], %"alloc::string::String", [0 x i64] }* %1, i64 0, i32 1, i32 1, i32 1, i32 1
%77 = bitcast i64* %76 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %77, i8* nonnull %18, i64 16, i32 8, i1 false)
%78 = bitcast {}* %66 to [0 x i8]*
%79 = getelementptr inbounds { [0 x i64], %"alloc::string::String", [0 x i64] }, { [0 x i64], %"alloc::string::String", [0 x i64] }* %1, i64 0, i32 1, i32 1, i32 3
%80 = load i64, i64* %79, align 8, !alias.scope !44, !noalias !41
%81 = bitcast {}* %66 to i8*
%82 = invoke i64 @"_ZN4core3num52_$LT$impl$u20$core..str..FromStr$u20$for$u20$i32$GT$8from_str17h99b48ffb87a27724E"([0 x i8]* noalias nonnull readonly %78, i64 %80)
to label %83 unwind label %70, !noalias !51
; <label>:83: ; preds = %73
%84 = and i64 %82, 1
%85 = xor i64 %84, 1
%86 = load i64, i64* %76, align 8, !alias.scope !52, !noalias !41
%87 = icmp eq i64 %86, 0
br i1 %87, label %89, label %88
; <label>:88: ; preds = %83
call void @__rust_dealloc(i8* nonnull %81, i64 %86, i64 1) #6, !noalias !51
br label %89
; <label>:89: ; preds = %88, %83
%90 = and i64 %82, -4294967296
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %74), !noalias !41
br label %91
; <label>:91: ; preds = %89, %63, %62, %28
%92 = phi i64 [ %85, %89 ], [ 0, %63 ], [ 0, %62 ], [ 0, %28 ]
%93 = phi i64 [ %90, %89 ], [ 0, %63 ], [ 0, %62 ], [ 0, %28 ]
%94 = or i64 %93, %92
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %18)
%95 = and i64 %92, 4294967295
%96 = icmp eq i64 %95, 0
%97 = lshr i64 %94, 32
%98 = trunc i64 %97 to i32
%99 = select i1 %96, i32 1000, i32 %98
store i32 %99, i32* %16, align 4
%100 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %14, i64 0, i32 1, i32 3, i32 7
%101 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %100, align 8, !noalias !53
%102 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %14, i64 0, i32 1, i32 3, i32 9
%103 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %102, align 8, !noalias !53
%104 = icmp eq %"std::ffi::os_str::OsString"* %101, %103
br i1 %104, label %115, label %105
; <label>:105: ; preds = %91
br label %106
; <label>:106: ; preds = %123, %105
%107 = phi %"std::ffi::os_str::OsString"* [ %124, %123 ], [ %103, %105 ]
%108 = phi %"std::ffi::os_str::OsString"* [ %125, %123 ], [ %101, %105 ]
%109 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %108, i64 1
store %"std::ffi::os_str::OsString"* %109, %"std::ffi::os_str::OsString"** %100, align 8, !noalias !53
%110 = bitcast %"std::ffi::os_str::OsString"* %108 to {}**
%111 = load {}*, {}** %110, align 8
%112 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %108, i64 0, i32 1, i32 1, i32 1, i32 1
%113 = load i64, i64* %112, align 8
%114 = icmp eq {}* %111, null
br i1 %114, label %115, label %127
; <label>:115: ; preds = %123, %106, %91
%116 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %14, i64 0, i32 1, i32 3, i32 5
%117 = load i64, i64* %116, align 8
%118 = icmp eq i64 %117, 0
br i1 %118, label %133, label %119
; <label>:119: ; preds = %115
%120 = bitcast %"std::env::ArgsOs"* %14 to i8**
%121 = load i8*, i8** %120, align 8, !nonnull !1
%122 = mul i64 %117, 24
call void @__rust_dealloc(i8* nonnull %121, i64 %122, i64 8) #6
br label %133
; <label>:123: ; preds = %129, %127
%124 = phi %"std::ffi::os_str::OsString"* [ %132, %129 ], [ %107, %127 ]
%125 = phi %"std::ffi::os_str::OsString"* [ %131, %129 ], [ %109, %127 ]
%126 = icmp eq %"std::ffi::os_str::OsString"* %125, %124
br i1 %126, label %115, label %106
; <label>:127: ; preds = %106
%128 = icmp eq i64 %113, 0
br i1 %128, label %123, label %129
; <label>:129: ; preds = %127
%130 = bitcast {}* %111 to i8*
call void @__rust_dealloc(i8* %130, i64 %113, i64 1) #6
%131 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %100, align 8, !noalias !53
%132 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %102, align 8, !noalias !53
br label %123
; <label>:133: ; preds = %119, %115
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %19)
%134 = bitcast %"core::fmt::Arguments"* %13 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %134)
%135 = bitcast [1 x { i8*, i8* }]* %12 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %135)
%136 = bitcast [1 x { i8*, i8* }]* %12 to i32**
store i32* %16, i32** %136, align 8
%137 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %12, i64 0, i64 0, i32 1
store i8* bitcast (i1 (i32*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h8208a598556d09a5E" to i8*), i8** %137, align 8
%138 = bitcast %"core::fmt::Arguments"* %13 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %138, align 8, !alias.scope !58, !noalias !61
%139 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %13, i64 0, i32 1, i32 1
store i64 2, i64* %139, align 8, !alias.scope !58, !noalias !61
%140 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %13, i64 0, i32 3
%141 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %140 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.t to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %141, align 8, !alias.scope !58, !noalias !61
%142 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %13, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %142, align 8, !alias.scope !58, !noalias !61
%143 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %13, i64 0, i32 5, i32 0
%144 = bitcast [0 x { i8*, i8* }]** %143 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %12, [1 x { i8*, i8* }]** %144, align 8, !alias.scope !58, !noalias !61
%145 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %13, i64 0, i32 5, i32 1
store i64 1, i64* %145, align 8, !alias.scope !58, !noalias !61
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %13)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %134)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %135)
%146 = bitcast [5 x %Planet]* %11 to i8*
call void @llvm.lifetime.start.p0i8(i64 280, i8* nonnull %146)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %146, i8* bitcast (double* getelementptr inbounds ({ { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } }, { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } }* @_ZN4test6BODIES17h6b5b7f6a11be243fE, i64 0, i32 0, i32 1, i32 1) to i8*), i64 280, i32 8, i1 false)
%147 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 3
%148 = bitcast i64* %147 to double*
%149 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 4
%150 = bitcast i64* %149 to double*
%151 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 5
%152 = bitcast i64* %151 to double*
%153 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 3
%154 = bitcast %Vec3* %153 to <2 x double>*
store <2 x double> <double 0xBF3967E9A7E0D6F3, double 0xBF6AD4ECFE5089FB>, <2 x double>* %154, align 8
%155 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 3, i32 5
store double 0x3EF919331F0B8A71, double* %155, align 8
%156 = bitcast %"core::fmt::Arguments"* %10 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %156)
%157 = bitcast [1 x { i8*, i8* }]* %9 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %157)
%158 = bitcast double* %8 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %158)
%159 = call fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias nonnull readonly dereferenceable(280) %11)
store double %159, double* %8, align 8
%160 = bitcast [1 x { i8*, i8* }]* %9 to double**
store double* %8, double** %160, align 8
%161 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %9, i64 0, i64 0, i32 1
store i8* bitcast (i1 (double*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E" to i8*), i8** %161, align 8
%162 = bitcast %"core::fmt::Arguments"* %10 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %162, align 8, !alias.scope !65, !noalias !68
%163 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %10, i64 0, i32 1, i32 1
store i64 2, i64* %163, align 8, !alias.scope !65, !noalias !68
%164 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %10, i64 0, i32 3
%165 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %164 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.v to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %165, align 8, !alias.scope !65, !noalias !68
%166 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %10, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %166, align 8, !alias.scope !65, !noalias !68
%167 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %10, i64 0, i32 5, i32 0
%168 = bitcast [0 x { i8*, i8* }]** %167 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %9, [1 x { i8*, i8* }]** %168, align 8, !alias.scope !65, !noalias !68
%169 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %10, i64 0, i32 5, i32 1
store i64 1, i64* %169, align 8, !alias.scope !65, !noalias !68
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %10)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %156)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %157)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %158)
%170 = load i32, i32* %16, align 4
%171 = icmp sgt i32 %170, 0
br i1 %171, label %468, label %188
; <label>:172: ; preds = %203
%173 = extractelement <4 x double> %452, i32 3
store double %173, double* %472, align 16
%174 = bitcast [5 x %Planet]* %11 to <2 x double>*
store <2 x double> %444, <2 x double>* %174, align 16
%175 = extractelement <4 x double> %452, i32 2
store double %175, double* %476, align 8
%176 = bitcast i64* %474 to <2 x double>*
store <2 x double> %446, <2 x double>* %176, align 8
%177 = extractelement <4 x double> %452, i32 1
store double %177, double* %479, align 16
%178 = bitcast i64* %473 to <2 x double>*
store <2 x double> %448, <2 x double>* %178, align 16
%179 = extractelement <4 x double> %452, i32 0
store double %179, double* %482, align 8
%180 = bitcast i64* %477 to <2 x double>*
store <2 x double> %451, <2 x double>* %180, align 8
store double %456, double* %484, align 16
%181 = bitcast i64* %480 to <2 x double>*
store <2 x double> %455, <2 x double>* %181, align 16
%182 = extractelement <2 x double> %352, i32 0
store double %182, double* %148, align 8
%183 = extractelement <2 x double> %352, i32 1
store double %183, double* %150, align 16
store double %461, double* %152, align 8
%184 = bitcast i64* %488 to <2 x double>*
store <2 x double> %396, <2 x double>* %184, align 8
store double %460, double* %490, align 8
%185 = bitcast i64* %495 to <2 x double>*
store <2 x double> %419, <2 x double>* %185, align 8
store double %459, double* %497, align 8
%186 = bitcast i64* %501 to <2 x double>*
store <2 x double> %432, <2 x double>* %186, align 8
store double %458, double* %503, align 8
%187 = bitcast i64* %507 to <2 x double>*
store <2 x double> %440, <2 x double>* %187, align 8
store double %442, double* %509, align 8
br label %188
; <label>:188: ; preds = %172, %133
%189 = bitcast %"core::fmt::Arguments"* %7 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %189)
%190 = bitcast [1 x { i8*, i8* }]* %6 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %190)
%191 = bitcast double* %5 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %191)
%192 = call fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias nonnull readonly dereferenceable(280) %11)
store double %192, double* %5, align 8
%193 = bitcast [1 x { i8*, i8* }]* %6 to double**
store double* %5, double** %193, align 8
%194 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %6, i64 0, i64 0, i32 1
store i8* bitcast (i1 (double*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E" to i8*), i8** %194, align 8
%195 = bitcast %"core::fmt::Arguments"* %7 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %195, align 8, !alias.scope !72, !noalias !75
%196 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %7, i64 0, i32 1, i32 1
store i64 2, i64* %196, align 8, !alias.scope !72, !noalias !75
%197 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %7, i64 0, i32 3
%198 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %197 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.v to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %198, align 8, !alias.scope !72, !noalias !75
%199 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %7, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %199, align 8, !alias.scope !72, !noalias !75
%200 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %7, i64 0, i32 5, i32 0
%201 = bitcast [0 x { i8*, i8* }]** %200 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %6, [1 x { i8*, i8* }]** %201, align 8, !alias.scope !72, !noalias !75
%202 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %7, i64 0, i32 5, i32 1
store i64 1, i64* %202, align 8, !alias.scope !72, !noalias !75
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %7)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %189)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %190)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %191)
call void @llvm.lifetime.end.p0i8(i64 280, i8* nonnull %146)
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %17)
ret void
; <label>:203: ; preds = %468, %203
%204 = phi double [ %539, %468 ], [ %442, %203 ]
%205 = phi double [ %536, %468 ], [ %458, %203 ]
%206 = phi double [ %533, %468 ], [ %459, %203 ]
%207 = phi double [ %530, %468 ], [ %460, %203 ]
%208 = phi double [ %527, %468 ], [ %461, %203 ]
%209 = phi double [ %522, %468 ], [ %456, %203 ]
%210 = phi i32 [ 0, %468 ], [ %222, %203 ]
%211 = phi <2 x double> [ %512, %468 ], [ %444, %203 ]
%212 = phi <2 x double> [ %526, %468 ], [ %352, %203 ]
%213 = phi <2 x double> [ %515, %468 ], [ %446, %203 ]
%214 = phi <2 x double> [ %518, %468 ], [ %448, %203 ]
%215 = phi <2 x double> [ %521, %468 ], [ %451, %203 ]
%216 = phi <2 x double> [ %524, %468 ], [ %455, %203 ]
%217 = phi <2 x double> [ %529, %468 ], [ %396, %203 ]
%218 = phi <4 x double> [ %543, %468 ], [ %452, %203 ]
%219 = phi <2 x double> [ %532, %468 ], [ %419, %203 ]
%220 = phi <2 x double> [ %535, %468 ], [ %432, %203 ]
%221 = phi <2 x double> [ %538, %468 ], [ %440, %203 ]
%222 = add i32 %210, 1
%223 = extractelement <4 x double> %218, i32 2
%224 = extractelement <4 x double> %218, i32 3
%225 = fsub double %224, %223
%226 = fsub <2 x double> %211, %213
%227 = extractelement <4 x double> %218, i32 1
%228 = fsub <2 x double> %211, %214
%229 = extractelement <4 x double> %218, i32 0
%230 = shufflevector <4 x double> %218, <4 x double> undef, <2 x i32> <i32 3, i32 3>
%231 = shufflevector <4 x double> %218, <4 x double> undef, <2 x i32> <i32 1, i32 0>
%232 = fsub <2 x double> %230, %231
%233 = fsub <2 x double> %211, %215
%234 = fsub <2 x double> %211, %216
%235 = shufflevector <2 x double> %234, <2 x double> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
%236 = fsub <2 x double> %213, %214
%237 = shufflevector <4 x double> %218, <4 x double> undef, <2 x i32> <i32 2, i32 2>
%238 = fsub <2 x double> %237, %231
%239 = fsub <2 x double> %213, %215
%240 = fsub <2 x double> %213, %216
%241 = shufflevector <2 x double> %240, <2 x double> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
%242 = fsub double %227, %229
%243 = fsub <2 x double> %214, %215
%244 = fsub <2 x double> %214, %216
%245 = insertelement <4 x double> undef, double %209, i32 0
%246 = shufflevector <4 x double> %245, <4 x double> undef, <4 x i32> zeroinitializer
%247 = fsub <4 x double> %218, %246
%248 = fsub <2 x double> %215, %216
%249 = fmul <2 x double> %226, %226
%250 = extractelement <2 x double> %249, i32 1
%251 = extractelement <2 x double> %249, i32 0
%252 = fadd double %250, %251
%253 = fmul double %225, %225
%254 = fadd double %253, %252
%255 = call double @llvm.sqrt.f64(double %254) #6
%256 = fmul double %254, %255
%257 = fdiv double 1.000000e-02, %256
%258 = shufflevector <2 x double> %228, <2 x double> %233, <2 x i32> <i32 0, i32 2>
%259 = fmul <2 x double> %258, %258
%260 = shufflevector <2 x double> %228, <2 x double> %233, <2 x i32> <i32 1, i32 3>
%261 = fmul <2 x double> %260, %260
%262 = fadd <2 x double> %259, %261
%263 = fmul <2 x double> %232, %232
%264 = fadd <2 x double> %262, %263
%265 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %264)
%266 = fmul <2 x double> %264, %265
%267 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %266
%268 = shufflevector <2 x double> %236, <2 x double> %239, <2 x i32> <i32 0, i32 2>
%269 = fmul <2 x double> %268, %268
%270 = shufflevector <2 x double> %236, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
%271 = shufflevector <2 x double> %270, <2 x double> %239, <2 x i32> <i32 0, i32 3>
%272 = fmul <2 x double> %271, %271
%273 = fadd <2 x double> %269, %272
%274 = fmul <2 x double> %238, %238
%275 = fadd <2 x double> %273, %274
%276 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %275)
%277 = fmul <2 x double> %275, %276
%278 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %277
%279 = fmul <2 x double> %243, %243
%280 = extractelement <2 x double> %279, i32 0
%281 = extractelement <2 x double> %279, i32 1
%282 = fadd double %280, %281
%283 = fmul double %242, %242
%284 = fadd double %282, %283
%285 = call double @llvm.sqrt.f64(double %284) #6
%286 = fmul double %284, %285
%287 = fdiv double 1.000000e-02, %286
%288 = shufflevector <2 x double> %248, <2 x double> %244, <4 x i32> <i32 0, i32 2, i32 undef, i32 undef>
%289 = shufflevector <4 x double> %288, <4 x double> %241, <4 x i32> <i32 0, i32 1, i32 4, i32 undef>
%290 = shufflevector <4 x double> %289, <4 x double> %235, <4 x i32> <i32 0, i32 1, i32 2, i32 4>
%291 = fmul <4 x double> %290, %290
%292 = shufflevector <2 x double> %248, <2 x double> %244, <4 x i32> <i32 1, i32 3, i32 undef, i32 undef>
%293 = shufflevector <4 x double> %292, <4 x double> %241, <4 x i32> <i32 0, i32 1, i32 5, i32 undef>
%294 = shufflevector <4 x double> %293, <4 x double> %235, <4 x i32> <i32 0, i32 1, i32 2, i32 5>
%295 = fmul <4 x double> %294, %294
%296 = fadd <4 x double> %291, %295
%297 = fmul <4 x double> %247, %247
%298 = fadd <4 x double> %296, %297
%299 = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %298)
%300 = fmul <4 x double> %298, %299
%301 = fdiv <4 x double> <double 1.000000e-02, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02>, %300
%302 = fmul double %257, %487
%303 = insertelement <2 x double> undef, double %302, i32 0
%304 = shufflevector <2 x double> %303, <2 x double> undef, <2 x i32> zeroinitializer
%305 = fmul <2 x double> %226, %304
%306 = fmul double %225, %302
%307 = fsub <2 x double> %212, %305
%308 = fsub double %208, %306
%309 = fmul double %257, %491
%310 = insertelement <2 x double> undef, double %309, i32 0
%311 = shufflevector <2 x double> %310, <2 x double> undef, <2 x i32> zeroinitializer
%312 = fmul <2 x double> %226, %311
%313 = fmul double %225, %309
%314 = fadd <2 x double> %217, %312
%315 = fadd double %207, %313
%316 = fmul <2 x double> %267, %547
%317 = shufflevector <2 x double> %316, <2 x double> undef, <2 x i32> zeroinitializer
%318 = fmul <2 x double> %228, %317
%319 = fsub <2 x double> %307, %318
%320 = fmul <2 x double> %232, %316
%321 = extractelement <2 x double> %320, i32 0
%322 = fsub double %308, %321
%323 = extractelement <2 x double> %267, i32 0
%324 = fmul double %323, %491
%325 = insertelement <2 x double> undef, double %324, i32 0
%326 = shufflevector <2 x double> %325, <2 x double> undef, <2 x i32> zeroinitializer
%327 = fmul <2 x double> %228, %326
%328 = extractelement <2 x double> %232, i32 0
%329 = fmul double %328, %324
%330 = fadd <2 x double> %327, %219
%331 = fadd double %329, %206
%332 = shufflevector <2 x double> %316, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%333 = fmul <2 x double> %233, %332
%334 = fsub <2 x double> %319, %333
%335 = extractelement <2 x double> %320, i32 1
%336 = fsub double %322, %335
%337 = shufflevector <2 x double> %278, <2 x double> %267, <2 x i32> <i32 1, i32 3>
%338 = fmul <2 x double> %337, %549
%339 = shufflevector <2 x double> %239, <2 x double> %233, <2 x i32> <i32 0, i32 2>
%340 = fmul <2 x double> %339, %338
%341 = shufflevector <2 x double> %239, <2 x double> %233, <2 x i32> <i32 1, i32 3>
%342 = fmul <2 x double> %341, %338
%343 = shufflevector <2 x double> %340, <2 x double> %342, <2 x i32> <i32 1, i32 3>
%344 = fadd <2 x double> %343, %220
%345 = shufflevector <2 x double> %238, <2 x double> %232, <2 x i32> <i32 1, i32 3>
%346 = fmul <2 x double> %345, %338
%347 = extractelement <2 x double> %346, i32 1
%348 = fadd double %347, %205
%349 = fmul <4 x double> %301, %545
%350 = shufflevector <4 x double> %349, <4 x double> undef, <2 x i32> <i32 3, i32 3>
%351 = fmul <2 x double> %234, %350
%352 = fsub <2 x double> %334, %351
%353 = extractelement <4 x double> %301, i32 3
%354 = fmul double %353, %491
%355 = insertelement <2 x double> undef, double %354, i32 0
%356 = shufflevector <2 x double> %355, <2 x double> undef, <2 x i32> zeroinitializer
%357 = fmul <2 x double> %234, %356
%358 = extractelement <4 x double> %247, i32 3
%359 = fmul double %358, %354
%360 = fadd <2 x double> %357, %221
%361 = fadd double %359, %204
%362 = fmul <2 x double> %278, %547
%363 = shufflevector <2 x double> %362, <2 x double> undef, <2 x i32> zeroinitializer
%364 = fmul <2 x double> %236, %363
%365 = fsub <2 x double> %314, %364
%366 = fmul <2 x double> %238, %362
%367 = extractelement <2 x double> %366, i32 0
%368 = fsub double %315, %367
%369 = extractelement <2 x double> %278, i32 0
%370 = insertelement <2 x double> undef, double %369, i32 0
%371 = insertelement <2 x double> %370, double %287, i32 1
%372 = fmul <2 x double> %371, %550
%373 = extractelement <2 x double> %238, i32 0
%374 = shufflevector <2 x double> %236, <2 x double> %243, <2 x i32> <i32 0, i32 2>
%375 = fmul <2 x double> %374, %372
%376 = shufflevector <2 x double> %270, <2 x double> %243, <2 x i32> <i32 0, i32 3>
%377 = fmul <2 x double> %376, %372
%378 = shufflevector <2 x double> %375, <2 x double> %377, <2 x i32> <i32 0, i32 2>
%379 = fadd <2 x double> %378, %330
%380 = insertelement <2 x double> undef, double %373, i32 0
%381 = insertelement <2 x double> %380, double %242, i32 1
%382 = fmul <2 x double> %381, %372
%383 = extractelement <2 x double> %382, i32 0
%384 = fadd double %383, %331
%385 = shufflevector <2 x double> %362, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%386 = fmul <2 x double> %239, %385
%387 = fsub <2 x double> %365, %386
%388 = extractelement <2 x double> %366, i32 1
%389 = fsub double %368, %388
%390 = shufflevector <2 x double> %340, <2 x double> %342, <2 x i32> <i32 0, i32 2>
%391 = fadd <2 x double> %390, %344
%392 = extractelement <2 x double> %346, i32 0
%393 = fadd double %392, %348
%394 = shufflevector <4 x double> %349, <4 x double> undef, <2 x i32> <i32 2, i32 2>
%395 = fmul <2 x double> %240, %394
%396 = fsub <2 x double> %387, %395
%397 = extractelement <4 x double> %301, i32 2
%398 = fmul double %397, %487
%399 = insertelement <2 x double> undef, double %398, i32 0
%400 = shufflevector <2 x double> %399, <2 x double> undef, <2 x i32> zeroinitializer
%401 = fmul <2 x double> %240, %400
%402 = extractelement <4 x double> %247, i32 2
%403 = fmul double %402, %398
%404 = fadd <2 x double> %401, %360
%405 = fadd double %403, %361
%406 = shufflevector <2 x double> %375, <2 x double> %377, <2 x i32> <i32 1, i32 3>
%407 = fsub <2 x double> %379, %406
%408 = extractelement <2 x double> %382, i32 1
%409 = fsub double %384, %408
%410 = fmul double %287, %494
%411 = insertelement <2 x double> undef, double %410, i32 0
%412 = shufflevector <2 x double> %411, <2 x double> undef, <2 x i32> zeroinitializer
%413 = fmul <2 x double> %243, %412
%414 = fmul double %242, %410
%415 = fadd <2 x double> %413, %391
%416 = fadd double %414, %393
%417 = shufflevector <4 x double> %349, <4 x double> undef, <2 x i32> <i32 1, i32 1>
%418 = fmul <2 x double> %244, %417
%419 = fsub <2 x double> %407, %418
%420 = shufflevector <4 x double> %301, <4 x double> undef, <2 x i32> <i32 0, i32 1>
%421 = fmul <2 x double> %420, %552
%422 = shufflevector <2 x double> %421, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%423 = fmul <2 x double> %244, %422
%424 = fadd <2 x double> %423, %404
%425 = shufflevector <4 x double> %247, <4 x double> undef, <2 x i32> <i32 0, i32 1>
%426 = fmul <2 x double> %425, %421
%427 = extractelement <2 x double> %426, i32 1
%428 = fadd double %427, %405
%429 = shufflevector <4 x double> %349, <4 x double> undef, <2 x i32> zeroinitializer
%430 = fmul <2 x double> %248, %429
%431 = fmul <4 x double> %247, %349
%432 = fsub <2 x double> %415, %430
%433 = insertelement <4 x double> undef, double %416, i32 0
%434 = insertelement <4 x double> %433, double %409, i32 1
%435 = insertelement <4 x double> %434, double %389, i32 2
%436 = insertelement <4 x double> %435, double %336, i32 3
%437 = fsub <4 x double> %436, %431
%438 = shufflevector <2 x double> %421, <2 x double> undef, <2 x i32> zeroinitializer
%439 = fmul <2 x double> %248, %438
%440 = fadd <2 x double> %439, %424
%441 = extractelement <2 x double> %426, i32 0
%442 = fadd double %441, %428
%443 = fmul <2 x double> %352, <double 1.000000e-02, double 1.000000e-02>
%444 = fadd <2 x double> %211, %443
%445 = fmul <2 x double> %396, <double 1.000000e-02, double 1.000000e-02>
%446 = fadd <2 x double> %213, %445
%447 = fmul <2 x double> %419, <double 1.000000e-02, double 1.000000e-02>
%448 = fadd <2 x double> %214, %447
%449 = fmul <2 x double> %432, <double 1.000000e-02, double 1.000000e-02>
%450 = fmul <4 x double> %437, <double 1.000000e-02, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02>
%451 = fadd <2 x double> %215, %449
%452 = fadd <4 x double> %218, %450
%453 = fmul <2 x double> %440, <double 1.000000e-02, double 1.000000e-02>
%454 = fmul double %442, 1.000000e-02
%455 = fadd <2 x double> %216, %453
%456 = fadd double %209, %454
%457 = icmp slt i32 %222, %170
%458 = extractelement <4 x double> %437, i32 0
%459 = extractelement <4 x double> %437, i32 1
%460 = extractelement <4 x double> %437, i32 2
%461 = extractelement <4 x double> %437, i32 3
br i1 %457, label %203, label %172
; <label>:462: ; preds = %33
%463 = landingpad { i8*, i32 }
cleanup
br label %466
; <label>:464: ; preds = %44, %0
%465 = landingpad { i8*, i32 }
cleanup
br label %466
; <label>:466: ; preds = %464, %462, %70
%467 = phi { i8*, i32 } [ %71, %70 ], [ %463, %462 ], [ %465, %464 ]
call fastcc void @_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E(%"std::env::ArgsOs"* nonnull %14) #7
resume { i8*, i32 } %467
; <label>:468: ; preds = %133
%469 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 6
%470 = bitcast i64* %469 to double*
%471 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 2
%472 = bitcast i64* %471 to double*
%473 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 14
%474 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 7
%475 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 9
%476 = bitcast i64* %475 to double*
%477 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 21
%478 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 16
%479 = bitcast i64* %478 to double*
%480 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 28
%481 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 23
%482 = bitcast i64* %481 to double*
%483 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 0, i32 0, i64 30
%484 = bitcast i64* %483 to double*
%485 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 6
%486 = bitcast i64* %485 to double*
%487 = load double, double* %486, align 8
%488 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 3
%489 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 5
%490 = bitcast i64* %489 to double*
%491 = load double, double* %470, align 16
%492 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 13
%493 = bitcast i64* %492 to double*
%494 = load double, double* %493, align 8
%495 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 10
%496 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 12
%497 = bitcast i64* %496 to double*
%498 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 20
%499 = bitcast i64* %498 to double*
%500 = load double, double* %499, align 8
%501 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 17
%502 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 19
%503 = bitcast i64* %502 to double*
%504 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 27
%505 = bitcast i64* %504 to double*
%506 = load double, double* %505, align 8
%507 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 24
%508 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %11, i64 0, i64 1, i32 0, i64 26
%509 = bitcast i64* %508 to double*
%510 = load double, double* %472, align 16
%511 = bitcast [5 x %Planet]* %11 to <2 x double>*
%512 = load <2 x double>, <2 x double>* %511, align 16
%513 = load double, double* %476, align 8
%514 = bitcast i64* %474 to <2 x double>*
%515 = load <2 x double>, <2 x double>* %514, align 8
%516 = load double, double* %479, align 16
%517 = bitcast i64* %473 to <2 x double>*
%518 = load <2 x double>, <2 x double>* %517, align 16
%519 = load double, double* %482, align 8
%520 = bitcast i64* %477 to <2 x double>*
%521 = load <2 x double>, <2 x double>* %520, align 8
%522 = load double, double* %484, align 16
%523 = bitcast i64* %480 to <2 x double>*
%524 = load <2 x double>, <2 x double>* %523, align 16
%525 = bitcast i64* %147 to <2 x double>*
%526 = load <2 x double>, <2 x double>* %525, align 8
%527 = load double, double* %152, align 8
%528 = bitcast i64* %488 to <2 x double>*
%529 = load <2 x double>, <2 x double>* %528, align 8
%530 = load double, double* %490, align 8
%531 = bitcast i64* %495 to <2 x double>*
%532 = load <2 x double>, <2 x double>* %531, align 8
%533 = load double, double* %497, align 8
%534 = bitcast i64* %501 to <2 x double>*
%535 = load <2 x double>, <2 x double>* %534, align 8
%536 = load double, double* %503, align 8
%537 = bitcast i64* %507 to <2 x double>*
%538 = load <2 x double>, <2 x double>* %537, align 8
%539 = load double, double* %509, align 8
%540 = insertelement <4 x double> undef, double %519, i32 0
%541 = insertelement <4 x double> %540, double %516, i32 1
%542 = insertelement <4 x double> %541, double %513, i32 2
%543 = insertelement <4 x double> %542, double %510, i32 3
%544 = insertelement <4 x double> undef, double %506, i32 0
%545 = shufflevector <4 x double> %544, <4 x double> undef, <4 x i32> zeroinitializer
%546 = insertelement <2 x double> undef, double %494, i32 0
%547 = insertelement <2 x double> %546, double %500, i32 1
%548 = insertelement <2 x double> undef, double %487, i32 0
%549 = insertelement <2 x double> %548, double %491, i32 1
%550 = insertelement <2 x double> %548, double %500, i32 1
%551 = insertelement <2 x double> undef, double %500, i32 0
%552 = insertelement <2 x double> %551, double %494, i32 1
br label %203
}
declare i32 @rust_eh_personality(i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*) unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #4
declare i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull, {}* noalias nonnull readonly, i64, i8**) unnamed_addr
declare i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"() unnamed_addr
; Function Attrs: nounwind readnone speculatable
declare double @llvm.sqrt.f64(double) #5
declare i64 @"_ZN4core3num52_$LT$impl$u20$core..str..FromStr$u20$for$u20$i32$GT$8from_str17h99b48ffb87a27724E"([0 x i8]* noalias nonnull readonly, i64) unnamed_addr
; Function Attrs: nounwind
declare void @__rust_dealloc(i8*, i64, i64) unnamed_addr #6
declare void @"_ZN67_$LT$std..env..ArgsOs$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h2da8ead691074258E"(%"core::option::Option<std::ffi::os_str::OsString>"* noalias nocapture sret dereferenceable(24), %"std::env::ArgsOs"* dereferenceable(32)) unnamed_addr
declare void @_ZN3std3env7args_os17h0e97fc174faccbd6E(%"std::env::ArgsOs"* noalias nocapture sret dereferenceable(32)) unnamed_addr
declare zeroext i1 @"_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h8208a598556d09a5E"(i32* noalias readonly dereferenceable(4), %"core::fmt::Formatter"* dereferenceable(96)) unnamed_addr
declare void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture dereferenceable(48)) unnamed_addr
declare zeroext i1 @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E"(double* noalias readonly dereferenceable(8), %"core::fmt::Formatter"* dereferenceable(96)) unnamed_addr
declare void @_ZN3std3ffi6os_str8OsString11into_string17h567757e2e42e16abE(%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* noalias nocapture sret dereferenceable(32), %"std::ffi::os_str::OsString"* noalias nocapture dereferenceable(24)) unnamed_addr
define i32 @main(i32, i8**) unnamed_addr {
%3 = alloca i8*, align 8
%4 = sext i32 %0 to i64
%5 = bitcast i8** %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %5)
%6 = bitcast i8** %3 to void ()**
store void ()* @_ZN4test4main17h6f2dd3dc2bc8dfe6E, void ()** %6, align 8
%7 = bitcast i8** %3 to {}*
%8 = call i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull %7, {}* noalias nonnull readonly bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* }* @vtable.4 to {}*), i64 %4, i8** %1)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5)
%9 = trunc i64 %8 to i32
ret i32 %9
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #4
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #4
; Function Attrs: nounwind readnone speculatable
declare <4 x double> @llvm.sqrt.v4f64(<4 x double>) #5
; Function Attrs: nounwind readnone speculatable
declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #5
attributes #0 = { uwtable }
attributes #1 = { norecurse nounwind readnone uwtable }
attributes #2 = { nounwind uwtable }
attributes #3 = { nounwind readonly uwtable }
attributes #4 = { argmemonly nounwind }
attributes #5 = { nounwind readnone speculatable }
attributes #6 = { nounwind }
attributes #7 = { noinline }
!llvm.module.flags = !{!0}
!0 = !{i32 7, !"PIE Level", i32 2}
!1 = !{}
!2 = !{!3}
!3 = distinct !{!3, !4, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E: argument 0"}
!4 = distinct !{!4, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E"}
!5 = !{!6, !8}
!6 = distinct !{!6, !7, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE: argument 0"}
!7 = distinct !{!7, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE"}
!8 = distinct !{!8, !9, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E: argument 0"}
!9 = distinct !{!9, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E"}
!10 = !{!11}
!11 = distinct !{!11, !12, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E: argument 0"}
!12 = distinct !{!12, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E"}
!13 = !{!14, !16, !18, !20}
!14 = distinct !{!14, !15, !"_ZN4test6energy28_$u7b$$u7b$closure$u7d$$u7d$17ha38cbc1d8f4f6c5eE: argument 0"}
!15 = distinct !{!15, !"_ZN4test6energy28_$u7b$$u7b$closure$u7d$$u7d$17ha38cbc1d8f4f6c5eE"}
!16 = distinct !{!16, !17, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold28_$u7b$$u7b$closure$u7d$$u7d$17hdbb45dd658aa063fE: argument 0"}
!17 = distinct !{!17, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold28_$u7b$$u7b$closure$u7d$$u7d$17hdbb45dd658aa063fE"}
!18 = distinct !{!18, !19, !"_ZN91_$LT$core..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17hecd838a7900d1617E: argument 0"}
!19 = distinct !{!19, !"_ZN91_$LT$core..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17hecd838a7900d1617E"}
!20 = distinct !{!20, !21, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17ha5d8ab8ae0e98620E: argument 0"}
!21 = distinct !{!21, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17ha5d8ab8ae0e98620E"}
!22 = !{!14, !16}
!23 = !{!18, !20}
!24 = !{!25}
!25 = distinct !{!25, !26, !"_ZN4core4iter8iterator8Iterator3nth17h1563a4e0b7230cedE: argument 0"}
!26 = distinct !{!26, !"_ZN4core4iter8iterator8Iterator3nth17h1563a4e0b7230cedE"}
!27 = !{!28, !30, !31, !33}
!28 = distinct !{!28, !29, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE: argument 0"}
!29 = distinct !{!29, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE"}
!30 = distinct !{!30, !29, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE: argument 1"}
!31 = distinct !{!31, !32, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E: argument 0"}
!32 = distinct !{!32, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E"}
!33 = distinct !{!33, !32, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E: argument 1"}
!34 = !{i64 0, i64 2}
!35 = !{!36}
!36 = distinct !{!36, !37, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E: argument 1"}
!37 = distinct !{!37, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E"}
!38 = !{!39, !28, !30, !31, !33}
!39 = distinct !{!39, !37, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E: argument 0"}
!40 = !{!39, !36, !28, !30, !31, !33}
!41 = !{!42}
!42 = distinct !{!42, !43, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hed108e8b4b447622E: argument 0"}
!43 = distinct !{!43, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hed108e8b4b447622E"}
!44 = !{!45, !47, !49}
!45 = distinct !{!45, !46, !"_ZN68_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..Deref$GT$5deref17h15454f68f103465cE: argument 0"}
!46 = distinct !{!46, !"_ZN68_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..Deref$GT$5deref17h15454f68f103465cE"}
!47 = distinct !{!47, !48, !"_ZN65_$LT$alloc..string..String$u20$as$u20$core..ops..deref..Deref$GT$5deref17h592502204d4931f8E: argument 0"}
!48 = distinct !{!48, !"_ZN65_$LT$alloc..string..String$u20$as$u20$core..ops..deref..Deref$GT$5deref17h592502204d4931f8E"}
!49 = distinct !{!49, !50, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hab760d6fcd6093b0E: argument 0"}
!50 = distinct !{!50, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hab760d6fcd6093b0E"}
!51 = !{!49, !42}
!52 = !{!49}
!53 = !{!54, !56}
!54 = distinct !{!54, !55, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE: argument 0"}
!55 = distinct !{!55, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE"}
!56 = distinct !{!56, !57, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E: argument 0"}
!57 = distinct !{!57, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E"}
!58 = !{!59}
!59 = distinct !{!59, !60, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!60 = distinct !{!60, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!61 = !{!62, !63, !64}
!62 = distinct !{!62, !60, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!63 = distinct !{!63, !60, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!64 = distinct !{!64, !60, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
!65 = !{!66}
!66 = distinct !{!66, !67, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!67 = distinct !{!67, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!68 = !{!69, !70, !71}
!69 = distinct !{!69, !67, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!70 = distinct !{!70, !67, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!71 = distinct !{!71, !67, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
!72 = !{!73}
!73 = distinct !{!73, !74, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!74 = distinct !{!74, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!75 = !{!76, !77, !78}
!76 = distinct !{!76, !74, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!77 = distinct !{!77, !74, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!78 = distinct !{!78, !74, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
; ModuleID = 'test-pgo-use.test0.rcgu.bc'
source_filename = "test0-317d481089b8c8fe83113de504472633.rs"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%Planet = type { [0 x i64], %Vec3, [0 x i64], %Vec3, [0 x i64], double, [0 x i64] }
%Vec3 = type { [0 x i64], double, [0 x i64], double, [0 x i64], double, [0 x i64] }
%"std::env::ArgsOs" = type { [0 x i64], %"std::sys::unix::args::Args", [0 x i64] }
%"std::sys::unix::args::Args" = type { [0 x i8], %"core::marker::PhantomData<*mut ()>", [0 x i8], %"alloc::vec::IntoIter<std::ffi::os_str::OsString>", [0 x i64] }
%"core::marker::PhantomData<*mut ()>" = type {}
%"alloc::vec::IntoIter<std::ffi::os_str::OsString>" = type { [0 x i8], %"core::marker::PhantomData<std::ffi::os_str::OsString>", [0 x i8], i64*, [0 x i64], i64, [0 x i64], %"std::ffi::os_str::OsString"*, [0 x i64], %"std::ffi::os_str::OsString"*, [0 x i64] }
%"core::marker::PhantomData<std::ffi::os_str::OsString>" = type {}
%"std::ffi::os_str::OsString" = type { [0 x i64], %"std::sys::unix::os_str::Buf", [0 x i64] }
%"std::sys::unix::os_str::Buf" = type { [0 x i64], %"alloc::vec::Vec<u8>", [0 x i64] }
%"alloc::vec::Vec<u8>" = type { [0 x i64], { i8*, i64 }, [0 x i64], i64, [0 x i64] }
%"alloc::string::String" = type { [0 x i64], %"alloc::vec::Vec<u8>", [0 x i64] }
%"core::ptr::swap_nonoverlapping_bytes::UnalignedBlock" = type { [0 x i64], i64, [0 x i64], i64, [0 x i64], i64, [0 x i64], i64, [0 x i64] }
%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>" = type { [0 x i64], i64, [3 x i64] }
%"core::option::Option<std::ffi::os_str::OsString>" = type { [0 x i64], {}*, [2 x i64] }
%"core::fmt::Arguments" = type { [0 x i64], { [0 x { [0 x i8]*, i64 }]*, i64 }, [0 x i64], %"core::option::Option<&[core::fmt::rt::v1::Argument]>", [0 x i64], { [0 x { i8*, i8* }]*, i64 }, [0 x i64] }
%"core::option::Option<&[core::fmt::rt::v1::Argument]>" = type { [0 x i64], {}*, [1 x i64] }
%"core::option::Option<alloc::string::String>" = type { [0 x i64], {}*, [2 x i64] }
%"core::fmt::rt::v1::Argument" = type { [0 x i64], %"core::fmt::rt::v1::Position", [0 x i64], %"core::fmt::rt::v1::FormatSpec", [0 x i64] }
%"core::fmt::rt::v1::Position" = type { [0 x i64], i64, [1 x i64] }
%"core::fmt::rt::v1::FormatSpec" = type { [0 x i64], %"core::fmt::rt::v1::Count", [0 x i64], %"core::fmt::rt::v1::Count", [0 x i32], i32, [0 x i32], i32, [0 x i8], i8, [7 x i8] }
%"core::fmt::rt::v1::Count" = type { [0 x i64], i64, [1 x i64] }
%"unwind::libunwind::_Unwind_Exception" = type { [0 x i64], i64, [0 x i64], void (i32, %"unwind::libunwind::_Unwind_Exception"*)*, [0 x i64], [6 x i64], [0 x i64] }
%"unwind::libunwind::_Unwind_Context" = type { [0 x i8] }
%"core::fmt::Formatter" = type { [0 x i64], %"core::option::Option<usize>", [0 x i64], %"core::option::Option<usize>", [0 x i64], { {}*, {}* }, [0 x i64], { i64*, i64* }, [0 x i64], { [0 x { i8*, i8* }]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i8], i8, [7 x i8] }
%"core::option::Option<usize>" = type { [0 x i64], i64, [1 x i64] }
@str.0 = internal constant [43 x i8] c"called `Option::unwrap()` on a `None` value"
@str.1 = internal constant [17 x i8] c"libcore/option.rs"
@ref.2 = private unnamed_addr constant { [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] } { [0 x i8] undef, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([43 x i8]* @str.0 to [0 x i8]*), i64 43 }, [0 x i8] undef, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([17 x i8]* @str.1 to [0 x i8]*), i64 17 }, [0 x i8] undef, i32 335, [0 x i8] undef, i32 21, [0 x i8] undef }, align 8
@vtable.4 = private unnamed_addr constant { void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* } { void (i8**)* @_ZN4core3ptr13drop_in_place17h3bd07621d6b15e9aE, i64 8, i64 8, i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E", i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E", i32 (i8*)* @_ZN4core3ops8function6FnOnce9call_once17he8c51a13e1ce2e56E }, align 8
@str.j = internal constant [28 x i8] c"assertion failed: mid <= len"
@str.k = internal constant [20 x i8] c"libcore/slice/mod.rs"
@ref.l = private unnamed_addr constant { [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] } { [0 x i8] undef, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([28 x i8]* @str.j to [0 x i8]*), i64 28 }, [0 x i8] undef, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([20 x i8]* @str.k to [0 x i8]*), i64 20 }, [0 x i8] undef, i32 457, [0 x i8] undef, i32 13, [0 x i8] undef }, align 8
@_ZN4test6BODIES17h6b5b7f6a11be243fE = internal unnamed_addr constant { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } } { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef, double 0.000000e+00, [0 x i8] undef }, [0 x i8] undef, double 0x4043BD3CC9BE45DE, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x40135DA0343CD92C, [0 x i8] undef, double 0xBFF290ABC01FDB7C, [0 x i8] undef, double 0xBFBA86F96C25EBF0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FE367069B93CCBC, [0 x i8] undef, double 0x40067EF2F57D949B, [0 x i8] undef, double 0xBF99D2D79A5A0715, [0 x i8] undef }, [0 x i8] undef, double 0x3FA34C95D9AB33D8, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x4020AFCDC332CA67, [0 x i8] undef, double 0x40107FCB31DE01B0, [0 x i8] undef, double 0xBFD9D353E1EB467C, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0xBFF02C21B8879442, [0 x i8] undef, double 0x3FFD35E9BF1F8F13, [0 x i8] undef, double 0x3F813C485F1123B4, [0 x i8] undef }, [0 x i8] undef, double 0x3F871D490D07C637, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x4029C9EACEA7D9CF, [0 x i8] undef, double 0xC02E38E8D626667E, [0 x i8] undef, double 0xBFCC9557BE257DA0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FF1531CA9911BEF, [0 x i8] undef, double 0x3FEBCC7F3E54BBC5, [0 x i8] undef, double 0xBF862F6BFAF23E7C, [0 x i8] undef }, [0 x i8] undef, double 0x3F5C3DD29CF41EB3, [0 x i8] undef }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } { [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x402EC267A905572A, [0 x i8] undef, double 0xC039EB5833C8A220, [0 x i8] undef, double 0x3FC6F1F393ABE540, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] } { [0 x i8] undef, double 0x3FEF54B61659BC4A, [0 x i8] undef, double 0x3FE307C631C4FBA3, [0 x i8] undef, double 0xBFA1CB88587665F6, [0 x i8] undef }, [0 x i8] undef, double 0x3F60A8F3531799AC, [0 x i8] undef } }, align 8
@str.q = internal constant [0 x i8] zeroinitializer
@str.r = internal constant [1 x i8] c"\0A"
@ref.s = private unnamed_addr constant [2 x { [0 x i8]*, i64 }] [{ [0 x i8]*, i64 } { [0 x i8]* @str.q, i64 0 }, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([1 x i8]* @str.r to [0 x i8]*), i64 1 }], align 8
@ref.t = private unnamed_addr constant { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } } { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 1, [0 x i8] undef, i64 0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] } { [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, i32 32, [0 x i8] undef, i32 0, [0 x i8] undef, i8 3, [7 x i8] undef }, [0 x i8] undef } }, align 8
@ref.v = private unnamed_addr constant { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } } { { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 1, [0 x i8] undef, i64 0, [0 x i8] undef }, [0 x i8] undef, { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] } { [0 x i8] undef, { i64, [0 x i8], i64, [0 x i8] } { i64 0, [0 x i8] undef, i64 9, [0 x i8] undef }, [0 x i8] undef, <{ i64, [8 x i8] }> <{ i64 3, [8 x i8] undef }>, [0 x i8] undef, i32 32, [0 x i8] undef, i32 0, [0 x i8] undef, i8 3, [7 x i8] undef }, [0 x i8] undef } }, align 8
@ref_mut.x = private unnamed_addr global [0 x %Planet] zeroinitializer, align 8
; Function Attrs: cold uwtable
define hidden i64 @_ZN3std2rt10lang_start17h7057daff8a3d666bE(void ()* nonnull, i64, i8**) unnamed_addr #0 !prof !28 {
%4 = alloca i8*, align 8
%5 = bitcast i8** %4 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %5)
%6 = bitcast i8** %4 to void ()**
store void ()* %0, void ()** %6, align 8
%7 = bitcast i8** %4 to {}*
%8 = call i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull %7, {}* noalias nonnull readonly bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* }* @vtable.4 to {}*), i64 %1, i8** %2)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5)
ret i64 %8
}
; Function Attrs: cold uwtable
define internal i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E"(i8** noalias nocapture readonly dereferenceable(8)) unnamed_addr #0 !prof !29 !PGOFuncName !30 {
%2 = bitcast i8** %0 to void ()**
%3 = load void ()*, void ()** %2, align 8, !nonnull !31
tail call void %3(), !prof !32
%4 = tail call i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"()
ret i32 %4
}
; Function Attrs: cold uwtable
define internal i32 @_ZN4core3ops8function6FnOnce9call_once17he8c51a13e1ce2e56E(i8* nocapture nonnull) unnamed_addr #0 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality !prof !28 !PGOFuncName !33 {
%2 = bitcast i8* %0 to void ()*
tail call void %2(), !noalias !34
%3 = tail call i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"(), !noalias !34
ret i32 %3
}
; Function Attrs: cold norecurse nounwind readnone uwtable
define internal void @_ZN4core3ptr13drop_in_place17h3bd07621d6b15e9aE(i8** nocapture) unnamed_addr #1 !prof !28 !PGOFuncName !37 {
ret void
}
; Function Attrs: cold nounwind uwtable
define internal fastcc void @_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E(%"std::env::ArgsOs"* nocapture) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality !prof !29 !PGOFuncName !38 {
%2 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 7
%3 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !39
%4 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 9
%5 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %4, align 8, !noalias !39
%6 = icmp eq %"std::ffi::os_str::OsString"* %3, %5
br i1 %6, label %20, label %7, !prof !44
; <label>:7: ; preds = %1
br label %8
; <label>:8: ; preds = %31, %7
%9 = phi %"std::ffi::os_str::OsString"* [ %32, %31 ], [ %5, %7 ]
%10 = phi %"std::ffi::os_str::OsString"* [ %33, %31 ], [ %3, %7 ]
%11 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %10, i64 1
store %"std::ffi::os_str::OsString"* %11, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !39
%12 = bitcast %"std::ffi::os_str::OsString"* %10 to {}**
%13 = load {}*, {}** %12, align 8
%14 = bitcast {}* %13 to i8*
%15 = getelementptr inbounds %"std::ffi::os_str::OsString", %"std::ffi::os_str::OsString"* %10, i64 0, i32 1, i32 1, i32 1, i32 1
%16 = load i64, i64* %15, align 8
%17 = icmp eq {}* %13, null
br i1 %17, label %20, label %18, !prof !45
; <label>:18: ; preds = %8
%19 = icmp eq i64 %16, 0
br i1 %19, label %31, label %28
; <label>:20: ; preds = %31, %8, %1
%21 = getelementptr inbounds %"std::env::ArgsOs", %"std::env::ArgsOs"* %0, i64 0, i32 1, i32 3, i32 5
%22 = load i64, i64* %21, align 8
%23 = icmp eq i64 %22, 0
br i1 %23, label %35, label %24, !prof !46
; <label>:24: ; preds = %20
%25 = bitcast %"std::env::ArgsOs"* %0 to i8**
%26 = load i8*, i8** %25, align 8, !nonnull !31
%27 = mul i64 %22, 24
tail call void @__rust_dealloc(i8* nonnull %26, i64 %27, i64 8)
br label %35
; <label>:28: ; preds = %18
tail call void @__rust_dealloc(i8* nonnull %14, i64 %16, i64 1)
%29 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %2, align 8, !noalias !39
%30 = load %"std::ffi::os_str::OsString"*, %"std::ffi::os_str::OsString"** %4, align 8, !noalias !39
br label %31
; <label>:31: ; preds = %28, %18
%32 = phi %"std::ffi::os_str::OsString"* [ %30, %28 ], [ %9, %18 ]
%33 = phi %"std::ffi::os_str::OsString"* [ %29, %28 ], [ %11, %18 ]
%34 = icmp eq %"std::ffi::os_str::OsString"* %33, %32
br i1 %34, label %20, label %8, !prof !44
; <label>:35: ; preds = %24, %20
ret void
}
; Function Attrs: cold nounwind uwtable
define internal fastcc void @_ZN4core3ptr13drop_in_place17hce82c5074859547eE(%"alloc::string::String"* nocapture readonly) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality !prof !28 !PGOFuncName !47 {
%2 = getelementptr inbounds %"alloc::string::String", %"alloc::string::String"* %0, i64 0, i32 1, i32 1, i32 1
%3 = load i64, i64* %2, align 8, !alias.scope !48, !noalias !51
%4 = icmp eq i64 %3, 0
br i1 %4, label %8, label %5
; <label>:5: ; preds = %1
%6 = bitcast %"alloc::string::String"* %0 to i8**
%7 = load i8*, i8** %6, align 8, !alias.scope !53, !nonnull !31
tail call void @__rust_dealloc(i8* nonnull %7, i64 %3, i64 1)
br label %8
; <label>:8: ; preds = %5, %1
ret void
}
; Function Attrs: cold nounwind uwtable
define internal fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias readonly dereferenceable(280)) unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality !prof !56 !PGOFuncName !57 {
%2 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 0
%3 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 5, i32 0, i64 0
%4 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %0, i64 0, i64 0, i32 0, i64 7
br label %7
; <label>:5: ; preds = %133, %35
%6 = phi double [ %38, %35 ], [ %137, %133 ]
ret double %6
; <label>:7: ; preds = %133, %1
%8 = phi i64* [ %4, %1 ], [ %139, %133 ]
%9 = phi double [ 0.000000e+00, %1 ], [ %137, %133 ]
%10 = phi i64* [ %2, %1 ], [ %8, %133 ]
%11 = getelementptr inbounds i64, i64* %10, i64 3
%12 = bitcast i64* %11 to double*
%13 = load double, double* %12, align 8, !alias.scope !58
%14 = fmul double %13, %13
%15 = getelementptr inbounds i64, i64* %10, i64 4
%16 = bitcast i64* %15 to double*
%17 = load double, double* %16, align 8, !alias.scope !58
%18 = fmul double %17, %17
%19 = fadd double %14, %18
%20 = getelementptr inbounds i64, i64* %10, i64 5
%21 = bitcast i64* %20 to double*
%22 = load double, double* %21, align 8, !alias.scope !58
%23 = fmul double %22, %22
%24 = fadd double %19, %23
%25 = icmp ne i64* %10, null
tail call void @llvm.assume(i1 %25)
%26 = getelementptr inbounds i64, i64* %10, i64 6
%27 = bitcast i64* %26 to double*
%28 = load double, double* %27, align 8
%29 = fmul double %24, %28
%30 = fmul double %29, 5.000000e-01
%31 = icmp ne i64* %8, null
tail call void @llvm.assume(i1 %31), !noalias !61
%32 = icmp eq i64* %8, %3
%33 = icmp eq i64* %8, null
%34 = or i1 %32, %33
br i1 %34, label %35, label %39, !prof !66
; <label>:35: ; preds = %7
%36 = fmul double %28, 0.000000e+00
%37 = fsub double %30, %36
%38 = fadd double %9, %37
br label %5
; <label>:39: ; preds = %7
%40 = bitcast i64* %10 to double*
%41 = load double, double* %40, align 8, !noalias !67
%42 = getelementptr inbounds i64, i64* %10, i64 1
%43 = bitcast i64* %42 to double*
%44 = load double, double* %43, align 8, !noalias !67
%45 = getelementptr inbounds i64, i64* %10, i64 2
%46 = bitcast i64* %45 to double*
%47 = load double, double* %46, align 8, !noalias !67
%48 = insertelement <2 x double> undef, double %41, i32 0
%49 = insertelement <2 x double> %48, double %47, i32 1
%50 = getelementptr inbounds i64, i64* %8, i64 7
%51 = getelementptr inbounds i64, i64* %8, i64 6
%52 = bitcast i64* %51 to double*
%53 = load double, double* %52, align 8, !alias.scope !72, !noalias !61
%54 = bitcast i64* %8 to double*
%55 = load double, double* %54, align 8, !alias.scope !72, !noalias !61
%56 = getelementptr inbounds i64, i64* %8, i64 1
%57 = bitcast i64* %56 to double*
%58 = load double, double* %57, align 8, !alias.scope !72, !noalias !61
%59 = getelementptr inbounds i64, i64* %8, i64 2
%60 = bitcast i64* %59 to double*
%61 = load double, double* %60, align 8, !alias.scope !72, !noalias !61
%62 = fsub double %44, %58
%63 = insertelement <2 x double> undef, double %55, i32 0
%64 = insertelement <2 x double> %63, double %61, i32 1
%65 = fsub <2 x double> %49, %64
%66 = fmul double %62, %62
%67 = fmul <2 x double> %65, %65
%68 = extractelement <2 x double> %67, i32 0
%69 = fadd double %68, %66
%70 = extractelement <2 x double> %67, i32 1
%71 = fadd double %69, %70
%72 = tail call double @llvm.sqrt.f64(double %71)
%73 = fdiv double %53, %72
%74 = fadd double %73, 0.000000e+00
%75 = icmp eq i64* %50, %3
br i1 %75, label %133, label %76, !prof !73
; <label>:76: ; preds = %39
%77 = getelementptr inbounds i64, i64* %8, i64 14
%78 = getelementptr inbounds i64, i64* %8, i64 13
%79 = bitcast i64* %78 to double*
%80 = load double, double* %79, align 8, !alias.scope !72, !noalias !61
%81 = bitcast i64* %50 to double*
%82 = load double, double* %81, align 8, !alias.scope !72, !noalias !61
%83 = getelementptr inbounds i64, i64* %8, i64 8
%84 = bitcast i64* %83 to double*
%85 = load double, double* %84, align 8, !alias.scope !72, !noalias !61
%86 = getelementptr inbounds i64, i64* %8, i64 9
%87 = bitcast i64* %86 to double*
%88 = load double, double* %87, align 8, !alias.scope !72, !noalias !61
%89 = fsub double %44, %85
%90 = insertelement <2 x double> undef, double %82, i32 0
%91 = insertelement <2 x double> %90, double %88, i32 1
%92 = fsub <2 x double> %49, %91
%93 = fmul double %89, %89
%94 = fmul <2 x double> %92, %92
%95 = extractelement <2 x double> %94, i32 0
%96 = fadd double %95, %93
%97 = extractelement <2 x double> %94, i32 1
%98 = fadd double %96, %97
%99 = tail call double @llvm.sqrt.f64(double %98)
%100 = fdiv double %80, %99
%101 = fadd double %74, %100
%102 = icmp eq i64* %77, %3
br i1 %102, label %133, label %103, !prof !74
; <label>:103: ; preds = %76
br label %104
; <label>:104: ; preds = %104, %103
%105 = phi double [ %101, %103 ], [ %131, %104 ]
%106 = phi i64* [ %77, %103 ], [ %107, %104 ]
%107 = getelementptr inbounds i64, i64* %106, i64 7
%108 = getelementptr inbounds i64, i64* %106, i64 6
%109 = bitcast i64* %108 to double*
%110 = load double, double* %109, align 8, !alias.scope !72, !noalias !61
%111 = bitcast i64* %106 to double*
%112 = load double, double* %111, align 8, !alias.scope !72, !noalias !61
%113 = getelementptr inbounds i64, i64* %106, i64 1
%114 = bitcast i64* %113 to double*
%115 = load double, double* %114, align 8, !alias.scope !72, !noalias !61
%116 = getelementptr inbounds i64, i64* %106, i64 2
%117 = bitcast i64* %116 to double*
%118 = load double, double* %117, align 8, !alias.scope !72, !noalias !61
%119 = fsub double %44, %115
%120 = insertelement <2 x double> undef, double %112, i32 0
%121 = insertelement <2 x double> %120, double %118, i32 1
%122 = fsub <2 x double> %49, %121
%123 = fmul double %119, %119
%124 = fmul <2 x double> %122, %122
%125 = extractelement <2 x double> %124, i32 0
%126 = fadd double %125, %123
%127 = extractelement <2 x double> %124, i32 1
%128 = fadd double %126, %127
%129 = tail call double @llvm.sqrt.f64(double %128)
%130 = fdiv double %110, %129
%131 = fadd double %105, %130
%132 = icmp eq i64* %107, %3
br i1 %132, label %133, label %104, !prof !75, !llvm.loop !76
; <label>:133: ; preds = %104, %76, %39
%134 = phi double [ %74, %39 ], [ %101, %76 ], [ %131, %104 ]
%135 = fmul double %28, %134
%136 = fsub double %30, %135
%137 = fadd double %9, %136
%138 = getelementptr inbounds i64, i64* %8, i64 7
%139 = select i1 %32, i64* %8, i64* %138, !prof !78
br i1 %34, label %5, label %7, !prof !79
}
; Function Attrs: uwtable
define internal void @_ZN4test4main17h6f2dd3dc2bc8dfe6E() unnamed_addr #3 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality !prof !29 !PGOFuncName !80 {
%1 = alloca %"core::ptr::swap_nonoverlapping_bytes::UnalignedBlock", align 8
%2 = alloca { [0 x %Planet]*, i64 }, align 8
%3 = alloca { [0 x %Planet]*, i64 }, align 8
%4 = alloca { [0 x i64], %"alloc::string::String", [0 x i64] }, align 8
%5 = alloca %"alloc::vec::Vec<u8>", align 8
%6 = alloca %"std::ffi::os_str::OsString", align 8
%7 = alloca %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", align 8
%8 = alloca %"core::option::Option<std::ffi::os_str::OsString>", align 8
%9 = alloca double, align 8
%10 = alloca [1 x { i8*, i8* }], align 8
%11 = alloca %"core::fmt::Arguments", align 8
%12 = alloca { i32, i32 }, align 4
%13 = alloca double, align 8
%14 = alloca [1 x { i8*, i8* }], align 8
%15 = alloca %"core::fmt::Arguments", align 8
%16 = alloca [10 x double], align 16
%17 = bitcast [10 x double]* %16 to i8*
%18 = alloca [10 x %Vec3], align 8
%19 = bitcast [10 x %Vec3]* %18 to i8*
%20 = alloca [5 x %Planet], align 16
%21 = alloca [1 x { i8*, i8* }], align 8
%22 = alloca %"core::fmt::Arguments", align 8
%23 = alloca %"std::env::ArgsOs", align 8
%24 = alloca %"core::option::Option<std::ffi::os_str::OsString>", align 8
%25 = alloca %"core::option::Option<alloc::string::String>", align 8
%26 = alloca i32, align 4
%27 = bitcast i32* %26 to i8*
call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %27)
%28 = bitcast %"core::option::Option<alloc::string::String>"* %25 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %28)
%29 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %24 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %29)
%30 = bitcast %"std::env::ArgsOs"* %23 to i8*
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %30)
call void @_ZN3std3env7args_os17h0e97fc174faccbd6E(%"std::env::ArgsOs"* noalias nocapture nonnull sret dereferenceable(32) %23)
%31 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %8 to i8*
%32 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %8 to {}**
%33 = getelementptr inbounds %"core::option::Option<std::ffi::os_str::OsString>", %"core::option::Option<std::ffi::os_str::OsString>"* %8, i64 0, i32 2, i64 0
%34 = bitcast i64* %33 to <2 x i64>*
br label %35
; <label>:35: ; preds = %48, %0
%36 = phi i64 [ 1, %0 ], [ %49, %48 ]
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %31), !noalias !81
invoke void @"_ZN67_$LT$std..env..ArgsOs$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h2da8ead691074258E"(%"core::option::Option<std::ffi::os_str::OsString>"* noalias nocapture nonnull sret dereferenceable(24) %8, %"std::env::ArgsOs"* nonnull dereferenceable(32) %23)
to label %37 unwind label %450
; <label>:37: ; preds = %35
%38 = load {}*, {}** %32, align 8, !noalias !81
%39 = icmp eq {}* %38, null
%40 = bitcast {}* %38 to i8*
br i1 %39, label %50, label %41, !prof !84
; <label>:41: ; preds = %37
%42 = load <2 x i64>, <2 x i64>* %34, align 8
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %31), !noalias !81
%43 = icmp eq i64 %36, 0
br i1 %43, label %52, label %44, !prof !85
; <label>:44: ; preds = %41
%45 = extractelement <2 x i64> %42, i32 0
%46 = icmp eq i64 %45, 0
br i1 %46, label %48, label %47, !prof !46
; <label>:47: ; preds = %44
call void @__rust_dealloc(i8* nonnull %40, i64 %45, i64 1), !noalias !81
br label %48
; <label>:48: ; preds = %47, %44
%49 = add nsw i64 %36, -1
br label %35
; <label>:50: ; preds = %37
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %31), !noalias !81
%51 = bitcast %"core::option::Option<alloc::string::String>"* %25 to {}**
store {}* null, {}** %51, align 8, !alias.scope !86, !noalias !89
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %29)
br label %81
; <label>:52: ; preds = %41
%53 = bitcast %"core::option::Option<std::ffi::os_str::OsString>"* %24 to {}**
store {}* %38, {}** %53, align 8, !alias.scope !81
%54 = getelementptr inbounds %"core::option::Option<std::ffi::os_str::OsString>", %"core::option::Option<std::ffi::os_str::OsString>"* %24, i64 0, i32 2, i64 0
%55 = bitcast i64* %54 to <2 x i64>*
store <2 x i64> %42, <2 x i64>* %55, align 8, !alias.scope !81
%56 = bitcast %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %7 to i8*
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %56), !noalias !91
%57 = bitcast %"std::ffi::os_str::OsString"* %6 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %57), !noalias !91
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %57, i8* nonnull %29, i64 24, i32 8, i1 false)
invoke void @_ZN3std3ffi6os_str8OsString11into_string17h567757e2e42e16abE(%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* noalias nocapture nonnull sret dereferenceable(32) %7, %"std::ffi::os_str::OsString"* noalias nocapture nonnull dereferenceable(24) %6)
to label %58 unwind label %78, !noalias !86
; <label>:58: ; preds = %52
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %57), !noalias !91
%59 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %7, i64 0, i32 0, i64 0
%60 = load i64, i64* %59, align 8, !range !95, !alias.scope !96, !noalias !99
%61 = icmp eq i64 %60, 1
br i1 %61, label %69, label %62, !prof !46
; <label>:62: ; preds = %58
%63 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %7, i64 0, i32 2
%64 = bitcast [3 x i64]* %63 to i8*
%65 = bitcast %"core::option::Option<alloc::string::String>"* %25 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %65, i8* nonnull %64, i64 24, i32 8, i1 false)
%66 = bitcast %"core::option::Option<alloc::string::String>"* %25 to {}**
%67 = load {}*, {}** %66, align 8, !alias.scope !101
%68 = icmp eq {}* %67, null
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %56), !noalias !91
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %29)
br i1 %68, label %81, label %83, !prof !79
; <label>:69: ; preds = %58
%70 = bitcast %"core::option::Option<alloc::string::String>"* %25 to {}**
store {}* null, {}** %70, align 8, !alias.scope !104, !noalias !105
%71 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %7, i64 0, i32 2, i64 1
%72 = load i64, i64* %71, align 8, !alias.scope !106, !noalias !109
%73 = icmp eq i64 %72, 0
br i1 %73, label %80, label %74
; <label>:74: ; preds = %69
%75 = getelementptr inbounds %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>", %"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* %7, i64 0, i32 2
%76 = bitcast [3 x i64]* %75 to i8**
%77 = load i8*, i8** %76, align 8, !alias.scope !111, !noalias !99, !nonnull !31
call void @__rust_dealloc(i8* nonnull %77, i64 %72, i64 1), !noalias !114
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %56), !noalias !91
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %29)
br label %81
; <label>:78: ; preds = %52
%79 = landingpad { i8*, i32 }
cleanup
br label %452
; <label>:80: ; preds = %69
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %56), !noalias !91
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %29)
br label %81
; <label>:81: ; preds = %80, %74, %62, %50
%82 = bitcast %"alloc::vec::Vec<u8>"* %5 to i8*
br label %105
; <label>:83: ; preds = %62
%84 = bitcast %"alloc::vec::Vec<u8>"* %5 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %84)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %84, i8* nonnull %28, i64 24, i32 8, i1 false)
%85 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %4 to i8*
call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %85), !noalias !101
%86 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %4 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %86, i8* nonnull %28, i64 24, i32 8, i1 false)
%87 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %4 to [0 x i8]**
%88 = load [0 x i8]*, [0 x i8]** %87, align 8, !alias.scope !115, !noalias !101, !nonnull !31
%89 = getelementptr inbounds { [0 x i64], %"alloc::string::String", [0 x i64] }, { [0 x i64], %"alloc::string::String", [0 x i64] }* %4, i64 0, i32 1, i32 1, i32 3
%90 = load i64, i64* %89, align 8, !alias.scope !124, !noalias !101
%91 = getelementptr inbounds [0 x i8], [0 x i8]* %88, i64 0, i64 0
%92 = invoke i64 @"_ZN4core3num52_$LT$impl$u20$core..str..FromStr$u20$for$u20$i32$GT$8from_str17h99b48ffb87a27724E"([0 x i8]* noalias nonnull readonly %88, i64 %90)
to label %93 unwind label %102
; <label>:93: ; preds = %83
%94 = and i64 %92, 1
%95 = xor i64 %94, 1
%96 = getelementptr inbounds { [0 x i64], %"alloc::string::String", [0 x i64] }, { [0 x i64], %"alloc::string::String", [0 x i64] }* %4, i64 0, i32 1, i32 1, i32 1, i32 1
%97 = load i64, i64* %96, align 8, !alias.scope !125, !noalias !128
%98 = icmp eq i64 %97, 0
br i1 %98, label %100, label %99, !prof !46
; <label>:99: ; preds = %93
call void @__rust_dealloc(i8* nonnull %91, i64 %97, i64 1)
br label %100
; <label>:100: ; preds = %99, %93
%101 = and i64 %92, -4294967296
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %85), !noalias !101
br label %105
; <label>:102: ; preds = %83
%103 = landingpad { i8*, i32 }
cleanup
%104 = bitcast { [0 x i64], %"alloc::string::String", [0 x i64] }* %4 to %"alloc::string::String"*
call fastcc void @_ZN4core3ptr13drop_in_place17hce82c5074859547eE(%"alloc::string::String"* nonnull %104) #9
br label %452
; <label>:105: ; preds = %100, %81
%106 = phi i8* [ %82, %81 ], [ %84, %100 ]
%107 = phi i64 [ 0, %81 ], [ %101, %100 ]
%108 = phi i64 [ 0, %81 ], [ %95, %100 ]
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %106)
%109 = or i64 %108, %107
call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %28)
%110 = and i64 %108, 4294967295
%111 = icmp eq i64 %110, 0
%112 = lshr i64 %109, 32
%113 = trunc i64 %112 to i32
%114 = select i1 %111, i32 1000, i32 %113, !prof !46
store i32 %114, i32* %26, align 4
call fastcc void @_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E(%"std::env::ArgsOs"* nonnull %23)
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %30)
%115 = bitcast %"core::fmt::Arguments"* %22 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %115)
%116 = bitcast [1 x { i8*, i8* }]* %21 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %116)
%117 = bitcast [1 x { i8*, i8* }]* %21 to i32**
store i32* %26, i32** %117, align 8
%118 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %21, i64 0, i64 0, i32 1
store i8* bitcast (i1 (i32*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h8208a598556d09a5E" to i8*), i8** %118, align 8
%119 = bitcast %"core::fmt::Arguments"* %22 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %119, align 8, !alias.scope !130, !noalias !133
%120 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %22, i64 0, i32 1, i32 1
store i64 2, i64* %120, align 8, !alias.scope !130, !noalias !133
%121 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %22, i64 0, i32 3
%122 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %121 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.t to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %122, align 8, !alias.scope !130, !noalias !133
%123 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %22, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %123, align 8, !alias.scope !130, !noalias !133
%124 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %22, i64 0, i32 5, i32 0
%125 = bitcast [0 x { i8*, i8* }]** %124 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %21, [1 x { i8*, i8* }]** %125, align 8, !alias.scope !130, !noalias !133
%126 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %22, i64 0, i32 5, i32 1
store i64 1, i64* %126, align 8, !alias.scope !130, !noalias !133
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %22)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %115)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %116)
%127 = bitcast [5 x %Planet]* %20 to i8*
call void @llvm.lifetime.start.p0i8(i64 280, i8* nonnull %127)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %127, i8* bitcast (double* getelementptr inbounds ({ { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } }, { { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] }, { [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], { [0 x i8], double, [0 x i8], double, [0 x i8], double, [0 x i8] }, [0 x i8], double, [0 x i8] } }* @_ZN4test6BODIES17h6b5b7f6a11be243fE, i64 0, i32 0, i32 1, i32 1) to i8*), i64 280, i32 8, i1 false)
call void @llvm.lifetime.start.p0i8(i64 240, i8* nonnull %19)
call void @llvm.memset.p0i8.i64(i8* nonnull %19, i8 0, i64 240, i32 8, i1 false)
call void @llvm.lifetime.start.p0i8(i64 80, i8* nonnull %17)
%128 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 10
call void @llvm.memset.p0i8.i64(i8* nonnull %17, i8 0, i64 80, i32 16, i1 false)
%129 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 0
%130 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 5, i32 0, i64 0
%131 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 3
%132 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 5
%133 = bitcast i64* %132 to double*
%134 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 10
%135 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 12
%136 = bitcast i64* %135 to double*
%137 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 17
%138 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 19
%139 = bitcast i64* %138 to double*
%140 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 24
%141 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 26
%142 = bitcast i64* %141 to double*
%143 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 31
%144 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 33
%145 = bitcast i64* %144 to double*
%146 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 3
%147 = bitcast %Vec3* %146 to <2 x double>*
store <2 x double> <double 0xBF3967E9A7E0D6F3, double 0xBF6AD4ECFE5089FB>, <2 x double>* %147, align 8
%148 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 3, i32 5
store double 0x3EF919331F0B8A71, double* %148, align 8
%149 = bitcast %"core::fmt::Arguments"* %15 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %149)
%150 = bitcast [1 x { i8*, i8* }]* %14 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %150)
%151 = bitcast double* %13 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %151)
%152 = call fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias nonnull readonly dereferenceable(280) %20)
store double %152, double* %13, align 8
%153 = bitcast [1 x { i8*, i8* }]* %14 to double**
store double* %13, double** %153, align 8
%154 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %14, i64 0, i64 0, i32 1
store i8* bitcast (i1 (double*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E" to i8*), i8** %154, align 8
%155 = bitcast %"core::fmt::Arguments"* %15 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %155, align 8, !alias.scope !137, !noalias !140
%156 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %15, i64 0, i32 1, i32 1
store i64 2, i64* %156, align 8, !alias.scope !137, !noalias !140
%157 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %15, i64 0, i32 3
%158 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %157 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.v to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %158, align 8, !alias.scope !137, !noalias !140
%159 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %15, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %159, align 8, !alias.scope !137, !noalias !140
%160 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %15, i64 0, i32 5, i32 0
%161 = bitcast [0 x { i8*, i8* }]** %160 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %14, [1 x { i8*, i8* }]** %161, align 8, !alias.scope !137, !noalias !140
%162 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %15, i64 0, i32 5, i32 1
store i64 1, i64* %162, align 8, !alias.scope !137, !noalias !140
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %15)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %149)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %150)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %151)
%163 = load i32, i32* %26, align 4
%164 = bitcast { i32, i32 }* %12 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %164)
%165 = getelementptr inbounds { i32, i32 }, { i32, i32 }* %12, i64 0, i32 0
store i32 0, i32* %165, align 4
%166 = getelementptr inbounds { i32, i32 }, { i32, i32 }* %12, i64 0, i32 1
store i32 %163, i32* %166, align 4
%167 = icmp sgt i32 %163, 0
br i1 %167, label %454, label %171, !prof !144
; <label>:168: ; preds = %454, %406
%169 = phi i32 [ 0, %454 ], [ %447, %406 ]
%170 = add i32 %169, 1
store i32 %170, i32* %165, align 4
br label %186
; <label>:171: ; preds = %406, %105
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %164)
%172 = bitcast %"core::fmt::Arguments"* %11 to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %172)
%173 = bitcast [1 x { i8*, i8* }]* %10 to i8*
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %173)
%174 = bitcast double* %9 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %174)
%175 = call fastcc double @_ZN4test6energy17h6acdc4d37a6ab310E([5 x %Planet]* noalias nonnull readonly dereferenceable(280) %20)
store double %175, double* %9, align 8
%176 = bitcast [1 x { i8*, i8* }]* %10 to double**
store double* %9, double** %176, align 8
%177 = getelementptr inbounds [1 x { i8*, i8* }], [1 x { i8*, i8* }]* %10, i64 0, i64 0, i32 1
store i8* bitcast (i1 (double*, %"core::fmt::Formatter"*)* @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E" to i8*), i8** %177, align 8
%178 = bitcast %"core::fmt::Arguments"* %11 to [0 x { [0 x i8]*, i64 }]**
store [0 x { [0 x i8]*, i64 }]* bitcast ([2 x { [0 x i8]*, i64 }]* @ref.s to [0 x { [0 x i8]*, i64 }]*), [0 x { [0 x i8]*, i64 }]** %178, align 8, !alias.scope !145, !noalias !148
%179 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %11, i64 0, i32 1, i32 1
store i64 2, i64* %179, align 8, !alias.scope !145, !noalias !148
%180 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %11, i64 0, i32 3
%181 = bitcast %"core::option::Option<&[core::fmt::rt::v1::Argument]>"* %180 to [0 x %"core::fmt::rt::v1::Argument"]**
store [0 x %"core::fmt::rt::v1::Argument"]* bitcast ({ { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], { [0 x i8], { i64, [0 x i8], i64, [0 x i8] }, [0 x i8], <{ i64, [8 x i8] }>, [0 x i8], i32, [0 x i8], i32, [0 x i8], i8, [7 x i8] }, [0 x i8] } }* @ref.v to [0 x %"core::fmt::rt::v1::Argument"]*), [0 x %"core::fmt::rt::v1::Argument"]** %181, align 8, !alias.scope !145, !noalias !148
%182 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %11, i64 0, i32 3, i32 2, i64 0
store i64 1, i64* %182, align 8, !alias.scope !145, !noalias !148
%183 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %11, i64 0, i32 5, i32 0
%184 = bitcast [0 x { i8*, i8* }]** %183 to [1 x { i8*, i8* }]**
store [1 x { i8*, i8* }]* %10, [1 x { i8*, i8* }]** %184, align 8, !alias.scope !145, !noalias !148
%185 = getelementptr inbounds %"core::fmt::Arguments", %"core::fmt::Arguments"* %11, i64 0, i32 5, i32 1
store i64 1, i64* %185, align 8, !alias.scope !145, !noalias !148
call void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture nonnull dereferenceable(48) %11)
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %172)
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %173)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %174)
call void @llvm.lifetime.end.p0i8(i64 80, i8* nonnull %17)
call void @llvm.lifetime.end.p0i8(i64 240, i8* nonnull %19)
call void @llvm.lifetime.end.p0i8(i64 280, i8* nonnull %127)
call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %27)
ret void
; <label>:186: ; preds = %201, %168
%187 = phi i64* [ %461, %168 ], [ %202, %201 ]
%188 = phi i64* [ %129, %168 ], [ %187, %201 ]
%189 = phi i64* [ %459, %168 ], [ %215, %201 ]
%190 = icmp ne i64* %187, null
call void @llvm.assume(i1 %190)
%191 = icmp eq i64* %187, %130
%192 = icmp eq i64* %187, null
%193 = or i1 %191, %192
br i1 %193, label %225, label %194, !prof !152
; <label>:194: ; preds = %186
%195 = getelementptr inbounds i64, i64* %187, i64 7
%196 = bitcast i64* %188 to <2 x double>*
%197 = load <2 x double>, <2 x double>* %196, align 8, !alias.scope !153
%198 = getelementptr inbounds i64, i64* %188, i64 2
%199 = bitcast i64* %198 to double*
%200 = load double, double* %199, align 8, !alias.scope !153
br label %203
; <label>:201: ; preds = %209
%202 = select i1 %191, i64* %187, i64* %195, !prof !156
br i1 %193, label %225, label %186, !prof !79
; <label>:203: ; preds = %209, %194
%204 = phi i64* [ %195, %194 ], [ %224, %209 ]
%205 = phi i64* [ %187, %194 ], [ %204, %209 ]
%206 = phi i64* [ %189, %194 ], [ %215, %209 ]
%207 = icmp eq i64* %206, %460
br i1 %207, label %208, label %209, !prof !157
; <label>:208: ; preds = %203
call void @_ZN4core9panicking5panic17hfefa0158f97fa77bE({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly dereferenceable(40) bitcast ({ [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] }* @ref.2 to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*))
unreachable
; <label>:209: ; preds = %203
%210 = getelementptr inbounds i64, i64* %205, i64 2
%211 = bitcast i64* %210 to double*
%212 = load double, double* %211, align 8, !alias.scope !153
%213 = bitcast i64* %205 to <2 x double>*
%214 = load <2 x double>, <2 x double>* %213, align 8, !alias.scope !153
%215 = getelementptr inbounds i64, i64* %206, i64 3
%216 = fsub double %200, %212
%217 = fsub <2 x double> %197, %214
%218 = bitcast i64* %206 to <2 x double>*
store <2 x double> %217, <2 x double>* %218, align 8, !noalias !153
%219 = getelementptr inbounds i64, i64* %206, i64 2
%220 = bitcast i64* %219 to double*
store double %216, double* %220, align 8, !noalias !153
%221 = icmp ne i64* %204, null
call void @llvm.assume(i1 %221)
%222 = icmp eq i64* %204, %130
%223 = getelementptr inbounds i64, i64* %204, i64 7
%224 = select i1 %222, i64* %204, i64* %223, !prof !152
br i1 %222, label %201, label %203, !prof !152
; <label>:225: ; preds = %201, %186
%226 = load double, double* %471, align 8, !alias.scope !158
%227 = load double, double* %472, align 8, !alias.scope !158
%228 = load double, double* %473, align 8, !alias.scope !158
%229 = load double, double* %475, align 8, !alias.scope !158
%230 = insertelement <2 x double> undef, double %226, i32 0
%231 = insertelement <2 x double> %230, double %229, i32 1
%232 = fmul <2 x double> %231, %231
%233 = load double, double* %477, align 8, !alias.scope !158
%234 = insertelement <2 x double> undef, double %227, i32 0
%235 = insertelement <2 x double> %234, double %233, i32 1
%236 = fmul <2 x double> %235, %235
%237 = fadd <2 x double> %232, %236
%238 = load double, double* %479, align 8, !alias.scope !158
%239 = insertelement <2 x double> undef, double %228, i32 0
%240 = insertelement <2 x double> %239, double %238, i32 1
%241 = fmul <2 x double> %240, %240
%242 = fadd <2 x double> %237, %241
%243 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %242)
%244 = fmul <2 x double> %242, %243
%245 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %244
store <2 x double> %245, <2 x double>* %542, align 16, !noalias !161
%246 = load double, double* %482, align 8, !alias.scope !158
%247 = load double, double* %484, align 8, !alias.scope !158
%248 = load double, double* %486, align 8, !alias.scope !158
%249 = load double, double* %488, align 8, !alias.scope !158
%250 = insertelement <2 x double> undef, double %246, i32 0
%251 = insertelement <2 x double> %250, double %249, i32 1
%252 = fmul <2 x double> %251, %251
%253 = load double, double* %490, align 8, !alias.scope !158
%254 = insertelement <2 x double> undef, double %247, i32 0
%255 = insertelement <2 x double> %254, double %253, i32 1
%256 = fmul <2 x double> %255, %255
%257 = fadd <2 x double> %252, %256
%258 = load double, double* %492, align 8, !alias.scope !158
%259 = insertelement <2 x double> undef, double %248, i32 0
%260 = insertelement <2 x double> %259, double %258, i32 1
%261 = fmul <2 x double> %260, %260
%262 = fadd <2 x double> %257, %261
%263 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %262)
%264 = fmul <2 x double> %262, %263
%265 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %264
store <2 x double> %265, <2 x double>* %543, align 16, !noalias !161
%266 = load double, double* %495, align 8, !alias.scope !158
%267 = load double, double* %497, align 8, !alias.scope !158
%268 = load double, double* %499, align 8, !alias.scope !158
%269 = load double, double* %501, align 8, !alias.scope !158
%270 = insertelement <2 x double> undef, double %266, i32 0
%271 = insertelement <2 x double> %270, double %269, i32 1
%272 = fmul <2 x double> %271, %271
%273 = load double, double* %503, align 8, !alias.scope !158
%274 = insertelement <2 x double> undef, double %267, i32 0
%275 = insertelement <2 x double> %274, double %273, i32 1
%276 = fmul <2 x double> %275, %275
%277 = fadd <2 x double> %272, %276
%278 = load double, double* %505, align 8, !alias.scope !158
%279 = insertelement <2 x double> undef, double %268, i32 0
%280 = insertelement <2 x double> %279, double %278, i32 1
%281 = fmul <2 x double> %280, %280
%282 = fadd <2 x double> %277, %281
%283 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %282)
%284 = fmul <2 x double> %282, %283
%285 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %284
store <2 x double> %285, <2 x double>* %544, align 16, !noalias !161
%286 = load double, double* %508, align 8, !alias.scope !158
%287 = load double, double* %510, align 8, !alias.scope !158
%288 = load double, double* %512, align 8, !alias.scope !158
%289 = load double, double* %514, align 8, !alias.scope !158
%290 = insertelement <2 x double> undef, double %286, i32 0
%291 = insertelement <2 x double> %290, double %289, i32 1
%292 = fmul <2 x double> %291, %291
%293 = load double, double* %516, align 8, !alias.scope !158
%294 = insertelement <2 x double> undef, double %287, i32 0
%295 = insertelement <2 x double> %294, double %293, i32 1
%296 = fmul <2 x double> %295, %295
%297 = fadd <2 x double> %292, %296
%298 = load double, double* %518, align 8, !alias.scope !158
%299 = insertelement <2 x double> undef, double %288, i32 0
%300 = insertelement <2 x double> %299, double %298, i32 1
%301 = fmul <2 x double> %300, %300
%302 = fadd <2 x double> %297, %301
%303 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %302)
%304 = fmul <2 x double> %302, %303
%305 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %304
store <2 x double> %305, <2 x double>* %545, align 16, !noalias !161
%306 = load double, double* %521, align 8, !alias.scope !158
%307 = load double, double* %523, align 8, !alias.scope !158
%308 = load double, double* %525, align 8, !alias.scope !158
%309 = load double, double* %527, align 8, !alias.scope !158
%310 = insertelement <2 x double> undef, double %306, i32 0
%311 = insertelement <2 x double> %310, double %309, i32 1
%312 = fmul <2 x double> %311, %311
%313 = load double, double* %529, align 8, !alias.scope !158
%314 = insertelement <2 x double> undef, double %307, i32 0
%315 = insertelement <2 x double> %314, double %313, i32 1
%316 = fmul <2 x double> %315, %315
%317 = fadd <2 x double> %312, %316
%318 = load double, double* %531, align 8, !alias.scope !158
%319 = insertelement <2 x double> undef, double %308, i32 0
%320 = insertelement <2 x double> %319, double %318, i32 1
%321 = fmul <2 x double> %320, %320
%322 = fadd <2 x double> %317, %321
%323 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %322)
%324 = fmul <2 x double> %322, %323
%325 = fdiv <2 x double> <double 1.000000e-02, double 1.000000e-02>, %324
store <2 x double> %325, <2 x double>* %546, align 16, !noalias !161
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %462)
store [5 x %Planet]* %20, [5 x %Planet]** %463, align 8
store i64 5, i64* %464, align 8
br label %326
; <label>:326: ; preds = %349, %225
%327 = phi i64* [ %465, %225 ], [ %351, %349 ]
%328 = phi i64* [ %459, %225 ], [ %350, %349 ]
call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %466)
store [0 x %Planet]* @ref_mut.x, [0 x %Planet]** %467, align 8
store i64 0, i64* %468, align 8
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %469)
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %469, i8* nonnull %462, i64 16, i32 8, i1 false), !prof !164
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %462, i8* nonnull %466, i64 16, i32 8, i1 false), !prof !164
call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull %466, i8* nonnull %469, i64 16, i32 8, i1 false), !prof !164
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %469)
%329 = load [0 x %Planet]*, [0 x %Planet]** %467, align 8, !nonnull !31
%330 = load i64, i64* %468, align 8
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %466)
%331 = icmp eq i64 %330, 0
br i1 %331, label %332, label %333, !prof !165
; <label>:332: ; preds = %326
call void @_ZN4core9panicking5panic17hfefa0158f97fa77bE({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly dereferenceable(40) bitcast ({ [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] }* @ref.l to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*)), !noalias !166
unreachable
; <label>:333: ; preds = %326
%334 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 1
%335 = add i64 %330, -1
%336 = ptrtoint %Planet* %334 to i64
store i64 %336, i64* %470, align 8
store i64 %335, i64* %464, align 8
%337 = getelementptr inbounds %Planet, %Planet* %334, i64 0, i32 0, i64 0
%338 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 %330, i32 0, i64 0
%339 = icmp eq i64* %337, %338
br i1 %339, label %349, label %340, !prof !152
; <label>:340: ; preds = %333
%341 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 1, i32 0, i64 7
%342 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 0, i32 0, i64 3
%343 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 0, i32 0, i64 5
%344 = bitcast i64* %343 to double*
%345 = getelementptr inbounds [0 x %Planet], [0 x %Planet]* %329, i64 0, i64 0, i32 0, i64 6
%346 = bitcast i64* %345 to double*
%347 = bitcast i64* %342 to <2 x double>*
%348 = bitcast i64* %342 to <2 x double>*
br label %353
; <label>:349: ; preds = %372, %333
%350 = phi i64* [ %328, %333 ], [ %360, %372 ]
%351 = phi i64* [ %327, %333 ], [ %373, %372 ]
%352 = icmp eq i64 %335, 0
br i1 %352, label %406, label %326, !prof !156
; <label>:353: ; preds = %372, %340
%354 = phi i64* [ %341, %340 ], [ %405, %372 ]
%355 = phi i64* [ %327, %340 ], [ %373, %372 ]
%356 = phi i64* [ %337, %340 ], [ %354, %372 ]
%357 = phi i64* [ %328, %340 ], [ %360, %372 ]
%358 = icmp ne i64* %357, null
call void @llvm.assume(i1 %358)
%359 = icmp eq i64* %357, %460
%360 = getelementptr inbounds i64, i64* %357, i64 3
br i1 %359, label %361, label %362, !prof !157
; <label>:361: ; preds = %353
call void @_ZN4core9panicking5panic17hfefa0158f97fa77bE({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly dereferenceable(40) bitcast ({ [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] }* @ref.2 to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*))
unreachable
; <label>:362: ; preds = %353
%363 = bitcast i64* %357 to <2 x double>*
%364 = load <2 x double>, <2 x double>* %363, align 8
%365 = getelementptr inbounds i64, i64* %357, i64 2
%366 = bitcast i64* %365 to double*
%367 = load double, double* %366, align 8
%368 = icmp ne i64* %355, null
call void @llvm.assume(i1 %368)
%369 = bitcast i64* %355 to double*
%370 = icmp eq double* %128, %369
br i1 %370, label %371, label %372, !prof !157
; <label>:371: ; preds = %362
call void @_ZN4core9panicking5panic17hfefa0158f97fa77bE({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly dereferenceable(40) bitcast ({ [0 x i8], { [0 x i8]*, i64 }, [0 x i8], { [0 x i8]*, i64 }, [0 x i8], i32, [0 x i8], i32, [0 x i8] }* @ref.2 to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*))
unreachable
; <label>:372: ; preds = %362
%373 = getelementptr inbounds i64, i64* %355, i64 1
%374 = load double, double* %369, align 8
%375 = load <2 x double>, <2 x double>* %347, align 8
%376 = load double, double* %344, align 8
%377 = getelementptr inbounds i64, i64* %356, i64 6
%378 = bitcast i64* %377 to double*
%379 = load double, double* %378, align 8
%380 = fmul double %374, %379
%381 = insertelement <2 x double> undef, double %380, i32 0
%382 = shufflevector <2 x double> %381, <2 x double> undef, <2 x i32> zeroinitializer
%383 = fmul <2 x double> %364, %382
%384 = fmul double %367, %380
%385 = fsub <2 x double> %375, %383
%386 = fsub double %376, %384
store <2 x double> %385, <2 x double>* %348, align 8
store double %386, double* %344, align 8
%387 = getelementptr inbounds i64, i64* %356, i64 3
%388 = bitcast i64* %387 to <2 x double>*
%389 = load <2 x double>, <2 x double>* %388, align 8
%390 = getelementptr inbounds i64, i64* %356, i64 5
%391 = bitcast i64* %390 to double*
%392 = load double, double* %391, align 8
%393 = load double, double* %346, align 8
%394 = fmul double %374, %393
%395 = insertelement <2 x double> undef, double %394, i32 0
%396 = shufflevector <2 x double> %395, <2 x double> undef, <2 x i32> zeroinitializer
%397 = fmul <2 x double> %364, %396
%398 = fmul double %367, %394
%399 = fadd <2 x double> %389, %397
%400 = fadd double %392, %398
%401 = bitcast i64* %387 to <2 x double>*
store <2 x double> %399, <2 x double>* %401, align 8
store double %400, double* %391, align 8
%402 = icmp ne i64* %354, null
call void @llvm.assume(i1 %402)
%403 = icmp eq i64* %354, %338
%404 = getelementptr inbounds i64, i64* %354, i64 7
%405 = select i1 %403, i64* %354, i64* %404, !prof !152
br i1 %403, label %349, label %353, !prof !152
; <label>:406: ; preds = %349
call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %462)
%407 = load <2 x double>, <2 x double>* %547, align 16
%408 = load double, double* %533, align 16
%409 = load <2 x double>, <2 x double>* %548, align 8
%410 = load double, double* %133, align 8
%411 = fmul <2 x double> %409, <double 1.000000e-02, double 1.000000e-02>
%412 = fmul double %410, 1.000000e-02
%413 = fadd <2 x double> %407, %411
%414 = fadd double %408, %412
store <2 x double> %413, <2 x double>* %549, align 16
store double %414, double* %533, align 16
%415 = load <2 x double>, <2 x double>* %550, align 8
%416 = load double, double* %535, align 8
%417 = load <2 x double>, <2 x double>* %551, align 16
%418 = load double, double* %136, align 16
%419 = fmul <2 x double> %417, <double 1.000000e-02, double 1.000000e-02>
%420 = fmul double %418, 1.000000e-02
%421 = fadd <2 x double> %415, %419
%422 = fadd double %416, %420
store <2 x double> %421, <2 x double>* %552, align 8
store double %422, double* %535, align 8
%423 = load <2 x double>, <2 x double>* %553, align 16
%424 = load double, double* %537, align 16
%425 = load <2 x double>, <2 x double>* %554, align 8
%426 = load double, double* %139, align 8
%427 = fmul <2 x double> %425, <double 1.000000e-02, double 1.000000e-02>
%428 = fmul double %426, 1.000000e-02
%429 = fadd <2 x double> %423, %427
%430 = fadd double %424, %428
store <2 x double> %429, <2 x double>* %555, align 16
store double %430, double* %537, align 16
%431 = load <2 x double>, <2 x double>* %556, align 8
%432 = load double, double* %539, align 8
%433 = load <2 x double>, <2 x double>* %557, align 16
%434 = load double, double* %142, align 16
%435 = fmul <2 x double> %433, <double 1.000000e-02, double 1.000000e-02>
%436 = fmul double %434, 1.000000e-02
%437 = fadd <2 x double> %431, %435
%438 = fadd double %432, %436
store <2 x double> %437, <2 x double>* %558, align 8
store double %438, double* %539, align 8
%439 = load <2 x double>, <2 x double>* %559, align 16
%440 = load double, double* %541, align 16
%441 = load <2 x double>, <2 x double>* %560, align 8
%442 = load double, double* %145, align 8
%443 = fmul <2 x double> %441, <double 1.000000e-02, double 1.000000e-02>
%444 = fmul double %442, 1.000000e-02
%445 = fadd <2 x double> %439, %443
%446 = fadd double %440, %444
store <2 x double> %445, <2 x double>* %561, align 16
store double %446, double* %541, align 16
%447 = load i32, i32* %165, align 4, !alias.scope !171, !noalias !174
%448 = load i32, i32* %166, align 4, !alias.scope !174, !noalias !171
%449 = icmp slt i32 %447, %448
br i1 %449, label %168, label %171, !prof !144
; <label>:450: ; preds = %35
%451 = landingpad { i8*, i32 }
cleanup
br label %452
; <label>:452: ; preds = %450, %102, %78
%453 = phi { i8*, i32 } [ %79, %78 ], [ %451, %450 ], [ %103, %102 ]
call fastcc void @_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E(%"std::env::ArgsOs"* nonnull %23) #9
resume { i8*, i32 } %453
; <label>:454: ; preds = %105
%455 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 28
%456 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 21
%457 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 14
%458 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 7
%459 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 0, i32 0, i64 0
%460 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 10, i32 0, i64 0
%461 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 7
%462 = bitcast { [0 x %Planet]*, i64 }* %3 to i8*
%463 = bitcast { [0 x %Planet]*, i64 }* %3 to [5 x %Planet]**
%464 = getelementptr inbounds { [0 x %Planet]*, i64 }, { [0 x %Planet]*, i64 }* %3, i64 0, i32 1
%465 = bitcast [10 x double]* %16 to i64*
%466 = bitcast { [0 x %Planet]*, i64 }* %2 to i8*
%467 = getelementptr inbounds { [0 x %Planet]*, i64 }, { [0 x %Planet]*, i64 }* %2, i64 0, i32 0
%468 = getelementptr inbounds { [0 x %Planet]*, i64 }, { [0 x %Planet]*, i64 }* %2, i64 0, i32 1
%469 = bitcast %"core::ptr::swap_nonoverlapping_bytes::UnalignedBlock"* %1 to i8*
%470 = bitcast { [0 x %Planet]*, i64 }* %3 to i64*
%471 = bitcast [10 x %Vec3]* %18 to double*
%472 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 0, i32 3
%473 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 0, i32 5
%474 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 1, i32 0, i64 0
%475 = bitcast i64* %474 to double*
%476 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 1, i32 0, i64 1
%477 = bitcast i64* %476 to double*
%478 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 1, i32 0, i64 2
%479 = bitcast i64* %478 to double*
%480 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 2, i32 0, i64 0
%481 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 2
%482 = bitcast i64* %480 to double*
%483 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 2, i32 0, i64 1
%484 = bitcast i64* %483 to double*
%485 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 2, i32 0, i64 2
%486 = bitcast i64* %485 to double*
%487 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 3, i32 0, i64 0
%488 = bitcast i64* %487 to double*
%489 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 3, i32 0, i64 1
%490 = bitcast i64* %489 to double*
%491 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 3, i32 0, i64 2
%492 = bitcast i64* %491 to double*
%493 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 4, i32 0, i64 0
%494 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 4
%495 = bitcast i64* %493 to double*
%496 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 4, i32 0, i64 1
%497 = bitcast i64* %496 to double*
%498 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 4, i32 0, i64 2
%499 = bitcast i64* %498 to double*
%500 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 5, i32 0, i64 0
%501 = bitcast i64* %500 to double*
%502 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 5, i32 0, i64 1
%503 = bitcast i64* %502 to double*
%504 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 5, i32 0, i64 2
%505 = bitcast i64* %504 to double*
%506 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 6, i32 0, i64 0
%507 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 6
%508 = bitcast i64* %506 to double*
%509 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 6, i32 0, i64 1
%510 = bitcast i64* %509 to double*
%511 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 6, i32 0, i64 2
%512 = bitcast i64* %511 to double*
%513 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 7, i32 0, i64 0
%514 = bitcast i64* %513 to double*
%515 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 7, i32 0, i64 1
%516 = bitcast i64* %515 to double*
%517 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 7, i32 0, i64 2
%518 = bitcast i64* %517 to double*
%519 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 8, i32 0, i64 0
%520 = getelementptr inbounds [10 x double], [10 x double]* %16, i64 0, i64 8
%521 = bitcast i64* %519 to double*
%522 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 8, i32 0, i64 1
%523 = bitcast i64* %522 to double*
%524 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 8, i32 0, i64 2
%525 = bitcast i64* %524 to double*
%526 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 9, i32 0, i64 0
%527 = bitcast i64* %526 to double*
%528 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 9, i32 0, i64 1
%529 = bitcast i64* %528 to double*
%530 = getelementptr inbounds [10 x %Vec3], [10 x %Vec3]* %18, i64 0, i64 9, i32 0, i64 2
%531 = bitcast i64* %530 to double*
%532 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 2
%533 = bitcast i64* %532 to double*
%534 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 9
%535 = bitcast i64* %534 to double*
%536 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 16
%537 = bitcast i64* %536 to double*
%538 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 23
%539 = bitcast i64* %538 to double*
%540 = getelementptr inbounds [5 x %Planet], [5 x %Planet]* %20, i64 0, i64 0, i32 0, i64 30
%541 = bitcast i64* %540 to double*
%542 = bitcast [10 x double]* %16 to <2 x double>*
%543 = bitcast double* %481 to <2 x double>*
%544 = bitcast double* %494 to <2 x double>*
%545 = bitcast double* %507 to <2 x double>*
%546 = bitcast double* %520 to <2 x double>*
%547 = bitcast [5 x %Planet]* %20 to <2 x double>*
%548 = bitcast i64* %131 to <2 x double>*
%549 = bitcast [5 x %Planet]* %20 to <2 x double>*
%550 = bitcast i64* %458 to <2 x double>*
%551 = bitcast i64* %134 to <2 x double>*
%552 = bitcast i64* %458 to <2 x double>*
%553 = bitcast i64* %457 to <2 x double>*
%554 = bitcast i64* %137 to <2 x double>*
%555 = bitcast i64* %457 to <2 x double>*
%556 = bitcast i64* %456 to <2 x double>*
%557 = bitcast i64* %140 to <2 x double>*
%558 = bitcast i64* %456 to <2 x double>*
%559 = bitcast i64* %455 to <2 x double>*
%560 = bitcast i64* %143 to <2 x double>*
%561 = bitcast i64* %455 to <2 x double>*
br label %168
}
; Function Attrs: nounwind
declare void @llvm.assume(i1) #4
declare i32 @rust_eh_personality(i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*) unnamed_addr
; Function Attrs: cold noinline noreturn
declare void @_ZN4core9panicking5panic17hfefa0158f97fa77bE({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly dereferenceable(40)) unnamed_addr #5
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #6
declare i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull, {}* noalias nonnull readonly, i64, i8**) unnamed_addr
declare i32 @"_ZN58_$LT$$LP$$RP$$u20$as$u20$std..termination..Termination$GT$6report17h5ef51a1159d52e9eE"() unnamed_addr
; Function Attrs: nounwind readnone speculatable
declare double @llvm.sqrt.f64(double) #7
declare i64 @"_ZN4core3num52_$LT$impl$u20$core..str..FromStr$u20$for$u20$i32$GT$8from_str17h99b48ffb87a27724E"([0 x i8]* noalias nonnull readonly, i64) unnamed_addr
; Function Attrs: nounwind
declare void @__rust_dealloc(i8*, i64, i64) unnamed_addr #4
declare void @"_ZN67_$LT$std..env..ArgsOs$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h2da8ead691074258E"(%"core::option::Option<std::ffi::os_str::OsString>"* noalias nocapture sret dereferenceable(24), %"std::env::ArgsOs"* dereferenceable(32)) unnamed_addr
declare void @_ZN3std3env7args_os17h0e97fc174faccbd6E(%"std::env::ArgsOs"* noalias nocapture sret dereferenceable(32)) unnamed_addr
declare zeroext i1 @"_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h8208a598556d09a5E"(i32* noalias readonly dereferenceable(4), %"core::fmt::Formatter"* dereferenceable(96)) unnamed_addr
declare void @_ZN3std2io5stdio6_print17hf909a9417e8e3c23E(%"core::fmt::Arguments"* noalias nocapture dereferenceable(48)) unnamed_addr
declare zeroext i1 @"_ZN4core3fmt5float52_$LT$impl$u20$core..fmt..Display$u20$for$u20$f64$GT$3fmt17h9a2c74a963a03ea1E"(double* noalias readonly dereferenceable(8), %"core::fmt::Formatter"* dereferenceable(96)) unnamed_addr
declare void @_ZN3std3ffi6os_str8OsString11into_string17h567757e2e42e16abE(%"core::result::Result<alloc::string::String, std::ffi::os_str::OsString>"* noalias nocapture sret dereferenceable(32), %"std::ffi::os_str::OsString"* noalias nocapture dereferenceable(24)) unnamed_addr
; Function Attrs: cold
define i32 @main(i32, i8**) unnamed_addr #8 !prof !29 {
%3 = alloca i8*, align 8
%4 = sext i32 %0 to i64
%5 = bitcast i8** %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %5)
%6 = bitcast i8** %3 to void ()**
store void ()* @_ZN4test4main17h6f2dd3dc2bc8dfe6E, void ()** %6, align 8
%7 = bitcast i8** %3 to {}*
%8 = call i64 @_ZN3std2rt19lang_start_internal17he461b456319e29d6E({}* nonnull %7, {}* noalias nonnull readonly bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8*)* }* @vtable.4 to {}*), i64 %4, i8** %1)
call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %5)
%9 = trunc i64 %8 to i32
ret i32 %9
}
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #6
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #6
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #6
; Function Attrs: nounwind readnone speculatable
declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #7
attributes #0 = { cold uwtable }
attributes #1 = { cold norecurse nounwind readnone uwtable }
attributes #2 = { cold nounwind uwtable }
attributes #3 = { uwtable }
attributes #4 = { nounwind }
attributes #5 = { cold noinline noreturn }
attributes #6 = { argmemonly nounwind }
attributes #7 = { nounwind readnone speculatable }
attributes #8 = { cold }
attributes #9 = { noinline }
!llvm.module.flags = !{!0, !1}
!0 = !{i32 7, !"PIE Level", i32 2}
!1 = !{i32 1, !"ProfileSummary", !2}
!2 = !{!3, !4, !5, !6, !7, !8, !9, !10}
!3 = !{!"ProfileFormat", !"InstrProf"}
!4 = !{!"TotalCount", i64 8200000070}
!5 = !{!"MaxCount", i64 1000000000}
!6 = !{!"MaxInternalCount", i64 1000000000}
!7 = !{!"MaxFunctionCount", i64 1000000000}
!8 = !{!"NumCounts", i64 83}
!9 = !{!"NumFunctions", i64 14}
!10 = !{!"DetailedSummary", !11}
!11 = !{!12, !13, !14, !15, !16, !17, !17, !18, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27}
!12 = !{i32 10000, i64 1000000000, i32 4}
!13 = !{i32 100000, i64 1000000000, i32 4}
!14 = !{i32 200000, i64 1000000000, i32 4}
!15 = !{i32 300000, i64 1000000000, i32 4}
!16 = !{i32 400000, i64 1000000000, i32 4}
!17 = !{i32 500000, i64 500000000, i32 11}
!18 = !{i32 600000, i64 500000000, i32 11}
!19 = !{i32 700000, i64 500000000, i32 11}
!20 = !{i32 800000, i64 500000000, i32 11}
!21 = !{i32 900000, i64 500000000, i32 11}
!22 = !{i32 950000, i64 100000000, i32 18}
!23 = !{i32 990000, i64 100000000, i32 18}
!24 = !{i32 999000, i64 100000000, i32 18}
!25 = !{i32 999900, i64 100000000, i32 18}
!26 = !{i32 999990, i64 100000000, i32 18}
!27 = !{i32 999999, i64 100000000, i32 18}
!28 = !{!"function_entry_count", i64 0}
!29 = !{!"function_entry_count", i64 1}
!30 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E"}
!31 = !{}
!32 = !{!"VP", i32 0, i64 1, i64 4926664627884762604, i64 1}
!33 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4core3ops8function6FnOnce9call_once17he8c51a13e1ce2e56E"}
!34 = !{!35}
!35 = distinct !{!35, !36, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E: argument 0"}
!36 = distinct !{!36, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h64ffb38e2fed3ec4E"}
!37 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4core3ptr13drop_in_place17h3bd07621d6b15e9aE"}
!38 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4core3ptr13drop_in_place17h5ad1bad050c6ee33E"}
!39 = !{!40, !42}
!40 = distinct !{!40, !41, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE: argument 0"}
!41 = distinct !{!41, !"_ZN80_$LT$alloc..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04e50c9174a9b00dE"}
!42 = distinct !{!42, !43, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E: argument 0"}
!43 = distinct !{!43, !"_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17he05fd7ab4618c162E"}
!44 = !{!"branch_weights", i32 1, i32 0}
!45 = !{!"branch_weights", i32 1073741824, i32 1073741824}
!46 = !{!"branch_weights", i32 0, i32 1}
!47 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4core3ptr13drop_in_place17hce82c5074859547eE"}
!48 = !{!49}
!49 = distinct !{!49, !50, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 1"}
!50 = distinct !{!50, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE"}
!51 = !{!52}
!52 = distinct !{!52, !50, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 0"}
!53 = !{!54}
!54 = distinct !{!54, !55, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE: argument 0"}
!55 = distinct !{!55, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE"}
!56 = !{!"function_entry_count", i64 2}
!57 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4test6energy17h6acdc4d37a6ab310E"}
!58 = !{!59}
!59 = distinct !{!59, !60, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E: argument 0"}
!60 = distinct !{!60, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E"}
!61 = !{!62, !64}
!62 = distinct !{!62, !63, !"_ZN91_$LT$core..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17hecd838a7900d1617E: argument 0"}
!63 = distinct !{!63, !"_ZN91_$LT$core..slice..Iter$LT$$u27$a$C$$u20$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17hecd838a7900d1617E"}
!64 = distinct !{!64, !65, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17ha5d8ab8ae0e98620E: argument 0"}
!65 = distinct !{!65, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold17ha5d8ab8ae0e98620E"}
!66 = !{!"branch_weights", i32 10, i32 20}
!67 = !{!68, !70, !62, !64}
!68 = distinct !{!68, !69, !"_ZN4test6energy28_$u7b$$u7b$closure$u7d$$u7d$17ha38cbc1d8f4f6c5eE: argument 0"}
!69 = distinct !{!69, !"_ZN4test6energy28_$u7b$$u7b$closure$u7d$$u7d$17ha38cbc1d8f4f6c5eE"}
!70 = distinct !{!70, !71, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold28_$u7b$$u7b$closure$u7d$$u7d$17hdbb45dd658aa063fE: argument 0"}
!71 = distinct !{!71, !"_ZN84_$LT$core..iter..Map$LT$I$C$$u20$F$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4fold28_$u7b$$u7b$closure$u7d$$u7d$17hdbb45dd658aa063fE"}
!72 = !{!68, !70}
!73 = !{!"branch_weights", i32 1, i32 9}
!74 = !{!"branch_weights", i32 5, i32 4}
!75 = !{!"branch_weights", i32 4, i32 7}
!76 = distinct !{!76, !77}
!77 = !{!"llvm.loop.unroll.disable"}
!78 = !{!"branch_weights", i32 2, i32 10}
!79 = !{!"branch_weights", i32 0, i32 -2147483648}
!80 = !{!"test0-317d481089b8c8fe83113de504472633.rs:_ZN4test4main17h6f2dd3dc2bc8dfe6E"}
!81 = !{!82}
!82 = distinct !{!82, !83, !"_ZN4core4iter8iterator8Iterator3nth17h1563a4e0b7230cedE: argument 0"}
!83 = distinct !{!83, !"_ZN4core4iter8iterator8Iterator3nth17h1563a4e0b7230cedE"}
!84 = !{!"branch_weights", i32 0, i32 2}
!85 = !{!"branch_weights", i32 1, i32 1}
!86 = !{!87}
!87 = distinct !{!87, !88, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E: argument 0"}
!88 = distinct !{!88, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E"}
!89 = !{!90}
!90 = distinct !{!90, !88, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hc6da7a8d14258841E: argument 1"}
!91 = !{!92, !94, !87, !90}
!92 = distinct !{!92, !93, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE: argument 0"}
!93 = distinct !{!93, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE"}
!94 = distinct !{!94, !93, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hbabc083ce480624cE: argument 1"}
!95 = !{i64 0, i64 2}
!96 = !{!97}
!97 = distinct !{!97, !98, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E: argument 1"}
!98 = distinct !{!98, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E"}
!99 = !{!100, !92, !94, !87, !90}
!100 = distinct !{!100, !98, !"_ZN47_$LT$core..result..Result$LT$T$C$$u20$E$GT$$GT$2ok17h8d88d07d961397f1E: argument 0"}
!101 = !{!102}
!102 = distinct !{!102, !103, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hed108e8b4b447622E: argument 0"}
!103 = distinct !{!103, !"_ZN38_$LT$core..option..Option$LT$T$GT$$GT$8and_then17hed108e8b4b447622E"}
!104 = !{!100, !92, !87}
!105 = !{!97, !94, !90}
!106 = !{!107, !97}
!107 = distinct !{!107, !108, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 1"}
!108 = distinct !{!108, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE"}
!109 = !{!110, !100, !92, !94, !87, !90}
!110 = distinct !{!110, !108, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 0"}
!111 = !{!112, !97}
!112 = distinct !{!112, !113, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE: argument 0"}
!113 = distinct !{!113, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE"}
!114 = !{!100, !97, !92, !94, !87}
!115 = !{!116, !118, !120, !122}
!116 = distinct !{!116, !117, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE: argument 0"}
!117 = distinct !{!117, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$3ptr17h5603ba6ea08c38eaE"}
!118 = distinct !{!118, !119, !"_ZN68_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..Deref$GT$5deref17h15454f68f103465cE: argument 0"}
!119 = distinct !{!119, !"_ZN68_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..deref..Deref$GT$5deref17h15454f68f103465cE"}
!120 = distinct !{!120, !121, !"_ZN65_$LT$alloc..string..String$u20$as$u20$core..ops..deref..Deref$GT$5deref17h592502204d4931f8E: argument 0"}
!121 = distinct !{!121, !"_ZN65_$LT$alloc..string..String$u20$as$u20$core..ops..deref..Deref$GT$5deref17h592502204d4931f8E"}
!122 = distinct !{!122, !123, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hab760d6fcd6093b0E: argument 0"}
!123 = distinct !{!123, !"_ZN4test4main28_$u7b$$u7b$closure$u7d$$u7d$17hab760d6fcd6093b0E"}
!124 = !{!118, !120, !122}
!125 = !{!126, !122}
!126 = distinct !{!126, !127, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 1"}
!127 = distinct !{!127, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE"}
!128 = !{!129, !102}
!129 = distinct !{!129, !127, !"_ZN49_$LT$alloc..raw_vec..RawVec$LT$T$C$$u20$A$GT$$GT$14current_layout17h81614572d552a54cE: argument 0"}
!130 = !{!131}
!131 = distinct !{!131, !132, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!132 = distinct !{!132, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!133 = !{!134, !135, !136}
!134 = distinct !{!134, !132, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!135 = distinct !{!135, !132, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!136 = distinct !{!136, !132, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
!137 = !{!138}
!138 = distinct !{!138, !139, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!139 = distinct !{!139, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!140 = !{!141, !142, !143}
!141 = distinct !{!141, !139, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!142 = distinct !{!142, !139, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!143 = distinct !{!143, !139, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
!144 = !{!"branch_weights", i32 100000000, i32 1}
!145 = !{!146}
!146 = distinct !{!146, !147, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 0"}
!147 = distinct !{!147, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E"}
!148 = !{!149, !150, !151}
!149 = distinct !{!149, !147, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 1"}
!150 = distinct !{!150, !147, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 2"}
!151 = distinct !{!151, !147, !"_ZN4core3fmt9Arguments16new_v1_formatted17hea2ae333548f7201E: argument 3"}
!152 = !{!"branch_weights", i32 500000000, i32 1000000000}
!153 = !{!154}
!154 = distinct !{!154, !155, !"_ZN4test14pairwise_diffs17hb230db748b916eb8E: argument 0"}
!155 = distinct !{!155, !"_ZN4test14pairwise_diffs17hb230db748b916eb8E"}
!156 = !{!"branch_weights", i32 100000000, i32 500000000}
!157 = !{!"branch_weights", i32 0, i32 1000000000}
!158 = !{!159}
!159 = distinct !{!159, !160, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E: argument 0"}
!160 = distinct !{!160, !"_ZN4test4Vec312squared_norm17h432dc8574a0bf316E"}
!161 = !{!162}
!162 = distinct !{!162, !163, !"_ZN4test10magnitudes17h62e2ac6bcb7d113bE: argument 0"}
!163 = distinct !{!163, !"_ZN4test10magnitudes17h62e2ac6bcb7d113bE"}
!164 = !{!"VP", i32 1, i64 500000000, i64 9, i64 500000000}
!165 = !{!"branch_weights", i32 0, i32 500000000}
!166 = !{!167, !169}
!167 = distinct !{!167, !168, !"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$12split_at_mut17he3b8c5c64a2604f5E: argument 0"}
!168 = distinct !{!168, !"_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$12split_at_mut17he3b8c5c64a2604f5E"}
!169 = distinct !{!169, !170, !"_ZN5alloc5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$12split_at_mut17he29347520c8c9a7dE: argument 0"}
!170 = distinct !{!170, !"_ZN5alloc5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$12split_at_mut17he29347520c8c9a7dE"}
!171 = !{!172}
!172 = distinct !{!172, !173, !"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$i32$GT$2lt17h646f7dca28d0151aE: argument 0"}
!173 = distinct !{!173, !"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$i32$GT$2lt17h646f7dca28d0151aE"}
!174 = !{!175}
!175 = distinct !{!175, !173, !"_ZN4core3cmp5impls55_$LT$impl$u20$core..cmp..PartialOrd$u20$for$u20$i32$GT$2lt17h646f7dca28d0151aE: argument 1"}3223232323
// The Computer Language Benchmarks Game
// http://benchmarksgame.alioth.debian.org/
//
// contributed by Cristi Cobzarenco
use std::ops::{Add, Sub, Mul};
const PI: f64 = 3.141592653589793;
const SOLAR_MASS: f64 = 4.0 * PI * PI;
const YEAR: f64 = 365.24;
const N_BODIES: usize = 5;
const N_PAIRS: usize = N_BODIES * (N_BODIES - 1) / 2;
static BODIES: [Planet; N_BODIES] = [
// Sun
Planet {
pos: Vec3(0.0, 0.0, 0.0),
vel: Vec3(0.0, 0.0, 0.0),
mass: SOLAR_MASS,
},
// Jupiter
Planet {
pos: Vec3(4.84143144246472090e+00,
-1.16032004402742839e+00,
-1.03622044471123109e-01),
vel: Vec3(1.66007664274403694e-03 * YEAR,
7.69901118419740425e-03 * YEAR,
-6.90460016972063023e-05 * YEAR),
mass: 9.54791938424326609e-04 * SOLAR_MASS,
},
// Saturn
Planet {
pos: Vec3(8.34336671824457987e+00,
4.12479856412430479e+00,
-4.03523417114321381e-01),
vel: Vec3(-2.76742510726862411e-03 * YEAR,
4.99852801234917238e-03 * YEAR,
2.30417297573763929e-05 * YEAR),
mass: 2.85885980666130812e-04 * SOLAR_MASS,
},
// Uranus
Planet {
pos: Vec3(1.28943695621391310e+01,
-1.51111514016986312e+01,
-2.23307578892655734e-01),
vel: Vec3(2.96460137564761618e-03 * YEAR,
2.37847173959480950e-03 * YEAR,
-2.96589568540237556e-05 * YEAR),
mass: 4.36624404335156298e-05 * SOLAR_MASS,
},
// Neptune
Planet {
pos: Vec3(1.53796971148509165e+01,
-2.59193146099879641e+01,
1.79258772950371181e-01),
vel: Vec3(2.68067772490389322e-03 * YEAR,
1.62824170038242295e-03 * YEAR,
-9.51592254519715870e-05 * YEAR),
mass: 5.15138902046611451e-05 * SOLAR_MASS,
},
];
/// A 3d Vector type with oveloaded operators to improve readability.
#[derive(Clone, Copy)]
struct Vec3(pub f64, pub f64, pub f64);
impl Vec3 {
fn zero() -> Self { Vec3(0.0, 0.0, 0.0) }
fn norm(&self) -> f64 { self.squared_norm().sqrt() }
fn squared_norm(&self) -> f64 {
self.0 * self.0 + self.1 * self.1 + self.2 * self.2
}
}
impl Add for Vec3 {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Vec3(self.0 + rhs.0, self.1 + rhs.1, self.2 + rhs.2)
}
}
impl Sub for Vec3 {
type Output = Self;
fn sub(self, rhs: Self) -> Self {
Vec3(self.0 - rhs.0, self.1 - rhs.1, self.2 - rhs.2)
}
}
impl Mul<f64> for Vec3 {
type Output = Self;
fn mul(self, rhs: f64) -> Self {
Vec3(self.0 * rhs, self.1 * rhs, self.2 * rhs)
}
}
#[derive(Clone, Copy)]
struct Planet {
pos: Vec3,
vel: Vec3,
mass: f64,
}
/// Computes all pairwise position differences between the planets.
fn pairwise_diffs(bodies: &[Planet; N_BODIES], diff: &mut [Vec3; N_PAIRS]) {
let mut bodies = bodies.iter();
let mut diff = diff.iter_mut();
while let Some(bi) = bodies.next() {
for bj in bodies.clone() {
*diff.next().unwrap() = bi.pos - bj.pos;
}
}
}
/// Computes the magnitude of the force between each pair of planets.
fn magnitudes(diff: &[Vec3; N_PAIRS], dt: f64, mag: &mut [f64; N_PAIRS]) {
for (mag, diff) in mag.iter_mut().zip(diff.iter()) {
let d2 = diff.squared_norm();
*mag = dt / (d2 * d2.sqrt());
}
}
/// Updates the velocities of the planets by computing their gravitational
/// accelerations and performing one step of Euler integration.
fn update_velocities(bodies: &mut [Planet; N_BODIES], dt: f64,
diff: &mut [Vec3; N_PAIRS], mag: &mut [f64; N_PAIRS]) {
pairwise_diffs(bodies, diff);
magnitudes(&diff, dt, mag);
let mut bodies = &mut bodies[..];
let mut mag = mag.iter();
let mut diff = diff.iter();
while let Some(bi) = shift_mut_ref(&mut bodies) {
for bj in bodies.iter_mut() {
let diff = *diff.next().unwrap();
let mag = *mag.next().unwrap();
bi.vel = bi.vel - diff * (bj.mass * mag);
bj.vel = bj.vel + diff * (bi.mass * mag);
}
}
}
/// Advances the solar system by one timestep by first updating the
/// velocities and then integrating the positions using the updated velocities.
///
/// Note: the `diff` & `mag` arrays are effectively scratch space. They're
/// provided as arguments to avoid re-zeroing them every time `advance` is
/// called.
fn advance(mut bodies: &mut [Planet; N_BODIES], dt: f64,
diff: &mut [Vec3; N_PAIRS], mag: &mut [f64; N_PAIRS]) {
update_velocities(bodies, dt, diff, mag);
for body in bodies.iter_mut() {
body.pos = body.pos + body.vel * dt;
}
}
/// Computes the total energy of the solar system.
fn energy(bodies: &[Planet; N_BODIES]) -> f64 {
let mut e = 0.0;
let mut bodies = bodies.iter();
while let Some(bi) = bodies.next() {
e += bi.vel.squared_norm() * bi.mass / 2.0
- bi.mass * bodies.clone()
.map(|bj| bj.mass / (bi.pos - bj.pos).norm())
.fold(0.0, |a, b| a + b);
}
e
}
/// Offsets the sun's velocity to make the overall momentum of the system zero.
fn offset_momentum(bodies: &mut [Planet; N_BODIES]) {
let p = bodies.iter().fold(Vec3::zero(), |v, b| v + b.vel * b.mass);
bodies[0].vel = p * (-1.0 / bodies[0].mass);
}
fn main() {
let n = std::env::args_os().nth(1)
.and_then(|s| s.into_string().ok())
.and_then(|n| n.parse().ok())
.unwrap_or(1000);
println!("{}", n);
let mut bodies = BODIES;
let mut diff = [Vec3::zero(); N_PAIRS];
let mut mag = [0.0f64; N_PAIRS];
offset_momentum(&mut bodies);
println!("{:.9}", energy(&bodies));
for _ in (0..n) {
advance(&mut bodies, 0.01, &mut diff, &mut mag);
}
println!("{:.9}", energy(&bodies));
}
/// Pop a mutable reference off the head of a slice, mutating the slice to no
/// longer contain the mutable reference.
fn shift_mut_ref<'a, T>(r: &mut &'a mut [T]) -> Option<&'a mut T> {
if r.len() == 0 { return None }
let tmp = std::mem::replace(r, &mut []);
let (h, t) = tmp.split_at_mut(1);
*r = t;
Some(&mut h[0])
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment