Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Algol68
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C with Coccinelle
C++ with Coccinelle
C++ (Circle)
CIRCT
Clean
Clojure
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
GLSL
Go
Haskell
HLSL
Hook
Hylo
IL
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Mojo
Nim
Numba
Nix
Objective-C
Objective-C++
OCaml
Odin
OpenCL C
Pascal
Pony
PTX
Python
Racket
Raku
Ruby
Rust
Sail
Snowball
Scala
Slang
Solidity
Spice
SPIR-V
Swift
LLVM TableGen
Toit
Triton
TypeScript Native
V
Vala
Visual Basic
Vyper
WASM
Yul (Solidity IR)
Zig
Javascript
GIMPLE
Ygen
sway
llvm source #1
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
clang (assertions trunk)
clang (trunk)
clang 10.0.0
clang 10.0.1
clang 11.0.0
clang 11.0.1
clang 12.0.0
clang 12.0.1
clang 13.0.0
clang 14.0.0
clang 15.0.0
clang 16.0.0
clang 17.0.1
clang 18.1.0
clang 19.1.0
clang 20.1.0
clang 21.1.0
clang 4.0.1
clang 5.0.0
clang 6.0.0
clang 7.0.0
clang 8.0.0
clang 9.0.0
hexagon-clang 16.0.5
llc (assertions trunk)
llc (trunk)
llc 10.0.0
llc 10.0.1
llc 11.0.0
llc 11.0.1
llc 12.0.0
llc 12.0.1
llc 13.0.0
llc 14.0.0
llc 15.0.0
llc 16.0.0
llc 17.0.1
llc 18.1.0
llc 19.1.0
llc 20.1.0
llc 21.1.0
llc 3.2
llc 3.3
llc 3.9.1
llc 4.0.0
llc 4.0.1
llc 5.0.0
llc 6.0.0
llc 7.0.0
llc 8.0.0
llc 9.0.0
opt (assertions trunk)
opt (trunk)
opt 10.0.0
opt 10.0.1
opt 11.0.0
opt 11.0.1
opt 12.0.0
opt 12.0.1
opt 13.0.0
opt 14.0.0
opt 15.0.0
opt 16.0.0
opt 17.0.1
opt 18.1.0
opt 19.1.0
opt 20.1.0
opt 21.1.0
opt 3.2
opt 3.3
opt 3.9.1
opt 4.0.0
opt 4.0.1
opt 5.0.0
opt 6.0.0
opt 7.0.0
opt 8.0.0
opt 9.0.0
Options
Source code
; ModuleID = 'repro.48d8976a07162e6d-cgu.0' source_filename = "repro.48d8976a07162e6d-cgu.0" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" %Adt58 = type { i8, [103 x i8] } %"Adt58::Variant1" = type { [1 x i64], { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr } } %"Adt58::Variant2" = type { [1 x i8], [8 x i8], [1 x i8], [8 x i16], [3 x i16], [2 x i64] } %Adt65 = type { { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, [2 x i64] } @vtable.0 = private unnamed_addr constant <{ ptr, [16 x i8], ptr, ptr, ptr }> <{ ptr @"_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h9468bf8cd9285ca4E", [16 x i8] c"\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00", ptr @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17hb49b164c8a336846E", ptr @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h2ae8767ae801fedeE", ptr @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h2ae8767ae801fedeE" }>, align 8 @alloc_87551382a9de3243abbfdbda2f0b586b = private unnamed_addr constant <{ [4 x i8] }> <{ [4 x i8] c"%d\0A\00" }>, align 1 ; std::sys_common::backtrace::__rust_begin_short_backtrace ; Function Attrs: noinline nonlazybind uwtable define internal void @_ZN3std10sys_common9backtrace28__rust_begin_short_backtrace17h7f191982774c7ca6E(ptr %f) unnamed_addr #0 { start: ; call core::ops::function::FnOnce::call_once call void @_ZN4core3ops8function6FnOnce9call_once17h5bea907e86c354bfE(ptr %f) call void asm sideeffect "", "~{memory}"(), !srcloc !4 ret void } ; std::rt::lang_start::{{closure}} ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h2ae8767ae801fedeE"(ptr align 8 %_1) unnamed_addr #1 { start: %self = alloca i8, align 1 %_4 = load ptr, ptr %_1, align 8, !nonnull !5, !noundef !5 ; call std::sys_common::backtrace::__rust_begin_short_backtrace call void @_ZN3std10sys_common9backtrace28__rust_begin_short_backtrace17h7f191982774c7ca6E(ptr %_4) ; call <() as std::process::Termination>::report %0 = call i8 @"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17hb7858f79eb84fda8E"() store i8 %0, ptr %self, align 1 %_6 = load i8, ptr %self, align 1, !noundef !5 %_0 = zext i8 %_6 to i32 ret i32 %_0 } ; core::ops::function::FnOnce::call_once{{vtable.shim}} ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @"_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17hb49b164c8a336846E"(ptr %_1) unnamed_addr #1 { start: %_2 = alloca {}, align 1 %0 = load ptr, ptr %_1, align 8, !nonnull !5, !noundef !5 ; call core::ops::function::FnOnce::call_once %_0 = call i32 @_ZN4core3ops8function6FnOnce9call_once17h27b28c7115d0cffdE(ptr %0) ret i32 %_0 } ; core::ops::function::FnOnce::call_once ; Function Attrs: inlinehint nonlazybind uwtable define internal i32 @_ZN4core3ops8function6FnOnce9call_once17h27b28c7115d0cffdE(ptr %0) unnamed_addr #1 personality ptr @rust_eh_personality { start: %1 = alloca { ptr, i32 }, align 8 %_2 = alloca {}, align 1 %_1 = alloca ptr, align 8 store ptr %0, ptr %_1, align 8 ; invoke std::rt::lang_start::{{closure}} %_0 = invoke i32 @"_ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h2ae8767ae801fedeE"(ptr align 8 %_1) to label %bb1 unwind label %cleanup bb3: ; preds = %cleanup %2 = load ptr, ptr %1, align 8, !noundef !5 %3 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1 %4 = load i32, ptr %3, align 8, !noundef !5 %5 = insertvalue { ptr, i32 } poison, ptr %2, 0 %6 = insertvalue { ptr, i32 } %5, i32 %4, 1 resume { ptr, i32 } %6 cleanup: ; preds = %start %7 = landingpad { ptr, i32 } cleanup %8 = extractvalue { ptr, i32 } %7, 0 %9 = extractvalue { ptr, i32 } %7, 1 %10 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 0 store ptr %8, ptr %10, align 8 %11 = getelementptr inbounds { ptr, i32 }, ptr %1, i32 0, i32 1 store i32 %9, ptr %11, align 8 br label %bb3 bb1: ; preds = %start ret i32 %_0 } ; core::ops::function::FnOnce::call_once ; Function Attrs: inlinehint nonlazybind uwtable define internal void @_ZN4core3ops8function6FnOnce9call_once17h5bea907e86c354bfE(ptr %_1) unnamed_addr #1 { start: %_2 = alloca {}, align 1 call void %_1() ret void } ; core::ptr::drop_in_place<std::rt::lang_start<()>::{{closure}}> ; Function Attrs: inlinehint nonlazybind uwtable define internal void @"_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h9468bf8cd9285ca4E"(ptr align 8 %_1) unnamed_addr #1 { start: ret void } ; core::hint::black_box ; Function Attrs: inlinehint nonlazybind uwtable define internal void @_ZN4core4hint9black_box17h3a52c818116069c6E(ptr sret({ [2 x i64], i16, [1 x i16], i32 }) align 8 %_0, ptr align 8 %dummy) unnamed_addr #1 { start: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_0, ptr align 8 %dummy, i64 24, i1 false) call void asm sideeffect "", "r,~{memory}"(ptr %_0), !srcloc !4 ret void } ; core::hint::black_box ; Function Attrs: inlinehint nonlazybind uwtable define internal void @_ZN4core4hint9black_box17h43a8b18395b882e6E(ptr sret([7 x i64]) align 8 %_0, ptr align 8 %dummy) unnamed_addr #1 { start: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_0, ptr align 8 %dummy, i64 56, i1 false) call void asm sideeffect "", "r,~{memory}"(ptr %_0), !srcloc !4 ret void } ; <() as std::process::Termination>::report ; Function Attrs: inlinehint nonlazybind uwtable define internal i8 @"_ZN54_$LT$$LP$$RP$$u20$as$u20$std..process..Termination$GT$6report17hb7858f79eb84fda8E"() unnamed_addr #1 { start: ret i8 0 } ; repro::dump_var ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro8dump_var17h5f90de920b6ee1d3E(ptr align 8 %x) unnamed_addr #2 { start: %_8 = load i16, ptr %x, align 8, !noundef !5 %_7 = sext i16 %_8 to i32 %_2 = call i32 (ptr, ...) @printf(ptr @alloc_87551382a9de3243abbfdbda2f0b586b, i32 %_7) ret void } ; repro::black_box ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro9black_box17h58109cf990c39389E(ptr align 8 %v) unnamed_addr #2 { start: %_2 = alloca { [2 x i64], i16, [1 x i16], i32 }, align 8 ; call core::hint::black_box call void @_ZN4core4hint9black_box17h3a52c818116069c6E(ptr sret({ [2 x i64], i16, [1 x i16], i32 }) align 8 %_2, ptr align 8 %v) ret void } ; repro::fn4 ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro3fn417hbcad5aa86ffc8eb2E() unnamed_addr #2 { start: %_8 = alloca [7 x i64], align 8 %_7 = alloca { i16, [3 x i16], [7 x i64] }, align 8 %_6 = alloca { double, { i16, [3 x i16], [7 x i64] } }, align 8 %_5 = alloca [2 x i64], align 8 %_4 = alloca { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, align 8 %_3 = alloca [2 x i64], align 8 %i = alloca i128, align 8 store i128 0, ptr %i, align 8 %0 = getelementptr inbounds [2 x i64], ptr %_5, i64 0, i64 0 call void @llvm.memset.p0.i64(ptr align 8 %0, i8 0, i64 16, i1 false) %1 = getelementptr inbounds [7 x i64], ptr %_8, i64 0, i64 0 call void @llvm.memset.p0.i64(ptr align 8 %1, i8 0, i64 56, i1 false) store i16 0, ptr %_7, align 8 %2 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %_7, i32 0, i32 2 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2, ptr align 8 %_8, i64 56, i1 false) store double 0.000000e+00, ptr %_6, align 8 %3 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %_6, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3, ptr align 8 %_7, i64 64, i1 false) %4 = load <2 x i64>, ptr %_5, align 8 store <2 x i64> %4, ptr %_4, align 8 %5 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_4, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %5, ptr align 8 %_6, i64 72, i1 false) %6 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_4, i32 0, i32 2 store ptr %i, ptr %6, align 8 ; call repro::fn5 call void @_ZN5repro3fn517h5d2910b0843c33f6E(ptr sret([2 x i64]) align 8 %_3, ptr align 8 %_4) ret void } ; repro::fn5 ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro3fn517h5d2910b0843c33f6E(ptr sret([2 x i64]) align 8 %_0, ptr align 8 %_1) unnamed_addr #2 { start: %0 = alloca { double, { i16, [3 x i16], [7 x i64] } }, align 8 %1 = alloca { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, align 8 %_6 = alloca [3 x i64], align 8 %_5 = alloca { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, align 8 %_3 = alloca { [2 x i64], i16, [1 x i16], i32 }, align 8 %_2 = alloca %Adt58, align 8 %2 = getelementptr inbounds [2 x i64], ptr %_0, i64 0, i64 0 store i64 -3700765774516778503, ptr %2, align 8 %3 = getelementptr inbounds [2 x i64], ptr %_0, i64 0, i64 1 store i64 -3642890134137765099, ptr %3, align 8 %4 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_5, i32 0, i32 1 %5 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %4, i32 0, i32 1 store i16 0, ptr %5, align 8 %6 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 %7 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %6, i32 0, i32 1 %8 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %7, i32 0, i32 2 %9 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %5, i32 0, i32 2 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %8, i64 56, i1 false) %10 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_5, i32 0, i32 1 store double 0.000000e+00, ptr %10, align 8 %11 = getelementptr inbounds [2 x i64], ptr %_5, i64 0, i64 0 store i64 -8075721443188218256, ptr %11, align 8 %12 = getelementptr inbounds [2 x i64], ptr %_5, i64 0, i64 1 store i64 -8075721443188218256, ptr %12, align 8 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1, ptr align 8 %_1, i64 96, i1 false) %13 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_5, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %13, i64 72, i1 false) ; call repro::fn6 call void @_ZN5repro3fn617ha4f26e5581c766d6E(ptr sret([3 x i64]) align 8 %_6, ptr align 8 %1, ptr align 8 %0) %14 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_5, i32 0, i32 2 %15 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 2 %16 = load ptr, ptr %15, align 8, !noundef !5 store ptr %16, ptr %14, align 8 %17 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_5, i32 0, i32 1 %18 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %17, i32 0, i32 1 %19 = load i16, ptr %18, align 8, !noundef !5 %_7 = xor i16 %19, -1 %20 = getelementptr inbounds %"Adt58::Variant1", ptr %_2, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %_5, i64 96, i1 false) store i8 1, ptr %_2, align 8 %21 = getelementptr inbounds %"Adt58::Variant2", ptr %_2, i32 0, i32 5 %22 = getelementptr inbounds [2 x i64], ptr %21, i64 0, i64 0 store i64 -8075721443188218256, ptr %22, align 8 %23 = getelementptr inbounds [2 x i64], ptr %21, i64 0, i64 1 store i64 -8075721443188218256, ptr %23, align 8 %24 = getelementptr inbounds %"Adt58::Variant2", ptr %_2, i32 0, i32 5 %25 = load <2 x i64>, ptr %24, align 8 store <2 x i64> %25, ptr %_3, align 8 %26 = getelementptr inbounds { [2 x i64], i16, [1 x i16], i32 }, ptr %_3, i32 0, i32 1 store i16 %_7, ptr %26, align 8 %27 = getelementptr inbounds { [2 x i64], i16, [1 x i16], i32 }, ptr %_3, i32 0, i32 3 store i32 396128, ptr %27, align 4 ; call repro::black_box call void @_ZN5repro9black_box17h58109cf990c39389E(ptr align 8 %_3) ret void } ; repro::fn6 ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro3fn617ha4f26e5581c766d6E(ptr sret([3 x i64]) align 8 %_0, ptr align 8 %_1, ptr align 8 %_2) unnamed_addr #2 { start: %0 = alloca { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, align 8 %1 = alloca { i16, [3 x i16], [7 x i64] }, align 8 %2 = alloca { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, align 8 %3 = alloca { i16, [3 x i16], [7 x i64] }, align 8 %_5 = alloca { i16, [3 x i16], [7 x i64] }, align 8 %_3 = alloca %Adt65, align 8 %4 = getelementptr inbounds [3 x i64], ptr %_0, i64 0, i64 0 store i64 -7316204373706580326, ptr %4, align 8 %5 = getelementptr inbounds [3 x i64], ptr %_0, i64 0, i64 1 store i64 7601018311436077242, ptr %5, align 8 %6 = getelementptr inbounds [3 x i64], ptr %_0, i64 0, i64 2 store i64 4662124226323273036, ptr %6, align 8 %7 = getelementptr inbounds %Adt65, ptr %_3, i32 0, i32 1 %8 = getelementptr inbounds [2 x i64], ptr %7, i64 0, i64 0 store i64 1, ptr %8, align 8 %9 = getelementptr inbounds [2 x i64], ptr %7, i64 0, i64 1 store i64 3, ptr %9, align 8 %10 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_3, i32 0, i32 1 %11 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %10, i32 0, i32 1 %12 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 %13 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %12, i32 0, i32 1 %14 = load i16, ptr %13, align 8, !noundef !5 store i16 %14, ptr %11, align 8 %15 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %_2, i32 0, i32 1 %16 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %15, i32 0, i32 2 %17 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %11, i32 0, i32 2 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %16, i64 56, i1 false) call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_3, ptr align 8 %_1, i64 96, i1 false) %18 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_3, i32 0, i32 1 %19 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 %20 = load double, ptr %19, align 8, !noundef !5 store double %20, ptr %18, align 8 %21 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %_2, i32 0, i32 1 %22 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %18, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %22, ptr align 8 %21, i64 64, i1 false) %23 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 %24 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %23, i32 0, i32 1 %25 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_3, i32 0, i32 1 %26 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %25, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %26, i64 64, i1 false) %27 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %_2, i32 0, i32 1 %28 = load i16, ptr %27, align 8, !noundef !5 store i16 %28, ptr %_5, align 8 %29 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_3, i32 0, i32 1 %30 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %29, i32 0, i32 1 %31 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %30, i32 0, i32 2 %32 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %_5, i32 0, i32 2 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %31, i64 56, i1 false) call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3, ptr align 8 %_5, i64 64, i1 false) call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2, ptr align 8 %_1, i64 96, i1 false) %33 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %_2, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1, ptr align 8 %33, i64 64, i1 false) %34 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 %35 = load double, ptr %34, align 8, !noundef !5 %36 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %_5, i32 0, i32 2 %37 = load double, ptr %_2, align 8, !noundef !5 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %_1, i64 96, i1 false) %38 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_1, i32 0, i32 1 ; call repro::fn13 %_4 = call i8 @_ZN5repro4fn1317h60c8754b5808aaf4E(ptr align 8 %3, ptr align 8 %_3, ptr align 8 %2, ptr align 8 %1, double %35, ptr align 8 %36, double %37, ptr align 8 %0, ptr align 8 %38) ret void } ; repro::black_box2 ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro10black_box217he05ac446572f7e7dE(ptr align 8 %v) unnamed_addr #2 { start: %_2 = alloca [7 x i64], align 8 ; call core::hint::black_box call void @_ZN4core4hint9black_box17h43a8b18395b882e6E(ptr sret([7 x i64]) align 8 %_2, ptr align 8 %v) ret void } ; repro::fn13 ; Function Attrs: nonlazybind uwtable define internal i8 @_ZN5repro4fn1317h60c8754b5808aaf4E(ptr align 8 %_1, ptr align 8 %_2, ptr align 8 %_3, ptr align 8 %_4, double %_5, ptr align 8 %_6, double %_7, ptr align 8 %_8, ptr align 8 %_9) unnamed_addr #2 { start: %0 = getelementptr inbounds { [2 x i64], { double, { i16, [3 x i16], [7 x i64] } }, ptr }, ptr %_3, i32 0, i32 1 %1 = getelementptr inbounds { double, { i16, [3 x i16], [7 x i64] } }, ptr %0, i32 0, i32 1 call void @llvm.memcpy.p0.p0.i64(ptr align 8 %_4, ptr align 8 %1, i64 64, i1 false) %2 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %_4, i32 0, i32 2 %3 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 0 store i64 9223372036854775807, ptr %3, align 8 %4 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 1 store i64 -9223372036854775808, ptr %4, align 8 %5 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 2 store i64 -9223372036854775808, ptr %5, align 8 %6 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 3 store i64 -9223372036854775808, ptr %6, align 8 %7 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 4 store i64 79, ptr %7, align 8 %8 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 5 store i64 -75, ptr %8, align 8 %9 = getelementptr inbounds [7 x i64], ptr %2, i64 0, i64 6 store i64 -9223372036854775808, ptr %9, align 8 %10 = getelementptr inbounds { i16, [3 x i16], [7 x i64] }, ptr %_1, i32 0, i32 2 ; call repro::black_box2 call void @_ZN5repro10black_box217he05ac446572f7e7dE(ptr align 8 %10) ; call repro::dump_var call void @_ZN5repro8dump_var17h5f90de920b6ee1d3E(ptr align 8 %_4) ret i8 -126 } ; repro::main ; Function Attrs: nonlazybind uwtable define internal void @_ZN5repro4main17h9b5e493692628116E() unnamed_addr #2 { start: ; call repro::fn4 call void @_ZN5repro3fn417hbcad5aa86ffc8eb2E() ret void } ; Function Attrs: nonlazybind uwtable define i32 @rust_eh_personality(i32, i32, i64, ptr, ptr) unnamed_addr #2 { start: ret i32 0 } ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3 ; Function Attrs: nonlazybind uwtable declare i32 @printf(ptr, ...) unnamed_addr #2 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4 ; Function Attrs: nonlazybind define i32 @main(i32 %0, ptr %1) unnamed_addr #5 { start: call void @_ZN5repro3fn417hbcad5aa86ffc8eb2E() ret i32 0 } attributes #0 = { noinline nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { inlinehint nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #2 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) } attributes #5 = { nonlazybind "target-cpu"="x86-64" } !llvm.module.flags = !{!0, !1, !2} !llvm.ident = !{!3} !0 = !{i32 8, !"PIC Level", i32 2} !1 = !{i32 7, !"PIE Level", i32 2} !2 = !{i32 2, !"RtLibUseGOT", i32 1} !3 = !{!"rustc version 1.76.0-dev"} !4 = !{i32 1623106} !5 = !{}
Become a Patron
Sponsor on GitHub
Donate via PayPal
Compiler Explorer Shop
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
CE on Bluesky
Statistics
Changelog
Version tree