; ModuleID = 'zen_test.530n1rno-cgu.0' source_filename = "zen_test.530n1rno-cgu.0" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" %"core::sync::atomic::AtomicU64" = type { [0 x i64], i64, [0 x i64] } @vtable.0 = private unnamed_addr constant { void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8**)* } { void (i8**)* @_ZN4core3ptr18real_drop_in_place17h0eb271b0ffeae54bE, i64 8, i64 8, i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h9794cd4d6a9ac133E", i32 (i8**)* @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h9794cd4d6a9ac133E", i32 (i8**)* @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17hf92263b733905ef4E" }, align 8 ; std::rt::lang_start ; Function Attrs: nounwind nonlazybind define hidden i64 @_ZN3std2rt10lang_start17h734ff74339d801f8E(void ()* nonnull %main, i64 %argc, i8** %argv) unnamed_addr #0 { start: %_7 = alloca i8*, align 8 %0 = bitcast i8** %_7 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %0) %1 = bitcast i8** %_7 to void ()** store void ()* %main, void ()** %1, align 8 %2 = bitcast i8** %_7 to {}* ; call std::rt::lang_start_internal %3 = call i64 @_ZN3std2rt19lang_start_internal17h571a3f440066b3daE({}* nonnull align 1 %2, [3 x i64]* noalias readonly align 8 dereferenceable(24) bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8**)* }* @vtable.0 to [3 x i64]*), i64 %argc, i8** %argv) call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %0) ret i64 %3 } ; std::rt::lang_start::{{closure}} ; Function Attrs: nounwind nonlazybind define internal i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h9794cd4d6a9ac133E"(i8** noalias nocapture readonly align 8 dereferenceable(8) %arg0) unnamed_addr #0 { start: %0 = bitcast i8** %arg0 to void ()** %1 = load void ()*, void ()** %0, align 8, !nonnull !2 tail call void %1() #3 ret i32 0 } ; core::ops::function::FnOnce::call_once{{vtable.shim}} ; Function Attrs: nounwind nonlazybind define internal i32 @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17hf92263b733905ef4E"(i8** nocapture readonly %arg0) unnamed_addr #0 { start: %0 = bitcast i8** %arg0 to void ()** %1 = load void ()*, void ()** %0, align 8, !nonnull !2 tail call void %1() #3, !noalias !3 ret i32 0 } ; core::ptr::real_drop_in_place ; Function Attrs: norecurse nounwind nonlazybind readnone define internal void @_ZN4core3ptr18real_drop_in_place17h0eb271b0ffeae54bE(i8** nocapture align 8 dereferenceable(8) %arg0) unnamed_addr #1 { start: ret void } ; zen_test::main ; Function Attrs: nounwind nonlazybind define internal void @_ZN8zen_test4main17hd8258ae14400aafeE() unnamed_addr #0 { start: %_3 = alloca %"core::sync::atomic::AtomicU64", align 8 %0 = bitcast %"core::sync::atomic::AtomicU64"* %_3 to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %0) %abi_cast.0..sroa_idx = getelementptr inbounds %"core::sync::atomic::AtomicU64", %"core::sync::atomic::AtomicU64"* %_3, i64 0, i32 0, i64 0 store i64 19, i64* %abi_cast.0..sroa_idx, align 8 %1 = atomicrmw sub i64* %abi_cast.0..sroa_idx, i64 6 seq_cst call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %0) ret void } ; std::rt::lang_start_internal ; Function Attrs: nounwind nonlazybind declare i64 @_ZN3std2rt19lang_start_internal17h571a3f440066b3daE({}* nonnull align 1, [3 x i64]* noalias readonly align 8 dereferenceable(24), i64, i8**) unnamed_addr #0 ; Function Attrs: nounwind nonlazybind define i32 @main(i32, i8**) unnamed_addr #0 { top: %_7.i = alloca i8*, align 8 %2 = sext i32 %0 to i64 %3 = bitcast i8** %_7.i to i8* call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %3) #3 %4 = bitcast i8** %_7.i to void ()** store void ()* @_ZN8zen_test4main17hd8258ae14400aafeE, void ()** %4, align 8 %5 = bitcast i8** %_7.i to {}* ; call std::rt::lang_start_internal %6 = call i64 @_ZN3std2rt19lang_start_internal17h571a3f440066b3daE({}* nonnull align 1 %5, [3 x i64]* noalias readonly align 8 dereferenceable(24) bitcast ({ void (i8**)*, i64, i64, i32 (i8**)*, i32 (i8**)*, i32 (i8**)* }* @vtable.0 to [3 x i64]*), i64 %2, i8** %1) #3 call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %3) #3 %7 = trunc i64 %6 to i32 ret i32 %7 } ; Function Attrs: argmemonly nounwind declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2 ; Function Attrs: argmemonly nounwind declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2 attributes #0 = { nounwind nonlazybind "probe-stack"="__rust_probestack" "target-cpu"="x86-64" } attributes #1 = { norecurse nounwind nonlazybind readnone "probe-stack"="__rust_probestack" "target-cpu"="x86-64" } attributes #2 = { argmemonly nounwind } attributes #3 = { nounwind } !llvm.module.flags = !{!0, !1} !0 = !{i32 7, !"PIE Level", i32 2} !1 = !{i32 2, !"RtLibUseGOT", i32 1} !2 = !{} !3 = !{!4} !4 = distinct !{!4, !5, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h9794cd4d6a9ac133E: %arg0"} !5 = distinct !{!5, !"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h9794cd4d6a9ac133E"}