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
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
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 = 'bad.ll' source_filename = "f" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13" target triple = "x86_64-unknown-linux-gnu" @"+Core.Float64#1218" = private unnamed_addr constant {}* @"+Core.Float64#1218.jit", !julia.constgv !0 @"*Core.Intrinsics.sle_int#1219" = private unnamed_addr constant {}* @"*Core.Intrinsics.sle_int#1219.jit", !julia.constgv !0 @"jl_global#1220" = private unnamed_addr constant {}* @"jl_global#1220.jit", !julia.constgv !0 @"*Core.===#1221" = private unnamed_addr constant {}* @"*Core.===#1221.jit", !julia.constgv !0 @"*Core.getproperty#1222" = private unnamed_addr constant {}* @"*Core.getproperty#1222.jit", !julia.constgv !0 @"+Core.GenericMemory#1223" = private unnamed_addr constant {}* @"+Core.GenericMemory#1223.jit", !julia.constgv !0 @jl_undefref_exception = external constant {}* @"*Core.memoryref#1224" = private unnamed_addr constant {}* @"*Core.memoryref#1224.jit", !julia.constgv !0 @"*Core.tuple#1225" = private unnamed_addr constant {}* @"*Core.tuple#1225.jit", !julia.constgv !0 @"+Core.Array#1226" = private unnamed_addr constant {}* @"+Core.Array#1226.jit", !julia.constgv !0 @"*Core.getfield#1227" = private unnamed_addr constant {}* @"*Core.getfield#1227.jit", !julia.constgv !0 @"*Core.Intrinsics.slt_int#1228" = private unnamed_addr constant {}* @"*Core.Intrinsics.slt_int#1228.jit", !julia.constgv !0 @"*Core.Intrinsics.not_int#1229" = private unnamed_addr constant {}* @"*Core.Intrinsics.not_int#1229.jit", !julia.constgv !0 @"*Core.Intrinsics.sub_int#1230" = private unnamed_addr constant {}* @"*Core.Intrinsics.sub_int#1230.jit", !julia.constgv !0 @"*Core.Intrinsics.bitcast#1231" = private unnamed_addr constant {}* @"*Core.Intrinsics.bitcast#1231.jit", !julia.constgv !0 @"*Core.Intrinsics.ult_int#1232" = private unnamed_addr constant {}* @"*Core.Intrinsics.ult_int#1232.jit", !julia.constgv !0 @"*Core.memoryrefset!#1233" = private unnamed_addr constant {}* @"*Core.memoryrefset!#1233.jit", !julia.constgv !0 @"_j_const#1" = private unnamed_addr constant double 0.000000e+00, align 8 @"*Core.Intrinsics.sitofp#1234" = private unnamed_addr constant {}* @"*Core.Intrinsics.sitofp#1234.jit", !julia.constgv !0 @"*Core.UInt#1235" = private unnamed_addr constant {}* @"*Core.UInt#1235.jit", !julia.constgv !0 @"*Core.memoryrefget#1236" = private unnamed_addr constant {}* @"*Core.memoryrefget#1236.jit", !julia.constgv !0 @"*Main.Base.throw_boundserror#1237" = private unnamed_addr constant {}* @"*Main.Base.throw_boundserror#1237.jit", !julia.constgv !0 @"*Core.Intrinsics.add_int#1239" = private unnamed_addr constant {}* @"*Core.Intrinsics.add_int#1239.jit", !julia.constgv !0 @"*Core.getfield#1227.jit" = private alias {}, inttoptr (i64 140573758182304 to {}*) @"+Core.Array#1226.jit" = private alias {}, inttoptr (i64 140573758502272 to {}*) @"+Core.GenericMemory#1223.jit" = private alias {}, inttoptr (i64 140573758502464 to {}*) @"*Core.UInt#1235.jit" = private alias {}, inttoptr (i64 140573758715680 to {}*) @"*Core.===#1221.jit" = private alias {}, inttoptr (i64 140573763043168 to {}*) @"*Core.tuple#1225.jit" = private alias {}, inttoptr (i64 140573771937328 to {}*) @"*Core.Intrinsics.bitcast#1231.jit" = private alias {}, inttoptr (i64 140573793388400 to {}*) @"*Core.Intrinsics.sitofp#1234.jit" = private alias {}, inttoptr (i64 140573798659344 to {}*) @"*Core.Intrinsics.not_int#1229.jit" = private alias {}, inttoptr (i64 140573798660912 to {}*) @"*Core.Intrinsics.sle_int#1219.jit" = private alias {}, inttoptr (i64 140573798662032 to {}*) @"*Core.Intrinsics.ult_int#1232.jit" = private alias {}, inttoptr (i64 140573798662144 to {}*) @"*Core.Intrinsics.slt_int#1228.jit" = private alias {}, inttoptr (i64 140573798662256 to {}*) @"*Core.Intrinsics.sub_int#1230.jit" = private alias {}, inttoptr (i64 140573798664160 to {}*) @"*Core.Intrinsics.add_int#1239.jit" = private alias {}, inttoptr (i64 140573798664272 to {}*) @"*Core.memoryrefset!#1233.jit" = private alias {}, inttoptr (i64 140573800686752 to {}*) @"*Core.memoryrefget#1236.jit" = private alias {}, inttoptr (i64 140573800686944 to {}*) @"*Core.memoryref#1224.jit" = private alias {}, inttoptr (i64 140573800687136 to {}*) @"*Main.Base.throw_boundserror#1237.jit" = private alias {}, inttoptr (i64 140573809154816 to {}*) @"*Core.getproperty#1222.jit" = private alias {}, inttoptr (i64 140573809386416 to {}*) @"+Core.Float64#1218.jit" = private alias {}, inttoptr (i64 140573810536000 to {}*) @"jl_global#1220.jit" = private alias {}, inttoptr (i64 140573952020752 to {}*) define swiftcc { {} addrspace(10)*, i8 } @julia_f_1216([8 x i8]* noalias nocapture noundef nonnull align 8 dereferenceable(8) %union_bytes_return, {}*** nonnull swiftself %pgcstack_arg, i64 signext %"n::Int64") #0 !dbg !6 { top: %0 = alloca i64, align 8 %1 = bitcast i64* %0 to i8* %2 = alloca i64, align 8 %3 = bitcast i64* %2 to i8* %"new::Tuple" = alloca [1 x i64], align 8 %"new::Array.size" = alloca [1 x i64], align 8 %"new::Array.size29" = alloca [1 x i64], align 8 %"new::Array.size61" = alloca [1 x i64], align 8 %4 = alloca double, align 8 %"new::Tuple80" = alloca [1 x i64], align 8 %"new::Tuple83" = alloca [1 x i64], align 8 %pgcstack = call {}*** @julia.get_pgcstack() call void @llvm.dbg.value(metadata i64 %"n::Int64", metadata !18, metadata !DIExpression()), !dbg !19 %ptls_field2 = getelementptr inbounds {}**, {}*** %pgcstack, i64 2 %5 = bitcast {}*** %ptls_field2 to i64*** %ptls_load34 = load i64**, i64*** %5, align 8, !tbaa !20 %6 = getelementptr inbounds i64*, i64** %ptls_load34, i64 2 %safepoint = load i64*, i64** %6, align 8, !tbaa !24, !invariant.load !0 fence syncscope("singlethread") seq_cst call void @julia.safepoint(i64* %safepoint), !dbg !26 fence syncscope("singlethread") seq_cst %7 = icmp sgt i64 %"n::Int64", 0, !dbg !27 br i1 %7, label %L8, label %common.ret, !dbg !31 common.ret: ; preds = %top, %L128 %common.ret.op = phi { {} addrspace(10)*, i8 } [ { {} addrspace(10)* null, i8 1 }, %L128 ], [ { {} addrspace(10)* addrspacecast ({}* @"jl_global#1220.jit" to {} addrspace(10)*), i8 -126 }, %top ] call void @llvm.lifetime.end.p0i8(i64 8, i8* %3) call void @llvm.lifetime.end.p0i8(i64 8, i8* %1) ret { {} addrspace(10)*, i8 } %common.ret.op, !dbg !19 L8: ; preds = %top %"Memory{Float64}[]" = call {} addrspace(10)* @julia.gc_alloc_genericmemory({} addrspace(10)* addrspacecast ({}* @"+Core.GenericMemory#1223.jit" to {} addrspace(10)*), i64 %"n::Int64", i64 8, i8 0, i8 0, i8 0), !dbg !32 %8 = bitcast {} addrspace(10)* %"Memory{Float64}[]" to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !44 %.data_ptr = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(10)* %8, i64 0, i32 1, !dbg !44 %9 = bitcast {} addrspace(10)** addrspace(10)* %.data_ptr to i8* addrspace(10)*, !dbg !44 %10 = load i8*, i8* addrspace(10)* %9, align 8, !dbg !44, !tbaa !24, !invariant.load !0, !alias.scope !45, !noalias !48, !nonnull !0 %11 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Tuple", i64 0, i64 0, !dbg !44 store i64 %"n::Int64", i64* %11, align 8, !dbg !44, !tbaa !53, !alias.scope !55, !noalias !56 %current_task25 = getelementptr inbounds {}**, {}*** %pgcstack, i64 -14, !dbg !44 %current_task2 = bitcast {}*** %current_task25 to {}**, !dbg !44 call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) call void @llvm.lifetime.start.p0i8(i64 8, i8* %3) %12 = bitcast i64* %0 to i8**, !dbg !44 store i8* %10, i8** %12, align 8, !dbg !44 %memcpy_refined_src = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Tuple", i64 0, i64 0, !dbg !44 %13 = load i64, i64* %memcpy_refined_src, align 8, !dbg !44, !tbaa !53, !alias.scope !55, !noalias !56 store i64 %13, i64* %2, align 8, !dbg !44 %memcpy_refined_dst4 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size", i64 0, i64 0, !dbg !57 %14 = load i64, i64* %2, align 8, !dbg !57 store i64 %14, i64* %memcpy_refined_dst4, align 8, !dbg !57, !tbaa !53, !alias.scope !55, !noalias !56 %"new::Array.size[1]_ptr" = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size", i64 0, i64 0, !dbg !69 %15 = icmp sgt i64 %14, 0, !dbg !74 br i1 %15, label %L28, label %L63, !dbg !66 L28: ; preds = %L28, %L8 %value_phi10 = phi i64 [ 1, %L8 ], [ %value_phi23, %L28 ] %16 = bitcast i64* %0 to {} addrspace(10)***, !dbg !84 %17 = load {} addrspace(10)**, {} addrspace(10)*** %16, align 8, !dbg !84 %18 = add i64 %value_phi10, -1, !dbg !87 %19 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %"Memory{Float64}[]", {} addrspace(10)** %17), !dbg !87 %memcpy_refined_dst198 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %19, i64 %18, !dbg !87 %memcpy_refined_dst19 = bitcast {} addrspace(10)* addrspace(13)* %memcpy_refined_dst198 to double addrspace(13)*, !dbg !87 store double 0.000000e+00, double addrspace(13)* %memcpy_refined_dst19, align 8, !dbg !87, !tbaa !90, !alias.scope !93, !noalias !94 %"new::Array.size[1]_ptr.unbox21" = load i64, i64* %"new::Array.size[1]_ptr", align 8, !dbg !95, !tbaa !53, !alias.scope !55, !noalias !56 %.not9 = icmp eq i64 %value_phi10, %"new::Array.size[1]_ptr.unbox21", !dbg !95 %20 = add i64 %value_phi10, 1, !dbg !98 %value_phi23 = select i1 %.not9, i64 undef, i64 %20, !dbg !98 br i1 %.not9, label %L63, label %L28, !dbg !99 L63: ; preds = %L28, %L8 %memcpy_refined_dst28 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size29", i64 0, i64 0, !dbg !100 %21 = load i64, i64* %2, align 8, !dbg !100 store i64 %21, i64* %memcpy_refined_dst28, align 8, !dbg !100, !tbaa !53, !alias.scope !55, !noalias !56 %"new::Array.size29[1]_ptr" = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size29", i64 0, i64 0, !dbg !105 %22 = icmp sgt i64 %21, 0, !dbg !107 br i1 %22, label %L75, label %L107, !dbg !104 L75: ; preds = %L91, %L63 %value_phi37 = phi i64 [ 1, %L63 ], [ %value_phi55, %L91 ] %23 = add i64 %value_phi37, -1, !dbg !111 %24 = load i64, i64* %2, align 8, !dbg !115 %.not10 = icmp ult i64 %23, %24, !dbg !118 br i1 %.not10, label %L91, label %L88, !dbg !113 L88: ; preds = %L75 %25 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Tuple83", i64 0, i64 0, !dbg !113 store i64 %value_phi37, i64* %25, align 8, !dbg !113, !tbaa !53, !alias.scope !55, !noalias !56 %26 = addrspacecast [1 x i64]* %"new::Tuple83" to [1 x i64] addrspace(11)*, !dbg !113 %"new::Array.err13" = call noalias nonnull align 8 dereferenceable(24) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task2, i64 24, {} addrspace(10)* addrspacecast ({}* @"+Core.Array#1226.jit" to {} addrspace(10)*)) #14, !dbg !44 %27 = bitcast {} addrspace(10)* %"new::Array.err13" to i8 addrspace(10)*, !dbg !113 call void @llvm.memset.p10i8.i64(i8 addrspace(10)* align 8 %27, i8 0, i64 24, i1 false), !dbg !113 %28 = bitcast {} addrspace(10)* %"new::Array.err13" to i8 addrspace(10)*, !dbg !113 %29 = addrspacecast i8 addrspace(10)* %28 to i8 addrspace(11)*, !dbg !113 %30 = getelementptr i8, i8 addrspace(11)* %29, i64 0, !dbg !113 %31 = bitcast i8 addrspace(11)* %30 to i64 addrspace(11)*, !dbg !113 %32 = load i64, i64* %0, align 8, !dbg !113 store i64 %32, i64 addrspace(11)* %31, align 8, !dbg !113 %33 = getelementptr i8, i8 addrspace(11)* %29, i64 8, !dbg !113 %34 = bitcast i8 addrspace(11)* %33 to {} addrspace(10)* addrspace(11)*, !dbg !113 store {} addrspace(10)* %"Memory{Float64}[]", {} addrspace(10)* addrspace(11)* %34, align 8, !dbg !113 %35 = getelementptr i8, i8 addrspace(11)* %29, i64 16, !dbg !113 %36 = bitcast i8 addrspace(11)* %35 to i64 addrspace(11)*, !dbg !113 %37 = load i64, i64* %2, align 8, !dbg !113 store i64 %37, i64 addrspace(11)* %36, align 8, !dbg !113 call swiftcc void @j_throw_boundserror_1238({}*** nonnull swiftself %pgcstack, {} addrspace(10)* nonnull %"new::Array.err13", [1 x i64] addrspace(11)* nocapture readonly %26) #7, !dbg !113 unreachable, !dbg !113 L91: ; preds = %L75 %38 = bitcast i64* %0 to {} addrspace(10)***, !dbg !119 %39 = load {} addrspace(10)**, {} addrspace(10)*** %38, align 8, !dbg !119 %40 = add i64 %value_phi37, -1, !dbg !120 %41 = sitofp i64 %value_phi37 to double, !dbg !121 %42 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %"Memory{Float64}[]", {} addrspace(10)** %39), !dbg !120 %43 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %42, i64 %40, !dbg !120 %44 = bitcast {} addrspace(10)* addrspace(13)* %43 to double addrspace(13)*, !dbg !120 store double %41, double addrspace(13)* %44, align 8, !dbg !120, !tbaa !90, !alias.scope !93, !noalias !94 %"new::Array.size29[1]_ptr.unbox53" = load i64, i64* %"new::Array.size29[1]_ptr", align 8, !dbg !127, !tbaa !53, !alias.scope !55, !noalias !56 %.not11 = icmp eq i64 %value_phi37, %"new::Array.size29[1]_ptr.unbox53", !dbg !127 %45 = add i64 %value_phi37, 1, !dbg !128 %value_phi55 = select i1 %.not11, i64 undef, i64 %45, !dbg !128 br i1 %.not11, label %L107, label %L75, !dbg !129 L107: ; preds = %L91, %L63 %memcpy_refined_dst60 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size61", i64 0, i64 0, !dbg !130 %46 = load i64, i64* %2, align 8, !dbg !130 store i64 %46, i64* %memcpy_refined_dst60, align 8, !dbg !130, !tbaa !53, !alias.scope !55, !noalias !56 %"new::Array.size61[1]_ptr" = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Array.size61", i64 0, i64 0, !dbg !137 %"new::Array.size61[1]_ptr.unbox" = load i64, i64* %"new::Array.size61[1]_ptr", align 8, !dbg !139, !tbaa !53, !alias.scope !55, !noalias !56 %47 = add i64 %"new::Array.size61[1]_ptr.unbox", -1, !dbg !139 %48 = load i64, i64* %2, align 8, !dbg !141 %.not12 = icmp ult i64 %47, %48, !dbg !139 br i1 %.not12, label %L128, label %L121, !dbg !139 L121: ; preds = %L107 %memcpy_refined_dst81 = getelementptr inbounds [1 x i64], [1 x i64]* %"new::Tuple80", i64 0, i64 0, !dbg !139 %49 = load i64, i64* %"new::Array.size61[1]_ptr", align 8, !dbg !139, !tbaa !53, !alias.scope !55, !noalias !56 store i64 %49, i64* %memcpy_refined_dst81, align 8, !dbg !139, !tbaa !53, !alias.scope !55, !noalias !56 %50 = addrspacecast [1 x i64]* %"new::Tuple80" to [1 x i64] addrspace(11)*, !dbg !139 %"new::Array.err" = call noalias nonnull align 8 dereferenceable(24) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task2, i64 24, {} addrspace(10)* addrspacecast ({}* @"+Core.Array#1226.jit" to {} addrspace(10)*)) #14, !dbg !44 %51 = bitcast {} addrspace(10)* %"new::Array.err" to i8 addrspace(10)*, !dbg !139 call void @llvm.memset.p10i8.i64(i8 addrspace(10)* align 8 %51, i8 0, i64 24, i1 false), !dbg !139 %52 = bitcast {} addrspace(10)* %"new::Array.err" to i8 addrspace(10)*, !dbg !139 %53 = addrspacecast i8 addrspace(10)* %52 to i8 addrspace(11)*, !dbg !139 %54 = getelementptr i8, i8 addrspace(11)* %53, i64 0, !dbg !139 %55 = bitcast i8 addrspace(11)* %54 to i64 addrspace(11)*, !dbg !139 %56 = load i64, i64* %0, align 8, !dbg !139 store i64 %56, i64 addrspace(11)* %55, align 8, !dbg !139 %57 = getelementptr i8, i8 addrspace(11)* %53, i64 8, !dbg !139 %58 = bitcast i8 addrspace(11)* %57 to {} addrspace(10)* addrspace(11)*, !dbg !139 store {} addrspace(10)* %"Memory{Float64}[]", {} addrspace(10)* addrspace(11)* %58, align 8, !dbg !139 %59 = getelementptr i8, i8 addrspace(11)* %53, i64 16, !dbg !139 %60 = bitcast i8 addrspace(11)* %59 to i64 addrspace(11)*, !dbg !139 %61 = load i64, i64* %2, align 8, !dbg !139 store i64 %61, i64 addrspace(11)* %60, align 8, !dbg !139 call swiftcc void @j_throw_boundserror_1238({}*** nonnull swiftself %pgcstack, {} addrspace(10)* nonnull %"new::Array.err", [1 x i64] addrspace(11)* nocapture readonly %50) #7, !dbg !139 unreachable, !dbg !139 L128: ; preds = %L107 %62 = bitcast i64* %0 to {} addrspace(10)***, !dbg !142 %63 = load {} addrspace(10)**, {} addrspace(10)*** %62, align 8, !dbg !142 %64 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %"Memory{Float64}[]", {} addrspace(10)** %63), !dbg !142 %"new::Array.size61[1]_ptr.unbox77" = load i64, i64* %"new::Array.size61[1]_ptr", align 8, !dbg !142, !tbaa !53, !alias.scope !55, !noalias !56 %65 = add i64 %"new::Array.size61[1]_ptr.unbox77", -1, !dbg !142 %66 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %64, i64 %65, !dbg !142 %67 = bitcast {} addrspace(10)* addrspace(13)* %66 to double addrspace(13)*, !dbg !142 %68 = load double, double addrspace(13)* %67, align 8, !dbg !142, !tbaa !90, !alias.scope !93, !noalias !94 store double %68, double* %4, align 8, !dbg !136 %69 = bitcast double* %4 to i64*, !dbg !136 %70 = bitcast [8 x i8]* %union_bytes_return to i64*, !dbg !136 %71 = load i64, i64* %69, align 8, !dbg !136 store i64 %71, i64* %70, align 8, !dbg !136 br label %common.ret } ; Function Attrs: noinline optnone define nonnull {} addrspace(10)* @jfptr_f_1217({} addrspace(10)* %"function::Core.Function", {} addrspace(10)** noalias nocapture noundef readonly %"args::Any[]", i32 %"nargs::UInt32") #1 { top: %pgcstack = call {}*** @julia.get_pgcstack() %result_union = alloca [8 x i8], align 8 %0 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %"args::Any[]", i32 0 %1 = load {} addrspace(10)*, {} addrspace(10)** %0, align 8, !tbaa !24, !invariant.load !0, !alias.scope !45, !noalias !48, !nonnull !0, !dereferenceable !143, !align !143 %2 = bitcast {} addrspace(10)* %1 to i64 addrspace(10)* %3 = addrspacecast i64 addrspace(10)* %2 to i64 addrspace(11)* %4 = load i64, i64 addrspace(11)* %3, align 8 %5 = call swiftcc { {} addrspace(10)*, i8 } @julia_f_1216([8 x i8]* noalias nocapture noundef %result_union, {}*** nonnull swiftself %pgcstack, i64 signext %4) %6 = extractvalue { {} addrspace(10)*, i8 } %5, 1 %7 = extractvalue { {} addrspace(10)*, i8 } %5, 0 switch i8 %6, label %box_union_isboxed [ i8 1, label %box_union i8 2, label %box_union1 ] box_union_isboxed: ; preds = %top br label %post_box_union post_box_union: ; preds = %box_union1, %box_union, %box_union_isboxed %8 = phi {} addrspace(10)* [ %unionbox, %box_union ], [ %box_Int64, %box_union1 ], [ %7, %box_union_isboxed ] ret {} addrspace(10)* %8 box_union: ; preds = %top %"+Core.Float64#1218" = load {}*, {}** @"+Core.Float64#1218", align 8, !tbaa !24, !invariant.load !0, !alias.scope !45, !noalias !48, !nonnull !0, !dereferenceable !144, !align !145 %Float64 = ptrtoint {}* %"+Core.Float64#1218" to i64 %9 = inttoptr i64 %Float64 to {}* %10 = bitcast {}*** %pgcstack to {}** %current_task = getelementptr inbounds {}*, {}** %10, i64 -14 %11 = addrspacecast {}* %9 to {} addrspace(10)* %unionbox = call noalias nonnull align 8 dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %current_task, i64 8, {} addrspace(10)* %11) #14 %12 = bitcast {} addrspace(10)* %unionbox to i8 addrspace(10)* %13 = bitcast [8 x i8]* %result_union to i8* call void @llvm.memcpy.p10i8.p0i8.i64(i8 addrspace(10)* align 8 %12, i8* align 8 %13, i64 8, i1 false), !tbaa !146, !alias.scope !147, !noalias !148 br label %post_box_union box_union1: ; preds = %top %14 = bitcast [8 x i8]* %result_union to i64* %.unbox = load i64, i64* %14, align 8, !tbaa !53, !alias.scope !55, !noalias !56 %box_Int64 = call nonnull align 8 dereferenceable(8) {} addrspace(10)* @ijl_box_int64(i64 signext %.unbox) #4 br label %post_box_union } declare {}*** @julia.get_pgcstack() ; Function Attrs: nounwind willreturn allockind("alloc") allocsize(1) declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj({}**, i64, {} addrspace(10)*) #2 ; Function Attrs: argmemonly nocallback nofree nounwind willreturn declare void @llvm.memcpy.p10i8.p0i8.i64(i8 addrspace(10)* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #3 ; Function Attrs: inaccessiblememonly nounwind willreturn declare nonnull align 8 dereferenceable(8) {} addrspace(10)* @ijl_box_int64(i64 signext) #4 ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn declare void @llvm.dbg.declare(metadata, metadata, metadata) #5 ; Function Attrs: inaccessiblemem_or_argmemonly declare void @julia.safepoint(i64*) #6 ; Function Attrs: noreturn declare void @ijl_throw({} addrspace(12)*) #7 ; Function Attrs: norecurse nosync nounwind readnone speculatable willreturn declare noundef nonnull {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* nocapture noundef readnone, {} addrspace(10)** noundef nonnull readnone) #8 ; Function Attrs: argmemonly nocallback nofree nounwind willreturn declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #3 ; Function Attrs: cold noreturn nounwind declare void @llvm.trap() #9 ; Function Attrs: noreturn declare swiftcc void @j_throw_boundserror_1238({}*** nonnull swiftself, {} addrspace(10)*, [1 x i64] addrspace(11)* nocapture readonly) #10 ; Function Attrs: willreturn declare nonnull align 16 dereferenceable(16) {} addrspace(10)* @julia.gc_alloc_genericmemory({} addrspace(10)*, i64, i64, i8, i8, i8) #11 ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn declare void @llvm.dbg.value(metadata, metadata, metadata) #5 ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #12 ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #12 ; Function Attrs: argmemonly nocallback nofree nounwind willreturn writeonly declare void @llvm.memset.p10i8.i64(i8 addrspace(10)* nocapture writeonly, i8, i64, i1 immarg) #13 attributes #0 = { "frame-pointer"="all" "julia.fsig"="f(Int64)" "probe-stack"="inline-asm" } attributes #1 = { noinline optnone "frame-pointer"="all" "probe-stack"="inline-asm" } attributes #2 = { nounwind willreturn allockind("alloc") allocsize(1) } attributes #3 = { argmemonly nocallback nofree nounwind willreturn } attributes #4 = { inaccessiblememonly nounwind willreturn } attributes #5 = { nocallback nofree nosync nounwind readnone speculatable willreturn } attributes #6 = { inaccessiblemem_or_argmemonly } attributes #7 = { noreturn } attributes #8 = { norecurse nosync nounwind readnone speculatable willreturn } attributes #9 = { cold noreturn nounwind } attributes #10 = { noreturn "frame-pointer"="all" "julia.fsig"="throw_boundserror(Array{Float64, 1}, Tuple{Int64})" "probe-stack"="inline-asm" } attributes #11 = { willreturn } attributes #12 = { argmemonly nocallback nofree nosync nounwind willreturn } attributes #13 = { argmemonly nocallback nofree nounwind willreturn writeonly } attributes #14 = { nounwind willreturn allockind("alloc,uninitialized") allocsize(1) } !llvm.module.flags = !{!1, !2, !3} !llvm.dbg.cu = !{!4} !0 = !{} !1 = !{i32 2, !"Dwarf Version", i32 4} !2 = !{i32 2, !"Debug Info Version", i32 3} !3 = !{i32 2, !"julia.debug_level", i32 2} !4 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !5, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: NoDebug, nameTableKind: GNU) !5 = !DIFile(filename: "julia", directory: ".") !6 = distinct !DISubprogram(name: "f", linkageName: "julia_f_1216", scope: null, file: !7, line: 1, type: !8, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !16) !7 = !DIFile(filename: "REPL[6]", directory: ".") !8 = !DISubroutineType(types: !9) !9 = !{!10, !14, !15} !10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64, align: 64) !11 = !DICompositeType(tag: DW_TAG_structure_type, name: "jl_value_t", file: !12, line: 71, align: 64, elements: !13) !12 = !DIFile(filename: "julia.h", directory: "") !13 = !{!10} !14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "#f", align: 8, elements: !0, runtimeLang: DW_LANG_Julia, identifier: "140573914192528") !15 = !DIBasicType(name: "Int64", size: 64, encoding: DW_ATE_unsigned) !16 = !{!17, !18} !17 = !DILocalVariable(name: "#self#", arg: 2, scope: !6, file: !7, line: 1, type: !14) !18 = !DILocalVariable(name: "n", arg: 3, scope: !6, file: !7, line: 1, type: !15) !19 = !DILocation(line: 0, scope: !6) !20 = !{!21, !21, i64 0} !21 = !{!"jtbaa_gcframe", !22, i64 0} !22 = !{!"jtbaa", !23, i64 0} !23 = !{!"jtbaa"} !24 = !{!25, !25, i64 0, i64 1} !25 = !{!"jtbaa_const", !22, i64 0} !26 = !DILocation(line: 1, scope: !6) !27 = !DILocation(line: 514, scope: !28, inlinedAt: !31) !28 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !29, file: !29, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !29 = !DIFile(filename: "int.jl", directory: ".") !30 = !DISubroutineType(types: !0) !31 = !DILocation(line: 2, scope: !6) !32 = !DILocation(line: 513, scope: !33, inlinedAt: !35) !33 = distinct !DISubprogram(name: "GenericMemory;", linkageName: "GenericMemory", scope: !34, file: !34, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !34 = !DIFile(filename: "boot.jl", directory: ".") !35 = !DILocation(line: 573, scope: !36, inlinedAt: !37) !36 = distinct !DISubprogram(name: "Array;", linkageName: "Array", scope: !34, file: !34, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !37 = !DILocation(line: 586, scope: !36, inlinedAt: !38) !38 = !DILocation(line: 575, scope: !39, inlinedAt: !41) !39 = distinct !DISubprogram(name: "zeros;", linkageName: "zeros", scope: !40, file: !40, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !40 = !DIFile(filename: "array.jl", directory: ".") !41 = !DILocation(line: 572, scope: !39, inlinedAt: !42) !42 = !DILocation(line: 570, scope: !39, inlinedAt: !43) !43 = !DILocation(line: 3, scope: !6) !44 = !DILocation(line: 574, scope: !36, inlinedAt: !37) !45 = !{!46} !46 = !{!"jnoalias_const", !47} !47 = !{!"jnoalias"} !48 = !{!49, !50, !51, !52} !49 = !{!"jnoalias_gcframe", !47} !50 = !{!"jnoalias_stack", !47} !51 = !{!"jnoalias_data", !47} !52 = !{!"jnoalias_typemd", !47} !53 = !{!54, !54, i64 0} !54 = !{!"jtbaa_stack", !22, i64 0} !55 = !{!50} !56 = !{!49, !51, !52, !46} !57 = !DILocation(line: 194, scope: !58, inlinedAt: !59) !58 = distinct !DISubprogram(name: "size;", linkageName: "size", scope: !40, file: !40, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !59 = !DILocation(line: 98, scope: !60, inlinedAt: !62) !60 = distinct !DISubprogram(name: "axes;", linkageName: "axes", scope: !61, file: !61, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !61 = !DIFile(filename: "abstractarray.jl", directory: ".") !62 = !DILocation(line: 134, scope: !63, inlinedAt: !64) !63 = distinct !DISubprogram(name: "axes1;", linkageName: "axes1", scope: !61, file: !61, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !64 = !DILocation(line: 318, scope: !65, inlinedAt: !66) !65 = distinct !DISubprogram(name: "eachindex;", linkageName: "eachindex", scope: !61, file: !61, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !66 = !DILocation(line: 328, scope: !67, inlinedAt: !68) !67 = distinct !DISubprogram(name: "fill!;", linkageName: "fill!", scope: !40, file: !40, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !68 = !DILocation(line: 576, scope: !39, inlinedAt: !41) !69 = !DILocation(line: 31, scope: !70, inlinedAt: !72) !70 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !71, file: !71, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !71 = !DIFile(filename: "tuple.jl", directory: ".") !72 = !DILocation(line: 280, scope: !73, inlinedAt: !59) !73 = distinct !DISubprogram(name: "map;", linkageName: "map", scope: !71, file: !71, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !74 = !DILocation(line: 83, scope: !75, inlinedAt: !76) !75 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !29, file: !29, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !76 = !DILocation(line: 378, scope: !77, inlinedAt: !79) !77 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !78, file: !78, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !78 = !DIFile(filename: "operators.jl", directory: ".") !79 = !DILocation(line: 675, scope: !80, inlinedAt: !82) !80 = distinct !DISubprogram(name: "isempty;", linkageName: "isempty", scope: !81, file: !81, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !81 = !DIFile(filename: "range.jl", directory: ".") !82 = !DILocation(line: 898, scope: !83, inlinedAt: !66) !83 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !81, file: !81, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !84 = !DILocation(line: 49, scope: !85, inlinedAt: !87) !85 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !86, file: !86, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !86 = !DIFile(filename: "Base.jl", directory: ".") !87 = !DILocation(line: 969, scope: !88, inlinedAt: !89) !88 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !40, file: !40, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !89 = !DILocation(line: 329, scope: !67, inlinedAt: !68) !90 = !{!91, !91, i64 0} !91 = !{!"jtbaa_arraybuf", !92, i64 0} !92 = !{!"jtbaa_data", !22, i64 0} !93 = !{!51} !94 = !{!49, !50, !52, !46} !95 = !DILocation(line: 620, scope: !96, inlinedAt: !98) !96 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !97, file: !97, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !97 = !DIFile(filename: "promotion.jl", directory: ".") !98 = !DILocation(line: 902, scope: !83, inlinedAt: !99) !99 = !DILocation(line: 330, scope: !67, inlinedAt: !68) !100 = !DILocation(line: 194, scope: !58, inlinedAt: !101) !101 = !DILocation(line: 98, scope: !60, inlinedAt: !102) !102 = !DILocation(line: 134, scope: !63, inlinedAt: !103) !103 = !DILocation(line: 318, scope: !65, inlinedAt: !104) !104 = !DILocation(line: 4, scope: !6) !105 = !DILocation(line: 31, scope: !70, inlinedAt: !106) !106 = !DILocation(line: 280, scope: !73, inlinedAt: !101) !107 = !DILocation(line: 83, scope: !75, inlinedAt: !108) !108 = !DILocation(line: 378, scope: !77, inlinedAt: !109) !109 = !DILocation(line: 675, scope: !80, inlinedAt: !110) !110 = !DILocation(line: 898, scope: !83, inlinedAt: !104) !111 = !DILocation(line: 86, scope: !112, inlinedAt: !113) !112 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !29, file: !29, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !113 = !DILocation(line: 968, scope: !88, inlinedAt: !114) !114 = !DILocation(line: 5, scope: !6) !115 = !DILocation(line: 11, scope: !116, inlinedAt: !113) !116 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !117, file: !117, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !117 = !DIFile(filename: "essentials.jl", directory: ".") !118 = !DILocation(line: 513, scope: !75, inlinedAt: !113) !119 = !DILocation(line: 49, scope: !85, inlinedAt: !120) !120 = !DILocation(line: 969, scope: !88, inlinedAt: !114) !121 = !DILocation(line: 221, scope: !122, inlinedAt: !124) !122 = distinct !DISubprogram(name: "Float64;", linkageName: "Float64", scope: !123, file: !123, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !123 = !DIFile(filename: "float.jl", directory: ".") !124 = !DILocation(line: 7, scope: !125, inlinedAt: !120) !125 = distinct !DISubprogram(name: "convert;", linkageName: "convert", scope: !126, file: !126, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !126 = !DIFile(filename: "number.jl", directory: ".") !127 = !DILocation(line: 620, scope: !96, inlinedAt: !128) !128 = !DILocation(line: 902, scope: !83, inlinedAt: !129) !129 = !DILocation(line: 6, scope: !6) !130 = !DILocation(line: 194, scope: !58, inlinedAt: !131) !131 = !DILocation(line: 98, scope: !60, inlinedAt: !132) !132 = !DILocation(line: 134, scope: !63, inlinedAt: !133) !133 = !DILocation(line: 386, scope: !65, inlinedAt: !134) !134 = !DILocation(line: 423, scope: !135, inlinedAt: !136) !135 = distinct !DISubprogram(name: "lastindex;", linkageName: "lastindex", scope: !61, file: !61, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !136 = !DILocation(line: 7, scope: !6) !137 = !DILocation(line: 31, scope: !70, inlinedAt: !138) !138 = !DILocation(line: 280, scope: !73, inlinedAt: !131) !139 = !DILocation(line: 816, scope: !140, inlinedAt: !136) !140 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !117, file: !117, type: !30, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !4, retainedNodes: !0) !141 = !DILocation(line: 11, scope: !116, inlinedAt: !139) !142 = !DILocation(line: 817, scope: !140, inlinedAt: !136) !143 = !{i64 8} !144 = !{i64 56} !145 = !{i64 16} !146 = !{!22, !22, i64 0} !147 = !{!50, !51} !148 = !{!49, !52, !46}
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