Skip to content

Instantly share code, notes, and snippets.

@straight-shoota
Created April 22, 2018 13:10
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 straight-shoota/6c0706d149548195dc6d844503b63e40 to your computer and use it in GitHub Desktop.
Save straight-shoota/6c0706d149548195dc6d844503b63e40 to your computer and use it in GitHub Desktop.
[Crystal] LLVM module validation failed: Both operands to a binary operator are not of the same type!
This file has been truncated, but you can view the full file.
; ModuleID = 'main_module'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
%String = type { i32, i32, i32, i8 }
%"Slice(UInt8)" = type { i32, i1, i8* }
%"Array(String)" = type { i32, i32, i32, %String** }
%"->" = type { i8*, i8* }
%"Array(Pointer(Void))" = type { i32, i32, i32, i8** }
%Fiber = type { i32, i8*, %"(Event::Event | Nil)", i8*, i8*, %Fiber*, %Fiber*, %String*, %"(Proc(Nil) | Proc(Void))" }
%"(Event::Event | Nil)" = type { i32, [2 x i64] }
%"(Proc(Nil) | Proc(Void))" = type { i32, [2 x i64] }
%Thread = type { i32, %"(UInt64 | Nil)", i32*, i1, %"->", %Fiber* }
%"(UInt64 | Nil)" = type { i32, [1 x i64] }
%"Set(Thread)" = type { %"Hash(Thread, Nil)"* }
%"Hash(Thread, Nil)" = type { i32, i32, i32, %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"*, %"->", %"Hash::Entry(Thread, Nil)"** }
%"Hash::Entry(Thread, Nil)" = type { i32, %Thread*, %Nil, %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"* }
%Nil = type {}
%"Array(Int32)" = type { i32, i32, i32, i32* }
%"Deque(Fiber)" = type { i32, i32, i32, i32, %Fiber** }
%"Event::Base" = type { i8* }
%"IO::FileDescriptor" = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, %"(Event::Event | Nil)", %"(Event::Event | Nil)", %"Slice(UInt8)", i32, i1, i1, i8*, i8*, %"(Time::Span | Nil)", %"(Time::Span | Nil)", %"Deque(Fiber)"*, %"Deque(Fiber)"*, i1, i1, i1 }
%"(IO::EncodingOptions | Nil)" = type { i32, [3 x i64] }
%"IO::Encoder" = type { i32, %"IO::EncodingOptions", %Iconv, i1 }
%"IO::EncodingOptions" = type { %String*, %"(Symbol | Nil)" }
%"(Symbol | Nil)" = type { i32, [1 x i64] }
%Iconv = type { i1, i8* }
%"IO::Decoder" = type { i32, %"Slice(UInt8)", i8*, %"IO::EncodingOptions", %Iconv, %"Slice(UInt8)", i64, %"Slice(UInt8)", i1 }
%"(Time::Span | Nil)" = type { i32, [2 x i64] }
%"(UInt32 | UInt64 | Nil)" = type { i32, [1 x i64] }
%"(Debug::DWARF::LineNumbers | Nil)" = type { i32, [6 x i64] }
%"Array(Tuple(Int32, Int32, Int32))" = type { i32, i32, i32, %"Tuple(Int32, Int32, Int32)"* }
%"Tuple(Int32, Int32, Int32)" = type { i32, i32, i32 }
%"Hash(Int32, Tuple(Int32, Int32, Int32, Int32))" = type { i32, i32, i32, %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"*, %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"*, %"->", %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"** }
%"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))" = type { i32, i32, %"Tuple(Int32, Int32, Int32, Int32)", %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"*, %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"*, %"Hash::Entry(Int32, Tuple(Int32, Int32, Int32, Int32))"* }
%"Tuple(Int32, Int32, Int32, Int32)" = type { i32, i32, i32, i32 }
%"Array(Tuple(Int32, Int32))" = type { i32, i32, i32, %"Tuple(Int32, Int32)"* }
%"Tuple(Int32, Int32)" = type { i32, i32 }
%"Array(Tuple(UInt64, UInt64, String))" = type { i32, i32, i32, %"Tuple(UInt64, UInt64, String)"* }
%"Tuple(UInt64, UInt64, String)" = type { i64, i64, %String* }
%File = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, %"(Event::Event | Nil)", %"(Event::Event | Nil)", %"Slice(UInt8)", i32, i1, i1, i8*, i8*, %"(Time::Span | Nil)", %"(Time::Span | Nil)", %"Deque(Fiber)"*, %"Deque(Fiber)"*, i1, i1, i1, %String* }
%"Atomic(Int32)" = type { i32 }
%"Tuple(IO::FileDescriptor+, IO::FileDescriptor+)" = type { i32*, i32* }
%"Hash(Signal, Proc(Signal, Nil))" = type { i32, i32, i32, %"Hash::Entry(Signal, Proc(Signal, Nil))"*, %"Hash::Entry(Signal, Proc(Signal, Nil))"*, %"->", %"Hash::Entry(Signal, Proc(Signal, Nil))"** }
%"Hash::Entry(Signal, Proc(Signal, Nil))" = type { i32, i32, %"->", %"Hash::Entry(Signal, Proc(Signal, Nil))"*, %"Hash::Entry(Signal, Proc(Signal, Nil))"*, %"Hash::Entry(Signal, Proc(Signal, Nil))"* }
%Mutex = type { i32, %Fiber*, i32, %"Deque(Fiber)"* }
%"Hash(Int32, Channel::Buffered(Int32))" = type { i32, i32, i32, %"Hash::Entry(Int32, Channel::Buffered(Int32))"*, %"Hash::Entry(Int32, Channel::Buffered(Int32))"*, %"->", %"Hash::Entry(Int32, Channel::Buffered(Int32))"** }
%"Hash::Entry(Int32, Channel::Buffered(Int32))" = type { i32, i32, %"Channel::Buffered(Int32)"*, %"Hash::Entry(Int32, Channel::Buffered(Int32))"*, %"Hash::Entry(Int32, Channel::Buffered(Int32))"*, %"Hash::Entry(Int32, Channel::Buffered(Int32))"* }
%"Channel::Buffered(Int32)" = type { i32, i1, %"Deque(Fiber)"*, %"Deque(Fiber)"*, i32, %"Deque(Int32)"* }
%"Deque(Int32)" = type { i32, i32, i32, i32, i32* }
%"Hash(Int32, Int32)" = type { i32, i32, i32, %"Hash::Entry(Int32, Int32)"*, %"Hash::Entry(Int32, Int32)"*, %"->", %"Hash::Entry(Int32, Int32)"** }
%"Hash::Entry(Int32, Int32)" = type { i32, i32, i32, %"Hash::Entry(Int32, Int32)"*, %"Hash::Entry(Int32, Int32)"*, %"Hash::Entry(Int32, Int32)"* }
%"Hash(String, NamedTuple(time: Time, location: Time::Location))" = type { i32, i32, i32, %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"*, %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"*, %"->", %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"** }
%"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))" = type { i32, %String*, %"NamedTuple(time: Time, location: Time::Location)", %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"*, %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"*, %"Hash::Entry(String, NamedTuple(time: Time, location: Time::Location))"* }
%"NamedTuple(time: Time, location: Time::Location)" = type { %Time, %"Time::Location"* }
%Time = type { i64, i32, %"Time::Location"* }
%"Time::Location" = type { i32, %String*, %"Array(Time::Location::Zone)"*, %"Tuple(Int64, Int64)", %"Time::Location::Zone", %"Array(Time::Location::ZoneTransition)"* }
%"Array(Time::Location::Zone)" = type { i32, i32, i32, %"Time::Location::Zone"* }
%"Tuple(Int64, Int64)" = type { i64, i64 }
%"Time::Location::Zone" = type { %String*, i32, i1 }
%"Array(Time::Location::ZoneTransition)" = type { i32, i32, i32, %"Time::Location::ZoneTransition"* }
%"Time::Location::ZoneTransition" = type { i64, i8, i1, i1 }
%"Array(Proc(Int32, (Exception+ | Nil), Nil))" = type { i32, i32, i32, %"->"* }
%"struct.LibUnwind::Exception" = type { i64, i64, i64, i64, i64, i32 }
%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader" = type { i8* }
%ArgumentError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(CallStack | Nil)" = type { i32, [2 x i64] }
%CallStack = type { %"Array(Pointer(Void))"*, %"Array(String)"* }
%Exception = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%Errno = type { i32, %String*, i32*, %"(CallStack | Nil)", i32 }
%"String::Builder" = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, i32, i8*, i1 }
%IndexError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"Tuple(UInt64, Int32)" = type { i64, i32 }
%"Tuple(StaticArray(UInt8, 4), Int32)" = type { [4 x i8], i32 }
%InvalidByteSequenceError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%DivisionByZeroError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"Tuple(Pointer(Void), Pointer(Void))" = type { i8*, i8* }
%"(Int32 | Nil)" = type { i32, [1 x i64] }
%"Crystal::Hasher" = type { i64, i64 }
%"(Bool | File | Nil)" = type { i32, [1 x i64] }
%"(Bool | File)" = type { i32, [1 x i64] }
%"Crystal::System::FileInfo" = type { %"struct.LibC::Stat" }
%"struct.LibC::Stat" = type { i64, i64, i64, i32, i32, i32, i32, i64, i64, i64, i64, %"struct.LibC::Timespec", %"struct.LibC::Timespec", %"struct.LibC::Timespec", [3 x i64] }
%"struct.LibC::Timespec" = type { i64, i64 }
%"Time::Span" = type { i64, i32 }
%"(Int64 | Nil)" = type { i32, [1 x i64] }
%"Event::Event" = type { i8*, i1 }
%"struct.LibC::Timeval" = type { i64, i64 }
%"(Pointer(Pointer(Void)) | Pointer(Void))" = type { i32, [1 x i64] }
%landing_pad = type { i8*, i32 }
%"(Bool | Deque(Fiber) | Nil)" = type { i32, [1 x i64] }
%"IO::Error" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"IO::Timeout" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"Range(Int32, Int32)" = type { i32, i32, i1 }
%"Tuple(String | Nil, Int32, Int32)" = type { %String*, i32, i32 }
%"(Int32 | String)" = type { i32, [1 x i64] }
%"(Tuple(Int64, Pointer(UInt8)) | Nil)" = type { i32, [2 x i64] }
%"Tuple(Int64, Pointer(UInt8))" = type { i64, i8* }
%"(Bool | Nil)" = type { i32, [1 x i64] }
%"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)" = type { i32, [2 x i64] }
%"struct.LibC::DlInfo" = type { i8*, i8*, i8*, i8* }
%"(UInt32 | UInt64)" = type { i32, [1 x i64] }
%"(Debug::DWARF::LineNumbers::Row | Nil)" = type { i32, [4 x i64] }
%"Tuple(String, Int32, Int32)" = type { %String*, i32, i32 }
%"Debug::DWARF::LineNumbers" = type { %"Array(Array(Debug::DWARF::LineNumbers::Row))"*, %"Array(String)"*, %"Array(String)"*, i64, %"Array(Debug::DWARF::LineNumbers::Row)"*, i32* }
%"Array(Array(Debug::DWARF::LineNumbers::Row))" = type { i32, i32, i32, %"Array(Debug::DWARF::LineNumbers::Row)"** }
%"Array(Debug::DWARF::LineNumbers::Row)" = type { i32, i32, i32, %"Debug::DWARF::LineNumbers::Row"* }
%"Debug::DWARF::LineNumbers::Row" = type { i64, i32, i32, i32, i32, i32, i1 }
%"Debug::ELF" = type { %"(Debug::ELF::Ident | Nil)", %"(Debug::ELF::Type | Nil)", %"(Debug::ELF::Machine | Nil)", %"(UInt32 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | Nil)", %"(UInt16 | Nil)", %"(UInt16 | Nil)", %"(UInt16 | Nil)", %"(UInt16 | Nil)", %"(UInt16 | Nil)", %"(UInt16 | Nil)", i32*, %"Array(Debug::ELF::SectionHeader)"* }
%"(Debug::ELF::Ident | Nil)" = type { i32, [2 x i64] }
%"(Debug::ELF::Type | Nil)" = type { i32, [1 x i64] }
%"(Debug::ELF::Machine | Nil)" = type { i32, [1 x i64] }
%"(UInt32 | Nil)" = type { i32, [1 x i64] }
%"(UInt16 | Nil)" = type { i32, [1 x i64] }
%"Array(Debug::ELF::SectionHeader)" = type { i32, i32, i32, %"Debug::ELF::SectionHeader"* }
%"Debug::ELF::SectionHeader" = type { %"(UInt32 | Nil)", %"(Debug::ELF::SectionHeader::Type | Nil)", %"(Debug::ELF::SectionHeader::Flags | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | Nil)", %"(UInt32 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)" }
%"(Debug::ELF::SectionHeader::Type | Nil)" = type { i32, [1 x i64] }
%"(Debug::ELF::SectionHeader::Flags | Nil)" = type { i32, [1 x i64] }
%"(Debug::DWARF::Strings | Nil)" = type { i32, [3 x i64] }
%"(Debug::ELF::SectionHeader | Nil)" = type { i32, [20 x i64] }
%"Debug::DWARF::Strings" = type { i32*, %"(UInt32 | UInt64)" }
%"Debug::DWARF::Info" = type { %"(UInt32 | UInt64)", i16, %"(UInt32 | UInt64)", i8, %"Array(Debug::DWARF::Abbrev)"*, i1, i64, i64, i32* }
%"Array(Debug::DWARF::Abbrev)" = type { i32, i32, i32, %"Debug::DWARF::Abbrev"* }
%"Debug::DWARF::Abbrev" = type { i32, i32, %"Array(Debug::DWARF::Abbrev::Attribute)"*, i1 }
%"Array(Debug::DWARF::Abbrev::Attribute)" = type { i32, i32, i32, %"Debug::DWARF::Abbrev::Attribute"* }
%"Debug::DWARF::Abbrev::Attribute" = type { i32, i32 }
%"(Debug::DWARF::Abbrev | Nil)" = type { i32, [3 x i64] }
%"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))" = type { i32, i32, i32, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* }
%"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, i32, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" }
%"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, [2 x i64] }
%"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)" = type { i32, [2 x i64] }
%"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)" = type { i32, [1 x i64] }
%"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)" = type { i32, [1 x i64] }
%"(String | UInt64 | Nil)" = type { i32, [1 x i64] }
%"(Nil:Class | UInt64:Class)" = type { i32, [1 x i64] }
%TypeCastError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, [1 x i64] }
%"(UInt8 | Nil)" = type { i32, [1 x i64] }
%"Char::Reader" = type { %String*, i32, i32, i32, %"(UInt8 | Nil)", i1 }
%"(Int32 | UInt32)" = type { i32, [1 x i64] }
%"Debug::ELF::Ident" = type { i8, i32, i8, i8, i8 }
%"Debug::ELF::Error" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(Debug::ELF::Endianness | Nil)" = type { i32, [1 x i64] }
%"(Debug::ELF::OSABI | Nil)" = type { i32, [1 x i64] }
%"IO::EOFError" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(IO::ByteFormat::BigEndian:Module | IO::ByteFormat::LittleEndian:Module)" = type { i32, [1 x i64] }
%"(Bool | IO::Decoder | Nil)" = type { i32, [1 x i64] }
%"(Bool | Slice(UInt8))" = type { i32, [2 x i64] }
%"(Tuple(Char, Int32) | Nil)" = type { i32, [1 x i64] }
%"Tuple(Char, Int32)" = type { i32, i32 }
%"(UInt32 | UInt8 | Nil)" = type { i32, [1 x i64] }
%"Debug::DWARF::LineNumbers::Sequence" = type { %"(Int64 | Nil)", %"(UInt32 | Nil)", %"(UInt16 | Nil)", %"(UInt32 | Nil)", %"(UInt8 | Nil)", i8, %"(Bool | Nil)", %"(Int8 | Nil)", %"(UInt8 | Nil)", %"(UInt8 | Nil)", %"Array(String)"*, %"Array(Tuple(String, Int32, Int32, Int32))"*, %"Array(UInt8)"* }
%"(Int8 | Nil)" = type { i32, [1 x i64] }
%"Array(Tuple(String, Int32, Int32, Int32))" = type { i32, i32, i32, %"Tuple(String, Int32, Int32, Int32)"* }
%"Tuple(String, Int32, Int32, Int32)" = type { %String*, i32, i32, i32 }
%"Array(UInt8)" = type { i32, i32, i32, i8* }
%"Debug::DWARF::LineNumbers::Register" = type { i64, i32, i32, i32, i32, i1, i1, i1, i1, i1, i32, i32 }
%"(Int32 | UInt8)" = type { i32, [1 x i64] }
%"(Int32 | UInt32 | UInt8)" = type { i32, [1 x i64] }
%"(Bool | Debug::DWARF::LineNumbers::Register | Int32 | UInt32 | UInt64 | Nil)" = type { i32, [5 x i64] }
%"(Debug::DWARF::LineNumbers::Register | Int32 | UInt32)" = type { i32, [5 x i64] }
%"(Bool | UInt32 | UInt64 | Nil)" = type { i32, [1 x i64] }
%"(Bool | UInt32 | Nil)" = type { i32, [1 x i64] }
%"(UInt16 | UInt32 | UInt8)" = type { i32, [1 x i64] }
%"(Char | Nil)" = type { i32, [1 x i64] }
%"(Tuple(Int32) | Tuple(Int32, Int32, Int32, Int32) | Nil)" = type { i32, [2 x i64] }
%"(Tuple(Int32) | Tuple(Int32, Int32, Int32, Int32))" = type { i32, [2 x i64] }
%"Tuple(Int32)" = type { i32 }
%"(Tuple(Int32, Int32, Int32, Int32) | Nil)" = type { i32, [2 x i64] }
%"(Tuple(Int32, Int32, Int32) | Nil)" = type { i32, [2 x i64] }
%"(Tuple(Int32, Int32) | Nil)" = type { i32, [1 x i64] }
%"String::ToU64Info" = type { i64, i1, i1 }
%"Tuple(Int32, Bool)" = type { i32, i1 }
%"Tuple(IO::FileDescriptor, IO::FileDescriptor)" = type { %"IO::FileDescriptor"*, %"IO::FileDescriptor"* }
%"Channel::ClosedError" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"CallStack::RepeatedFrame" = type { i8*, i32 }
@"'skip'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"skip\00" }
@"'sequentially_consis...'" = private constant { i32, i32, i32, [24 x i8] } { i32 1, i32 23, i32 23, [24 x i8] c"sequentially_consistent\00" }
@":symbol_table" = global [2 x %String*] [%String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'skip'" to %String*), %String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'sequentially_consis...'" to %String*)]
@ARGC_UNSAFE = internal global i32 0
@ARGV_UNSAFE = internal global i8** null
@"Crystal::stdin_is_blocking" = internal global i1 false
@"Crystal::stdin_is_blocking:init" = internal global i1 false
@"Crystal::stdout_is_blocking" = internal global i1 false
@"Crystal::stdout_is_blocking:init" = internal global i1 false
@"Crystal::stderr_is_blocking" = internal global i1 false
@"Crystal::stderr_is_blocking:init" = internal global i1 false
@"Crystal::System::Random::initialized" = internal global i1 false
@"Crystal::System::Random::initialized:init" = internal global i1 false
@"Crystal::System::Random::getrandom_available" = internal global i1 false
@"Crystal::System::Random::getrandom_available:init" = internal global i1 false
@"AtExitHandlers::running" = internal global i1 false
@"AtExitHandlers::running:init" = internal global i1 false
@"Int::DIGITS_BASE62" = internal constant %String* bitcast ({ i32, i32, i32, [63 x i8] }* @"'0123456789abcdefghi...'" to %String*)
@"'0123456789abcdefghi...'" = private constant { i32, i32, i32, [63 x i8] } { i32 1, i32 62, i32 62, [63 x i8] c"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\00" }
@"Int::DIGITS_UPCASE" = internal constant %String* bitcast ({ i32, i32, i32, [37 x i8] }* @"'0123456789ABCDEFGHI...'" to %String*)
@"'0123456789ABCDEFGHI...'" = private constant { i32, i32, i32, [37 x i8] } { i32 1, i32 36, i32 36, [37 x i8] c"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\00" }
@"Int::DIGITS_DOWNCASE" = internal constant %String* bitcast ({ i32, i32, i32, [37 x i8] }* @"'0123456789abcdefghi...'.1" to %String*)
@"'0123456789abcdefghi...'.1" = private constant { i32, i32, i32, [37 x i8] } { i32 1, i32 36, i32 36, [37 x i8] c"0123456789abcdefghijklmnopqrstuvwxyz\00" }
@"Debug::ELF::MAGIC" = internal global %"Slice(UInt8)" zeroinitializer
@"Debug::ELF::MAGIC:init" = internal global i1 false
@"'Negative Pointer#ma...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c"Negative Pointer#malloc size\00" }
@"'Negative size'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Negative size\00" }
@"'passing a closure t...'" = private constant { i32, i32, i32, [38 x i8] } { i32 1, i32 37, i32 37, [38 x i8] c"passing a closure to C is not allowed\00" }
@"CallStack::CURRENT_DIR" = internal global %String* null
@"CallStack::CURRENT_DIR:init" = internal global i1 false
@"Process::INITIAL_PWD" = internal global %String* null
@"Process::INITIAL_PWD:init" = internal global i1 false
@"'getcwd'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"getcwd\00" }
@errno = external thread_local global i32
@"'Negative capacity'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c"Negative capacity\00" }
@"'Capacity too big'" = private constant { i32, i32, i32, [17 x i8] } { i32 1, i32 16, i32 16, [17 x i8] c"Capacity too big\00" }
@"'UTF-8'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"UTF-8\00" }
@"'//IGNORE'" = private constant { i32, i32, i32, [9 x i8] } { i32 1, i32 8, i32 8, [9 x i8] c"//IGNORE\00" }
@"'Can only invoke 'to...'" = private constant { i32, i32, i32, [47 x i8] } { i32 1, i32 46, i32 46, [47 x i8] c"Can only invoke 'to_s' once on String::Builder\00" }
@"String::TYPE_ID" = internal constant i32 1
@"String::TYPE_ID:init" = internal global i1 false
@"''" = private constant { i32, i32, i32, [1 x i8] } { i32 1, i32 0, i32 0, [1 x i8] zeroinitializer }
@"'Invalid encoding: '" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Invalid encoding: \00" }
@"' -> '" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c" -> \00" }
@"'iconv_open'" = private constant { i32, i32, i32, [11 x i8] } { i32 1, i32 10, i32 10, [11 x i8] c"iconv_open\00" }
@"'iconv_close'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"iconv_close\00" }
@"'Incomplete multibyt...'" = private constant { i32, i32, i32, [30 x i8] } { i32 1, i32 29, i32 29, [30 x i8] c"Incomplete multibyte sequence\00" }
@"'Invalid multibyte s...'" = private constant { i32, i32, i32, [27 x i8] } { i32 1, i32 26, i32 26, [27 x i8] c"Invalid multibyte sequence\00" }
@"'Index out of bounds...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Index out of bounds\00" }
@"'Negative count'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Negative count\00" }
@"': '" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c": \00" }
@"'Bytesize out of cap...'" = private constant { i32, i32, i32, [32 x i8] } { i32 1, i32 31, i32 31, [32 x i8] c"Bytesize out of capacity bounds\00" }
@"'Invalid char value ...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Invalid char value \00" }
@"''\5C'''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5C''\00" }
@"''\5C\5C''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5C\5C'\00" }
@"''\5Ce''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Ce'\00" }
@"''\5Cf''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Cf'\00" }
@"''\5Cn''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Cn'\00" }
@"''\5Cr''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Cr'\00" }
@"''\5Ct''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Ct'\00" }
@"''\5Cv''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Cv'\00" }
@"'\5Cu{'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"\5Cu{\00" }
@"'Invalid base '" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Invalid base \00" }
@"'upcase must be fals...'" = private constant { i32, i32, i32, [33 x i8] } { i32 1, i32 32, i32 32, [33 x i8] c"upcase must be false for base 62\00" }
@"Int::DIGITS_BASE62:init" = internal global i1 false
@"Int::DIGITS_UPCASE:init" = internal global i1 false
@"Int::DIGITS_DOWNCASE:init" = internal global i1 false
@"'Division by 0'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Division by 0\00" }
@"'Overflow: Int32::MI...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"Overflow: Int32::MIN / -1\00" }
@"CallStack::skip" = internal global %"Array(String)"* null
@"CallStack::skip:init" = internal global i1 false
@"'/mnt/d/Dokumente/de...'" = private constant { i32, i32, i32, [59 x i8] } { i32 1, i32 58, i32 58, [59 x i8] c"/mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr\00" }
@"'/mnt/d/Dokumente/de...'.2" = private constant { i32, i32, i32, [59 x i8] } { i32 1, i32 58, i32 58, [59 x i8] c"/mnt/d/Dokumente/dev/test/crystal/crystal/src/exception.cr\00" }
@"LibC::SIG_DFL" = internal global %"->" zeroinitializer
@"LibC::SIG_DFL:init" = internal global i1 false
@"LibC::SIG_IGN" = internal global %"->" zeroinitializer
@"LibC::SIG_IGN:init" = internal global i1 false
@"String::CHAR_TO_DIGIT" = internal global [256 x i8] zeroinitializer
@"String::CHAR_TO_DIGIT:init" = internal global i1 false
@"String::CHAR_TO_DIGIT62" = internal global [256 x i8] zeroinitializer
@"String::CHAR_TO_DIGIT62:init" = internal global i1 false
@"LibC::MAP_FAILED" = internal global i8* null
@"LibC::MAP_FAILED:init" = internal global i1 false
@"Fiber::stack_pool" = internal global %"Array(Pointer(Void))"* null
@"Fiber::stack_pool:init" = internal global i1 false
@"Fiber::root" = internal global %Fiber* null
@"Fiber::root:init" = internal global i1 false
@GC_stackbottom = external global i8*
@"'main'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"main\00" }
@"Fiber::last_fiber" = global %Fiber* null
@"Fiber::first_fiber" = global %Fiber* null
@"Thread::current" = internal thread_local global %Thread* null
@"Thread::current:init" = internal thread_local global i1 false
@"Thread::threads" = internal global %"Set(Thread)" zeroinitializer
@"Thread::threads:init" = internal global i1 false
@"Hash::HASH_PRIMES" = internal global %"Array(Int32)"* null
@"Hash::HASH_PRIMES:init" = internal global i1 false
@"'Negative array size...'" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"Negative array size: \00" }
@"'Hash table too big'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Hash table too big\00" }
@"Crystal::Hasher::seed" = global [2 x i64] zeroinitializer
@"'Nil assertion faile...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"Nil assertion failed\00" }
@"GC::prev_push_other_roots" = global %"->" zeroinitializer
@"GC::curr_push_other_roots" = global %"->" zeroinitializer
@"Scheduler::runnables" = internal global %"Deque(Fiber)"* null
@"Scheduler::runnables:init" = internal global i1 false
@"Scheduler::eb" = internal global %"Event::Base" zeroinitializer
@"Scheduler::eb:init" = internal global i1 false
@"File::DEFAULT_CREATE_PERMISSIONS" = internal global i16 0
@"File::DEFAULT_CREATE_PERMISSIONS:init" = internal global i1 false
@"'Time::Span too big ...'" = private constant { i32, i32, i32, [32 x i8] } { i32 1, i32 31, i32 31, [32 x i8] c"Time::Span too big or too small\00" }
@"'Overflow: Int64::MI...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"Overflow: Int64::MIN / -1\00" }
@"Scheduler::loop_fiber" = global %Fiber* null
@"'Cannot allocate new...'" = private constant { i32, i32, i32, [32 x i8] } { i32 1, i32 31, i32 31, [32 x i8] c"Cannot allocate new fiber stack\00" }
@STDERR = internal global %"IO::FileDescriptor"* null
@"STDERR:init" = internal global i1 false
@"'fcntl() failed'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"fcntl() failed\00" }
@"'Error writing file'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Error writing file\00" }
@"'File not open for w...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"File not open for writing\00" }
@"'Write timed out'" = private constant { i32, i32, i32, [16 x i8] } { i32 1, i32 15, i32 15, [16 x i8] c"Write timed out\00" }
@"'Error closing file'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Error closing file\00" }
@"'Unhandled exception...'" = private constant { i32, i32, i32, [36 x i8] } { i32 1, i32 35, i32 35, [36 x i8] c"Unhandled exception in spawn(name: \00" }
@"'):'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"):\00" }
@"'Closed stream'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Closed stream\00" }
@"'Unhandled exception...'.3" = private constant { i32, i32, i32, [30 x i8] } { i32 1, i32 29, i32 29, [30 x i8] c"Unhandled exception in spawn:\00" }
@"' ('" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c" (\00" }
@"'Time::Location::Inv...'" = private constant { i32, i32, i32, [43 x i8] } { i32 1, i32 42, i32 42, [43 x i8] c"Time::Location::InvalidTimezoneOffsetError\00" }
@"'Time::Location::Inv...'.4" = private constant { i32, i32, i32, [41 x i8] } { i32 1, i32 40, i32 40, [41 x i8] c"Time::Location::InvalidLocationNameError\00" }
@"'Time::Location::Inv...'.5" = private constant { i32, i32, i32, [35 x i8] } { i32 1, i32 34, i32 34, [35 x i8] c"Time::Location::InvalidTZDataError\00" }
@"'Time::Format::Error...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Time::Format::Error\00" }
@"'Time::FloatingTimeC...'" = private constant { i32, i32, i32, [34 x i8] } { i32 1, i32 33, i32 33, [34 x i8] c"Time::FloatingTimeConversionError\00" }
@"'Base64::Error'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Base64::Error\00" }
@"'File::BadPatternErr...'" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"File::BadPatternError\00" }
@"'Errno'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Errno\00" }
@"'ConcurrentExecution...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c"ConcurrentExecutionException\00" }
@"'Concurrent::Cancele...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"Concurrent::CanceledError\00" }
@"'Channel::ClosedErro...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"Channel::ClosedError\00" }
@"'IO::EOFError'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"IO::EOFError\00" }
@"'IO::Error'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c"IO::Error\00" }
@"'IO::Timeout'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"IO::Timeout\00" }
@"'Enumerable::EmptyEr...'" = private constant { i32, i32, i32, [23 x i8] } { i32 1, i32 22, i32 22, [23 x i8] c"Enumerable::EmptyError\00" }
@"'NotImplementedError...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"NotImplementedError\00" }
@"'DivisionByZeroError...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"DivisionByZeroError\00" }
@"'KeyError'" = private constant { i32, i32, i32, [9 x i8] } { i32 1, i32 8, i32 8, [9 x i8] c"KeyError\00" }
@"'InvalidByteSequence...'" = private constant { i32, i32, i32, [25 x i8] } { i32 1, i32 24, i32 24, [25 x i8] c"InvalidByteSequenceError\00" }
@"'TypeCastError'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"TypeCastError\00" }
@"'ArgumentError'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"ArgumentError\00" }
@"'IndexError'" = private constant { i32, i32, i32, [11 x i8] } { i32 1, i32 10, i32 10, [11 x i8] c"IndexError\00" }
@"'Debug::ELF::Error'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c"Debug::ELF::Error\00" }
@"'Exception'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c"Exception\00" }
@"')\0A'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c")\0A\00" }
@"'CRYSTAL_CALLSTACK_F...'" = private constant { i32, i32, i32, [28 x i8] } { i32 1, i32 27, i32 27, [28 x i8] c"CRYSTAL_CALLSTACK_FULL_INFO\00" }
@"'1'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"1\00" }
@"CallStack::base_address" = global %"(UInt32 | UInt64 | Nil)" zeroinitializer
@"CallStack::dwarf_line_numbers" = global %"(Debug::DWARF::LineNumbers | Nil)" zeroinitializer
@PROGRAM_NAME = internal global %String* null
@"PROGRAM_NAME:init" = internal global i1 false
@"'r'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"r\00" }
@"'Invalid access mode...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"Invalid access mode \00" }
@"'String contains nul...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"String contains null byte\00" }
@"'Error opening file ...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"Error opening file '\00" }
@"'' with mode ''" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"' with mode '\00" }
@"'''" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"'\00" }
@"'Error reading file'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Error reading file\00" }
@"'Read timed out'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Read timed out\00" }
@"'Can't write to read...'" = private constant { i32, i32, i32, [31 x i8] } { i32 1, i32 30, i32 30, [31 x i8] c"Can't write to read-only Slice\00" }
@"'Invalid magic numbe...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"Invalid magic number\00" }
@"'Unknown enum '" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"Unknown enum \00" }
@"'Debug::ELF::Endiann...'" = private constant { i32, i32, i32, [23 x i8] } { i32 1, i32 22, i32 22, [23 x i8] c"Debug::ELF::Endianness\00" }
@"' value: '" = private constant { i32, i32, i32, [9 x i8] } { i32 1, i32 8, i32 8, [9 x i8] c" value: \00" }
@"'Overflow: UInt8::MI...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"Overflow: UInt8::MIN / -1\00" }
@"'Unsupported version...'" = private constant { i32, i32, i32, [27 x i8] } { i32 1, i32 26, i32 26, [27 x i8] c"Unsupported version number\00" }
@"'Debug::ELF::OSABI'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c"Debug::ELF::OSABI\00" }
@"'End of file reached...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"End of file reached\00" }
@"'Unsupported'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"Unsupported\00" }
@"'Header should be 52...'" = private constant { i32, i32, i32, [36 x i8] } { i32 1, i32 35, i32 35, [36 x i8] c"Header should be 52 bytes for ELF32\00" }
@"'Header should be 64...'" = private constant { i32, i32, i32, [36 x i8] } { i32 1, i32 35, i32 35, [36 x i8] c"Header should be 64 bytes for ELF64\00" }
@"'.text'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c".text\00" }
@"'Unable to seek'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Unable to seek\00" }
@"'Unable to tell'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Unable to tell\00" }
@"'Negative limit'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Negative limit\00" }
@"'Invalid back amount...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Invalid back amount\00" }
@"'Incomplete UTF-8 by...'" = private constant { i32, i32, i32, [31 x i8] } { i32 1, i32 30, i32 30, [31 x i8] c"Incomplete UTF-8 byte sequence\00" }
@"'Unexpected byte 0x'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Unexpected byte 0x\00" }
@"'0'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"0\00" }
@"'Overflow: UInt32::M...'" = private constant { i32, i32, i32, [27 x i8] } { i32 1, i32 26, i32 26, [27 x i8] c"Overflow: UInt32::MIN / -1\00" }
@"' in UTF-8 byte sequ...'" = private constant { i32, i32, i32, [24 x i8] } { i32 1, i32 23, i32 23, [24 x i8] c" in UTF-8 byte sequence\00" }
@"'.debug_line'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c".debug_line\00" }
@"'.debug_str'" = private constant { i32, i32, i32, [11 x i8] } { i32 1, i32 10, i32 10, [11 x i8] c".debug_str\00" }
@"'.debug_info'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c".debug_info\00" }
@"'.debug_abbrev'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c".debug_abbrev\00" }
@"'Invalid address siz...'" = private constant { i32, i32, i32, [23 x i8] } { i32 1, i32 22, i32 22, [23 x i8] c"Invalid address size: \00" }
@"'Unknown DW_FORM_'" = private constant { i32, i32, i32, [17 x i8] } { i32 1, i32 16, i32 16, [17 x i8] c"Unknown DW_FORM_\00" }
@"'Addr'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Addr\00" }
@"'Block2'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"Block2\00" }
@"'Block4'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"Block4\00" }
@"'Data2'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Data2\00" }
@"'Data4'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Data4\00" }
@"'Data8'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Data8\00" }
@"'String'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"String\00" }
@"'Block'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Block\00" }
@"'Block1'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"Block1\00" }
@"'Data1'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Data1\00" }
@"'Flag'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Flag\00" }
@"'Sdata'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Sdata\00" }
@"'Strp'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Strp\00" }
@"'Udata'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Udata\00" }
@"'RefAddr'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"RefAddr\00" }
@"'Ref1'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Ref1\00" }
@"'Ref2'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Ref2\00" }
@"'Ref4'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Ref4\00" }
@"'Ref8'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Ref8\00" }
@"'RefUdata'" = private constant { i32, i32, i32, [9 x i8] } { i32 1, i32 8, i32 8, [9 x i8] c"RefUdata\00" }
@"'Indirect'" = private constant { i32, i32, i32, [9 x i8] } { i32 1, i32 8, i32 8, [9 x i8] c"Indirect\00" }
@"'SecOffset'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c"SecOffset\00" }
@"'Exprloc'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"Exprloc\00" }
@"'FlagPresent'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"FlagPresent\00" }
@"'RefSig8'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"RefSig8\00" }
@"Unicode::casefold_ranges" = global %"Array(Tuple(Int32, Int32, Int32))"* null
@"Unicode::fold_cases" = global %"Hash(Int32, Tuple(Int32, Int32, Int32, Int32))"* null
@"Unicode::downcase_ranges" = global %"Array(Tuple(Int32, Int32, Int32))"* null
@"' out of char range'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c" out of char range\00" }
@"Unicode::alternate_ranges" = global %"Array(Tuple(Int32, Int32))"* null
@"'cast from '" = private constant { i32, i32, i32, [11 x i8] } { i32 1, i32 10, i32 10, [11 x i8] c"cast from \00" }
@"'Bool'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"Bool\00" }
@"'Int32'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Int32\00" }
@"'Int64'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Int64\00" }
@"'Slice(UInt8)'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"Slice(UInt8)\00" }
@"'UInt16'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"UInt16\00" }
@"'UInt32'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"UInt32\00" }
@"'UInt64'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"UInt64\00" }
@"'UInt8'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"UInt8\00" }
@"' to (UInt32 | UInt6...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c" to (UInt32 | UInt64) failed\00" }
@"', at /mnt/d/Dokumen...'" = private constant { i32, i32, i32, [73 x i8] } { i32 1, i32 72, i32 72, [73 x i8] c", at /mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr:218:3:36\00" }
@"'Nil'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"Nil\00" }
@"' to String failed'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c" to String failed\00" }
@"', at /mnt/d/Dokumen...'.6" = private constant { i32, i32, i32, [73 x i8] } { i32 1, i32 72, i32 72, [73 x i8] c", at /mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr:218:3:37\00" }
@"' to UInt64 failed'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c" to UInt64 failed\00" }
@"', at /mnt/d/Dokumen...'.7" = private constant { i32, i32, i32, [73 x i8] } { i32 1, i32 72, i32 72, [73 x i8] c", at /mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr:218:3:39\00" }
@"', at /mnt/d/Dokumen...'.8" = private constant { i32, i32, i32, [73 x i8] } { i32 1, i32 72, i32 72, [73 x i8] c", at /mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr:218:3:42\00" }
@"', at /mnt/d/Dokumen...'.9" = private constant { i32, i32, i32, [73 x i8] } { i32 1, i32 72, i32 72, [73 x i8] c", at /mnt/d/Dokumente/dev/test/crystal/crystal/src/callstack.cr:218:3:44\00" }
@"'Overflow: UInt64::M...'" = private constant { i32, i32, i32, [27 x i8] } { i32 1, i32 26, i32 26, [27 x i8] c"Overflow: UInt64::MIN / -1\00" }
@"'Invalid Int32: '" = private constant { i32, i32, i32, [16 x i8] } { i32 1, i32 15, i32 15, [16 x i8] c"Invalid Int32: \00" }
@"CallStack::dwarf_function_names" = global %"Array(Tuple(UInt64, UInt64, String))"* null
@"'/'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"/\00" }
@"'??'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"??\00" }
@"':'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c":\00" }
@"'*raise<'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"*raise<\00" }
@"'*CallStack::'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"*CallStack::\00" }
@"'*CallStack#'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"*CallStack#\00" }
@"'???'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"???\00" }
@"' in ''" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c" in '\00" }
@"' at 0x'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c" at 0x\00" }
@"' from '" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c" from \00" }
@"'Caused by: '" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"Caused by: \00" }
@"'/dev/urandom'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"/dev/urandom\00" }
@"'Unable to get info'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"Unable to get info\00" }
@"Crystal::System::Random::urandom" = global %File* null
@"'getrandom'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c"getrandom\00" }
@"'Failed to access se...'" = private constant { i32, i32, i32, [57 x i8] } { i32 1, i32 56, i32 56, [57 x i8] c"Failed to access secure source to generate random bytes!\00" }
@STDIN = internal global %"IO::FileDescriptor"* null
@"STDIN:init" = internal global i1 false
@STDOUT = internal global %"IO::FileDescriptor"* null
@"STDOUT:init" = internal global i1 false
@"'Sleep seconds must ...'" = private constant { i32, i32, i32, [31 x i8] } { i32 1, i32 30, i32 30, [31 x i8] c"Sleep seconds must be positive\00" }
@"Signal::setup_default_handlers" = internal global %"Atomic(Int32)" zeroinitializer
@"Signal::setup_default_handlers:init" = internal global i1 false
@"Crystal::Signal::pipe" = internal global %"Tuple(IO::FileDescriptor+, IO::FileDescriptor+)" zeroinitializer
@"Crystal::Signal::pipe:init" = internal global i1 false
@"'Could not create pi...'" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"Could not create pipe\00" }
@"Crystal::Signal::handlers" = internal global %"Hash(Signal, Proc(Signal, Nil))"* null
@"Crystal::Signal::handlers:init" = internal global i1 false
@"'missing handler for...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"missing handler for \00" }
@"'HUP'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"HUP\00" }
@"'INT'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"INT\00" }
@"'QUIT'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"QUIT\00" }
@"'ILL'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"ILL\00" }
@"'TRAP'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"TRAP\00" }
@"'IOT'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"IOT\00" }
@"'ABRT'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"ABRT\00" }
@"'FPE'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"FPE\00" }
@"'KILL'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"KILL\00" }
@"'BUS'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"BUS\00" }
@"'SEGV'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"SEGV\00" }
@"'SYS'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"SYS\00" }
@"'PIPE'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"PIPE\00" }
@"'ALRM'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"ALRM\00" }
@"'TERM'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"TERM\00" }
@"'URG'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"URG\00" }
@"'STOP'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"STOP\00" }
@"'TSTP'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"TSTP\00" }
@"'CONT'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"CONT\00" }
@"'CHLD'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"CHLD\00" }
@"'TTIN'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"TTIN\00" }
@"'TTOU'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"TTOU\00" }
@"'IO'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"IO\00" }
@"'XCPU'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"XCPU\00" }
@"'XFSZ'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"XFSZ\00" }
@"'VTALRM'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"VTALRM\00" }
@"'USR1'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"USR1\00" }
@"'USR2'" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"USR2\00" }
@"'WINCH'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"WINCH\00" }
@"'PWR'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"PWR\00" }
@"'STKFLT'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"STKFLT\00" }
@"'UNUSED'" = private constant { i32, i32, i32, [7 x i8] } { i32 1, i32 6, i32 6, [7 x i8] c"UNUSED\00" }
@"'FATAL: '" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"FATAL: \00" }
@"', exiting'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c", exiting\00" }
@"'uncaught exception ...'" = private constant { i32, i32, i32, [49 x i8] } { i32 1, i32 48, i32 48, [49 x i8] c"uncaught exception while processing handler for \00" }
@"'waitpid'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"waitpid\00" }
@"Crystal::SignalChildHandler::mutex" = internal global %Mutex* null
@"Crystal::SignalChildHandler::mutex:init" = internal global i1 false
@"Crystal::SignalChildHandler::waiting" = internal global %"Hash(Int32, Channel::Buffered(Int32))"* null
@"Crystal::SignalChildHandler::waiting:init" = internal global i1 false
@"'Attempt to unlock a...'" = private constant { i32, i32, i32, [46 x i8] } { i32 1, i32 45, i32 45, [46 x i8] c"Attempt to unlock a mutex which is not locked\00" }
@"'Channel is closed'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c"Channel is closed\00" }
@"Crystal::SignalChildHandler::pending" = internal global %"Hash(Int32, Int32)"* null
@"Crystal::SignalChildHandler::pending:init" = internal global i1 false
@"Crystal::Signal::child_handler" = global %"->" zeroinitializer
@"Crystal::Signal::mutex" = internal global %Mutex* null
@"Crystal::Signal::mutex:init" = internal global i1 false
@"'/mnt/d/Dokumente/de...'.10" = private constant { i32, i32, i32, [55 x i8] } { i32 1, i32 54, i32 54, [55 x i8] c"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr\00" }
@pcre_malloc = external global i8* (i64)*
@pcre_free = external global %Nil (i8*)*
@"Time::Location::location_cache" = internal global %"Hash(String, NamedTuple(time: Time, location: Time::Location))"* null
@"Time::Location::location_cache:init" = internal global i1 false
@"'Failed to raise an ...'" = private constant { i32, i32, i32, [34 x i8] } { i32 1, i32 33, i32 33, [34 x i8] c"Failed to raise an exception: %s\0A\00" }
@"'NO_REASON'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c"NO_REASON\00" }
@"'FOREIGN_EXCEPTION_C...'" = private constant { i32, i32, i32, [25 x i8] } { i32 1, i32 24, i32 24, [25 x i8] c"FOREIGN_EXCEPTION_CAUGHT\00" }
@"'FATAL_PHASE2_ERROR'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"FATAL_PHASE2_ERROR\00" }
@"'FATAL_PHASE1_ERROR'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"FATAL_PHASE1_ERROR\00" }
@"'NORMAL_STOP'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"NORMAL_STOP\00" }
@"'END_OF_STACK'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"END_OF_STACK\00" }
@"'HANDLER_FOUND'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"HANDLER_FOUND\00" }
@"'INSTALL_CONTEXT'" = private constant { i32, i32, i32, [16 x i8] } { i32 1, i32 15, i32 15, [16 x i8] c"INSTALL_CONTEXT\00" }
@"'CONTINUE_UNWIND'" = private constant { i32, i32, i32, [16 x i8] } { i32 1, i32 15, i32 15, [16 x i8] c"CONTINUE_UNWIND\00" }
@"'[0x%lx] %s +%ld\0A'" = private constant { i32, i32, i32, [17 x i8] } { i32 1, i32 16, i32 16, [17 x i8] c"[0x%lx] %s +%ld\0A\00" }
@"'[0x%lx] %s +%ld (%l...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c"[0x%lx] %s +%ld (%ld times)\0A\00" }
@"'[0x%lx] ???\0A'" = private constant { i32, i32, i32, [13 x i8] } { i32 1, i32 12, i32 12, [13 x i8] c"[0x%lx] ???\0A\00" }
@"'[0x%lx] ??? (%ld ti...'" = private constant { i32, i32, i32, [25 x i8] } { i32 1, i32 24, i32 24, [25 x i8] c"[0x%lx] ??? (%ld times)\0A\00" }
@"AtExitHandlers::exception" = global i32* null
@"AtExitHandlers::handlers" = global %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* null
@"'Error running at_ex...'" = private constant { i32, i32, i32, [32 x i8] } { i32 1, i32 31, i32 31, [32 x i8] c"Error running at_exit handler: \00" }
@"'Unhandled exception...'.11" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"Unhandled exception: \00" }
@"'Invalid memory acce...'" = private constant { i32, i32, i32, [52 x i8] } { i32 1, i32 51, i32 51, [52 x i8] c"Invalid memory access (signal %d) at address 0x%lx\0A\00" }
define void @__crystal_main(i32 %argc, i8** %argv) !dbg !4 {
alloca:
%0 = alloca %"->", !dbg !1372
%1 = alloca %"Slice(UInt8)", !dbg !1374
%2 = alloca %"->"
%3 = alloca %"->", !dbg !1376
%4 = alloca %"->", !dbg !1376
%5 = alloca %"->", !dbg !1379
%6 = alloca %"->", !dbg !1379
br label %entry
entry: ; preds = %alloca
store i32 %argc, i32* @ARGC_UNSAFE
store i8** %argv, i8*** @ARGV_UNSAFE
%7 = load i1, i1* @"Crystal::stdin_is_blocking:init"
br i1 %7, label %initialized, label %not_initialized
initialized: ; preds = %not_initialized, %entry
%8 = load i1, i1* @"Crystal::stdout_is_blocking:init"
br i1 %8, label %initialized1, label %not_initialized2
not_initialized: ; preds = %entry
store i1 true, i1* @"Crystal::stdin_is_blocking:init"
call void @"~Crystal::stdin_is_blocking:init"()
br label %initialized
initialized1: ; preds = %not_initialized2, %initialized
%9 = load i1, i1* @"Crystal::stderr_is_blocking:init"
br i1 %9, label %initialized3, label %not_initialized4
not_initialized2: ; preds = %initialized
store i1 true, i1* @"Crystal::stdout_is_blocking:init"
call void @"~Crystal::stdout_is_blocking:init"()
br label %initialized1
initialized3: ; preds = %not_initialized4, %initialized1
%10 = load i1, i1* @"Crystal::System::Random::initialized:init"
br i1 %10, label %initialized5, label %not_initialized6
not_initialized4: ; preds = %initialized1
store i1 true, i1* @"Crystal::stderr_is_blocking:init"
call void @"~Crystal::stderr_is_blocking:init"()
br label %initialized3
initialized5: ; preds = %not_initialized6, %initialized3
%11 = load i1, i1* @"Crystal::System::Random::getrandom_available:init"
br i1 %11, label %initialized7, label %not_initialized8
not_initialized6: ; preds = %initialized3
store i1 true, i1* @"Crystal::System::Random::initialized:init"
call void @"~Crystal::System::Random::initialized:init"()
br label %initialized5
initialized7: ; preds = %not_initialized8, %initialized5
%12 = load i1, i1* @"AtExitHandlers::running:init"
br i1 %12, label %initialized9, label %not_initialized10
not_initialized8: ; preds = %initialized5
store i1 true, i1* @"Crystal::System::Random::getrandom_available:init"
call void @"~Crystal::System::Random::getrandom_available:init"()
br label %initialized7
initialized9: ; preds = %not_initialized10, %initialized7
%13 = load i1, i1* @"Debug::ELF::MAGIC:init", !dbg !1380
br i1 %13, label %initialized11, label %not_initialized12, !dbg !1380
not_initialized10: ; preds = %initialized7
store i1 true, i1* @"AtExitHandlers::running:init"
call void @"~AtExitHandlers::running:init"()
br label %initialized9
initialized11: ; preds = %not_initialized12, %initialized9
%14 = load i1, i1* @"CallStack::CURRENT_DIR:init", !dbg !1382
br i1 %14, label %initialized13, label %not_initialized14, !dbg !1382
not_initialized12: ; preds = %initialized9
store i1 true, i1* @"Debug::ELF::MAGIC:init", !dbg !1380
call void @"~Debug::ELF::MAGIC:init"()
br label %initialized11
initialized13: ; preds = %not_initialized14, %initialized11
%15 = load i1, i1* @"CallStack::skip:init"
br i1 %15, label %initialized15, label %not_initialized16
not_initialized14: ; preds = %initialized11
store i1 true, i1* @"CallStack::CURRENT_DIR:init", !dbg !1382
call void @"~CallStack::CURRENT_DIR:init"()
br label %initialized13
initialized15: ; preds = %not_initialized16, %initialized13
%16 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [59 x i8] }* @"'/mnt/d/Dokumente/de...'" to %String*)), !dbg !1384
%17 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [59 x i8] }* @"'/mnt/d/Dokumente/de...'.2" to %String*)), !dbg !1386
%18 = load i1, i1* @"LibC::SIG_DFL:init", !dbg !1388
br i1 %18, label %initialized17, label %not_initialized18, !dbg !1388
not_initialized16: ; preds = %initialized13
store i1 true, i1* @"CallStack::skip:init"
call void @"~CallStack::skip:init"()
br label %initialized15
initialized17: ; preds = %not_initialized18, %initialized15
%19 = load i1, i1* @"LibC::SIG_IGN:init"
br i1 %19, label %initialized19, label %not_initialized20
not_initialized18: ; preds = %initialized15
store i1 true, i1* @"LibC::SIG_DFL:init", !dbg !1388
call void @"~LibC::SIG_DFL:init"()
br label %initialized17
initialized19: ; preds = %not_initialized20, %initialized17
%20 = load i1, i1* @"String::CHAR_TO_DIGIT:init"
br i1 %20, label %initialized21, label %not_initialized22
not_initialized20: ; preds = %initialized17
store i1 true, i1* @"LibC::SIG_IGN:init"
call void @"~LibC::SIG_IGN:init"()
br label %initialized19
initialized21: ; preds = %not_initialized22, %initialized19
%21 = load i1, i1* @"String::CHAR_TO_DIGIT62:init"
br i1 %21, label %initialized23, label %not_initialized24
not_initialized22: ; preds = %initialized19
store i1 true, i1* @"String::CHAR_TO_DIGIT:init"
call void @"~String::CHAR_TO_DIGIT:init"()
br label %initialized21
initialized23: ; preds = %not_initialized24, %initialized21
%22 = load i1, i1* @"LibC::MAP_FAILED:init", !dbg !1391
br i1 %22, label %initialized25, label %not_initialized26, !dbg !1391
not_initialized24: ; preds = %initialized21
store i1 true, i1* @"String::CHAR_TO_DIGIT62:init"
call void @"~String::CHAR_TO_DIGIT62:init"()
br label %initialized23
initialized25: ; preds = %not_initialized26, %initialized23
%23 = load i1, i1* @"Fiber::stack_pool:init"
br i1 %23, label %initialized27, label %not_initialized28
not_initialized26: ; preds = %initialized23
store i1 true, i1* @"LibC::MAP_FAILED:init", !dbg !1391
call void @"~LibC::MAP_FAILED:init"()
br label %initialized25
initialized27: ; preds = %not_initialized28, %initialized25
%24 = load i1, i1* @"Fiber::root:init"
br i1 %24, label %initialized29, label %not_initialized30
not_initialized28: ; preds = %initialized25
store i1 true, i1* @"Fiber::stack_pool:init"
call void @"~Fiber::stack_pool:init"()
br label %initialized27
initialized29: ; preds = %not_initialized30, %initialized27
%25 = call %Thread* @"*Thread::current:Thread"(), !dbg !1372
%26 = call %Fiber* @"*Fiber::root:Fiber"(), !dbg !1394
%27 = call %Fiber* @"*Thread#current_fiber=<Fiber>:Fiber"(%Thread* %25, %Fiber* %26), !dbg !1372
%28 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1372
store i8* bitcast (void ()* @"~procProc(Nil)@src/fiber.cr:321" to i8*), i8** %28, !dbg !1372
%29 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1372
store i8* null, i8** %29, !dbg !1372
%30 = load %"->", %"->"* %0, !dbg !1372
call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %30), !dbg !1395
%31 = load i1, i1* @"Scheduler::runnables:init", !dbg !1396
br i1 %31, label %initialized31, label %not_initialized32, !dbg !1396
not_initialized30: ; preds = %initialized27
store i1 true, i1* @"Fiber::root:init"
call void @"~Fiber::root:init"()
br label %initialized29
initialized31: ; preds = %not_initialized32, %initialized29
%32 = load i1, i1* @"Scheduler::eb:init"
br i1 %32, label %initialized33, label %not_initialized34
not_initialized32: ; preds = %initialized29
store i1 true, i1* @"Scheduler::runnables:init", !dbg !1396
call void @"~Scheduler::runnables:init"()
br label %initialized31
initialized33: ; preds = %not_initialized34, %initialized31
%33 = load i1, i1* @"Crystal::stdin_is_blocking:init", !dbg !1399
br i1 %33, label %initialized35, label %not_initialized36, !dbg !1399
not_initialized34: ; preds = %initialized31
store i1 true, i1* @"Scheduler::eb:init"
call void @"~Scheduler::eb:init"()
br label %initialized33
initialized35: ; preds = %not_initialized36, %initialized33
%34 = load i1, i1* @"Crystal::stdout_is_blocking:init", !dbg !1399
br i1 %34, label %initialized37, label %not_initialized38, !dbg !1399
not_initialized36: ; preds = %initialized33
store i1 true, i1* @"Crystal::stdin_is_blocking:init", !dbg !1399
call void @"~Crystal::stdin_is_blocking:init"(), !dbg !1399
br label %initialized35, !dbg !1399
initialized37: ; preds = %not_initialized38, %initialized35
%35 = load i1, i1* @"Crystal::stderr_is_blocking:init", !dbg !1399
br i1 %35, label %initialized39, label %not_initialized40, !dbg !1399
not_initialized38: ; preds = %initialized35
store i1 true, i1* @"Crystal::stdout_is_blocking:init", !dbg !1399
call void @"~Crystal::stdout_is_blocking:init"(), !dbg !1399
br label %initialized37, !dbg !1399
initialized39: ; preds = %not_initialized40, %initialized37
%36 = load i1, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !1401
br i1 %36, label %initialized41, label %not_initialized42, !dbg !1401
not_initialized40: ; preds = %initialized37
store i1 true, i1* @"Crystal::stderr_is_blocking:init", !dbg !1399
call void @"~Crystal::stderr_is_blocking:init"(), !dbg !1399
br label %initialized39, !dbg !1399
initialized41: ; preds = %not_initialized42, %initialized39
%37 = load i1, i1* @"Crystal::System::Random::initialized:init", !dbg !1404
br i1 %37, label %initialized43, label %not_initialized44, !dbg !1404
not_initialized42: ; preds = %initialized39
store i1 true, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !1401
call void @"~File::DEFAULT_CREATE_PERMISSIONS:init"()
br label %initialized41
initialized43: ; preds = %not_initialized44, %initialized41
%38 = load i1, i1* @"Crystal::System::Random::getrandom_available:init", !dbg !1404
br i1 %38, label %initialized45, label %not_initialized46, !dbg !1404
not_initialized44: ; preds = %initialized41
store i1 true, i1* @"Crystal::System::Random::initialized:init", !dbg !1404
call void @"~Crystal::System::Random::initialized:init"(), !dbg !1404
br label %initialized43, !dbg !1404
initialized45: ; preds = %not_initialized46, %initialized43
%39 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* bitcast ([2 x i64]* @"Crystal::Hasher::seed" to i8*), i32 trunc (i64 mul nuw (i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 2) to i32)), !dbg !1374
store %"Slice(UInt8)" %39, %"Slice(UInt8)"* %1, !dbg !1374
%40 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !1374
call void @"*Random::Secure@Random::Secure::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %40), !dbg !1407
%41 = load i1, i1* @"Hash::HASH_PRIMES:init", !dbg !1407
br i1 %41, label %initialized47, label %not_initialized48, !dbg !1407
not_initialized46: ; preds = %initialized43
store i1 true, i1* @"Crystal::System::Random::getrandom_available:init", !dbg !1404
call void @"~Crystal::System::Random::getrandom_available:init"(), !dbg !1404
br label %initialized45, !dbg !1404
initialized47: ; preds = %not_initialized48, %initialized45
%42 = load i1, i1* @"STDIN:init", !dbg !1408
br i1 %42, label %initialized49, label %not_initialized50, !dbg !1408
not_initialized48: ; preds = %initialized45
store i1 true, i1* @"Hash::HASH_PRIMES:init", !dbg !1407
call void @"~Hash::HASH_PRIMES:init"(), !dbg !1407
br label %initialized47, !dbg !1407
initialized49: ; preds = %not_initialized50, %initialized47
%43 = load i1, i1* @"STDOUT:init"
br i1 %43, label %initialized51, label %not_initialized52
not_initialized50: ; preds = %initialized47
store i1 true, i1* @"STDIN:init", !dbg !1408
call void @"~STDIN:init"()
br label %initialized49
initialized51: ; preds = %not_initialized52, %initialized49
%44 = load i1, i1* @"STDERR:init"
br i1 %44, label %initialized53, label %not_initialized54
not_initialized52: ; preds = %initialized49
store i1 true, i1* @"STDOUT:init"
call void @"~STDOUT:init"()
br label %initialized51
initialized53: ; preds = %not_initialized54, %initialized51
%45 = load i1, i1* @"PROGRAM_NAME:init"
br i1 %45, label %initialized55, label %not_initialized56
not_initialized54: ; preds = %initialized51
store i1 true, i1* @"STDERR:init"
call void @"~STDERR:init"()
br label %initialized53
initialized55: ; preds = %not_initialized56, %initialized53
%46 = load i1, i1* @"AtExitHandlers::running:init"
br i1 %46, label %initialized57, label %not_initialized58
not_initialized56: ; preds = %initialized53
store i1 true, i1* @"PROGRAM_NAME:init"
call void @"~PROGRAM_NAME:init"()
br label %initialized55
initialized57: ; preds = %not_initialized58, %initialized55
%47 = getelementptr inbounds %"->", %"->"* %2, i32 0, i32 0
store i8* bitcast (void ()* @"~procProc(Nil)@src/kernel.cr:442" to i8*), i8** %47
%48 = getelementptr inbounds %"->", %"->"* %2, i32 0, i32 1
store i8* null, i8** %48
%49 = load %"->", %"->"* %2
%50 = call %Fiber* @"*spawn<&Proc(Nil)>:Fiber"(%"->" %49), !dbg !1410
call void @"*Signal::setup_default_handlers:Nil"(), !dbg !1410
call void @setup_sigfault_handler(), !dbg !1410
%51 = load i1, i1* @"Process::INITIAL_PWD:init", !dbg !1411
br i1 %51, label %initialized59, label %not_initialized60, !dbg !1411
not_initialized58: ; preds = %initialized55
store i1 true, i1* @"AtExitHandlers::running:init"
call void @"~AtExitHandlers::running:init"()
br label %initialized57
initialized59: ; preds = %not_initialized60, %initialized57
%52 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [55 x i8] }* @"'/mnt/d/Dokumente/de...'.10" to %String*)), !dbg !1414
%53 = getelementptr inbounds %"->", %"->"* %3, i32 0, i32 0, !dbg !1376
store i8* bitcast (i8* (i64)* @"*GC::malloc<UInt64>:Pointer(Void)" to i8*), i8** %53, !dbg !1376
%54 = getelementptr inbounds %"->", %"->"* %3, i32 0, i32 1, !dbg !1376
store i8* null, i8** %54, !dbg !1376
%55 = load %"->", %"->"* %3, !dbg !1376
%56 = call i8* @"~check_proc_is_not_closure"(%"->" %55), !dbg !1376
%57 = bitcast i8* %56 to i8* (i64)*, !dbg !1376
store i8* (i64)* %57, i8* (i64)** @pcre_malloc, !dbg !1376
%58 = bitcast i8* (i64)* %57 to i8*, !dbg !1376
%59 = getelementptr inbounds %"->", %"->"* %4, i32 0, i32 0, !dbg !1376
store i8* %58, i8** %59, !dbg !1376
%60 = getelementptr inbounds %"->", %"->"* %4, i32 0, i32 1, !dbg !1376
store i8* null, i8** %60, !dbg !1376
%61 = load %"->", %"->"* %4, !dbg !1376
%62 = getelementptr inbounds %"->", %"->"* %5, i32 0, i32 0, !dbg !1379
store i8* bitcast (void (i8*)* @"*GC::free<Pointer(Void)>:Nil" to i8*), i8** %62, !dbg !1379
%63 = getelementptr inbounds %"->", %"->"* %5, i32 0, i32 1, !dbg !1379
store i8* null, i8** %63, !dbg !1379
%64 = load %"->", %"->"* %5, !dbg !1379
%65 = call i8* @"~check_proc_is_not_closure"(%"->" %64), !dbg !1379
%66 = bitcast i8* %65 to %Nil (i8*)*, !dbg !1379
store %Nil (i8*)* %66, %Nil (i8*)** @pcre_free, !dbg !1379
%67 = bitcast %Nil (i8*)* %66 to i8*, !dbg !1379
%68 = getelementptr inbounds %"->", %"->"* %6, i32 0, i32 0, !dbg !1379
store i8* %67, i8** %68, !dbg !1379
%69 = getelementptr inbounds %"->", %"->"* %6, i32 0, i32 1, !dbg !1379
store i8* null, i8** %69, !dbg !1379
%70 = load %"->", %"->"* %6, !dbg !1379
%71 = load i1, i1* @"Signal::setup_default_handlers:init", !dbg !1416
br i1 %71, label %initialized61, label %not_initialized62, !dbg !1416
not_initialized60: ; preds = %initialized57
store i1 true, i1* @"Process::INITIAL_PWD:init", !dbg !1411
call void @"~Process::INITIAL_PWD:init"(), !dbg !1411
br label %initialized59, !dbg !1411
initialized61: ; preds = %not_initialized62, %initialized59
%72 = load i1, i1* @"Crystal::Signal::pipe:init", !dbg !1416
br i1 %72, label %initialized63, label %not_initialized64, !dbg !1416
not_initialized62: ; preds = %initialized59
store i1 true, i1* @"Signal::setup_default_handlers:init", !dbg !1416
call void @"~Signal::setup_default_handlers:init"(), !dbg !1416
br label %initialized61, !dbg !1416
initialized63: ; preds = %not_initialized64, %initialized61
%73 = load i1, i1* @"Crystal::Signal::handlers:init", !dbg !1416
br i1 %73, label %initialized65, label %not_initialized66, !dbg !1416
not_initialized64: ; preds = %initialized61
store i1 true, i1* @"Crystal::Signal::pipe:init", !dbg !1416
call void @"~Crystal::Signal::pipe:init"(), !dbg !1416
br label %initialized63, !dbg !1416
initialized65: ; preds = %not_initialized66, %initialized63
%74 = load i1, i1* @"Crystal::Signal::mutex:init", !dbg !1416
br i1 %74, label %initialized67, label %not_initialized68, !dbg !1416
not_initialized66: ; preds = %initialized63
store i1 true, i1* @"Crystal::Signal::handlers:init", !dbg !1416
call void @"~Crystal::Signal::handlers:init"(), !dbg !1416
br label %initialized65, !dbg !1416
initialized67: ; preds = %not_initialized68, %initialized65
%75 = load i1, i1* @"Crystal::SignalChildHandler::pending:init", !dbg !1416
br i1 %75, label %initialized69, label %not_initialized70, !dbg !1416
not_initialized68: ; preds = %initialized65
store i1 true, i1* @"Crystal::Signal::mutex:init", !dbg !1416
call void @"~Crystal::Signal::mutex:init"(), !dbg !1416
br label %initialized67, !dbg !1416
initialized69: ; preds = %not_initialized70, %initialized67
%76 = load i1, i1* @"Crystal::SignalChildHandler::waiting:init", !dbg !1416
br i1 %76, label %initialized71, label %not_initialized72, !dbg !1416
not_initialized70: ; preds = %initialized67
store i1 true, i1* @"Crystal::SignalChildHandler::pending:init", !dbg !1416
call void @"~Crystal::SignalChildHandler::pending:init"(), !dbg !1416
br label %initialized69, !dbg !1416
initialized71: ; preds = %not_initialized72, %initialized69
%77 = load i1, i1* @"Crystal::SignalChildHandler::mutex:init", !dbg !1416
br i1 %77, label %initialized73, label %not_initialized74, !dbg !1416
not_initialized72: ; preds = %initialized69
store i1 true, i1* @"Crystal::SignalChildHandler::waiting:init", !dbg !1416
call void @"~Crystal::SignalChildHandler::waiting:init"(), !dbg !1416
br label %initialized71, !dbg !1416
initialized73: ; preds = %not_initialized74, %initialized71
%78 = load i1, i1* @"Thread::threads:init", !dbg !1418
br i1 %78, label %initialized75, label %not_initialized76, !dbg !1418
not_initialized74: ; preds = %initialized71
store i1 true, i1* @"Crystal::SignalChildHandler::mutex:init", !dbg !1416
call void @"~Crystal::SignalChildHandler::mutex:init"(), !dbg !1416
br label %initialized73, !dbg !1416
initialized75: ; preds = %not_initialized76, %initialized73
%79 = load i1, i1* @"Thread::current:init", !dbg !1418
br i1 %79, label %initialized77, label %not_initialized78, !dbg !1418
not_initialized76: ; preds = %initialized73
store i1 true, i1* @"Thread::threads:init", !dbg !1418
call void @"~Thread::threads:init"(), !dbg !1418
br label %initialized75, !dbg !1418
initialized77: ; preds = %not_initialized78, %initialized75
%80 = load i1, i1* @"Time::Location::location_cache:init", !dbg !1421
br i1 %80, label %initialized79, label %not_initialized80, !dbg !1421
not_initialized78: ; preds = %initialized75
store i1 true, i1* @"Thread::current:init", !dbg !1418
call void @"~Thread::current:init"(), !dbg !1418
br label %initialized77, !dbg !1418
initialized79: ; preds = %not_initialized80, %initialized77
ret void, !dbg !1424
not_initialized80: ; preds = %initialized77
store i1 true, i1* @"Time::Location::location_cache:init", !dbg !1421
call void @"~Time::Location::location_cache:init"()
br label %initialized79
}
declare i32 @printf(i8*, ...)
; Function Attrs: uwtable
define i8* @__crystal_malloc64(i64 %size) #0 !dbg !1324 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !1427
%1 = call i8* @"*GC::malloc<UInt64>:Pointer(Void)"(i64 %0), !dbg !1428
ret i8* %1, !dbg !1428
}
; Function Attrs: uwtable
define i8* @__crystal_malloc_atomic64(i64 %size) #0 !dbg !1326 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !1429
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !1430
ret i8* %1, !dbg !1430
}
; Function Attrs: uwtable
define i8* @__crystal_realloc64(i8* %ptr, i64 %size) #0 !dbg !1327 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !1431
%1 = call i8* @"*GC::realloc<Pointer(Void), UInt64>:Pointer(Void)"(i8* %ptr, i64 %0), !dbg !1432
ret i8* %1, !dbg !1432
}
; Function Attrs: uwtable
define i32 @__crystal_personality(i32 %version, i32 %actions, i64 %exception_class, %"struct.LibUnwind::Exception"* %exception_object, i8* %context) #0 !dbg !1329 {
alloca:
%start = alloca i64, !dbg !1433
%ip = alloca i64, !dbg !1433
%throw_offset = alloca i64, !dbg !1433
%lsd = alloca i8*, !dbg !1433
%leb = alloca %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader", !dbg !1433
%cs_table_length = alloca i64, !dbg !1433
%cs_table_end = alloca i8*, !dbg !1433
%cs_offset = alloca i32, !dbg !1433
%cs_length = alloca i32, !dbg !1433
%cs_addr = alloca i32, !dbg !1433
%action = alloca i64, !dbg !1433
%__temp_240 = alloca i1, !dbg !1433
%0 = alloca %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader", !dbg !1433
br label %entry
entry: ; preds = %alloca
%1 = call i64 @_Unwind_GetRegionStart(i8* %context), !dbg !1433
store i64 %1, i64* %start, !dbg !1433
%2 = call i64 @_Unwind_GetIP(i8* %context), !dbg !1433
store i64 %2, i64* %ip, !dbg !1433
%3 = load i64, i64* %ip, !dbg !1433
%4 = sub i64 %3, 1, !dbg !1433
%5 = load i64, i64* %start, !dbg !1433
%6 = sub i64 %4, %5, !dbg !1433
store i64 %6, i64* %throw_offset, !dbg !1433
%7 = call i8* @_Unwind_GetLanguageSpecificData(i8* %context), !dbg !1433
store i8* %7, i8** %lsd, !dbg !1433
%8 = load i8*, i8** %lsd, !dbg !1433
%9 = call %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader" @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader::new<Pointer(UInt8)>:/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"(i8* %8), !dbg !1433
store %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader" %9, %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %0, !dbg !1433
%10 = load %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader", %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %0, !dbg !1433
store %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader" %10, %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb, !dbg !1433
%11 = call i8 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
%12 = call i8 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
%13 = icmp ne i8 %12, -1, !dbg !1433
br i1 %13, label %then, label %else, !dbg !1433
then: ; preds = %entry
%14 = call i64 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
br label %exit, !dbg !1433
else: ; preds = %entry
br label %exit, !dbg !1433
exit: ; preds = %else, %then
%15 = call i8 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
%16 = call i64 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
store i64 %16, i64* %cs_table_length, !dbg !1433
%17 = getelementptr inbounds %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader", %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb, i32 0, i32 0, !dbg !1433
%18 = load i8*, i8** %17, !dbg !1433
%19 = load i64, i64* %cs_table_length, !dbg !1433
%20 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %18, i64 %19), !dbg !1433
store i8* %20, i8** %cs_table_end, !dbg !1433
br label %while, !dbg !1433
while: ; preds = %exit14, %exit
%21 = getelementptr inbounds %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader", %"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb, i32 0, i32 0, !dbg !1433
%22 = load i8*, i8** %21, !dbg !1433
%23 = load i8*, i8** %cs_table_end, !dbg !1433
%24 = call i1 @"*Pointer(UInt8)@Comparable(T)#<<Pointer(UInt8)>:Bool"(i8* %22, i8* %23), !dbg !1433
br i1 %24, label %body, label %exit1, !dbg !1433
body: ; preds = %while
%25 = call i32 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
store i32 %25, i32* %cs_offset, !dbg !1433
%26 = call i32 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
store i32 %26, i32* %cs_length, !dbg !1433
%27 = call i32 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
store i32 %27, i32* %cs_addr, !dbg !1433
%28 = call i64 @"*/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/mnt/d/Dokumente/dev/test/crystal/crystal/src/raise.cr::LEBReader"* %leb), !dbg !1433
store i64 %28, i64* %action, !dbg !1433
%29 = load i32, i32* %cs_addr, !dbg !1433
%30 = icmp ne i32 %29, 0, !dbg !1433
br i1 %30, label %then2, label %else3, !dbg !1433
exit1: ; preds = %while
ret i32 8, !dbg !1433
then2: ; preds = %body
%31 = load i32, i32* %cs_offset, !dbg !1433
%32 = load i64, i64* %throw_offset, !dbg !1433
%33 = zext i32 %31 to i64, !dbg !1433
%34 = icmp ule i64 %33, %32, !dbg !1433
store i1 %34, i1* %__temp_240, !dbg !1433
br i1 %34, label %then6, label %else7, !dbg !1433
else3: ; preds = %body
br label %exit14, !dbg !1433
then4: ; preds = %exit8
%35 = call i1 @"*LibUnwind::Action@Enum#includes?<LibUnwind::Action>:Bool"(i32 %actions, i32 1), !dbg !1433
br i1 %35, label %then9, label %else10, !dbg !1433
else5: ; preds = %exit8
br label %exit13, !dbg !1433
then6: ; preds = %then2
%36 = load i64, i64* %throw_offset, !dbg !1433
%37 = load i32, i32* %cs_offset, !dbg !1433
%38 = load i32, i32* %cs_length, !dbg !1433
%39 = add i32 %37, %38, !dbg !1433
%40 = zext i32 %39 to i64, !dbg !1433
%41 = icmp ule i64 %36, %40, !dbg !1433
br label %exit8, !dbg !1433
else7: ; preds = %then2
%42 = load i1, i1* %__temp_240, !dbg !1433
br label %exit8, !dbg !1433
exit8: ; preds = %else7, %then6
%43 = phi i1 [ %41, %then6 ], [ %42, %else7 ], !dbg !1433
br i1 %43, label %then4, label %else5, !dbg !1433
then9: ; preds = %then4
ret i32 6, !dbg !1433
else10: ; preds = %then4
%44 = call i1 @"*LibUnwind::Action@Enum#includes?<LibUnwind::Action>:Bool"(i32 %actions, i32 4), !dbg !1433
br i1 %44, label %then11, label %else12, !dbg !1433
then11: ; preds = %else10
%45 = ptrtoint %"struct.LibUnwind::Exception"* %exception_object to i64, !dbg !1433
call void @_Unwind_SetGR(i8* %context, i32 0, i64 %45), !dbg !1433
%46 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %exception_object, i32 0, i32 5, !dbg !1433
%47 = load i32, i32* %46, !dbg !1433
%48 = sext i32 %47 to i64, !dbg !1433
call void @_Unwind_SetGR(i8* %context, i32 1, i64 %48), !dbg !1433
%49 = load i64, i64* %start, !dbg !1433
%50 = load i32, i32* %cs_addr, !dbg !1433
%51 = zext i32 %50 to i64, !dbg !1433
%52 = add i64 %49, %51, !dbg !1433
%53 = call i64 @_Unwind_SetIP(i8* %context, i64 %52), !dbg !1433
ret i32 7, !dbg !1433
else12: ; preds = %else10
br label %exit13, !dbg !1433
exit13: ; preds = %else5, %else12
br label %exit14, !dbg !1433
exit14: ; preds = %else3, %exit13
br label %while, !dbg !1433
}
; Function Attrs: noreturn uwtable
define void @__crystal_raise(%"struct.LibUnwind::Exception"* %unwind_ex) #1 !dbg !1336 {
alloca:
%ret = alloca i32, !dbg !1434
br label %entry
entry: ; preds = %alloca
%0 = call i32 @_Unwind_RaiseException(%"struct.LibUnwind::Exception"* %unwind_ex), !dbg !1434
store i32 %0, i32* %ret, !dbg !1434
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* bitcast ({ i32, i32, i32, [34 x i8] }* @"'Failed to raise an ...'" to %String*)), !dbg !1434
%2 = load i32, i32* %ret, !dbg !1434
%3 = call %String* @"*LibUnwind::ReasonCode@Enum#to_s:String"(i32 %2), !dbg !1434
%4 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %3), !dbg !1434
%5 = call i32 (i32, i8*, ...) @dprintf(i32 2, i8* %1, i8* %4), !dbg !1434
%6 = call i32 @"*CallStack::print_backtrace:Int32"(), !dbg !1434
%7 = load i32, i32* %ret, !dbg !1434
%8 = call i32 @"*LibUnwind::ReasonCode@Enum#to_i32:Int32"(i32 %7), !dbg !1434
call void @exit(i32 %8), !dbg !1434
unreachable, !dbg !1434
}
; Function Attrs: uwtable
define i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %unwind_ex) #0 !dbg !1345 {
entry:
%0 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %unwind_ex, i32 0, i32 4, !dbg !1435
%1 = load i64, i64* %0, !dbg !1435
ret i64 %1, !dbg !1435
}
define internal void @"~Crystal::stdin_is_blocking:init"() {
entry:
ret void
}
define internal void @"~Crystal::stdout_is_blocking:init"() {
entry:
ret void
}
define internal void @"~Crystal::stderr_is_blocking:init"() {
entry:
ret void
}
define internal void @"~Crystal::System::Random::initialized:init"() {
entry:
ret void
}
define internal void @"~Crystal::System::Random::getrandom_available:init"() {
entry:
ret void
}
define internal void @"~AtExitHandlers::running:init"() {
entry:
ret void
}
define internal void @"~Debug::ELF::MAGIC:init"() {
alloca:
%__temp_93 = alloca %"Slice(UInt8)", !dbg !1380
%0 = alloca %"Slice(UInt8)"
br label %entry
entry: ; preds = %alloca
%1 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new:read_only<Int32, Bool>:Slice(UInt8)"(i32 1033, i32 4, i1 false)
store %"Slice(UInt8)" %1, %"Slice(UInt8)"* %0
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %__temp_93
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_93, i32 0, i32 2
%4 = load i8*, i8** %3
%5 = call i8 @"*UInt8::new<Int32>:UInt8"(i32 127)
%6 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %4, i32 0, i8 %5)
%7 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_93, i32 0, i32 2
%8 = load i8*, i8** %7
%9 = call i8 @"*UInt8::new<Int32>:UInt8"(i32 69)
%10 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %8, i32 1, i8 %9)
%11 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_93, i32 0, i32 2
%12 = load i8*, i8** %11
%13 = call i8 @"*UInt8::new<Int32>:UInt8"(i32 76)
%14 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %12, i32 2, i8 %13)
%15 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_93, i32 0, i32 2
%16 = load i8*, i8** %15
%17 = call i8 @"*UInt8::new<Int32>:UInt8"(i32 70)
%18 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %16, i32 3, i8 %17)
%19 = load %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_93
store %"Slice(UInt8)" %19, %"Slice(UInt8)"* @"Debug::ELF::MAGIC"
ret void
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new:read_only<Int32, Bool>:Slice(UInt8)"(i32 %self, i32 %size, i1 %read_only) #0 !dbg !9 {
alloca:
%pointer = alloca i8*, !dbg !1436
%0 = alloca %"Slice(UInt8)", !dbg !1437
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 690, i32 %size), !dbg !1438
store i8* %1, i8** %pointer, !dbg !1439
%2 = load i8*, i8** %pointer, !dbg !1439
%3 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i32 %self, i8* %2, i32 %size, i1 %read_only), !dbg !1437
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !1437
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1437
ret %"Slice(UInt8)" %4, !dbg !1437
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 %self, i32 %size) #0 !dbg !11 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !1440
br i1 %0, label %then, label %else, !dbg !1440
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !1441
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !1442
unreachable, !dbg !1442
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !1442
%3 = mul i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), %2, !dbg !1443
%4 = call i8* @__crystal_malloc_atomic64(i64 %3), !dbg !1443
%5 = trunc i64 %3 to i32, !dbg !1443
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !1443
ret i8* %4, !dbg !1442
}
; Function Attrs: uwtable
define internal %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %message) #0 !dbg !13 {
alloca:
%_ = alloca %ArgumentError*, !dbg !1444
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%ArgumentError* getelementptr (%ArgumentError, %ArgumentError* null, i32 1) to i64)), !dbg !1444
%1 = bitcast i8* %0 to %ArgumentError*, !dbg !1444
%2 = bitcast %ArgumentError* %1 to i8*, !dbg !1444
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%ArgumentError* getelementptr (%ArgumentError, %ArgumentError* null, i32 1) to i32), i32 4, i1 false), !dbg !1444
%3 = getelementptr inbounds %ArgumentError, %ArgumentError* %1, i32 0, i32 0, !dbg !1444
store i32 40, i32* %3, !dbg !1444
store %ArgumentError* %1, %ArgumentError** %_, !dbg !1444
%4 = load %ArgumentError*, %ArgumentError** %_, !dbg !1444
call void @"*ArgumentError#initialize<String>:Nil"(%ArgumentError* %4, %String* %message), !dbg !1444
%5 = load %ArgumentError*, %ArgumentError** %_, !dbg !1444
ret %ArgumentError* %5, !dbg !1444
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) #2
; Function Attrs: uwtable
define internal void @"*ArgumentError#initialize<String>:Nil"(%ArgumentError* %self, %String* %message) #0 !dbg !15 {
entry:
call void @"*ArgumentError@Exception#initialize<String>:Nil"(%ArgumentError* %self, %String* %message), !dbg !1445
ret void, !dbg !1445
}
; Function Attrs: uwtable
define internal void @"*ArgumentError@Exception#initialize<String>:Nil"(%ArgumentError* %self, %String* %message) #0 !dbg !16 {
alloca:
%cause = alloca %Nil, !dbg !1446
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 1, !dbg !1447
store %String* %message, %String** %0, !dbg !1447
%1 = load %Nil, %Nil* %cause, !dbg !1447
%2 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 2, !dbg !1448
store i32* null, i32** %2, !dbg !1448
ret void, !dbg !1448
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %exception) #1 !dbg !17 {
alloca:
%__temp_23 = alloca %"(CallStack | Nil)", !dbg !1449
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1449
%0 = alloca %CallStack, !dbg !1449
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %ArgumentError, %ArgumentError* %exception, i32 0, i32 3, !dbg !1449
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1449
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_23, !dbg !1449
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1449
%4 = load i32, i32* %3, !dbg !1449
%5 = icmp eq i32 %4, 0, !dbg !1449
%6 = xor i1 %5, true, !dbg !1449
%7 = and i1 true, %6, !dbg !1449
br i1 %7, label %then, label %else, !dbg !1449
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_23, i32 0, i32 1, !dbg !1449
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1449
br label %exit, !dbg !1449
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1449
store %CallStack %10, %CallStack* %0, !dbg !1449
%11 = load %CallStack, %CallStack* %0, !dbg !1449
%12 = call %CallStack @"*ArgumentError@Exception#callstack=<CallStack>:CallStack"(%ArgumentError* %exception, %CallStack %11), !dbg !1449
br label %exit, !dbg !1449
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !1449
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1449
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1449
store i64 %15, i64* %16, !dbg !1449
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1449
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1449
store i64 %18, i64* %19, !dbg !1449
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
%21 = ptrtoint %ArgumentError* %exception to i64, !dbg !1449
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1449
store i64 %21, i64* %22, !dbg !1449
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1449
store i32 40, i32* %24, !dbg !1449
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1449
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1449
unreachable, !dbg !1449
}
; Function Attrs: uwtable
define internal %CallStack @"*CallStack::new:CallStack"() #0 !dbg !19 {
alloca:
%_ = alloca %CallStack, !dbg !1450
%0 = alloca %CallStack, !dbg !1450
br label %entry
entry: ; preds = %alloca
%1 = bitcast %CallStack* %0 to i8*, !dbg !1450
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 trunc (i64 mul nuw (i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), i64 2) to i32), i32 4, i1 false), !dbg !1450
%2 = load %CallStack, %CallStack* %0, !dbg !1450
store %CallStack %2, %CallStack* %_, !dbg !1450
%3 = call %"Array(Pointer(Void))"* @"*CallStack#initialize:Array(Pointer(Void))"(%CallStack* %_), !dbg !1450
%4 = load %CallStack, %CallStack* %_, !dbg !1450
ret %CallStack %4, !dbg !1450
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*CallStack#initialize:Array(Pointer(Void))"(%CallStack* %self) #0 !dbg !21 {
entry:
%0 = call %"Array(Pointer(Void))"* @"*CallStack::unwind:Array(Pointer(Void))"(), !dbg !1451
%1 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 0, !dbg !1452
store %"Array(Pointer(Void))"* %0, %"Array(Pointer(Void))"** %1, !dbg !1452
ret %"Array(Pointer(Void))"* %0, !dbg !1452
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*CallStack::unwind:Array(Pointer(Void))"() #0 !dbg !22 {
alloca:
%callstack = alloca %"Array(Pointer(Void))"*, !dbg !1453
%backtrace_fn = alloca %"->", !dbg !1453
%0 = alloca %"->", !dbg !1454
br label %entry
entry: ; preds = %alloca
%1 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)::new:Array(Pointer(Void))"(i32 493), !dbg !1455
store %"Array(Pointer(Void))"* %1, %"Array(Pointer(Void))"** %callstack, !dbg !1454
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1454
store i8* bitcast (i32 (i8*, i8*)* @"~procProc(Pointer(Void), Pointer(Void), LibUnwind::ReasonCode)@src/callstack.cr:77" to i8*), i8** %2, !dbg !1454
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1454
store i8* null, i8** %3, !dbg !1454
%4 = load %"->", %"->"* %0, !dbg !1454
store %"->" %4, %"->"* %backtrace_fn, !dbg !1456
%5 = load %"->", %"->"* %backtrace_fn, !dbg !1456
%6 = call i8* @"~check_proc_is_not_closure"(%"->" %5)
%7 = bitcast i8* %6 to i32 (i8*, i8*)*
%8 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %callstack
%9 = bitcast %"Array(Pointer(Void))"* %8 to i8*
%10 = call i32 @_Unwind_Backtrace(i32 (i8*, i8*)* %7, i8* %9), !dbg !1457
%11 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %callstack, !dbg !1457
ret %"Array(Pointer(Void))"* %11, !dbg !1457
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)::new:Array(Pointer(Void))"(i32 %self) #0 !dbg !23 {
alloca:
%_ = alloca %"Array(Pointer(Void))"*, !dbg !1458
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Array(Pointer(Void))"* getelementptr (%"Array(Pointer(Void))", %"Array(Pointer(Void))"* null, i32 1) to i64)), !dbg !1458
%1 = bitcast i8* %0 to %"Array(Pointer(Void))"*, !dbg !1458
%2 = bitcast %"Array(Pointer(Void))"* %1 to i8*, !dbg !1458
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Array(Pointer(Void))"* getelementptr (%"Array(Pointer(Void))", %"Array(Pointer(Void))"* null, i32 1) to i32), i32 4, i1 false), !dbg !1458
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %1, i32 0, i32 0, !dbg !1458
store i32 8, i32* %3, !dbg !1458
store %"Array(Pointer(Void))"* %1, %"Array(Pointer(Void))"** %_, !dbg !1458
%4 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %_, !dbg !1458
%5 = call i8** @"*Array(Pointer(Void))@Array(T)#initialize:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %4), !dbg !1458
%6 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %_, !dbg !1458
ret %"Array(Pointer(Void))"* %6, !dbg !1458
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#initialize:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self) #0 !dbg !25 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !1459
store i32 0, i32* %0, !dbg !1459
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1460
store i32 0, i32* %1, !dbg !1460
%2 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)::null:Pointer(Pointer(Void))"(i32 708), !dbg !1461
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1462
store i8** %2, i8*** %3, !dbg !1462
ret i8** %2, !dbg !1462
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)::null:Pointer(Pointer(Void))"(i32 %self) #0 !dbg !26 {
entry:
ret i8** null, !dbg !1463
}
; Function Attrs: uwtable
define internal i32 @"~procProc(Pointer(Void), Pointer(Void), LibUnwind::ReasonCode)@src/callstack.cr:77"(i8* %context, i8* %data) #0 !dbg !27 {
alloca:
%bt = alloca %"Array(Pointer(Void))"*, !dbg !1464
%ip = alloca i8*, !dbg !1464
br label %entry
entry: ; preds = %alloca
%0 = bitcast i8* %data to %"Array(Pointer(Void))"*, !dbg !1464
store %"Array(Pointer(Void))"* %0, %"Array(Pointer(Void))"** %bt, !dbg !1465
%1 = call i64 @_Unwind_GetIP(i8* %context), !dbg !1466
%2 = inttoptr i64 %1 to i8*, !dbg !1466
store i8* %2, i8** %ip, !dbg !1467
%3 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %bt, !dbg !1467
%4 = load i8*, i8** %ip, !dbg !1467
%5 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#<<<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %3, i8* %4), !dbg !1468
ret i32 0, !dbg !1468
}
declare i64 @_Unwind_GetIP(i8*)
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#<<<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i8* %value) #0 !dbg !28 {
entry:
%0 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#push<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i8* %value), !dbg !1469
ret %"Array(Pointer(Void))"* %0, !dbg !1469
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#push<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i8* %value) #0 !dbg !29 {
entry:
%0 = call i8** @"*Array(Pointer(Void))@Array(T)#check_needs_resize:(Pointer(Pointer(Void)) | Nil)"(%"Array(Pointer(Void))"* %self), !dbg !1470
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1470
%2 = load i8**, i8*** %1, !dbg !1470
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !1470
%4 = load i32, i32* %3, !dbg !1470
%5 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %2, i32 %4, i8* %value), !dbg !1471
%6 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !1471
%7 = load i32, i32* %6, !dbg !1471
%8 = add i32 %7, 1, !dbg !1471
%9 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !1472
store i32 %8, i32* %9, !dbg !1472
ret %"Array(Pointer(Void))"* %self, !dbg !1472
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#check_needs_resize:(Pointer(Pointer(Void)) | Nil)"(%"Array(Pointer(Void))"* %self) #0 !dbg !30 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !1473
%1 = load i32, i32* %0, !dbg !1473
%2 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1473
%3 = load i32, i32* %2, !dbg !1473
%4 = icmp eq i32 %1, %3, !dbg !1473
br i1 %4, label %then, label %else, !dbg !1473
then: ; preds = %entry
%5 = call i8** @"*Array(Pointer(Void))@Array(T)#double_capacity:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self), !dbg !1473
br label %exit, !dbg !1473
else: ; preds = %entry
br label %exit, !dbg !1473
exit: ; preds = %else, %then
%6 = phi i8** [ %5, %then ], [ null, %else ], !dbg !1473
ret i8** %6, !dbg !1473
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#double_capacity:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self) #0 !dbg !31 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1474
%1 = load i32, i32* %0, !dbg !1474
%2 = icmp eq i32 %1, 0, !dbg !1474
br i1 %2, label %then, label %else, !dbg !1474
then: ; preds = %entry
br label %exit, !dbg !1474
else: ; preds = %entry
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1474
%4 = load i32, i32* %3, !dbg !1474
%5 = mul i32 %4, 2, !dbg !1474
br label %exit, !dbg !1474
exit: ; preds = %else, %then
%6 = phi i32 [ 3, %then ], [ %5, %else ], !dbg !1474
%7 = call i8** @"*Array(Pointer(Void))@Array(T)#resize_to_capacity<Int32>:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i32 %6), !dbg !1475
ret i8** %7, !dbg !1475
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#resize_to_capacity<Int32>:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i32 %capacity) #0 !dbg !32 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1476
store i32 %capacity, i32* %0, !dbg !1476
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1477
%2 = load i8**, i8*** %1, !dbg !1477
%3 = icmp ne i8** %2, null, !dbg !1477
br i1 %3, label %then, label %else, !dbg !1477
then: ; preds = %entry
%4 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1477
%5 = load i8**, i8*** %4, !dbg !1477
%6 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1477
%7 = load i32, i32* %6, !dbg !1477
%8 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#realloc<Int32>:Pointer(Pointer(Void))"(i8** %5, i32 %7), !dbg !1478
%9 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1479
store i8** %8, i8*** %9, !dbg !1479
br label %exit, !dbg !1479
else: ; preds = %entry
%10 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1479
%11 = load i32, i32* %10, !dbg !1479
%12 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)::malloc<Int32>:Pointer(Pointer(Void))"(i32 708, i32 %11), !dbg !1480
%13 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1481
store i8** %12, i8*** %13, !dbg !1481
br label %exit, !dbg !1481
exit: ; preds = %else, %then
%14 = phi i8** [ %8, %then ], [ %12, %else ], !dbg !1481
ret i8** %14, !dbg !1481
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)#realloc<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %size) #0 !dbg !33 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !1482
br i1 %0, label %then, label %else, !dbg !1482
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !1483
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !1484
unreachable, !dbg !1484
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !1484
%3 = bitcast i8** %self to i8*, !dbg !1484
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !1484
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !1484
%6 = bitcast i8* %5 to i8**, !dbg !1484
ret i8** %6, !dbg !1484
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)::malloc<Int32>:Pointer(Pointer(Void))"(i32 %self, i32 %size) #0 !dbg !34 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !1485
br i1 %0, label %then, label %else, !dbg !1485
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !1486
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !1487
unreachable, !dbg !1487
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !1487
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !1488
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !1488
%5 = trunc i64 %3 to i32, !dbg !1488
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !1488
%6 = bitcast i8* %4 to i8**, !dbg !1488
ret i8** %6, !dbg !1487
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %self, i32 %offset, i8* %value) #0 !dbg !35 {
entry:
%0 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %offset), !dbg !1489
store i8* %value, i8** %0, !dbg !1489
ret i8* %value, !dbg !1489
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %other) #0 !dbg !36 {
entry:
%0 = sext i32 %other to i64, !dbg !1490
%1 = getelementptr inbounds i8*, i8** %self, i64 %0, !dbg !1490
ret i8** %1, !dbg !1490
}
define internal i8* @"~check_proc_is_not_closure"(%"->") {
entry:
%1 = extractvalue %"->" %0, 0, !dbg !1456
%2 = extractvalue %"->" %0, 1, !dbg !1456
%3 = icmp eq i8* %2, null, !dbg !1456
br i1 %3, label %ctx_is_null, label %ctx_is_not_null, !dbg !1456
ctx_is_null: ; preds = %entry
ret i8* %1, !dbg !1456
ctx_is_not_null: ; preds = %entry
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [38 x i8] }* @"'passing a closure t...'" to %String*))
unreachable
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<String>:NoReturn"(%String* %message) #1 !dbg !37 {
entry:
%0 = call %Exception* @"*Exception::new<String>:Exception"(%String* %message), !dbg !1491
call void @"*raise<Exception>:NoReturn"(%Exception* %0), !dbg !1492
unreachable, !dbg !1492
}
; Function Attrs: uwtable
define internal %Exception* @"*Exception::new<String>:Exception"(%String* %__arg0) #0 !dbg !38 {
alloca:
%_ = alloca %Exception*, !dbg !1493
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Exception* getelementptr (%Exception, %Exception* null, i32 1) to i64)), !dbg !1493
%1 = bitcast i8* %0 to %Exception*, !dbg !1493
%2 = bitcast %Exception* %1 to i8*, !dbg !1493
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%Exception* getelementptr (%Exception, %Exception* null, i32 1) to i32), i32 4, i1 false), !dbg !1493
%3 = getelementptr inbounds %Exception, %Exception* %1, i32 0, i32 0, !dbg !1493
store i32 61, i32* %3, !dbg !1493
store %Exception* %1, %Exception** %_, !dbg !1493
%4 = load %Exception*, %Exception** %_, !dbg !1493
call void @"*Exception#initialize<String>:Nil"(%Exception* %4, %String* %__arg0), !dbg !1493
%5 = load %Exception*, %Exception** %_, !dbg !1493
ret %Exception* %5, !dbg !1493
}
; Function Attrs: uwtable
define internal void @"*Exception#initialize<String>:Nil"(%Exception* %self, %String* %message) #0 !dbg !39 {
alloca:
%cause = alloca %Nil, !dbg !1494
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 1, !dbg !1495
store %String* %message, %String** %0, !dbg !1495
%1 = load %Nil, %Nil* %cause, !dbg !1495
%2 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 2, !dbg !1496
store i32* null, i32** %2, !dbg !1496
ret void, !dbg !1496
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<Exception>:NoReturn"(%Exception* %exception) #1 !dbg !40 {
alloca:
%__temp_32 = alloca %"(CallStack | Nil)", !dbg !1497
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1497
%0 = alloca %CallStack, !dbg !1497
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %Exception, %Exception* %exception, i32 0, i32 3, !dbg !1497
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1497
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_32, !dbg !1497
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1497
%4 = load i32, i32* %3, !dbg !1497
%5 = icmp eq i32 %4, 0, !dbg !1497
%6 = xor i1 %5, true, !dbg !1497
%7 = and i1 true, %6, !dbg !1497
br i1 %7, label %then, label %else, !dbg !1497
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_32, i32 0, i32 1, !dbg !1497
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1497
br label %exit, !dbg !1497
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1497
store %CallStack %10, %CallStack* %0, !dbg !1497
%11 = load %CallStack, %CallStack* %0, !dbg !1497
%12 = call %CallStack @"*Exception#callstack=<CallStack>:CallStack"(%Exception* %exception, %CallStack %11), !dbg !1497
br label %exit, !dbg !1497
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !1497
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1497
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1497
store i64 %15, i64* %16, !dbg !1497
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1497
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1497
store i64 %18, i64* %19, !dbg !1497
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
%21 = ptrtoint %Exception* %exception to i64, !dbg !1497
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1497
store i64 %21, i64* %22, !dbg !1497
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1497
store i32 61, i32* %24, !dbg !1497
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1497
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1497
unreachable, !dbg !1497
}
; Function Attrs: uwtable
define internal %CallStack @"*Exception#callstack=<CallStack>:CallStack"(%Exception* %self, %CallStack %callstack) #0 !dbg !41 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1498
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1498
%0 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 3, !dbg !1498
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1498
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1498
store i32 344, i32* %2, !dbg !1498
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1498
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1498
store %CallStack %1, %CallStack* %4, !dbg !1498
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1498
ret %CallStack %5, !dbg !1498
}
; Function Attrs: uwtable
define internal %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 %self) #0 !dbg !42 {
alloca:
%size = alloca i32, !dbg !1499
br label %entry
entry: ; preds = %alloca
store i32 1, i32* %size, !dbg !1500
%0 = load i32, i32* %size, !dbg !1501
%1 = icmp slt i32 %0, 0, !dbg !1501
br i1 %1, label %then, label %else, !dbg !1501
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !1502
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !1503
unreachable, !dbg !1503
else: ; preds = %entry
%3 = load i32, i32* %size, !dbg !1503
%4 = sext i32 %3 to i64, !dbg !1503
%5 = mul i64 ptrtoint (%"struct.LibUnwind::Exception"* getelementptr (%"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* null, i32 1) to i64), %4, !dbg !1504
%6 = call i8* @__crystal_malloc_atomic64(i64 %5), !dbg !1504
%7 = trunc i64 %5 to i32, !dbg !1504
call void @llvm.memset.p0i8.i32(i8* %6, i8 0, i32 %7, i32 4, i1 false), !dbg !1504
%8 = bitcast i8* %6 to %"struct.LibUnwind::Exception"*, !dbg !1504
ret %"struct.LibUnwind::Exception"* %8, !dbg !1503
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Number::zero:UInt64"() #0 !dbg !43 {
entry:
%0 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 0), !dbg !1505
ret i64 %0, !dbg !1505
}
; Function Attrs: uwtable
define internal i64 @"*UInt64::new<Int32>:UInt64"(i32 %value) #0 !dbg !45 {
entry:
%0 = sext i32 %value to i64, !dbg !1506
ret i64 %0, !dbg !1506
}
declare i32 @_Unwind_Backtrace(i32 (i8*, i8*)*, i8*)
; Function Attrs: uwtable
define internal %CallStack @"*ArgumentError@Exception#callstack=<CallStack>:CallStack"(%ArgumentError* %self, %CallStack %callstack) #0 !dbg !47 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1507
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1507
%0 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 3, !dbg !1507
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1507
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1507
store i32 344, i32* %2, !dbg !1507
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1507
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1507
store %CallStack %1, %CallStack* %4, !dbg !1507
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1507
ret %CallStack %5, !dbg !1507
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i32 %self, i8* %__arg0, i32 %__arg1, i1 %read_only) #0 !dbg !48 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !1508
%0 = alloca %"Slice(UInt8)", !dbg !1508
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !1508
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Slice(UInt8)"* getelementptr (%"Slice(UInt8)", %"Slice(UInt8)"* null, i32 1) to i32), i32 4, i1 false), !dbg !1508
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1508
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !1508
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize:read_only<Pointer(UInt8), Int32, Bool>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1, i1 %read_only), !dbg !1508
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !1508
ret %"Slice(UInt8)" %4, !dbg !1508
}
; Function Attrs: uwtable
define internal i32 @"*Slice(UInt8)@Slice(T)#initialize:read_only<Pointer(UInt8), Int32, Bool>:Int32"(%"Slice(UInt8)"* %self, i8* %pointer, i32 %size, i1 %read_only) #0 !dbg !49 {
entry:
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !1509
store i8* %pointer, i8** %0, !dbg !1509
%1 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !1510
store i1 %read_only, i1* %1, !dbg !1510
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !1511
store i32 %size, i32* %2, !dbg !1511
ret i32 %size, !dbg !1511
}
; Function Attrs: uwtable
define internal i8 @"*UInt8::new<Int32>:UInt8"(i32 %value) #0 !dbg !50 {
entry:
%0 = trunc i32 %value to i8, !dbg !1512
ret i8 %0, !dbg !1512
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %self, i32 %offset, i8 %value) #0 !dbg !51 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %offset), !dbg !1513
store i8 %value, i8* %0, !dbg !1513
ret i8 %value, !dbg !1513
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %other) #0 !dbg !52 {
entry:
%0 = sext i32 %other to i64, !dbg !1514
%1 = getelementptr inbounds i8, i8* %self, i64 %0, !dbg !1514
ret i8* %1, !dbg !1514
}
define internal void @"~CallStack::CURRENT_DIR:init"() {
alloca:
%dir = alloca %String*, !dbg !1382
br label %entry
entry: ; preds = %alloca
%0 = call %String** @"~Process::INITIAL_PWD:read"()
%1 = load %String*, %String** %0
store %String* %1, %String** %dir
%2 = load %String*, %String** %dir
%3 = call i1 @"*String#ends_with?<Char>:Bool"(%String* %2, i32 47)
br i1 %3, label %then, label %else
then: ; preds = %entry
br label %exit
else: ; preds = %entry
%4 = load %String*, %String** %dir
%5 = call %String* @"*String#+<Char>:String"(%String* %4, i32 47)
store %String* %5, %String** %dir
br label %exit
exit: ; preds = %else, %then
%6 = load %String*, %String** %dir
store %String* %6, %String** @"CallStack::CURRENT_DIR"
ret void
}
define internal %String** @"~Process::INITIAL_PWD:read"() {
entry:
%0 = load i1, i1* @"Process::INITIAL_PWD:init", !dbg !1382
br i1 %0, label %initialized, label %not_initialized, !dbg !1382
initialized: ; preds = %not_initialized, %entry
ret %String** @"Process::INITIAL_PWD"
not_initialized: ; preds = %entry
store i1 true, i1* @"Process::INITIAL_PWD:init", !dbg !1382
call void @"~Process::INITIAL_PWD:init"()
br label %initialized
}
define internal void @"~Process::INITIAL_PWD:init"() {
entry:
%0 = call %String* @"*Dir::current:String"()
store %String* %0, %String** @"Process::INITIAL_PWD"
ret void
}
; Function Attrs: uwtable
define internal %String* @"*Dir::current:String"() #0 !dbg !53 {
entry:
%0 = call %String* @"*Crystal::System::Dir::current:String"(), !dbg !1515
ret %String* %0, !dbg !1515
}
; Function Attrs: uwtable
define internal %String* @"*Crystal::System::Dir::current:String"() #0 !dbg !55 {
alloca:
%dir = alloca i8*, !dbg !1516
%dir_str = alloca %String*, !dbg !1516
br label %entry
entry: ; preds = %alloca
%0 = call i8* @getcwd(i8* null, i64 0), !dbg !1517
store i8* %0, i8** %dir, !dbg !1518
%1 = icmp ne i8* %0, null, !dbg !1518
br i1 %1, label %then, label %else, !dbg !1518
then: ; preds = %entry
br label %exit, !dbg !1518
else: ; preds = %entry
%2 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'getcwd'" to %String*)), !dbg !1519
call void @"*raise<Errno>:NoReturn"(%Errno* %2), !dbg !1520
unreachable, !dbg !1520
exit: ; preds = %then
%3 = load i8*, i8** %dir, !dbg !1520
%4 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %3), !dbg !1521
store %String* %4, %String** %dir_str, !dbg !1522
%5 = load i8*, i8** %dir, !dbg !1522
call void @free(i8* %5), !dbg !1523
%6 = load %String*, %String** %dir_str, !dbg !1523
ret %String* %6, !dbg !1523
}
declare i8* @getcwd(i8*, i64)
; Function Attrs: uwtable
define internal %Errno* @"*Errno::new<String>:Errno"(%String* %__arg0) #0 !dbg !57 {
alloca:
%_ = alloca %Errno*, !dbg !1524
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Errno* getelementptr (%Errno, %Errno* null, i32 1) to i64)), !dbg !1524
%1 = bitcast i8* %0 to %Errno*, !dbg !1524
%2 = bitcast %Errno* %1 to i8*, !dbg !1524
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%Errno* getelementptr (%Errno, %Errno* null, i32 1) to i32), i32 4, i1 false), !dbg !1524
%3 = getelementptr inbounds %Errno, %Errno* %1, i32 0, i32 0, !dbg !1524
store i32 53, i32* %3, !dbg !1524
store %Errno* %1, %Errno** %_, !dbg !1524
%4 = load %Errno*, %Errno** %_, !dbg !1524
call void @"*Errno#initialize<String>:Nil"(%Errno* %4, %String* %__arg0), !dbg !1524
%5 = load %Errno*, %Errno** %_, !dbg !1524
ret %Errno* %5, !dbg !1524
}
; Function Attrs: uwtable
define internal void @"*Errno#initialize<String>:Nil"(%Errno* %self, %String* %message) #0 !dbg !59 {
alloca:
%errno = alloca i32, !dbg !1525
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*Errno::value:Int32"(), !dbg !1526
store i32 %0, i32* %errno, !dbg !1527
%1 = load i32, i32* %errno, !dbg !1527
call void @"*Errno#initialize<String, Int32>:Nil"(%Errno* %self, %String* %message, i32 %1), !dbg !1525
ret void, !dbg !1525
}
; Function Attrs: uwtable
define internal i32 @"*Errno::value:Int32"() #0 !dbg !60 {
entry:
%0 = load i32, i32* @errno, !dbg !1528
ret i32 %0, !dbg !1528
}
; Function Attrs: uwtable
define internal void @"*Errno#initialize<String, Int32>:Nil"(%Errno* %self, %String* %message, i32 %errno) #0 !dbg !61 {
entry:
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 4, !dbg !1529
store i32 %errno, i32* %0, !dbg !1529
%1 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1530
%2 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1, %String* %message), !dbg !1530
%3 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %2, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*)), !dbg !1530
%4 = call i8* @strerror(i32 %errno), !dbg !1531
%5 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %4), !dbg !1532
%6 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %3, %String* %5), !dbg !1530
%7 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %6), !dbg !1530
call void @"*Errno@Exception#initialize<String>:Nil"(%Errno* %self, %String* %7), !dbg !1533
ret void, !dbg !1533
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder::new:String::Builder"() #0 !dbg !62 {
alloca:
%_ = alloca %"String::Builder"*, !dbg !1534
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"String::Builder"* getelementptr (%"String::Builder", %"String::Builder"* null, i32 1) to i64)), !dbg !1534
%1 = bitcast i8* %0 to %"String::Builder"*, !dbg !1534
%2 = bitcast %"String::Builder"* %1 to i8*, !dbg !1534
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"String::Builder"* getelementptr (%"String::Builder", %"String::Builder"* null, i32 1) to i32), i32 4, i1 false), !dbg !1534
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %1, i32 0, i32 0, !dbg !1534
store i32 85, i32* %3, !dbg !1534
store %"String::Builder"* %1, %"String::Builder"** %_, !dbg !1534
%4 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !1534
%5 = call i1 @"*String::Builder#initialize:Bool"(%"String::Builder"* %4), !dbg !1534
%6 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !1534
ret %"String::Builder"* %6, !dbg !1534
}
; Function Attrs: uwtable
define internal i1 @"*String::Builder#initialize:Bool"(%"String::Builder"* %self) #0 !dbg !64 {
alloca:
%capacity = alloca i32, !dbg !1535
br label %entry
entry: ; preds = %alloca
store i32 64, i32* %capacity, !dbg !1536
%0 = load i32, i32* %capacity, !dbg !1536
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %0), !dbg !1537
%1 = load i32, i32* %capacity, !dbg !1537
%2 = add i32 %1, i64 13, !dbg !1537
store i32 %2, i32* %capacity, !dbg !1538
%3 = load i32, i32* %capacity, !dbg !1538
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %3), !dbg !1539
%4 = load i32, i32* %capacity, !dbg !1539
%5 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %4), !dbg !1540
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1541
store i8* %5, i8** %6, !dbg !1541
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1542
store i32 0, i32* %7, !dbg !1542
%8 = load i32, i32* %capacity, !dbg !1542
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1543
store i32 %8, i32* %9, !dbg !1543
%10 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !1544
store i1 false, i1* %10, !dbg !1544
ret i1 false, !dbg !1544
}
; Function Attrs: uwtable
define internal void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %capacity) #0 !dbg !65 {
entry:
%0 = icmp slt i32 %capacity, 0, !dbg !1545
br i1 %0, label %then, label %else, !dbg !1545
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*)), !dbg !1546
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !1547
unreachable, !dbg !1547
else: ; preds = %entry
%2 = sext i32 %capacity to i64, !dbg !1548
%3 = icmp ugt i64 %2, 4294967282, !dbg !1548
br i1 %3, label %then1, label %else2, !dbg !1548
then1: ; preds = %else
%4 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*)), !dbg !1549
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %4), !dbg !1550
unreachable, !dbg !1550
else2: ; preds = %else
ret void, !dbg !1550
}
; Function Attrs: uwtable
define internal i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %size) #0 !dbg !67 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !1551
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !1552
ret i8* %1, !dbg !1552
}
; Function Attrs: uwtable
define internal i64 @"*UInt64::new<UInt32>:UInt64"(i32 %value) #0 !dbg !69 {
entry:
%0 = zext i32 %value to i64, !dbg !1553
ret i64 %0, !dbg !1553
}
; Function Attrs: uwtable
define internal i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %size) #0 !dbg !70 {
entry:
%0 = call i8* @GC_malloc_atomic(i64 %size), !dbg !1554
ret i8* %0, !dbg !1554
}
declare i8* @GC_malloc_atomic(i64)
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %self, %String* %obj) #0 !dbg !72 {
entry:
call void @"*String#to_s<String::Builder>:Nil"(%String* %obj, %"String::Builder"* %self), !dbg !1555
ret %"String::Builder"* %self, !dbg !1555
}
; Function Attrs: uwtable
define internal void @"*String#to_s<String::Builder>:Nil"(%String* %self, %"String::Builder"* %io) #0 !dbg !74 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !1556
br label %entry
entry: ; preds = %alloca
%1 = call %"Slice(UInt8)" @"*String#to_slice:Slice(UInt8)"(%String* %self), !dbg !1556
store %"Slice(UInt8)" %1, %"Slice(UInt8)"* %0, !dbg !1556
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1556
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %2), !dbg !1557
ret void, !dbg !1557
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*String#to_slice:Slice(UInt8)"(%String* %self) #0 !dbg !75 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !1558
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1559
%2 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1559
%3 = load i32, i32* %2, !dbg !1559
%4 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %1, i32 %3, i1 true), !dbg !1558
store %"Slice(UInt8)" %4, %"Slice(UInt8)"* %0, !dbg !1558
%5 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1558
ret %"Slice(UInt8)" %5, !dbg !1558
}
; Function Attrs: uwtable
define internal i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self) #0 !dbg !76 {
entry:
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 3, !dbg !1560
ret i8* %0, !dbg !1560
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %__arg0, i32 %__arg1, i1 %read_only) #0 !dbg !77 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !1561
%0 = alloca %"Slice(UInt8)", !dbg !1561
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !1561
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Slice(UInt8)"* getelementptr (%"Slice(UInt8)", %"Slice(UInt8)"* null, i32 1) to i32), i32 4, i1 false), !dbg !1561
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1561
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !1561
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize:read_only<Pointer(UInt8), Int32, Bool>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1, i1 %read_only), !dbg !1561
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !1561
ret %"Slice(UInt8)" %4, !dbg !1561
}
; Function Attrs: uwtable
define internal void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %slice) #0 !dbg !78 {
alloca:
%encoder = alloca %"IO::Encoder"*, !dbg !1562
%slice1 = alloca %"Slice(UInt8)", !dbg !1562
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !1562
%0 = call %"IO::Encoder"* @"*String::Builder@IO#encoder:(IO::Encoder | Nil)"(%"String::Builder"* %self), !dbg !1563
store %"IO::Encoder"* %0, %"IO::Encoder"** %encoder, !dbg !1564
%1 = icmp ne %"IO::Encoder"* %0, null, !dbg !1564
br i1 %1, label %then, label %else, !dbg !1564
then: ; preds = %entry
%2 = load %"IO::Encoder"*, %"IO::Encoder"** %encoder, !dbg !1564
%3 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !1564
call void @"*IO::Encoder#write<String::Builder, Slice(UInt8)>:Nil"(%"IO::Encoder"* %2, %"String::Builder"* %self, %"Slice(UInt8)" %3), !dbg !1565
br label %exit, !dbg !1565
else: ; preds = %entry
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !1565
call void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %4), !dbg !1566
br label %exit, !dbg !1566
exit: ; preds = %else, %then
ret void, !dbg !1566
}
; Function Attrs: uwtable
define internal %"IO::Encoder"* @"*String::Builder@IO#encoder:(IO::Encoder | Nil)"(%"String::Builder"* %self) #0 !dbg !79 {
alloca:
%encoding = alloca %"(IO::EncodingOptions | Nil)", !dbg !1567
%__temp_24 = alloca %"IO::Encoder"*, !dbg !1567
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 1, !dbg !1568
%1 = load %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, !dbg !1569
store %"(IO::EncodingOptions | Nil)" %1, %"(IO::EncodingOptions | Nil)"* %encoding, !dbg !1569
%2 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, i32 0, i32 0, !dbg !1569
%3 = load i32, i32* %2, !dbg !1569
%4 = icmp eq i32 %3, 0, !dbg !1569
%5 = xor i1 %4, true, !dbg !1569
%6 = and i1 true, %5, !dbg !1569
br i1 %6, label %then, label %else, !dbg !1569
then: ; preds = %entry
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 2, !dbg !1570
%8 = load %"IO::Encoder"*, %"IO::Encoder"** %7, !dbg !1570
store %"IO::Encoder"* %8, %"IO::Encoder"** %__temp_24, !dbg !1570
%9 = icmp ne %"IO::Encoder"* %8, null, !dbg !1570
br i1 %9, label %then1, label %else2, !dbg !1570
else: ; preds = %entry
br label %exit3, !dbg !1570
then1: ; preds = %then
%10 = load %"IO::Encoder"*, %"IO::Encoder"** %__temp_24, !dbg !1570
br label %exit, !dbg !1570
else2: ; preds = %then
%11 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %encoding, i32 0, i32 1, !dbg !1570
%12 = bitcast [3 x i64]* %11 to %"IO::EncodingOptions"*, !dbg !1570
%13 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %12, !dbg !1570
%14 = call %"IO::Encoder"* @"*IO::Encoder::new<IO::EncodingOptions>:IO::Encoder"(%"IO::EncodingOptions" %13), !dbg !1571
%15 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 2, !dbg !1570
store %"IO::Encoder"* %14, %"IO::Encoder"** %15, !dbg !1570
br label %exit, !dbg !1570
exit: ; preds = %else2, %then1
%16 = phi %"IO::Encoder"* [ %10, %then1 ], [ %14, %else2 ], !dbg !1570
br label %exit3, !dbg !1570
exit3: ; preds = %else, %exit
%17 = phi %"IO::Encoder"* [ %16, %exit ], [ null, %else ], !dbg !1570
ret %"IO::Encoder"* %17, !dbg !1570
}
; Function Attrs: uwtable
define internal %"IO::Encoder"* @"*IO::Encoder::new<IO::EncodingOptions>:IO::Encoder"(%"IO::EncodingOptions" %encoding_options) #0 !dbg !80 {
alloca:
%_ = alloca %"IO::Encoder"*, !dbg !1572
%encoding_options1 = alloca %"IO::EncodingOptions", !dbg !1572
br label %entry
entry: ; preds = %alloca
store %"IO::EncodingOptions" %encoding_options, %"IO::EncodingOptions"* %encoding_options1, !dbg !1572
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"IO::Encoder"* getelementptr (%"IO::Encoder", %"IO::Encoder"* null, i32 1) to i64)), !dbg !1572
%1 = bitcast i8* %0 to %"IO::Encoder"*, !dbg !1572
%2 = bitcast %"IO::Encoder"* %1 to i8*, !dbg !1572
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"IO::Encoder"* getelementptr (%"IO::Encoder", %"IO::Encoder"* null, i32 1) to i32), i32 4, i1 false), !dbg !1572
%3 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %1, i32 0, i32 0, !dbg !1572
store i32 88, i32* %3, !dbg !1572
store %"IO::Encoder"* %1, %"IO::Encoder"** %_, !dbg !1572
%4 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !1572
%5 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, !dbg !1572
%6 = call i1 @"*IO::Encoder#initialize<IO::EncodingOptions>:Bool"(%"IO::Encoder"* %4, %"IO::EncodingOptions" %5), !dbg !1572
%7 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !1572
call void @"*GC::add_finalizer<IO::Encoder>:Nil"(%"IO::Encoder"* %7), !dbg !1572
%8 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !1572
ret %"IO::Encoder"* %8, !dbg !1572
}
; Function Attrs: uwtable
define internal i1 @"*IO::Encoder#initialize<IO::EncodingOptions>:Bool"(%"IO::Encoder"* %self, %"IO::EncodingOptions" %encoding_options) #0 !dbg !82 {
alloca:
%encoding_options1 = alloca %"IO::EncodingOptions", !dbg !1573
%0 = alloca %Iconv, !dbg !1574
br label %entry
entry: ; preds = %alloca
store %"IO::EncodingOptions" %encoding_options, %"IO::EncodingOptions"* %encoding_options1, !dbg !1573
%1 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 1, !dbg !1575
%2 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, !dbg !1575
store %"IO::EncodingOptions" %2, %"IO::EncodingOptions"* %1, !dbg !1575
%3 = getelementptr inbounds %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, i32 0, i32 0, !dbg !1575
%4 = load %String*, %String** %3, !dbg !1575
%5 = getelementptr inbounds %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, i32 0, i32 1, !dbg !1575
%6 = load %"(Symbol | Nil)", %"(Symbol | Nil)"* %5, !dbg !1575
%7 = call %Iconv @"*Iconv::new<String, String, (Symbol | Nil)>:Iconv"(%String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*), %String* %4, %"(Symbol | Nil)" %6), !dbg !1574
store %Iconv %7, %Iconv* %0, !dbg !1574
%8 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !1576
%9 = load %Iconv, %Iconv* %0, !dbg !1576
store %Iconv %9, %Iconv* %8, !dbg !1576
%10 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !1577
store i1 false, i1* %10, !dbg !1577
ret i1 false, !dbg !1577
}
; Function Attrs: uwtable
define internal %Iconv @"*Iconv::new<String, String, (Symbol | Nil)>:Iconv"(%String* %from, %String* %to, %"(Symbol | Nil)" %invalid) #0 !dbg !83 {
alloca:
%_ = alloca %Iconv, !dbg !1578
%invalid1 = alloca %"(Symbol | Nil)", !dbg !1578
%0 = alloca %Iconv, !dbg !1578
br label %entry
entry: ; preds = %alloca
store %"(Symbol | Nil)" %invalid, %"(Symbol | Nil)"* %invalid1, !dbg !1578
%1 = bitcast %Iconv* %0 to i8*, !dbg !1578
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%Iconv* getelementptr (%Iconv, %Iconv* null, i32 1) to i32), i32 4, i1 false), !dbg !1578
%2 = load %Iconv, %Iconv* %0, !dbg !1578
store %Iconv %2, %Iconv* %_, !dbg !1578
%3 = load %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid1, !dbg !1578
call void @"*Iconv#initialize<String, String, (Symbol | Nil)>:Nil"(%Iconv* %_, %String* %from, %String* %to, %"(Symbol | Nil)" %3), !dbg !1578
%4 = load %Iconv, %Iconv* %_, !dbg !1578
ret %Iconv %4, !dbg !1578
}
; Function Attrs: uwtable
define internal void @"*Iconv#initialize<String, String, (Symbol | Nil)>:Nil"(%Iconv* %self, %String* %from, %String* %to, %"(Symbol | Nil)" %invalid) #0 !dbg !85 {
alloca:
%__temp_25 = alloca %String*, !dbg !1579
%__temp_26 = alloca %String*, !dbg !1579
%original_from = alloca %String*, !dbg !1579
%original_to = alloca %String*, !dbg !1579
%from1 = alloca %String*, !dbg !1579
%to2 = alloca %String*, !dbg !1579
%invalid3 = alloca %"(Symbol | Nil)", !dbg !1579
br label %entry
entry: ; preds = %alloca
store %String* %from, %String** %from1, !dbg !1579
store %String* %to, %String** %to2, !dbg !1579
store %"(Symbol | Nil)" %invalid, %"(Symbol | Nil)"* %invalid3, !dbg !1579
%0 = load %String*, %String** %from1, !dbg !1579
store %String* %0, %String** %__temp_25, !dbg !1580
%1 = load %String*, %String** %to2, !dbg !1580
store %String* %1, %String** %__temp_26, !dbg !1580
%2 = load %String*, %String** %__temp_25, !dbg !1580
store %String* %2, %String** %original_from, !dbg !1580
%3 = load %String*, %String** %__temp_26, !dbg !1580
store %String* %3, %String** %original_to, !dbg !1581
%4 = getelementptr inbounds %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid3, i32 0, i32 0, !dbg !1581
%5 = load i32, i32* %4, !dbg !1581
%6 = icmp eq i32 165, %5, !dbg !1581
br i1 %6, label %current_def, label %next_def, !dbg !1581
current_def: ; preds = %entry
%7 = getelementptr inbounds %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid3, i32 0, i32 1, !dbg !1581
%8 = bitcast [1 x i64]* %7 to i32*, !dbg !1581
%9 = load i32, i32* %8, !dbg !1581
%10 = icmp eq i32 %9, 0, !dbg !1581
br label %exit, !dbg !1581
next_def: ; preds = %entry
%11 = icmp eq i32 0, %5, !dbg !1581
br i1 %11, label %current_def4, label %next_def5, !dbg !1581
exit: ; preds = %current_def4, %current_def
%12 = phi i1 [ %10, %current_def ], [ false, %current_def4 ], !dbg !1581
%13 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !1582
store i1 %12, i1* %13, !dbg !1582
%14 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !1583
%15 = load i1, i1* %14, !dbg !1583
br i1 %15, label %then, label %else, !dbg !1583
current_def4: ; preds = %next_def
br label %exit, !dbg !1581
next_def5: ; preds = %next_def
unreachable, !dbg !1581
then: ; preds = %exit
%16 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1583
%17 = load %String*, %String** %from1, !dbg !1583
%18 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %16, %String* %17), !dbg !1583
%19 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %18, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'//IGNORE'" to %String*)), !dbg !1583
%20 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %19), !dbg !1583
store %String* %20, %String** %from1, !dbg !1583
%21 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1583
%22 = load %String*, %String** %to2, !dbg !1583
%23 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %21, %String* %22), !dbg !1583
%24 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %23, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'//IGNORE'" to %String*)), !dbg !1583
%25 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %24), !dbg !1583
store %String* %25, %String** %to2, !dbg !1583
br label %exit6, !dbg !1583
else: ; preds = %exit
br label %exit6, !dbg !1583
exit6: ; preds = %else, %then
%26 = load %String*, %String** %to2, !dbg !1583
%27 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %26), !dbg !1584
%28 = load %String*, %String** %from1, !dbg !1584
%29 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %28), !dbg !1585
%30 = call i8* @iconv_open(i8* %27, i8* %29), !dbg !1586
%31 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !1587
store i8* %30, i8** %31, !dbg !1587
%32 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !1588
%33 = load i8*, i8** %32, !dbg !1588
%34 = ptrtoint i8* %33 to i64, !dbg !1588
%35 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 -1), !dbg !1589
%36 = icmp eq i64 %34, %35, !dbg !1589
br i1 %36, label %then7, label %else8, !dbg !1589
then7: ; preds = %exit6
%37 = call i32 @"*Errno::value:Int32"(), !dbg !1590
%38 = icmp eq i32 %37, 22, !dbg !1590
br i1 %38, label %then9, label %else10, !dbg !1590
else8: ; preds = %exit6
ret void, !dbg !1591
then9: ; preds = %then7
%39 = load %String*, %String** %original_from, !dbg !1592
%40 = call i1 @"*String#==<String>:Bool"(%String* %39, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*)), !dbg !1593
br i1 %40, label %then11, label %else12, !dbg !1593
else10: ; preds = %then7
%41 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'iconv_open'" to %String*)), !dbg !1594
call void @"*raise<Errno>:NoReturn"(%Errno* %41), !dbg !1591
unreachable, !dbg !1591
then11: ; preds = %then9
%42 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1595
%43 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %42, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !1595
%44 = load %String*, %String** %original_to, !dbg !1595
%45 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %43, %String* %44), !dbg !1595
%46 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %45), !dbg !1595
%47 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %46), !dbg !1596
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %47), !dbg !1597
unreachable, !dbg !1597
else12: ; preds = %then9
%48 = load %String*, %String** %original_to, !dbg !1598
%49 = call i1 @"*String#==<String>:Bool"(%String* %48, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*)), !dbg !1599
br i1 %49, label %then13, label %else14, !dbg !1599
then13: ; preds = %else12
%50 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1600
%51 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %50, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !1600
%52 = load %String*, %String** %original_from, !dbg !1600
%53 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %51, %String* %52), !dbg !1600
%54 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %53), !dbg !1600
%55 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %54), !dbg !1601
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %55), !dbg !1602
unreachable, !dbg !1602
else14: ; preds = %else12
%56 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1603
%57 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %56, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !1603
%58 = load %String*, %String** %original_from, !dbg !1603
%59 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %57, %String* %58), !dbg !1603
%60 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %59, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"' -> '" to %String*)), !dbg !1603
%61 = load %String*, %String** %original_to, !dbg !1603
%62 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %60, %String* %61), !dbg !1603
%63 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %62), !dbg !1603
%64 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %63), !dbg !1604
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %64), !dbg !1605
unreachable, !dbg !1605
}
; Function Attrs: uwtable
define internal %String* @"*String::Builder#to_s:String"(%"String::Builder"* %self) #0 !dbg !86 {
alloca:
%real_bytesize = alloca i32, !dbg !1606
%header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !1606
%0 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !1607
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !1608
%2 = load i1, i1* %1, !dbg !1608
br i1 %2, label %then, label %else, !dbg !1608
then: ; preds = %entry
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [47 x i8] }* @"'Can only invoke 'to...'" to %String*)), !dbg !1608
unreachable, !dbg !1608
else: ; preds = %entry
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !1609
store i1 true, i1* %3, !dbg !1609
call void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %self, i8 0), !dbg !1610
%4 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !1611
store i32 %4, i32* %real_bytesize, !dbg !1612
%5 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1613
%6 = load i32, i32* %5, !dbg !1613
%7 = load i32, i32* %real_bytesize, !dbg !1613
%8 = icmp sgt i32 %6, %7, !dbg !1613
br i1 %8, label %then1, label %else2, !dbg !1613
then1: ; preds = %else
%9 = load i32, i32* %real_bytesize, !dbg !1613
%10 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %9), !dbg !1614
br label %exit, !dbg !1614
else2: ; preds = %else
br label %exit, !dbg !1614
exit: ; preds = %else2, %then1
%11 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1614
%12 = load i8*, i8** %11, !dbg !1614
%13 = bitcast i8* %12 to %"Tuple(Int32, Int32, Int32)"*, !dbg !1614
store %"Tuple(Int32, Int32, Int32)"* %13, %"Tuple(Int32, Int32, Int32)"** %header, !dbg !1607
%14 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %header, !dbg !1607
%15 = call i32* @"~String::TYPE_ID:read"(), !dbg !1607
%16 = load i32, i32* %15, !dbg !1607
%17 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 0, !dbg !1607
store i32 %16, i32* %17, !dbg !1607
%18 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1607
%19 = load i32, i32* %18, !dbg !1607
%20 = sub i32 %19, 1, !dbg !1607
%21 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 1, !dbg !1607
store i32 %20, i32* %21, !dbg !1607
%22 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 2, !dbg !1607
store i32 0, i32* %22, !dbg !1607
%23 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, !dbg !1607
store %"Tuple(Int32, Int32, Int32)" %23, %"Tuple(Int32, Int32, Int32)"* %14, !dbg !1607
%24 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1607
%25 = load i8*, i8** %24, !dbg !1607
%26 = bitcast i8* %25 to %String*, !dbg !1607
ret %String* %26, !dbg !1607
}
; Function Attrs: uwtable
define internal void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %self, i8 %byte) #0 !dbg !87 {
alloca:
%new_bytesize = alloca i32, !dbg !1615
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !1616
%1 = add i32 %0, 1, !dbg !1616
store i32 %1, i32* %new_bytesize, !dbg !1617
%2 = load i32, i32* %new_bytesize, !dbg !1618
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1618
%4 = load i32, i32* %3, !dbg !1618
%5 = icmp sgt i32 %2, %4, !dbg !1618
br i1 %5, label %then, label %else, !dbg !1618
then: ; preds = %entry
%6 = load i32, i32* %new_bytesize, !dbg !1618
%7 = call i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %6), !dbg !1619
%8 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %7), !dbg !1620
br label %exit, !dbg !1620
else: ; preds = %entry
br label %exit, !dbg !1620
exit: ; preds = %else, %then
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1620
%10 = load i8*, i8** %9, !dbg !1620
%11 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !1621
%12 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %10, i32 %11, i8 %byte), !dbg !1622
%13 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1622
%14 = load i32, i32* %13, !dbg !1622
%15 = add i32 %14, 1, !dbg !1622
%16 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1623
store i32 %15, i32* %16, !dbg !1623
ret void, !dbg !1623
}
; Function Attrs: uwtable
define internal i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self) #0 !dbg !88 {
entry:
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1624
%1 = load i32, i32* %0, !dbg !1624
%2 = add i32 %1, i64 12, !dbg !1624
ret i32 %2, !dbg !1624
}
; Function Attrs: uwtable
define internal i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %v) #0 !dbg !89 {
alloca:
%v1 = alloca i32, !dbg !1625
br label %entry
entry: ; preds = %alloca
store i32 %v, i32* %v1, !dbg !1625
%0 = load i32, i32* %v1, !dbg !1625
%1 = sub i32 %0, 1, !dbg !1625
store i32 %1, i32* %v1, !dbg !1626
%2 = load i32, i32* %v1, !dbg !1626
%3 = load i32, i32* %v1, !dbg !1626
%4 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %3, i32 1), !dbg !1627
%5 = or i32 %2, %4, !dbg !1627
store i32 %5, i32* %v1, !dbg !1628
%6 = load i32, i32* %v1, !dbg !1628
%7 = load i32, i32* %v1, !dbg !1628
%8 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %7, i32 2), !dbg !1629
%9 = or i32 %6, %8, !dbg !1629
store i32 %9, i32* %v1, !dbg !1630
%10 = load i32, i32* %v1, !dbg !1630
%11 = load i32, i32* %v1, !dbg !1630
%12 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %11, i32 4), !dbg !1631
%13 = or i32 %10, %12, !dbg !1631
store i32 %13, i32* %v1, !dbg !1632
%14 = load i32, i32* %v1, !dbg !1632
%15 = load i32, i32* %v1, !dbg !1632
%16 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %15, i32 8), !dbg !1633
%17 = or i32 %14, %16, !dbg !1633
store i32 %17, i32* %v1, !dbg !1634
%18 = load i32, i32* %v1, !dbg !1634
%19 = load i32, i32* %v1, !dbg !1634
%20 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %19, i32 16), !dbg !1635
%21 = or i32 %18, %20, !dbg !1635
store i32 %21, i32* %v1, !dbg !1636
%22 = load i32, i32* %v1, !dbg !1636
%23 = add i32 %22, 1, !dbg !1636
store i32 %23, i32* %v1, !dbg !1637
ret i32 %23, !dbg !1637
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#>><Int32>:Int32"(i32 %self, i32 %count) #0 !dbg !91 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !1638
br i1 %0, label %then, label %else, !dbg !1638
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !1639
%2 = call i32 @"*Int32@Int#<<<Int32>:Int32"(i32 %self, i32 %1), !dbg !1640
br label %exit, !dbg !1640
else: ; preds = %entry
%3 = icmp slt i32 %count, i64 32, !dbg !1641
br i1 %3, label %then1, label %else2, !dbg !1641
exit: ; preds = %exit3, %then
%4 = phi i32 [ %2, %then ], [ %7, %exit3 ], !dbg !1642
ret i32 %4, !dbg !1642
then1: ; preds = %else
%5 = ashr i32 %self, %count, !dbg !1641
br label %exit3, !dbg !1641
else2: ; preds = %else
%6 = call i32 @"*Int32@Number::zero:Int32"(), !dbg !1642
br label %exit3, !dbg !1642
exit3: ; preds = %else2, %then1
%7 = phi i32 [ %5, %then1 ], [ %6, %else2 ], !dbg !1642
br label %exit, !dbg !1642
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#abs:Int32"(i32 %self) #0 !dbg !92 {
entry:
%0 = icmp sge i32 %self, 0, !dbg !1643
br i1 %0, label %then, label %else, !dbg !1643
then: ; preds = %entry
br label %exit, !dbg !1643
else: ; preds = %entry
%1 = call i32 @"*Int32#-:Int32"(i32 %self), !dbg !1644
br label %exit, !dbg !1644
exit: ; preds = %else, %then
%2 = phi i32 [ %self, %then ], [ %1, %else ], !dbg !1644
ret i32 %2, !dbg !1644
}
; Function Attrs: uwtable
define internal i32 @"*Int32#-:Int32"(i32 %self) #0 !dbg !93 {
entry:
%0 = sub i32 0, %self, !dbg !1645
ret i32 %0, !dbg !1645
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#<<<Int32>:Int32"(i32 %self, i32 %count) #0 !dbg !94 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !1646
br i1 %0, label %then, label %else, !dbg !1646
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !1647
%2 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %self, i32 %1), !dbg !1648
br label %exit, !dbg !1648
else: ; preds = %entry
%3 = icmp slt i32 %count, i64 32, !dbg !1649
br i1 %3, label %then1, label %else2, !dbg !1649
exit: ; preds = %exit3, %then
%4 = phi i32 [ %2, %then ], [ %7, %exit3 ], !dbg !1650
ret i32 %4, !dbg !1650
then1: ; preds = %else
%5 = shl i32 %self, %count, !dbg !1649
br label %exit3, !dbg !1649
else2: ; preds = %else
%6 = call i32 @"*Int32@Number::zero:Int32"(), !dbg !1650
br label %exit3, !dbg !1650
exit3: ; preds = %else2, %then1
%7 = phi i32 [ %5, %then1 ], [ %6, %else2 ], !dbg !1650
br label %exit, !dbg !1650
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Number::zero:Int32"() #0 !dbg !95 {
entry:
%0 = call i32 @"*Int32::new<Int32>:Int32"(i32 0), !dbg !1651
ret i32 %0, !dbg !1651
}
; Function Attrs: uwtable
define internal i32 @"*Int32::new<Int32>:Int32"(i32 %value) #0 !dbg !96 {
entry:
ret i32 %value, !dbg !1652
}
; Function Attrs: uwtable
define internal i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %capacity) #0 !dbg !97 {
entry:
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1653
store i32 %capacity, i32* %0, !dbg !1653
%1 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1653
%2 = load i8*, i8** %1, !dbg !1653
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1653
%4 = load i32, i32* %3, !dbg !1653
%5 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<Int32>:Pointer(UInt8)"(i8* %2, i32 %4), !dbg !1654
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1655
store i8* %5, i8** %6, !dbg !1655
ret i8* %5, !dbg !1655
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#realloc<Int32>:Pointer(UInt8)"(i8* %self, i32 %size) #0 !dbg !98 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !1656
br i1 %0, label %then, label %else, !dbg !1656
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !1657
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !1658
unreachable, !dbg !1658
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !1658
%3 = mul i64 %2, ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), !dbg !1658
%4 = call i8* @__crystal_realloc64(i8* %self, i64 %3), !dbg !1658
ret i8* %4, !dbg !1658
}
define internal i32* @"~String::TYPE_ID:read"() {
entry:
%0 = load i1, i1* @"String::TYPE_ID:init", !dbg !1607
br i1 %0, label %initialized, label %not_initialized, !dbg !1607
initialized: ; preds = %not_initialized, %entry
ret i32* @"String::TYPE_ID", !dbg !1607
not_initialized: ; preds = %entry
store i1 true, i1* @"String::TYPE_ID:init", !dbg !1607
call void @"~String::TYPE_ID:init"(), !dbg !1607
br label %initialized, !dbg !1607
}
define internal void @"~String::TYPE_ID:init"() {
entry:
ret void, !dbg !1607
}
declare i8* @iconv_open(i8*, i8*)
; Function Attrs: uwtable
define internal i1 @"*String#==<String>:Bool"(%String* %self, %String* %other) #0 !dbg !99 {
entry:
%0 = call i1 @"*String@Reference#same?<String>:Bool"(%String* %self, %String* %other), !dbg !1659
br i1 %0, label %then, label %else, !dbg !1659
then: ; preds = %entry
ret i1 true, !dbg !1659
else: ; preds = %entry
%1 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1660
%2 = load i32, i32* %1, !dbg !1660
%3 = getelementptr inbounds %String, %String* %other, i32 0, i32 1, !dbg !1660
%4 = load i32, i32* %3, !dbg !1660
%5 = icmp eq i32 %2, %4, !dbg !1660
br i1 %5, label %then1, label %else2, !dbg !1660
then1: ; preds = %else
br label %exit, !dbg !1660
else2: ; preds = %else
ret i1 false, !dbg !1660
exit: ; preds = %then1
%6 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1661
%7 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %other), !dbg !1662
%8 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1662
%9 = load i32, i32* %8, !dbg !1662
%10 = call i32 @"*Pointer(UInt8)@Pointer(T)#memcmp<Pointer(UInt8), Int32>:Int32"(i8* %6, i8* %7, i32 %9), !dbg !1661
%11 = icmp eq i32 %10, 0, !dbg !1661
ret i1 %11, !dbg !1661
}
; Function Attrs: uwtable
define internal i1 @"*String@Reference#same?<String>:Bool"(%String* %self, %String* %other) #0 !dbg !100 {
entry:
%0 = ptrtoint %String* %self to i64, !dbg !1663
%1 = ptrtoint %String* %other to i64, !dbg !1663
%2 = icmp eq i64 %0, %1, !dbg !1663
ret i1 %2, !dbg !1663
}
; Function Attrs: uwtable
define internal i32 @"*Pointer(UInt8)@Pointer(T)#memcmp<Pointer(UInt8), Int32>:Int32"(i8* %self, i8* %other, i32 %count) #0 !dbg !102 {
entry:
%0 = mul i32 %count, i64 1, !dbg !1664
%1 = sext i32 %0 to i64, !dbg !1664
%2 = call i32 @memcmp(i8* %self, i8* %other, i64 %1), !dbg !1665
ret i32 %2, !dbg !1665
}
declare i32 @memcmp(i8*, i8*, i64)
; Function Attrs: noreturn uwtable
define internal void @"*raise<Errno>:NoReturn"(%Errno* %exception) #1 !dbg !103 {
alloca:
%__temp_35 = alloca %"(CallStack | Nil)", !dbg !1666
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1666
%0 = alloca %CallStack, !dbg !1666
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %Errno, %Errno* %exception, i32 0, i32 3, !dbg !1666
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1666
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_35, !dbg !1666
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1666
%4 = load i32, i32* %3, !dbg !1666
%5 = icmp eq i32 %4, 0, !dbg !1666
%6 = xor i1 %5, true, !dbg !1666
%7 = and i1 true, %6, !dbg !1666
br i1 %7, label %then, label %else, !dbg !1666
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_35, i32 0, i32 1, !dbg !1666
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1666
br label %exit, !dbg !1666
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1666
store %CallStack %10, %CallStack* %0, !dbg !1666
%11 = load %CallStack, %CallStack* %0, !dbg !1666
%12 = call %CallStack @"*Errno@Exception#callstack=<CallStack>:CallStack"(%Errno* %exception, %CallStack %11), !dbg !1666
br label %exit, !dbg !1666
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !1666
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1666
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1666
store i64 %15, i64* %16, !dbg !1666
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1666
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1666
store i64 %18, i64* %19, !dbg !1666
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
%21 = ptrtoint %Errno* %exception to i64, !dbg !1666
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1666
store i64 %21, i64* %22, !dbg !1666
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1666
store i32 53, i32* %24, !dbg !1666
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1666
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1666
unreachable, !dbg !1666
}
; Function Attrs: uwtable
define internal %CallStack @"*Errno@Exception#callstack=<CallStack>:CallStack"(%Errno* %self, %CallStack %callstack) #0 !dbg !104 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1667
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1667
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 3, !dbg !1667
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1667
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1667
store i32 344, i32* %2, !dbg !1667
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1667
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1667
store %CallStack %1, %CallStack* %4, !dbg !1667
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1667
ret %CallStack %5, !dbg !1667
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer<IO::Encoder>:Nil"(%"IO::Encoder"* %object) #0 !dbg !105 {
entry:
call void @"*GC::add_finalizer_impl<IO::Encoder>:Nil"(%"IO::Encoder"* %object), !dbg !1668
ret void, !dbg !1668
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer_impl<IO::Encoder>:Nil"(%"IO::Encoder"* %object) #0 !dbg !106 {
alloca:
%0 = alloca %"->", !dbg !1669
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"IO::Encoder"* %object to i8*, !dbg !1669
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1669
store i8* bitcast (void (i8*, i8*)* @"~procProc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:121" to i8*), i8** %2, !dbg !1669
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1669
store i8* null, i8** %3, !dbg !1669
%4 = load %"->", %"->"* %0, !dbg !1669
%5 = call i8* @"~check_proc_is_not_closure"(%"->" %4), !dbg !1669
%6 = bitcast i8* %5 to %Nil (i8*, i8*)*, !dbg !1669
call void @GC_register_finalizer_ignore_self(i8* %1, %Nil (i8*, i8*)* %6, i8* null, %"->"* null, i8** null), !dbg !1670
ret void, !dbg !1670
}
; Function Attrs: uwtable
define internal void @"~procProc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:121"(i8* %obj, i8* %data) #0 !dbg !107 {
entry:
%0 = bitcast i8* %obj to %"IO::Encoder"*, !dbg !1671
call void @"*IO::Encoder#finalize:Nil"(%"IO::Encoder"* %0), !dbg !1672
ret void, !dbg !1672
}
; Function Attrs: uwtable
define internal void @"*IO::Encoder#finalize:Nil"(%"IO::Encoder"* %self) #0 !dbg !108 {
entry:
call void @"*IO::Encoder#close:Nil"(%"IO::Encoder"* %self), !dbg !1673
ret void, !dbg !1673
}
; Function Attrs: uwtable
define internal void @"*IO::Encoder#close:Nil"(%"IO::Encoder"* %self) #0 !dbg !109 {
entry:
%0 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !1674
%1 = load i1, i1* %0, !dbg !1674
br i1 %1, label %then, label %else, !dbg !1674
then: ; preds = %entry
ret void, !dbg !1674
else: ; preds = %entry
%2 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !1675
store i1 true, i1* %2, !dbg !1675
%3 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !1675
call void @"*Iconv#close:Nil"(%Iconv* %3), !dbg !1676
ret void, !dbg !1676
}
; Function Attrs: uwtable
define internal void @"*Iconv#close:Nil"(%Iconv* %self) #0 !dbg !110 {
entry:
%0 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !1677
%1 = load i8*, i8** %0, !dbg !1677
%2 = call i32 @iconv_close(i8* %1), !dbg !1678
%3 = icmp eq i32 %2, -1, !dbg !1678
br i1 %3, label %then, label %else, !dbg !1678
then: ; preds = %entry
%4 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'iconv_close'" to %String*)), !dbg !1679
call void @"*raise<Errno>:NoReturn"(%Errno* %4), !dbg !1680
unreachable, !dbg !1680
else: ; preds = %entry
ret void, !dbg !1680
}
declare i32 @iconv_close(i8*)
declare void @GC_register_finalizer_ignore_self(i8*, %Nil (i8*, i8*)*, i8*, %"->"*, i8**)
; Function Attrs: uwtable
define internal void @"*IO::Encoder#write<String::Builder, Slice(UInt8)>:Nil"(%"IO::Encoder"* %self, %"String::Builder"* %io, %"Slice(UInt8)" %slice) #0 !dbg !111 {
alloca:
%inbuf_ptr = alloca i8*, !dbg !1681
%inbytesleft = alloca i64, !dbg !1681
%outbuf = alloca [1024 x i8], !dbg !1681
%outbuf_ptr = alloca i8*, !dbg !1681
%outbytesleft = alloca i64, !dbg !1681
%err = alloca i64, !dbg !1681
%slice1 = alloca %"Slice(UInt8)", !dbg !1681
%0 = alloca %"Slice(UInt8)", !dbg !1682
%1 = alloca %"Slice(UInt8)", !dbg !1682
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !1681
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 2, !dbg !1681
%3 = load i8*, i8** %2, !dbg !1681
store i8* %3, i8** %inbuf_ptr, !dbg !1683
%4 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !1683
%5 = load i32, i32* %4, !dbg !1683
%6 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %5), !dbg !1684
store i64 %6, i64* %inbytesleft, !dbg !1685
br label %while, !dbg !1685
while: ; preds = %exit2, %entry
%7 = load i64, i64* %inbytesleft, !dbg !1686
%8 = icmp ugt i64 %7, 0, !dbg !1686
%9 = or i1 false, %8, !dbg !1686
br i1 %9, label %body, label %exit, !dbg !1686
body: ; preds = %while
%10 = call i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %outbuf), !dbg !1687
store i8* %10, i8** %outbuf_ptr, !dbg !1688
%11 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !1689
%12 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %11), !dbg !1690
store i64 %12, i64* %outbytesleft, !dbg !1691
%13 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !1691
%14 = call i64 @"*Iconv#convert<Pointer(Pointer(UInt8)), Pointer(UInt64), Pointer(Pointer(UInt8)), Pointer(UInt64)>:UInt64"(%Iconv* %13, i8** %inbuf_ptr, i64* %inbytesleft, i8** %outbuf_ptr, i64* %outbytesleft), !dbg !1692
store i64 %14, i64* %err, !dbg !1693
%15 = load i64, i64* %err, !dbg !1694
%16 = icmp eq i64 %15, -1, !dbg !1694
br i1 %16, label %then, label %else, !dbg !1694
exit: ; preds = %while
ret void, !dbg !1695
then: ; preds = %body
%17 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !1694
%18 = call %"(UInt64 | Nil)" @"*Iconv#handle_invalid<Pointer(Pointer(UInt8)), Pointer(UInt64)>:(UInt64 | Nil)"(%Iconv* %17, i8** %inbuf_ptr, i64* %inbytesleft), !dbg !1696
br label %exit2, !dbg !1696
else: ; preds = %body
br label %exit2, !dbg !1696
exit2: ; preds = %else, %then
%19 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_slice:Slice(UInt8)"([1024 x i8]* %outbuf), !dbg !1682
store %"Slice(UInt8)" %19, %"Slice(UInt8)"* %0, !dbg !1682
%20 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !1697
%21 = load i64, i64* %outbytesleft, !dbg !1697
%22 = sext i32 %20 to i64, !dbg !1697
%23 = sub i64 %22, %21, !dbg !1697
%24 = trunc i64 %23 to i32, !dbg !1697
%25 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %0, i32 0, i32 %24), !dbg !1682
store %"Slice(UInt8)" %25, %"Slice(UInt8)"* %1, !dbg !1682
%26 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !1682
call void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %26), !dbg !1695
br label %while, !dbg !1695
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %self) #0 !dbg !112 {
entry:
%0 = getelementptr inbounds [1024 x i8], [1024 x i8]* %self, i32 0, i32 0, !dbg !1698
ret i8* %0, !dbg !1698
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %self) #0 !dbg !114 {
entry:
ret i32 1024, !dbg !1699
}
; Function Attrs: uwtable
define internal i64 @"*Iconv#convert<Pointer(Pointer(UInt8)), Pointer(UInt64), Pointer(Pointer(UInt8)), Pointer(UInt64)>:UInt64"(%Iconv* %self, i8** %inbuf, i64* %inbytesleft, i8** %outbuf, i64* %outbytesleft) #0 !dbg !115 {
entry:
%0 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !1700
%1 = load i8*, i8** %0, !dbg !1700
%2 = call i64 @iconv(i8* %1, i8** %inbuf, i64* %inbytesleft, i8** %outbuf, i64* %outbytesleft), !dbg !1701
ret i64 %2, !dbg !1701
}
declare i64 @iconv(i8*, i8**, i64*, i8**, i64*)
; Function Attrs: uwtable
define internal %"(UInt64 | Nil)" @"*Iconv#handle_invalid<Pointer(Pointer(UInt8)), Pointer(UInt64)>:(UInt64 | Nil)"(%Iconv* %self, i8** %inbuf, i64* %inbytesleft) #0 !dbg !116 {
alloca:
%__temp_27 = alloca i32, !dbg !1702
%0 = alloca %"(UInt64 | Nil)", !dbg !1703
%1 = alloca %"(UInt64 | Nil)", !dbg !1703
%2 = alloca %"(UInt64 | Nil)", !dbg !1704
br label %entry
entry: ; preds = %alloca
%3 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !1705
%4 = load i1, i1* %3, !dbg !1705
br i1 %4, label %then, label %else, !dbg !1705
then: ; preds = %entry
%5 = load i64, i64* %inbytesleft, !dbg !1706
%6 = icmp ugt i64 %5, 0, !dbg !1706
%7 = or i1 false, %6, !dbg !1706
br i1 %7, label %then1, label %else2, !dbg !1706
else: ; preds = %entry
%8 = call i32 @"*Errno::value:Int32"(), !dbg !1707
store i32 %8, i32* %__temp_27, !dbg !1707
%9 = load i32, i32* %__temp_27, !dbg !1708
%10 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 22, i32 %9), !dbg !1708
br i1 %10, label %then4, label %else5, !dbg !1708
then1: ; preds = %then
%11 = load i8*, i8** %inbuf, !dbg !1706
%12 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %11, i32 1), !dbg !1703
store i8* %12, i8** %inbuf, !dbg !1703
%13 = load i64, i64* %inbytesleft, !dbg !1703
%14 = sub i64 %13, 1, !dbg !1703
store i64 %14, i64* %inbytesleft, !dbg !1703
%15 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %0, i32 0, i32 0, !dbg !1703
store i32 155, i32* %15, !dbg !1703
%16 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %0, i32 0, i32 1, !dbg !1703
%17 = bitcast [1 x i64]* %16 to i64*, !dbg !1703
store i64 %14, i64* %17, !dbg !1703
br label %exit, !dbg !1703
else2: ; preds = %then
%18 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1, i32 0, i32 0, !dbg !1703
store i32 0, i32* %18, !dbg !1703
%19 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1, i32 0, i32 1, !dbg !1703
store [1 x i64] zeroinitializer, [1 x i64]* %19, !dbg !1703
br label %exit, !dbg !1703
exit: ; preds = %else2, %then1
%20 = phi %"(UInt64 | Nil)"* [ %0, %then1 ], [ %1, %else2 ], !dbg !1703
br label %exit3, !dbg !1703
exit3: ; preds = %else7, %exit
%21 = phi %"(UInt64 | Nil)"* [ %20, %exit ], [ %2, %else7 ], !dbg !1704
%22 = load %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %21, !dbg !1704
ret %"(UInt64 | Nil)" %22, !dbg !1704
then4: ; preds = %else
%23 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [30 x i8] }* @"'Incomplete multibyt...'" to %String*)), !dbg !1709
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %23), !dbg !1710
unreachable, !dbg !1710
else5: ; preds = %else
%24 = load i32, i32* %__temp_27, !dbg !1711
%25 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 84, i32 %24), !dbg !1711
br i1 %25, label %then6, label %else7, !dbg !1711
then6: ; preds = %else5
%26 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [27 x i8] }* @"'Invalid multibyte s...'" to %String*)), !dbg !1712
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %26), !dbg !1704
unreachable, !dbg !1704
else7: ; preds = %else5
%27 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %2, i32 0, i32 0, !dbg !1704
store i32 0, i32* %27, !dbg !1704
%28 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %2, i32 0, i32 1, !dbg !1704
store [1 x i64] zeroinitializer, [1 x i64]* %28, !dbg !1704
br label %exit3, !dbg !1704
}
; Function Attrs: uwtable
define internal i1 @"*Int32@Object#===<Int32>:Bool"(i32 %self, i32 %other) #0 !dbg !117 {
entry:
%0 = icmp eq i32 %self, %other, !dbg !1713
ret i1 %0, !dbg !1713
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_slice:Slice(UInt8)"([1024 x i8]* %self) #0 !dbg !119 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !1714
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %self), !dbg !1715
%2 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %self), !dbg !1716
%3 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %1, i32 %2), !dbg !1714
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !1714
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1714
ret %"Slice(UInt8)" %4, !dbg !1714
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %__arg0, i32 %__arg1) #0 !dbg !120 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !1717
%0 = alloca %"Slice(UInt8)", !dbg !1717
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !1717
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Slice(UInt8)"* getelementptr (%"Slice(UInt8)", %"Slice(UInt8)"* null, i32 1) to i32), i32 4, i1 false), !dbg !1717
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1717
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !1717
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize<Pointer(UInt8), Int32>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1), !dbg !1717
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !1717
ret %"Slice(UInt8)" %4, !dbg !1717
}
; Function Attrs: uwtable
define internal i32 @"*Slice(UInt8)@Slice(T)#initialize<Pointer(UInt8), Int32>:Int32"(%"Slice(UInt8)"* %self, i8* %pointer, i32 %size) #0 !dbg !121 {
alloca:
%read_only = alloca i1, !dbg !1718
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %read_only, !dbg !1719
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !1720
store i8* %pointer, i8** %0, !dbg !1720
%1 = load i1, i1* %read_only, !dbg !1720
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !1719
store i1 %1, i1* %2, !dbg !1719
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !1721
store i32 %size, i32* %3, !dbg !1721
ret i32 %size, !dbg !1721
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %self, i32 %start, i32 %count) #0 !dbg !122 {
alloca:
%__temp_28 = alloca i1, !dbg !1722
%__temp_30 = alloca i1, !dbg !1722
%0 = alloca %"Slice(UInt8)", !dbg !1723
br label %entry
entry: ; preds = %alloca
%1 = icmp sle i32 0, %start, !dbg !1724
store i1 %1, i1* %__temp_28, !dbg !1724
br i1 %1, label %then1, label %else2, !dbg !1724
then: ; preds = %exit
br label %exit3, !dbg !1724
else: ; preds = %exit
%2 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1725
call void @"*raise<IndexError>:NoReturn"(%IndexError* %2), !dbg !1726
unreachable, !dbg !1726
then1: ; preds = %entry
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !1724
%4 = load i32, i32* %3, !dbg !1724
%5 = icmp sle i32 %start, %4, !dbg !1724
br label %exit, !dbg !1724
else2: ; preds = %entry
%6 = load i1, i1* %__temp_28, !dbg !1724
br label %exit, !dbg !1724
exit: ; preds = %else2, %then1
%7 = phi i1 [ %5, %then1 ], [ %6, %else2 ], !dbg !1724
br i1 %7, label %then, label %else, !dbg !1724
exit3: ; preds = %then
%8 = icmp sle i32 0, %count, !dbg !1727
store i1 %8, i1* %__temp_30, !dbg !1727
br i1 %8, label %then6, label %else7, !dbg !1727
then4: ; preds = %exit8
br label %exit9, !dbg !1727
else5: ; preds = %exit8
%9 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1728
call void @"*raise<IndexError>:NoReturn"(%IndexError* %9), !dbg !1729
unreachable, !dbg !1729
then6: ; preds = %exit3
%10 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !1727
%11 = load i32, i32* %10, !dbg !1727
%12 = sub i32 %11, %start, !dbg !1727
%13 = icmp sle i32 %count, %12, !dbg !1727
br label %exit8, !dbg !1727
else7: ; preds = %exit3
%14 = load i1, i1* %__temp_30, !dbg !1727
br label %exit8, !dbg !1727
exit8: ; preds = %else7, %then6
%15 = phi i1 [ %13, %then6 ], [ %14, %else7 ], !dbg !1727
br i1 %15, label %then4, label %else5, !dbg !1727
exit9: ; preds = %then4
%16 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !1729
%17 = load i8*, i8** %16, !dbg !1729
%18 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %17, i32 %start), !dbg !1730
%19 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !1730
%20 = load i1, i1* %19, !dbg !1730
%21 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %18, i32 %count, i1 %20), !dbg !1723
store %"Slice(UInt8)" %21, %"Slice(UInt8)"* %0, !dbg !1723
%22 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1723
ret %"Slice(UInt8)" %22, !dbg !1723
}
; Function Attrs: uwtable
define internal %IndexError* @"*IndexError::new:IndexError"() #0 !dbg !123 {
alloca:
%_ = alloca %IndexError*, !dbg !1731
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%IndexError* getelementptr (%IndexError, %IndexError* null, i32 1) to i64)), !dbg !1731
%1 = bitcast i8* %0 to %IndexError*, !dbg !1731
%2 = bitcast %IndexError* %1 to i8*, !dbg !1731
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%IndexError* getelementptr (%IndexError, %IndexError* null, i32 1) to i32), i32 4, i1 false), !dbg !1731
%3 = getelementptr inbounds %IndexError, %IndexError* %1, i32 0, i32 0, !dbg !1731
store i32 39, i32* %3, !dbg !1731
store %IndexError* %1, %IndexError** %_, !dbg !1731
%4 = load %IndexError*, %IndexError** %_, !dbg !1731
call void @"*IndexError#initialize:Nil"(%IndexError* %4), !dbg !1731
%5 = load %IndexError*, %IndexError** %_, !dbg !1731
ret %IndexError* %5, !dbg !1731
}
; Function Attrs: uwtable
define internal void @"*IndexError#initialize:Nil"(%IndexError* %self) #0 !dbg !124 {
alloca:
%message = alloca %String*, !dbg !1732
br label %entry
entry: ; preds = %alloca
store %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Index out of bounds...'" to %String*), %String** %message, !dbg !1733
%0 = load %String*, %String** %message, !dbg !1733
call void @"*IndexError#initialize<String>:Nil"(%IndexError* %self, %String* %0), !dbg !1732
ret void, !dbg !1732
}
; Function Attrs: uwtable
define internal void @"*IndexError#initialize<String>:Nil"(%IndexError* %self, %String* %message) #0 !dbg !125 {
entry:
call void @"*IndexError@Exception#initialize<String>:Nil"(%IndexError* %self, %String* %message), !dbg !1734
ret void, !dbg !1734
}
; Function Attrs: uwtable
define internal void @"*IndexError@Exception#initialize<String>:Nil"(%IndexError* %self, %String* %message) #0 !dbg !126 {
alloca:
%cause = alloca %Nil, !dbg !1735
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 1, !dbg !1736
store %String* %message, %String** %0, !dbg !1736
%1 = load %Nil, %Nil* %cause, !dbg !1736
%2 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 2, !dbg !1737
store i32* null, i32** %2, !dbg !1737
ret void, !dbg !1737
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<IndexError>:NoReturn"(%IndexError* %exception) #1 !dbg !127 {
alloca:
%__temp_29 = alloca %"(CallStack | Nil)", !dbg !1738
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1738
%0 = alloca %CallStack, !dbg !1738
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %IndexError, %IndexError* %exception, i32 0, i32 3, !dbg !1738
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1738
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_29, !dbg !1738
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1738
%4 = load i32, i32* %3, !dbg !1738
%5 = icmp eq i32 %4, 0, !dbg !1738
%6 = xor i1 %5, true, !dbg !1738
%7 = and i1 true, %6, !dbg !1738
br i1 %7, label %then, label %else, !dbg !1738
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_29, i32 0, i32 1, !dbg !1738
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1738
br label %exit, !dbg !1738
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1738
store %CallStack %10, %CallStack* %0, !dbg !1738
%11 = load %CallStack, %CallStack* %0, !dbg !1738
%12 = call %CallStack @"*IndexError@Exception#callstack=<CallStack>:CallStack"(%IndexError* %exception, %CallStack %11), !dbg !1738
br label %exit, !dbg !1738
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !1738
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1738
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1738
store i64 %15, i64* %16, !dbg !1738
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1738
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1738
store i64 %18, i64* %19, !dbg !1738
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
%21 = ptrtoint %IndexError* %exception to i64, !dbg !1738
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1738
store i64 %21, i64* %22, !dbg !1738
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1738
store i32 39, i32* %24, !dbg !1738
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1738
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1738
unreachable, !dbg !1738
}
; Function Attrs: uwtable
define internal %CallStack @"*IndexError@Exception#callstack=<CallStack>:CallStack"(%IndexError* %self, %CallStack %callstack) #0 !dbg !128 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1739
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1739
%0 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 3, !dbg !1739
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1739
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1739
store i32 344, i32* %2, !dbg !1739
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1739
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1739
store %CallStack %1, %CallStack* %4, !dbg !1739
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1739
ret %CallStack %5, !dbg !1739
}
; Function Attrs: uwtable
define internal void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %slice) #0 !dbg !129 {
alloca:
%count = alloca i32, !dbg !1740
%new_bytesize = alloca i32, !dbg !1740
%slice1 = alloca %"Slice(UInt8)", !dbg !1740
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !1740
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !1740
%1 = load i32, i32* %0, !dbg !1740
store i32 %1, i32* %count, !dbg !1741
%2 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !1742
%3 = load i32, i32* %count, !dbg !1742
%4 = add i32 %2, %3, !dbg !1742
store i32 %4, i32* %new_bytesize, !dbg !1743
%5 = load i32, i32* %new_bytesize, !dbg !1744
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1744
%7 = load i32, i32* %6, !dbg !1744
%8 = icmp sgt i32 %5, %7, !dbg !1744
br i1 %8, label %then, label %else, !dbg !1744
then: ; preds = %entry
%9 = load i32, i32* %new_bytesize, !dbg !1744
%10 = call i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %9), !dbg !1745
%11 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %10), !dbg !1746
br label %exit, !dbg !1746
else: ; preds = %entry
br label %exit, !dbg !1746
exit: ; preds = %else, %then
%12 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1746
%13 = load i8*, i8** %12, !dbg !1746
%14 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !1747
%15 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %13, i32 %14), !dbg !1748
%16 = load i32, i32* %count, !dbg !1748
%17 = call i8* @"*Slice(UInt8)@Slice(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %slice1, i8* %15, i32 %16), !dbg !1749
%18 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1749
%19 = load i32, i32* %18, !dbg !1749
%20 = load i32, i32* %count, !dbg !1749
%21 = add i32 %19, %20, !dbg !1749
%22 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1750
store i32 %21, i32* %22, !dbg !1750
ret void, !dbg !1750
}
; Function Attrs: uwtable
define internal i8* @"*Slice(UInt8)@Slice(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %self, i8* %target, i32 %count) #0 !dbg !130 {
entry:
%0 = call i8* @"*Slice(UInt8)@Slice(T)#pointer<Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %self, i32 %count), !dbg !1751
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %0, i8* %target, i32 %count), !dbg !1751
ret i8* %1, !dbg !1751
}
; Function Attrs: uwtable
define internal i8* @"*Slice(UInt8)@Slice(T)#pointer<Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %self, i32 %size) #0 !dbg !131 {
alloca:
%__temp_31 = alloca i1, !dbg !1752
br label %entry
entry: ; preds = %alloca
%0 = icmp sle i32 0, %size, !dbg !1753
store i1 %0, i1* %__temp_31, !dbg !1753
br i1 %0, label %then1, label %else2, !dbg !1753
then: ; preds = %exit
br label %exit3, !dbg !1753
else: ; preds = %exit
%1 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1754
call void @"*raise<IndexError>:NoReturn"(%IndexError* %1), !dbg !1755
unreachable, !dbg !1755
then1: ; preds = %entry
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !1753
%3 = load i32, i32* %2, !dbg !1753
%4 = icmp sle i32 %size, %3, !dbg !1753
br label %exit, !dbg !1753
else2: ; preds = %entry
%5 = load i1, i1* %__temp_31, !dbg !1753
br label %exit, !dbg !1753
exit: ; preds = %else2, %then1
%6 = phi i1 [ %4, %then1 ], [ %5, %else2 ], !dbg !1753
br i1 %6, label %then, label %else, !dbg !1753
exit3: ; preds = %then
%7 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !1755
%8 = load i8*, i8** %7, !dbg !1755
ret i8* %8, !dbg !1755
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %self, i8* %target, i32 %count) #0 !dbg !132 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %target, i8* %self, i32 %count), !dbg !1756
ret i8* %0, !dbg !1756
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %self, i8* %source, i32 %count) #0 !dbg !133 {
alloca:
%count1 = alloca i32, !dbg !1757
br label %entry
entry: ; preds = %alloca
store i32 %count, i32* %count1, !dbg !1757
%0 = load i32, i32* %count1, !dbg !1758
%1 = icmp slt i32 %0, 0, !dbg !1758
br i1 %1, label %then, label %else, !dbg !1758
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*)), !dbg !1759
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !1758
unreachable, !dbg !1758
else: ; preds = %entry
%3 = call i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8):Class>:Bool"(i32 690, i32 690), !dbg !1760
br i1 %3, label %then2, label %else3, !dbg !1760
then2: ; preds = %else
%4 = load i32, i32* %count1, !dbg !1760
%5 = call i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<Int32>:UInt64"(i8* %self, i32 %4), !dbg !1761
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %self, i8* %source, i64 %5, i32 0, i1 false), !dbg !1762
br label %exit, !dbg !1762
else3: ; preds = %else
br label %while, !dbg !1762
exit: ; preds = %exit4, %then2
ret i8* %self, !dbg !1763
while: ; preds = %body, %else3
%6 = load i32, i32* %count1, !dbg !1764
%7 = sub i32 %6, 1, !dbg !1764
store i32 %7, i32* %count1, !dbg !1765
%8 = icmp sge i32 %7, 0, !dbg !1765
br i1 %8, label %body, label %exit4, !dbg !1765
body: ; preds = %while
%9 = load i32, i32* %count1, !dbg !1765
%10 = load i32, i32* %count1, !dbg !1765
%11 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %source, i32 %10), !dbg !1766
%12 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %self, i32 %9, i8 %11), !dbg !1763
br label %while, !dbg !1763
exit4: ; preds = %while
br label %exit, !dbg !1763
}
; Function Attrs: uwtable
define internal i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8):Class>:Bool"(i32 %self, i32 %other) #0 !dbg !134 {
entry:
ret i1 true, !dbg !1767
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<Int32>:UInt64"(i8* %self, i32 %count) #0 !dbg !136 {
entry:
%0 = sext i32 %count to i64, !dbg !1768
%1 = mul i64 %0, 1, !dbg !1768
ret i64 %1, !dbg !1768
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %self, i32 %offset) #0 !dbg !137 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %offset), !dbg !1769
%1 = load i8, i8* %0, !dbg !1769
ret i8 %1, !dbg !1769
}
declare i8* @strerror(i32)
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8)>:String"(i8* %chars) #0 !dbg !138 {
entry:
%0 = call i64 @strlen(i8* %chars), !dbg !1770
%1 = call %String* @"*String::new<Pointer(UInt8), UInt64>:String"(i8* %chars, i64 %0), !dbg !1771
ret %String* %1, !dbg !1771
}
declare i64 @strlen(i8*)
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8), UInt64>:String"(i8* %chars, i64 %bytesize) #0 !dbg !139 {
alloca:
%size = alloca i32, !dbg !1772
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %size, !dbg !1773
%0 = load i32, i32* %size, !dbg !1773
%1 = call %String* @"*String::new<Pointer(UInt8), UInt64, Int32>:String"(i8* %chars, i64 %bytesize, i32 %0), !dbg !1772
ret %String* %1, !dbg !1772
}
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8), UInt64, Int32>:String"(i8* %chars, i64 %bytesize, i32 %size) #0 !dbg !140 {
alloca:
%buffer = alloca i8*, !dbg !1774
%capacity = alloca i64, !dbg !1774
%str = alloca i8*, !dbg !1774
%buffer1 = alloca i8*, !dbg !1774
%__temp_33 = alloca %"Tuple(UInt64, Int32)", !dbg !1774
%bytesize2 = alloca i64, !dbg !1774
%size3 = alloca i32, !dbg !1774
%__temp_34 = alloca i1, !dbg !1774
%str_header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !1774
%0 = alloca %"Tuple(UInt64, Int32)", !dbg !1775
%1 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !1776
br label %entry
entry: ; preds = %alloca
%2 = icmp eq i64 %bytesize, 0, !dbg !1777
br i1 %2, label %then, label %else, !dbg !1777
then: ; preds = %entry
ret %String* bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), !dbg !1777
else: ; preds = %entry
store i64 %bytesize, i64* %capacity, !dbg !1774
%3 = load i64, i64* %capacity, !dbg !1774
call void @"*String::check_capacity_in_bounds<UInt64>:Nil"(i64 %3), !dbg !1778
%4 = load i64, i64* %capacity, !dbg !1778
%5 = trunc i64 %4 to i32, !dbg !1778
%6 = add i32 %5, i64 12, !dbg !1778
%7 = add i32 %6, 1, !dbg !1778
%8 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %7), !dbg !1779
store i8* %8, i8** %str, !dbg !1780
%9 = load i8*, i8** %str, !dbg !1780
%10 = bitcast i8* %9 to %String*, !dbg !1780
%11 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %10), !dbg !1781
store i8* %11, i8** %buffer1, !dbg !1782
%12 = load i8*, i8** %buffer1, !dbg !1782
store i8* %12, i8** %buffer, !dbg !1782
%13 = load i8*, i8** %buffer, !dbg !1782
%14 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %13, i8* %chars, i64 %bytesize), !dbg !1775
%15 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, i32 0, i32 0, !dbg !1775
store i64 %bytesize, i64* %15, !dbg !1775
%16 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, i32 0, i32 1, !dbg !1775
store i32 %size, i32* %16, !dbg !1775
%17 = load %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, !dbg !1783
store %"Tuple(UInt64, Int32)" %17, %"Tuple(UInt64, Int32)"* %__temp_33, !dbg !1783
%18 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %__temp_33, i32 0, i32 0, !dbg !1783
%19 = load i64, i64* %18, !dbg !1783
store i64 %19, i64* %bytesize2, !dbg !1784
%20 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %__temp_33, i32 0, i32 1, !dbg !1784
%21 = load i32, i32* %20, !dbg !1784
store i32 %21, i32* %size3, !dbg !1785
%22 = load i64, i64* %bytesize2, !dbg !1786
%23 = icmp ule i64 0, %22, !dbg !1786
%24 = or i1 true, %23, !dbg !1786
store i1 %24, i1* %__temp_34, !dbg !1786
br i1 %24, label %then6, label %else7, !dbg !1786
then4: ; preds = %exit
br label %exit8, !dbg !1786
else5: ; preds = %exit
%25 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Bytesize out of cap...'" to %String*)), !dbg !1787
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %25), !dbg !1788
unreachable, !dbg !1788
then6: ; preds = %else
%26 = load i64, i64* %bytesize2, !dbg !1786
%27 = load i64, i64* %capacity, !dbg !1786
%28 = icmp ule i64 %26, %27, !dbg !1786
br label %exit, !dbg !1786
else7: ; preds = %else
%29 = load i1, i1* %__temp_34, !dbg !1786
br label %exit, !dbg !1786
exit: ; preds = %else7, %then6
%30 = phi i1 [ %28, %then6 ], [ %29, %else7 ], !dbg !1786
br i1 %30, label %then4, label %else5, !dbg !1786
exit8: ; preds = %then4
%31 = load i8*, i8** %buffer1, !dbg !1788
%32 = load i64, i64* %bytesize2, !dbg !1788
%33 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %31, i64 %32, i8 0), !dbg !1789
%34 = load i64, i64* %bytesize2, !dbg !1790
%35 = load i64, i64* %capacity, !dbg !1790
%36 = icmp ult i64 %34, %35, !dbg !1790
br i1 %36, label %then9, label %else10, !dbg !1790
then9: ; preds = %exit8
%37 = load i8*, i8** %str, !dbg !1790
%38 = load i64, i64* %bytesize2, !dbg !1790
%39 = trunc i64 %38 to i32, !dbg !1790
%40 = add i32 %39, i64 12, !dbg !1790
%41 = add i32 %40, 1, !dbg !1790
%42 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %37, i32 %41), !dbg !1791
store i8* %42, i8** %str, !dbg !1792
br label %exit11, !dbg !1792
else10: ; preds = %exit8
br label %exit11, !dbg !1792
exit11: ; preds = %else10, %then9
%43 = load i8*, i8** %str, !dbg !1792
%44 = bitcast i8* %43 to %"Tuple(Int32, Int32, Int32)"*, !dbg !1792
store %"Tuple(Int32, Int32, Int32)"* %44, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !1776
%45 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !1776
%46 = load i32, i32* @"String::TYPE_ID", !dbg !1776
%47 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 0, !dbg !1776
store i32 %46, i32* %47, !dbg !1776
%48 = load i64, i64* %bytesize2, !dbg !1776
%49 = trunc i64 %48 to i32, !dbg !1776
%50 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 1, !dbg !1776
store i32 %49, i32* %50, !dbg !1776
%51 = load i32, i32* %size3, !dbg !1776
%52 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 2, !dbg !1776
store i32 %51, i32* %52, !dbg !1776
%53 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, !dbg !1776
store %"Tuple(Int32, Int32, Int32)" %53, %"Tuple(Int32, Int32, Int32)"* %45, !dbg !1776
%54 = load i8*, i8** %str, !dbg !1776
%55 = bitcast i8* %54 to %String*, !dbg !1776
ret %String* %55, !dbg !1776
}
; Function Attrs: uwtable
define internal void @"*String::check_capacity_in_bounds<UInt64>:Nil"(i64 %capacity) #0 !dbg !141 {
entry:
%0 = icmp ult i64 %capacity, 0, !dbg !1793
%1 = and i1 true, %0, !dbg !1793
br i1 %1, label %then, label %else, !dbg !1793
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*)), !dbg !1794
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !1795
unreachable, !dbg !1795
else: ; preds = %entry
%3 = icmp ugt i64 %capacity, 4294967282, !dbg !1796
br i1 %3, label %then1, label %else2, !dbg !1796
then1: ; preds = %else
%4 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*)), !dbg !1797
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %4), !dbg !1798
unreachable, !dbg !1798
else2: ; preds = %else
ret void, !dbg !1798
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %self, i8* %source, i64 %count) #0 !dbg !142 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %source, i8* %self, i64 %count), !dbg !1799
ret i8* %0, !dbg !1799
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %self, i8* %target, i64 %count) #0 !dbg !143 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %target, i8* %self, i64 %count), !dbg !1800
ret i8* %0, !dbg !1800
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %self, i8* %source, i64 %count) #0 !dbg !144 {
alloca:
%count1 = alloca i64, !dbg !1801
br label %entry
entry: ; preds = %alloca
store i64 %count, i64* %count1, !dbg !1801
%0 = load i64, i64* %count1, !dbg !1802
%1 = icmp ult i64 %0, 0, !dbg !1802
%2 = and i1 true, %1, !dbg !1802
br i1 %2, label %then, label %else, !dbg !1802
then: ; preds = %entry
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*)), !dbg !1803
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !1802
unreachable, !dbg !1802
else: ; preds = %entry
%4 = call i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8):Class>:Bool"(i32 690, i32 690), !dbg !1804
br i1 %4, label %then2, label %else3, !dbg !1804
then2: ; preds = %else
%5 = load i64, i64* %count1, !dbg !1804
%6 = call i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<UInt64>:UInt64"(i8* %self, i64 %5), !dbg !1805
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %self, i8* %source, i64 %6, i32 0, i1 false), !dbg !1806
br label %exit, !dbg !1806
else3: ; preds = %else
br label %while, !dbg !1806
exit: ; preds = %exit4, %then2
ret i8* %self, !dbg !1807
while: ; preds = %body, %else3
%7 = load i64, i64* %count1, !dbg !1808
%8 = sub i64 %7, 1, !dbg !1808
store i64 %8, i64* %count1, !dbg !1809
%9 = icmp uge i64 %8, 0, !dbg !1809
%10 = or i1 true, %9, !dbg !1809
br i1 %10, label %body, label %exit4, !dbg !1809
body: ; preds = %while
%11 = load i64, i64* %count1, !dbg !1809
%12 = load i64, i64* %count1, !dbg !1809
%13 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<UInt64>:UInt8"(i8* %source, i64 %12), !dbg !1810
%14 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %self, i64 %11, i8 %13), !dbg !1807
br label %while, !dbg !1807
exit4: ; preds = %while
br label %exit, !dbg !1807
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<UInt64>:UInt64"(i8* %self, i64 %count) #0 !dbg !145 {
entry:
%0 = mul i64 %count, 1, !dbg !1811
ret i64 %0, !dbg !1811
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]<UInt64>:UInt8"(i8* %self, i64 %offset) #0 !dbg !146 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %offset), !dbg !1812
%1 = load i8, i8* %0, !dbg !1812
ret i8 %1, !dbg !1812
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %other) #0 !dbg !147 {
entry:
%0 = getelementptr inbounds i8, i8* %self, i64 %other, !dbg !1813
ret i8* %0, !dbg !1813
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %self, i64 %offset, i8 %value) #0 !dbg !148 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %offset), !dbg !1814
store i8 %value, i8* %0, !dbg !1814
ret i8 %value, !dbg !1814
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %self, i32 %size) #0 !dbg !149 {
entry:
%0 = icmp ult i32 %size, 0, !dbg !1815
%1 = and i1 true, %0, !dbg !1815
br i1 %1, label %then, label %else, !dbg !1815
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !1816
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !1817
unreachable, !dbg !1817
else: ; preds = %entry
%3 = zext i32 %size to i64, !dbg !1817
%4 = mul i64 %3, ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), !dbg !1817
%5 = call i8* @__crystal_realloc64(i8* %self, i64 %4), !dbg !1817
ret i8* %5, !dbg !1817
}
; Function Attrs: uwtable
define internal void @"*Errno@Exception#initialize<String>:Nil"(%Errno* %self, %String* %message) #0 !dbg !150 {
alloca:
%cause = alloca %Nil, !dbg !1818
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 1, !dbg !1819
store %String* %message, %String** %0, !dbg !1819
%1 = load %Nil, %Nil* %cause, !dbg !1819
%2 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 2, !dbg !1820
store i32* null, i32** %2, !dbg !1820
ret void, !dbg !1820
}
declare void @free(i8*)
; Function Attrs: uwtable
define internal i1 @"*String#ends_with?<Char>:Bool"(%String* %self, i32 %char) #0 !dbg !151 {
alloca:
%__temp_58 = alloca i1, !dbg !1821
%__temp_62 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !1821
%bytes = alloca [4 x i8], !dbg !1821
%count = alloca i32, !dbg !1821
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !1822
%i = alloca i32, !dbg !1823
%i8 = alloca i32, !dbg !1823
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1824
%2 = load i32, i32* %1, !dbg !1824
%3 = icmp sgt i32 %2, 0, !dbg !1824
br i1 %3, label %then, label %else, !dbg !1824
then: ; preds = %entry
br label %exit, !dbg !1824
else: ; preds = %entry
ret i1 false, !dbg !1824
exit: ; preds = %then
%4 = call i1 @"*Char#ascii?:Bool"(i32 %char), !dbg !1825
store i1 %4, i1* %__temp_58, !dbg !1825
br i1 %4, label %then3, label %else4, !dbg !1825
then1: ; preds = %exit5
%5 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1826
%6 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1826
%7 = load i32, i32* %6, !dbg !1826
%8 = sub i32 %7, 1, !dbg !1826
%9 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %5, i32 %8), !dbg !1826
%10 = zext i8 %9 to i32, !dbg !1826
%11 = icmp eq i32 %10, %char, !dbg !1826
ret i1 %11, !dbg !1826
else2: ; preds = %exit5
%12 = call %"Tuple(StaticArray(UInt8, 4), Int32)" @"*String::char_bytes_and_bytesize<Char>:Tuple(StaticArray(UInt8, 4), Int32)"(i32 %char), !dbg !1822
store %"Tuple(StaticArray(UInt8, 4), Int32)" %12, %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !1822
%13 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !1822
store %"Tuple(StaticArray(UInt8, 4), Int32)" %13, %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_62, !dbg !1822
%14 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_62, i32 0, i32 0, !dbg !1822
%15 = load [4 x i8], [4 x i8]* %14, !dbg !1827
store [4 x i8] %15, [4 x i8]* %bytes, !dbg !1827
%16 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_62, i32 0, i32 1, !dbg !1827
%17 = load i32, i32* %16, !dbg !1827
store i32 %17, i32* %count, !dbg !1828
%18 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1829
%19 = load i32, i32* %18, !dbg !1829
%20 = load i32, i32* %count, !dbg !1829
%21 = icmp slt i32 %19, %20, !dbg !1829
br i1 %21, label %then6, label %else7, !dbg !1829
then3: ; preds = %exit
%22 = load i1, i1* %__temp_58, !dbg !1825
br label %exit5, !dbg !1825
else4: ; preds = %exit
%23 = call i1 @"*String#ascii_only?:Bool"(%String* %self), !dbg !1830
br label %exit5, !dbg !1830
exit5: ; preds = %else4, %then3
%24 = phi i1 [ %22, %then3 ], [ %23, %else4 ], !dbg !1830
br i1 %24, label %then1, label %else2, !dbg !1830
then6: ; preds = %else2
ret i1 false, !dbg !1829
else7: ; preds = %else2
%25 = load i32, i32* %count, !dbg !1829
%26 = xor i32 %25, %25, !dbg !1823
store i32 %26, i32* %i8, !dbg !1831
br label %while, !dbg !1831
while: ; preds = %exit12, %else7
%27 = load i32, i32* %i8, !dbg !1832
%28 = icmp slt i32 %27, %25, !dbg !1832
br i1 %28, label %body, label %exit9, !dbg !1832
body: ; preds = %while
%29 = load i32, i32* %i8, !dbg !1832
store i32 %29, i32* %i, !dbg !1832
%30 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1833
%31 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1833
%32 = load i32, i32* %31, !dbg !1833
%33 = load i32, i32* %count, !dbg !1833
%34 = sub i32 %32, %33, !dbg !1833
%35 = load i32, i32* %i, !dbg !1833
%36 = add i32 %34, %35, !dbg !1833
%37 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %30, i32 %36), !dbg !1833
%38 = load i32, i32* %i, !dbg !1833
%39 = call i8 @"*StaticArray(UInt8, 4)@Indexable(T)#[]<Int32>:UInt8"([4 x i8]* %bytes, i32 %38), !dbg !1834
%40 = icmp eq i8 %37, %39, !dbg !1834
br i1 %40, label %then10, label %else11, !dbg !1834
exit9: ; preds = %while
ret i1 true, !dbg !1835
then10: ; preds = %body
br label %exit12, !dbg !1834
else11: ; preds = %body
ret i1 false, !dbg !1834
exit12: ; preds = %then10
%41 = load i32, i32* %i8, !dbg !1834
%42 = add i32 %41, 1, !dbg !1834
store i32 %42, i32* %i8, !dbg !1835
br label %while, !dbg !1835
}
; Function Attrs: uwtable
define internal i1 @"*Char#ascii?:Bool"(i32 %self) #0 !dbg !152 {
entry:
%0 = icmp slt i32 %self, 128, !dbg !1836
ret i1 %0, !dbg !1836
}
; Function Attrs: uwtable
define internal i1 @"*String#ascii_only?:Bool"(%String* %self) #0 !dbg !154 {
entry:
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1837
%1 = load i32, i32* %0, !dbg !1837
%2 = call i32 @"*String#size:Int32"(%String* %self), !dbg !1838
%3 = icmp eq i32 %1, %2, !dbg !1838
ret i1 %3, !dbg !1838
}
; Function Attrs: uwtable
define internal i32 @"*String#size:Int32"(%String* %self) #0 !dbg !155 {
alloca:
%__temp_59 = alloca i1, !dbg !1839
%byte_index = alloca i32, !dbg !1840
%char_index = alloca i32, !dbg !1840
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !1841
%1 = load i32, i32* %0, !dbg !1841
%2 = icmp sgt i32 %1, 0, !dbg !1841
store i1 %2, i1* %__temp_59, !dbg !1841
br i1 %2, label %then1, label %else2, !dbg !1841
then: ; preds = %exit
%3 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !1841
%4 = load i32, i32* %3, !dbg !1841
ret i32 %4, !dbg !1841
else: ; preds = %exit
store i32 0, i32* %byte_index, !dbg !1842
store i32 0, i32* %char_index, !dbg !1843
br label %while, !dbg !1843
then1: ; preds = %entry
%5 = load i1, i1* %__temp_59, !dbg !1841
br label %exit, !dbg !1841
else2: ; preds = %entry
%6 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1841
%7 = load i32, i32* %6, !dbg !1841
%8 = icmp eq i32 %7, 0, !dbg !1841
br label %exit, !dbg !1841
exit: ; preds = %else2, %then1
%9 = phi i1 [ %5, %then1 ], [ %8, %else2 ], !dbg !1841
br i1 %9, label %then, label %else, !dbg !1841
while: ; preds = %body, %else
%10 = load i32, i32* %byte_index, !dbg !1844
%11 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1844
%12 = load i32, i32* %11, !dbg !1844
%13 = icmp slt i32 %10, %12, !dbg !1844
br i1 %13, label %body, label %exit3, !dbg !1844
body: ; preds = %while
%14 = load i32, i32* %byte_index, !dbg !1844
%15 = load i32, i32* %char_index, !dbg !1844
%16 = load i32, i32* %byte_index, !dbg !1844
%17 = load i32, i32* %byte_index, !dbg !1844
%18 = call i32 @"*String#char_bytesize_at<Int32>:Int32"(%String* %self, i32 %17), !dbg !1845
%19 = add i32 %16, %18, !dbg !1845
store i32 %19, i32* %byte_index, !dbg !1846
%20 = load i32, i32* %char_index, !dbg !1846
%21 = add i32 %20, 1, !dbg !1846
store i32 %21, i32* %char_index, !dbg !1847
br label %while, !dbg !1847
exit3: ; preds = %while
%22 = load i32, i32* %char_index, !dbg !1847
%23 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !1848
store i32 %22, i32* %23, !dbg !1848
ret i32 %22, !dbg !1848
}
; Function Attrs: uwtable
define internal i32 @"*String#char_bytesize_at<Int32>:Int32"(%String* %self, i32 %byte_index) #0 !dbg !156 {
alloca:
%first = alloca i8, !dbg !1849
%second = alloca i8, !dbg !1849
%third = alloca i8, !dbg !1849
%__temp_60 = alloca i1, !dbg !1849
%__temp_61 = alloca i1, !dbg !1849
br label %entry
entry: ; preds = %alloca
%0 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %byte_index), !dbg !1850
store i8 %0, i8* %first, !dbg !1851
%1 = load i8, i8* %first, !dbg !1852
%2 = zext i8 %1 to i32, !dbg !1852
%3 = icmp slt i32 %2, 128, !dbg !1852
%4 = and i1 true, %3, !dbg !1852
br i1 %4, label %then, label %else, !dbg !1852
then: ; preds = %entry
ret i32 1, !dbg !1852
else: ; preds = %entry
%5 = load i8, i8* %first, !dbg !1853
%6 = zext i8 %5 to i32, !dbg !1853
%7 = icmp slt i32 %6, 194, !dbg !1853
%8 = and i1 true, %7, !dbg !1853
br i1 %8, label %then1, label %else2, !dbg !1853
then1: ; preds = %else
ret i32 1, !dbg !1853
else2: ; preds = %else
%9 = add i32 %byte_index, 1, !dbg !1853
%10 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %9), !dbg !1854
store i8 %10, i8* %second, !dbg !1855
%11 = load i8, i8* %second, !dbg !1856
%12 = zext i8 %11 to i32, !dbg !1856
%13 = and i32 %12, 192, !dbg !1856
%14 = trunc i32 %13 to i8, !dbg !1856
%15 = zext i8 %14 to i32, !dbg !1856
%16 = icmp ne i32 %15, 128, !dbg !1856
br i1 %16, label %then3, label %else4, !dbg !1856
then3: ; preds = %else2
ret i32 1, !dbg !1856
else4: ; preds = %else2
%17 = load i8, i8* %first, !dbg !1857
%18 = zext i8 %17 to i32, !dbg !1857
%19 = icmp slt i32 %18, 224, !dbg !1857
%20 = and i1 true, %19, !dbg !1857
br i1 %20, label %then5, label %else6, !dbg !1857
then5: ; preds = %else4
ret i32 2, !dbg !1857
else6: ; preds = %else4
%21 = add i32 %byte_index, 2, !dbg !1857
%22 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %21), !dbg !1858
store i8 %22, i8* %third, !dbg !1859
%23 = load i8, i8* %third, !dbg !1860
%24 = zext i8 %23 to i32, !dbg !1860
%25 = and i32 %24, 192, !dbg !1860
%26 = trunc i32 %25 to i8, !dbg !1860
%27 = zext i8 %26 to i32, !dbg !1860
%28 = icmp ne i32 %27, 128, !dbg !1860
br i1 %28, label %then7, label %else8, !dbg !1860
then7: ; preds = %else6
ret i32 2, !dbg !1860
else8: ; preds = %else6
%29 = load i8, i8* %first, !dbg !1861
%30 = zext i8 %29 to i32, !dbg !1861
%31 = icmp slt i32 %30, 240, !dbg !1861
%32 = and i1 true, %31, !dbg !1861
br i1 %32, label %then9, label %else10, !dbg !1861
then9: ; preds = %else8
ret i32 3, !dbg !1861
else10: ; preds = %else8
%33 = load i8, i8* %first, !dbg !1862
%34 = zext i8 %33 to i32, !dbg !1862
%35 = icmp eq i32 %34, 240, !dbg !1862
store i1 %35, i1* %__temp_60, !dbg !1862
br i1 %35, label %then13, label %else14, !dbg !1862
then11: ; preds = %exit
ret i32 3, !dbg !1862
else12: ; preds = %exit
%36 = load i8, i8* %first, !dbg !1863
%37 = zext i8 %36 to i32, !dbg !1863
%38 = icmp eq i32 %37, 244, !dbg !1863
store i1 %38, i1* %__temp_61, !dbg !1863
br i1 %38, label %then17, label %else18, !dbg !1863
then13: ; preds = %else10
%39 = load i8, i8* %second, !dbg !1862
%40 = zext i8 %39 to i32, !dbg !1862
%41 = icmp slt i32 %40, 144, !dbg !1862
%42 = and i1 true, %41, !dbg !1862
br label %exit, !dbg !1862
else14: ; preds = %else10
%43 = load i1, i1* %__temp_60, !dbg !1862
br label %exit, !dbg !1862
exit: ; preds = %else14, %then13
%44 = phi i1 [ %42, %then13 ], [ %43, %else14 ], !dbg !1862
br i1 %44, label %then11, label %else12, !dbg !1862
then15: ; preds = %exit19
ret i32 3, !dbg !1863
else16: ; preds = %exit19
ret i32 4, !dbg !1863
then17: ; preds = %else12
%45 = load i8, i8* %second, !dbg !1863
%46 = zext i8 %45 to i32, !dbg !1863
%47 = icmp sge i32 %46, 144, !dbg !1863
%48 = or i1 false, %47, !dbg !1863
br label %exit19, !dbg !1863
else18: ; preds = %else12
%49 = load i1, i1* %__temp_61, !dbg !1863
br label %exit19, !dbg !1863
exit19: ; preds = %else18, %then17
%50 = phi i1 [ %48, %then17 ], [ %49, %else18 ], !dbg !1863
br i1 %50, label %then15, label %else16, !dbg !1863
}
; Function Attrs: uwtable
define internal i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %index) #0 !dbg !157 {
entry:
%0 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1864
%1 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %0, i32 %index), !dbg !1864
ret i8 %1, !dbg !1864
}
; Function Attrs: uwtable
define internal %"Tuple(StaticArray(UInt8, 4), Int32)" @"*String::char_bytes_and_bytesize<Char>:Tuple(StaticArray(UInt8, 4), Int32)"(i32 %char) #0 !dbg !158 {
alloca:
%bytes = alloca [4 x i8], !dbg !1865
%bytesize = alloca i32, !dbg !1865
%byte = alloca i8, !dbg !1866
%c = alloca i32, !dbg !1866
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !1867
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %bytesize, !dbg !1868
store i32 %char, i32* %c, !dbg !1869
%1 = load i32, i32* %c, !dbg !1870
%2 = icmp slt i32 %1, 128, !dbg !1870
br i1 %2, label %then, label %else, !dbg !1870
then: ; preds = %entry
%3 = load i32, i32* %c, !dbg !1870
%4 = trunc i32 %3 to i8, !dbg !1870
store i8 %4, i8* %byte, !dbg !1870
%5 = load i32, i32* %bytesize, !dbg !1870
%6 = load i8, i8* %byte, !dbg !1870
%7 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %5, i8 %6), !dbg !1871
%8 = load i32, i32* %bytesize, !dbg !1871
%9 = add i32 %8, 1, !dbg !1871
store i32 %9, i32* %bytesize, !dbg !1872
br label %exit, !dbg !1872
else: ; preds = %entry
%10 = load i32, i32* %c, !dbg !1873
%11 = icmp sle i32 %10, 2047, !dbg !1873
br i1 %11, label %then1, label %else2, !dbg !1873
exit: ; preds = %exit3, %then
%12 = phi i32 [ %9, %then ], [ %38, %exit3 ], !dbg !1867
%13 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, i32 0, i32 0, !dbg !1867
%14 = load [4 x i8], [4 x i8]* %bytes, !dbg !1867
store [4 x i8] %14, [4 x i8]* %13, !dbg !1867
%15 = load i32, i32* %bytesize, !dbg !1867
%16 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, i32 0, i32 1, !dbg !1867
store i32 %15, i32* %16, !dbg !1867
%17 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !1867
ret %"Tuple(StaticArray(UInt8, 4), Int32)" %17, !dbg !1867
then1: ; preds = %else
%18 = load i32, i32* %c, !dbg !1873
%19 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %18, i32 6), !dbg !1874
%20 = or i32 192, %19, !dbg !1874
%21 = trunc i32 %20 to i8, !dbg !1874
store i8 %21, i8* %byte, !dbg !1874
%22 = load i32, i32* %bytesize, !dbg !1874
%23 = load i8, i8* %byte, !dbg !1874
%24 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %22, i8 %23), !dbg !1871
%25 = load i32, i32* %bytesize, !dbg !1871
%26 = add i32 %25, 1, !dbg !1871
store i32 %26, i32* %bytesize, !dbg !1872
%27 = load i32, i32* %c, !dbg !1872
%28 = and i32 %27, 63, !dbg !1872
%29 = or i32 128, %28, !dbg !1872
%30 = trunc i32 %29 to i8, !dbg !1872
store i8 %30, i8* %byte, !dbg !1872
%31 = load i32, i32* %bytesize, !dbg !1872
%32 = load i8, i8* %byte, !dbg !1872
%33 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %31, i8 %32), !dbg !1871
%34 = load i32, i32* %bytesize, !dbg !1871
%35 = add i32 %34, 1, !dbg !1871
store i32 %35, i32* %bytesize, !dbg !1872
br label %exit3, !dbg !1872
else2: ; preds = %else
%36 = load i32, i32* %c, !dbg !1875
%37 = icmp sle i32 %36, 65535, !dbg !1875
br i1 %37, label %then4, label %else5, !dbg !1875
exit3: ; preds = %exit6, %then1
%38 = phi i32 [ %35, %then1 ], [ %69, %exit6 ], !dbg !1867
br label %exit, !dbg !1867
then4: ; preds = %else2
%39 = load i32, i32* %c, !dbg !1875
%40 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %39, i32 12), !dbg !1876
%41 = or i32 224, %40, !dbg !1876
%42 = trunc i32 %41 to i8, !dbg !1876
store i8 %42, i8* %byte, !dbg !1876
%43 = load i32, i32* %bytesize, !dbg !1876
%44 = load i8, i8* %byte, !dbg !1876
%45 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %43, i8 %44), !dbg !1871
%46 = load i32, i32* %bytesize, !dbg !1871
%47 = add i32 %46, 1, !dbg !1871
store i32 %47, i32* %bytesize, !dbg !1872
%48 = load i32, i32* %c, !dbg !1872
%49 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %48, i32 6), !dbg !1877
%50 = and i32 %49, 63, !dbg !1877
%51 = or i32 128, %50, !dbg !1877
%52 = trunc i32 %51 to i8, !dbg !1877
store i8 %52, i8* %byte, !dbg !1877
%53 = load i32, i32* %bytesize, !dbg !1877
%54 = load i8, i8* %byte, !dbg !1877
%55 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %53, i8 %54), !dbg !1871
%56 = load i32, i32* %bytesize, !dbg !1871
%57 = add i32 %56, 1, !dbg !1871
store i32 %57, i32* %bytesize, !dbg !1872
%58 = load i32, i32* %c, !dbg !1872
%59 = and i32 %58, 63, !dbg !1872
%60 = or i32 128, %59, !dbg !1872
%61 = trunc i32 %60 to i8, !dbg !1872
store i8 %61, i8* %byte, !dbg !1872
%62 = load i32, i32* %bytesize, !dbg !1872
%63 = load i8, i8* %byte, !dbg !1872
%64 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %62, i8 %63), !dbg !1871
%65 = load i32, i32* %bytesize, !dbg !1871
%66 = add i32 %65, 1, !dbg !1871
store i32 %66, i32* %bytesize, !dbg !1872
br label %exit6, !dbg !1872
else5: ; preds = %else2
%67 = load i32, i32* %c, !dbg !1878
%68 = icmp sle i32 %67, 1114111, !dbg !1878
br i1 %68, label %then7, label %else8, !dbg !1878
exit6: ; preds = %exit9, %then4
%69 = phi i32 [ %66, %then4 ], [ %114, %exit9 ], !dbg !1867
br label %exit3, !dbg !1867
then7: ; preds = %else5
%70 = load i32, i32* %c, !dbg !1878
%71 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %70, i32 18), !dbg !1879
%72 = or i32 240, %71, !dbg !1879
%73 = trunc i32 %72 to i8, !dbg !1879
store i8 %73, i8* %byte, !dbg !1879
%74 = load i32, i32* %bytesize, !dbg !1879
%75 = load i8, i8* %byte, !dbg !1879
%76 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %74, i8 %75), !dbg !1871
%77 = load i32, i32* %bytesize, !dbg !1871
%78 = add i32 %77, 1, !dbg !1871
store i32 %78, i32* %bytesize, !dbg !1872
%79 = load i32, i32* %c, !dbg !1872
%80 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %79, i32 12), !dbg !1880
%81 = and i32 %80, 63, !dbg !1880
%82 = or i32 128, %81, !dbg !1880
%83 = trunc i32 %82 to i8, !dbg !1880
store i8 %83, i8* %byte, !dbg !1880
%84 = load i32, i32* %bytesize, !dbg !1880
%85 = load i8, i8* %byte, !dbg !1880
%86 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %84, i8 %85), !dbg !1871
%87 = load i32, i32* %bytesize, !dbg !1871
%88 = add i32 %87, 1, !dbg !1871
store i32 %88, i32* %bytesize, !dbg !1872
%89 = load i32, i32* %c, !dbg !1872
%90 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %89, i32 6), !dbg !1881
%91 = and i32 %90, 63, !dbg !1881
%92 = or i32 128, %91, !dbg !1881
%93 = trunc i32 %92 to i8, !dbg !1881
store i8 %93, i8* %byte, !dbg !1881
%94 = load i32, i32* %bytesize, !dbg !1881
%95 = load i8, i8* %byte, !dbg !1881
%96 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %94, i8 %95), !dbg !1871
%97 = load i32, i32* %bytesize, !dbg !1871
%98 = add i32 %97, 1, !dbg !1871
store i32 %98, i32* %bytesize, !dbg !1872
%99 = load i32, i32* %c, !dbg !1872
%100 = and i32 %99, 63, !dbg !1872
%101 = or i32 128, %100, !dbg !1872
%102 = trunc i32 %101 to i8, !dbg !1872
store i8 %102, i8* %byte, !dbg !1872
%103 = load i32, i32* %bytesize, !dbg !1872
%104 = load i8, i8* %byte, !dbg !1872
%105 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %103, i8 %104), !dbg !1871
%106 = load i32, i32* %bytesize, !dbg !1871
%107 = add i32 %106, 1, !dbg !1871
store i32 %107, i32* %bytesize, !dbg !1872
br label %exit9, !dbg !1872
else8: ; preds = %else5
%108 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1882
%109 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %108, %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Invalid char value ...'" to %String*)), !dbg !1882
%110 = call %String* @"*Char#dump:String"(i32 %char), !dbg !1883
%111 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %109, %String* %110), !dbg !1882
%112 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %111), !dbg !1882
%113 = call %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %112), !dbg !1884
call void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %113), !dbg !1867
unreachable, !dbg !1867
exit9: ; preds = %then7
%114 = phi i32 [ %107, %then7 ], !dbg !1867
br label %exit6, !dbg !1867
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %self, i32 %index, i8 %value) #3 !dbg !159 {
alloca:
%index1 = alloca i32, !dbg !1885
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !1885
%0 = load i32, i32* %index1, !dbg !1885
%1 = call i32 @"*StaticArray(UInt8, 4)@Indexable(T)#check_index_out_of_bounds<Int32>:Int32"([4 x i8]* %self, i32 %0), !dbg !1886
store i32 %1, i32* %index1, !dbg !1887
%2 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !1888
%3 = load i32, i32* %index1, !dbg !1888
%4 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %2, i32 %3, i8 %value), !dbg !1888
ret i8 %4, !dbg !1888
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt8, 4)@Indexable(T)#check_index_out_of_bounds<Int32>:Int32"([4 x i8]* %self, i32 %index) #0 !dbg !160 {
alloca:
%index1 = alloca i32, !dbg !1889
%__temp_63 = alloca i1, !dbg !1889
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !1889
%0 = load i32, i32* %index1, !dbg !1890
%1 = icmp slt i32 %0, 0, !dbg !1890
br i1 %1, label %then, label %else, !dbg !1890
then: ; preds = %entry
%2 = load i32, i32* %index1, !dbg !1890
%3 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !1891
%4 = add i32 %2, %3, !dbg !1891
store i32 %4, i32* %index1, !dbg !1890
br label %exit, !dbg !1890
else: ; preds = %entry
br label %exit, !dbg !1890
exit: ; preds = %else, %then
%5 = load i32, i32* %index1, !dbg !1892
%6 = icmp sle i32 0, %5, !dbg !1892
store i1 %6, i1* %__temp_63, !dbg !1892
br i1 %6, label %then4, label %else5, !dbg !1892
then2: ; preds = %exit6
%7 = load i32, i32* %index1, !dbg !1893
br label %exit7, !dbg !1893
else3: ; preds = %exit6
%8 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1894
call void @"*raise<IndexError>:NoReturn"(%IndexError* %8), !dbg !1895
unreachable, !dbg !1895
then4: ; preds = %exit
%9 = load i32, i32* %index1, !dbg !1892
%10 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !1893
%11 = icmp slt i32 %9, %10, !dbg !1893
br label %exit6, !dbg !1893
else5: ; preds = %exit
%12 = load i1, i1* %__temp_63, !dbg !1893
br label %exit6, !dbg !1893
exit6: ; preds = %else5, %then4
%13 = phi i1 [ %11, %then4 ], [ %12, %else5 ], !dbg !1893
br i1 %13, label %then2, label %else3, !dbg !1893
exit7: ; preds = %then2
%14 = phi i32 [ %7, %then2 ], !dbg !1895
ret i32 %14, !dbg !1895
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self) #0 !dbg !162 {
entry:
ret i32 4, !dbg !1896
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self) #0 !dbg !163 {
entry:
%0 = getelementptr inbounds [4 x i8], [4 x i8]* %self, i32 0, i32 0, !dbg !1897
ret i8* %0, !dbg !1897
}
; Function Attrs: uwtable
define internal %String* @"*Char#dump:String"(i32 %self) #0 !dbg !164 {
alloca:
%io = alloca %"String::Builder"*, !dbg !1898
%__temp_65 = alloca i1, !dbg !1898
%io22 = alloca %"String::Builder"*, !dbg !1899
%capacity = alloca i32, !dbg !1899
%builder = alloca %"String::Builder"*, !dbg !1900
%capacity23 = alloca i32, !dbg !1900
%builder24 = alloca %"String::Builder"*, !dbg !1900
br label %entry
entry: ; preds = %alloca
%0 = call i1 @"*Char@Object#===<Char>:Bool"(i32 39, i32 %self), !dbg !1901
br i1 %0, label %then, label %else, !dbg !1901
then: ; preds = %entry
br label %exit, !dbg !1901
else: ; preds = %entry
%1 = call i1 @"*Char@Object#===<Char>:Bool"(i32 92, i32 %self), !dbg !1902
br i1 %1, label %then1, label %else2, !dbg !1902
exit: ; preds = %exit3, %then
%2 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5C'''" to %String*), %then ], [ %4, %exit3 ], !dbg !1903
ret %String* %2, !dbg !1903
then1: ; preds = %else
br label %exit3, !dbg !1902
else2: ; preds = %else
%3 = call i1 @"*Char@Object#===<Char>:Bool"(i32 27, i32 %self), !dbg !1904
br i1 %3, label %then4, label %else5, !dbg !1904
exit3: ; preds = %exit6, %then1
%4 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5C\5C''" to %String*), %then1 ], [ %6, %exit6 ], !dbg !1903
br label %exit, !dbg !1903
then4: ; preds = %else2
br label %exit6, !dbg !1904
else5: ; preds = %else2
%5 = call i1 @"*Char@Object#===<Char>:Bool"(i32 12, i32 %self), !dbg !1905
br i1 %5, label %then7, label %else8, !dbg !1905
exit6: ; preds = %exit9, %then4
%6 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Ce''" to %String*), %then4 ], [ %8, %exit9 ], !dbg !1903
br label %exit3, !dbg !1903
then7: ; preds = %else5
br label %exit9, !dbg !1905
else8: ; preds = %else5
%7 = call i1 @"*Char@Object#===<Char>:Bool"(i32 10, i32 %self), !dbg !1906
br i1 %7, label %then10, label %else11, !dbg !1906
exit9: ; preds = %exit12, %then7
%8 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cf''" to %String*), %then7 ], [ %10, %exit12 ], !dbg !1903
br label %exit6, !dbg !1903
then10: ; preds = %else8
br label %exit12, !dbg !1906
else11: ; preds = %else8
%9 = call i1 @"*Char@Object#===<Char>:Bool"(i32 13, i32 %self), !dbg !1907
br i1 %9, label %then13, label %else14, !dbg !1907
exit12: ; preds = %exit15, %then10
%10 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cn''" to %String*), %then10 ], [ %12, %exit15 ], !dbg !1903
br label %exit9, !dbg !1903
then13: ; preds = %else11
br label %exit15, !dbg !1907
else14: ; preds = %else11
%11 = call i1 @"*Char@Object#===<Char>:Bool"(i32 9, i32 %self), !dbg !1908
br i1 %11, label %then16, label %else17, !dbg !1908
exit15: ; preds = %exit18, %then13
%12 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cr''" to %String*), %then13 ], [ %14, %exit18 ], !dbg !1903
br label %exit12, !dbg !1903
then16: ; preds = %else14
br label %exit18, !dbg !1908
else17: ; preds = %else14
%13 = call i1 @"*Char@Object#===<Char>:Bool"(i32 11, i32 %self), !dbg !1909
br i1 %13, label %then19, label %else20, !dbg !1909
exit18: ; preds = %exit21, %then16
%14 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Ct''" to %String*), %then16 ], [ %24, %exit21 ], !dbg !1903
br label %exit15, !dbg !1903
then19: ; preds = %else17
br label %exit21, !dbg !1909
else20: ; preds = %else17
store i32 64, i32* %capacity, !dbg !1910
%15 = load i32, i32* %capacity, !dbg !1910
store i32 %15, i32* %capacity23, !dbg !1900
%16 = load i32, i32* %capacity23, !dbg !1900
%17 = call %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %16), !dbg !1911
store %"String::Builder"* %17, %"String::Builder"** %builder24, !dbg !1912
%18 = load %"String::Builder"*, %"String::Builder"** %builder24, !dbg !1912
store %"String::Builder"* %18, %"String::Builder"** %builder, !dbg !1912
%19 = load %"String::Builder"*, %"String::Builder"** %builder, !dbg !1912
store %"String::Builder"* %19, %"String::Builder"** %io22, !dbg !1912
%20 = load %"String::Builder"*, %"String::Builder"** %io22, !dbg !1912
%21 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %20, i32 39), !dbg !1913
%22 = load %"String::Builder"*, %"String::Builder"** %io22, !dbg !1913
store %"String::Builder"* %22, %"String::Builder"** %io, !dbg !1913
%23 = call i1 @"*Char#ascii_control?:Bool"(i32 %self), !dbg !1914
store i1 %23, i1* %__temp_65, !dbg !1914
br i1 %23, label %then27, label %else28, !dbg !1914
exit21: ; preds = %exit30, %then19
%24 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cv''" to %String*), %then19 ], [ %38, %exit30 ], !dbg !1903
br label %exit18, !dbg !1903
then25: ; preds = %exit29
%25 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !1914
%26 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %25, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'\5Cu{'" to %String*)), !dbg !1915
%27 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !1915
call void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 16, %"String::Builder"* %27), !dbg !1916
%28 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !1916
%29 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %28, i32 125), !dbg !1917
br label %exit30, !dbg !1917
else26: ; preds = %exit29
%30 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !1917
call void @"*Char#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %30), !dbg !1918
br label %exit30, !dbg !1918
then27: ; preds = %else20
%31 = load i1, i1* %__temp_65, !dbg !1914
br label %exit29, !dbg !1914
else28: ; preds = %else20
%32 = icmp sge i32 %self, 128, !dbg !1914
br label %exit29, !dbg !1914
exit29: ; preds = %else28, %then27
%33 = phi i1 [ %31, %then27 ], [ %32, %else28 ], !dbg !1914
br i1 %33, label %then25, label %else26, !dbg !1914
exit30: ; preds = %else26, %then25
%34 = phi %"String::Builder"* [ %29, %then25 ], [ null, %else26 ], !dbg !1918
%35 = load %"String::Builder"*, %"String::Builder"** %io22, !dbg !1918
%36 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %35, i32 39), !dbg !1919
%37 = load %"String::Builder"*, %"String::Builder"** %builder24, !dbg !1919
%38 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %37), !dbg !1903
br label %exit21, !dbg !1903
}
; Function Attrs: uwtable
define internal i1 @"*Char@Object#===<Char>:Bool"(i32 %self, i32 %other) #0 !dbg !165 {
entry:
%0 = icmp eq i32 %self, %other, !dbg !1920
ret i1 %0, !dbg !1920
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %capacity) #0 !dbg !166 {
alloca:
%_ = alloca %"String::Builder"*, !dbg !1921
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"String::Builder"* getelementptr (%"String::Builder", %"String::Builder"* null, i32 1) to i64)), !dbg !1921
%1 = bitcast i8* %0 to %"String::Builder"*, !dbg !1921
%2 = bitcast %"String::Builder"* %1 to i8*, !dbg !1921
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"String::Builder"* getelementptr (%"String::Builder", %"String::Builder"* null, i32 1) to i32), i32 4, i1 false), !dbg !1921
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %1, i32 0, i32 0, !dbg !1921
store i32 85, i32* %3, !dbg !1921
store %"String::Builder"* %1, %"String::Builder"** %_, !dbg !1921
%4 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !1921
%5 = call i1 @"*String::Builder#initialize<Int32>:Bool"(%"String::Builder"* %4, i32 %capacity), !dbg !1921
%6 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !1921
ret %"String::Builder"* %6, !dbg !1921
}
; Function Attrs: uwtable
define internal i1 @"*String::Builder#initialize<Int32>:Bool"(%"String::Builder"* %self, i32 %capacity) #0 !dbg !167 {
alloca:
%capacity1 = alloca i32, !dbg !1922
br label %entry
entry: ; preds = %alloca
store i32 %capacity, i32* %capacity1, !dbg !1922
%0 = load i32, i32* %capacity1, !dbg !1922
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %0), !dbg !1923
%1 = load i32, i32* %capacity1, !dbg !1923
%2 = add i32 %1, i64 13, !dbg !1923
store i32 %2, i32* %capacity1, !dbg !1924
%3 = load i32, i32* %capacity1, !dbg !1924
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %3), !dbg !1925
%4 = load i32, i32* %capacity1, !dbg !1925
%5 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %4), !dbg !1926
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !1927
store i8* %5, i8** %6, !dbg !1927
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !1928
store i32 0, i32* %7, !dbg !1928
%8 = load i32, i32* %capacity1, !dbg !1928
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !1929
store i32 %8, i32* %9, !dbg !1929
%10 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !1930
store i1 false, i1* %10, !dbg !1930
ret i1 false, !dbg !1930
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %self, i32 %obj) #0 !dbg !168 {
entry:
call void @"*Char#to_s<String::Builder>:Nil"(i32 %obj, %"String::Builder"* %self), !dbg !1931
ret %"String::Builder"* %self, !dbg !1931
}
; Function Attrs: uwtable
define internal void @"*Char#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %io) #0 !dbg !169 {
alloca:
%byte = alloca i8, !dbg !1932
%chars = alloca [4 x i8], !dbg !1932
%i = alloca i32, !dbg !1932
%0 = alloca %"Slice(UInt8)", !dbg !1933
%byte4 = alloca i8, !dbg !1934
%c = alloca i32, !dbg !1934
%1 = alloca %"Slice(UInt8)", !dbg !1935
%2 = alloca %"Slice(UInt8)", !dbg !1935
br label %entry
entry: ; preds = %alloca
%3 = call i1 @"*Char#ascii?:Bool"(i32 %self), !dbg !1936
br i1 %3, label %then, label %else, !dbg !1936
then: ; preds = %entry
%4 = trunc i32 %self to i8, !dbg !1936
store i8 %4, i8* %byte, !dbg !1937
%5 = getelementptr inbounds %"String::Builder", %"String::Builder"* %io, i32 0, i32 1, !dbg !1938
%6 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %5, i32 0, i32 0, !dbg !1938
%7 = load i32, i32* %6, !dbg !1938
%8 = icmp eq i32 %7, 0, !dbg !1938
%9 = xor i1 %8, true, !dbg !1938
%10 = and i1 true, %9, !dbg !1938
br i1 %10, label %then1, label %else2, !dbg !1938
else: ; preds = %entry
store i32 0, i32* %i, !dbg !1939
store i32 %self, i32* %c, !dbg !1940
%11 = load i32, i32* %c, !dbg !1941
%12 = icmp slt i32 %11, 128, !dbg !1941
br i1 %12, label %then5, label %else6, !dbg !1941
then1: ; preds = %then
%13 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %byte, i32 1), !dbg !1933
store %"Slice(UInt8)" %13, %"Slice(UInt8)"* %0, !dbg !1933
%14 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1933
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %14), !dbg !1942
br label %exit, !dbg !1942
else2: ; preds = %then
%15 = load i8, i8* %byte, !dbg !1942
call void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %io, i8 %15), !dbg !1943
br label %exit, !dbg !1943
exit: ; preds = %else2, %then1
br label %exit3, !dbg !1943
exit3: ; preds = %exit7, %exit
ret void, !dbg !1944
then5: ; preds = %else
%16 = load i32, i32* %c, !dbg !1941
%17 = trunc i32 %16 to i8, !dbg !1941
store i8 %17, i8* %byte4, !dbg !1941
%18 = load i32, i32* %i, !dbg !1941
%19 = load i8, i8* %byte4, !dbg !1941
%20 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %18, i8 %19), !dbg !1945
%21 = load i32, i32* %i, !dbg !1945
%22 = add i32 %21, 1, !dbg !1945
store i32 %22, i32* %i, !dbg !1946
br label %exit7, !dbg !1946
else6: ; preds = %else
%23 = load i32, i32* %c, !dbg !1947
%24 = icmp sle i32 %23, 2047, !dbg !1947
br i1 %24, label %then8, label %else9, !dbg !1947
exit7: ; preds = %exit10, %then5
%25 = phi i32 [ %22, %then5 ], [ %50, %exit10 ], !dbg !1948
%26 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_slice:Slice(UInt8)"([4 x i8]* %chars), !dbg !1935
store %"Slice(UInt8)" %26, %"Slice(UInt8)"* %1, !dbg !1935
%27 = load i32, i32* %i, !dbg !1935
%28 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %1, i32 0, i32 %27), !dbg !1935
store %"Slice(UInt8)" %28, %"Slice(UInt8)"* %2, !dbg !1935
%29 = load %"Slice(UInt8)", %"Slice(UInt8)"* %2, !dbg !1935
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %29), !dbg !1944
br label %exit3, !dbg !1944
then8: ; preds = %else6
%30 = load i32, i32* %c, !dbg !1947
%31 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %30, i32 6), !dbg !1949
%32 = or i32 192, %31, !dbg !1949
%33 = trunc i32 %32 to i8, !dbg !1949
store i8 %33, i8* %byte4, !dbg !1949
%34 = load i32, i32* %i, !dbg !1949
%35 = load i8, i8* %byte4, !dbg !1949
%36 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %34, i8 %35), !dbg !1945
%37 = load i32, i32* %i, !dbg !1945
%38 = add i32 %37, 1, !dbg !1945
store i32 %38, i32* %i, !dbg !1946
%39 = load i32, i32* %c, !dbg !1946
%40 = and i32 %39, 63, !dbg !1946
%41 = or i32 128, %40, !dbg !1946
%42 = trunc i32 %41 to i8, !dbg !1946
store i8 %42, i8* %byte4, !dbg !1946
%43 = load i32, i32* %i, !dbg !1946
%44 = load i8, i8* %byte4, !dbg !1946
%45 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %43, i8 %44), !dbg !1945
%46 = load i32, i32* %i, !dbg !1945
%47 = add i32 %46, 1, !dbg !1945
store i32 %47, i32* %i, !dbg !1946
br label %exit10, !dbg !1946
else9: ; preds = %else6
%48 = load i32, i32* %c, !dbg !1950
%49 = icmp sle i32 %48, 65535, !dbg !1950
br i1 %49, label %then11, label %else12, !dbg !1950
exit10: ; preds = %exit13, %then8
%50 = phi i32 [ %47, %then8 ], [ %81, %exit13 ], !dbg !1948
br label %exit7, !dbg !1948
then11: ; preds = %else9
%51 = load i32, i32* %c, !dbg !1950
%52 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %51, i32 12), !dbg !1951
%53 = or i32 224, %52, !dbg !1951
%54 = trunc i32 %53 to i8, !dbg !1951
store i8 %54, i8* %byte4, !dbg !1951
%55 = load i32, i32* %i, !dbg !1951
%56 = load i8, i8* %byte4, !dbg !1951
%57 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %55, i8 %56), !dbg !1945
%58 = load i32, i32* %i, !dbg !1945
%59 = add i32 %58, 1, !dbg !1945
store i32 %59, i32* %i, !dbg !1946
%60 = load i32, i32* %c, !dbg !1946
%61 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %60, i32 6), !dbg !1952
%62 = and i32 %61, 63, !dbg !1952
%63 = or i32 128, %62, !dbg !1952
%64 = trunc i32 %63 to i8, !dbg !1952
store i8 %64, i8* %byte4, !dbg !1952
%65 = load i32, i32* %i, !dbg !1952
%66 = load i8, i8* %byte4, !dbg !1952
%67 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %65, i8 %66), !dbg !1945
%68 = load i32, i32* %i, !dbg !1945
%69 = add i32 %68, 1, !dbg !1945
store i32 %69, i32* %i, !dbg !1946
%70 = load i32, i32* %c, !dbg !1946
%71 = and i32 %70, 63, !dbg !1946
%72 = or i32 128, %71, !dbg !1946
%73 = trunc i32 %72 to i8, !dbg !1946
store i8 %73, i8* %byte4, !dbg !1946
%74 = load i32, i32* %i, !dbg !1946
%75 = load i8, i8* %byte4, !dbg !1946
%76 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %74, i8 %75), !dbg !1945
%77 = load i32, i32* %i, !dbg !1945
%78 = add i32 %77, 1, !dbg !1945
store i32 %78, i32* %i, !dbg !1946
br label %exit13, !dbg !1946
else12: ; preds = %else9
%79 = load i32, i32* %c, !dbg !1953
%80 = icmp sle i32 %79, 1114111, !dbg !1953
br i1 %80, label %then14, label %else15, !dbg !1953
exit13: ; preds = %exit16, %then11
%81 = phi i32 [ %78, %then11 ], [ %126, %exit16 ], !dbg !1948
br label %exit10, !dbg !1948
then14: ; preds = %else12
%82 = load i32, i32* %c, !dbg !1953
%83 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %82, i32 18), !dbg !1954
%84 = or i32 240, %83, !dbg !1954
%85 = trunc i32 %84 to i8, !dbg !1954
store i8 %85, i8* %byte4, !dbg !1954
%86 = load i32, i32* %i, !dbg !1954
%87 = load i8, i8* %byte4, !dbg !1954
%88 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %86, i8 %87), !dbg !1945
%89 = load i32, i32* %i, !dbg !1945
%90 = add i32 %89, 1, !dbg !1945
store i32 %90, i32* %i, !dbg !1946
%91 = load i32, i32* %c, !dbg !1946
%92 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %91, i32 12), !dbg !1955
%93 = and i32 %92, 63, !dbg !1955
%94 = or i32 128, %93, !dbg !1955
%95 = trunc i32 %94 to i8, !dbg !1955
store i8 %95, i8* %byte4, !dbg !1955
%96 = load i32, i32* %i, !dbg !1955
%97 = load i8, i8* %byte4, !dbg !1955
%98 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %96, i8 %97), !dbg !1945
%99 = load i32, i32* %i, !dbg !1945
%100 = add i32 %99, 1, !dbg !1945
store i32 %100, i32* %i, !dbg !1946
%101 = load i32, i32* %c, !dbg !1946
%102 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %101, i32 6), !dbg !1956
%103 = and i32 %102, 63, !dbg !1956
%104 = or i32 128, %103, !dbg !1956
%105 = trunc i32 %104 to i8, !dbg !1956
store i8 %105, i8* %byte4, !dbg !1956
%106 = load i32, i32* %i, !dbg !1956
%107 = load i8, i8* %byte4, !dbg !1956
%108 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %106, i8 %107), !dbg !1945
%109 = load i32, i32* %i, !dbg !1945
%110 = add i32 %109, 1, !dbg !1945
store i32 %110, i32* %i, !dbg !1946
%111 = load i32, i32* %c, !dbg !1946
%112 = and i32 %111, 63, !dbg !1946
%113 = or i32 128, %112, !dbg !1946
%114 = trunc i32 %113 to i8, !dbg !1946
store i8 %114, i8* %byte4, !dbg !1946
%115 = load i32, i32* %i, !dbg !1946
%116 = load i8, i8* %byte4, !dbg !1946
%117 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %115, i8 %116), !dbg !1945
%118 = load i32, i32* %i, !dbg !1945
%119 = add i32 %118, 1, !dbg !1945
store i32 %119, i32* %i, !dbg !1946
br label %exit16, !dbg !1946
else15: ; preds = %else12
%120 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1957
%121 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %120, %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Invalid char value ...'" to %String*)), !dbg !1957
%122 = call %String* @"*Char#dump:String"(i32 %self), !dbg !1958
%123 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %121, %String* %122), !dbg !1957
%124 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %123), !dbg !1957
%125 = call %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %124), !dbg !1959
call void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %125), !dbg !1948
unreachable, !dbg !1948
exit16: ; preds = %then14
%126 = phi i32 [ %119, %then14 ], !dbg !1948
br label %exit13, !dbg !1948
}
; Function Attrs: uwtable
define internal %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %message) #0 !dbg !170 {
alloca:
%_ = alloca %InvalidByteSequenceError*, !dbg !1960
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%InvalidByteSequenceError* getelementptr (%InvalidByteSequenceError, %InvalidByteSequenceError* null, i32 1) to i64)), !dbg !1960
%1 = bitcast i8* %0 to %InvalidByteSequenceError*, !dbg !1960
%2 = bitcast %InvalidByteSequenceError* %1 to i8*, !dbg !1960
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%InvalidByteSequenceError* getelementptr (%InvalidByteSequenceError, %InvalidByteSequenceError* null, i32 1) to i32), i32 4, i1 false), !dbg !1960
%3 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %1, i32 0, i32 0, !dbg !1960
store i32 42, i32* %3, !dbg !1960
store %InvalidByteSequenceError* %1, %InvalidByteSequenceError** %_, !dbg !1960
%4 = load %InvalidByteSequenceError*, %InvalidByteSequenceError** %_, !dbg !1960
call void @"*InvalidByteSequenceError#initialize<String>:Nil"(%InvalidByteSequenceError* %4, %String* %message), !dbg !1960
%5 = load %InvalidByteSequenceError*, %InvalidByteSequenceError** %_, !dbg !1960
ret %InvalidByteSequenceError* %5, !dbg !1960
}
; Function Attrs: uwtable
define internal void @"*InvalidByteSequenceError#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message) #0 !dbg !171 {
entry:
call void @"*InvalidByteSequenceError@Exception#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message), !dbg !1961
ret void, !dbg !1961
}
; Function Attrs: uwtable
define internal void @"*InvalidByteSequenceError@Exception#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message) #0 !dbg !172 {
alloca:
%cause = alloca %Nil, !dbg !1962
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 1, !dbg !1963
store %String* %message, %String** %0, !dbg !1963
%1 = load %Nil, %Nil* %cause, !dbg !1963
%2 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 2, !dbg !1964
store i32* null, i32** %2, !dbg !1964
ret void, !dbg !1964
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %exception) #1 !dbg !173 {
alloca:
%__temp_64 = alloca %"(CallStack | Nil)", !dbg !1965
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1965
%0 = alloca %CallStack, !dbg !1965
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %exception, i32 0, i32 3, !dbg !1965
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1965
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_64, !dbg !1965
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1965
%4 = load i32, i32* %3, !dbg !1965
%5 = icmp eq i32 %4, 0, !dbg !1965
%6 = xor i1 %5, true, !dbg !1965
%7 = and i1 true, %6, !dbg !1965
br i1 %7, label %then, label %else, !dbg !1965
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_64, i32 0, i32 1, !dbg !1965
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1965
br label %exit, !dbg !1965
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1965
store %CallStack %10, %CallStack* %0, !dbg !1965
%11 = load %CallStack, %CallStack* %0, !dbg !1965
%12 = call %CallStack @"*InvalidByteSequenceError@Exception#callstack=<CallStack>:CallStack"(%InvalidByteSequenceError* %exception, %CallStack %11), !dbg !1965
br label %exit, !dbg !1965
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !1965
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1965
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1965
store i64 %15, i64* %16, !dbg !1965
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1965
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1965
store i64 %18, i64* %19, !dbg !1965
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
%21 = ptrtoint %InvalidByteSequenceError* %exception to i64, !dbg !1965
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1965
store i64 %21, i64* %22, !dbg !1965
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1965
store i32 42, i32* %24, !dbg !1965
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1965
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1965
unreachable, !dbg !1965
}
; Function Attrs: uwtable
define internal %CallStack @"*InvalidByteSequenceError@Exception#callstack=<CallStack>:CallStack"(%InvalidByteSequenceError* %self, %CallStack %callstack) #0 !dbg !174 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1966
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1966
%0 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 3, !dbg !1966
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1966
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1966
store i32 344, i32* %2, !dbg !1966
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1966
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1966
store %CallStack %1, %CallStack* %4, !dbg !1966
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1966
ret %CallStack %5, !dbg !1966
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_slice:Slice(UInt8)"([4 x i8]* %self) #0 !dbg !175 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !1967
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !1968
%2 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !1969
%3 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %1, i32 %2), !dbg !1967
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !1967
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1967
ret %"Slice(UInt8)" %4, !dbg !1967
}
; Function Attrs: uwtable
define internal i1 @"*Char#ascii_control?:Bool"(i32 %self) #0 !dbg !176 {
alloca:
%__temp_66 = alloca i1, !dbg !1970
%__temp_18 = alloca i32, !dbg !1970
%__temp_67 = alloca i1, !dbg !1970
br label %entry
entry: ; preds = %alloca
%0 = icmp slt i32 %self, 32, !dbg !1971
store i1 %0, i1* %__temp_66, !dbg !1971
br i1 %0, label %then, label %else, !dbg !1971
then: ; preds = %entry
%1 = load i1, i1* %__temp_66, !dbg !1971
br label %exit, !dbg !1971
else: ; preds = %entry
store i32 %self, i32* %__temp_18, !dbg !1972
%2 = icmp sle i32 127, %self, !dbg !1972
store i1 %2, i1* %__temp_67, !dbg !1973
br i1 %2, label %then1, label %else2, !dbg !1973
exit: ; preds = %exit3, %then
%3 = phi i1 [ %1, %then ], [ %7, %exit3 ], !dbg !1973
ret i1 %3, !dbg !1973
then1: ; preds = %else
%4 = load i32, i32* %__temp_18, !dbg !1973
%5 = icmp sle i32 %4, 159, !dbg !1973
br label %exit3, !dbg !1973
else2: ; preds = %else
%6 = load i1, i1* %__temp_67, !dbg !1973
br label %exit3, !dbg !1973
exit3: ; preds = %else2, %then1
%7 = phi i1 [ %5, %then1 ], [ %6, %else2 ], !dbg !1973
br label %exit, !dbg !1973
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 %base, %"String::Builder"* %io) #0 !dbg !177 {
alloca:
%upcase = alloca i1, !dbg !1974
%__temp_69 = alloca i1, !dbg !1974
%__temp_68 = alloca i1, !dbg !1974
%ptr = alloca i8*, !dbg !1975
%count = alloca i32, !dbg !1975
%base16 = alloca i32, !dbg !1975
%upcase17 = alloca i1, !dbg !1975
%chars = alloca [129 x i8], !dbg !1975
%ptr_end = alloca i8*, !dbg !1975
%ptr18 = alloca i8*, !dbg !1975
%num = alloca i32, !dbg !1975
%neg = alloca i1, !dbg !1975
%digits = alloca i8*, !dbg !1975
%count19 = alloca i32, !dbg !1975
%0 = alloca %"Slice(UInt8)", !dbg !1976
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %upcase, !dbg !1977
%1 = icmp sle i32 2, %base, !dbg !1978
store i1 %1, i1* %__temp_69, !dbg !1978
br i1 %1, label %then3, label %else4, !dbg !1978
then: ; preds = %exit5
br label %exit6, !dbg !1978
else: ; preds = %exit5
%2 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1979
%3 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %2, %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Invalid base '" to %String*)), !dbg !1979
%4 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %3, i32 %base), !dbg !1979
%5 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %4), !dbg !1979
%6 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %5), !dbg !1980
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %6), !dbg !1981
unreachable, !dbg !1981
then1: ; preds = %exit
%7 = load i1, i1* %__temp_68, !dbg !1978
br label %exit5, !dbg !1978
else2: ; preds = %exit
%8 = icmp eq i32 %base, 62, !dbg !1978
br label %exit5, !dbg !1978
then3: ; preds = %entry
%9 = icmp sle i32 %base, 36, !dbg !1978
br label %exit, !dbg !1978
else4: ; preds = %entry
%10 = load i1, i1* %__temp_69, !dbg !1978
br label %exit, !dbg !1978
exit: ; preds = %else4, %then3
%11 = phi i1 [ %9, %then3 ], [ %10, %else4 ], !dbg !1978
store i1 %11, i1* %__temp_68, !dbg !1978
br i1 %11, label %then1, label %else2, !dbg !1978
exit5: ; preds = %else2, %then1
%12 = phi i1 [ %7, %then1 ], [ %8, %else2 ], !dbg !1978
br i1 %12, label %then, label %else, !dbg !1978
exit6: ; preds = %then
%13 = load i1, i1* %upcase, !dbg !1982
br i1 %13, label %then9, label %else10, !dbg !1982
then7: ; preds = %exit11
%14 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [33 x i8] }* @"'upcase must be fals...'" to %String*)), !dbg !1983
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %14), !dbg !1984
unreachable, !dbg !1984
else8: ; preds = %exit11
%15 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 0, i32 %self), !dbg !1985
br i1 %15, label %then12, label %else13, !dbg !1985
then9: ; preds = %exit6
%16 = icmp eq i32 %base, 62, !dbg !1982
br label %exit11, !dbg !1982
else10: ; preds = %exit6
%17 = load i1, i1* %upcase, !dbg !1982
br label %exit11, !dbg !1982
exit11: ; preds = %else10, %then9
%18 = phi i1 [ %16, %then9 ], [ %17, %else10 ], !dbg !1982
br i1 %18, label %then7, label %else8, !dbg !1982
then12: ; preds = %else8
%19 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 48), !dbg !1986
ret void, !dbg !1986
else13: ; preds = %else8
%20 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 1, i32 %self), !dbg !1987
br i1 %20, label %then14, label %else15, !dbg !1987
then14: ; preds = %else13
%21 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 49), !dbg !1988
ret void, !dbg !1988
else15: ; preds = %else13
%22 = load i1, i1* %upcase, !dbg !1988
store i32 %base, i32* %base16, !dbg !1975
store i1 %22, i1* %upcase17, !dbg !1975
%23 = call i8* @"*StaticArray(UInt8, 129)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([129 x i8]* %chars), !dbg !1989
%24 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %23, i32 128), !dbg !1989
store i8* %24, i8** %ptr_end, !dbg !1990
%25 = load i8*, i8** %ptr_end, !dbg !1990
store i8* %25, i8** %ptr18, !dbg !1991
store i32 %self, i32* %num, !dbg !1992
%26 = load i32, i32* %num, !dbg !1992
%27 = icmp slt i32 %26, 0, !dbg !1992
store i1 %27, i1* %neg, !dbg !1993
%28 = load i32, i32* %base16, !dbg !1994
%29 = icmp eq i32 %28, 62, !dbg !1994
br i1 %29, label %then20, label %else21, !dbg !1994
then20: ; preds = %else15
%30 = call %String** @"~Int::DIGITS_BASE62:read"(), !dbg !1994
%31 = load %String*, %String** %30, !dbg !1994
br label %exit22, !dbg !1994
else21: ; preds = %else15
%32 = load i1, i1* %upcase17, !dbg !1995
br i1 %32, label %then23, label %else24, !dbg !1995
exit22: ; preds = %exit25, %then20
%33 = phi %String* [ %31, %then20 ], [ %39, %exit25 ], !dbg !1995
%34 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %33), !dbg !1996
store i8* %34, i8** %digits, !dbg !1997
br label %while, !dbg !1997
then23: ; preds = %else21
%35 = call %String** @"~Int::DIGITS_UPCASE:read"(), !dbg !1995
%36 = load %String*, %String** %35, !dbg !1995
br label %exit25, !dbg !1995
else24: ; preds = %else21
%37 = call %String** @"~Int::DIGITS_DOWNCASE:read"(), !dbg !1995
%38 = load %String*, %String** %37, !dbg !1995
br label %exit25, !dbg !1995
exit25: ; preds = %else24, %then23
%39 = phi %String* [ %36, %then23 ], [ %38, %else24 ], !dbg !1995
br label %exit22, !dbg !1995
while: ; preds = %body, %exit22
%40 = load i32, i32* %num, !dbg !1998
%41 = icmp ne i32 %40, 0, !dbg !1998
br i1 %41, label %body, label %exit26, !dbg !1998
body: ; preds = %while
%42 = load i8*, i8** %ptr18, !dbg !1998
%43 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %42, i32 1), !dbg !1999
store i8* %43, i8** %ptr18, !dbg !1999
%44 = load i8*, i8** %ptr18, !dbg !1999
%45 = load i8*, i8** %digits, !dbg !1999
%46 = load i32, i32* %num, !dbg !1999
%47 = load i32, i32* %base16, !dbg !1999
%48 = call i32 @"*Int32@Int#remainder<Int32>:Int32"(i32 %46, i32 %47), !dbg !2000
%49 = call i32 @"*Int32@Int#abs:Int32"(i32 %48), !dbg !2000
%50 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %45, i32 %49), !dbg !2001
store i8 %50, i8* %44, !dbg !2001
%51 = load i32, i32* %num, !dbg !2001
%52 = load i32, i32* %base16, !dbg !2001
%53 = call i32 @"*Int32@Int#tdiv<Int32>:Int32"(i32 %51, i32 %52), !dbg !2002
store i32 %53, i32* %num, !dbg !2003
br label %while, !dbg !2003
exit26: ; preds = %while
%54 = load i1, i1* %neg, !dbg !2004
br i1 %54, label %then27, label %else28, !dbg !2004
then27: ; preds = %exit26
%55 = load i8*, i8** %ptr18, !dbg !2004
%56 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %55, i32 1), !dbg !2005
store i8* %56, i8** %ptr18, !dbg !2005
%57 = load i8*, i8** %ptr18, !dbg !2005
store i8 45, i8* %57, !dbg !2005
br label %exit29, !dbg !2005
else28: ; preds = %exit26
br label %exit29, !dbg !2005
exit29: ; preds = %else28, %then27
%58 = load i8*, i8** %ptr_end, !dbg !2005
%59 = load i8*, i8** %ptr18, !dbg !2005
%60 = ptrtoint i8* %58 to i64, !dbg !2005
%61 = ptrtoint i8* %59 to i64, !dbg !2005
%62 = sub i64 %60, %61, !dbg !2005
%63 = sdiv exact i64 %62, ptrtoint (i8* getelementptr inbounds (i8, i8* null, i32 1) to i64), !dbg !2005
%64 = trunc i64 %63 to i32, !dbg !2005
store i32 %64, i32* %count19, !dbg !2006
%65 = load i8*, i8** %ptr18, !dbg !2006
%66 = load i32, i32* %count19, !dbg !2006
store i8* %65, i8** %ptr, !dbg !2006
store i32 %66, i32* %count, !dbg !2006
%67 = load i8*, i8** %ptr, !dbg !2006
%68 = load i32, i32* %count, !dbg !2006
%69 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %67, i32 %68), !dbg !1976
store %"Slice(UInt8)" %69, %"Slice(UInt8)"* %0, !dbg !1976
%70 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1976
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %70), !dbg !2007
ret void, !dbg !2007
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %self, i32 %obj) #0 !dbg !178 {
entry:
call void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %obj, %"String::Builder"* %self), !dbg !2008
ret %"String::Builder"* %self, !dbg !2008
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %io) #0 !dbg !179 {
entry:
call void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 10, %"String::Builder"* %io), !dbg !2009
ret void, !dbg !2009
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 129)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([129 x i8]* %self) #0 !dbg !180 {
entry:
%0 = getelementptr inbounds [129 x i8], [129 x i8]* %self, i32 0, i32 0, !dbg !2010
ret i8* %0, !dbg !2010
}
define internal %String** @"~Int::DIGITS_BASE62:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_BASE62:init", !dbg !1994
br i1 %0, label %initialized, label %not_initialized, !dbg !1994
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_BASE62", !dbg !1994
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_BASE62:init", !dbg !1994
call void @"~Int::DIGITS_BASE62:init"(), !dbg !1994
br label %initialized, !dbg !1994
}
define internal void @"~Int::DIGITS_BASE62:init"() {
entry:
ret void, !dbg !1994
}
define internal %String** @"~Int::DIGITS_UPCASE:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_UPCASE:init", !dbg !1995
br i1 %0, label %initialized, label %not_initialized, !dbg !1995
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_UPCASE", !dbg !1995
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_UPCASE:init", !dbg !1995
call void @"~Int::DIGITS_UPCASE:init"(), !dbg !1995
br label %initialized, !dbg !1995
}
define internal void @"~Int::DIGITS_UPCASE:init"() {
entry:
ret void, !dbg !1995
}
define internal %String** @"~Int::DIGITS_DOWNCASE:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_DOWNCASE:init", !dbg !1995
br i1 %0, label %initialized, label %not_initialized, !dbg !1995
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_DOWNCASE", !dbg !1995
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_DOWNCASE:init", !dbg !1995
call void @"~Int::DIGITS_DOWNCASE:init"(), !dbg !1995
br label %initialized, !dbg !1995
}
define internal void @"~Int::DIGITS_DOWNCASE:init"() {
entry:
ret void, !dbg !1995
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %self, i32 %other) #0 !dbg !181 {
entry:
%0 = call i32 @"*Int32#-:Int32"(i32 %other), !dbg !2011
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %0), !dbg !2012
ret i8* %1, !dbg !2012
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#remainder<Int32>:Int32"(i32 %self, i32 %other) #0 !dbg !182 {
entry:
%0 = icmp eq i32 %other, 0, !dbg !2013
br i1 %0, label %then, label %else, !dbg !2013
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !2014
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !2015
unreachable, !dbg !2015
else: ; preds = %entry
%2 = srem i32 %self, %other, !dbg !2015
ret i32 %2, !dbg !2015
}
; Function Attrs: uwtable
define internal %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"() #0 !dbg !183 {
alloca:
%_ = alloca %DivisionByZeroError*, !dbg !2016
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%DivisionByZeroError* getelementptr (%DivisionByZeroError, %DivisionByZeroError* null, i32 1) to i64)), !dbg !2016
%1 = bitcast i8* %0 to %DivisionByZeroError*, !dbg !2016
%2 = bitcast %DivisionByZeroError* %1 to i8*, !dbg !2016
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%DivisionByZeroError* getelementptr (%DivisionByZeroError, %DivisionByZeroError* null, i32 1) to i32), i32 4, i1 false), !dbg !2016
%3 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %1, i32 0, i32 0, !dbg !2016
store i32 44, i32* %3, !dbg !2016
store %DivisionByZeroError* %1, %DivisionByZeroError** %_, !dbg !2016
%4 = load %DivisionByZeroError*, %DivisionByZeroError** %_, !dbg !2016
call void @"*DivisionByZeroError#initialize:Nil"(%DivisionByZeroError* %4), !dbg !2016
%5 = load %DivisionByZeroError*, %DivisionByZeroError** %_, !dbg !2016
ret %DivisionByZeroError* %5, !dbg !2016
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError#initialize:Nil"(%DivisionByZeroError* %self) #0 !dbg !184 {
alloca:
%message = alloca %String*, !dbg !2017
br label %entry
entry: ; preds = %alloca
store %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Division by 0'" to %String*), %String** %message, !dbg !2018
%0 = load %String*, %String** %message, !dbg !2018
call void @"*DivisionByZeroError#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %0), !dbg !2017
ret void, !dbg !2017
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message) #0 !dbg !185 {
entry:
call void @"*DivisionByZeroError@Exception#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message), !dbg !2019
ret void, !dbg !2019
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError@Exception#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message) #0 !dbg !186 {
alloca:
%cause = alloca %Nil, !dbg !2020
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 1, !dbg !2021
store %String* %message, %String** %0, !dbg !2021
%1 = load %Nil, %Nil* %cause, !dbg !2021
%2 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 2, !dbg !2022
store i32* null, i32** %2, !dbg !2022
ret void, !dbg !2022
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %exception) #1 !dbg !187 {
alloca:
%__temp_46 = alloca %"(CallStack | Nil)", !dbg !2023
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !2023
%0 = alloca %CallStack, !dbg !2023
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %exception, i32 0, i32 3, !dbg !2023
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !2023
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_46, !dbg !2023
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !2023
%4 = load i32, i32* %3, !dbg !2023
%5 = icmp eq i32 %4, 0, !dbg !2023
%6 = xor i1 %5, true, !dbg !2023
%7 = and i1 true, %6, !dbg !2023
br i1 %7, label %then, label %else, !dbg !2023
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_46, i32 0, i32 1, !dbg !2023
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !2023
br label %exit, !dbg !2023
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !2023
store %CallStack %10, %CallStack* %0, !dbg !2023
%11 = load %CallStack, %CallStack* %0, !dbg !2023
%12 = call %CallStack @"*DivisionByZeroError@Exception#callstack=<CallStack>:CallStack"(%DivisionByZeroError* %exception, %CallStack %11), !dbg !2023
br label %exit, !dbg !2023
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !2023
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2023
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !2023
store i64 %15, i64* %16, !dbg !2023
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2023
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !2023
store i64 %18, i64* %19, !dbg !2023
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
%21 = ptrtoint %DivisionByZeroError* %exception to i64, !dbg !2023
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !2023
store i64 %21, i64* %22, !dbg !2023
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !2023
store i32 44, i32* %24, !dbg !2023
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2023
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !2023
unreachable, !dbg !2023
}
; Function Attrs: uwtable
define internal %CallStack @"*DivisionByZeroError@Exception#callstack=<CallStack>:CallStack"(%DivisionByZeroError* %self, %CallStack %callstack) #0 !dbg !188 {
alloca:
%callstack1 = alloca %CallStack, !dbg !2024
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !2024
%0 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 3, !dbg !2024
%1 = load %CallStack, %CallStack* %callstack1, !dbg !2024
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !2024
store i32 344, i32* %2, !dbg !2024
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !2024
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !2024
store %CallStack %1, %CallStack* %4, !dbg !2024
%5 = load %CallStack, %CallStack* %callstack1, !dbg !2024
ret %CallStack %5, !dbg !2024
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#tdiv<Int32>:Int32"(i32 %self, i32 %other) #0 !dbg !189 {
entry:
call void @"*Int32@Int#check_div_argument<Int32>:Nil"(i32 %self, i32 %other), !dbg !2025
%0 = sdiv i32 %self, %other, !dbg !2025
ret i32 %0, !dbg !2025
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#check_div_argument<Int32>:Nil"(i32 %self, i32 %other) #0 !dbg !190 {
alloca:
%__temp_48 = alloca i1, !dbg !2026
%__temp_47 = alloca i1, !dbg !2026
br label %entry
entry: ; preds = %alloca
%0 = icmp eq i32 %other, 0, !dbg !2027
br i1 %0, label %then, label %else, !dbg !2027
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !2028
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !2029
unreachable, !dbg !2029
else: ; preds = %entry
%2 = icmp slt i32 %self, 0, !dbg !2030
store i1 %2, i1* %__temp_48, !dbg !2030
br i1 %2, label %then5, label %else6, !dbg !2030
then1: ; preds = %exit7
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Overflow: Int32::MI...'" to %String*)), !dbg !2030
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !2030
unreachable, !dbg !2030
else2: ; preds = %exit7
ret void, !dbg !2030
then3: ; preds = %exit
%4 = icmp eq i32 %other, -1, !dbg !2030
br label %exit7, !dbg !2030
else4: ; preds = %exit
%5 = load i1, i1* %__temp_47, !dbg !2030
br label %exit7, !dbg !2030
then5: ; preds = %else
%6 = icmp eq i32 %self, -2147483648, !dbg !2030
br label %exit, !dbg !2030
else6: ; preds = %else
%7 = load i1, i1* %__temp_48, !dbg !2030
br label %exit, !dbg !2030
exit: ; preds = %else6, %then5
%8 = phi i1 [ %6, %then5 ], [ %7, %else6 ], !dbg !2030
store i1 %8, i1* %__temp_47, !dbg !2030
br i1 %8, label %then3, label %else4, !dbg !2030
exit7: ; preds = %else4, %then3
%9 = phi i1 [ %4, %then3 ], [ %5, %else4 ], !dbg !2030
br i1 %9, label %then1, label %else2, !dbg !2030
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@Indexable(T)#[]<Int32>:UInt8"([4 x i8]* %self, i32 %index) #3 !dbg !191 {
entry:
%0 = call i8 @"*StaticArray(UInt8, 4)@Indexable(T)#at<Int32>:UInt8"([4 x i8]* %self, i32 %index), !dbg !2031
ret i8 %0, !dbg !2031
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@Indexable(T)#at<Int32>:UInt8"([4 x i8]* %self, i32 %index) #3 !dbg !192 {
alloca:
%index1 = alloca i32, !dbg !2032
%index2 = alloca i32, !dbg !2033
%__temp_70 = alloca i1, !dbg !2033
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !2032
%0 = load i32, i32* %index1, !dbg !2032
store i32 %0, i32* %index2, !dbg !2033
%1 = load i32, i32* %index2, !dbg !2034
%2 = icmp slt i32 %1, 0, !dbg !2034
br i1 %2, label %then, label %else, !dbg !2034
then: ; preds = %entry
%3 = load i32, i32* %index2, !dbg !2034
%4 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !2035
%5 = add i32 %3, %4, !dbg !2035
store i32 %5, i32* %index2, !dbg !2034
br label %exit, !dbg !2034
else: ; preds = %entry
br label %exit, !dbg !2034
exit: ; preds = %else, %then
%6 = load i32, i32* %index2, !dbg !2036
%7 = icmp sle i32 0, %6, !dbg !2036
store i1 %7, i1* %__temp_70, !dbg !2036
br i1 %7, label %then5, label %else6, !dbg !2036
then3: ; preds = %exit7
%8 = load i32, i32* %index2, !dbg !2037
br label %exit8, !dbg !2037
else4: ; preds = %exit7
%9 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !2038
call void @"*raise<IndexError>:NoReturn"(%IndexError* %9), !dbg !2039
unreachable, !dbg !2039
then5: ; preds = %exit
%10 = load i32, i32* %index2, !dbg !2036
%11 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !2037
%12 = icmp slt i32 %10, %11, !dbg !2037
br label %exit7, !dbg !2037
else6: ; preds = %exit
%13 = load i1, i1* %__temp_70, !dbg !2037
br label %exit7, !dbg !2037
exit7: ; preds = %else6, %then5
%14 = phi i1 [ %12, %then5 ], [ %13, %else6 ], !dbg !2037
br i1 %14, label %then3, label %else4, !dbg !2037
exit8: ; preds = %then3
%15 = phi i32 [ %8, %then3 ], !dbg !2039
store i32 %15, i32* %index1, !dbg !2040
%16 = load i32, i32* %index1, !dbg !2040
%17 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#unsafe_at<Int32>:UInt8"([4 x i8]* %self, i32 %16), !dbg !2041
ret i8 %17, !dbg !2041
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#unsafe_at<Int32>:UInt8"([4 x i8]* %self, i32 %index) #3 !dbg !193 {
entry:
%0 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !2042
%1 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %0, i32 %index), !dbg !2042
ret i8 %1, !dbg !2042
}
; Function Attrs: uwtable
define internal %String* @"*String#+<Char>:String"(%String* %self, i32 %char) #0 !dbg !194 {
alloca:
%__temp_207 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !2043
%bytes = alloca [4 x i8], !dbg !2043
%count = alloca i32, !dbg !2043
%size = alloca i32, !dbg !2043
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !2044
%buffer = alloca i8*, !dbg !2045
%capacity = alloca i32, !dbg !2045
%str = alloca i8*, !dbg !2045
%buffer1 = alloca i8*, !dbg !2045
%__temp_208 = alloca %"Tuple(Int32, Int32)", !dbg !2045
%bytesize = alloca i32, !dbg !2045
%size2 = alloca i32, !dbg !2045
%__temp_210 = alloca i1, !dbg !2045
%str_header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !2045
%1 = alloca %"Tuple(Int32, Int32)", !dbg !2046
%2 = alloca %"Tuple(Int32, Int32)", !dbg !2046
%3 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !2047
br label %entry
entry: ; preds = %alloca
%4 = call %"Tuple(StaticArray(UInt8, 4), Int32)" @"*String::char_bytes_and_bytesize<Char>:Tuple(StaticArray(UInt8, 4), Int32)"(i32 %char), !dbg !2044
store %"Tuple(StaticArray(UInt8, 4), Int32)" %4, %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !2044
%5 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !2044
store %"Tuple(StaticArray(UInt8, 4), Int32)" %5, %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_207, !dbg !2044
%6 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_207, i32 0, i32 0, !dbg !2044
%7 = load [4 x i8], [4 x i8]* %6, !dbg !2048
store [4 x i8] %7, [4 x i8]* %bytes, !dbg !2048
%8 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_207, i32 0, i32 1, !dbg !2048
%9 = load i32, i32* %8, !dbg !2048
store i32 %9, i32* %count, !dbg !2049
%10 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !2049
%11 = load i32, i32* %10, !dbg !2049
%12 = load i32, i32* %count, !dbg !2049
%13 = add i32 %11, %12, !dbg !2049
store i32 %13, i32* %size, !dbg !2050
%14 = load i32, i32* %size, !dbg !2050
store i32 %14, i32* %capacity, !dbg !2045
%15 = load i32, i32* %capacity, !dbg !2045
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %15), !dbg !2051
%16 = load i32, i32* %capacity, !dbg !2051
%17 = add i32 %16, i64 12, !dbg !2051
%18 = add i32 %17, 1, !dbg !2051
%19 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %18), !dbg !2052
store i8* %19, i8** %str, !dbg !2053
%20 = load i8*, i8** %str, !dbg !2053
%21 = bitcast i8* %20 to %String*, !dbg !2053
%22 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %21), !dbg !2054
store i8* %22, i8** %buffer1, !dbg !2055
%23 = load i8*, i8** %buffer1, !dbg !2055
store i8* %23, i8** %buffer, !dbg !2055
%24 = load i8*, i8** %buffer, !dbg !2055
%25 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !2056
%26 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !2056
%27 = load i32, i32* %26, !dbg !2056
%28 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %24, i8* %25, i32 %27), !dbg !2057
%29 = load i8*, i8** %buffer, !dbg !2057
%30 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !2057
%31 = load i32, i32* %30, !dbg !2057
%32 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %29, i32 %31), !dbg !2058
%33 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %bytes), !dbg !2059
%34 = load i32, i32* %count, !dbg !2059
%35 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %32, i8* %33, i32 %34), !dbg !2060
%36 = call i1 @"*String#size_known?:Bool"(%String* %self), !dbg !2046
br i1 %36, label %then, label %else, !dbg !2046
then: ; preds = %entry
%37 = load i32, i32* %size, !dbg !2046
%38 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %1, i32 0, i32 0, !dbg !2046
store i32 %37, i32* %38, !dbg !2046
%39 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !2046
%40 = load i32, i32* %39, !dbg !2046
%41 = add i32 %40, 1, !dbg !2046
%42 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %1, i32 0, i32 1, !dbg !2046
store i32 %41, i32* %42, !dbg !2046
br label %exit, !dbg !2046
else: ; preds = %entry
%43 = load i32, i32* %size, !dbg !2046
%44 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %2, i32 0, i32 0, !dbg !2046
store i32 %43, i32* %44, !dbg !2046
%45 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %2, i32 0, i32 1, !dbg !2046
store i32 0, i32* %45, !dbg !2046
br label %exit, !dbg !2046
exit: ; preds = %else, %then
%46 = phi %"Tuple(Int32, Int32)"* [ %1, %then ], [ %2, %else ], !dbg !2046
%47 = load %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %46, !dbg !2061
store %"Tuple(Int32, Int32)" %47, %"Tuple(Int32, Int32)"* %__temp_208, !dbg !2061
%48 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %__temp_208, i32 0, i32 0, !dbg !2061
%49 = load i32, i32* %48, !dbg !2061
store i32 %49, i32* %bytesize, !dbg !2062
%50 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %__temp_208, i32 0, i32 1, !dbg !2062
%51 = load i32, i32* %50, !dbg !2062
store i32 %51, i32* %size2, !dbg !2063
%52 = load i32, i32* %bytesize, !dbg !2064
%53 = icmp sle i32 0, %52, !dbg !2064
store i1 %53, i1* %__temp_210, !dbg !2064
br i1 %53, label %then5, label %else6, !dbg !2064
then3: ; preds = %exit7
br label %exit8, !dbg !2064
else4: ; preds = %exit7
%54 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Bytesize out of cap...'" to %String*)), !dbg !2065
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %54), !dbg !2066
unreachable, !dbg !2066
then5: ; preds = %exit
%55 = load i32, i32* %bytesize, !dbg !2064
%56 = load i32, i32* %capacity, !dbg !2064
%57 = icmp sle i32 %55, %56, !dbg !2064
br label %exit7, !dbg !2064
else6: ; preds = %exit
%58 = load i1, i1* %__temp_210, !dbg !2064
br label %exit7, !dbg !2064
exit7: ; preds = %else6, %then5
%59 = phi i1 [ %57, %then5 ], [ %58, %else6 ], !dbg !2064
br i1 %59, label %then3, label %else4, !dbg !2064
exit8: ; preds = %then3
%60 = load i8*, i8** %buffer1, !dbg !2066
%61 = load i32, i32* %bytesize, !dbg !2066
%62 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %60, i32 %61, i8 0), !dbg !2067
%63 = load i32, i32* %bytesize, !dbg !2068
%64 = load i32, i32* %capacity, !dbg !2068
%65 = icmp slt i32 %63, %64, !dbg !2068
br i1 %65, label %then9, label %else10, !dbg !2068
then9: ; preds = %exit8
%66 = load i8*, i8** %str, !dbg !2068
%67 = load i32, i32* %bytesize, !dbg !2068
%68 = add i32 %67, i64 12, !dbg !2068
%69 = add i32 %68, 1, !dbg !2068
%70 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %66, i32 %69), !dbg !2069
store i8* %70, i8** %str, !dbg !2070
br label %exit11, !dbg !2070
else10: ; preds = %exit8
br label %exit11, !dbg !2070
exit11: ; preds = %else10, %then9
%71 = load i8*, i8** %str, !dbg !2070
%72 = bitcast i8* %71 to %"Tuple(Int32, Int32, Int32)"*, !dbg !2070
store %"Tuple(Int32, Int32, Int32)"* %72, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !2047
%73 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !2047
%74 = load i32, i32* @"String::TYPE_ID", !dbg !2047
%75 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 0, !dbg !2047
store i32 %74, i32* %75, !dbg !2047
%76 = load i32, i32* %bytesize, !dbg !2047
%77 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 1, !dbg !2047
store i32 %76, i32* %77, !dbg !2047
%78 = load i32, i32* %size2, !dbg !2047
%79 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 2, !dbg !2047
store i32 %78, i32* %79, !dbg !2047
%80 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, !dbg !2047
store %"Tuple(Int32, Int32, Int32)" %80, %"Tuple(Int32, Int32, Int32)"* %73, !dbg !2047
%81 = load i8*, i8** %str, !dbg !2047
%82 = bitcast i8* %81 to %String*, !dbg !2047
ret %String* %82, !dbg !2047
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %self, i8* %source, i32 %count) #0 !dbg !195 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %source, i8* %self, i32 %count), !dbg !2071
ret i8* %0, !dbg !2071
}
; Function Attrs: uwtable
define internal i1 @"*String#size_known?:Bool"(%String* %self) #0 !dbg !196 {
alloca:
%__temp_209 = alloca i1, !dbg !2072
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !2073
%1 = load i32, i32* %0, !dbg !2073
%2 = icmp eq i32 %1, 0, !dbg !2073
store i1 %2, i1* %__temp_209, !dbg !2073
br i1 %2, label %then, label %else, !dbg !2073
then: ; preds = %entry
%3 = load i1, i1* %__temp_209, !dbg !2073
br label %exit, !dbg !2073
else: ; preds = %entry
%4 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !2073
%5 = load i32, i32* %4, !dbg !2073
%6 = icmp sgt i32 %5, 0, !dbg !2073
br label %exit, !dbg !2073
exit: ; preds = %else, %then
%7 = phi i1 [ %3, %then ], [ %6, %else ], !dbg !2073
ret i1 %7, !dbg !2073
}
define internal void @"~CallStack::skip:init"() {
entry:
%0 = call %"Array(String)"* @"*Array(String)@Array(T)::new:Array(String)"(i32 492)
store %"Array(String)"* %0, %"Array(String)"** @"CallStack::skip"
ret void
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Array(String)@Array(T)::new:Array(String)"(i32 %self) #0 !dbg !197 {
alloca:
%_ = alloca %"Array(String)"*, !dbg !2074
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Array(String)"* getelementptr (%"Array(String)", %"Array(String)"* null, i32 1) to i64)), !dbg !2074
%1 = bitcast i8* %0 to %"Array(String)"*, !dbg !2074
%2 = bitcast %"Array(String)"* %1 to i8*, !dbg !2074
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Array(String)"* getelementptr (%"Array(String)", %"Array(String)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2074
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %1, i32 0, i32 0, !dbg !2074
store i32 7, i32* %3, !dbg !2074
store %"Array(String)"* %1, %"Array(String)"** %_, !dbg !2074
%4 = load %"Array(String)"*, %"Array(String)"** %_, !dbg !2074
%5 = call %String** @"*Array(String)@Array(T)#initialize:Pointer(String)"(%"Array(String)"* %4), !dbg !2074
%6 = load %"Array(String)"*, %"Array(String)"** %_, !dbg !2074
ret %"Array(String)"* %6, !dbg !2074
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#initialize:Pointer(String)"(%"Array(String)"* %self) #0 !dbg !198 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !2075
store i32 0, i32* %0, !dbg !2075
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2076
store i32 0, i32* %1, !dbg !2076
%2 = call %String** @"*Pointer(String)@Pointer(T)::null:Pointer(String)"(i32 743), !dbg !2077
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2078
store %String** %2, %String*** %3, !dbg !2078
ret %String** %2, !dbg !2078
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)::null:Pointer(String)"(i32 %self) #0 !dbg !199 {
entry:
ret %String** null, !dbg !2079
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* %filename) #0 !dbg !200 {
entry:
%0 = call %"Array(String)"** @"~CallStack::skip:read"(), !dbg !2080
%1 = load %"Array(String)"*, %"Array(String)"** %0, !dbg !2080
%2 = call %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %1, %String* %filename), !dbg !2081
ret %"Array(String)"* %2, !dbg !2081
}
define internal %"Array(String)"** @"~CallStack::skip:read"() {
entry:
%0 = load i1, i1* @"CallStack::skip:init", !dbg !2080
br i1 %0, label %initialized, label %not_initialized, !dbg !2080
initialized: ; preds = %not_initialized, %entry
ret %"Array(String)"** @"CallStack::skip", !dbg !2080
not_initialized: ; preds = %entry
store i1 true, i1* @"CallStack::skip:init", !dbg !2080
call void @"~CallStack::skip:init"(), !dbg !2080
br label %initialized, !dbg !2080
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %self, %String* %value) #0 !dbg !201 {
entry:
%0 = call %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %self, %String* %value), !dbg !2082
ret %"Array(String)"* %0, !dbg !2082
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %self, %String* %value) #0 !dbg !202 {
entry:
%0 = call %String** @"*Array(String)@Array(T)#check_needs_resize:(Pointer(String) | Nil)"(%"Array(String)"* %self), !dbg !2083
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2083
%2 = load %String**, %String*** %1, !dbg !2083
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !2083
%4 = load i32, i32* %3, !dbg !2083
%5 = call %String* @"*Pointer(String)@Pointer(T)#[]=<Int32, String>:String"(%String** %2, i32 %4, %String* %value), !dbg !2084
%6 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !2084
%7 = load i32, i32* %6, !dbg !2084
%8 = add i32 %7, 1, !dbg !2084
%9 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !2085
store i32 %8, i32* %9, !dbg !2085
ret %"Array(String)"* %self, !dbg !2085
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#check_needs_resize:(Pointer(String) | Nil)"(%"Array(String)"* %self) #0 !dbg !203 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !2086
%1 = load i32, i32* %0, !dbg !2086
%2 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2086
%3 = load i32, i32* %2, !dbg !2086
%4 = icmp eq i32 %1, %3, !dbg !2086
br i1 %4, label %then, label %else, !dbg !2086
then: ; preds = %entry
%5 = call %String** @"*Array(String)@Array(T)#double_capacity:Pointer(String)"(%"Array(String)"* %self), !dbg !2086
br label %exit, !dbg !2086
else: ; preds = %entry
br label %exit, !dbg !2086
exit: ; preds = %else, %then
%6 = phi %String** [ %5, %then ], [ null, %else ], !dbg !2086
ret %String** %6, !dbg !2086
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#double_capacity:Pointer(String)"(%"Array(String)"* %self) #0 !dbg !204 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2087
%1 = load i32, i32* %0, !dbg !2087
%2 = icmp eq i32 %1, 0, !dbg !2087
br i1 %2, label %then, label %else, !dbg !2087
then: ; preds = %entry
br label %exit, !dbg !2087
else: ; preds = %entry
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2087
%4 = load i32, i32* %3, !dbg !2087
%5 = mul i32 %4, 2, !dbg !2087
br label %exit, !dbg !2087
exit: ; preds = %else, %then
%6 = phi i32 [ 3, %then ], [ %5, %else ], !dbg !2087
%7 = call %String** @"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String)"(%"Array(String)"* %self, i32 %6), !dbg !2088
ret %String** %7, !dbg !2088
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String)"(%"Array(String)"* %self, i32 %capacity) #0 !dbg !205 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2089
store i32 %capacity, i32* %0, !dbg !2089
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2090
%2 = load %String**, %String*** %1, !dbg !2090
%3 = icmp ne %String** %2, null, !dbg !2090
br i1 %3, label %then, label %else, !dbg !2090
then: ; preds = %entry
%4 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2090
%5 = load %String**, %String*** %4, !dbg !2090
%6 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2090
%7 = load i32, i32* %6, !dbg !2090
%8 = call %String** @"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String)"(%String** %5, i32 %7), !dbg !2091
%9 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2092
store %String** %8, %String*** %9, !dbg !2092
br label %exit, !dbg !2092
else: ; preds = %entry
%10 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !2092
%11 = load i32, i32* %10, !dbg !2092
%12 = call %String** @"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String)"(i32 743, i32 %11), !dbg !2093
%13 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !2094
store %String** %12, %String*** %13, !dbg !2094
br label %exit, !dbg !2094
exit: ; preds = %else, %then
%14 = phi %String** [ %8, %then ], [ %12, %else ], !dbg !2094
ret %String** %14, !dbg !2094
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String)"(%String** %self, i32 %size) #0 !dbg !206 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2095
br i1 %0, label %then, label %else, !dbg !2095
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !2096
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2097
unreachable, !dbg !2097
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2097
%3 = bitcast %String** %self to i8*, !dbg !2097
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !2097
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !2097
%6 = bitcast i8* %5 to %String**, !dbg !2097
ret %String** %6, !dbg !2097
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String)"(i32 %self, i32 %size) #0 !dbg !207 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2098
br i1 %0, label %then, label %else, !dbg !2098
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !2099
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2100
unreachable, !dbg !2100
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2100
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !2101
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !2101
%5 = trunc i64 %3 to i32, !dbg !2101
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !2101
%6 = bitcast i8* %4 to %String**, !dbg !2101
ret %String** %6, !dbg !2100
}
; Function Attrs: uwtable
define internal %String* @"*Pointer(String)@Pointer(T)#[]=<Int32, String>:String"(%String** %self, i32 %offset, %String* %value) #0 !dbg !208 {
entry:
%0 = call %String** @"*Pointer(String)@Pointer(T)#+<Int32>:Pointer(String)"(%String** %self, i32 %offset), !dbg !2102
store %String* %value, %String** %0, !dbg !2102
ret %String* %value, !dbg !2102
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)#+<Int32>:Pointer(String)"(%String** %self, i32 %other) #0 !dbg !209 {
entry:
%0 = sext i32 %other to i64, !dbg !2103
%1 = getelementptr inbounds %String*, %String** %self, i64 %0, !dbg !2103
ret %String** %1, !dbg !2103
}
define internal void @"~LibC::SIG_DFL:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 692)
%1 = call %"->" @"*Proc(Int32, Nil)@Proc(T, R)::new<Pointer(Void), Pointer(Void)>:Proc(Int32, Nil)"(i32 1048, i8* null, i8* %0)
store %"->" %1, %"->"* @"LibC::SIG_DFL"
ret void
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 %self) #0 !dbg !210 {
entry:
ret i8* null, !dbg !2104
}
; Function Attrs: uwtable
define internal %"->" @"*Proc(Int32, Nil)@Proc(T, R)::new<Pointer(Void), Pointer(Void)>:Proc(Int32, Nil)"(i32 %self, i8* %pointer, i8* %closure_data) #0 !dbg !211 {
alloca:
%func = alloca %"Tuple(Pointer(Void), Pointer(Void))", !dbg !2105
%ptr = alloca %"->"*, !dbg !2105
%0 = alloca %"Tuple(Pointer(Void), Pointer(Void))", !dbg !2105
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"Tuple(Pointer(Void), Pointer(Void))", %"Tuple(Pointer(Void), Pointer(Void))"* %0, i32 0, i32 0, !dbg !2105
store i8* %pointer, i8** %1, !dbg !2105
%2 = getelementptr inbounds %"Tuple(Pointer(Void), Pointer(Void))", %"Tuple(Pointer(Void), Pointer(Void))"* %0, i32 0, i32 1, !dbg !2105
store i8* %closure_data, i8** %2, !dbg !2105
%3 = load %"Tuple(Pointer(Void), Pointer(Void))", %"Tuple(Pointer(Void), Pointer(Void))"* %0, !dbg !2106
store %"Tuple(Pointer(Void), Pointer(Void))" %3, %"Tuple(Pointer(Void), Pointer(Void))"* %func, !dbg !2106
%4 = bitcast %"Tuple(Pointer(Void), Pointer(Void))"* %func to %"->"*, !dbg !2106
store %"->"* %4, %"->"** %ptr, !dbg !2107
%5 = load %"->"*, %"->"** %ptr, !dbg !2107
%6 = load %"->", %"->"* %5, !dbg !2107
ret %"->" %6, !dbg !2107
}
define internal void @"~LibC::SIG_IGN:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 692)
%1 = call %"->" @"*Proc(Int32, Nil)@Proc(T, R)::new<Pointer(Void), Pointer(Void)>:Proc(Int32, Nil)"(i32 1048, i8* inttoptr (i64 1 to i8*), i8* %0)
store %"->" %1, %"->"* @"LibC::SIG_IGN"
ret void
}
define internal void @"~String::CHAR_TO_DIGIT:init"() {
alloca:
%table = alloca [256 x i8]
%0 = alloca [256 x i8]
%i = alloca i8
%i1 = alloca i8
%i2 = alloca i8
%i3 = alloca i8
br label %entry
entry: ; preds = %alloca
%1 = call [256 x i8] @"*StaticArray(Int8, 256)@StaticArray(T, N)::new<Int8>:StaticArray(Int8, 256)"(i32 922, i8 -1)
store [256 x i8] %1, [256 x i8]* %0
%2 = load [256 x i8], [256 x i8]* %0
store [256 x i8] %2, [256 x i8]* %table
store i8 0, i8* %i1
br label %while
while: ; preds = %body, %entry
%3 = load i8, i8* %i1
%4 = icmp slt i8 %3, 10
br i1 %4, label %body, label %exit
body: ; preds = %while
%5 = load i8, i8* %i1
store i8 %5, i8* %i
%6 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %table)
%7 = load i8, i8* %i
%8 = sext i8 %7 to i32
%9 = add i32 48, %8
%10 = load i8, i8* %i
%11 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %6, i32 %9, i8 %10)
%12 = load i8, i8* %i1
%13 = sext i8 %12 to i32
%14 = add i32 %13, 1
%15 = trunc i32 %14 to i8
store i8 %15, i8* %i1
br label %while
exit: ; preds = %while
store i8 0, i8* %i3
br label %while4
while4: ; preds = %body5, %exit
%16 = load i8, i8* %i3
%17 = icmp slt i8 %16, 26
br i1 %17, label %body5, label %exit6
body5: ; preds = %while4
%18 = load i8, i8* %i3
store i8 %18, i8* %i2
%19 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %table)
%20 = load i8, i8* %i2
%21 = sext i8 %20 to i32
%22 = add i32 65, %21
%23 = load i8, i8* %i2
%24 = sext i8 %23 to i32
%25 = add i32 %24, 10
%26 = trunc i32 %25 to i8
%27 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %19, i32 %22, i8 %26)
%28 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %table)
%29 = load i8, i8* %i2
%30 = sext i8 %29 to i32
%31 = add i32 97, %30
%32 = load i8, i8* %i2
%33 = sext i8 %32 to i32
%34 = add i32 %33, 10
%35 = trunc i32 %34 to i8
%36 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %28, i32 %31, i8 %35)
%37 = load i8, i8* %i3
%38 = sext i8 %37 to i32
%39 = add i32 %38, 1
%40 = trunc i32 %39 to i8
store i8 %40, i8* %i3
br label %while4
exit6: ; preds = %while4
%41 = load [256 x i8], [256 x i8]* %table
store [256 x i8] %41, [256 x i8]* @"String::CHAR_TO_DIGIT"
ret void
}
; Function Attrs: uwtable
define internal [256 x i8] @"*StaticArray(Int8, 256)@StaticArray(T, N)::new<Int8>:StaticArray(Int8, 256)"(i32 %self, i8 %value) #0 !dbg !213 {
alloca:
%array = alloca [256 x i8], !dbg !2108
%i = alloca i32, !dbg !2109
%i1 = alloca i32, !dbg !2109
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %i1, !dbg !2110
br label %while, !dbg !2110
while: ; preds = %body, %entry
%0 = load i32, i32* %i1, !dbg !2111
%1 = icmp slt i32 %0, 256, !dbg !2111
br i1 %1, label %body, label %exit, !dbg !2111
body: ; preds = %while
%2 = load i32, i32* %i1, !dbg !2111
store i32 %2, i32* %i, !dbg !2111
%3 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %array), !dbg !2112
%4 = load i32, i32* %i, !dbg !2112
%5 = load i32, i32* %i, !dbg !2112
%6 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %3, i32 %4, i8 %value), !dbg !2112
%7 = load i32, i32* %i1, !dbg !2112
%8 = add i32 %7, 1, !dbg !2112
store i32 %8, i32* %i1, !dbg !2113
br label %while, !dbg !2113
exit: ; preds = %while
%9 = load [256 x i8], [256 x i8]* %array, !dbg !2113
ret [256 x i8] %9, !dbg !2113
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %self) #0 !dbg !214 {
entry:
%0 = getelementptr inbounds [256 x i8], [256 x i8]* %self, i32 0, i32 0, !dbg !2114
ret i8* %0, !dbg !2114
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %self, i32 %offset, i8 %value) #0 !dbg !215 {
entry:
%0 = call i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %offset), !dbg !2115
store i8 %value, i8* %0, !dbg !2115
ret i8 %value, !dbg !2115
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %other) #0 !dbg !216 {
entry:
%0 = sext i32 %other to i64, !dbg !2116
%1 = getelementptr inbounds i8, i8* %self, i64 %0, !dbg !2116
ret i8* %1, !dbg !2116
}
define internal void @"~String::CHAR_TO_DIGIT62:init"() {
alloca:
%table = alloca [256 x i8]
%0 = alloca [256 x i8]
%i = alloca i8
%i1 = alloca i8
br label %entry
entry: ; preds = %alloca
%1 = call [256 x i8]* @"~String::CHAR_TO_DIGIT:read"()
%2 = call [256 x i8] @"*StaticArray(Int8, 256)@StaticArray(T, N)#clone:StaticArray(Int8, 256)"([256 x i8]* %1)
store [256 x i8] %2, [256 x i8]* %0
%3 = load [256 x i8], [256 x i8]* %0
store [256 x i8] %3, [256 x i8]* %table
store i8 0, i8* %i1
br label %while
while: ; preds = %body, %entry
%4 = load i8, i8* %i1
%5 = icmp slt i8 %4, 26
br i1 %5, label %body, label %exit
body: ; preds = %while
%6 = load i8, i8* %i1
store i8 %6, i8* %i
%7 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %table)
%8 = load i8, i8* %i
%9 = sext i8 %8 to i32
%10 = add i32 65, %9
%11 = load i8, i8* %i
%12 = sext i8 %11 to i32
%13 = add i32 %12, 36
%14 = trunc i32 %13 to i8
%15 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %7, i32 %10, i8 %14)
%16 = load i8, i8* %i1
%17 = sext i8 %16 to i32
%18 = add i32 %17, 1
%19 = trunc i32 %18 to i8
store i8 %19, i8* %i1
br label %while
exit: ; preds = %while
%20 = load [256 x i8], [256 x i8]* %table
store [256 x i8] %20, [256 x i8]* @"String::CHAR_TO_DIGIT62"
ret void
}
define internal [256 x i8]* @"~String::CHAR_TO_DIGIT:read"() {
entry:
%0 = load i1, i1* @"String::CHAR_TO_DIGIT:init"
br i1 %0, label %initialized, label %not_initialized
initialized: ; preds = %not_initialized, %entry
ret [256 x i8]* @"String::CHAR_TO_DIGIT"
not_initialized: ; preds = %entry
store i1 true, i1* @"String::CHAR_TO_DIGIT:init"
call void @"~String::CHAR_TO_DIGIT:init"()
br label %initialized
}
; Function Attrs: uwtable
define internal [256 x i8] @"*StaticArray(Int8, 256)@StaticArray(T, N)#clone:StaticArray(Int8, 256)"([256 x i8]* %self) #0 !dbg !217 {
alloca:
%array = alloca [256 x i8], !dbg !2117
%i = alloca i32, !dbg !2118
%i1 = alloca i32, !dbg !2118
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %i1, !dbg !2119
br label %while, !dbg !2119
while: ; preds = %body, %entry
%0 = load i32, i32* %i1, !dbg !2120
%1 = icmp slt i32 %0, 256, !dbg !2120
br i1 %1, label %body, label %exit, !dbg !2120
body: ; preds = %while
%2 = load i32, i32* %i1, !dbg !2120
store i32 %2, i32* %i, !dbg !2120
%3 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %array), !dbg !2121
%4 = load i32, i32* %i, !dbg !2121
%5 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %self), !dbg !2122
%6 = load i32, i32* %i, !dbg !2122
%7 = call i8 @"*Pointer(Int8)@Pointer(T)#[]<Int32>:Int8"(i8* %5, i32 %6), !dbg !2122
%8 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %3, i32 %4, i8 %7), !dbg !2121
%9 = load i32, i32* %i1, !dbg !2121
%10 = add i32 %9, 1, !dbg !2121
store i32 %10, i32* %i1, !dbg !2123
br label %while, !dbg !2123
exit: ; preds = %while
%11 = load [256 x i8], [256 x i8]* %array, !dbg !2123
ret [256 x i8] %11, !dbg !2123
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(Int8)@Pointer(T)#[]<Int32>:Int8"(i8* %self, i32 %offset) #0 !dbg !218 {
entry:
%0 = call i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %offset), !dbg !2124
%1 = load i8, i8* %0, !dbg !2124
ret i8 %1, !dbg !2124
}
define internal void @"~LibC::MAP_FAILED:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::new<Int32>:Pointer(Void)"(i32 692, i32 -1)
store i8* %0, i8** @"LibC::MAP_FAILED"
ret void
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Void)@Pointer(T)::new<Int32>:Pointer(Void)"(i32 %self, i32 %address) #0 !dbg !219 {
entry:
%0 = sext i32 %address to i64, !dbg !2125
%1 = inttoptr i64 %0 to i8*, !dbg !2125
ret i8* %1, !dbg !2125
}
; Function Attrs: noinline uwtable
define i8* @_fiber_get_stack_top() #4 !dbg !1346 {
alloca:
%dummy = alloca i32, !dbg !2126
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %dummy to i8*, !dbg !2126
ret i8* %0, !dbg !2126
}
define internal void @"~Fiber::stack_pool:init"() {
entry:
%0 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)::new:Array(Pointer(Void))"(i32 493)
store %"Array(Pointer(Void))"* %0, %"Array(Pointer(Void))"** @"Fiber::stack_pool"
ret void
}
define internal void @"~Fiber::root:init"() {
entry:
%0 = call %Fiber* @"*Fiber::new:Fiber"()
store %Fiber* %0, %Fiber** @"Fiber::root"
ret void
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber::new:Fiber"() #0 !dbg !220 {
alloca:
%_ = alloca %Fiber*, !dbg !2127
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i64)), !dbg !2127
%1 = bitcast i8* %0 to %Fiber*, !dbg !2127
%2 = bitcast %Fiber* %1 to i8*, !dbg !2127
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i32), i32 4, i1 false), !dbg !2127
%3 = getelementptr inbounds %Fiber, %Fiber* %1, i32 0, i32 0, !dbg !2127
store i32 94, i32* %3, !dbg !2127
store %Fiber* %1, %Fiber** %_, !dbg !2127
%4 = load %Fiber*, %Fiber** %_, !dbg !2127
%5 = call %Fiber* @"*Fiber#initialize:Fiber"(%Fiber* %4), !dbg !2127
%6 = load %Fiber*, %Fiber** %_, !dbg !2127
ret %Fiber* %6, !dbg !2127
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber#initialize:Fiber"(%Fiber* %self) #0 !dbg !222 {
alloca:
%0 = alloca %"->", !dbg !2128
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2128
store i8* bitcast (void ()* @"~procProc(Nil)@src/fiber.cr:83" to i8*), i8** %1, !dbg !2128
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2128
store i8* null, i8** %2, !dbg !2128
%3 = load %"->", %"->"* %0, !dbg !2128
%4 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 8, !dbg !2129
%5 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %4, i32 0, i32 0, !dbg !2129
store i32 444, i32* %5, !dbg !2129
%6 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %4, i32 0, i32 1, !dbg !2129
%7 = bitcast [2 x i64]* %6 to %"->"*, !dbg !2129
store %"->" %3, %"->"* %7, !dbg !2129
%8 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 692), !dbg !2130
%9 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !2131
store i8* %8, i8** %9, !dbg !2131
%10 = call i8* @_fiber_get_stack_top(), !dbg !2132
%11 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !2133
store i8* %10, i8** %11, !dbg !2133
%12 = call i8* @"*GC::stack_bottom:Pointer(Void)"(), !dbg !2134
%13 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !2135
store i8* %12, i8** %13, !dbg !2135
%14 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 7, !dbg !2136
store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'main'" to %String*), %String** %14, !dbg !2136
store %Fiber* %self, %Fiber** @"Fiber::last_fiber", !dbg !2137
store %Fiber* %self, %Fiber** @"Fiber::first_fiber", !dbg !2138
ret %Fiber* %self, !dbg !2138
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@src/fiber.cr:83"() #0 !dbg !223 {
entry:
ret void, !dbg !2139
}
; Function Attrs: uwtable
define internal i8* @"*GC::stack_bottom:Pointer(Void)"() #0 !dbg !224 {
entry:
%0 = load i8*, i8** @GC_stackbottom, !dbg !2140
ret i8* %0, !dbg !2140
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread::current:Thread"() #0 !dbg !225 {
entry:
%0 = call %Thread** @"~Thread::current:read"()
%1 = load %Thread*, %Thread** %0
ret %Thread* %1
}
define internal %Thread** @"~Thread::current:read"() {
entry:
%0 = load i1, i1* @"Thread::current:init", !dbg !2141
br i1 %0, label %initialized, label %not_initialized, !dbg !2141
initialized: ; preds = %not_initialized, %entry
ret %Thread** @"Thread::current"
not_initialized: ; preds = %entry
store i1 true, i1* @"Thread::current:init", !dbg !2141
call void @"~Thread::current:init"()
br label %initialized
}
define internal void @"~Thread::current:init"() {
entry:
%0 = call %Thread* @"*Thread::new:Thread"()
store %Thread* %0, %Thread** @"Thread::current"
ret void
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread::new:Thread"() #0 !dbg !227 {
alloca:
%_ = alloca %Thread*, !dbg !2142
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Thread* getelementptr (%Thread, %Thread* null, i32 1) to i64)), !dbg !2142
%1 = bitcast i8* %0 to %Thread*, !dbg !2142
%2 = bitcast %Thread* %1 to i8*, !dbg !2142
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%Thread* getelementptr (%Thread, %Thread* null, i32 1) to i32), i32 4, i1 false), !dbg !2142
%3 = getelementptr inbounds %Thread, %Thread* %1, i32 0, i32 3, !dbg !2142
store i1 false, i1* %3, !dbg !2142
%4 = getelementptr inbounds %Thread, %Thread* %1, i32 0, i32 0, !dbg !2142
store i32 144, i32* %4, !dbg !2142
store %Thread* %1, %Thread** %_, !dbg !2142
%5 = load %Thread*, %Thread** %_, !dbg !2142
%6 = call i64 @"*Thread#initialize:UInt64"(%Thread* %5), !dbg !2142
%7 = load %Thread*, %Thread** %_, !dbg !2142
call void @"*GC::add_finalizer<Thread>:Nil"(%Thread* %7), !dbg !2142
%8 = load %Thread*, %Thread** %_, !dbg !2142
ret %Thread* %8, !dbg !2142
}
; Function Attrs: uwtable
define internal i64 @"*Thread#initialize:UInt64"(%Thread* %self) #0 !dbg !228 {
alloca:
%0 = alloca %"->", !dbg !2143
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2143
store i8* bitcast (void ()* @"~procProc(Nil)@src/thread.cr:33" to i8*), i8** %1, !dbg !2143
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2143
store i8* null, i8** %2, !dbg !2143
%3 = load %"->", %"->"* %0, !dbg !2143
%4 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 4, !dbg !2144
store %"->" %3, %"->"* %4, !dbg !2144
%5 = call %"Set(Thread)"* @"~Thread::threads:read"()
%6 = call %"Set(Thread)" @"*Set(Thread)@Set(T)#<<<Thread>:Set(Thread)"(%"Set(Thread)"* %5, %Thread* %self), !dbg !2145
%7 = call i64 @pthread_self(), !dbg !2146
%8 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 1, !dbg !2147
%9 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %8, i32 0, i32 0, !dbg !2147
store i32 155, i32* %9, !dbg !2147
%10 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %8, i32 0, i32 1, !dbg !2147
%11 = bitcast [1 x i64]* %10 to i64*, !dbg !2147
store i64 %7, i64* %11, !dbg !2147
ret i64 %7, !dbg !2147
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@src/thread.cr:33"() #0 !dbg !229 {
entry:
ret void, !dbg !2148
}
define internal %"Set(Thread)"* @"~Thread::threads:read"() {
entry:
%0 = load i1, i1* @"Thread::threads:init", !dbg !2144
br i1 %0, label %initialized, label %not_initialized, !dbg !2144
initialized: ; preds = %not_initialized, %entry
ret %"Set(Thread)"* @"Thread::threads"
not_initialized: ; preds = %entry
store i1 true, i1* @"Thread::threads:init", !dbg !2144
call void @"~Thread::threads:init"()
br label %initialized
}
define internal void @"~Thread::threads:init"() {
alloca:
%0 = alloca %"Set(Thread)"
br label %entry
entry: ; preds = %alloca
%1 = call %"Set(Thread)" @"*Set(Thread)@Set(T)::new:Set(Thread)"(i32 1031)
store %"Set(Thread)" %1, %"Set(Thread)"* %0
%2 = load %"Set(Thread)", %"Set(Thread)"* %0
store %"Set(Thread)" %2, %"Set(Thread)"* @"Thread::threads"
ret void
}
; Function Attrs: uwtable
define internal %"Set(Thread)" @"*Set(Thread)@Set(T)::new:Set(Thread)"(i32 %self) #0 !dbg !230 {
alloca:
%_ = alloca %"Set(Thread)", !dbg !2149
%0 = alloca %"Set(Thread)", !dbg !2149
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Set(Thread)"* %0 to i8*, !dbg !2149
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i32), i32 4, i1 false), !dbg !2149
%2 = load %"Set(Thread)", %"Set(Thread)"* %0, !dbg !2149
store %"Set(Thread)" %2, %"Set(Thread)"* %_, !dbg !2149
%3 = call %"Hash(Thread, Nil)"* @"*Set(Thread)@Set(T)#initialize:Hash(Thread, Nil)"(%"Set(Thread)"* %_), !dbg !2149
%4 = load %"Set(Thread)", %"Set(Thread)"* %_, !dbg !2149
ret %"Set(Thread)" %4, !dbg !2149
}
; Function Attrs: uwtable
define internal %"Hash(Thread, Nil)"* @"*Set(Thread)@Set(T)#initialize:Hash(Thread, Nil)"(%"Set(Thread)"* %self) #0 !dbg !232 {
alloca:
%initial_capacity = alloca %Nil, !dbg !2150
br label %entry
entry: ; preds = %alloca
%0 = load %Nil, %Nil* %initial_capacity, !dbg !2151
%1 = call %"Hash(Thread, Nil)"* @"*Set(Thread)@Set(T)#initialize<Nil>:Hash(Thread, Nil)"(%"Set(Thread)"* %self, %Nil zeroinitializer), !dbg !2150
ret %"Hash(Thread, Nil)"* %1, !dbg !2150
}
; Function Attrs: uwtable
define internal %"Hash(Thread, Nil)"* @"*Set(Thread)@Set(T)#initialize<Nil>:Hash(Thread, Nil)"(%"Set(Thread)"* %self, %Nil %initial_capacity) #0 !dbg !233 {
entry:
%0 = call %"Hash(Thread, Nil)"* @"*Hash(Thread, Nil)@Hash(K, V)::new:initial_capacity<Nil>:Hash(Thread, Nil)"(i32 538, %Nil zeroinitializer), !dbg !2152
%1 = getelementptr inbounds %"Set(Thread)", %"Set(Thread)"* %self, i32 0, i32 0, !dbg !2153
store %"Hash(Thread, Nil)"* %0, %"Hash(Thread, Nil)"** %1, !dbg !2153
ret %"Hash(Thread, Nil)"* %0, !dbg !2153
}
; Function Attrs: uwtable
define internal %"Hash(Thread, Nil)"* @"*Hash(Thread, Nil)@Hash(K, V)::new:initial_capacity<Nil>:Hash(Thread, Nil)"(i32 %self, %Nil %initial_capacity) #0 !dbg !234 {
alloca:
%_ = alloca %"Hash(Thread, Nil)"*, !dbg !2154
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Hash(Thread, Nil)"* getelementptr (%"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* null, i32 1) to i64)), !dbg !2154
%1 = bitcast i8* %0 to %"Hash(Thread, Nil)"*, !dbg !2154
%2 = bitcast %"Hash(Thread, Nil)"* %1 to i8*, !dbg !2154
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Hash(Thread, Nil)"* getelementptr (%"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2154
%3 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %1, i32 0, i32 0, !dbg !2154
store i32 35, i32* %3, !dbg !2154
store %"Hash(Thread, Nil)"* %1, %"Hash(Thread, Nil)"** %_, !dbg !2154
%4 = load %"Hash(Thread, Nil)"*, %"Hash(Thread, Nil)"** %_, !dbg !2154
call void @"*Hash(Thread, Nil)@Hash(K, V)#initialize:initial_capacity<Nil>:Nil"(%"Hash(Thread, Nil)"* %4, %Nil zeroinitializer), !dbg !2154
%5 = load %"Hash(Thread, Nil)"*, %"Hash(Thread, Nil)"** %_, !dbg !2154
ret %"Hash(Thread, Nil)"* %5, !dbg !2154
}
; Function Attrs: uwtable
define internal void @"*Hash(Thread, Nil)@Hash(K, V)#initialize:initial_capacity<Nil>:Nil"(%"Hash(Thread, Nil)"* %self, %Nil %initial_capacity) #0 !dbg !236 {
alloca:
%block = alloca %Nil, !dbg !2155
%initial_capacity1 = alloca %"(Int32 | Nil)", !dbg !2155
%0 = alloca %"->", !dbg !2156
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 0, !dbg !2155
store i32 0, i32* %1, !dbg !2155
%2 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2155
store [1 x i64] zeroinitializer, [1 x i64]* %2, !dbg !2155
%3 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 0, !dbg !2157
store i32 152, i32* %3, !dbg !2157
%4 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2157
%5 = bitcast [1 x i64]* %4 to i32*, !dbg !2157
store i32 11, i32* %5, !dbg !2157
%6 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2158
%7 = bitcast [1 x i64]* %6 to i32*, !dbg !2158
%8 = load i32, i32* %7, !dbg !2158
%9 = icmp slt i32 %8, 11, !dbg !2158
br i1 %9, label %then, label %else, !dbg !2158
then: ; preds = %entry
%10 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 0, !dbg !2158
store i32 152, i32* %10, !dbg !2158
%11 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2158
%12 = bitcast [1 x i64]* %11 to i32*, !dbg !2158
store i32 11, i32* %12, !dbg !2158
br label %exit, !dbg !2158
else: ; preds = %entry
br label %exit, !dbg !2158
exit: ; preds = %else, %then
%13 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2158
%14 = bitcast [1 x i64]* %13 to i32*, !dbg !2158
%15 = load i32, i32* %14, !dbg !2158
%16 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 0, !dbg !2159
store i32 152, i32* %16, !dbg !2159
%17 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2159
%18 = bitcast [1 x i64]* %17 to i32*, !dbg !2159
store i32 %15, i32* %18, !dbg !2159
%19 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2159
%20 = bitcast [1 x i64]* %19 to i32*, !dbg !2159
%21 = load i32, i32* %20, !dbg !2159
%22 = call %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)::malloc<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(i32 782, i32 %21), !dbg !2160
%23 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2161
store %"Hash::Entry(Thread, Nil)"** %22, %"Hash::Entry(Thread, Nil)"*** %23, !dbg !2161
%24 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %initial_capacity1, i32 0, i32 1, !dbg !2161
%25 = bitcast [1 x i64]* %24 to i32*, !dbg !2161
%26 = load i32, i32* %25, !dbg !2161
%27 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2162
store i32 %26, i32* %27, !dbg !2162
%28 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2163
store i32 0, i32* %28, !dbg !2163
%29 = load %Nil, %Nil* %block, !dbg !2163
%30 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 5, !dbg !2156
%31 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2156
store i8* null, i8** %31, !dbg !2156
%32 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2156
store i8* null, i8** %32, !dbg !2156
%33 = load %"->", %"->"* %0, !dbg !2156
store %"->" %33, %"->"* %30, !dbg !2156
ret void, !dbg !2156
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)::malloc<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(i32 %self, i32 %size) #0 !dbg !237 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2164
br i1 %0, label %then, label %else, !dbg !2164
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !2165
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2166
unreachable, !dbg !2166
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2166
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !2167
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !2167
%5 = trunc i64 %3 to i32, !dbg !2167
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !2167
%6 = bitcast i8* %4 to %"Hash::Entry(Thread, Nil)"**, !dbg !2167
ret %"Hash::Entry(Thread, Nil)"** %6, !dbg !2166
}
; Function Attrs: uwtable
define internal %"Set(Thread)" @"*Set(Thread)@Set(T)#<<<Thread>:Set(Thread)"(%"Set(Thread)"* %self, %Thread* %object) #0 !dbg !238 {
alloca:
%0 = alloca %"Set(Thread)", !dbg !2168
br label %entry
entry: ; preds = %alloca
%1 = call %"Set(Thread)" @"*Set(Thread)@Set(T)#add<Thread>:Set(Thread)"(%"Set(Thread)"* %self, %Thread* %object), !dbg !2168
store %"Set(Thread)" %1, %"Set(Thread)"* %0, !dbg !2168
%2 = load %"Set(Thread)", %"Set(Thread)"* %0, !dbg !2168
ret %"Set(Thread)" %2, !dbg !2168
}
; Function Attrs: uwtable
define internal %"Set(Thread)" @"*Set(Thread)@Set(T)#add<Thread>:Set(Thread)"(%"Set(Thread)"* %self, %Thread* %object) #0 !dbg !239 {
entry:
%0 = getelementptr inbounds %"Set(Thread)", %"Set(Thread)"* %self, i32 0, i32 0, !dbg !2169
%1 = load %"Hash(Thread, Nil)"*, %"Hash(Thread, Nil)"** %0, !dbg !2169
call void @"*Hash(Thread, Nil)@Hash(K, V)#[]=<Thread, Nil>:Nil"(%"Hash(Thread, Nil)"* %1, %Thread* %object, %Nil zeroinitializer), !dbg !2170
%2 = load %"Set(Thread)", %"Set(Thread)"* %self, !dbg !2170
ret %"Set(Thread)" %2, !dbg !2170
}
; Function Attrs: uwtable
define internal void @"*Hash(Thread, Nil)@Hash(K, V)#[]=<Thread, Nil>:Nil"(%"Hash(Thread, Nil)"* %self, %Thread* %key, %Nil %value) #0 !dbg !240 {
alloca:
%index = alloca i32, !dbg !2171
%entry1 = alloca %"Hash::Entry(Thread, Nil)"*, !dbg !2171
%last = alloca %"Hash::Entry(Thread, Nil)"*, !dbg !2171
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2172
%1 = load i32, i32* %0, !dbg !2172
%2 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2172
%3 = load i32, i32* %2, !dbg !2172
%4 = mul i32 5, %3, !dbg !2172
%5 = icmp sgt i32 %1, %4, !dbg !2172
br i1 %5, label %then, label %else, !dbg !2172
then: ; preds = %entry
call void @"*Hash(Thread, Nil)@Hash(K, V)#rehash:Nil"(%"Hash(Thread, Nil)"* %self), !dbg !2172
br label %exit, !dbg !2172
else: ; preds = %entry
br label %exit, !dbg !2172
exit: ; preds = %else, %then
%6 = call i32 @"*Hash(Thread, Nil)@Hash(K, V)#bucket_index<Thread>:Int32"(%"Hash(Thread, Nil)"* %self, %Thread* %key), !dbg !2173
store i32 %6, i32* %index, !dbg !2174
%7 = load i32, i32* %index, !dbg !2174
%8 = call %"Hash::Entry(Thread, Nil)"* @"*Hash(Thread, Nil)@Hash(K, V)#insert_in_bucket<Int32, Thread, Nil>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash(Thread, Nil)"* %self, i32 %7, %Thread* %key, %Nil zeroinitializer), !dbg !2175
store %"Hash::Entry(Thread, Nil)"* %8, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2176
%9 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2177
%10 = icmp ne %"Hash::Entry(Thread, Nil)"* %9, null, !dbg !2177
br i1 %10, label %then2, label %else3, !dbg !2177
then2: ; preds = %exit
br label %exit4, !dbg !2177
else3: ; preds = %exit
ret void, !dbg !2177
exit4: ; preds = %then2
%11 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2177
%12 = load i32, i32* %11, !dbg !2177
%13 = add i32 %12, 1, !dbg !2177
%14 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2178
store i32 %13, i32* %14, !dbg !2178
%15 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 4, !dbg !2179
%16 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %15, !dbg !2179
store %"Hash::Entry(Thread, Nil)"* %16, %"Hash::Entry(Thread, Nil)"** %last, !dbg !2180
%17 = icmp ne %"Hash::Entry(Thread, Nil)"* %16, null, !dbg !2180
br i1 %17, label %then5, label %else6, !dbg !2180
then5: ; preds = %exit4
%18 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %last, !dbg !2180
%19 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2180
%20 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#fore=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %18, %"Hash::Entry(Thread, Nil)"* %19), !dbg !2181
%21 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2181
%22 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %last, !dbg !2181
%23 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#back=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %21, %"Hash::Entry(Thread, Nil)"* %22), !dbg !2182
br label %exit7, !dbg !2182
else6: ; preds = %exit4
br label %exit7, !dbg !2182
exit7: ; preds = %else6, %then5
%24 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2182
%25 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 4, !dbg !2183
store %"Hash::Entry(Thread, Nil)"* %24, %"Hash::Entry(Thread, Nil)"** %25, !dbg !2183
%26 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 3, !dbg !2184
%27 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %26, !dbg !2184
%28 = icmp ne %"Hash::Entry(Thread, Nil)"* %27, null, !dbg !2184
br i1 %28, label %then8, label %else9, !dbg !2184
then8: ; preds = %exit7
br label %exit10, !dbg !2184
else9: ; preds = %exit7
%29 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2184
%30 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 3, !dbg !2184
store %"Hash::Entry(Thread, Nil)"* %29, %"Hash::Entry(Thread, Nil)"** %30, !dbg !2184
br label %exit10, !dbg !2184
exit10: ; preds = %else9, %then8
ret void, !dbg !2184
}
; Function Attrs: uwtable
define internal void @"*Hash(Thread, Nil)@Hash(K, V)#rehash:Nil"(%"Hash(Thread, Nil)"* %self) #0 !dbg !241 {
alloca:
%new_size = alloca i32, !dbg !2185
%entry1 = alloca %"Hash::Entry(Thread, Nil)"*, !dbg !2185
%index = alloca i32, !dbg !2185
%i = alloca i32, !dbg !2186
%i2 = alloca i32, !dbg !2186
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2185
%1 = load i32, i32* %0, !dbg !2185
%2 = call i32 @"*Hash(Thread, Nil)@Hash(K, V)#calculate_new_size<Int32>:Int32"(%"Hash(Thread, Nil)"* %self, i32 %1), !dbg !2187
store i32 %2, i32* %new_size, !dbg !2188
%3 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2188
%4 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %3, !dbg !2188
%5 = load i32, i32* %new_size, !dbg !2188
%6 = call %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#realloc<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %4, i32 %5), !dbg !2189
%7 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2190
store %"Hash::Entry(Thread, Nil)"** %6, %"Hash::Entry(Thread, Nil)"*** %7, !dbg !2190
%8 = load i32, i32* %new_size, !dbg !2190
%9 = xor i32 %8, %8, !dbg !2186
store i32 %9, i32* %i2, !dbg !2191
br label %while, !dbg !2191
while: ; preds = %body, %entry
%10 = load i32, i32* %i2, !dbg !2192
%11 = icmp slt i32 %10, %8, !dbg !2192
br i1 %11, label %body, label %exit, !dbg !2192
body: ; preds = %while
%12 = load i32, i32* %i2, !dbg !2192
store i32 %12, i32* %i, !dbg !2192
%13 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2192
%14 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %13, !dbg !2192
%15 = load i32, i32* %i, !dbg !2192
call void @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]=<Int32, Nil>:Nil"(%"Hash::Entry(Thread, Nil)"** %14, i32 %15, %Nil zeroinitializer), !dbg !2193
%16 = load i32, i32* %i2, !dbg !2193
%17 = add i32 %16, 1, !dbg !2193
store i32 %17, i32* %i2, !dbg !2194
br label %while, !dbg !2194
exit: ; preds = %while
%18 = load i32, i32* %new_size, !dbg !2194
%19 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2195
store i32 %18, i32* %19, !dbg !2195
%20 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 4, !dbg !2195
%21 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %20, !dbg !2195
store %"Hash::Entry(Thread, Nil)"* %21, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2196
br label %while3, !dbg !2196
while3: ; preds = %body4, %exit
%22 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2197
%23 = icmp ne %"Hash::Entry(Thread, Nil)"* %22, null, !dbg !2197
br i1 %23, label %body4, label %exit5, !dbg !2197
body4: ; preds = %while3
%24 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2197
%25 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %24, i32 0, i32 1, !dbg !2197
%26 = load %Thread*, %Thread** %25, !dbg !2197
%27 = call i32 @"*Hash(Thread, Nil)@Hash(K, V)#bucket_index<Thread>:Int32"(%"Hash(Thread, Nil)"* %self, %Thread* %26), !dbg !2198
store i32 %27, i32* %index, !dbg !2199
%28 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2199
%29 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2199
%30 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %29, !dbg !2199
%31 = load i32, i32* %index, !dbg !2199
%32 = call %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]<Int32>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %30, i32 %31), !dbg !2200
%33 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#next=<(Hash::Entry(Thread, Nil) | Nil)>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"* %28, %"Hash::Entry(Thread, Nil)"* %32), !dbg !2201
%34 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2201
%35 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %34, !dbg !2201
%36 = load i32, i32* %index, !dbg !2201
%37 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2201
%38 = call %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]=<Int32, Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"** %35, i32 %36, %"Hash::Entry(Thread, Nil)"* %37), !dbg !2202
%39 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2202
%40 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %39, i32 0, i32 5, !dbg !2202
%41 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %40, !dbg !2202
store %"Hash::Entry(Thread, Nil)"* %41, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2203
br label %while3, !dbg !2203
exit5: ; preds = %while3
ret void, !dbg !2203
}
; Function Attrs: uwtable
define internal i32 @"*Hash(Thread, Nil)@Hash(K, V)#calculate_new_size<Int32>:Int32"(%"Hash(Thread, Nil)"* %self, i32 %size) #0 !dbg !242 {
alloca:
%new_size = alloca i32, !dbg !2204
%hash_size = alloca i32, !dbg !2205
%i = alloca i32, !dbg !2206
%i1 = alloca i32, !dbg !2206
br label %entry
entry: ; preds = %alloca
store i32 8, i32* %new_size, !dbg !2207
%0 = call %"Array(Int32)"** @"~Hash::HASH_PRIMES:read"()
%1 = load %"Array(Int32)"*, %"Array(Int32)"** %0
store i32 0, i32* %i1, !dbg !2208
br label %while, !dbg !2208
while: ; preds = %else, %entry
%2 = load i32, i32* %i1, !dbg !2209
%3 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %1, i32 0, i32 1, !dbg !2209
%4 = load i32, i32* %3, !dbg !2209
%5 = icmp slt i32 %2, %4, !dbg !2209
br i1 %5, label %body, label %exit, !dbg !2209
body: ; preds = %while
%6 = load i32, i32* %i1, !dbg !2209
store i32 %6, i32* %i, !dbg !2209
%7 = load i32, i32* %i, !dbg !2209
%8 = call i32 @"*Array(Int32)@Array(T)#unsafe_at<Int32>:Int32"(%"Array(Int32)"* %1, i32 %7), !dbg !2210
store i32 %8, i32* %hash_size, !dbg !2210
%9 = load i32, i32* %new_size, !dbg !2211
%10 = icmp sgt i32 %9, %size, !dbg !2211
br i1 %10, label %then, label %else, !dbg !2211
exit: ; preds = %while
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Hash table too big'" to %String*)), !dbg !2212
unreachable, !dbg !2212
then: ; preds = %body
%11 = load i32, i32* %hash_size, !dbg !2211
ret i32 %11, !dbg !2211
else: ; preds = %body
%12 = load i32, i32* %new_size, !dbg !2211
%13 = call i32 @"*Int32@Int#<<<Int32>:Int32"(i32 %12, i32 1), !dbg !2213
store i32 %13, i32* %new_size, !dbg !2213
%14 = load i32, i32* %i1, !dbg !2213
%15 = add i32 %14, 1, !dbg !2213
store i32 %15, i32* %i1, !dbg !2214
br label %while, !dbg !2214
}
define internal %"Array(Int32)"** @"~Hash::HASH_PRIMES:read"() {
entry:
%0 = load i1, i1* @"Hash::HASH_PRIMES:init", !dbg !2207
br i1 %0, label %initialized, label %not_initialized, !dbg !2207
initialized: ; preds = %not_initialized, %entry
ret %"Array(Int32)"** @"Hash::HASH_PRIMES"
not_initialized: ; preds = %entry
store i1 true, i1* @"Hash::HASH_PRIMES:init", !dbg !2207
call void @"~Hash::HASH_PRIMES:init"()
br label %initialized
}
define internal void @"~Hash::HASH_PRIMES:init"() {
alloca:
%__temp_181 = alloca i32*
%capacity = alloca i32
%ary = alloca %"Array(Int32)"*
br label %entry
entry: ; preds = %alloca
store i32 29, i32* %capacity
%0 = load i32, i32* %capacity
%1 = call %"Array(Int32)"* @"*Array(Int32)@Array(T)::new<Int32>:Array(Int32)"(i32 502, i32 %0)
store %"Array(Int32)"* %1, %"Array(Int32)"** %ary
%2 = load %"Array(Int32)"*, %"Array(Int32)"** %ary
%3 = load %"Array(Int32)"*, %"Array(Int32)"** %ary
%4 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %3, i32 0, i32 3
%5 = load i32*, i32** %4
store i32* %5, i32** %__temp_181
%6 = load i32*, i32** %__temp_181
%7 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %6, i32 0, i32 11)
%8 = load i32*, i32** %__temp_181
%9 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %8, i32 1, i32 19)
%10 = load i32*, i32** %__temp_181
%11 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %10, i32 2, i32 37)
%12 = load i32*, i32** %__temp_181
%13 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %12, i32 3, i32 67)
%14 = load i32*, i32** %__temp_181
%15 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %14, i32 4, i32 131)
%16 = load i32*, i32** %__temp_181
%17 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %16, i32 5, i32 283)
%18 = load i32*, i32** %__temp_181
%19 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %18, i32 6, i32 521)
%20 = load i32*, i32** %__temp_181
%21 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %20, i32 7, i32 1033)
%22 = load i32*, i32** %__temp_181
%23 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %22, i32 8, i32 2053)
%24 = load i32*, i32** %__temp_181
%25 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %24, i32 9, i32 4099)
%26 = load i32*, i32** %__temp_181
%27 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %26, i32 10, i32 8219)
%28 = load i32*, i32** %__temp_181
%29 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %28, i32 11, i32 16427)
%30 = load i32*, i32** %__temp_181
%31 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %30, i32 12, i32 32771)
%32 = load i32*, i32** %__temp_181
%33 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %32, i32 13, i32 65581)
%34 = load i32*, i32** %__temp_181
%35 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %34, i32 14, i32 131101)
%36 = load i32*, i32** %__temp_181
%37 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %36, i32 15, i32 262147)
%38 = load i32*, i32** %__temp_181
%39 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %38, i32 16, i32 524309)
%40 = load i32*, i32** %__temp_181
%41 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %40, i32 17, i32 1048583)
%42 = load i32*, i32** %__temp_181
%43 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %42, i32 18, i32 2097169)
%44 = load i32*, i32** %__temp_181
%45 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %44, i32 19, i32 4194319)
%46 = load i32*, i32** %__temp_181
%47 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %46, i32 20, i32 8388617)
%48 = load i32*, i32** %__temp_181
%49 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %48, i32 21, i32 16777259)
%50 = load i32*, i32** %__temp_181
%51 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %50, i32 22, i32 33554467)
%52 = load i32*, i32** %__temp_181
%53 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %52, i32 23, i32 67108879)
%54 = load i32*, i32** %__temp_181
%55 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %54, i32 24, i32 134217757)
%56 = load i32*, i32** %__temp_181
%57 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %56, i32 25, i32 268435459)
%58 = load i32*, i32** %__temp_181
%59 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %58, i32 26, i32 536870923)
%60 = load i32*, i32** %__temp_181
%61 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %60, i32 27, i32 1073741909)
%62 = load i32*, i32** %__temp_181
%63 = call i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %62, i32 28, i32 0)
%64 = call i32 @"*Array(Int32)@Array(T)#size=<Int32>:Int32"(%"Array(Int32)"* %2, i32 29)
%65 = load %"Array(Int32)"*, %"Array(Int32)"** %ary
store %"Array(Int32)"* %65, %"Array(Int32)"** @"Hash::HASH_PRIMES"
ret void
}
; Function Attrs: uwtable
define internal %"Array(Int32)"* @"*Array(Int32)@Array(T)::new<Int32>:Array(Int32)"(i32 %self, i32 %initial_capacity) #0 !dbg !243 {
alloca:
%_ = alloca %"Array(Int32)"*, !dbg !2215
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Array(Int32)"* getelementptr (%"Array(Int32)", %"Array(Int32)"* null, i32 1) to i64)), !dbg !2215
%1 = bitcast i8* %0 to %"Array(Int32)"*, !dbg !2215
%2 = bitcast %"Array(Int32)"* %1 to i8*, !dbg !2215
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Array(Int32)"* getelementptr (%"Array(Int32)", %"Array(Int32)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2215
%3 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %1, i32 0, i32 0, !dbg !2215
store i32 11, i32* %3, !dbg !2215
store %"Array(Int32)"* %1, %"Array(Int32)"** %_, !dbg !2215
%4 = load %"Array(Int32)"*, %"Array(Int32)"** %_, !dbg !2215
%5 = call i32* @"*Array(Int32)@Array(T)#initialize<Int32>:Pointer(Int32)"(%"Array(Int32)"* %4, i32 %initial_capacity), !dbg !2215
%6 = load %"Array(Int32)"*, %"Array(Int32)"** %_, !dbg !2215
ret %"Array(Int32)"* %6, !dbg !2215
}
; Function Attrs: uwtable
define internal i32* @"*Array(Int32)@Array(T)#initialize<Int32>:Pointer(Int32)"(%"Array(Int32)"* %self, i32 %initial_capacity) #0 !dbg !244 {
entry:
%0 = icmp slt i32 %initial_capacity, 0, !dbg !2216
br i1 %0, label %then, label %else, !dbg !2216
then: ; preds = %entry
%1 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !2217
%2 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1, %String* bitcast ({ i32, i32, i32, [22 x i8] }* @"'Negative array size...'" to %String*)), !dbg !2217
%3 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %2, i32 %initial_capacity), !dbg !2217
%4 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %3), !dbg !2217
%5 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %4), !dbg !2218
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %5), !dbg !2219
unreachable, !dbg !2219
else: ; preds = %entry
%6 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 1, !dbg !2220
store i32 0, i32* %6, !dbg !2220
%7 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 2, !dbg !2221
store i32 %initial_capacity, i32* %7, !dbg !2221
%8 = icmp eq i32 %initial_capacity, 0, !dbg !2222
br i1 %8, label %then1, label %else2, !dbg !2222
then1: ; preds = %else
%9 = call i32* @"*Pointer(Int32)@Pointer(T)::null:Pointer(Int32)"(i32 698), !dbg !2223
%10 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 3, !dbg !2224
store i32* %9, i32** %10, !dbg !2224
br label %exit, !dbg !2224
else2: ; preds = %else
%11 = call i32* @"*Pointer(Int32)@Pointer(T)::malloc<Int32>:Pointer(Int32)"(i32 698, i32 %initial_capacity), !dbg !2225
%12 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 3, !dbg !2226
store i32* %11, i32** %12, !dbg !2226
br label %exit, !dbg !2226
exit: ; preds = %else2, %then1
%13 = phi i32* [ %9, %then1 ], [ %11, %else2 ], !dbg !2226
ret i32* %13, !dbg !2226
}
; Function Attrs: uwtable
define internal i32* @"*Pointer(Int32)@Pointer(T)::null:Pointer(Int32)"(i32 %self) #0 !dbg !245 {
entry:
ret i32* null, !dbg !2227
}
; Function Attrs: uwtable
define internal i32* @"*Pointer(Int32)@Pointer(T)::malloc<Int32>:Pointer(Int32)"(i32 %self, i32 %size) #0 !dbg !246 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2228
br i1 %0, label %then, label %else, !dbg !2228
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !2229
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2230
unreachable, !dbg !2230
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2230
%3 = mul i64 ptrtoint (i32* getelementptr (i32, i32* null, i32 1) to i64), %2, !dbg !2231
%4 = call i8* @__crystal_malloc_atomic64(i64 %3), !dbg !2231
%5 = trunc i64 %3 to i32, !dbg !2231
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !2231
%6 = bitcast i8* %4 to i32*, !dbg !2231
ret i32* %6, !dbg !2230
}
; Function Attrs: uwtable
define internal i32 @"*Pointer(Int32)@Pointer(T)#[]=<Int32, Int32>:Int32"(i32* %self, i32 %offset, i32 %value) #0 !dbg !247 {
entry:
%0 = call i32* @"*Pointer(Int32)@Pointer(T)#+<Int32>:Pointer(Int32)"(i32* %self, i32 %offset), !dbg !2232
store i32 %value, i32* %0, !dbg !2232
ret i32 %value, !dbg !2232
}
; Function Attrs: uwtable
define internal i32* @"*Pointer(Int32)@Pointer(T)#+<Int32>:Pointer(Int32)"(i32* %self, i32 %other) #0 !dbg !248 {
entry:
%0 = sext i32 %other to i64, !dbg !2233
%1 = getelementptr inbounds i32, i32* %self, i64 %0, !dbg !2233
ret i32* %1, !dbg !2233
}
; Function Attrs: uwtable
define internal i32 @"*Array(Int32)@Array(T)#size=<Int32>:Int32"(%"Array(Int32)"* %self, i32 %size) #0 !dbg !249 {
entry:
%0 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 1, !dbg !2234
store i32 %size, i32* %0, !dbg !2234
ret i32 %size, !dbg !2234
}
; Function Attrs: alwaysinline uwtable
define internal i32 @"*Array(Int32)@Array(T)#unsafe_at<Int32>:Int32"(%"Array(Int32)"* %self, i32 %index) #3 !dbg !250 {
entry:
%0 = getelementptr inbounds %"Array(Int32)", %"Array(Int32)"* %self, i32 0, i32 3, !dbg !2235
%1 = load i32*, i32** %0, !dbg !2235
%2 = call i32 @"*Pointer(Int32)@Pointer(T)#[]<Int32>:Int32"(i32* %1, i32 %index), !dbg !2236
ret i32 %2, !dbg !2236
}
; Function Attrs: uwtable
define internal i32 @"*Pointer(Int32)@Pointer(T)#[]<Int32>:Int32"(i32* %self, i32 %offset) #0 !dbg !251 {
entry:
%0 = call i32* @"*Pointer(Int32)@Pointer(T)#+<Int32>:Pointer(Int32)"(i32* %self, i32 %offset), !dbg !2237
%1 = load i32, i32* %0, !dbg !2237
ret i32 %1, !dbg !2237
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#realloc<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %size) #0 !dbg !252 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2238
br i1 %0, label %then, label %else, !dbg !2238
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !2239
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2240
unreachable, !dbg !2240
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2240
%3 = bitcast %"Hash::Entry(Thread, Nil)"** %self to i8*, !dbg !2240
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !2240
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !2240
%6 = bitcast i8* %5 to %"Hash::Entry(Thread, Nil)"**, !dbg !2240
ret %"Hash::Entry(Thread, Nil)"** %6, !dbg !2240
}
; Function Attrs: uwtable
define internal void @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]=<Int32, Nil>:Nil"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset, %Nil %value) #0 !dbg !253 {
entry:
%0 = call %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#+<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset), !dbg !2241
store %"Hash::Entry(Thread, Nil)"* null, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2241
ret void, !dbg !2241
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#+<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %other) #0 !dbg !254 {
entry:
%0 = sext i32 %other to i64, !dbg !2242
%1 = getelementptr inbounds %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %self, i64 %0, !dbg !2242
ret %"Hash::Entry(Thread, Nil)"** %1, !dbg !2242
}
; Function Attrs: uwtable
define internal i32 @"*Hash(Thread, Nil)@Hash(K, V)#bucket_index<Thread>:Int32"(%"Hash(Thread, Nil)"* %self, %Thread* %key) #0 !dbg !255 {
entry:
%0 = call i64 @"*Thread@Object#hash:UInt64"(%Thread* %key), !dbg !2243
%1 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2243
%2 = load i32, i32* %1, !dbg !2243
%3 = call i64 @"*UInt64@Int#remainder<Int32>:UInt64"(i64 %0, i32 %2), !dbg !2243
%4 = trunc i64 %3 to i32, !dbg !2243
ret i32 %4, !dbg !2243
}
; Function Attrs: uwtable
define internal i64 @"*Thread@Object#hash:UInt64"(%Thread* %self) #0 !dbg !256 {
alloca:
%0 = alloca %"Crystal::Hasher", !dbg !2244
%1 = alloca %"Crystal::Hasher", !dbg !2245
br label %entry
entry: ; preds = %alloca
%2 = call %"Crystal::Hasher" @"*Crystal::Hasher::new:Crystal::Hasher"(), !dbg !2244
store %"Crystal::Hasher" %2, %"Crystal::Hasher"* %0, !dbg !2244
%3 = load %"Crystal::Hasher", %"Crystal::Hasher"* %0, !dbg !2244
%4 = call %"Crystal::Hasher" @"*Thread@Reference#hash<Crystal::Hasher>:Crystal::Hasher"(%Thread* %self, %"Crystal::Hasher" %3), !dbg !2245
store %"Crystal::Hasher" %4, %"Crystal::Hasher"* %1, !dbg !2245
%5 = call i64 @"*Crystal::Hasher#result:UInt64"(%"Crystal::Hasher"* %1), !dbg !2245
ret i64 %5, !dbg !2245
}
; Function Attrs: uwtable
define internal %"Crystal::Hasher" @"*Crystal::Hasher::new:Crystal::Hasher"() #0 !dbg !257 {
alloca:
%_ = alloca %"Crystal::Hasher", !dbg !2246
%0 = alloca %"Crystal::Hasher", !dbg !2246
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Crystal::Hasher"* %0 to i8*, !dbg !2246
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 trunc (i64 mul nuw (i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 2) to i32), i32 4, i1 false), !dbg !2246
%2 = load %"Crystal::Hasher", %"Crystal::Hasher"* %0, !dbg !2246
store %"Crystal::Hasher" %2, %"Crystal::Hasher"* %_, !dbg !2246
%3 = call i64 @"*Crystal::Hasher#initialize:UInt64"(%"Crystal::Hasher"* %_), !dbg !2246
%4 = load %"Crystal::Hasher", %"Crystal::Hasher"* %_, !dbg !2246
ret %"Crystal::Hasher" %4, !dbg !2246
}
; Function Attrs: uwtable
define internal i64 @"*Crystal::Hasher#initialize:UInt64"(%"Crystal::Hasher"* %self) #0 !dbg !259 {
alloca:
%a = alloca i64, !dbg !2247
%b = alloca i64, !dbg !2247
br label %entry
entry: ; preds = %alloca
%0 = call i64 @"*StaticArray(UInt64, 2)@Indexable(T)#[]<Int32>:UInt64"([2 x i64]* @"Crystal::Hasher::seed", i32 0), !dbg !2248
store i64 %0, i64* %a, !dbg !2249
%1 = call i64 @"*StaticArray(UInt64, 2)@Indexable(T)#[]<Int32>:UInt64"([2 x i64]* @"Crystal::Hasher::seed", i32 1), !dbg !2250
store i64 %1, i64* %b, !dbg !2251
%2 = load i64, i64* %a, !dbg !2251
%3 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 0, !dbg !2249
store i64 %2, i64* %3, !dbg !2249
%4 = load i64, i64* %b, !dbg !2249
%5 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 1, !dbg !2251
store i64 %4, i64* %5, !dbg !2251
ret i64 %4, !dbg !2251
}
; Function Attrs: alwaysinline uwtable
define internal i64 @"*StaticArray(UInt64, 2)@Indexable(T)#[]<Int32>:UInt64"([2 x i64]* %self, i32 %index) #3 !dbg !260 {
entry:
%0 = call i64 @"*StaticArray(UInt64, 2)@Indexable(T)#at<Int32>:UInt64"([2 x i64]* %self, i32 %index), !dbg !2252
ret i64 %0, !dbg !2252
}
; Function Attrs: alwaysinline uwtable
define internal i64 @"*StaticArray(UInt64, 2)@Indexable(T)#at<Int32>:UInt64"([2 x i64]* %self, i32 %index) #3 !dbg !261 {
alloca:
%index1 = alloca i32, !dbg !2253
%index2 = alloca i32, !dbg !2254
%__temp_182 = alloca i1, !dbg !2254
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !2253
%0 = load i32, i32* %index1, !dbg !2253
store i32 %0, i32* %index2, !dbg !2254
%1 = load i32, i32* %index2, !dbg !2255
%2 = icmp slt i32 %1, 0, !dbg !2255
br i1 %2, label %then, label %else, !dbg !2255
then: ; preds = %entry
%3 = load i32, i32* %index2, !dbg !2255
%4 = call i32 @"*StaticArray(UInt64, 2)@StaticArray(T, N)#size:Int32"([2 x i64]* %self), !dbg !2256
%5 = add i32 %3, %4, !dbg !2256
store i32 %5, i32* %index2, !dbg !2255
br label %exit, !dbg !2255
else: ; preds = %entry
br label %exit, !dbg !2255
exit: ; preds = %else, %then
%6 = load i32, i32* %index2, !dbg !2257
%7 = icmp sle i32 0, %6, !dbg !2257
store i1 %7, i1* %__temp_182, !dbg !2257
br i1 %7, label %then5, label %else6, !dbg !2257
then3: ; preds = %exit7
%8 = load i32, i32* %index2, !dbg !2258
br label %exit8, !dbg !2258
else4: ; preds = %exit7
%9 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !2259
call void @"*raise<IndexError>:NoReturn"(%IndexError* %9), !dbg !2260
unreachable, !dbg !2260
then5: ; preds = %exit
%10 = load i32, i32* %index2, !dbg !2257
%11 = call i32 @"*StaticArray(UInt64, 2)@StaticArray(T, N)#size:Int32"([2 x i64]* %self), !dbg !2258
%12 = icmp slt i32 %10, %11, !dbg !2258
br label %exit7, !dbg !2258
else6: ; preds = %exit
%13 = load i1, i1* %__temp_182, !dbg !2258
br label %exit7, !dbg !2258
exit7: ; preds = %else6, %then5
%14 = phi i1 [ %12, %then5 ], [ %13, %else6 ], !dbg !2258
br i1 %14, label %then3, label %else4, !dbg !2258
exit8: ; preds = %then3
%15 = phi i32 [ %8, %then3 ], !dbg !2260
store i32 %15, i32* %index1, !dbg !2261
%16 = load i32, i32* %index1, !dbg !2261
%17 = call i64 @"*StaticArray(UInt64, 2)@StaticArray(T, N)#unsafe_at<Int32>:UInt64"([2 x i64]* %self, i32 %16), !dbg !2262
ret i64 %17, !dbg !2262
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt64, 2)@StaticArray(T, N)#size:Int32"([2 x i64]* %self) #0 !dbg !262 {
entry:
ret i32 2, !dbg !2263
}
; Function Attrs: alwaysinline uwtable
define internal i64 @"*StaticArray(UInt64, 2)@StaticArray(T, N)#unsafe_at<Int32>:UInt64"([2 x i64]* %self, i32 %index) #3 !dbg !263 {
entry:
%0 = call i64* @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_unsafe:Pointer(UInt64)"([2 x i64]* %self), !dbg !2264
%1 = call i64 @"*Pointer(UInt64)@Pointer(T)#[]<Int32>:UInt64"(i64* %0, i32 %index), !dbg !2264
ret i64 %1, !dbg !2264
}
; Function Attrs: uwtable
define internal i64* @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_unsafe:Pointer(UInt64)"([2 x i64]* %self) #0 !dbg !264 {
entry:
%0 = getelementptr inbounds [2 x i64], [2 x i64]* %self, i32 0, i32 0, !dbg !2265
ret i64* %0, !dbg !2265
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(UInt64)@Pointer(T)#[]<Int32>:UInt64"(i64* %self, i32 %offset) #0 !dbg !265 {
entry:
%0 = call i64* @"*Pointer(UInt64)@Pointer(T)#+<Int32>:Pointer(UInt64)"(i64* %self, i32 %offset), !dbg !2266
%1 = load i64, i64* %0, !dbg !2266
ret i64 %1, !dbg !2266
}
; Function Attrs: uwtable
define internal i64* @"*Pointer(UInt64)@Pointer(T)#+<Int32>:Pointer(UInt64)"(i64* %self, i32 %other) #0 !dbg !266 {
entry:
%0 = sext i32 %other to i64, !dbg !2267
%1 = getelementptr inbounds i64, i64* %self, i64 %0, !dbg !2267
ret i64* %1, !dbg !2267
}
; Function Attrs: uwtable
define internal %"Crystal::Hasher" @"*Thread@Reference#hash<Crystal::Hasher>:Crystal::Hasher"(%Thread* %self, %"Crystal::Hasher" %hasher) #0 !dbg !267 {
alloca:
%hasher1 = alloca %"Crystal::Hasher", !dbg !2268
%0 = alloca %"Crystal::Hasher", !dbg !2269
br label %entry
entry: ; preds = %alloca
store %"Crystal::Hasher" %hasher, %"Crystal::Hasher"* %hasher1, !dbg !2268
%1 = call %"Crystal::Hasher" @"*Crystal::Hasher#reference<Thread>:Crystal::Hasher"(%"Crystal::Hasher"* %hasher1, %Thread* %self), !dbg !2269
store %"Crystal::Hasher" %1, %"Crystal::Hasher"* %0, !dbg !2269
%2 = load %"Crystal::Hasher", %"Crystal::Hasher"* %0, !dbg !2269
ret %"Crystal::Hasher" %2, !dbg !2269
}
; Function Attrs: uwtable
define internal %"Crystal::Hasher" @"*Crystal::Hasher#reference<Thread>:Crystal::Hasher"(%"Crystal::Hasher"* %self, %Thread* %value) #0 !dbg !268 {
alloca:
%0 = alloca %"Crystal::Hasher", !dbg !2270
br label %entry
entry: ; preds = %alloca
%1 = ptrtoint %Thread* %value to i64, !dbg !2271
%2 = call %"Crystal::Hasher" @"*Crystal::Hasher#permute<UInt64>:Crystal::Hasher"(%"Crystal::Hasher"* %self, i64 %1), !dbg !2270
store %"Crystal::Hasher" %2, %"Crystal::Hasher"* %0, !dbg !2270
%3 = load %"Crystal::Hasher", %"Crystal::Hasher"* %0, !dbg !2270
ret %"Crystal::Hasher" %3, !dbg !2270
}
; Function Attrs: uwtable
define internal %"Crystal::Hasher" @"*Crystal::Hasher#permute<UInt64>:Crystal::Hasher"(%"Crystal::Hasher"* %self, i64 %v) #0 !dbg !269 {
entry:
%0 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 0, !dbg !2272
%1 = load i64, i64* %0, !dbg !2272
%2 = xor i64 %1, %v, !dbg !2272
%3 = call i64 @"*Crystal::Hasher#rotl32<UInt64>:UInt64"(%"Crystal::Hasher"* %self, i64 %2), !dbg !2273
%4 = mul i64 %3, -5992693225213291591, !dbg !2273
%5 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 0, !dbg !2274
store i64 %4, i64* %5, !dbg !2274
%6 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 1, !dbg !2274
%7 = load i64, i64* %6, !dbg !2274
%8 = call i64 @"*Crystal::Hasher#rotl32<UInt64>:UInt64"(%"Crystal::Hasher"* %self, i64 %7), !dbg !2275
%9 = xor i64 %8, %v, !dbg !2275
%10 = mul i64 %9, 7590443161569626685, !dbg !2275
%11 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 1, !dbg !2276
store i64 %10, i64* %11, !dbg !2276
%12 = load %"Crystal::Hasher", %"Crystal::Hasher"* %self, !dbg !2276
ret %"Crystal::Hasher" %12, !dbg !2276
}
; Function Attrs: uwtable
define internal i64 @"*Crystal::Hasher#rotl32<UInt64>:UInt64"(%"Crystal::Hasher"* %self, i64 %v) #0 !dbg !270 {
entry:
%0 = call i64 @"*UInt64@Int#<<<Int32>:UInt64"(i64 %v, i32 32), !dbg !2277
%1 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %v, i32 32), !dbg !2278
%2 = or i64 %0, %1, !dbg !2278
ret i64 %2, !dbg !2278
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Int#<<<Int32>:UInt64"(i64 %self, i32 %count) #0 !dbg !271 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !2279
br i1 %0, label %then, label %else, !dbg !2279
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !2280
%2 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %self, i32 %1), !dbg !2281
br label %exit, !dbg !2281
else: ; preds = %entry
%3 = icmp slt i32 %count, i64 64, !dbg !2282
br i1 %3, label %then1, label %else2, !dbg !2282
exit: ; preds = %exit3, %then
%4 = phi i64 [ %2, %then ], [ %8, %exit3 ], !dbg !2283
ret i64 %4, !dbg !2283
then1: ; preds = %else
%5 = sext i32 %count to i64, !dbg !2282
%6 = shl i64 %self, %5, !dbg !2282
br label %exit3, !dbg !2282
else2: ; preds = %else
%7 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2283
br label %exit3, !dbg !2283
exit3: ; preds = %else2, %then1
%8 = phi i64 [ %6, %then1 ], [ %7, %else2 ], !dbg !2283
br label %exit, !dbg !2283
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %self, i32 %count) #0 !dbg !272 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !2284
br i1 %0, label %then, label %else, !dbg !2284
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !2285
%2 = call i64 @"*UInt64@Int#<<<Int32>:UInt64"(i64 %self, i32 %1), !dbg !2286
br label %exit, !dbg !2286
else: ; preds = %entry
%3 = icmp slt i32 %count, i64 64, !dbg !2287
br i1 %3, label %then1, label %else2, !dbg !2287
exit: ; preds = %exit3, %then
%4 = phi i64 [ %2, %then ], [ %8, %exit3 ], !dbg !2288
ret i64 %4, !dbg !2288
then1: ; preds = %else
%5 = sext i32 %count to i64, !dbg !2287
%6 = lshr i64 %self, %5, !dbg !2287
br label %exit3, !dbg !2287
else2: ; preds = %else
%7 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2288
br label %exit3, !dbg !2288
exit3: ; preds = %else2, %then1
%8 = phi i64 [ %6, %then1 ], [ %7, %else2 ], !dbg !2288
br label %exit, !dbg !2288
}
; Function Attrs: uwtable
define internal i64 @"*Crystal::Hasher#result:UInt64"(%"Crystal::Hasher"* %self) #0 !dbg !273 {
alloca:
%__temp_183 = alloca i64, !dbg !2289
%__temp_184 = alloca i64, !dbg !2289
%a = alloca i64, !dbg !2289
%b = alloca i64, !dbg !2289
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 0, !dbg !2289
%1 = load i64, i64* %0, !dbg !2289
store i64 %1, i64* %__temp_183, !dbg !2290
%2 = getelementptr inbounds %"Crystal::Hasher", %"Crystal::Hasher"* %self, i32 0, i32 1, !dbg !2290
%3 = load i64, i64* %2, !dbg !2290
store i64 %3, i64* %__temp_184, !dbg !2290
%4 = load i64, i64* %__temp_183, !dbg !2290
store i64 %4, i64* %a, !dbg !2290
%5 = load i64, i64* %__temp_184, !dbg !2290
store i64 %5, i64* %b, !dbg !2291
%6 = load i64, i64* %a, !dbg !2291
%7 = load i64, i64* %a, !dbg !2291
%8 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %7, i32 23), !dbg !2292
%9 = load i64, i64* %a, !dbg !2292
%10 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %9, i32 40), !dbg !2293
%11 = xor i64 %8, %10, !dbg !2293
%12 = xor i64 %6, %11, !dbg !2293
store i64 %12, i64* %a, !dbg !2294
%13 = load i64, i64* %b, !dbg !2294
%14 = load i64, i64* %b, !dbg !2294
%15 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %14, i32 23), !dbg !2295
%16 = load i64, i64* %b, !dbg !2295
%17 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %16, i32 40), !dbg !2296
%18 = xor i64 %15, %17, !dbg !2296
%19 = xor i64 %13, %18, !dbg !2296
store i64 %19, i64* %b, !dbg !2297
%20 = load i64, i64* %a, !dbg !2297
%21 = mul i64 %20, -5992693225213291591, !dbg !2297
store i64 %21, i64* %a, !dbg !2298
%22 = load i64, i64* %b, !dbg !2298
%23 = mul i64 %22, 7590443161569626685, !dbg !2298
store i64 %23, i64* %b, !dbg !2299
%24 = load i64, i64* %a, !dbg !2299
%25 = load i64, i64* %a, !dbg !2299
%26 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %25, i32 32), !dbg !2300
%27 = xor i64 %24, %26, !dbg !2300
store i64 %27, i64* %a, !dbg !2301
%28 = load i64, i64* %b, !dbg !2301
%29 = load i64, i64* %b, !dbg !2301
%30 = call i64 @"*UInt64@Int#>><Int32>:UInt64"(i64 %29, i32 32), !dbg !2302
%31 = xor i64 %28, %30, !dbg !2302
store i64 %31, i64* %b, !dbg !2303
%32 = load i64, i64* %a, !dbg !2303
%33 = load i64, i64* %b, !dbg !2303
%34 = add i64 %32, %33, !dbg !2303
ret i64 %34, !dbg !2303
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Int#remainder<Int32>:UInt64"(i64 %self, i32 %other) #0 !dbg !274 {
entry:
%0 = icmp eq i32 %other, 0, !dbg !2304
br i1 %0, label %then, label %else, !dbg !2304
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !2305
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !2306
unreachable, !dbg !2306
else: ; preds = %entry
%2 = sext i32 %other to i64, !dbg !2306
%3 = urem i64 %self, %2, !dbg !2306
ret i64 %3, !dbg !2306
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]<Int32>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset) #0 !dbg !275 {
entry:
%0 = call %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#+<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset), !dbg !2307
%1 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2307
ret %"Hash::Entry(Thread, Nil)"* %1, !dbg !2307
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#next=<(Hash::Entry(Thread, Nil) | Nil)>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"* %self, %"Hash::Entry(Thread, Nil)"* %next) #0 !dbg !276 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 3, !dbg !2308
store %"Hash::Entry(Thread, Nil)"* %next, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2308
ret %"Hash::Entry(Thread, Nil)"* %next, !dbg !2308
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]=<Int32, Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset, %"Hash::Entry(Thread, Nil)"* %value) #0 !dbg !277 {
entry:
%0 = call %"Hash::Entry(Thread, Nil)"** @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#+<Int32>:Pointer(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %self, i32 %offset), !dbg !2309
store %"Hash::Entry(Thread, Nil)"* %value, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2309
ret %"Hash::Entry(Thread, Nil)"* %value, !dbg !2309
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash(Thread, Nil)@Hash(K, V)#insert_in_bucket<Int32, Thread, Nil>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash(Thread, Nil)"* %self, i32 %index, %Thread* %key, %Nil %value) #0 !dbg !278 {
alloca:
%entry1 = alloca %"Hash::Entry(Thread, Nil)"*, !dbg !2310
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2310
%1 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %0, !dbg !2310
%2 = call %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]<Int32>:(Hash::Entry(Thread, Nil) | Nil)"(%"Hash::Entry(Thread, Nil)"** %1, i32 %index), !dbg !2311
store %"Hash::Entry(Thread, Nil)"* %2, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2312
%3 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2313
%4 = icmp ne %"Hash::Entry(Thread, Nil)"* %3, null, !dbg !2313
br i1 %4, label %then, label %else, !dbg !2313
then: ; preds = %entry
br label %while, !dbg !2313
else: ; preds = %entry
%5 = getelementptr inbounds %"Hash(Thread, Nil)", %"Hash(Thread, Nil)"* %self, i32 0, i32 6, !dbg !2314
%6 = load %"Hash::Entry(Thread, Nil)"**, %"Hash::Entry(Thread, Nil)"*** %5, !dbg !2314
%7 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)::new<Thread, Nil>:Hash::Entry(Thread, Nil)"(i32 645, %Thread* %key, %Nil zeroinitializer), !dbg !2315
%8 = call %"Hash::Entry(Thread, Nil)"* @"*Pointer(Hash::Entry(Thread, Nil) | Nil)@Pointer(T)#[]=<Int32, Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"** %6, i32 %index, %"Hash::Entry(Thread, Nil)"* %7), !dbg !2316
ret %"Hash::Entry(Thread, Nil)"* %8, !dbg !2316
while: ; preds = %exit6, %then
%9 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2317
%10 = icmp ne %"Hash::Entry(Thread, Nil)"* %9, null, !dbg !2317
br i1 %10, label %body, label %exit, !dbg !2317
body: ; preds = %while
%11 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2318
%12 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %11, i32 0, i32 1, !dbg !2318
%13 = load %Thread*, %Thread** %12, !dbg !2318
%14 = call i1 @"*Thread@Reference#==<Thread>:Bool"(%Thread* %13, %Thread* %key), !dbg !2319
br i1 %14, label %then2, label %else3, !dbg !2319
exit: ; preds = %while
br label %exit7, !dbg !2314
then2: ; preds = %body
%15 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2319
call void @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#value=<Nil>:Nil"(%"Hash::Entry(Thread, Nil)"* %15, %Nil zeroinitializer), !dbg !2320
ret %"Hash::Entry(Thread, Nil)"* null, !dbg !2320
else3: ; preds = %body
%16 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2321
%17 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %16, i32 0, i32 3, !dbg !2321
%18 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %17, !dbg !2321
%19 = icmp ne %"Hash::Entry(Thread, Nil)"* %18, null, !dbg !2321
br i1 %19, label %then4, label %else5, !dbg !2321
then4: ; preds = %else3
%20 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2321
%21 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %20, i32 0, i32 3, !dbg !2321
%22 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %21, !dbg !2321
store %"Hash::Entry(Thread, Nil)"* %22, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2322
br label %exit6, !dbg !2322
else5: ; preds = %else3
%23 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %entry1, !dbg !2322
%24 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)::new<Thread, Nil>:Hash::Entry(Thread, Nil)"(i32 645, %Thread* %key, %Nil zeroinitializer), !dbg !2323
%25 = call %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#next=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %23, %"Hash::Entry(Thread, Nil)"* %24), !dbg !2314
ret %"Hash::Entry(Thread, Nil)"* %25, !dbg !2314
exit6: ; preds = %then4
br label %while, !dbg !2314
exit7: ; preds = %exit
ret %"Hash::Entry(Thread, Nil)"* null, !dbg !2316
}
; Function Attrs: uwtable
define internal i1 @"*Thread@Reference#==<Thread>:Bool"(%Thread* %self, %Thread* %other) #0 !dbg !279 {
entry:
%0 = call i1 @"*Thread@Reference#same?<Thread>:Bool"(%Thread* %self, %Thread* %other), !dbg !2324
ret i1 %0, !dbg !2324
}
; Function Attrs: uwtable
define internal i1 @"*Thread@Reference#same?<Thread>:Bool"(%Thread* %self, %Thread* %other) #0 !dbg !280 {
entry:
%0 = ptrtoint %Thread* %self to i64, !dbg !2325
%1 = ptrtoint %Thread* %other to i64, !dbg !2325
%2 = icmp eq i64 %0, %1, !dbg !2325
ret i1 %2, !dbg !2325
}
; Function Attrs: uwtable
define internal void @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#value=<Nil>:Nil"(%"Hash::Entry(Thread, Nil)"* %self, %Nil %value) #0 !dbg !281 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2326
ret void, !dbg !2326
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)::new<Thread, Nil>:Hash::Entry(Thread, Nil)"(i32 %self, %Thread* %key, %Nil %value) #0 !dbg !282 {
alloca:
%_ = alloca %"Hash::Entry(Thread, Nil)"*, !dbg !2327
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Hash::Entry(Thread, Nil)"* getelementptr (%"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* null, i32 1) to i64)), !dbg !2327
%1 = bitcast i8* %0 to %"Hash::Entry(Thread, Nil)"*, !dbg !2327
%2 = bitcast %"Hash::Entry(Thread, Nil)"* %1 to i8*, !dbg !2327
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Hash::Entry(Thread, Nil)"* getelementptr (%"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2327
%3 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %1, i32 0, i32 0, !dbg !2327
store i32 122, i32* %3, !dbg !2327
store %"Hash::Entry(Thread, Nil)"* %1, %"Hash::Entry(Thread, Nil)"** %_, !dbg !2327
%4 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %_, !dbg !2327
call void @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#initialize<Thread, Nil>:Nil"(%"Hash::Entry(Thread, Nil)"* %4, %Thread* %key, %Nil zeroinitializer), !dbg !2327
%5 = load %"Hash::Entry(Thread, Nil)"*, %"Hash::Entry(Thread, Nil)"** %_, !dbg !2327
ret %"Hash::Entry(Thread, Nil)"* %5, !dbg !2327
}
; Function Attrs: uwtable
define internal void @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#initialize<Thread, Nil>:Nil"(%"Hash::Entry(Thread, Nil)"* %self, %Thread* %key, %Nil %value) #0 !dbg !283 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 1, !dbg !2328
store %Thread* %key, %Thread** %0, !dbg !2328
%1 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 2, !dbg !2329
ret void, !dbg !2329
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#next=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %self, %"Hash::Entry(Thread, Nil)"* %next) #0 !dbg !284 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 3, !dbg !2330
store %"Hash::Entry(Thread, Nil)"* %next, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2330
ret %"Hash::Entry(Thread, Nil)"* %next, !dbg !2330
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#fore=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %self, %"Hash::Entry(Thread, Nil)"* %fore) #0 !dbg !285 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 4, !dbg !2331
store %"Hash::Entry(Thread, Nil)"* %fore, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2331
ret %"Hash::Entry(Thread, Nil)"* %fore, !dbg !2331
}
; Function Attrs: uwtable
define internal %"Hash::Entry(Thread, Nil)"* @"*Hash::Entry(Thread, Nil)@Hash::Entry(K, V)#back=<Hash::Entry(Thread, Nil)>:Hash::Entry(Thread, Nil)"(%"Hash::Entry(Thread, Nil)"* %self, %"Hash::Entry(Thread, Nil)"* %back) #0 !dbg !286 {
entry:
%0 = getelementptr inbounds %"Hash::Entry(Thread, Nil)", %"Hash::Entry(Thread, Nil)"* %self, i32 0, i32 5, !dbg !2332
store %"Hash::Entry(Thread, Nil)"* %back, %"Hash::Entry(Thread, Nil)"** %0, !dbg !2332
ret %"Hash::Entry(Thread, Nil)"* %back, !dbg !2332
}
declare i64 @pthread_self()
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer<Thread>:Nil"(%Thread* %object) #0 !dbg !287 {
entry:
call void @"*GC::add_finalizer_impl<Thread>:Nil"(%Thread* %object), !dbg !2333
ret void, !dbg !2333
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer_impl<Thread>:Nil"(%Thread* %object) #0 !dbg !288 {
alloca:
%0 = alloca %"->", !dbg !2334
br label %entry
entry: ; preds = %alloca
%1 = bitcast %Thread* %object to i8*, !dbg !2334
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2334
store i8* bitcast (%"(Int32 | Nil)" (i8*, i8*)* @"~procProc(Pointer(Void), Pointer(Void), (Int32 | Nil))@src/gc/boehm.cr:121" to i8*), i8** %2, !dbg !2334
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2334
store i8* null, i8** %3, !dbg !2334
%4 = load %"->", %"->"* %0, !dbg !2334
%5 = call i8* @"~check_proc_is_not_closure"(%"->" %4), !dbg !2334
%6 = bitcast i8* %5 to %Nil (i8*, i8*)*, !dbg !2334
call void @GC_register_finalizer_ignore_self(i8* %1, %Nil (i8*, i8*)* %6, i8* null, %"->"* null, i8** null), !dbg !2335
ret void, !dbg !2335
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"~procProc(Pointer(Void), Pointer(Void), (Int32 | Nil))@src/gc/boehm.cr:121"(i8* %obj, i8* %data) #0 !dbg !289 {
alloca:
%0 = alloca %"(Int32 | Nil)", !dbg !2336
br label %entry
entry: ; preds = %alloca
%1 = bitcast i8* %obj to %Thread*, !dbg !2337
%2 = call %"(Int32 | Nil)" @"*Thread#finalize:(Int32 | Nil)"(%Thread* %1), !dbg !2336
store %"(Int32 | Nil)" %2, %"(Int32 | Nil)"* %0, !dbg !2336
%3 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !2336
ret %"(Int32 | Nil)" %3, !dbg !2336
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*Thread#finalize:(Int32 | Nil)"(%Thread* %self) #0 !dbg !290 {
alloca:
%0 = alloca %"(Int32 | Nil)", !dbg !2338
%1 = alloca %"(Int32 | Nil)", !dbg !2338
br label %entry
entry: ; preds = %alloca
%2 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 3, !dbg !2338
%3 = load i1, i1* %2, !dbg !2338
br i1 %3, label %then, label %else, !dbg !2338
then: ; preds = %entry
%4 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !2338
store i32 0, i32* %4, !dbg !2338
%5 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !2338
store [1 x i64] zeroinitializer, [1 x i64]* %5, !dbg !2338
br label %exit, !dbg !2338
else: ; preds = %entry
%6 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 1, !dbg !2338
%7 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %6, i32 0, i32 0, !dbg !2338
%8 = load i32, i32* %7, !dbg !2338
%9 = icmp eq i32 155, %8, !dbg !2338
br i1 %9, label %current_def, label %next_def, !dbg !2338
exit: ; preds = %exit1, %then
%10 = phi %"(Int32 | Nil)"* [ %0, %then ], [ %1, %exit1 ], !dbg !2338
%11 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %10, !dbg !2338
ret %"(Int32 | Nil)" %11, !dbg !2338
current_def: ; preds = %else
%12 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %6, i32 0, i32 1, !dbg !2338
%13 = bitcast [1 x i64]* %12 to i64*, !dbg !2338
%14 = load i64, i64* %13, !dbg !2338
br label %exit1, !dbg !2338
next_def: ; preds = %else
%15 = icmp eq i32 0, %8, !dbg !2338
br i1 %15, label %current_def2, label %next_def3, !dbg !2338
exit1: ; preds = %current_def
%16 = phi i64 [ %14, %current_def ], !dbg !2339
%17 = call i32 @"*GC::pthread_detach<UInt64>:Int32"(i64 %16), !dbg !2338
%18 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !2338
store i32 152, i32* %18, !dbg !2338
%19 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !2338
%20 = bitcast [1 x i64]* %19 to i32*, !dbg !2338
store i32 %17, i32* %20, !dbg !2338
br label %exit, !dbg !2338
current_def2: ; preds = %next_def
call void @"*Nil#not_nil!:NoReturn"(%Nil zeroinitializer), !dbg !2339
unreachable, !dbg !2339
next_def3: ; preds = %next_def
unreachable, !dbg !2339
}
; Function Attrs: noreturn uwtable
define internal void @"*Nil#not_nil!:NoReturn"(%Nil %self) #1 !dbg !291 {
entry:
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [21 x i8] }* @"'Nil assertion faile...'" to %String*)), !dbg !2340
unreachable, !dbg !2340
}
; Function Attrs: uwtable
define internal i32 @"*GC::pthread_detach<UInt64>:Int32"(i64 %thread) #0 !dbg !293 {
entry:
%0 = call i32 @GC_pthread_detach(i64 %thread), !dbg !2341
ret i32 %0, !dbg !2341
}
declare i32 @GC_pthread_detach(i64)
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber::root:Fiber"() #0 !dbg !294 {
entry:
%0 = call %Fiber** @"~Fiber::root:read"(), !dbg !2342
%1 = load %Fiber*, %Fiber** %0, !dbg !2342
ret %Fiber* %1, !dbg !2342
}
define internal %Fiber** @"~Fiber::root:read"() {
entry:
%0 = load i1, i1* @"Fiber::root:init", !dbg !2342
br i1 %0, label %initialized, label %not_initialized, !dbg !2342
initialized: ; preds = %not_initialized, %entry
ret %Fiber** @"Fiber::root", !dbg !2342
not_initialized: ; preds = %entry
store i1 true, i1* @"Fiber::root:init", !dbg !2342
call void @"~Fiber::root:init"(), !dbg !2342
br label %initialized, !dbg !2342
}
; Function Attrs: uwtable
define internal %Fiber* @"*Thread#current_fiber=<Fiber>:Fiber"(%Thread* %self, %Fiber* %current_fiber) #0 !dbg !295 {
entry:
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 5, !dbg !2343
store %Fiber* %current_fiber, %Fiber** %0, !dbg !2343
ret %Fiber* %current_fiber, !dbg !2343
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@src/fiber.cr:321"() #0 !dbg !296 {
alloca:
%fiber = alloca %Fiber*, !dbg !2344
br label %entry
entry: ; preds = %alloca
%0 = load %Fiber*, %Fiber** @"Fiber::first_fiber", !dbg !2344
store %Fiber* %0, %Fiber** %fiber, !dbg !2345
br label %while, !dbg !2345
while: ; preds = %exit1, %entry
%1 = load %Fiber*, %Fiber** %fiber, !dbg !2346
%2 = icmp ne %Fiber* %1, null, !dbg !2346
br i1 %2, label %body, label %exit, !dbg !2346
body: ; preds = %while
%3 = load %Fiber*, %Fiber** %fiber, !dbg !2347
%4 = call %Thread* @"*Thread::current:Thread"(), !dbg !2348
%5 = getelementptr inbounds %Thread, %Thread* %4, i32 0, i32 5, !dbg !2348
%6 = load %Fiber*, %Fiber** %5, !dbg !2348
%7 = call i1 @"*Fiber@Reference#==<Fiber>:Bool"(%Fiber* %3, %Fiber* %6), !dbg !2349
br i1 %7, label %then, label %else, !dbg !2349
exit: ; preds = %while
ret void, !dbg !2350
then: ; preds = %body
br label %exit1, !dbg !2349
else: ; preds = %body
%8 = load %Fiber*, %Fiber** %fiber, !dbg !2349
call void @"*Fiber#push_gc_roots:Nil"(%Fiber* %8), !dbg !2347
br label %exit1, !dbg !2347
exit1: ; preds = %else, %then
%9 = load %Fiber*, %Fiber** %fiber, !dbg !2347
%10 = getelementptr inbounds %Fiber, %Fiber* %9, i32 0, i32 5, !dbg !2347
%11 = load %Fiber*, %Fiber** %10, !dbg !2347
store %Fiber* %11, %Fiber** %fiber, !dbg !2350
br label %while, !dbg !2350
}
; Function Attrs: uwtable
define internal i1 @"*Fiber@Reference#==<Fiber>:Bool"(%Fiber* %self, %Fiber* %other) #0 !dbg !297 {
entry:
%0 = call i1 @"*Fiber@Reference#same?<Fiber>:Bool"(%Fiber* %self, %Fiber* %other), !dbg !2351
ret i1 %0, !dbg !2351
}
; Function Attrs: uwtable
define internal i1 @"*Fiber@Reference#same?<Fiber>:Bool"(%Fiber* %self, %Fiber* %other) #0 !dbg !298 {
entry:
%0 = ptrtoint %Fiber* %self to i64, !dbg !2352
%1 = ptrtoint %Fiber* %other to i64, !dbg !2352
%2 = icmp eq i64 %0, %1, !dbg !2352
ret i1 %2, !dbg !2352
}
; Function Attrs: uwtable
define internal void @"*Fiber#push_gc_roots:Nil"(%Fiber* %self) #0 !dbg !299 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !2353
%1 = load i8*, i8** %0, !dbg !2353
%2 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !2353
%3 = load i8*, i8** %2, !dbg !2353
call void @"*GC::push_stack<Pointer(Void), Pointer(Void)>:Nil"(i8* %1, i8* %3), !dbg !2354
ret void, !dbg !2354
}
; Function Attrs: uwtable
define internal void @"*GC::push_stack<Pointer(Void), Pointer(Void)>:Nil"(i8* %stack_top, i8* %stack_bottom) #0 !dbg !300 {
entry:
call void @GC_push_all_eager(i8* %stack_top, i8* %stack_bottom), !dbg !2355
ret void, !dbg !2355
}
declare void @GC_push_all_eager(i8*, i8*)
; Function Attrs: uwtable
define internal void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %block) #0 !dbg !301 {
alloca:
%0 = alloca %"->", !dbg !2356
%1 = alloca %"->", !dbg !2357
br label %entry
entry: ; preds = %alloca
%2 = call %Nil ()* @GC_get_push_other_roots(), !dbg !2356
%3 = bitcast %Nil ()* %2 to i8*, !dbg !2356
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2356
store i8* %3, i8** %4, !dbg !2356
%5 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2356
store i8* null, i8** %5, !dbg !2356
%6 = load %"->", %"->"* %0, !dbg !2356
store %"->" %6, %"->"* @"GC::prev_push_other_roots", !dbg !2358
store %"->" %block, %"->"* @"GC::curr_push_other_roots", !dbg !2357
%7 = getelementptr inbounds %"->", %"->"* %1, i32 0, i32 0, !dbg !2357
store i8* bitcast (void ()* @"~procProc(Nil)@src/gc/boehm.cr:195" to i8*), i8** %7, !dbg !2357
%8 = getelementptr inbounds %"->", %"->"* %1, i32 0, i32 1, !dbg !2357
store i8* null, i8** %8, !dbg !2357
%9 = load %"->", %"->"* %1, !dbg !2357
%10 = call i8* @"~check_proc_is_not_closure"(%"->" %9), !dbg !2357
%11 = bitcast i8* %10 to %Nil ()*, !dbg !2357
call void @GC_set_push_other_roots(%Nil ()* %11), !dbg !2359
ret void, !dbg !2359
}
declare %Nil ()* @GC_get_push_other_roots()
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@src/gc/boehm.cr:195"() #0 !dbg !302 {
alloca:
%__arg0 = alloca %"->", !dbg !2360
%__arg03 = alloca %"->", !dbg !2360
%__arg1 = alloca %"->", !dbg !2361
%__arg110 = alloca %"->", !dbg !2361
br label %entry
entry: ; preds = %alloca
%0 = load %"->", %"->"* @"GC::prev_push_other_roots", !dbg !2362
%1 = extractvalue %"->" %0, 0, !dbg !2362
%2 = icmp eq i8* %1, null, !dbg !2362
%3 = select i1 %2, i32 0, i32 444, !dbg !2362
%4 = icmp eq i32 0, %3, !dbg !2362
br i1 %4, label %current_def, label %next_def, !dbg !2362
current_def: ; preds = %entry
br label %exit, !dbg !2360
next_def: ; preds = %entry
%5 = icmp eq i32 444, %3, !dbg !2360
br i1 %5, label %current_def1, label %next_def2, !dbg !2360
exit: ; preds = %exit4, %current_def
%6 = load %"->", %"->"* @"GC::curr_push_other_roots", !dbg !2363
%7 = extractvalue %"->" %6, 0, !dbg !2363
%8 = icmp eq i8* %7, null, !dbg !2363
%9 = select i1 %8, i32 0, i32 444, !dbg !2363
%10 = icmp eq i32 0, %9, !dbg !2363
br i1 %10, label %current_def5, label %next_def6, !dbg !2363
current_def1: ; preds = %next_def
store %"->" %0, %"->"* %__arg03, !dbg !2360
%11 = load %"->", %"->"* %__arg03, !dbg !2360
%12 = extractvalue %"->" %11, 0, !dbg !2360
%13 = extractvalue %"->" %11, 1, !dbg !2360
%14 = icmp eq i8* %13, null, !dbg !2360
br i1 %14, label %ctx_is_null, label %ctx_is_not_null, !dbg !2360
next_def2: ; preds = %next_def
unreachable, !dbg !2363
ctx_is_null: ; preds = %current_def1
%15 = bitcast i8* %12 to %Nil ()*, !dbg !2360
%16 = call %Nil %15(), !dbg !2363
br label %exit4, !dbg !2363
ctx_is_not_null: ; preds = %current_def1
%17 = bitcast i8* %12 to %Nil (i8*)*, !dbg !2363
%18 = call %Nil %17(i8* %13), !dbg !2363
br label %exit4, !dbg !2363
exit4: ; preds = %ctx_is_not_null, %ctx_is_null
br label %exit, !dbg !2363
current_def5: ; preds = %exit
br label %exit7, !dbg !2361
next_def6: ; preds = %exit
%19 = icmp eq i32 444, %9, !dbg !2361
br i1 %19, label %current_def8, label %next_def9, !dbg !2361
exit7: ; preds = %exit13, %current_def5
ret void, !dbg !2363
current_def8: ; preds = %next_def6
store %"->" %6, %"->"* %__arg110, !dbg !2361
%20 = load %"->", %"->"* %__arg110, !dbg !2361
%21 = extractvalue %"->" %20, 0, !dbg !2361
%22 = extractvalue %"->" %20, 1, !dbg !2361
%23 = icmp eq i8* %22, null, !dbg !2361
br i1 %23, label %ctx_is_null11, label %ctx_is_not_null12, !dbg !2361
next_def9: ; preds = %next_def6
unreachable, !dbg !2363
ctx_is_null11: ; preds = %current_def8
%24 = bitcast i8* %21 to %Nil ()*, !dbg !2361
%25 = call %Nil %24(), !dbg !2363
br label %exit13, !dbg !2363
ctx_is_not_null12: ; preds = %current_def8
%26 = bitcast i8* %21 to %Nil (i8*)*, !dbg !2363
%27 = call %Nil %26(i8* %22), !dbg !2363
br label %exit13, !dbg !2363
exit13: ; preds = %ctx_is_not_null12, %ctx_is_null11
br label %exit7, !dbg !2363
}
declare void @GC_set_push_other_roots(%Nil ()*)
define internal void @"~Scheduler::runnables:init"() {
entry:
%0 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 613)
store %"Deque(Fiber)"* %0, %"Deque(Fiber)"** @"Scheduler::runnables"
ret void
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 %self) #0 !dbg !303 {
alloca:
%_ = alloca %"Deque(Fiber)"*, !dbg !2364
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Deque(Fiber)"* getelementptr (%"Deque(Fiber)", %"Deque(Fiber)"* null, i32 1) to i64)), !dbg !2364
%1 = bitcast i8* %0 to %"Deque(Fiber)"*, !dbg !2364
%2 = bitcast %"Deque(Fiber)"* %1 to i8*, !dbg !2364
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Deque(Fiber)"* getelementptr (%"Deque(Fiber)", %"Deque(Fiber)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2364
%3 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %1, i32 0, i32 1, !dbg !2364
store i32 0, i32* %3, !dbg !2364
%4 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %1, i32 0, i32 0, !dbg !2364
store i32 106, i32* %4, !dbg !2364
store %"Deque(Fiber)"* %1, %"Deque(Fiber)"** %_, !dbg !2364
%5 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %_, !dbg !2364
%6 = call %Fiber** @"*Deque(Fiber)@Deque(T)#initialize:Pointer(Fiber)"(%"Deque(Fiber)"* %5), !dbg !2364
%7 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %_, !dbg !2364
ret %"Deque(Fiber)"* %7, !dbg !2364
}
; Function Attrs: uwtable
define internal %Fiber** @"*Deque(Fiber)@Deque(T)#initialize:Pointer(Fiber)"(%"Deque(Fiber)"* %self) #0 !dbg !305 {
entry:
%0 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2365
store i32 0, i32* %0, !dbg !2365
%1 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2366
store i32 0, i32* %1, !dbg !2366
%2 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)::null:Pointer(Fiber)"(i32 762), !dbg !2367
%3 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2368
store %Fiber** %2, %Fiber*** %3, !dbg !2368
ret %Fiber** %2, !dbg !2368
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)::null:Pointer(Fiber)"(i32 %self) #0 !dbg !306 {
entry:
ret %Fiber** null, !dbg !2369
}
define internal void @"~Scheduler::eb:init"() {
alloca:
%0 = alloca %"Event::Base"
br label %entry
entry: ; preds = %alloca
%1 = call %"Event::Base" @"*Event::Base::new:Event::Base"()
store %"Event::Base" %1, %"Event::Base"* %0
%2 = load %"Event::Base", %"Event::Base"* %0
store %"Event::Base" %2, %"Event::Base"* @"Scheduler::eb"
ret void
}
; Function Attrs: uwtable
define internal %"Event::Base" @"*Event::Base::new:Event::Base"() #0 !dbg !307 {
alloca:
%_ = alloca %"Event::Base", !dbg !2370
%0 = alloca %"Event::Base", !dbg !2370
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Event::Base"* %0 to i8*, !dbg !2370
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i32), i32 4, i1 false), !dbg !2370
%2 = load %"Event::Base", %"Event::Base"* %0, !dbg !2370
store %"Event::Base" %2, %"Event::Base"* %_, !dbg !2370
%3 = call i8* @"*Event::Base#initialize:Pointer(Void)"(%"Event::Base"* %_), !dbg !2370
%4 = load %"Event::Base", %"Event::Base"* %_, !dbg !2370
ret %"Event::Base" %4, !dbg !2370
}
; Function Attrs: uwtable
define internal i8* @"*Event::Base#initialize:Pointer(Void)"(%"Event::Base"* %self) #0 !dbg !309 {
entry:
%0 = call i8* @event_base_new(), !dbg !2371
%1 = getelementptr inbounds %"Event::Base", %"Event::Base"* %self, i32 0, i32 0, !dbg !2372
store i8* %0, i8** %1, !dbg !2372
ret i8* %0, !dbg !2372
}
declare i8* @event_base_new()
; Function Attrs: uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !1347 {
entry:
%0 = call i32 @"*Crystal::main<Int32, Pointer(Pointer(UInt8))>:Int32"(i32 %argc, i8** %argv), !dbg !2373
ret i32 %0, !dbg !2373
}
define internal void @"~File::DEFAULT_CREATE_PERMISSIONS:init"() {
entry:
%0 = call i16 @"*File::Permissions::new<Int32>:File::Permissions"(i32 420)
store i16 %0, i16* @"File::DEFAULT_CREATE_PERMISSIONS"
ret void
}
; Function Attrs: uwtable
define internal i16 @"*File::Permissions::new<Int32>:File::Permissions"(i32 %int) #0 !dbg !310 {
entry:
%0 = trunc i32 %int to i16, !dbg !2374
ret i16 %0, !dbg !2374
}
; Function Attrs: uwtable
define i8* @__crystal_malloc(i32 %size) #0 !dbg !1366 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !2375
%1 = call i8* @"*GC::malloc<UInt64>:Pointer(Void)"(i64 %0), !dbg !2376
ret i8* %1, !dbg !2376
}
; Function Attrs: uwtable
define i8* @__crystal_malloc_atomic(i32 %size) #0 !dbg !1367 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !2377
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !2378
ret i8* %1, !dbg !2378
}
; Function Attrs: uwtable
define i8* @__crystal_realloc(i8* %pointer, i32 %size) #0 !dbg !1368 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !2379
%1 = call i8* @"*GC::realloc<Pointer(Void), UInt64>:Pointer(Void)"(i8* %pointer, i64 %0), !dbg !2380
ret i8* %1, !dbg !2380
}
; Function Attrs: uwtable
define internal void @"*Random::Secure@Random::Secure::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %buf) #0 !dbg !312 {
alloca:
%buf1 = alloca %"Slice(UInt8)", !dbg !2381
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %buf, %"Slice(UInt8)"* %buf1, !dbg !2381
%0 = load %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, !dbg !2381
call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %0), !dbg !2382
ret void, !dbg !2382
}
; Function Attrs: uwtable
define internal void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %buf) #0 !dbg !314 {
alloca:
%urandom = alloca %File*, !dbg !2383
%buf1 = alloca %"Slice(UInt8)", !dbg !2383
%0 = alloca %"(Int32 | Nil)", !dbg !2384
%1 = alloca %"(Int32 | Nil)", !dbg !2385
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %buf, %"Slice(UInt8)"* %buf1, !dbg !2383
%2 = call i1* @"~Crystal::System::Random::initialized:read"(), !dbg !2386
%3 = load i1, i1* %2, !dbg !2386
br i1 %3, label %then, label %else, !dbg !2386
then: ; preds = %entry
br label %exit, !dbg !2386
else: ; preds = %entry
%4 = call %"(Bool | File | Nil)" @"*Crystal::System::Random::init:(Bool | File | Nil)"(), !dbg !2386
br label %exit, !dbg !2386
exit: ; preds = %else, %then
%5 = call i1* @"~Crystal::System::Random::getrandom_available:read"(), !dbg !2387
%6 = load i1, i1* %5, !dbg !2387
br i1 %6, label %then2, label %else3, !dbg !2387
then2: ; preds = %exit
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, !dbg !2387
call void @"*Crystal::System::Random::getrandom<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %7), !dbg !2384
%8 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !2384
store i32 0, i32* %8, !dbg !2384
%9 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !2384
store [1 x i64] zeroinitializer, [1 x i64]* %9, !dbg !2384
br label %exit4, !dbg !2384
else3: ; preds = %exit
%10 = load %File*, %File** @"Crystal::System::Random::urandom", !dbg !2388
store %File* %10, %File** %urandom, !dbg !2389
%11 = icmp ne %File* %10, null, !dbg !2389
br i1 %11, label %then5, label %else6, !dbg !2389
exit4: ; preds = %exit7, %then2
%12 = phi %"(Int32 | Nil)"* [ %0, %then2 ], [ %1, %exit7 ], !dbg !2385
ret void, !dbg !2385
then5: ; preds = %else3
%13 = load %File*, %File** %urandom, !dbg !2389
%14 = load %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, !dbg !2389
%15 = call i32 @"*File@IO#read_fully<Slice(UInt8)>:Int32"(%File* %13, %"Slice(UInt8)" %14), !dbg !2390
br label %exit7, !dbg !2390
else6: ; preds = %else3
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [57 x i8] }* @"'Failed to access se...'" to %String*)), !dbg !2385
unreachable, !dbg !2385
exit7: ; preds = %then5
%16 = phi i32 [ %15, %then5 ], !dbg !2385
%17 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !2385
store i32 152, i32* %17, !dbg !2385
%18 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !2385
%19 = bitcast [1 x i64]* %18 to i32*, !dbg !2385
store i32 %16, i32* %19, !dbg !2385
br label %exit4, !dbg !2385
}
define internal i1* @"~Crystal::System::Random::initialized:read"() {
entry:
%0 = load i1, i1* @"Crystal::System::Random::initialized:init", !dbg !2386
br i1 %0, label %initialized, label %not_initialized, !dbg !2386
initialized: ; preds = %not_initialized, %entry
ret i1* @"Crystal::System::Random::initialized", !dbg !2386
not_initialized: ; preds = %entry
store i1 true, i1* @"Crystal::System::Random::initialized:init", !dbg !2386
call void @"~Crystal::System::Random::initialized:init"(), !dbg !2386
br label %initialized, !dbg !2386
}
; Function Attrs: uwtable
define internal %"(Bool | File | Nil)" @"*Crystal::System::Random::init:(Bool | File | Nil)"() #0 !dbg !316 {
alloca:
%urandom = alloca %File*, !dbg !2391
%0 = alloca %"Slice(UInt8)", !dbg !2392
%1 = alloca %"(Bool | File)", !dbg !2393
%2 = alloca %"Crystal::System::FileInfo", !dbg !2394
%3 = alloca %"(Bool | File | Nil)", !dbg !2394
%4 = alloca %"(Bool | File)", !dbg !2395
br label %entry
entry: ; preds = %alloca
%5 = call i1* @"~Crystal::System::Random::initialized:read"(), !dbg !2396
store i1 true, i1* %5, !dbg !2396
%6 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Int32>:Slice(UInt8)"(i32 1033, i32 16), !dbg !2392
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %0, !dbg !2392
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2392
%8 = call i64 @"*Crystal::System::Random::sys_getrandom<Slice(UInt8)>:Int64"(%"Slice(UInt8)" %7), !dbg !2397
%9 = icmp sge i64 %8, 0, !dbg !2397
br i1 %9, label %then, label %else, !dbg !2397
then: ; preds = %entry
%10 = call i1* @"~Crystal::System::Random::getrandom_available:read"(), !dbg !2393
store i1 true, i1* %10, !dbg !2393
%11 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %1, i32 0, i32 0, !dbg !2393
store i32 163, i32* %11, !dbg !2393
%12 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %1, i32 0, i32 1, !dbg !2393
%13 = bitcast [1 x i64]* %12 to i64*, !dbg !2393
store i64 1, i64* %13, !dbg !2393
br label %exit, !dbg !2393
else: ; preds = %entry
%14 = call %File* @"*File::open<String, String>:File"(%String* bitcast ({ i32, i32, i32, [13 x i8] }* @"'/dev/urandom'" to %String*), %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'r'" to %String*)), !dbg !2398
store %File* %14, %File** %urandom, !dbg !2399
%15 = load %File*, %File** %urandom, !dbg !2400
%16 = call %"Crystal::System::FileInfo" @"*File@IO::FileDescriptor#info:Crystal::System::FileInfo"(%File* %15), !dbg !2394
store %"Crystal::System::FileInfo" %16, %"Crystal::System::FileInfo"* %2, !dbg !2394
%17 = call i8 @"*Crystal::System::FileInfo#type:File::Type"(%"Crystal::System::FileInfo"* %2), !dbg !2394
%18 = call i1 @"*File::Type#character_device?:Bool"(i8 %17), !dbg !2394
br i1 %18, label %then1, label %else2, !dbg !2394
exit: ; preds = %exit3, %then
%19 = phi %"(Bool | File)"* [ %1, %then ], [ %4, %exit3 ], !dbg !2395
%20 = bitcast %"(Bool | File)"* %19 to %"(Bool | File | Nil)"*, !dbg !2395
%21 = load %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %20, !dbg !2395
ret %"(Bool | File | Nil)" %21, !dbg !2395
then1: ; preds = %else
br label %exit3, !dbg !2394
else2: ; preds = %else
%22 = getelementptr inbounds %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, i32 0, i32 0, !dbg !2394
store i32 0, i32* %22, !dbg !2394
%23 = getelementptr inbounds %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, i32 0, i32 1, !dbg !2394
store [1 x i64] zeroinitializer, [1 x i64]* %23, !dbg !2394
%24 = load %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, !dbg !2394
ret %"(Bool | File | Nil)" %24, !dbg !2394
exit3: ; preds = %then1
%25 = load %File*, %File** %urandom, !dbg !2394
%26 = call i1 @"*File@IO::FileDescriptor#close_on_exec=<Bool>:Bool"(%File* %25, i1 true), !dbg !2401
%27 = load %File*, %File** %urandom, !dbg !2401
%28 = call i1 @"*File@IO::Buffered#sync=<Bool>:Bool"(%File* %27, i1 true), !dbg !2402
%29 = load %File*, %File** %urandom, !dbg !2402
store %File* %29, %File** @"Crystal::System::Random::urandom", !dbg !2395
%30 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %4, i32 0, i32 0, !dbg !2395
store i32 78, i32* %30, !dbg !2395
%31 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %4, i32 0, i32 1, !dbg !2395
%32 = bitcast [1 x i64]* %31 to %File**, !dbg !2395
store %File* %29, %File** %32, !dbg !2395
br label %exit, !dbg !2395
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Int32>:Slice(UInt8)"(i32 %self, i32 %size) #0 !dbg !317 {
alloca:
%read_only = alloca i1, !dbg !2403
%pointer = alloca i8*, !dbg !2403
%0 = alloca %"Slice(UInt8)", !dbg !2404
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %read_only, !dbg !2405
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 690, i32 %size), !dbg !2406
store i8* %1, i8** %pointer, !dbg !2407
%2 = load i8*, i8** %pointer, !dbg !2407
%3 = load i1, i1* %read_only, !dbg !2407
%4 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i32 %self, i8* %2, i32 %size, i1 %3), !dbg !2404
store %"Slice(UInt8)" %4, %"Slice(UInt8)"* %0, !dbg !2404
%5 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2404
ret %"Slice(UInt8)" %5, !dbg !2404
}
; Function Attrs: uwtable
define internal i64 @"*Crystal::System::Random::sys_getrandom<Slice(UInt8)>:Int64"(%"Slice(UInt8)" %buf) #0 !dbg !318 {
alloca:
%buf1 = alloca %"Slice(UInt8)", !dbg !2408
%read_bytes = alloca i64, !dbg !2409
%__temp_221 = alloca i1, !dbg !2409
%__temp_222 = alloca i1, !dbg !2409
%i = alloca i32, !dbg !2409
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %buf, %"Slice(UInt8)"* %buf1, !dbg !2408
store i32 0, i32* %i, !dbg !2410
br label %while, !dbg !2410
while: ; preds = %exit8, %entry
br i1 true, label %body, label %exit, !dbg !2411
body: ; preds = %while
%0 = load i32, i32* %i, !dbg !2411
%1 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, i32 0, i32 2, !dbg !2411
%2 = load i8*, i8** %1, !dbg !2411
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, i32 0, i32 0, !dbg !2411
%4 = load i32, i32* %3, !dbg !2411
%5 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %4), !dbg !2412
%6 = call i64 (i64, ...) @syscall(i64 318, i8* %2, i64 %5, i32 0), !dbg !2413
store i64 %6, i64* %read_bytes, !dbg !2414
%7 = load i64, i64* %read_bytes, !dbg !2415
%8 = icmp slt i64 %7, 0, !dbg !2415
store i1 %8, i1* %__temp_221, !dbg !2415
br i1 %8, label %then2, label %else3, !dbg !2415
exit: ; preds = %while
unreachable, !dbg !2416
then: ; preds = %exit7
call void @"*Fiber::yield:Nil"(), !dbg !2417
br label %exit8, !dbg !2417
else: ; preds = %exit7
%9 = load i64, i64* %read_bytes, !dbg !2417
ret i64 %9, !dbg !2417
then2: ; preds = %body
%10 = call i32 @"*Errno::value:Int32"(), !dbg !2418
%11 = icmp eq i32 %10, 4, !dbg !2418
store i1 %11, i1* %__temp_222, !dbg !2418
br i1 %11, label %then4, label %else5, !dbg !2418
else3: ; preds = %body
%12 = load i1, i1* %__temp_221, !dbg !2419
br label %exit7, !dbg !2419
then4: ; preds = %then2
%13 = load i1, i1* %__temp_222, !dbg !2418
br label %exit6, !dbg !2418
else5: ; preds = %then2
%14 = call i32 @"*Errno::value:Int32"(), !dbg !2419
%15 = icmp eq i32 %14, 11, !dbg !2419
br label %exit6, !dbg !2419
exit6: ; preds = %else5, %then4
%16 = phi i1 [ %13, %then4 ], [ %15, %else5 ], !dbg !2419
br label %exit7, !dbg !2419
exit7: ; preds = %else3, %exit6
%17 = phi i1 [ %16, %exit6 ], [ %12, %else3 ], !dbg !2419
br i1 %17, label %then, label %else, !dbg !2419
exit8: ; preds = %then
%18 = load i32, i32* %i, !dbg !2417
%19 = add i32 %18, 1, !dbg !2417
store i32 %19, i32* %i, !dbg !2416
br label %while, !dbg !2416
}
declare i64 @syscall(i64, ...)
; Function Attrs: uwtable
define internal void @"*Fiber::yield:Nil"() #0 !dbg !319 {
entry:
%0 = call %Fiber* @"*Fiber::current:Fiber"(), !dbg !2420
call void @"*Fiber#yield:Nil"(%Fiber* %0), !dbg !2420
ret void, !dbg !2420
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber::current:Fiber"() #0 !dbg !320 {
entry:
%0 = call %Thread* @"*Thread::current:Thread"(), !dbg !2421
%1 = getelementptr inbounds %Thread, %Thread* %0, i32 0, i32 5, !dbg !2421
%2 = load %Fiber*, %Fiber** %1, !dbg !2421
ret %Fiber* %2, !dbg !2421
}
; Function Attrs: uwtable
define internal void @"*Fiber#yield:Nil"(%Fiber* %self) #0 !dbg !321 {
entry:
call void @"*Fiber#sleep<Int32>:Nil"(%Fiber* %self, i32 0), !dbg !2422
ret void, !dbg !2422
}
; Function Attrs: uwtable
define internal void @"*Fiber#sleep<Int32>:Nil"(%Fiber* %self, i32 %time) #0 !dbg !322 {
alloca:
%0 = alloca %"Time::Span", !dbg !2423
br label %entry
entry: ; preds = %alloca
%1 = call %"Time::Span" @"*Int32@Int#seconds:Time::Span"(i32 %time), !dbg !2423
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !2423
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !2423
call void @"*Fiber#sleep<Time::Span>:Nil"(%Fiber* %self, %"Time::Span" %2), !dbg !2424
ret void, !dbg !2424
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Int32@Int#seconds:Time::Span"(i32 %self) #0 !dbg !323 {
alloca:
%0 = alloca %"Time::Span", !dbg !2425
br label %entry
entry: ; preds = %alloca
%1 = call %"Time::Span" @"*Time::Span::new<Int32, Int32, Int32>:Time::Span"(i32 0, i32 0, i32 %self), !dbg !2425
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !2425
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !2425
ret %"Time::Span" %2, !dbg !2425
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Time::Span::new<Int32, Int32, Int32>:Time::Span"(i32 %hours, i32 %minutes, i32 %seconds) #0 !dbg !325 {
alloca:
%0 = alloca %"Time::Span", !dbg !2426
br label %entry
entry: ; preds = %alloca
%1 = call %"Time::Span" @"*Time::Span::new<Int32, Int32, Int32, Int32>:Time::Span"(i32 0, i32 %hours, i32 %minutes, i32 %seconds), !dbg !2426
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !2426
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !2426
ret %"Time::Span" %2, !dbg !2426
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Time::Span::new<Int32, Int32, Int32, Int32>:Time::Span"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds) #0 !dbg !326 {
alloca:
%nanoseconds = alloca i32, !dbg !2427
%0 = alloca %"Time::Span", !dbg !2428
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %nanoseconds, !dbg !2429
%1 = call i64 @"*Time::Span::compute_seconds!<Int32, Int32, Int32, Int32>:Int64"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds), !dbg !2430
%2 = load i32, i32* %nanoseconds, !dbg !2430
%3 = sext i32 %2 to i64, !dbg !2430
%4 = call %"Time::Span" @"*Time::Span::new:seconds:nanoseconds<Int64, Int64>:Time::Span"(i64 %1, i64 %3), !dbg !2428
store %"Time::Span" %4, %"Time::Span"* %0, !dbg !2428
%5 = load %"Time::Span", %"Time::Span"* %0, !dbg !2428
ret %"Time::Span" %5, !dbg !2428
}
; Function Attrs: uwtable
define internal i64 @"*Time::Span::compute_seconds!<Int32, Int32, Int32, Int32>:Int64"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds) #0 !dbg !327 {
alloca:
%0 = alloca %"(Int64 | Nil)", !dbg !2431
br label %entry
entry: ; preds = %alloca
%1 = call %"(Int64 | Nil)" @"*Time::Span::compute_seconds<Int32, Int32, Int32, Int32, Bool>:(Int64 | Nil)"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds, i1 true), !dbg !2431
store %"(Int64 | Nil)" %1, %"(Int64 | Nil)"* %0, !dbg !2431
%2 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 0, !dbg !2431
%3 = load i32, i32* %2, !dbg !2431
%4 = icmp eq i32 154, %3, !dbg !2431
br i1 %4, label %current_def, label %next_def, !dbg !2431
current_def: ; preds = %entry
%5 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 1, !dbg !2431
%6 = bitcast [1 x i64]* %5 to i64*, !dbg !2431
%7 = load i64, i64* %6, !dbg !2431
br label %exit, !dbg !2431
next_def: ; preds = %entry
%8 = icmp eq i32 0, %3, !dbg !2431
br i1 %8, label %current_def1, label %next_def2, !dbg !2431
exit: ; preds = %current_def
%9 = phi i64 [ %7, %current_def ], !dbg !2431
ret i64 %9, !dbg !2431
current_def1: ; preds = %next_def
call void @"*Nil#not_nil!:NoReturn"(%Nil zeroinitializer), !dbg !2431
unreachable, !dbg !2431
next_def2: ; preds = %next_def
unreachable, !dbg !2431
}
; Function Attrs: uwtable
define internal %"(Int64 | Nil)" @"*Time::Span::compute_seconds<Int32, Int32, Int32, Int32, Bool>:(Int64 | Nil)"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds, i1 %raise_exception) #0 !dbg !328 {
alloca:
%hrssec = alloca i32, !dbg !2432
%minsec = alloca i32, !dbg !2432
%s = alloca i64, !dbg !2432
%result = alloca i64, !dbg !2432
%overflow = alloca i1, !dbg !2432
%sd = alloca i64, !dbg !2432
%temp = alloca i64, !dbg !2432
%nanos = alloca i64, !dbg !2432
%0 = alloca %"(Int64 | Nil)", !dbg !2433
%1 = alloca %"(Int64 | Nil)", !dbg !2433
br label %entry
entry: ; preds = %alloca
%2 = mul i32 %hours, 3600, !dbg !2432
store i32 %2, i32* %hrssec, !dbg !2434
%3 = mul i32 %minutes, 60, !dbg !2434
store i32 %3, i32* %minsec, !dbg !2435
%4 = load i32, i32* %hrssec, !dbg !2435
%5 = load i32, i32* %minsec, !dbg !2435
%6 = add i32 %4, %5, !dbg !2435
%7 = add i32 %6, %seconds, !dbg !2435
%8 = sext i32 %7 to i64, !dbg !2435
store i64 %8, i64* %s, !dbg !2436
store i64 0, i64* %result, !dbg !2437
store i1 false, i1* %overflow, !dbg !2438
%9 = icmp sgt i32 %days, 0, !dbg !2439
br i1 %9, label %then, label %else, !dbg !2439
then: ; preds = %entry
%10 = sext i32 %days to i64, !dbg !2439
%11 = mul i64 86400, %10, !dbg !2439
store i64 %11, i64* %sd, !dbg !2440
%12 = load i64, i64* %sd, !dbg !2441
%13 = sext i32 %days to i64, !dbg !2441
%14 = icmp slt i64 %12, %13, !dbg !2441
br i1 %14, label %then1, label %else2, !dbg !2441
else: ; preds = %entry
%15 = icmp slt i32 %days, 0, !dbg !2442
br i1 %15, label %then7, label %else8, !dbg !2442
then1: ; preds = %then
store i1 true, i1* %overflow, !dbg !2443
br label %exit, !dbg !2443
else2: ; preds = %then
%16 = load i64, i64* %s, !dbg !2444
%17 = icmp slt i64 %16, 0, !dbg !2444
br i1 %17, label %then3, label %else4, !dbg !2444
exit: ; preds = %exit5, %then1
br label %exit6, !dbg !2445
then3: ; preds = %else2
%18 = load i64, i64* %s, !dbg !2444
store i64 %18, i64* %temp, !dbg !2446
%19 = load i64, i64* %s, !dbg !2446
%20 = load i64, i64* %sd, !dbg !2446
%21 = add i64 %19, %20, !dbg !2446
store i64 %21, i64* %s, !dbg !2447
%22 = load i64, i64* %temp, !dbg !2447
%23 = load i64, i64* %s, !dbg !2447
%24 = icmp sgt i64 %22, %23, !dbg !2447
store i1 %24, i1* %overflow, !dbg !2448
br label %exit5, !dbg !2448
else4: ; preds = %else2
%25 = load i64, i64* %s, !dbg !2448
%26 = load i64, i64* %sd, !dbg !2448
%27 = add i64 %25, %26, !dbg !2448
store i64 %27, i64* %s, !dbg !2449
%28 = load i64, i64* %s, !dbg !2449
%29 = icmp slt i64 %28, 0, !dbg !2449
store i1 %29, i1* %overflow, !dbg !2445
br label %exit5, !dbg !2445
exit5: ; preds = %else4, %then3
br label %exit, !dbg !2445
exit6: ; preds = %exit15, %exit
%30 = load i1, i1* %overflow, !dbg !2450
br i1 %30, label %then16, label %else17, !dbg !2450
then7: ; preds = %else
%31 = sext i32 %days to i64, !dbg !2442
%32 = mul i64 86400, %31, !dbg !2442
store i64 %32, i64* %sd, !dbg !2451
%33 = load i64, i64* %sd, !dbg !2452
%34 = sext i32 %days to i64, !dbg !2452
%35 = icmp sgt i64 %33, %34, !dbg !2452
br i1 %35, label %then9, label %else10, !dbg !2452
else8: ; preds = %else
br label %exit15, !dbg !2453
then9: ; preds = %then7
store i1 true, i1* %overflow, !dbg !2454
br label %exit11, !dbg !2454
else10: ; preds = %then7
%36 = load i64, i64* %s, !dbg !2455
%37 = icmp sle i64 %36, 0, !dbg !2455
br i1 %37, label %then12, label %else13, !dbg !2455
exit11: ; preds = %exit14, %then9
br label %exit15, !dbg !2453
then12: ; preds = %else10
%38 = load i64, i64* %s, !dbg !2455
%39 = load i64, i64* %sd, !dbg !2455
%40 = add i64 %38, %39, !dbg !2455
store i64 %40, i64* %s, !dbg !2456
%41 = load i64, i64* %s, !dbg !2456
%42 = icmp sgt i64 %41, 0, !dbg !2456
store i1 %42, i1* %overflow, !dbg !2457
br label %exit14, !dbg !2457
else13: ; preds = %else10
%43 = load i64, i64* %s, !dbg !2457
store i64 %43, i64* %nanos, !dbg !2458
%44 = load i64, i64* %s, !dbg !2458
%45 = load i64, i64* %sd, !dbg !2458
%46 = add i64 %44, %45, !dbg !2458
store i64 %46, i64* %s, !dbg !2459
%47 = load i64, i64* %s, !dbg !2459
%48 = load i64, i64* %nanos, !dbg !2459
%49 = icmp sgt i64 %47, %48, !dbg !2459
store i1 %49, i1* %overflow, !dbg !2453
br label %exit14, !dbg !2453
exit14: ; preds = %else13, %then12
br label %exit11, !dbg !2453
exit15: ; preds = %else8, %exit11
br label %exit6, !dbg !2453
then16: ; preds = %exit6
br i1 %raise_exception, label %then18, label %else19, !dbg !2460
else17: ; preds = %exit6
%50 = load i64, i64* %s, !dbg !2433
%51 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, i32 0, i32 0, !dbg !2433
store i32 154, i32* %51, !dbg !2433
%52 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, i32 0, i32 1, !dbg !2433
%53 = bitcast [1 x i64]* %52 to i64*, !dbg !2433
store i64 %50, i64* %53, !dbg !2433
%54 = load %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, !dbg !2433
ret %"(Int64 | Nil)" %54, !dbg !2433
then18: ; preds = %then16
%55 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Time::Span too big ...'" to %String*)), !dbg !2461
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %55), !dbg !2433
unreachable, !dbg !2433
else19: ; preds = %then16
%56 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 0, !dbg !2433
store i32 0, i32* %56, !dbg !2433
%57 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 1, !dbg !2433
store [1 x i64] zeroinitializer, [1 x i64]* %57, !dbg !2433
%58 = load %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, !dbg !2433
ret %"(Int64 | Nil)" %58, !dbg !2433
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Time::Span::new:seconds:nanoseconds<Int64, Int64>:Time::Span"(i64 %seconds, i64 %nanoseconds) #0 !dbg !329 {
alloca:
%_ = alloca %"Time::Span", !dbg !2462
%0 = alloca %"Time::Span", !dbg !2462
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Time::Span"* %0 to i8*, !dbg !2462
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Time::Span"* getelementptr (%"Time::Span", %"Time::Span"* null, i32 1) to i32), i32 4, i1 false), !dbg !2462
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !2462
store %"Time::Span" %2, %"Time::Span"* %_, !dbg !2462
%3 = call i32 @"*Time::Span#initialize:seconds:nanoseconds<Int64, Int64>:Int32"(%"Time::Span"* %_, i64 %seconds, i64 %nanoseconds), !dbg !2462
%4 = load %"Time::Span", %"Time::Span"* %_, !dbg !2462
ret %"Time::Span" %4, !dbg !2462
}
; Function Attrs: uwtable
define internal i32 @"*Time::Span#initialize:seconds:nanoseconds<Int64, Int64>:Int32"(%"Time::Span"* %self, i64 %seconds, i64 %nanoseconds) #0 !dbg !330 {
alloca:
%__temp_225 = alloca i1, !dbg !2463
%__temp_226 = alloca i1, !dbg !2463
%seconds1 = alloca i64, !dbg !2463
%nanoseconds2 = alloca i64, !dbg !2463
br label %entry
entry: ; preds = %alloca
store i64 %seconds, i64* %seconds1, !dbg !2463
store i64 %nanoseconds, i64* %nanoseconds2, !dbg !2463
%0 = load i64, i64* %seconds1, !dbg !2463
%1 = load i64, i64* %nanoseconds2, !dbg !2463
%2 = call i64 @"*Int64@Int#tdiv<Int64>:Int64"(i64 %1, i64 1000000000), !dbg !2464
%3 = add i64 %0, %2, !dbg !2464
store i64 %3, i64* %seconds1, !dbg !2465
%4 = load i64, i64* %nanoseconds2, !dbg !2465
%5 = call i64 @"*Int64@Int#remainder<Int64>:Int64"(i64 %4, i64 1000000000), !dbg !2466
store i64 %5, i64* %nanoseconds2, !dbg !2467
%6 = load i64, i64* %seconds1, !dbg !2468
%7 = icmp sgt i64 %6, 0, !dbg !2468
store i1 %7, i1* %__temp_225, !dbg !2468
br i1 %7, label %then3, label %else4, !dbg !2468
then: ; preds = %exit
%8 = load i64, i64* %seconds1, !dbg !2468
%9 = sub i64 %8, 1, !dbg !2468
store i64 %9, i64* %seconds1, !dbg !2469
%10 = load i64, i64* %nanoseconds2, !dbg !2469
%11 = add i64 %10, 1000000000, !dbg !2469
store i64 %11, i64* %nanoseconds2, !dbg !2470
br label %exit5, !dbg !2470
else: ; preds = %exit
%12 = load i64, i64* %seconds1, !dbg !2471
%13 = icmp slt i64 %12, 0, !dbg !2471
store i1 %13, i1* %__temp_226, !dbg !2471
br i1 %13, label %then8, label %else9, !dbg !2471
then3: ; preds = %entry
%14 = load i64, i64* %nanoseconds2, !dbg !2468
%15 = icmp slt i64 %14, 0, !dbg !2468
br label %exit, !dbg !2468
else4: ; preds = %entry
%16 = load i1, i1* %__temp_225, !dbg !2468
br label %exit, !dbg !2468
exit: ; preds = %else4, %then3
%17 = phi i1 [ %15, %then3 ], [ %16, %else4 ], !dbg !2468
br i1 %17, label %then, label %else, !dbg !2468
exit5: ; preds = %exit11, %then
%18 = load i64, i64* %seconds1, !dbg !2472
%19 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 0, !dbg !2473
store i64 %18, i64* %19, !dbg !2473
%20 = load i64, i64* %nanoseconds2, !dbg !2473
%21 = trunc i64 %20 to i32, !dbg !2473
%22 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 1, !dbg !2474
store i32 %21, i32* %22, !dbg !2474
ret i32 %21, !dbg !2474
then6: ; preds = %exit10
%23 = load i64, i64* %seconds1, !dbg !2471
%24 = add i64 %23, 1, !dbg !2471
store i64 %24, i64* %seconds1, !dbg !2475
%25 = load i64, i64* %nanoseconds2, !dbg !2475
%26 = sub i64 %25, 1000000000, !dbg !2475
store i64 %26, i64* %nanoseconds2, !dbg !2472
br label %exit11, !dbg !2472
else7: ; preds = %exit10
br label %exit11, !dbg !2472
then8: ; preds = %else
%27 = load i64, i64* %nanoseconds2, !dbg !2471
%28 = icmp sgt i64 %27, 0, !dbg !2471
br label %exit10, !dbg !2471
else9: ; preds = %else
%29 = load i1, i1* %__temp_226, !dbg !2471
br label %exit10, !dbg !2471
exit10: ; preds = %else9, %then8
%30 = phi i1 [ %28, %then8 ], [ %29, %else9 ], !dbg !2471
br i1 %30, label %then6, label %else7, !dbg !2471
exit11: ; preds = %else7, %then6
br label %exit5, !dbg !2472
}
; Function Attrs: uwtable
define internal i64 @"*Int64@Int#tdiv<Int64>:Int64"(i64 %self, i64 %other) #0 !dbg !331 {
entry:
call void @"*Int64@Int#check_div_argument<Int64>:Nil"(i64 %self, i64 %other), !dbg !2476
%0 = sdiv i64 %self, %other, !dbg !2476
ret i64 %0, !dbg !2476
}
; Function Attrs: uwtable
define internal void @"*Int64@Int#check_div_argument<Int64>:Nil"(i64 %self, i64 %other) #0 !dbg !332 {
alloca:
%__temp_224 = alloca i1, !dbg !2477
%__temp_223 = alloca i1, !dbg !2477
br label %entry
entry: ; preds = %alloca
%0 = icmp eq i64 %other, 0, !dbg !2478
br i1 %0, label %then, label %else, !dbg !2478
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !2479
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !2480
unreachable, !dbg !2480
else: ; preds = %entry
%2 = icmp slt i64 %self, 0, !dbg !2481
store i1 %2, i1* %__temp_224, !dbg !2481
br i1 %2, label %then5, label %else6, !dbg !2481
then1: ; preds = %exit7
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Overflow: Int64::MI...'" to %String*)), !dbg !2481
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !2481
unreachable, !dbg !2481
else2: ; preds = %exit7
ret void, !dbg !2481
then3: ; preds = %exit
%4 = icmp eq i64 %other, -1, !dbg !2481
br label %exit7, !dbg !2481
else4: ; preds = %exit
%5 = load i1, i1* %__temp_223, !dbg !2481
br label %exit7, !dbg !2481
then5: ; preds = %else
%6 = icmp eq i64 %self, -9223372036854775808, !dbg !2481
br label %exit, !dbg !2481
else6: ; preds = %else
%7 = load i1, i1* %__temp_224, !dbg !2481
br label %exit, !dbg !2481
exit: ; preds = %else6, %then5
%8 = phi i1 [ %6, %then5 ], [ %7, %else6 ], !dbg !2481
store i1 %8, i1* %__temp_223, !dbg !2481
br i1 %8, label %then3, label %else4, !dbg !2481
exit7: ; preds = %else4, %then3
%9 = phi i1 [ %4, %then3 ], [ %5, %else4 ], !dbg !2481
br i1 %9, label %then1, label %else2, !dbg !2481
}
; Function Attrs: uwtable
define internal i64 @"*Int64@Int#remainder<Int64>:Int64"(i64 %self, i64 %other) #0 !dbg !333 {
entry:
%0 = icmp eq i64 %other, 0, !dbg !2482
br i1 %0, label %then, label %else, !dbg !2482
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !2483
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !2484
unreachable, !dbg !2484
else: ; preds = %entry
%2 = srem i64 %self, %other, !dbg !2484
ret i64 %2, !dbg !2484
}
; Function Attrs: uwtable
define internal void @"*Fiber#sleep<Time::Span>:Nil"(%Fiber* %self, %"Time::Span" %time) #0 !dbg !334 {
alloca:
%__temp_227 = alloca %"(Event::Event | Nil)", !dbg !2485
%event = alloca %"Event::Event", !dbg !2485
%time1 = alloca %"Time::Span", !dbg !2485
%0 = alloca %"Event::Event", !dbg !2486
br label %entry
entry: ; preds = %alloca
store %"Time::Span" %time, %"Time::Span"* %time1, !dbg !2485
%1 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 2, !dbg !2487
%2 = load %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %1, !dbg !2487
store %"(Event::Event | Nil)" %2, %"(Event::Event | Nil)"* %__temp_227, !dbg !2487
%3 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %1, i32 0, i32 0, !dbg !2487
%4 = load i32, i32* %3, !dbg !2487
%5 = icmp eq i32 %4, 0, !dbg !2487
%6 = xor i1 %5, true, !dbg !2487
%7 = and i1 true, %6, !dbg !2487
br i1 %7, label %then, label %else, !dbg !2487
then: ; preds = %entry
%8 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %__temp_227, i32 0, i32 1, !dbg !2487
%9 = bitcast [2 x i64]* %8 to %"Event::Event"*, !dbg !2487
br label %exit, !dbg !2487
else: ; preds = %entry
%10 = call %"Event::Event" @"*Scheduler::create_resume_event<Fiber>:Event::Event"(%Fiber* %self), !dbg !2486
store %"Event::Event" %10, %"Event::Event"* %0, !dbg !2486
%11 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 2, !dbg !2487
%12 = load %"Event::Event", %"Event::Event"* %0, !dbg !2487
%13 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %11, i32 0, i32 0, !dbg !2487
store i32 392, i32* %13, !dbg !2487
%14 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %11, i32 0, i32 1, !dbg !2487
%15 = bitcast [2 x i64]* %14 to %"Event::Event"*, !dbg !2487
store %"Event::Event" %12, %"Event::Event"* %15, !dbg !2487
br label %exit, !dbg !2487
exit: ; preds = %else, %then
%16 = phi %"Event::Event"* [ %9, %then ], [ %0, %else ], !dbg !2487
%17 = load %"Event::Event", %"Event::Event"* %16, !dbg !2488
store %"Event::Event" %17, %"Event::Event"* %event, !dbg !2488
%18 = load %"Time::Span", %"Time::Span"* %time1, !dbg !2488
%19 = call i32 @"*Event::Event#add<Time::Span>:Int32"(%"Event::Event"* %event, %"Time::Span" %18), !dbg !2489
call void @"*Scheduler::reschedule:Nil"(), !dbg !2490
ret void, !dbg !2490
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Scheduler::create_resume_event<Fiber>:Event::Event"(%Fiber* %fiber) #0 !dbg !335 {
alloca:
%0 = alloca %"->", !dbg !2491
%1 = alloca %"Event::Event", !dbg !2492
br label %entry
entry: ; preds = %alloca
%2 = call %"Event::Base"* @"~Scheduler::eb:read"(), !dbg !2491
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2491
store i8* bitcast (void (i32, i16, i8*)* @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:26" to i8*), i8** %3, !dbg !2491
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2491
store i8* null, i8** %4, !dbg !2491
%5 = load %"->", %"->"* %0, !dbg !2491
%6 = call %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, Fiber, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %2, i32 -1, i16 0, %Fiber* %fiber, %"->" %5), !dbg !2492
store %"Event::Event" %6, %"Event::Event"* %1, !dbg !2492
%7 = load %"Event::Event", %"Event::Event"* %1, !dbg !2492
ret %"Event::Event" %7, !dbg !2492
}
define internal %"Event::Base"* @"~Scheduler::eb:read"() {
entry:
%0 = load i1, i1* @"Scheduler::eb:init", !dbg !2491
br i1 %0, label %initialized, label %not_initialized, !dbg !2491
initialized: ; preds = %not_initialized, %entry
ret %"Event::Base"* @"Scheduler::eb", !dbg !2491
not_initialized: ; preds = %entry
store i1 true, i1* @"Scheduler::eb:init", !dbg !2491
call void @"~Scheduler::eb:init"(), !dbg !2491
br label %initialized, !dbg !2491
}
; Function Attrs: uwtable
define internal void @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:26"(i32 %s, i16 %flags, i8* %data) #0 !dbg !337 {
entry:
%0 = bitcast i8* %data to %Fiber*, !dbg !2493
call void @"*Fiber#resume:Nil"(%Fiber* %0), !dbg !2494
ret void, !dbg !2494
}
; Function Attrs: uwtable
define internal void @"*Fiber#resume:Nil"(%Fiber* %self) #0 !dbg !338 {
alloca:
%__temp_43 = alloca %Fiber*, !dbg !2495
%__temp_44 = alloca %Fiber*, !dbg !2495
%current = alloca %Fiber*, !dbg !2495
br label %entry
entry: ; preds = %alloca
%0 = call %Thread* @"*Thread::current:Thread"(), !dbg !2496
%1 = getelementptr inbounds %Thread, %Thread* %0, i32 0, i32 5, !dbg !2496
%2 = load %Fiber*, %Fiber** %1, !dbg !2496
store %Fiber* %2, %Fiber** %__temp_43, !dbg !2497
store %Fiber* %self, %Fiber** %__temp_44, !dbg !2497
%3 = load %Fiber*, %Fiber** %__temp_43, !dbg !2497
store %Fiber* %3, %Fiber** %current, !dbg !2497
%4 = call %Thread* @"*Thread::current:Thread"(), !dbg !2498
%5 = load %Fiber*, %Fiber** %__temp_44, !dbg !2498
%6 = call %Fiber* @"*Thread#current_fiber=<Fiber>:Fiber"(%Thread* %4, %Fiber* %5), !dbg !2498
%7 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !2498
%8 = load i8*, i8** %7, !dbg !2498
%9 = call i8* @"*GC::stack_bottom=<Pointer(Void)>:Pointer(Void)"(i8* %8), !dbg !2499
%10 = load %Fiber*, %Fiber** %current, !dbg !2499
%11 = getelementptr inbounds %Fiber, %Fiber* %10, i32 0, i32 3, !dbg !2499
%12 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !2499
call void @"*Fiber::switch_stacks<Pointer(Pointer(Void)), Pointer(Pointer(Void))>:Nil"(i8** %11, i8** %12), !dbg !2500
ret void, !dbg !2500
}
; Function Attrs: uwtable
define internal i8* @"*GC::stack_bottom=<Pointer(Void)>:Pointer(Void)"(i8* %pointer) #0 !dbg !339 {
entry:
store i8* %pointer, i8** @GC_stackbottom, !dbg !2501
ret i8* %pointer, !dbg !2501
}
; Function Attrs: naked noinline uwtable
define void @"*Fiber::switch_stacks<Pointer(Pointer(Void)), Pointer(Pointer(Void))>:Nil"(i8** %current, i8** %to) #5 !dbg !340 {
entry:
call void asm "\0A pushq %rdi\0A pushq %rbx\0A pushq %rbp\0A pushq %r12\0A pushq %r13\0A pushq %r14\0A pushq %r15\0A movq %rsp, ($0)\0A movq ($1), %rsp\0A popq %r15\0A popq %r14\0A popq %r13\0A popq %r12\0A popq %rbp\0A popq %rbx\0A popq %rdi", "r,r"(i8** %current, i8** %to), !dbg !2502
ret void, !dbg !2502
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, Fiber, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %self, i32 %s, i16 %flags, %Fiber* %data, %"->" %callback) #0 !dbg !341 {
alloca:
%event = alloca i8*, !dbg !2503
%0 = alloca %"Event::Event", !dbg !2504
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"Event::Base", %"Event::Base"* %self, i32 0, i32 0, !dbg !2503
%2 = load i8*, i8** %1, !dbg !2503
%3 = call i8* @"~check_proc_is_not_closure"(%"->" %callback), !dbg !2503
%4 = bitcast i8* %3 to %Nil (i32, i16, i8*)*, !dbg !2503
%5 = bitcast %Fiber* %data to i8*, !dbg !2503
%6 = call i8* @event_new(i8* %2, i32 %s, i16 %flags, %Nil (i32, i16, i8*)* %4, i8* %5), !dbg !2505
store i8* %6, i8** %event, !dbg !2506
%7 = load i8*, i8** %event, !dbg !2506
%8 = call %"Event::Event" @"*Event::Event::new<Pointer(Void)>:Event::Event"(i8* %7), !dbg !2504
store %"Event::Event" %8, %"Event::Event"* %0, !dbg !2504
%9 = load %"Event::Event", %"Event::Event"* %0, !dbg !2504
ret %"Event::Event" %9, !dbg !2504
}
declare i8* @event_new(i8*, i32, i16, %Nil (i32, i16, i8*)*, i8*)
; Function Attrs: uwtable
define internal %"Event::Event" @"*Event::Event::new<Pointer(Void)>:Event::Event"(i8* %event) #0 !dbg !342 {
alloca:
%_ = alloca %"Event::Event", !dbg !2507
%0 = alloca %"Event::Event", !dbg !2507
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Event::Event"* %0 to i8*, !dbg !2507
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Event::Event"* getelementptr (%"Event::Event", %"Event::Event"* null, i32 1) to i32), i32 4, i1 false), !dbg !2507
%2 = load %"Event::Event", %"Event::Event"* %0, !dbg !2507
store %"Event::Event" %2, %"Event::Event"* %_, !dbg !2507
%3 = call i1 @"*Event::Event#initialize<Pointer(Void)>:Bool"(%"Event::Event"* %_, i8* %event), !dbg !2507
%4 = load %"Event::Event", %"Event::Event"* %_, !dbg !2507
ret %"Event::Event" %4, !dbg !2507
}
; Function Attrs: uwtable
define internal i1 @"*Event::Event#initialize<Pointer(Void)>:Bool"(%"Event::Event"* %self, i8* %event) #0 !dbg !343 {
entry:
%0 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 0, !dbg !2508
store i8* %event, i8** %0, !dbg !2508
%1 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 1, !dbg !2509
store i1 false, i1* %1, !dbg !2509
ret i1 false, !dbg !2509
}
; Function Attrs: uwtable
define internal i32 @"*Event::Event#add<Time::Span>:Int32"(%"Event::Event"* %self, %"Time::Span" %timeout) #0 !dbg !344 {
alloca:
%__temp_45 = alloca %"struct.LibC::Timeval", !dbg !2510
%timeout1 = alloca %"Time::Span", !dbg !2510
%0 = alloca %"struct.LibC::Timeval", !dbg !2511
br label %entry
entry: ; preds = %alloca
store %"Time::Span" %timeout, %"Time::Span"* %timeout1, !dbg !2510
%1 = call %"struct.LibC::Timeval" @"*struct.LibC::Timeval::new:struct.LibC::Timeval"(), !dbg !2511
store %"struct.LibC::Timeval" %1, %"struct.LibC::Timeval"* %0, !dbg !2511
%2 = load %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %0, !dbg !2511
store %"struct.LibC::Timeval" %2, %"struct.LibC::Timeval"* %__temp_45, !dbg !2511
%3 = call double @"*Time::Span#total_seconds:Float64"(%"Time::Span"* %timeout1), !dbg !2512
%4 = fptosi double %3 to i32, !dbg !2512
%5 = sext i32 %4 to i64, !dbg !2512
%6 = getelementptr inbounds %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %__temp_45, i32 0, i32 0, !dbg !2512
store i64 %5, i64* %6, !dbg !2512
%7 = getelementptr inbounds %"Time::Span", %"Time::Span"* %timeout1, i32 0, i32 1, !dbg !2512
%8 = load i32, i32* %7, !dbg !2512
%9 = call i32 @"*Int32@Int#/<Int32>:Int32"(i32 %8, i32 1000), !dbg !2513
%10 = sext i32 %9 to i64, !dbg !2513
%11 = getelementptr inbounds %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %__temp_45, i32 0, i32 1, !dbg !2513
store i64 %10, i64* %11, !dbg !2513
%12 = load %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %__temp_45, !dbg !2513
%13 = call i32 @"*Event::Event#add<struct.LibC::Timeval>:Int32"(%"Event::Event"* %self, %"struct.LibC::Timeval" %12), !dbg !2514
ret i32 %13, !dbg !2514
}
; Function Attrs: uwtable
define internal %"struct.LibC::Timeval" @"*struct.LibC::Timeval::new:struct.LibC::Timeval"() #0 !dbg !345 {
alloca:
%x = alloca %"struct.LibC::Timeval", !dbg !2515
%0 = alloca %"struct.LibC::Timeval", !dbg !2515
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"struct.LibC::Timeval"* %0 to i8*, !dbg !2515
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 trunc (i64 mul nuw (i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 2) to i32), i32 4, i1 false), !dbg !2515
%2 = load %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %0, !dbg !2515
store %"struct.LibC::Timeval" %2, %"struct.LibC::Timeval"* %x, !dbg !2515
%3 = load %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %x, !dbg !2515
ret %"struct.LibC::Timeval" %3, !dbg !2515
}
; Function Attrs: uwtable
define internal double @"*Time::Span#total_seconds:Float64"(%"Time::Span"* %self) #0 !dbg !347 {
entry:
%0 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 0, !dbg !2516
%1 = load i64, i64* %0, !dbg !2516
%2 = sitofp i64 %1 to double, !dbg !2516
%3 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 1, !dbg !2516
%4 = load i32, i32* %3, !dbg !2516
%5 = sitofp i32 %4 to double, !dbg !2516
%6 = fdiv double %5, 1.000000e+09, !dbg !2516
%7 = fadd double %2, %6, !dbg !2516
ret double %7, !dbg !2516
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#/<Int32>:Int32"(i32 %self, i32 %other) #0 !dbg !348 {
alloca:
%div = alloca i32, !dbg !2517
%mod = alloca i32, !dbg !2517
br label %entry
entry: ; preds = %alloca
call void @"*Int32@Int#check_div_argument<Int32>:Nil"(i32 %self, i32 %other), !dbg !2518
%0 = sdiv i32 %self, %other, !dbg !2518
store i32 %0, i32* %div, !dbg !2519
%1 = srem i32 %self, %other, !dbg !2519
store i32 %1, i32* %mod, !dbg !2520
%2 = icmp sgt i32 %other, 0, !dbg !2521
br i1 %2, label %then1, label %else2, !dbg !2521
then: ; preds = %exit
%3 = load i32, i32* %div, !dbg !2521
%4 = sub i32 %3, 1, !dbg !2521
store i32 %4, i32* %div, !dbg !2522
br label %exit3, !dbg !2522
else: ; preds = %exit
br label %exit3, !dbg !2522
then1: ; preds = %entry
%5 = load i32, i32* %mod, !dbg !2521
%6 = icmp slt i32 %5, 0, !dbg !2521
br label %exit, !dbg !2521
else2: ; preds = %entry
%7 = load i32, i32* %mod, !dbg !2521
%8 = icmp sgt i32 %7, 0, !dbg !2521
br label %exit, !dbg !2521
exit: ; preds = %else2, %then1
%9 = phi i1 [ %6, %then1 ], [ %8, %else2 ], !dbg !2521
br i1 %9, label %then, label %else, !dbg !2521
exit3: ; preds = %else, %then
%10 = load i32, i32* %div, !dbg !2522
ret i32 %10, !dbg !2522
}
; Function Attrs: uwtable
define internal i32 @"*Event::Event#add<struct.LibC::Timeval>:Int32"(%"Event::Event"* %self, %"struct.LibC::Timeval" %timeout) #0 !dbg !349 {
alloca:
%timeout_copy = alloca %"struct.LibC::Timeval", !dbg !2523
%timeout1 = alloca %"struct.LibC::Timeval", !dbg !2523
br label %entry
entry: ; preds = %alloca
store %"struct.LibC::Timeval" %timeout, %"struct.LibC::Timeval"* %timeout1, !dbg !2523
br i1 true, label %then, label %else, !dbg !2524
then: ; preds = %entry
%0 = load %"struct.LibC::Timeval", %"struct.LibC::Timeval"* %timeout1, !dbg !2525
store %"struct.LibC::Timeval" %0, %"struct.LibC::Timeval"* %timeout_copy, !dbg !2525
%1 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 0, !dbg !2525
%2 = load i8*, i8** %1, !dbg !2525
%3 = call i32 @event_add(i8* %2, %"struct.LibC::Timeval"* %timeout_copy), !dbg !2526
br label %exit, !dbg !2526
else: ; preds = %entry
%4 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 0, !dbg !2526
%5 = load i8*, i8** %4, !dbg !2526
%6 = call i32 @event_add(i8* %5, %"struct.LibC::Timeval"* null), !dbg !2527
br label %exit, !dbg !2527
exit: ; preds = %else, %then
%7 = phi i32 [ %3, %then ], [ %6, %else ], !dbg !2527
ret i32 %7, !dbg !2527
}
declare i32 @event_add(i8*, %"struct.LibC::Timeval"*)
; Function Attrs: uwtable
define internal void @"*Scheduler::reschedule:Nil"() #0 !dbg !350 {
alloca:
%runnable = alloca %Fiber*, !dbg !2528
br label %entry
entry: ; preds = %alloca
%0 = call %"Deque(Fiber)"** @"~Scheduler::runnables:read"(), !dbg !2529
%1 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %0, !dbg !2529
%2 = call %Fiber* @"*Deque(Fiber)@Deque(T)#shift?:(Fiber | Nil)"(%"Deque(Fiber)"* %1), !dbg !2530
store %Fiber* %2, %Fiber** %runnable, !dbg !2531
%3 = icmp ne %Fiber* %2, null, !dbg !2531
br i1 %3, label %then, label %else, !dbg !2531
then: ; preds = %entry
%4 = load %Fiber*, %Fiber** %runnable, !dbg !2531
call void @"*Fiber#resume:Nil"(%Fiber* %4), !dbg !2532
br label %exit, !dbg !2532
else: ; preds = %entry
%5 = call %Fiber* @"*Scheduler::loop_fiber:Fiber"(), !dbg !2533
call void @"*Fiber#resume:Nil"(%Fiber* %5), !dbg !2533
br label %exit, !dbg !2533
exit: ; preds = %else, %then
ret void, !dbg !2533
}
define internal %"Deque(Fiber)"** @"~Scheduler::runnables:read"() {
entry:
%0 = load i1, i1* @"Scheduler::runnables:init", !dbg !2529
br i1 %0, label %initialized, label %not_initialized, !dbg !2529
initialized: ; preds = %not_initialized, %entry
ret %"Deque(Fiber)"** @"Scheduler::runnables", !dbg !2529
not_initialized: ; preds = %entry
store i1 true, i1* @"Scheduler::runnables:init", !dbg !2529
call void @"~Scheduler::runnables:init"(), !dbg !2529
br label %initialized, !dbg !2529
}
; Function Attrs: uwtable
define internal %Fiber* @"*Deque(Fiber)@Deque(T)#shift?:(Fiber | Nil)"(%"Deque(Fiber)"* %self) #0 !dbg !351 {
alloca:
%value = alloca %Fiber*, !dbg !2534
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2535
%1 = load i32, i32* %0, !dbg !2535
%2 = icmp eq i32 %1, 0, !dbg !2535
br i1 %2, label %then, label %else, !dbg !2535
then: ; preds = %entry
br label %exit, !dbg !2535
else: ; preds = %entry
%3 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2535
%4 = load %Fiber**, %Fiber*** %3, !dbg !2535
%5 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2535
%6 = load i32, i32* %5, !dbg !2535
%7 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %4, i32 %6), !dbg !2536
store %Fiber* %7, %Fiber** %value, !dbg !2537
%8 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2537
%9 = load %Fiber**, %Fiber*** %8, !dbg !2537
%10 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2537
%11 = load i32, i32* %10, !dbg !2537
%12 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %9, i32 %11), !dbg !2538
call void @"*Pointer(Fiber)@Pointer(T)#clear:Nil"(%Fiber** %12), !dbg !2539
%13 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2539
%14 = load i32, i32* %13, !dbg !2539
%15 = sub i32 %14, 1, !dbg !2539
%16 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2540
store i32 %15, i32* %16, !dbg !2540
%17 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2540
%18 = load i32, i32* %17, !dbg !2540
%19 = add i32 %18, 1, !dbg !2540
%20 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2541
store i32 %19, i32* %20, !dbg !2541
%21 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2542
%22 = load i32, i32* %21, !dbg !2542
%23 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2542
%24 = load i32, i32* %23, !dbg !2542
%25 = icmp sge i32 %22, %24, !dbg !2542
br i1 %25, label %then1, label %else2, !dbg !2542
exit: ; preds = %exit3, %then
%26 = phi %Fiber* [ null, %then ], [ %33, %exit3 ], !dbg !2542
ret %Fiber* %26, !dbg !2542
then1: ; preds = %else
%27 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2542
%28 = load i32, i32* %27, !dbg !2542
%29 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2542
%30 = load i32, i32* %29, !dbg !2542
%31 = sub i32 %28, %30, !dbg !2542
%32 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2542
store i32 %31, i32* %32, !dbg !2542
br label %exit3, !dbg !2542
else2: ; preds = %else
br label %exit3, !dbg !2542
exit3: ; preds = %else2, %then1
%33 = load %Fiber*, %Fiber** %value, !dbg !2542
br label %exit, !dbg !2542
}
; Function Attrs: uwtable
define internal %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %self, i32 %offset) #0 !dbg !352 {
entry:
%0 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %self, i32 %offset), !dbg !2543
%1 = load %Fiber*, %Fiber** %0, !dbg !2543
ret %Fiber* %1, !dbg !2543
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %self, i32 %other) #0 !dbg !353 {
entry:
%0 = sext i32 %other to i64, !dbg !2544
%1 = getelementptr inbounds %Fiber*, %Fiber** %self, i64 %0, !dbg !2544
ret %Fiber** %1, !dbg !2544
}
; Function Attrs: uwtable
define internal void @"*Pointer(Fiber)@Pointer(T)#clear:Nil"(%Fiber** %self) #0 !dbg !354 {
alloca:
%count = alloca i32, !dbg !2545
br label %entry
entry: ; preds = %alloca
store i32 1, i32* %count, !dbg !2546
%0 = load i32, i32* %count, !dbg !2546
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %self, i32 %0), !dbg !2545
ret void, !dbg !2545
}
; Function Attrs: uwtable
define internal void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %self, i32 %count) #0 !dbg !355 {
entry:
%0 = bitcast %Fiber** %self to i8*, !dbg !2547
%1 = call i64 @"*Pointer(Fiber)@Pointer(T)#bytesize<Int32>:UInt64"(%Fiber** %self, i32 %count), !dbg !2548
call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 %1, i32 0, i1 false), !dbg !2549
ret void, !dbg !2549
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(Fiber)@Pointer(T)#bytesize<Int32>:UInt64"(%Fiber** %self, i32 %count) #0 !dbg !356 {
entry:
%0 = sext i32 %count to i64, !dbg !2550
%1 = mul i64 %0, 8, !dbg !2550
ret i64 %1, !dbg !2550
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #2
; Function Attrs: uwtable
define internal %Fiber* @"*Scheduler::loop_fiber:Fiber"() #0 !dbg !357 {
alloca:
%__temp_49 = alloca %Fiber*, !dbg !2551
%0 = alloca %"->", !dbg !2552
br label %entry
entry: ; preds = %alloca
%1 = load %Fiber*, %Fiber** @"Scheduler::loop_fiber", !dbg !2552
store %Fiber* %1, %Fiber** %__temp_49, !dbg !2552
%2 = icmp ne %Fiber* %1, null, !dbg !2552
br i1 %2, label %then, label %else, !dbg !2552
then: ; preds = %entry
%3 = load %Fiber*, %Fiber** %__temp_49, !dbg !2552
br label %exit, !dbg !2552
else: ; preds = %entry
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2552
store i8* bitcast (void ()* @"~procProc(Nil)@src/concurrent/scheduler.cr:18" to i8*), i8** %4, !dbg !2552
%5 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2552
store i8* null, i8** %5, !dbg !2552
%6 = load %"->", %"->"* %0, !dbg !2552
%7 = call %Fiber* @"*Fiber::new<&Proc(Nil)>:Fiber"(%"->" %6), !dbg !2553
store %Fiber* %7, %Fiber** @"Scheduler::loop_fiber", !dbg !2552
br label %exit, !dbg !2552
exit: ; preds = %else, %then
%8 = phi %Fiber* [ %3, %then ], [ %7, %else ], !dbg !2552
ret %Fiber* %8, !dbg !2552
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@src/concurrent/scheduler.cr:18"() #0 !dbg !358 {
entry:
%0 = call %"Event::Base"* @"~Scheduler::eb:read"(), !dbg !2554
%1 = call i32 @"*Event::Base#run_loop:Int32"(%"Event::Base"* %0), !dbg !2555
ret void, !dbg !2555
}
; Function Attrs: uwtable
define internal i32 @"*Event::Base#run_loop:Int32"(%"Event::Base"* %self) #0 !dbg !359 {
entry:
%0 = getelementptr inbounds %"Event::Base", %"Event::Base"* %self, i32 0, i32 0, !dbg !2556
%1 = load i8*, i8** %0, !dbg !2556
%2 = call i32 @event_base_loop(i8* %1, i32 0), !dbg !2557
ret i32 %2, !dbg !2557
}
declare i32 @event_base_loop(i8*, i32)
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber::new<&Proc(Nil)>:Fiber"(%"->" %proc) #0 !dbg !360 {
alloca:
%_ = alloca %Fiber*, !dbg !2558
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i64)), !dbg !2558
%1 = bitcast i8* %0 to %Fiber*, !dbg !2558
%2 = bitcast %Fiber* %1 to i8*, !dbg !2558
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i32), i32 4, i1 false), !dbg !2558
%3 = getelementptr inbounds %Fiber, %Fiber* %1, i32 0, i32 0, !dbg !2558
store i32 94, i32* %3, !dbg !2558
store %Fiber* %1, %Fiber** %_, !dbg !2558
%4 = load %Fiber*, %Fiber** %_, !dbg !2558
%5 = call %Fiber* @"*Fiber#initialize<&Proc(Nil)>:Fiber"(%Fiber* %4, %"->" %proc), !dbg !2558
%6 = load %Fiber*, %Fiber** %_, !dbg !2558
ret %Fiber* %6, !dbg !2558
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber#initialize<&Proc(Nil)>:Fiber"(%Fiber* %self, %"->" %proc) #0 !dbg !361 {
alloca:
%name = alloca %Nil, !dbg !2559
%fiber_main = alloca %"->", !dbg !2559
%stack_ptr = alloca %"(Pointer(Pointer(Void)) | Pointer(Void))", !dbg !2559
%last_fiber = alloca %Fiber*, !dbg !2559
%0 = alloca %"->", !dbg !2560
br label %entry
entry: ; preds = %alloca
%1 = load %Nil, %Nil* %name, !dbg !2561
%2 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 7, !dbg !2561
store %String* null, %String** %2, !dbg !2561
%3 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 8, !dbg !2562
%4 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %3, i32 0, i32 0, !dbg !2562
store i32 444, i32* %4, !dbg !2562
%5 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %3, i32 0, i32 1, !dbg !2562
%6 = bitcast [2 x i64]* %5 to %"->"*, !dbg !2562
store %"->" %proc, %"->"* %6, !dbg !2562
%7 = call i8* @"*Fiber::allocate_stack:Pointer(Void)"(), !dbg !2563
%8 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !2564
store i8* %7, i8** %8, !dbg !2564
%9 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !2564
%10 = load i8*, i8** %9, !dbg !2564
%11 = call i8* @"*Pointer(Void)@Pointer(T)#+<Int32>:Pointer(Void)"(i8* %10, i32 8388608), !dbg !2565
%12 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !2560
store i8* %11, i8** %12, !dbg !2560
%13 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2560
store i8* bitcast (%"IO::FileDescriptor"* (%Fiber*)* @"~procProc(Fiber, (IO::FileDescriptor | Nil))@src/fiber.cr:29" to i8*), i8** %13, !dbg !2560
%14 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2560
store i8* null, i8** %14, !dbg !2560
%15 = load %"->", %"->"* %0, !dbg !2560
store %"->" %15, %"->"* %fiber_main, !dbg !2566
%16 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !2566
%17 = load i8*, i8** %16, !dbg !2566
%18 = call i8* @"*Pointer(Void)@Pointer(T)#-<Int32>:Pointer(Void)"(i8* %17, i64 8), !dbg !2567
%19 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 0, !dbg !2568
store i32 168, i32* %19, !dbg !2568
%20 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2568
%21 = bitcast [1 x i64]* %20 to i8**, !dbg !2568
store i8* %18, i8** %21, !dbg !2568
%22 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2568
%23 = bitcast [1 x i64]* %22 to i8**, !dbg !2568
%24 = load i8*, i8** %23, !dbg !2568
%25 = ptrtoint i8* %24 to i64, !dbg !2568
%26 = call i64 @"*UInt64@Int#~:UInt64"(i64 15), !dbg !2569
%27 = and i64 %25, %26, !dbg !2569
%28 = inttoptr i64 %27 to i8**, !dbg !2569
%29 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 0, !dbg !2570
store i32 184, i32* %29, !dbg !2570
%30 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2570
%31 = bitcast [1 x i64]* %30 to i8***, !dbg !2570
store i8** %28, i8*** %31, !dbg !2570
%32 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2570
%33 = bitcast [1 x i64]* %32 to i8***, !dbg !2570
%34 = load i8**, i8*** %33, !dbg !2570
%35 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#-<Int32>:Pointer(Pointer(Void))"(i8** %34, i32 7), !dbg !2571
%36 = bitcast i8** %35 to i8*, !dbg !2571
%37 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !2571
store i8* %36, i8** %37, !dbg !2571
%38 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2571
%39 = bitcast [1 x i64]* %38 to i8***, !dbg !2571
%40 = load i8**, i8*** %39, !dbg !2571
%41 = load %"->", %"->"* %fiber_main, !dbg !2571
%42 = call i8* @"*Proc(Fiber, (IO::FileDescriptor | Nil))@Proc(T, R)#pointer:Pointer(Void)"(%"->" %41), !dbg !2571
%43 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %40, i32 0, i8* %42), !dbg !2571
%44 = getelementptr inbounds %"(Pointer(Pointer(Void)) | Pointer(Void))", %"(Pointer(Pointer(Void)) | Pointer(Void))"* %stack_ptr, i32 0, i32 1, !dbg !2571
%45 = bitcast [1 x i64]* %44 to i8***, !dbg !2571
%46 = load i8**, i8*** %45, !dbg !2571
%47 = bitcast %Fiber* %self to i8*, !dbg !2571
%48 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %46, i32 -1, i8* %47), !dbg !2571
%49 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2572
store %Fiber* null, %Fiber** %49, !dbg !2572
%50 = load %Fiber*, %Fiber** @"Fiber::last_fiber", !dbg !2573
store %Fiber* %50, %Fiber** %last_fiber, !dbg !2574
%51 = icmp ne %Fiber* %50, null, !dbg !2574
br i1 %51, label %then, label %else, !dbg !2574
then: ; preds = %entry
%52 = load %Fiber*, %Fiber** %last_fiber, !dbg !2574
%53 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2575
store %Fiber* %52, %Fiber** %53, !dbg !2575
%54 = load %Fiber*, %Fiber** %last_fiber, !dbg !2575
store %Fiber* %self, %Fiber** @"Fiber::last_fiber", !dbg !2576
%55 = call %Fiber* @"*Fiber#next_fiber=<Fiber>:Fiber"(%Fiber* %54, %Fiber* %self), !dbg !2577
br label %exit, !dbg !2577
else: ; preds = %entry
store %Fiber* %self, %Fiber** @"Fiber::last_fiber", !dbg !2578
store %Fiber* %self, %Fiber** @"Fiber::first_fiber", !dbg !2579
br label %exit, !dbg !2579
exit: ; preds = %else, %then
%56 = phi %Fiber* [ %55, %then ], [ %self, %else ], !dbg !2579
ret %Fiber* %56, !dbg !2579
}
; Function Attrs: uwtable
define internal i8* @"*Fiber::allocate_stack:Pointer(Void)"() #0 !dbg !362 {
alloca:
%__temp_50 = alloca i8*, !dbg !2580
%pointer = alloca i8*, !dbg !2581
br label %entry
entry: ; preds = %alloca
%0 = call %"Array(Pointer(Void))"** @"~Fiber::stack_pool:read"(), !dbg !2582
%1 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %0, !dbg !2582
%2 = call i8* @"*Array(Pointer(Void))@Array(T)#pop?:(Pointer(Void) | Nil)"(%"Array(Pointer(Void))"* %1), !dbg !2582
store i8* %2, i8** %__temp_50, !dbg !2582
%3 = icmp ne i8* %2, null, !dbg !2582
br i1 %3, label %then, label %else, !dbg !2582
then: ; preds = %entry
%4 = load i8*, i8** %__temp_50, !dbg !2582
br label %exit, !dbg !2582
else: ; preds = %entry
%5 = call i8* @mmap(i8* null, i64 8388608, i32 3, i32 34, i32 -1, i64 0), !dbg !2581
store i8* %5, i8** %pointer, !dbg !2581
%6 = load i8*, i8** %pointer, !dbg !2583
%7 = call i8** @"~LibC::MAP_FAILED:read"(), !dbg !2583
%8 = load i8*, i8** %7, !dbg !2583
%9 = call i1 @"*Pointer(Void)@Comparable(T)#==<Pointer(Void)>:Bool"(i8* %6, i8* %8), !dbg !2584
br i1 %9, label %then1, label %else2, !dbg !2584
exit: ; preds = %else2, %then
%10 = phi i8* [ %4, %then ], [ %5, %else2 ], !dbg !2585
ret i8* %10, !dbg !2585
then1: ; preds = %else
%11 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Cannot allocate new...'" to %String*)), !dbg !2586
call void @"*raise<Errno>:NoReturn"(%Errno* %11), !dbg !2583
unreachable, !dbg !2583
else2: ; preds = %else
%12 = load i8*, i8** %pointer, !dbg !2583
%13 = call i32 @madvise(i8* %12, i64 8388608, i32 15), !dbg !2587
%14 = load i8*, i8** %pointer, !dbg !2587
%15 = call i32 @mprotect(i8* %14, i64 4096, i32 0), !dbg !2585
br label %exit, !dbg !2585
}
define internal %"Array(Pointer(Void))"** @"~Fiber::stack_pool:read"() {
entry:
%0 = load i1, i1* @"Fiber::stack_pool:init", !dbg !2582
br i1 %0, label %initialized, label %not_initialized, !dbg !2582
initialized: ; preds = %not_initialized, %entry
ret %"Array(Pointer(Void))"** @"Fiber::stack_pool", !dbg !2582
not_initialized: ; preds = %entry
store i1 true, i1* @"Fiber::stack_pool:init", !dbg !2582
call void @"~Fiber::stack_pool:init"(), !dbg !2582
br label %initialized, !dbg !2582
}
; Function Attrs: uwtable
define internal i8* @"*Array(Pointer(Void))@Array(T)#pop?:(Pointer(Void) | Nil)"(%"Array(Pointer(Void))"* %self) #0 !dbg !363 {
alloca:
%value = alloca i8*, !dbg !2588
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !2589
%1 = load i32, i32* %0, !dbg !2589
%2 = icmp eq i32 %1, 0, !dbg !2589
br i1 %2, label %then, label %else, !dbg !2589
then: ; preds = %entry
br label %exit, !dbg !2589
else: ; preds = %entry
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !2589
%4 = load i32, i32* %3, !dbg !2589
%5 = sub i32 %4, 1, !dbg !2589
%6 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !2590
store i32 %5, i32* %6, !dbg !2590
%7 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !2590
%8 = load i8**, i8*** %7, !dbg !2590
%9 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !2590
%10 = load i32, i32* %9, !dbg !2590
%11 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]<Int32>:Pointer(Void)"(i8** %8, i32 %10), !dbg !2591
store i8* %11, i8** %value, !dbg !2592
%12 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !2592
%13 = load i8**, i8*** %12, !dbg !2592
%14 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !2592
%15 = load i32, i32* %14, !dbg !2592
%16 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %13, i32 %15), !dbg !2593
call void @"*Pointer(Pointer(Void))@Pointer(T)#clear:Nil"(i8** %16), !dbg !2594
%17 = load i8*, i8** %value, !dbg !2594
br label %exit, !dbg !2594
exit: ; preds = %else, %then
%18 = phi i8* [ null, %then ], [ %17, %else ], !dbg !2594
ret i8* %18, !dbg !2594
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]<Int32>:Pointer(Void)"(i8** %self, i32 %offset) #0 !dbg !364 {
entry:
%0 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %offset), !dbg !2595
%1 = load i8*, i8** %0, !dbg !2595
ret i8* %1, !dbg !2595
}
; Function Attrs: uwtable
define internal void @"*Pointer(Pointer(Void))@Pointer(T)#clear:Nil"(i8** %self) #0 !dbg !365 {
alloca:
%count = alloca i32, !dbg !2596
br label %entry
entry: ; preds = %alloca
store i32 1, i32* %count, !dbg !2597
%0 = load i32, i32* %count, !dbg !2597
call void @"*Pointer(Pointer(Void))@Pointer(T)#clear<Int32>:Nil"(i8** %self, i32 %0), !dbg !2596
ret void, !dbg !2596
}
; Function Attrs: uwtable
define internal void @"*Pointer(Pointer(Void))@Pointer(T)#clear<Int32>:Nil"(i8** %self, i32 %count) #0 !dbg !366 {
entry:
%0 = bitcast i8** %self to i8*, !dbg !2598
%1 = call i64 @"*Pointer(Pointer(Void))@Pointer(T)#bytesize<Int32>:UInt64"(i8** %self, i32 %count), !dbg !2599
call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 %1, i32 0, i1 false), !dbg !2600
ret void, !dbg !2600
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(Pointer(Void))@Pointer(T)#bytesize<Int32>:UInt64"(i8** %self, i32 %count) #0 !dbg !367 {
entry:
%0 = sext i32 %count to i64, !dbg !2601
%1 = mul i64 %0, 8, !dbg !2601
ret i64 %1, !dbg !2601
}
declare i8* @mmap(i8*, i64, i32, i32, i32, i64)
define internal i8** @"~LibC::MAP_FAILED:read"() {
entry:
%0 = load i1, i1* @"LibC::MAP_FAILED:init", !dbg !2583
br i1 %0, label %initialized, label %not_initialized, !dbg !2583
initialized: ; preds = %not_initialized, %entry
ret i8** @"LibC::MAP_FAILED", !dbg !2583
not_initialized: ; preds = %entry
store i1 true, i1* @"LibC::MAP_FAILED:init", !dbg !2583
call void @"~LibC::MAP_FAILED:init"(), !dbg !2583
br label %initialized, !dbg !2583
}
; Function Attrs: uwtable
define internal i1 @"*Pointer(Void)@Comparable(T)#==<Pointer(Void)>:Bool"(i8* %self, i8* %other) #0 !dbg !368 {
entry:
%0 = call i32 @"*Pointer(Void)@Pointer(T)#<=><Pointer(Void)>:Int32"(i8* %self, i8* %other), !dbg !2602
%1 = icmp eq i32 %0, 0, !dbg !2602
ret i1 %1, !dbg !2602
}
; Function Attrs: uwtable
define internal i32 @"*Pointer(Void)@Pointer(T)#<=><Pointer(Void)>:Int32"(i8* %self, i8* %other) #0 !dbg !370 {
entry:
%0 = ptrtoint i8* %self to i64, !dbg !2603
%1 = ptrtoint i8* %other to i64, !dbg !2603
%2 = call i32 @"*UInt64@Number#<=><UInt64>:Int32"(i64 %0, i64 %1), !dbg !2604
ret i32 %2, !dbg !2604
}
; Function Attrs: uwtable
define internal i32 @"*UInt64@Number#<=><UInt64>:Int32"(i64 %self, i64 %other) #0 !dbg !371 {
entry:
%0 = icmp ugt i64 %self, %other, !dbg !2605
br i1 %0, label %then, label %else, !dbg !2605
then: ; preds = %entry
br label %exit, !dbg !2605
else: ; preds = %entry
%1 = icmp ult i64 %self, %other, !dbg !2606
br i1 %1, label %then1, label %else2, !dbg !2606
exit: ; preds = %exit3, %then
%2 = phi i32 [ 1, %then ], [ %3, %exit3 ], !dbg !2606
ret i32 %2, !dbg !2606
then1: ; preds = %else
br label %exit3, !dbg !2606
else2: ; preds = %else
br label %exit3, !dbg !2606
exit3: ; preds = %else2, %then1
%3 = phi i32 [ -1, %then1 ], [ 0, %else2 ], !dbg !2606
br label %exit, !dbg !2606
}
declare i32 @madvise(i8*, i64, i32)
declare i32 @mprotect(i8*, i64, i32)
; Function Attrs: uwtable
define internal i8* @"*Pointer(Void)@Pointer(T)#+<Int32>:Pointer(Void)"(i8* %self, i32 %other) #0 !dbg !372 {
entry:
%0 = sext i32 %other to i64, !dbg !2607
%1 = getelementptr inbounds i8, i8* %self, i64 %0, !dbg !2607
ret i8* %1, !dbg !2607
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"~procProc(Fiber, (IO::FileDescriptor | Nil))@src/fiber.cr:29"(%Fiber* %f) #0 !dbg !373 {
entry:
%0 = call %"IO::FileDescriptor"* @"*Fiber#run:(IO::FileDescriptor | Nil)"(%Fiber* %f), !dbg !2608
ret %"IO::FileDescriptor"* %0, !dbg !2608
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*Fiber#run:(IO::FileDescriptor | Nil)"(%Fiber* %self) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !374 {
alloca:
%ex = alloca i32*, !dbg !2609
%name = alloca %String*, !dbg !2609
%prev_fiber = alloca %Fiber*, !dbg !2609
%next_fiber = alloca %Fiber*, !dbg !2609
%__arg0 = alloca %"Event::Event", !dbg !2610
%__arg032 = alloca %"Event::Event", !dbg !2610
%__arg041 = alloca %"Event::Event", !dbg !2610
%__arg045 = alloca %"Event::Event", !dbg !2610
%__arg054 = alloca %"Event::Event", !dbg !2610
%__arg058 = alloca %"Event::Event", !dbg !2610
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 8, !dbg !2609
%1 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %0, i32 0, i32 0, !dbg !2609
%2 = load i32, i32* %1, !dbg !2609
%3 = icmp eq i32 444, %2, !dbg !2609
br i1 %3, label %current_def, label %next_def, !dbg !2609
rescue: ; preds = %ctx_is_not_null6, %ctx_is_null5, %ctx_is_not_null, %ctx_is_null
%4 = landingpad %landing_pad
cleanup, !dbg !2611
%5 = extractvalue %landing_pad %4, 0, !dbg !2611
%6 = extractvalue %landing_pad %4, 1, !dbg !2611
br label %this_rescue, !dbg !2611
current_def: ; preds = %entry
%7 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %0, i32 0, i32 1, !dbg !2609
%8 = bitcast [2 x i64]* %7 to %"->"*, !dbg !2609
%9 = load %"->", %"->"* %8, !dbg !2609
%10 = extractvalue %"->" %9, 0, !dbg !2609
%11 = extractvalue %"->" %9, 1, !dbg !2609
%12 = icmp eq i8* %11, null, !dbg !2609
br i1 %12, label %ctx_is_null, label %ctx_is_not_null, !dbg !2609
next_def: ; preds = %entry
%13 = icmp eq i32 450, %2, !dbg !2611
br i1 %13, label %current_def3, label %next_def4, !dbg !2611
ctx_is_null: ; preds = %current_def
%14 = bitcast i8* %10 to %Nil ()*, !dbg !2609
%15 = invoke %Nil %14()
to label %invoke_out unwind label %rescue, !dbg !2611
ctx_is_not_null: ; preds = %current_def
%16 = bitcast i8* %10 to %Nil (i8*)*, !dbg !2611
%17 = invoke %Nil %16(i8* %11)
to label %invoke_out1 unwind label %rescue, !dbg !2611
invoke_out: ; preds = %ctx_is_null
br label %exit, !dbg !2611
exit: ; preds = %invoke_out1, %invoke_out
br label %exit2, !dbg !2611
invoke_out1: ; preds = %ctx_is_not_null
br label %exit, !dbg !2611
exit2: ; preds = %exit8, %exit
br label %exit10, !dbg !2611
current_def3: ; preds = %next_def
%18 = getelementptr inbounds %"(Proc(Nil) | Proc(Void))", %"(Proc(Nil) | Proc(Void))"* %0, i32 0, i32 1, !dbg !2611
%19 = bitcast [2 x i64]* %18 to %"->"*, !dbg !2611
%20 = load %"->", %"->"* %19, !dbg !2611
%21 = extractvalue %"->" %20, 0, !dbg !2611
%22 = extractvalue %"->" %20, 1, !dbg !2611
%23 = icmp eq i8* %22, null, !dbg !2611
br i1 %23, label %ctx_is_null5, label %ctx_is_not_null6, !dbg !2611
next_def4: ; preds = %next_def
unreachable, !dbg !2611
ctx_is_null5: ; preds = %current_def3
%24 = bitcast i8* %21 to void ()*, !dbg !2611
invoke void %24()
to label %invoke_out7 unwind label %rescue, !dbg !2611
ctx_is_not_null6: ; preds = %current_def3
%25 = bitcast i8* %21 to void (i8*)*, !dbg !2611
invoke void %25(i8* %22)
to label %invoke_out9 unwind label %rescue, !dbg !2611
invoke_out7: ; preds = %ctx_is_null5
br label %exit8, !dbg !2611
exit8: ; preds = %invoke_out9, %invoke_out7
br label %exit2, !dbg !2611
invoke_out9: ; preds = %ctx_is_not_null6
br label %exit8, !dbg !2611
exit10: ; preds = %invoke_out20, %exit2
%26 = phi %"IO::FileDescriptor"* [ null, %exit2 ], [ %67, %invoke_out20 ], !dbg !2612
%27 = call %"Array(Pointer(Void))"** @"~Fiber::stack_pool:read"(), !dbg !2612
%28 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %27, !dbg !2612
%29 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !2612
%30 = load i8*, i8** %29, !dbg !2612
%31 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#<<<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %28, i8* %30), !dbg !2613
%32 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2614
%33 = load %Fiber*, %Fiber** %32, !dbg !2614
store %Fiber* %33, %Fiber** %prev_fiber, !dbg !2615
%34 = icmp ne %Fiber* %33, null, !dbg !2615
br i1 %34, label %then33, label %else34, !dbg !2615
rescue_ensure: ; preds = %invoke_out19, %exit17, %else, %invoke_out15, %invoke_out14, %invoke_out13, %invoke_out12, %invoke_out11, %then
%35 = landingpad %landing_pad
cleanup, !dbg !2616
%36 = extractvalue %landing_pad %35, 0, !dbg !2616
%37 = call %"Array(Pointer(Void))"** @"~Fiber::stack_pool:read"(), !dbg !2616
%38 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %37, !dbg !2616
%39 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !2616
%40 = load i8*, i8** %39, !dbg !2616
%41 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#<<<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %38, i8* %40), !dbg !2613
%42 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2614
%43 = load %Fiber*, %Fiber** %42, !dbg !2614
store %Fiber* %43, %Fiber** %prev_fiber, !dbg !2615
%44 = icmp ne %Fiber* %43, null, !dbg !2615
br i1 %44, label %then46, label %else47, !dbg !2615
this_rescue: ; preds = %rescue
%45 = bitcast i8* %5 to %"struct.LibUnwind::Exception"*, !dbg !2612
%46 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %45), !dbg !2612
%47 = inttoptr i64 %46 to i32*, !dbg !2612
store i32* %47, i32** %ex, !dbg !2612
%48 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 7, !dbg !2617
%49 = load %String*, %String** %48, !dbg !2617
store %String* %49, %String** %name, !dbg !2618
%50 = icmp ne %String* %49, null, !dbg !2618
br i1 %50, label %then, label %else, !dbg !2618
then: ; preds = %this_rescue
%51 = call %"IO::FileDescriptor"** @"~STDERR:read"()
%52 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %51
%53 = invoke %"String::Builder"* @"*String::Builder::new:String::Builder"()
to label %invoke_out11 unwind label %rescue_ensure, !dbg !2619
else: ; preds = %this_rescue
%54 = call %"IO::FileDescriptor"** @"~STDERR:read"(), !dbg !2620
%55 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %54, !dbg !2620
invoke void @"*IO::FileDescriptor@IO#puts<String>:Nil"(%"IO::FileDescriptor"* %55, %String* bitcast ({ i32, i32, i32, [30 x i8] }* @"'Unhandled exception...'.3" to %String*))
to label %invoke_out18 unwind label %rescue_ensure, !dbg !2621
invoke_out11: ; preds = %then
%56 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %53, %String* bitcast ({ i32, i32, i32, [36 x i8] }* @"'Unhandled exception...'" to %String*))
to label %invoke_out12 unwind label %rescue_ensure, !dbg !2619
invoke_out12: ; preds = %invoke_out11
%57 = load %String*, %String** %name, !dbg !2619
%58 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %56, %String* %57)
to label %invoke_out13 unwind label %rescue_ensure, !dbg !2619
invoke_out13: ; preds = %invoke_out12
%59 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %58, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'):'" to %String*))
to label %invoke_out14 unwind label %rescue_ensure, !dbg !2619
invoke_out14: ; preds = %invoke_out13
%60 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %59)
to label %invoke_out15 unwind label %rescue_ensure, !dbg !2619
invoke_out15: ; preds = %invoke_out14
invoke void @"*IO::FileDescriptor@IO#puts<String>:Nil"(%"IO::FileDescriptor"* %52, %String* %60)
to label %invoke_out16 unwind label %rescue_ensure, !dbg !2620
invoke_out16: ; preds = %invoke_out15
br label %exit17, !dbg !2620
exit17: ; preds = %invoke_out18, %invoke_out16
%61 = load i32*, i32** %ex, !dbg !2621
%62 = call %"IO::FileDescriptor"** @"~STDERR:read"(), !dbg !2621
%63 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %62, !dbg !2621
%64 = invoke %"IO::FileDescriptor"* @"*Exception+@Exception#inspect_with_backtrace<IO::FileDescriptor>:IO::FileDescriptor"(i32* %61, %"IO::FileDescriptor"* %63)
to label %invoke_out19 unwind label %rescue_ensure, !dbg !2622
invoke_out18: ; preds = %else
br label %exit17, !dbg !2621
invoke_out19: ; preds = %exit17
%65 = call %"IO::FileDescriptor"** @"~STDERR:read"(), !dbg !2622
%66 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %65, !dbg !2622
%67 = invoke %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %66)
to label %invoke_out20 unwind label %rescue_ensure, !dbg !2623
invoke_out20: ; preds = %invoke_out19
br label %exit10, !dbg !2623
then33: ; preds = %exit10
%68 = load %Fiber*, %Fiber** %prev_fiber, !dbg !2615
%69 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2615
%70 = load %Fiber*, %Fiber** %69, !dbg !2615
%71 = call %Fiber* @"*Fiber#next_fiber=<(Fiber | Nil)>:(Fiber | Nil)"(%Fiber* %68, %Fiber* %70), !dbg !2624
br label %exit35, !dbg !2624
else34: ; preds = %exit10
%72 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2624
%73 = load %Fiber*, %Fiber** %72, !dbg !2624
store %Fiber* %73, %Fiber** @"Fiber::first_fiber", !dbg !2625
br label %exit35, !dbg !2625
exit35: ; preds = %else34, %then33
%74 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2626
%75 = load %Fiber*, %Fiber** %74, !dbg !2626
store %Fiber* %75, %Fiber** %next_fiber, !dbg !2627
%76 = icmp ne %Fiber* %75, null, !dbg !2627
br i1 %76, label %then36, label %else37, !dbg !2627
then36: ; preds = %exit35
%77 = load %Fiber*, %Fiber** %next_fiber, !dbg !2627
%78 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2627
%79 = load %Fiber*, %Fiber** %78, !dbg !2627
%80 = call %Fiber* @"*Fiber#prev_fiber=<(Fiber | Nil)>:(Fiber | Nil)"(%Fiber* %77, %Fiber* %79), !dbg !2628
br label %exit38, !dbg !2628
else37: ; preds = %exit35
%81 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2628
%82 = load %Fiber*, %Fiber** %81, !dbg !2628
store %Fiber* %82, %Fiber** @"Fiber::last_fiber", !dbg !2629
br label %exit38, !dbg !2629
exit38: ; preds = %else37, %then36
%83 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 2, !dbg !2629
%84 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %83, i32 0, i32 0, !dbg !2629
%85 = load i32, i32* %84, !dbg !2629
%86 = icmp eq i32 392, %85, !dbg !2629
br i1 %86, label %current_def39, label %next_def40, !dbg !2629
current_def39: ; preds = %exit38
%87 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %83, i32 0, i32 1, !dbg !2629
%88 = bitcast [2 x i64]* %87 to %"Event::Event"*, !dbg !2629
%89 = load %"Event::Event", %"Event::Event"* %88, !dbg !2610
store %"Event::Event" %89, %"Event::Event"* %__arg041, !dbg !2610
%90 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg041), !dbg !2630
br label %exit42, !dbg !2630
next_def40: ; preds = %exit38
%91 = icmp eq i32 0, %85, !dbg !2630
br i1 %91, label %current_def43, label %next_def44, !dbg !2630
exit42: ; preds = %current_def43, %current_def39
call void @"*Scheduler::reschedule:Nil"(), !dbg !2616
ret %"IO::FileDescriptor"* %26, !dbg !2612
current_def43: ; preds = %next_def40
br label %exit42, !dbg !2610
next_def44: ; preds = %next_def40
unreachable, !dbg !2610
then46: ; preds = %rescue_ensure
%92 = load %Fiber*, %Fiber** %prev_fiber, !dbg !2615
%93 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2615
%94 = load %Fiber*, %Fiber** %93, !dbg !2615
%95 = call %Fiber* @"*Fiber#next_fiber=<(Fiber | Nil)>:(Fiber | Nil)"(%Fiber* %92, %Fiber* %94), !dbg !2624
br label %exit48, !dbg !2624
else47: ; preds = %rescue_ensure
%96 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2624
%97 = load %Fiber*, %Fiber** %96, !dbg !2624
store %Fiber* %97, %Fiber** @"Fiber::first_fiber", !dbg !2625
br label %exit48, !dbg !2625
exit48: ; preds = %else47, %then46
%98 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !2626
%99 = load %Fiber*, %Fiber** %98, !dbg !2626
store %Fiber* %99, %Fiber** %next_fiber, !dbg !2627
%100 = icmp ne %Fiber* %99, null, !dbg !2627
br i1 %100, label %then49, label %else50, !dbg !2627
then49: ; preds = %exit48
%101 = load %Fiber*, %Fiber** %next_fiber, !dbg !2627
%102 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2627
%103 = load %Fiber*, %Fiber** %102, !dbg !2627
%104 = call %Fiber* @"*Fiber#prev_fiber=<(Fiber | Nil)>:(Fiber | Nil)"(%Fiber* %101, %Fiber* %103), !dbg !2628
br label %exit51, !dbg !2628
else50: ; preds = %exit48
%105 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !2628
%106 = load %Fiber*, %Fiber** %105, !dbg !2628
store %Fiber* %106, %Fiber** @"Fiber::last_fiber", !dbg !2629
br label %exit51, !dbg !2629
exit51: ; preds = %else50, %then49
%107 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 2, !dbg !2629
%108 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %107, i32 0, i32 0, !dbg !2629
%109 = load i32, i32* %108, !dbg !2629
%110 = icmp eq i32 392, %109, !dbg !2629
br i1 %110, label %current_def52, label %next_def53, !dbg !2629
current_def52: ; preds = %exit51
%111 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %107, i32 0, i32 1, !dbg !2629
%112 = bitcast [2 x i64]* %111 to %"Event::Event"*, !dbg !2629
%113 = load %"Event::Event", %"Event::Event"* %112, !dbg !2610
store %"Event::Event" %113, %"Event::Event"* %__arg054, !dbg !2610
%114 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg054), !dbg !2630
br label %exit55, !dbg !2630
next_def53: ; preds = %exit51
%115 = icmp eq i32 0, %109, !dbg !2630
br i1 %115, label %current_def56, label %next_def57, !dbg !2630
exit55: ; preds = %current_def56, %current_def52
call void @"*Scheduler::reschedule:Nil"(), !dbg !2616
%116 = bitcast i8* %36 to %"struct.LibUnwind::Exception"*, !dbg !2616
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %116), !dbg !2612
unreachable, !dbg !2612
current_def56: ; preds = %next_def53
br label %exit55, !dbg !2610
next_def57: ; preds = %next_def53
unreachable, !dbg !2610
}
define internal %"IO::FileDescriptor"** @"~STDERR:read"() {
entry:
%0 = load i1, i1* @"STDERR:init", !dbg !2618
br i1 %0, label %initialized, label %not_initialized, !dbg !2618
initialized: ; preds = %not_initialized, %entry
ret %"IO::FileDescriptor"** @STDERR
not_initialized: ; preds = %entry
store i1 true, i1* @"STDERR:init", !dbg !2618
call void @"~STDERR:init"()
br label %initialized
}
define internal void @"~STDERR:init"() {
alloca:
%f = alloca %"IO::FileDescriptor"*
br label %entry
entry: ; preds = %alloca
%0 = call i32 @isatty(i32 2)
%1 = icmp eq i32 %0, 0
%2 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor::new:blocking<Int32, Bool>:IO::FileDescriptor"(i32 2, i1 %1)
store %"IO::FileDescriptor"* %2, %"IO::FileDescriptor"** %f
%3 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %f
%4 = call i1 @"*IO::FileDescriptor@IO::Buffered#flush_on_newline=<Bool>:Bool"(%"IO::FileDescriptor"* %3, i1 true)
store %"IO::FileDescriptor"* %2, %"IO::FileDescriptor"** @STDERR
ret void
}
declare i32 @isatty(i32)
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor::new:blocking<Int32, Bool>:IO::FileDescriptor"(i32 %__arg0, i1 %blocking) #0 !dbg !375 {
alloca:
%_ = alloca %"IO::FileDescriptor"*, !dbg !2631
%0 = alloca %"Slice(UInt8)", !dbg !2632
br label %entry
entry: ; preds = %alloca
%1 = call i8* @__crystal_malloc64(i64 ptrtoint (%"IO::FileDescriptor"* getelementptr (%"IO::FileDescriptor", %"IO::FileDescriptor"* null, i32 1) to i64)), !dbg !2631
%2 = bitcast i8* %1 to %"IO::FileDescriptor"*, !dbg !2631
%3 = bitcast %"IO::FileDescriptor"* %2 to i8*, !dbg !2631
call void @llvm.memset.p0i8.i32(i8* %3, i8 0, i32 ptrtoint (%"IO::FileDescriptor"* getelementptr (%"IO::FileDescriptor", %"IO::FileDescriptor"* null, i32 1) to i32), i32 4, i1 false), !dbg !2631
%4 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::empty:Slice(UInt8)"(i32 1033), !dbg !2632
store %"Slice(UInt8)" %4, %"Slice(UInt8)"* %0, !dbg !2632
%5 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 7, !dbg !2632
%6 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2632
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %5, !dbg !2632
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 8, !dbg !2632
store i32 0, i32* %7, !dbg !2632
%8 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 9, !dbg !2632
store i1 false, i1* %8, !dbg !2632
%9 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 10, !dbg !2632
store i1 false, i1* %9, !dbg !2632
%10 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 17, !dbg !2632
store i1 false, i1* %10, !dbg !2632
%11 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 18, !dbg !2632
store i1 false, i1* %11, !dbg !2632
%12 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 0, !dbg !2632
store i32 79, i32* %12, !dbg !2632
store %"IO::FileDescriptor"* %2, %"IO::FileDescriptor"** %_, !dbg !2631
%13 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %_, !dbg !2631
%14 = call %"(Int32 | Nil)" @"*IO::FileDescriptor#initialize<Int32, Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %13, i32 %__arg0, i1 %blocking), !dbg !2631
%15 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %_, !dbg !2631
call void @"*GC::add_finalizer<IO::FileDescriptor>:Nil"(%"IO::FileDescriptor"* %15), !dbg !2631
%16 = load %"IO::FileDescriptor"*, %"IO::FileDescriptor"** %_, !dbg !2631
ret %"IO::FileDescriptor"* %16, !dbg !2631
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::empty:Slice(UInt8)"(i32 %self) #0 !dbg !377 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !2633
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)::null:Pointer(UInt8)"(i32 690), !dbg !2634
%2 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i32 %self, i8* %1, i32 0), !dbg !2633
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %0, !dbg !2633
%3 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2633
ret %"Slice(UInt8)" %3, !dbg !2633
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)::null:Pointer(UInt8)"(i32 %self) #0 !dbg !378 {
entry:
ret i8* null, !dbg !2635
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i32 %self, i8* %__arg0, i32 %__arg1) #0 !dbg !379 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !2636
%0 = alloca %"Slice(UInt8)", !dbg !2636
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !2636
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Slice(UInt8)"* getelementptr (%"Slice(UInt8)", %"Slice(UInt8)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2636
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2636
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !2636
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize<Pointer(UInt8), Int32>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1), !dbg !2636
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !2636
ret %"Slice(UInt8)" %4, !dbg !2636
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*IO::FileDescriptor#initialize<Int32, Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %self, i32 %fd, i1 %blocking) #0 !dbg !380 {
alloca:
%0 = alloca %"(Int32 | Nil)", !dbg !2637
%1 = alloca %"(Int32 | Nil)", !dbg !2638
br label %entry
entry: ; preds = %alloca
%2 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 4, !dbg !2639
store i32 %fd, i32* %2, !dbg !2639
%3 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 19, !dbg !2640
store i1 false, i1* %3, !dbg !2640
br i1 %blocking, label %then1, label %else2, !dbg !2637
then: ; preds = %exit
%4 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !2637
store i32 0, i32* %4, !dbg !2637
%5 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !2637
store [1 x i64] zeroinitializer, [1 x i64]* %5, !dbg !2637
br label %exit3, !dbg !2637
else: ; preds = %exit
%6 = call %"(Int32 | Nil)" @"*IO::FileDescriptor#blocking=<Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %self, i1 false), !dbg !2638
store %"(Int32 | Nil)" %6, %"(Int32 | Nil)"* %1, !dbg !2638
br label %exit3, !dbg !2638
then1: ; preds = %entry
br label %exit, !dbg !2637
else2: ; preds = %entry
br label %exit, !dbg !2637
exit: ; preds = %else2, %then1
%7 = phi i1 [ %blocking, %then1 ], [ false, %else2 ], !dbg !2637
br i1 %7, label %then, label %else, !dbg !2637
exit3: ; preds = %else, %then
%8 = phi %"(Int32 | Nil)"* [ %0, %then ], [ %1, %else ], !dbg !2638
%9 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %8, !dbg !2638
ret %"(Int32 | Nil)" %9, !dbg !2638
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*IO::FileDescriptor#blocking=<Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %self, i1 %value) #0 !dbg !381 {
alloca:
%0 = alloca %"(Int32 | Nil)", !dbg !2641
br label %entry
entry: ; preds = %alloca
%1 = call %"(Int32 | Nil)" @"*IO::FileDescriptor@Crystal::System::FileDescriptor#system_blocking=<Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %self, i1 %value), !dbg !2641
store %"(Int32 | Nil)" %1, %"(Int32 | Nil)"* %0, !dbg !2641
%2 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !2641
ret %"(Int32 | Nil)" %2, !dbg !2641
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*IO::FileDescriptor@Crystal::System::FileDescriptor#system_blocking=<Bool>:(Int32 | Nil)"(%"IO::FileDescriptor"* %self, i1 %value) #0 !dbg !382 {
alloca:
%current_flags = alloca i32, !dbg !2642
%new_flags = alloca i32, !dbg !2642
%0 = alloca %"(Int32 | Nil)", !dbg !2643
%1 = alloca %"(Int32 | Nil)", !dbg !2643
br label %entry
entry: ; preds = %alloca
%2 = call i32 @"*IO::FileDescriptor#fcntl<Int32>:Int32"(%"IO::FileDescriptor"* %self, i32 3), !dbg !2644
store i32 %2, i32* %current_flags, !dbg !2645
%3 = load i32, i32* %current_flags, !dbg !2645
store i32 %3, i32* %new_flags, !dbg !2646
br i1 %value, label %then, label %else, !dbg !2647
then: ; preds = %entry
%4 = load i32, i32* %new_flags, !dbg !2647
%5 = call i32 @"*Int32@Int#~:Int32"(i32 2048), !dbg !2648
%6 = and i32 %4, %5, !dbg !2648
store i32 %6, i32* %new_flags, !dbg !2649
br label %exit, !dbg !2649
else: ; preds = %entry
%7 = load i32, i32* %new_flags, !dbg !2649
%8 = or i32 %7, 2048, !dbg !2649
store i32 %8, i32* %new_flags, !dbg !2650
br label %exit, !dbg !2650
exit: ; preds = %else, %then
%9 = load i32, i32* %new_flags, !dbg !2643
%10 = load i32, i32* %current_flags, !dbg !2643
%11 = icmp eq i32 %9, %10, !dbg !2643
br i1 %11, label %then1, label %else2, !dbg !2643
then1: ; preds = %exit
%12 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !2643
store i32 0, i32* %12, !dbg !2643
%13 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !2643
store [1 x i64] zeroinitializer, [1 x i64]* %13, !dbg !2643
br label %exit3, !dbg !2643
else2: ; preds = %exit
%14 = load i32, i32* %new_flags, !dbg !2643
%15 = call i32 @"*IO::FileDescriptor#fcntl<Int32, Int32>:Int32"(%"IO::FileDescriptor"* %self, i32 4, i32 %14), !dbg !2643
%16 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !2643
store i32 152, i32* %16, !dbg !2643
%17 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !2643
%18 = bitcast [1 x i64]* %17 to i32*, !dbg !2643
store i32 %15, i32* %18, !dbg !2643
br label %exit3, !dbg !2643
exit3: ; preds = %else2, %then1
%19 = phi %"(Int32 | Nil)"* [ %0, %then1 ], [ %1, %else2 ], !dbg !2643
%20 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %19, !dbg !2643
ret %"(Int32 | Nil)" %20, !dbg !2643
}
; Function Attrs: uwtable
define internal i32 @"*IO::FileDescriptor#fcntl<Int32>:Int32"(%"IO::FileDescriptor"* %self, i32 %cmd) #0 !dbg !384 {
alloca:
%arg = alloca i32, !dbg !2651
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %arg, !dbg !2651
%0 = load i32, i32* %arg, !dbg !2651
%1 = call i32 @"*IO::FileDescriptor#fcntl<Int32, Int32>:Int32"(%"IO::FileDescriptor"* %self, i32 %cmd, i32 %0), !dbg !2651
ret i32 %1, !dbg !2651
}
; Function Attrs: uwtable
define internal i32 @"*IO::FileDescriptor#fcntl<Int32, Int32>:Int32"(%"IO::FileDescriptor"* %self, i32 %cmd, i32 %arg) #0 !dbg !385 {
entry:
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 4, !dbg !2652
%1 = load i32, i32* %0, !dbg !2652
%2 = call i32 @"*Crystal::System::FileDescriptor::fcntl<Int32, Int32, Int32>:Int32"(i32 %1, i32 %cmd, i32 %arg), !dbg !2652
ret i32 %2, !dbg !2652
}
; Function Attrs: uwtable
define internal i32 @"*Crystal::System::FileDescriptor::fcntl<Int32, Int32, Int32>:Int32"(i32 %fd, i32 %cmd, i32 %arg) #0 !dbg !386 {
alloca:
%r = alloca i32, !dbg !2653
br label %entry
entry: ; preds = %alloca
%0 = call i32 (i32, i32, ...) @fcntl(i32 %fd, i32 %cmd, i32 %arg), !dbg !2654
store i32 %0, i32* %r, !dbg !2655
%1 = load i32, i32* %r, !dbg !2656
%2 = icmp eq i32 %1, -1, !dbg !2656
br i1 %2, label %then, label %else, !dbg !2656
then: ; preds = %entry
%3 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'fcntl() failed'" to %String*)), !dbg !2657
call void @"*raise<Errno>:NoReturn"(%Errno* %3), !dbg !2656
unreachable, !dbg !2656
else: ; preds = %entry
%4 = load i32, i32* %r, !dbg !2656
ret i32 %4, !dbg !2656
}
declare i32 @fcntl(i32, i32, ...)
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#~:Int32"(i32 %self) #0 !dbg !387 {
entry:
%0 = xor i32 %self, -1, !dbg !2658
ret i32 %0, !dbg !2658
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer<IO::FileDescriptor>:Nil"(%"IO::FileDescriptor"* %object) #0 !dbg !388 {
entry:
call void @"*GC::add_finalizer_impl<IO::FileDescriptor>:Nil"(%"IO::FileDescriptor"* %object), !dbg !2659
ret void, !dbg !2659
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer_impl<IO::FileDescriptor>:Nil"(%"IO::FileDescriptor"* %object) #0 !dbg !389 {
alloca:
%0 = alloca %"->", !dbg !2660
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"IO::FileDescriptor"* %object to i8*, !dbg !2660
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2660
store i8* bitcast (void (i8*, i8*)* @"~proc2Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:121" to i8*), i8** %2, !dbg !2660
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2660
store i8* null, i8** %3, !dbg !2660
%4 = load %"->", %"->"* %0, !dbg !2660
%5 = call i8* @"~check_proc_is_not_closure"(%"->" %4), !dbg !2660
%6 = bitcast i8* %5 to %Nil (i8*, i8*)*, !dbg !2660
call void @GC_register_finalizer_ignore_self(i8* %1, %Nil (i8*, i8*)* %6, i8* null, %"->"* null, i8** null), !dbg !2661
ret void, !dbg !2661
}
; Function Attrs: uwtable
define internal void @"~proc2Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:121"(i8* %obj, i8* %data) #0 !dbg !390 {
entry:
%0 = bitcast i8* %obj to i32*, !dbg !2662
call void @"*IO::FileDescriptor+@IO::FileDescriptor#finalize:Nil"(i32* %0), !dbg !2663
ret void, !dbg !2663
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::FileDescriptor#finalize:Nil"(i32* %self) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !391 {
entry:
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2664
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 19, !dbg !2664
%2 = load i1, i1* %1, !dbg !2664
br i1 %2, label %then, label %else, !dbg !2664
then: ; preds = %entry
ret void, !dbg !2664
else: ; preds = %entry
invoke void @"*IO::FileDescriptor+@IO::Buffered#close:Nil"(i32* %self)
to label %invoke_out unwind label %rescue, !dbg !2665
rescue: ; preds = %else
%3 = landingpad %landing_pad
cleanup, !dbg !2665
%4 = extractvalue %landing_pad %3, 0, !dbg !2665
%5 = extractvalue %landing_pad %3, 1, !dbg !2665
br label %this_rescue, !dbg !2665
invoke_out: ; preds = %else
br label %exit, !dbg !2665
exit: ; preds = %this_rescue, %invoke_out
ret void, !dbg !2665
this_rescue: ; preds = %rescue
br label %exit, !dbg !2665
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::Buffered#close:Nil"(i32* %self) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !392 {
entry:
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2666
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 8, !dbg !2666
%2 = load i32, i32* %1, !dbg !2666
%3 = icmp sgt i32 %2, 0, !dbg !2666
br i1 %3, label %then, label %else, !dbg !2666
rescue: ; preds = %then
%4 = landingpad %landing_pad
cleanup, !dbg !2666
%5 = extractvalue %landing_pad %4, 0, !dbg !2666
%6 = extractvalue %landing_pad %4, 1, !dbg !2666
call void @"*IO::FileDescriptor+@IO::FileDescriptor#unbuffered_close:Nil"(i32* %self), !dbg !2667
%7 = bitcast i8* %5 to %"struct.LibUnwind::Exception"*, !dbg !2667
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %7), !dbg !2666
unreachable, !dbg !2666
then: ; preds = %entry
%8 = invoke i32* @"*IO::FileDescriptor+@IO::Buffered#flush:IO::FileDescriptor+"(i32* %self)
to label %invoke_out unwind label %rescue, !dbg !2666
else: ; preds = %entry
br label %exit, !dbg !2666
invoke_out: ; preds = %then
br label %exit, !dbg !2666
exit: ; preds = %else, %invoke_out
%9 = phi i32* [ %8, %invoke_out ], [ null, %else ], !dbg !2666
br label %exit1, !dbg !2666
exit1: ; preds = %exit
%10 = phi i32* [ %9, %exit ], !dbg !2666
call void @"*IO::FileDescriptor+@IO::FileDescriptor#unbuffered_close:Nil"(i32* %self), !dbg !2667
ret void, !dbg !2667
}
; Function Attrs: uwtable
define internal i32* @"*IO::FileDescriptor+@IO::Buffered#flush:IO::FileDescriptor+"(i32* %self) #0 !dbg !394 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !2668
br label %entry
entry: ; preds = %alloca
%1 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2669
%2 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %1, i32 0, i32 8, !dbg !2669
%3 = load i32, i32* %2, !dbg !2669
%4 = icmp sgt i32 %3, 0, !dbg !2669
br i1 %4, label %then, label %else, !dbg !2669
then: ; preds = %entry
%5 = call i8* @"*IO::FileDescriptor+@IO::Buffered#out_buffer:Pointer(UInt8)"(i32* %self), !dbg !2670
%6 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2670
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %6, i32 0, i32 8, !dbg !2670
%8 = load i32, i32* %7, !dbg !2670
%9 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %5, i32 %8), !dbg !2668
store %"Slice(UInt8)" %9, %"Slice(UInt8)"* %0, !dbg !2668
%10 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2668
call void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(i32* %self, %"Slice(UInt8)" %10), !dbg !2669
br label %exit, !dbg !2669
else: ; preds = %entry
br label %exit, !dbg !2669
exit: ; preds = %else, %then
%11 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2671
%12 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %11, i32 0, i32 8, !dbg !2671
store i32 0, i32* %12, !dbg !2671
ret i32* %self, !dbg !2671
}
; Function Attrs: uwtable
define internal i8* @"*IO::FileDescriptor+@IO::Buffered#out_buffer:Pointer(UInt8)"(i32* %self) #0 !dbg !395 {
alloca:
%__temp_37 = alloca i8*, !dbg !2672
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2673
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 12, !dbg !2673
%2 = load i8*, i8** %1, !dbg !2673
store i8* %2, i8** %__temp_37, !dbg !2673
%3 = icmp ne i8* %2, null, !dbg !2673
br i1 %3, label %then, label %else, !dbg !2673
then: ; preds = %entry
%4 = load i8*, i8** %__temp_37, !dbg !2673
br label %exit, !dbg !2673
else: ; preds = %entry
%5 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 8192), !dbg !2674
%6 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2673
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %6, i32 0, i32 12, !dbg !2673
store i8* %5, i8** %7, !dbg !2673
br label %exit, !dbg !2673
exit: ; preds = %else, %then
%8 = phi i8* [ %4, %then ], [ %5, %else ], !dbg !2673
ret i8* %8, !dbg !2673
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(i32* %self, %"Slice(UInt8)" %slice) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !396 {
alloca:
%slice1 = alloca %"Slice(UInt8)", !dbg !2675
%slice2 = alloca %"Slice(UInt8)", !dbg !2676
%slice3 = alloca %"Slice(UInt8)", !dbg !2676
%errno_msg = alloca %String*, !dbg !2676
%writers = alloca %"Deque(Fiber)"*, !dbg !2676
%0 = alloca %"Slice(UInt8)", !dbg !2676
%bytes_written = alloca i64, !dbg !2677
%i = alloca i32, !dbg !2677
%return_code = alloca i64, !dbg !2678
%__temp_38 = alloca i1, !dbg !2678
%1 = alloca %"Slice(UInt8)", !dbg !2679
%2 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2680
%3 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2680
%4 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2680
%5 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2680
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !2675
%6 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !2675
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %0, !dbg !2676
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2676
store %"Slice(UInt8)" %7, %"Slice(UInt8)"* %slice3, !dbg !2676
store %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Error writing file'" to %String*), %String** %errno_msg, !dbg !2676
store i32 0, i32* %i, !dbg !2681
br label %while, !dbg !2681
rescue: ; preds = %invoke_out25, %else22, %then21, %then12, %then7, %then
%8 = landingpad %landing_pad
cleanup, !dbg !2682
%9 = extractvalue %landing_pad %8, 0, !dbg !2682
%10 = extractvalue %landing_pad %8, 1, !dbg !2682
%11 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2683
%12 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %11, i32 0, i32 16, !dbg !2683
%13 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %12, !dbg !2683
store %"Deque(Fiber)"* %13, %"Deque(Fiber)"** %writers, !dbg !2684
%14 = icmp ne %"Deque(Fiber)"* %13, null, !dbg !2684
br i1 %14, label %then29, label %else30, !dbg !2684
while: ; preds = %exit20, %entry
br i1 true, label %body, label %exit, !dbg !2685
body: ; preds = %while
%15 = load i32, i32* %i, !dbg !2685
%16 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice3, !dbg !2685
store %"Slice(UInt8)" %16, %"Slice(UInt8)"* %slice2, !dbg !2685
%17 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2685
%18 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %17, i32 0, i32 4, !dbg !2685
%19 = load i32, i32* %18, !dbg !2685
%20 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice2, i32 0, i32 2, !dbg !2685
%21 = load i8*, i8** %20, !dbg !2685
%22 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice2, i32 0, i32 0, !dbg !2685
%23 = load i32, i32* %22, !dbg !2685
%24 = sext i32 %23 to i64, !dbg !2685
%25 = call i64 @write(i32 %19, i8* %21, i64 %24), !dbg !2678
store i64 %25, i64* %return_code, !dbg !2678
%26 = load i64, i64* %return_code, !dbg !2686
%27 = icmp eq i64 %26, -1, !dbg !2686
store i1 %27, i1* %__temp_38, !dbg !2686
br i1 %27, label %then4, label %else5, !dbg !2686
exit: ; preds = %while
unreachable, !dbg !2682
then: ; preds = %exit6
%28 = call %"IO::Error"* @"*IO::Error@Exception::new<String>:IO::Error"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'File not open for w...'" to %String*)), !dbg !2687
invoke void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* %28)
to label %invoke_out unwind label %rescue, !dbg !2688
else: ; preds = %exit6
store i64 %25, i64* %bytes_written, !dbg !2689
%29 = load i64, i64* %bytes_written, !dbg !2690
%30 = icmp ne i64 %29, -1, !dbg !2690
br i1 %30, label %then7, label %else8, !dbg !2690
then4: ; preds = %body
%31 = call i32 @"*Errno::value:Int32"(), !dbg !2691
%32 = icmp eq i32 %31, 9, !dbg !2691
br label %exit6, !dbg !2691
else5: ; preds = %body
%33 = load i1, i1* %__temp_38, !dbg !2691
br label %exit6, !dbg !2691
exit6: ; preds = %else5, %then4
%34 = phi i1 [ %32, %then4 ], [ %33, %else5 ], !dbg !2691
br i1 %34, label %then, label %else, !dbg !2691
invoke_out: ; preds = %then
unreachable, !dbg !2688
then7: ; preds = %else
%35 = load i64, i64* %bytes_written, !dbg !2690
%36 = invoke %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#+<Int64>:Slice(UInt8)"(%"Slice(UInt8)"* %slice3, i64 %35)
to label %invoke_out9 unwind label %rescue, !dbg !2679
else8: ; preds = %else
%37 = call i32 @"*Errno::value:Int32"(), !dbg !2692
%38 = icmp eq i32 %37, 11, !dbg !2692
br i1 %38, label %then21, label %else22, !dbg !2692
invoke_out9: ; preds = %then7
store %"Slice(UInt8)" %36, %"Slice(UInt8)"* %1, !dbg !2679
%39 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !2679
store %"Slice(UInt8)" %39, %"Slice(UInt8)"* %slice3, !dbg !2679
%40 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice3, i32 0, i32 0, !dbg !2693
%41 = load i32, i32* %40, !dbg !2693
%42 = icmp eq i32 %41, 0, !dbg !2693
br i1 %42, label %then10, label %else11, !dbg !2693
then10: ; preds = %invoke_out9
%43 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2683
%44 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %43, i32 0, i32 16, !dbg !2683
%45 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %44, !dbg !2683
store %"Deque(Fiber)"* %45, %"Deque(Fiber)"** %writers, !dbg !2684
%46 = icmp ne %"Deque(Fiber)"* %45, null, !dbg !2684
br i1 %46, label %then14, label %else15, !dbg !2684
else11: ; preds = %invoke_out9
br label %exit20, !dbg !2694
then12: ; preds = %exit16
invoke void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event:Nil"(i32* %self)
to label %invoke_out17 unwind label %rescue, !dbg !2694
else13: ; preds = %exit16
br label %exit18, !dbg !2694
then14: ; preds = %then10
%47 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2684
%48 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %47), !dbg !2680
%49 = xor i1 %48, true, !dbg !2680
%50 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %2, i32 0, i32 0, !dbg !2680
store i32 163, i32* %50, !dbg !2680
%51 = zext i1 %49 to i64, !dbg !2680
%52 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %2, i32 0, i32 1, !dbg !2680
%53 = bitcast [1 x i64]* %52 to i64*, !dbg !2680
store i64 %51, i64* %53, !dbg !2680
br label %exit16, !dbg !2680
else15: ; preds = %then10
%54 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2680
%55 = icmp eq %"Deque(Fiber)"* %54, null, !dbg !2680
%56 = select i1 %55, i32 0, i32 106, !dbg !2680
%57 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %3, i32 0, i32 0, !dbg !2680
store i32 %56, i32* %57, !dbg !2680
%58 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %3, i32 0, i32 1, !dbg !2680
%59 = bitcast [1 x i64]* %58 to %"Deque(Fiber)"**, !dbg !2680
store %"Deque(Fiber)"* %54, %"Deque(Fiber)"** %59, !dbg !2680
br label %exit16, !dbg !2680
exit16: ; preds = %else15, %then14
%60 = phi %"(Bool | Deque(Fiber) | Nil)"* [ %2, %then14 ], [ %3, %else15 ], !dbg !2680
%61 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %60, i32 0, i32 0, !dbg !2680
%62 = load i32, i32* %61, !dbg !2680
%63 = icmp eq i32 %62, 0, !dbg !2680
%64 = xor i1 %63, true, !dbg !2680
%65 = and i1 true, %64, !dbg !2680
%66 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %60, i32 0, i32 1, !dbg !2680
%67 = bitcast [1 x i64]* %66 to i1*, !dbg !2680
%68 = load i1, i1* %67, !dbg !2680
%69 = icmp eq i32 %62, 163, !dbg !2680
%70 = xor i1 %68, true, !dbg !2680
%71 = and i1 %69, %70, !dbg !2680
%72 = xor i1 %71, true, !dbg !2680
%73 = and i1 %65, %72, !dbg !2680
br i1 %73, label %then12, label %else13, !dbg !2680
invoke_out17: ; preds = %then12
br label %exit18, !dbg !2694
exit18: ; preds = %else13, %invoke_out17
br label %exit19, !dbg !2694
exit19: ; preds = %exit18
ret void, !dbg !2677
exit20: ; preds = %exit24, %else11
%74 = load i32, i32* %i, !dbg !2695
%75 = add i32 %74, 1, !dbg !2695
store i32 %75, i32* %i, !dbg !2682
br label %while, !dbg !2682
then21: ; preds = %else8
invoke void @"*IO::FileDescriptor+@IO::Syscall#wait_writable:Nil"(i32* %self)
to label %invoke_out23 unwind label %rescue, !dbg !2696
else22: ; preds = %else8
%76 = load %String*, %String** %errno_msg, !dbg !2696
%77 = invoke %Errno* @"*Errno::new<String>:Errno"(%String* %76)
to label %invoke_out25 unwind label %rescue, !dbg !2697
invoke_out23: ; preds = %then21
br label %exit24, !dbg !2696
exit24: ; preds = %invoke_out23
br label %exit20, !dbg !2695
invoke_out25: ; preds = %else22
invoke void @"*raise<Errno>:NoReturn"(%Errno* %77)
to label %invoke_out26 unwind label %rescue, !dbg !2695
invoke_out26: ; preds = %invoke_out25
unreachable, !dbg !2695
then27: ; preds = %exit31
call void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event:Nil"(i32* %self), !dbg !2694
br label %exit32, !dbg !2694
else28: ; preds = %exit31
br label %exit32, !dbg !2694
then29: ; preds = %rescue
%78 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2684
%79 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %78), !dbg !2680
%80 = xor i1 %79, true, !dbg !2680
%81 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %4, i32 0, i32 0, !dbg !2680
store i32 163, i32* %81, !dbg !2680
%82 = zext i1 %80 to i64, !dbg !2680
%83 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %4, i32 0, i32 1, !dbg !2680
%84 = bitcast [1 x i64]* %83 to i64*, !dbg !2680
store i64 %82, i64* %84, !dbg !2680
br label %exit31, !dbg !2680
else30: ; preds = %rescue
%85 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2680
%86 = icmp eq %"Deque(Fiber)"* %85, null, !dbg !2680
%87 = select i1 %86, i32 0, i32 106, !dbg !2680
%88 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %5, i32 0, i32 0, !dbg !2680
store i32 %87, i32* %88, !dbg !2680
%89 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %5, i32 0, i32 1, !dbg !2680
%90 = bitcast [1 x i64]* %89 to %"Deque(Fiber)"**, !dbg !2680
store %"Deque(Fiber)"* %85, %"Deque(Fiber)"** %90, !dbg !2680
br label %exit31, !dbg !2680
exit31: ; preds = %else30, %then29
%91 = phi %"(Bool | Deque(Fiber) | Nil)"* [ %4, %then29 ], [ %5, %else30 ], !dbg !2680
%92 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %91, i32 0, i32 0, !dbg !2680
%93 = load i32, i32* %92, !dbg !2680
%94 = icmp eq i32 %93, 0, !dbg !2680
%95 = xor i1 %94, true, !dbg !2680
%96 = and i1 true, %95, !dbg !2680
%97 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %91, i32 0, i32 1, !dbg !2680
%98 = bitcast [1 x i64]* %97 to i1*, !dbg !2680
%99 = load i1, i1* %98, !dbg !2680
%100 = icmp eq i32 %93, 163, !dbg !2680
%101 = xor i1 %99, true, !dbg !2680
%102 = and i1 %100, %101, !dbg !2680
%103 = xor i1 %102, true, !dbg !2680
%104 = and i1 %96, %103, !dbg !2680
br i1 %104, label %then27, label %else28, !dbg !2680
exit32: ; preds = %else28, %then27
%105 = bitcast i8* %9 to %"struct.LibUnwind::Exception"*, !dbg !2694
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %105), !dbg !2677
unreachable, !dbg !2677
}
declare i64 @write(i32, i8*, i64)
; Function Attrs: uwtable
define internal %"IO::Error"* @"*IO::Error@Exception::new<String>:IO::Error"(%String* %__arg0) #0 !dbg !397 {
alloca:
%_ = alloca %"IO::Error"*, !dbg !2698
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"IO::Error"* getelementptr (%"IO::Error", %"IO::Error"* null, i32 1) to i64)), !dbg !2698
%1 = bitcast i8* %0 to %"IO::Error"*, !dbg !2698
%2 = bitcast %"IO::Error"* %1 to i8*, !dbg !2698
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"IO::Error"* getelementptr (%"IO::Error", %"IO::Error"* null, i32 1) to i32), i32 4, i1 false), !dbg !2698
%3 = getelementptr inbounds %"IO::Error", %"IO::Error"* %1, i32 0, i32 0, !dbg !2698
store i32 49, i32* %3, !dbg !2698
store %"IO::Error"* %1, %"IO::Error"** %_, !dbg !2698
%4 = load %"IO::Error"*, %"IO::Error"** %_, !dbg !2698
call void @"*IO::Error@Exception#initialize<String>:Nil"(%"IO::Error"* %4, %String* %__arg0), !dbg !2698
%5 = load %"IO::Error"*, %"IO::Error"** %_, !dbg !2698
ret %"IO::Error"* %5, !dbg !2698
}
; Function Attrs: uwtable
define internal void @"*IO::Error@Exception#initialize<String>:Nil"(%"IO::Error"* %self, %String* %message) #0 !dbg !398 {
alloca:
%cause = alloca %Nil, !dbg !2699
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::Error", %"IO::Error"* %self, i32 0, i32 1, !dbg !2700
store %String* %message, %String** %0, !dbg !2700
%1 = load %Nil, %Nil* %cause, !dbg !2700
%2 = getelementptr inbounds %"IO::Error", %"IO::Error"* %self, i32 0, i32 2, !dbg !2701
store i32* null, i32** %2, !dbg !2701
ret void, !dbg !2701
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* %exception) #1 !dbg !399 {
alloca:
%__temp_39 = alloca %"(CallStack | Nil)", !dbg !2702
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !2702
%0 = alloca %CallStack, !dbg !2702
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"IO::Error", %"IO::Error"* %exception, i32 0, i32 3, !dbg !2702
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !2702
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_39, !dbg !2702
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !2702
%4 = load i32, i32* %3, !dbg !2702
%5 = icmp eq i32 %4, 0, !dbg !2702
%6 = xor i1 %5, true, !dbg !2702
%7 = and i1 true, %6, !dbg !2702
br i1 %7, label %then, label %else, !dbg !2702
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_39, i32 0, i32 1, !dbg !2702
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !2702
br label %exit, !dbg !2702
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !2702
store %CallStack %10, %CallStack* %0, !dbg !2702
%11 = load %CallStack, %CallStack* %0, !dbg !2702
%12 = call %CallStack @"*IO::Error@Exception#callstack=<CallStack>:CallStack"(%"IO::Error"* %exception, %CallStack %11), !dbg !2702
br label %exit, !dbg !2702
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !2702
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2702
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !2702
store i64 %15, i64* %16, !dbg !2702
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2702
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !2702
store i64 %18, i64* %19, !dbg !2702
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
%21 = ptrtoint %"IO::Error"* %exception to i64, !dbg !2702
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !2702
store i64 %21, i64* %22, !dbg !2702
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !2702
store i32 49, i32* %24, !dbg !2702
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2702
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !2702
unreachable, !dbg !2702
}
; Function Attrs: uwtable
define internal %CallStack @"*IO::Error@Exception#callstack=<CallStack>:CallStack"(%"IO::Error"* %self, %CallStack %callstack) #0 !dbg !400 {
alloca:
%callstack1 = alloca %CallStack, !dbg !2703
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !2703
%0 = getelementptr inbounds %"IO::Error", %"IO::Error"* %self, i32 0, i32 3, !dbg !2703
%1 = load %CallStack, %CallStack* %callstack1, !dbg !2703
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !2703
store i32 344, i32* %2, !dbg !2703
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !2703
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !2703
store %CallStack %1, %CallStack* %4, !dbg !2703
%5 = load %CallStack, %CallStack* %callstack1, !dbg !2703
ret %CallStack %5, !dbg !2703
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#+<Int64>:Slice(UInt8)"(%"Slice(UInt8)"* %self, i64 %offset) #0 !dbg !401 {
alloca:
%__temp_40 = alloca i1, !dbg !2704
%0 = alloca %"Slice(UInt8)", !dbg !2705
br label %entry
entry: ; preds = %alloca
%1 = icmp sle i64 0, %offset, !dbg !2706
store i1 %1, i1* %__temp_40, !dbg !2706
br i1 %1, label %then1, label %else2, !dbg !2706
then: ; preds = %exit
br label %exit3, !dbg !2706
else: ; preds = %exit
%2 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !2707
call void @"*raise<IndexError>:NoReturn"(%IndexError* %2), !dbg !2708
unreachable, !dbg !2708
then1: ; preds = %entry
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !2706
%4 = load i32, i32* %3, !dbg !2706
%5 = sext i32 %4 to i64, !dbg !2706
%6 = icmp sle i64 %offset, %5, !dbg !2706
br label %exit, !dbg !2706
else2: ; preds = %entry
%7 = load i1, i1* %__temp_40, !dbg !2706
br label %exit, !dbg !2706
exit: ; preds = %else2, %then1
%8 = phi i1 [ %6, %then1 ], [ %7, %else2 ], !dbg !2706
br i1 %8, label %then, label %else, !dbg !2706
exit3: ; preds = %then
%9 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !2708
%10 = load i8*, i8** %9, !dbg !2708
%11 = getelementptr inbounds i8, i8* %10, i64 %offset, !dbg !2708
%12 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !2708
%13 = load i32, i32* %12, !dbg !2708
%14 = sext i32 %13 to i64, !dbg !2708
%15 = sub i64 %14, %offset, !dbg !2708
%16 = trunc i64 %15 to i32, !dbg !2708
%17 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !2708
%18 = load i1, i1* %17, !dbg !2708
%19 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %11, i32 %16, i1 %18), !dbg !2705
store %"Slice(UInt8)" %19, %"Slice(UInt8)"* %0, !dbg !2705
%20 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2705
ret %"Slice(UInt8)" %20, !dbg !2705
}
; Function Attrs: uwtable
define internal i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %self) #0 !dbg !402 {
entry:
%0 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2709
%1 = load i32, i32* %0, !dbg !2709
%2 = icmp eq i32 %1, 0, !dbg !2709
ret i1 %2, !dbg !2709
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event:Nil"(i32* %self) #0 !dbg !403 {
alloca:
%timeout = alloca %"(Time::Span | Nil)", !dbg !2710
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2710
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 14, !dbg !2710
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %1, !dbg !2711
store %"(Time::Span | Nil)" %2, %"(Time::Span | Nil)"* %timeout, !dbg !2711
%3 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout, !dbg !2711
call void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(i32* %self, %"(Time::Span | Nil)" %3), !dbg !2710
ret void, !dbg !2710
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(i32* %self, %"(Time::Span | Nil)" %timeout) #0 !dbg !404 {
alloca:
%__temp_42 = alloca %"(Event::Event | Nil)", !dbg !2712
%event = alloca %"Event::Event", !dbg !2712
%timeout1 = alloca %"(Time::Span | Nil)", !dbg !2712
%0 = alloca %"Event::Event", !dbg !2713
br label %entry
entry: ; preds = %alloca
store %"(Time::Span | Nil)" %timeout, %"(Time::Span | Nil)"* %timeout1, !dbg !2712
%1 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2714
%2 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %1, i32 0, i32 6, !dbg !2714
%3 = load %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %2, !dbg !2714
store %"(Event::Event | Nil)" %3, %"(Event::Event | Nil)"* %__temp_42, !dbg !2714
%4 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %2, i32 0, i32 0, !dbg !2714
%5 = load i32, i32* %4, !dbg !2714
%6 = icmp eq i32 %5, 0, !dbg !2714
%7 = xor i1 %6, true, !dbg !2714
%8 = and i1 true, %7, !dbg !2714
br i1 %8, label %then, label %else, !dbg !2714
then: ; preds = %entry
%9 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %__temp_42, i32 0, i32 1, !dbg !2714
%10 = bitcast [2 x i64]* %9 to %"Event::Event"*, !dbg !2714
br label %exit, !dbg !2714
else: ; preds = %entry
%11 = call %"Event::Event" @"*Scheduler::create_fd_write_event<IO::FileDescriptor+>:Event::Event"(i32* %self), !dbg !2713
store %"Event::Event" %11, %"Event::Event"* %0, !dbg !2713
%12 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2714
%13 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %12, i32 0, i32 6, !dbg !2714
%14 = load %"Event::Event", %"Event::Event"* %0, !dbg !2714
%15 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %13, i32 0, i32 0, !dbg !2714
store i32 392, i32* %15, !dbg !2714
%16 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %13, i32 0, i32 1, !dbg !2714
%17 = bitcast [2 x i64]* %16 to %"Event::Event"*, !dbg !2714
store %"Event::Event" %14, %"Event::Event"* %17, !dbg !2714
br label %exit, !dbg !2714
exit: ; preds = %else, %then
%18 = phi %"Event::Event"* [ %10, %then ], [ %0, %else ], !dbg !2714
%19 = load %"Event::Event", %"Event::Event"* %18, !dbg !2715
store %"Event::Event" %19, %"Event::Event"* %event, !dbg !2715
%20 = getelementptr inbounds %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, i32 0, i32 0, !dbg !2715
%21 = load i32, i32* %20, !dbg !2715
%22 = icmp eq i32 0, %21, !dbg !2715
%23 = and i1 true, %22, !dbg !2715
br i1 %23, label %current_def, label %next_def, !dbg !2715
current_def: ; preds = %exit
%24 = call i32 @"*Event::Event#add<Nil>:Int32"(%"Event::Event"* %event, %Nil zeroinitializer), !dbg !2716
br label %exit2, !dbg !2716
next_def: ; preds = %exit
%25 = icmp eq i32 430, %21, !dbg !2716
%26 = and i1 true, %25, !dbg !2716
br i1 %26, label %current_def3, label %next_def4, !dbg !2716
exit2: ; preds = %current_def3, %current_def
%27 = phi i32 [ %24, %current_def ], [ %31, %current_def3 ], !dbg !2716
ret void, !dbg !2716
current_def3: ; preds = %next_def
%28 = getelementptr inbounds %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, i32 0, i32 1, !dbg !2716
%29 = bitcast [2 x i64]* %28 to %"Time::Span"*, !dbg !2716
%30 = load %"Time::Span", %"Time::Span"* %29, !dbg !2716
%31 = call i32 @"*Event::Event#add<Time::Span>:Int32"(%"Event::Event"* %event, %"Time::Span" %30), !dbg !2716
br label %exit2, !dbg !2716
next_def4: ; preds = %next_def
unreachable, !dbg !2716
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Scheduler::create_fd_write_event<IO::FileDescriptor+>:Event::Event"(i32* %io) #0 !dbg !405 {
alloca:
%edge_triggered = alloca i1, !dbg !2717
%flags = alloca i16, !dbg !2717
%event = alloca %"Event::Event", !dbg !2717
%0 = alloca %"->", !dbg !2718
%1 = alloca %"Event::Event", !dbg !2719
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %edge_triggered, !dbg !2720
store i16 4, i16* %flags, !dbg !2721
%2 = load i1, i1* %edge_triggered, !dbg !2718
br i1 %2, label %then, label %else, !dbg !2718
then: ; preds = %entry
%3 = load i16, i16* %flags, !dbg !2718
%4 = call i16 @"*LibEvent2::EventFlags@Enum#|<LibEvent2::EventFlags>:LibEvent2::EventFlags"(i16 16, i16 32), !dbg !2722
%5 = call i16 @"*LibEvent2::EventFlags@Enum#|<LibEvent2::EventFlags>:LibEvent2::EventFlags"(i16 %3, i16 %4), !dbg !2718
store i16 %5, i16* %flags, !dbg !2718
br label %exit, !dbg !2718
else: ; preds = %entry
br label %exit, !dbg !2718
exit: ; preds = %else, %then
%6 = call %"Event::Base"* @"~Scheduler::eb:read"(), !dbg !2718
%7 = bitcast i32* %io to %"IO::FileDescriptor"*, !dbg !2718
%8 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %7, i32 0, i32 4, !dbg !2718
%9 = load i32, i32* %8, !dbg !2718
%10 = load i16, i16* %flags, !dbg !2718
%11 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2718
store i8* bitcast (void (i32, i16, i8*)* @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:34" to i8*), i8** %11, !dbg !2718
%12 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2718
store i8* null, i8** %12, !dbg !2718
%13 = load %"->", %"->"* %0, !dbg !2718
%14 = call %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, IO::FileDescriptor+, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %6, i32 %9, i16 %10, i32* %io, %"->" %13), !dbg !2719
store %"Event::Event" %14, %"Event::Event"* %1, !dbg !2719
%15 = load %"Event::Event", %"Event::Event"* %1, !dbg !2723
store %"Event::Event" %15, %"Event::Event"* %event, !dbg !2723
%16 = load %"Event::Event", %"Event::Event"* %event, !dbg !2723
ret %"Event::Event" %16, !dbg !2723
}
; Function Attrs: uwtable
define internal i16 @"*LibEvent2::EventFlags@Enum#|<LibEvent2::EventFlags>:LibEvent2::EventFlags"(i16 %self, i16 %other) #0 !dbg !406 {
entry:
%0 = or i16 %self, %other, !dbg !2724
ret i16 %0, !dbg !2724
}
; Function Attrs: uwtable
define internal void @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:34"(i32 %s, i16 %flags, i8* %data) #0 !dbg !408 {
alloca:
%fd_io = alloca i32*, !dbg !2725
br label %entry
entry: ; preds = %alloca
%0 = bitcast i8* %data to i32*, !dbg !2725
store i32* %0, i32** %fd_io, !dbg !2726
%1 = call i1 @"*LibEvent2::EventFlags@Enum#includes?<LibEvent2::EventFlags>:Bool"(i16 %flags, i16 4), !dbg !2727
br i1 %1, label %then, label %else, !dbg !2727
then: ; preds = %entry
%2 = load i32*, i32** %fd_io, !dbg !2727
call void @"*IO::FileDescriptor+@IO::Syscall#resume_write:Nil"(i32* %2), !dbg !2728
br label %exit, !dbg !2728
else: ; preds = %entry
%3 = call i1 @"*LibEvent2::EventFlags@Enum#includes?<LibEvent2::EventFlags>:Bool"(i16 %flags, i16 1), !dbg !2729
br i1 %3, label %then1, label %else2, !dbg !2729
exit: ; preds = %exit3, %then
ret void, !dbg !2730
then1: ; preds = %else
%4 = load i32*, i32** %fd_io, !dbg !2729
call void @"*IO::FileDescriptor+@IO::Syscall#resume_write<Bool>:Nil"(i32* %4, i1 true), !dbg !2730
br label %exit3, !dbg !2730
else2: ; preds = %else
br label %exit3, !dbg !2730
exit3: ; preds = %else2, %then1
br label %exit, !dbg !2730
}
; Function Attrs: uwtable
define internal i1 @"*LibEvent2::EventFlags@Enum#includes?<LibEvent2::EventFlags>:Bool"(i16 %self, i16 %other) #0 !dbg !409 {
entry:
%0 = and i16 %self, %other, !dbg !2731
%1 = sext i16 %0 to i32, !dbg !2731
%2 = icmp ne i32 %1, 0, !dbg !2731
ret i1 %2, !dbg !2731
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::Syscall#resume_write:Nil"(i32* %self) #0 !dbg !410 {
alloca:
%timed_out = alloca i1, !dbg !2732
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %timed_out, !dbg !2733
%0 = load i1, i1* %timed_out, !dbg !2733
call void @"*IO::FileDescriptor+@IO::Syscall#resume_write<Bool>:Nil"(i32* %self, i1 %0), !dbg !2732
ret void, !dbg !2732
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::Syscall#resume_write<Bool>:Nil"(i32* %self, i1 %timed_out) #0 !dbg !412 {
alloca:
%writer = alloca %Fiber*, !dbg !2734
%__arg1 = alloca %"Deque(Fiber)"*, !dbg !2735
%__arg13 = alloca %"Deque(Fiber)"*, !dbg !2735
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2736
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 18, !dbg !2736
store i1 %timed_out, i1* %1, !dbg !2736
%2 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2737
%3 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %2, i32 0, i32 16, !dbg !2737
%4 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %3, !dbg !2737
%5 = icmp eq %"Deque(Fiber)"* %4, null, !dbg !2737
%6 = select i1 %5, i32 0, i32 106, !dbg !2737
%7 = icmp eq i32 0, %6, !dbg !2737
br i1 %7, label %current_def, label %next_def, !dbg !2737
then: ; preds = %exit
%8 = load %Fiber*, %Fiber** %writer, !dbg !2738
call void @"*Fiber#resume:Nil"(%Fiber* %8), !dbg !2739
br label %exit4, !dbg !2739
else: ; preds = %exit
br label %exit4, !dbg !2739
current_def: ; preds = %entry
br label %exit, !dbg !2735
next_def: ; preds = %entry
%9 = icmp eq i32 106, %6, !dbg !2735
br i1 %9, label %current_def1, label %next_def2, !dbg !2735
exit: ; preds = %current_def1, %current_def
%10 = phi %Fiber* [ null, %current_def ], [ %13, %current_def1 ], !dbg !2740
store %Fiber* %10, %Fiber** %writer, !dbg !2738
%11 = icmp ne %Fiber* %10, null, !dbg !2738
br i1 %11, label %then, label %else, !dbg !2738
current_def1: ; preds = %next_def
store %"Deque(Fiber)"* %4, %"Deque(Fiber)"** %__arg13, !dbg !2735
%12 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %__arg13, !dbg !2735
%13 = call %Fiber* @"*Deque(Fiber)@Deque(T)#shift?:(Fiber | Nil)"(%"Deque(Fiber)"* %12), !dbg !2740
br label %exit, !dbg !2740
next_def2: ; preds = %next_def
unreachable, !dbg !2740
exit4: ; preds = %else, %then
ret void, !dbg !2739
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, IO::FileDescriptor+, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %self, i32 %s, i16 %flags, i32* %data, %"->" %callback) #0 !dbg !413 {
alloca:
%event = alloca i8*, !dbg !2741
%0 = alloca %"Event::Event", !dbg !2742
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"Event::Base", %"Event::Base"* %self, i32 0, i32 0, !dbg !2741
%2 = load i8*, i8** %1, !dbg !2741
%3 = call i8* @"~check_proc_is_not_closure"(%"->" %callback), !dbg !2741
%4 = bitcast i8* %3 to %Nil (i32, i16, i8*)*, !dbg !2741
%5 = bitcast i32* %data to i8*, !dbg !2741
%6 = call i8* @event_new(i8* %2, i32 %s, i16 %flags, %Nil (i32, i16, i8*)* %4, i8* %5), !dbg !2743
store i8* %6, i8** %event, !dbg !2744
%7 = load i8*, i8** %event, !dbg !2744
%8 = call %"Event::Event" @"*Event::Event::new<Pointer(Void)>:Event::Event"(i8* %7), !dbg !2742
store %"Event::Event" %8, %"Event::Event"* %0, !dbg !2742
%9 = load %"Event::Event", %"Event::Event"* %0, !dbg !2742
ret %"Event::Event" %9, !dbg !2742
}
; Function Attrs: uwtable
define internal i32 @"*Event::Event#add<Nil>:Int32"(%"Event::Event"* %self, %Nil %timeout) #0 !dbg !414 {
alloca:
%timeout_copy = alloca %Nil, !dbg !2745
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 0, !dbg !2745
%1 = load i8*, i8** %0, !dbg !2745
%2 = call i32 @event_add(i8* %1, %"struct.LibC::Timeval"* null), !dbg !2746
ret i32 %2, !dbg !2746
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::Syscall#wait_writable:Nil"(i32* %self) #0 !dbg !415 {
alloca:
%timeout = alloca %"(Time::Span | Nil)", !dbg !2747
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2747
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 14, !dbg !2747
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %1, !dbg !2748
store %"(Time::Span | Nil)" %2, %"(Time::Span | Nil)"* %timeout, !dbg !2748
%3 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout, !dbg !2748
call void @"*IO::FileDescriptor+@IO::Syscall#wait_writable<(Time::Span | Nil)>:Nil"(i32* %self, %"(Time::Span | Nil)" %3), !dbg !2747
ret void, !dbg !2747
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::Syscall#wait_writable<(Time::Span | Nil)>:Nil"(i32* %self, %"(Time::Span | Nil)" %timeout) #0 !dbg !416 {
alloca:
%timeout1 = alloca %"(Time::Span | Nil)", !dbg !2749
%err = alloca %"IO::Timeout"*, !dbg !2750
%timeout2 = alloca %"(Time::Span | Nil)", !dbg !2750
%__temp_41 = alloca %"Deque(Fiber)"*, !dbg !2750
%writers = alloca %"Deque(Fiber)"*, !dbg !2750
%0 = alloca %"(Time::Span | Nil)", !dbg !2750
br label %entry
entry: ; preds = %alloca
store %"(Time::Span | Nil)" %timeout, %"(Time::Span | Nil)"* %timeout1, !dbg !2749
%1 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, !dbg !2749
store %"(Time::Span | Nil)" %1, %"(Time::Span | Nil)"* %0, !dbg !2750
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %0, !dbg !2750
store %"(Time::Span | Nil)" %2, %"(Time::Span | Nil)"* %timeout2, !dbg !2750
%3 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2751
%4 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %3, i32 0, i32 16, !dbg !2751
%5 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %4, !dbg !2751
store %"Deque(Fiber)"* %5, %"Deque(Fiber)"** %__temp_41, !dbg !2751
%6 = icmp ne %"Deque(Fiber)"* %5, null, !dbg !2751
br i1 %6, label %then, label %else, !dbg !2751
then: ; preds = %entry
%7 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %__temp_41, !dbg !2751
br label %exit, !dbg !2751
else: ; preds = %entry
%8 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 613), !dbg !2752
%9 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2751
%10 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %9, i32 0, i32 16, !dbg !2751
store %"Deque(Fiber)"* %8, %"Deque(Fiber)"** %10, !dbg !2751
br label %exit, !dbg !2751
exit: ; preds = %else, %then
%11 = phi %"Deque(Fiber)"* [ %7, %then ], [ %8, %else ], !dbg !2751
store %"Deque(Fiber)"* %11, %"Deque(Fiber)"** %writers, !dbg !2753
%12 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2753
%13 = call %Fiber* @"*Fiber::current:Fiber"(), !dbg !2754
%14 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#<<<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %12, %Fiber* %13), !dbg !2755
%15 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout2, !dbg !2755
call void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(i32* %self, %"(Time::Span | Nil)" %15), !dbg !2756
call void @"*Scheduler::reschedule:Nil"(), !dbg !2757
%16 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2758
%17 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %16, i32 0, i32 18, !dbg !2758
%18 = load i1, i1* %17, !dbg !2758
br i1 %18, label %then3, label %else4, !dbg !2758
then3: ; preds = %exit
%19 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2759
%20 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %19, i32 0, i32 18, !dbg !2759
store i1 false, i1* %20, !dbg !2759
%21 = call %"IO::Timeout"* @"*IO::Timeout@Exception::new<String>:IO::Timeout"(%String* bitcast ({ i32, i32, i32, [16 x i8] }* @"'Write timed out'" to %String*)), !dbg !2760
store %"IO::Timeout"* %21, %"IO::Timeout"** %err, !dbg !2760
%22 = load %"IO::Timeout"*, %"IO::Timeout"** %err, !dbg !2760
call void @"*raise<IO::Timeout>:NoReturn"(%"IO::Timeout"* %22), !dbg !2761
unreachable, !dbg !2761
else4: ; preds = %exit
ret void, !dbg !2761
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#<<<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %value) #0 !dbg !417 {
entry:
%0 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %value), !dbg !2762
ret %"Deque(Fiber)"* %0, !dbg !2762
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %value) #0 !dbg !418 {
alloca:
%index = alloca i32, !dbg !2763
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2764
%1 = load i32, i32* %0, !dbg !2764
%2 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2764
%3 = load i32, i32* %2, !dbg !2764
%4 = icmp sge i32 %1, %3, !dbg !2764
br i1 %4, label %then, label %else, !dbg !2764
then: ; preds = %entry
%5 = call %"(Int32 | Nil)" @"*Deque(Fiber)@Deque(T)#increase_capacity:(Int32 | Nil)"(%"Deque(Fiber)"* %self), !dbg !2764
br label %exit, !dbg !2764
else: ; preds = %entry
br label %exit, !dbg !2764
exit: ; preds = %else, %then
%6 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2764
%7 = load i32, i32* %6, !dbg !2764
%8 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2764
%9 = load i32, i32* %8, !dbg !2764
%10 = add i32 %7, %9, !dbg !2764
store i32 %10, i32* %index, !dbg !2765
%11 = load i32, i32* %index, !dbg !2766
%12 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2766
%13 = load i32, i32* %12, !dbg !2766
%14 = icmp sge i32 %11, %13, !dbg !2766
br i1 %14, label %then1, label %else2, !dbg !2766
then1: ; preds = %exit
%15 = load i32, i32* %index, !dbg !2766
%16 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2766
%17 = load i32, i32* %16, !dbg !2766
%18 = sub i32 %15, %17, !dbg !2766
store i32 %18, i32* %index, !dbg !2766
br label %exit3, !dbg !2766
else2: ; preds = %exit
br label %exit3, !dbg !2766
exit3: ; preds = %else2, %then1
%19 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2766
%20 = load %Fiber**, %Fiber*** %19, !dbg !2766
%21 = load i32, i32* %index, !dbg !2766
%22 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]=<Int32, Fiber>:Fiber"(%Fiber** %20, i32 %21, %Fiber* %value), !dbg !2767
%23 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2767
%24 = load i32, i32* %23, !dbg !2767
%25 = add i32 %24, 1, !dbg !2767
%26 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2768
store i32 %25, i32* %26, !dbg !2768
ret %"Deque(Fiber)"* %self, !dbg !2768
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*Deque(Fiber)@Deque(T)#increase_capacity:(Int32 | Nil)"(%"Deque(Fiber)"* %self) #0 !dbg !419 {
alloca:
%old_capacity = alloca i32, !dbg !2769
%finish = alloca i32, !dbg !2769
%to_move = alloca i32, !dbg !2769
%new_start = alloca i32, !dbg !2769
%0 = alloca %"(Int32 | Nil)", !dbg !2770
%1 = alloca %"(Int32 | Nil)", !dbg !2771
%2 = alloca %"(Int32 | Nil)", !dbg !2772
%3 = alloca %"(Int32 | Nil)", !dbg !2772
br label %entry
entry: ; preds = %alloca
%4 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2773
%5 = load %Fiber**, %Fiber*** %4, !dbg !2773
%6 = icmp ne %Fiber** %5, null, !dbg !2773
br i1 %6, label %then, label %else, !dbg !2773
then: ; preds = %entry
br label %exit, !dbg !2773
else: ; preds = %entry
%7 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2774
store i32 4, i32* %7, !dbg !2774
%8 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2774
%9 = load i32, i32* %8, !dbg !2774
%10 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)::malloc<Int32>:Pointer(Fiber)"(i32 762, i32 %9), !dbg !2775
%11 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2770
store %Fiber** %10, %Fiber*** %11, !dbg !2770
%12 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !2770
store i32 0, i32* %12, !dbg !2770
%13 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !2770
store [1 x i64] zeroinitializer, [1 x i64]* %13, !dbg !2770
%14 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !2770
ret %"(Int32 | Nil)" %14, !dbg !2770
exit: ; preds = %then
%15 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2770
%16 = load i32, i32* %15, !dbg !2770
store i32 %16, i32* %old_capacity, !dbg !2776
%17 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2776
%18 = load i32, i32* %17, !dbg !2776
%19 = mul i32 %18, 2, !dbg !2776
%20 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2777
store i32 %19, i32* %20, !dbg !2777
%21 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2777
%22 = load %Fiber**, %Fiber*** %21, !dbg !2777
%23 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2777
%24 = load i32, i32* %23, !dbg !2777
%25 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#realloc<Int32>:Pointer(Fiber)"(%Fiber** %22, i32 %24), !dbg !2778
%26 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2779
store %Fiber** %25, %Fiber*** %26, !dbg !2779
%27 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2779
%28 = load i32, i32* %27, !dbg !2779
%29 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2779
%30 = load i32, i32* %29, !dbg !2779
%31 = add i32 %28, %30, !dbg !2779
store i32 %31, i32* %finish, !dbg !2780
%32 = load i32, i32* %finish, !dbg !2781
%33 = load i32, i32* %old_capacity, !dbg !2781
%34 = icmp sgt i32 %32, %33, !dbg !2781
br i1 %34, label %then1, label %else2, !dbg !2781
then1: ; preds = %exit
%35 = load i32, i32* %finish, !dbg !2781
%36 = load i32, i32* %old_capacity, !dbg !2781
%37 = sub i32 %35, %36, !dbg !2781
store i32 %37, i32* %finish, !dbg !2782
%38 = load i32, i32* %old_capacity, !dbg !2783
%39 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2783
%40 = load i32, i32* %39, !dbg !2783
%41 = sub i32 %38, %40, !dbg !2783
%42 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2783
%43 = load i32, i32* %42, !dbg !2783
%44 = icmp sge i32 %41, %43, !dbg !2783
br i1 %44, label %then3, label %else4, !dbg !2783
else2: ; preds = %exit
%45 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %3, i32 0, i32 0, !dbg !2772
store i32 0, i32* %45, !dbg !2772
%46 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %3, i32 0, i32 1, !dbg !2772
store [1 x i64] zeroinitializer, [1 x i64]* %46, !dbg !2772
br label %exit6, !dbg !2772
then3: ; preds = %then1
%47 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2783
%48 = load %Fiber**, %Fiber*** %47, !dbg !2783
%49 = load i32, i32* %old_capacity, !dbg !2783
%50 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %48, i32 %49), !dbg !2784
%51 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2784
%52 = load %Fiber**, %Fiber*** %51, !dbg !2784
%53 = load i32, i32* %finish, !dbg !2784
%54 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_from<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %50, %Fiber** %52, i32 %53), !dbg !2785
%55 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2785
%56 = load %Fiber**, %Fiber*** %55, !dbg !2785
%57 = load i32, i32* %finish, !dbg !2785
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %56, i32 %57), !dbg !2771
%58 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !2771
store i32 0, i32* %58, !dbg !2771
%59 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !2771
store [1 x i64] zeroinitializer, [1 x i64]* %59, !dbg !2771
br label %exit5, !dbg !2771
else4: ; preds = %then1
%60 = load i32, i32* %old_capacity, !dbg !2771
%61 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2771
%62 = load i32, i32* %61, !dbg !2771
%63 = sub i32 %60, %62, !dbg !2771
store i32 %63, i32* %to_move, !dbg !2786
%64 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2786
%65 = load i32, i32* %64, !dbg !2786
%66 = load i32, i32* %to_move, !dbg !2786
%67 = sub i32 %65, %66, !dbg !2786
store i32 %67, i32* %new_start, !dbg !2787
%68 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2787
%69 = load %Fiber**, %Fiber*** %68, !dbg !2787
%70 = load i32, i32* %new_start, !dbg !2787
%71 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %69, i32 %70), !dbg !2788
%72 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2788
%73 = load %Fiber**, %Fiber*** %72, !dbg !2788
%74 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2788
%75 = load i32, i32* %74, !dbg !2788
%76 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %73, i32 %75), !dbg !2789
%77 = load i32, i32* %to_move, !dbg !2789
%78 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_from<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %71, %Fiber** %76, i32 %77), !dbg !2790
%79 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2790
%80 = load %Fiber**, %Fiber*** %79, !dbg !2790
%81 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2790
%82 = load i32, i32* %81, !dbg !2790
%83 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %80, i32 %82), !dbg !2791
%84 = load i32, i32* %to_move, !dbg !2791
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %83, i32 %84), !dbg !2792
%85 = load i32, i32* %new_start, !dbg !2792
%86 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2772
store i32 %85, i32* %86, !dbg !2772
%87 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 0, !dbg !2772
store i32 152, i32* %87, !dbg !2772
%88 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 1, !dbg !2772
%89 = bitcast [1 x i64]* %88 to i32*, !dbg !2772
store i32 %85, i32* %89, !dbg !2772
br label %exit5, !dbg !2772
exit5: ; preds = %else4, %then3
%90 = phi %"(Int32 | Nil)"* [ %1, %then3 ], [ %2, %else4 ], !dbg !2772
br label %exit6, !dbg !2772
exit6: ; preds = %else2, %exit5
%91 = phi %"(Int32 | Nil)"* [ %90, %exit5 ], [ %3, %else2 ], !dbg !2772
%92 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %91, !dbg !2772
ret %"(Int32 | Nil)" %92, !dbg !2772
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)::malloc<Int32>:Pointer(Fiber)"(i32 %self, i32 %size) #0 !dbg !420 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2793
br i1 %0, label %then, label %else, !dbg !2793
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !2794
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2795
unreachable, !dbg !2795
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2795
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !2796
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !2796
%5 = trunc i64 %3 to i32, !dbg !2796
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !2796
%6 = bitcast i8* %4 to %Fiber**, !dbg !2796
ret %Fiber** %6, !dbg !2795
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)#realloc<Int32>:Pointer(Fiber)"(%Fiber** %self, i32 %size) #0 !dbg !421 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !2797
br i1 %0, label %then, label %else, !dbg !2797
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !2798
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !2799
unreachable, !dbg !2799
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !2799
%3 = bitcast %Fiber** %self to i8*, !dbg !2799
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !2799
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !2799
%6 = bitcast i8* %5 to %Fiber**, !dbg !2799
ret %Fiber** %6, !dbg !2799
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_from<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %self, %Fiber** %source, i32 %count) #0 !dbg !422 {
entry:
%0 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_to<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %source, %Fiber** %self, i32 %count), !dbg !2800
ret %Fiber** %0, !dbg !2800
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_to<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %self, %Fiber** %target, i32 %count) #0 !dbg !423 {
entry:
%0 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_from_impl<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %target, %Fiber** %self, i32 %count), !dbg !2801
ret %Fiber** %0, !dbg !2801
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)#copy_from_impl<Pointer(Fiber), Int32>:Pointer(Fiber)"(%Fiber** %self, %Fiber** %source, i32 %count) #0 !dbg !424 {
alloca:
%count1 = alloca i32, !dbg !2802
br label %entry
entry: ; preds = %alloca
store i32 %count, i32* %count1, !dbg !2802
%0 = load i32, i32* %count1, !dbg !2803
%1 = icmp slt i32 %0, 0, !dbg !2803
br i1 %1, label %then, label %else, !dbg !2803
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*)), !dbg !2804
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !2803
unreachable, !dbg !2803
else: ; preds = %entry
%3 = call i1 @"*Pointer(Fiber)@Object::==<Pointer(Fiber):Class>:Bool"(i32 762, i32 762), !dbg !2805
br i1 %3, label %then2, label %else3, !dbg !2805
then2: ; preds = %else
%4 = bitcast %Fiber** %self to i8*, !dbg !2805
%5 = bitcast %Fiber** %source to i8*, !dbg !2805
%6 = load i32, i32* %count1, !dbg !2805
%7 = call i64 @"*Pointer(Fiber)@Pointer(T)#bytesize<Int32>:UInt64"(%Fiber** %self, i32 %6), !dbg !2806
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 %7, i32 0, i1 false), !dbg !2807
br label %exit, !dbg !2807
else3: ; preds = %else
br label %while, !dbg !2807
exit: ; preds = %exit4, %then2
ret %Fiber** %self, !dbg !2808
while: ; preds = %body, %else3
%8 = load i32, i32* %count1, !dbg !2809
%9 = sub i32 %8, 1, !dbg !2809
store i32 %9, i32* %count1, !dbg !2810
%10 = icmp sge i32 %9, 0, !dbg !2810
br i1 %10, label %body, label %exit4, !dbg !2810
body: ; preds = %while
%11 = load i32, i32* %count1, !dbg !2810
%12 = load i32, i32* %count1, !dbg !2810
%13 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %source, i32 %12), !dbg !2811
%14 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]=<Int32, Fiber>:Fiber"(%Fiber** %self, i32 %11, %Fiber* %13), !dbg !2808
br label %while, !dbg !2808
exit4: ; preds = %while
br label %exit, !dbg !2808
}
; Function Attrs: uwtable
define internal i1 @"*Pointer(Fiber)@Object::==<Pointer(Fiber):Class>:Bool"(i32 %self, i32 %other) #0 !dbg !425 {
entry:
ret i1 true, !dbg !2812
}
; Function Attrs: uwtable
define internal %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]=<Int32, Fiber>:Fiber"(%Fiber** %self, i32 %offset, %Fiber* %value) #0 !dbg !426 {
entry:
%0 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %self, i32 %offset), !dbg !2813
store %Fiber* %value, %Fiber** %0, !dbg !2813
ret %Fiber* %value, !dbg !2813
}
; Function Attrs: uwtable
define internal %"IO::Timeout"* @"*IO::Timeout@Exception::new<String>:IO::Timeout"(%String* %__arg0) #0 !dbg !427 {
alloca:
%_ = alloca %"IO::Timeout"*, !dbg !2814
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"IO::Timeout"* getelementptr (%"IO::Timeout", %"IO::Timeout"* null, i32 1) to i64)), !dbg !2814
%1 = bitcast i8* %0 to %"IO::Timeout"*, !dbg !2814
%2 = bitcast %"IO::Timeout"* %1 to i8*, !dbg !2814
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"IO::Timeout"* getelementptr (%"IO::Timeout", %"IO::Timeout"* null, i32 1) to i32), i32 4, i1 false), !dbg !2814
%3 = getelementptr inbounds %"IO::Timeout", %"IO::Timeout"* %1, i32 0, i32 0, !dbg !2814
store i32 47, i32* %3, !dbg !2814
store %"IO::Timeout"* %1, %"IO::Timeout"** %_, !dbg !2814
%4 = load %"IO::Timeout"*, %"IO::Timeout"** %_, !dbg !2814
call void @"*IO::Timeout@Exception#initialize<String>:Nil"(%"IO::Timeout"* %4, %String* %__arg0), !dbg !2814
%5 = load %"IO::Timeout"*, %"IO::Timeout"** %_, !dbg !2814
ret %"IO::Timeout"* %5, !dbg !2814
}
; Function Attrs: uwtable
define internal void @"*IO::Timeout@Exception#initialize<String>:Nil"(%"IO::Timeout"* %self, %String* %message) #0 !dbg !428 {
alloca:
%cause = alloca %Nil, !dbg !2815
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::Timeout", %"IO::Timeout"* %self, i32 0, i32 1, !dbg !2816
store %String* %message, %String** %0, !dbg !2816
%1 = load %Nil, %Nil* %cause, !dbg !2816
%2 = getelementptr inbounds %"IO::Timeout", %"IO::Timeout"* %self, i32 0, i32 2, !dbg !2817
store i32* null, i32** %2, !dbg !2817
ret void, !dbg !2817
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<IO::Timeout>:NoReturn"(%"IO::Timeout"* %exception) #1 !dbg !429 {
alloca:
%__temp_55 = alloca %"(CallStack | Nil)", !dbg !2818
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !2818
%0 = alloca %CallStack, !dbg !2818
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"IO::Timeout", %"IO::Timeout"* %exception, i32 0, i32 3, !dbg !2818
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !2818
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_55, !dbg !2818
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !2818
%4 = load i32, i32* %3, !dbg !2818
%5 = icmp eq i32 %4, 0, !dbg !2818
%6 = xor i1 %5, true, !dbg !2818
%7 = and i1 true, %6, !dbg !2818
br i1 %7, label %then, label %else, !dbg !2818
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_55, i32 0, i32 1, !dbg !2818
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !2818
br label %exit, !dbg !2818
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !2818
store %CallStack %10, %CallStack* %0, !dbg !2818
%11 = load %CallStack, %CallStack* %0, !dbg !2818
%12 = call %CallStack @"*IO::Timeout@Exception#callstack=<CallStack>:CallStack"(%"IO::Timeout"* %exception, %CallStack %11), !dbg !2818
br label %exit, !dbg !2818
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 694), !dbg !2818
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2818
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !2818
store i64 %15, i64* %16, !dbg !2818
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !2818
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !2818
store i64 %18, i64* %19, !dbg !2818
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
%21 = ptrtoint %"IO::Timeout"* %exception to i64, !dbg !2818
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !2818
store i64 %21, i64* %22, !dbg !2818
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !2818
store i32 47, i32* %24, !dbg !2818
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !2818
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !2818
unreachable, !dbg !2818
}
; Function Attrs: uwtable
define internal %CallStack @"*IO::Timeout@Exception#callstack=<CallStack>:CallStack"(%"IO::Timeout"* %self, %CallStack %callstack) #0 !dbg !430 {
alloca:
%callstack1 = alloca %CallStack, !dbg !2819
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !2819
%0 = getelementptr inbounds %"IO::Timeout", %"IO::Timeout"* %self, i32 0, i32 3, !dbg !2819
%1 = load %CallStack, %CallStack* %callstack1, !dbg !2819
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !2819
store i32 344, i32* %2, !dbg !2819
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !2819
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !2819
store %CallStack %1, %CallStack* %4, !dbg !2819
%5 = load %CallStack, %CallStack* %callstack1, !dbg !2819
ret %CallStack %5, !dbg !2819
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@IO::FileDescriptor#unbuffered_close:Nil"(i32* %self) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !431 {
entry:
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2820
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 19, !dbg !2820
%2 = load i1, i1* %1, !dbg !2820
br i1 %2, label %then, label %else, !dbg !2820
then: ; preds = %entry
ret void, !dbg !2820
else: ; preds = %entry
invoke void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#system_close:Nil"(i32* %self)
to label %invoke_out unwind label %rescue, !dbg !2821
rescue: ; preds = %else
%3 = landingpad %landing_pad
cleanup, !dbg !2821
%4 = extractvalue %landing_pad %3, 0, !dbg !2821
%5 = extractvalue %landing_pad %3, 1, !dbg !2821
%6 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2822
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %6, i32 0, i32 19, !dbg !2822
store i1 true, i1* %7, !dbg !2822
%8 = bitcast i8* %4 to %"struct.LibUnwind::Exception"*, !dbg !2822
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %8), !dbg !2821
unreachable, !dbg !2821
invoke_out: ; preds = %else
br label %exit, !dbg !2821
exit: ; preds = %invoke_out
%9 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2822
%10 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %9, i32 0, i32 19, !dbg !2822
store i1 true, i1* %10, !dbg !2822
ret void, !dbg !2822
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor+@Crystal::System::FileDescriptor#system_close:Nil"(i32* %self) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !432 {
alloca:
%__temp_218 = alloca i32, !dbg !2823
%__arg2 = alloca %"Event::Event", !dbg !2824
%__arg212 = alloca %"Event::Event", !dbg !2824
%__arg3 = alloca %"Event::Event", !dbg !2825
%__arg318 = alloca %"Event::Event", !dbg !2825
%__arg221 = alloca %"Event::Event", !dbg !2824
%__arg225 = alloca %"Event::Event", !dbg !2824
%__arg328 = alloca %"Event::Event", !dbg !2825
%__arg332 = alloca %"Event::Event", !dbg !2825
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2826
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 4, !dbg !2826
%2 = load i32, i32* %1, !dbg !2826
%3 = call i32 @close(i32 %2), !dbg !2827
%4 = icmp ne i32 %3, 0, !dbg !2827
br i1 %4, label %then, label %else, !dbg !2827
rescue: ; preds = %invoke_out, %else2
%5 = landingpad %landing_pad
cleanup, !dbg !2828
%6 = extractvalue %landing_pad %5, 0, !dbg !2828
%7 = extractvalue %landing_pad %5, 1, !dbg !2828
%8 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2828
%9 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %8, i32 0, i32 5, !dbg !2828
%10 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %9, i32 0, i32 0, !dbg !2828
%11 = load i32, i32* %10, !dbg !2828
%12 = icmp eq i32 392, %11, !dbg !2828
br i1 %12, label %current_def, label %next_def, !dbg !2828
then: ; preds = %entry
%13 = call i32 @"*Errno::value:Int32"(), !dbg !2829
store i32 %13, i32* %__temp_218, !dbg !2829
%14 = load i32, i32* %__temp_218, !dbg !2830
%15 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 4, i32 %14), !dbg !2830
br i1 %15, label %then3, label %else4, !dbg !2830
else: ; preds = %entry
br label %exit7, !dbg !2828
then1: ; preds = %exit
br label %exit5, !dbg !2831
else2: ; preds = %exit
%16 = invoke %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Error closing file'" to %String*))
to label %invoke_out unwind label %rescue, !dbg !2832
then3: ; preds = %then
%17 = load i32, i32* %__temp_218, !dbg !2830
%18 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 4, i32 %17), !dbg !2830
br label %exit, !dbg !2830
else4: ; preds = %then
%19 = load i32, i32* %__temp_218, !dbg !2830
%20 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 115, i32 %19), !dbg !2831
br label %exit, !dbg !2831
exit: ; preds = %else4, %then3
%21 = phi i1 [ %18, %then3 ], [ %20, %else4 ], !dbg !2831
br i1 %21, label %then1, label %else2, !dbg !2831
exit5: ; preds = %then1
br label %exit7, !dbg !2828
invoke_out: ; preds = %else2
invoke void @"*raise<Errno>:NoReturn"(%Errno* %16)
to label %invoke_out6 unwind label %rescue, !dbg !2828
invoke_out6: ; preds = %invoke_out
unreachable, !dbg !2828
exit7: ; preds = %else, %exit5
br label %exit8, !dbg !2828
exit8: ; preds = %exit7
%22 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2826
%23 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %22, i32 0, i32 5, !dbg !2826
%24 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %23, i32 0, i32 0, !dbg !2826
%25 = load i32, i32* %24, !dbg !2826
%26 = icmp eq i32 392, %25, !dbg !2826
br i1 %26, label %current_def19, label %next_def20, !dbg !2826
current_def: ; preds = %rescue
%27 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %9, i32 0, i32 1, !dbg !2828
%28 = bitcast [2 x i64]* %27 to %"Event::Event"*, !dbg !2828
%29 = load %"Event::Event", %"Event::Event"* %28, !dbg !2824
store %"Event::Event" %29, %"Event::Event"* %__arg2, !dbg !2824
%30 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg2), !dbg !2833
br label %exit9, !dbg !2833
next_def: ; preds = %rescue
%31 = icmp eq i32 0, %11, !dbg !2833
br i1 %31, label %current_def10, label %next_def11, !dbg !2833
exit9: ; preds = %current_def10, %current_def
%32 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2834
%33 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %32, i32 0, i32 5, !dbg !2834
%34 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %33, i32 0, i32 0, !dbg !2834
store i32 0, i32* %34, !dbg !2834
%35 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %33, i32 0, i32 1, !dbg !2834
store [2 x i64] zeroinitializer, [2 x i64]* %35, !dbg !2834
%36 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2834
%37 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %36, i32 0, i32 6, !dbg !2834
%38 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %37, i32 0, i32 0, !dbg !2834
%39 = load i32, i32* %38, !dbg !2834
%40 = icmp eq i32 392, %39, !dbg !2834
br i1 %40, label %current_def13, label %next_def14, !dbg !2834
current_def10: ; preds = %next_def
br label %exit9, !dbg !2824
next_def11: ; preds = %next_def
unreachable, !dbg !2824
current_def13: ; preds = %exit9
%41 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %37, i32 0, i32 1, !dbg !2834
%42 = bitcast [2 x i64]* %41 to %"Event::Event"*, !dbg !2834
%43 = load %"Event::Event", %"Event::Event"* %42, !dbg !2825
store %"Event::Event" %43, %"Event::Event"* %__arg3, !dbg !2825
%44 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg3), !dbg !2835
br label %exit15, !dbg !2835
next_def14: ; preds = %exit9
%45 = icmp eq i32 0, %39, !dbg !2835
br i1 %45, label %current_def16, label %next_def17, !dbg !2835
exit15: ; preds = %current_def16, %current_def13
%46 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2836
%47 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %46, i32 0, i32 6, !dbg !2836
%48 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %47, i32 0, i32 0, !dbg !2836
store i32 0, i32* %48, !dbg !2836
%49 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %47, i32 0, i32 1, !dbg !2836
store [2 x i64] zeroinitializer, [2 x i64]* %49, !dbg !2836
%50 = call %"Deque(Fiber)"* @"*IO::FileDescriptor+@IO::Syscall#reschedule_waiting:(Deque(Fiber) | Nil)"(i32* %self), !dbg !2837
%51 = bitcast i8* %6 to %"struct.LibUnwind::Exception"*, !dbg !2837
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %51), !dbg !2826
unreachable, !dbg !2826
current_def16: ; preds = %next_def14
br label %exit15, !dbg !2825
next_def17: ; preds = %next_def14
unreachable, !dbg !2825
current_def19: ; preds = %exit8
%52 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %23, i32 0, i32 1, !dbg !2826
%53 = bitcast [2 x i64]* %52 to %"Event::Event"*, !dbg !2826
%54 = load %"Event::Event", %"Event::Event"* %53, !dbg !2824
store %"Event::Event" %54, %"Event::Event"* %__arg221, !dbg !2824
%55 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg221), !dbg !2833
br label %exit22, !dbg !2833
next_def20: ; preds = %exit8
%56 = icmp eq i32 0, %25, !dbg !2833
br i1 %56, label %current_def23, label %next_def24, !dbg !2833
exit22: ; preds = %current_def23, %current_def19
%57 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2834
%58 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %57, i32 0, i32 5, !dbg !2834
%59 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %58, i32 0, i32 0, !dbg !2834
store i32 0, i32* %59, !dbg !2834
%60 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %58, i32 0, i32 1, !dbg !2834
store [2 x i64] zeroinitializer, [2 x i64]* %60, !dbg !2834
%61 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2834
%62 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %61, i32 0, i32 6, !dbg !2834
%63 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %62, i32 0, i32 0, !dbg !2834
%64 = load i32, i32* %63, !dbg !2834
%65 = icmp eq i32 392, %64, !dbg !2834
br i1 %65, label %current_def26, label %next_def27, !dbg !2834
current_def23: ; preds = %next_def20
br label %exit22, !dbg !2824
next_def24: ; preds = %next_def20
unreachable, !dbg !2824
current_def26: ; preds = %exit22
%66 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %62, i32 0, i32 1, !dbg !2834
%67 = bitcast [2 x i64]* %66 to %"Event::Event"*, !dbg !2834
%68 = load %"Event::Event", %"Event::Event"* %67, !dbg !2825
store %"Event::Event" %68, %"Event::Event"* %__arg328, !dbg !2825
%69 = call i1 @"*Event::Event#free:Bool"(%"Event::Event"* %__arg328), !dbg !2835
br label %exit29, !dbg !2835
next_def27: ; preds = %exit22
%70 = icmp eq i32 0, %64, !dbg !2835
br i1 %70, label %current_def30, label %next_def31, !dbg !2835
exit29: ; preds = %current_def30, %current_def26
%71 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2836
%72 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %71, i32 0, i32 6, !dbg !2836
%73 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %72, i32 0, i32 0, !dbg !2836
store i32 0, i32* %73, !dbg !2836
%74 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %72, i32 0, i32 1, !dbg !2836
store [2 x i64] zeroinitializer, [2 x i64]* %74, !dbg !2836
%75 = call %"Deque(Fiber)"* @"*IO::FileDescriptor+@IO::Syscall#reschedule_waiting:(Deque(Fiber) | Nil)"(i32* %self), !dbg !2837
ret void, !dbg !2837
current_def30: ; preds = %next_def27
br label %exit29, !dbg !2825
next_def31: ; preds = %next_def27
unreachable, !dbg !2825
}
declare i32 @close(i32)
; Function Attrs: uwtable
define internal i1 @"*Event::Event#free:Bool"(%"Event::Event"* %self) #0 !dbg !433 {
entry:
%0 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 1, !dbg !2838
%1 = load i1, i1* %0, !dbg !2838
br i1 %1, label %then, label %else, !dbg !2838
then: ; preds = %entry
br label %exit, !dbg !2838
else: ; preds = %entry
%2 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 0, !dbg !2838
%3 = load i8*, i8** %2, !dbg !2838
call void @event_free(i8* %3), !dbg !2838
br label %exit, !dbg !2838
exit: ; preds = %else, %then
%4 = getelementptr inbounds %"Event::Event", %"Event::Event"* %self, i32 0, i32 1, !dbg !2839
store i1 true, i1* %4, !dbg !2839
ret i1 true, !dbg !2839
}
declare void @event_free(i8*)
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*IO::FileDescriptor+@IO::Syscall#reschedule_waiting:(Deque(Fiber) | Nil)"(i32* %self) #0 !dbg !434 {
alloca:
%readers = alloca %"Deque(Fiber)"*, !dbg !2840
%writers = alloca %"Deque(Fiber)"*, !dbg !2840
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2841
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %0, i32 0, i32 15, !dbg !2841
%2 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %1, !dbg !2841
store %"Deque(Fiber)"* %2, %"Deque(Fiber)"** %readers, !dbg !2842
%3 = icmp ne %"Deque(Fiber)"* %2, null, !dbg !2842
br i1 %3, label %then, label %else, !dbg !2842
then: ; preds = %entry
%4 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %readers, !dbg !2842
%5 = call %"Deque(Fiber)"* @"*Scheduler::enqueue<Deque(Fiber)>:Deque(Fiber)"(%"Deque(Fiber)"* %4), !dbg !2843
%6 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %readers, !dbg !2843
%7 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#clear:Deque(Fiber)"(%"Deque(Fiber)"* %6), !dbg !2844
br label %exit, !dbg !2844
else: ; preds = %entry
br label %exit, !dbg !2844
exit: ; preds = %else, %then
%8 = bitcast i32* %self to %"IO::FileDescriptor"*, !dbg !2845
%9 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %8, i32 0, i32 16, !dbg !2845
%10 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %9, !dbg !2845
store %"Deque(Fiber)"* %10, %"Deque(Fiber)"** %writers, !dbg !2846
%11 = icmp ne %"Deque(Fiber)"* %10, null, !dbg !2846
br i1 %11, label %then1, label %else2, !dbg !2846
then1: ; preds = %exit
%12 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2846
%13 = call %"Deque(Fiber)"* @"*Scheduler::enqueue<Deque(Fiber)>:Deque(Fiber)"(%"Deque(Fiber)"* %12), !dbg !2847
%14 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2847
%15 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#clear:Deque(Fiber)"(%"Deque(Fiber)"* %14), !dbg !2848
br label %exit3, !dbg !2848
else2: ; preds = %exit
br label %exit3, !dbg !2848
exit3: ; preds = %else2, %then1
%16 = phi %"Deque(Fiber)"* [ %15, %then1 ], [ null, %else2 ], !dbg !2848
ret %"Deque(Fiber)"* %16, !dbg !2848
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Scheduler::enqueue<Deque(Fiber)>:Deque(Fiber)"(%"Deque(Fiber)"* %fibers) #0 !dbg !435 {
entry:
%0 = call %"Deque(Fiber)"** @"~Scheduler::runnables:read"(), !dbg !2849
%1 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %0, !dbg !2849
%2 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#concat<Deque(Fiber)>:Deque(Fiber)"(%"Deque(Fiber)"* %1, %"Deque(Fiber)"* %fibers), !dbg !2850
ret %"Deque(Fiber)"* %2, !dbg !2850
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#concat<Deque(Fiber)>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %"Deque(Fiber)"* %other) #0 !dbg !436 {
alloca:
%x = alloca %Fiber*, !dbg !2851
%r = alloca %"Range(Int32, Int32)", !dbg !2852
%a = alloca i32, !dbg !2852
%b = alloca i32, !dbg !2852
%0 = alloca %"Range(Int32, Int32)", !dbg !2853
%i = alloca i32, !dbg !2854
%current = alloca i32, !dbg !2854
%__temp_89 = alloca i1, !dbg !2854
%1 = alloca %"Range(Int32, Int32)", !dbg !2855
%i14 = alloca i32, !dbg !2854
%current15 = alloca i32, !dbg !2854
%__temp_8916 = alloca i1, !dbg !2854
%2 = alloca %"Range(Int32, Int32)", !dbg !2856
%i26 = alloca i32, !dbg !2854
%current27 = alloca i32, !dbg !2854
%__temp_8928 = alloca i1, !dbg !2854
br label %entry
entry: ; preds = %alloca
%3 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %other), !dbg !2857
br i1 %3, label %then, label %else, !dbg !2857
then: ; preds = %entry
br label %exit, !dbg !2857
else: ; preds = %entry
%4 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 1, !dbg !2857
%5 = load i32, i32* %4, !dbg !2857
store i32 %5, i32* %a, !dbg !2858
%6 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 1, !dbg !2858
%7 = load i32, i32* %6, !dbg !2858
%8 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 2, !dbg !2858
%9 = load i32, i32* %8, !dbg !2858
%10 = add i32 %7, %9, !dbg !2858
store i32 %10, i32* %b, !dbg !2859
%11 = load i32, i32* %b, !dbg !2860
%12 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 3, !dbg !2860
%13 = load i32, i32* %12, !dbg !2860
%14 = icmp sgt i32 %11, %13, !dbg !2860
br i1 %14, label %then1, label %else2, !dbg !2860
exit: ; preds = %exit13, %then
ret %"Deque(Fiber)"* %self, !dbg !2861
then1: ; preds = %else
%15 = load i32, i32* %b, !dbg !2860
%16 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 3, !dbg !2860
%17 = load i32, i32* %16, !dbg !2860
%18 = sub i32 %15, %17, !dbg !2860
store i32 %18, i32* %b, !dbg !2860
br label %exit3, !dbg !2860
else2: ; preds = %else
br label %exit3, !dbg !2860
exit3: ; preds = %else2, %then1
%19 = load i32, i32* %a, !dbg !2862
%20 = load i32, i32* %b, !dbg !2862
%21 = icmp slt i32 %19, %20, !dbg !2862
br i1 %21, label %then4, label %else5, !dbg !2862
then4: ; preds = %exit3
%22 = load i32, i32* %a, !dbg !2862
%23 = load i32, i32* %b, !dbg !2862
%24 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 %22, i32 %23, i1 true), !dbg !2853
store %"Range(Int32, Int32)" %24, %"Range(Int32, Int32)"* %0, !dbg !2853
%25 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %0, !dbg !2853
store %"Range(Int32, Int32)" %25, %"Range(Int32, Int32)"* %r, !dbg !2853
%26 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2854
%27 = load i32, i32* %26, !dbg !2854
store i32 %27, i32* %current, !dbg !2863
br label %while, !dbg !2863
else5: ; preds = %exit3
%28 = load i32, i32* %a, !dbg !2861
%29 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 3, !dbg !2861
%30 = load i32, i32* %29, !dbg !2861
%31 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 %28, i32 %30, i1 true), !dbg !2855
store %"Range(Int32, Int32)" %31, %"Range(Int32, Int32)"* %1, !dbg !2855
%32 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %1, !dbg !2855
store %"Range(Int32, Int32)" %32, %"Range(Int32, Int32)"* %r, !dbg !2855
%33 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2854
%34 = load i32, i32* %33, !dbg !2854
store i32 %34, i32* %current15, !dbg !2863
br label %while17, !dbg !2863
while: ; preds = %body, %then4
%35 = load i32, i32* %current, !dbg !2864
%36 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2864
%37 = load i32, i32* %36, !dbg !2864
%38 = icmp slt i32 %35, %37, !dbg !2864
br i1 %38, label %body, label %exit6, !dbg !2864
body: ; preds = %while
%39 = load i32, i32* %current, !dbg !2864
store i32 %39, i32* %i, !dbg !2864
%40 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2864
%41 = load %Fiber**, %Fiber*** %40, !dbg !2864
%42 = load i32, i32* %i, !dbg !2864
%43 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %41, i32 %42), !dbg !2865
store %Fiber* %43, %Fiber** %x, !dbg !2865
%44 = load %Fiber*, %Fiber** %x, !dbg !2865
%45 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %44), !dbg !2861
%46 = load i32, i32* %current, !dbg !2861
%47 = call i32 @"*Int32@Int#succ:Int32"(i32 %46), !dbg !2866
store i32 %47, i32* %current, !dbg !2867
br label %while, !dbg !2867
exit6: ; preds = %while
%48 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 2, !dbg !2868
%49 = load i1, i1* %48, !dbg !2868
%50 = xor i1 %49, true, !dbg !2868
store i1 %50, i1* %__temp_89, !dbg !2868
br i1 %50, label %then9, label %else10, !dbg !2868
then7: ; preds = %exit11
%51 = load i32, i32* %current, !dbg !2868
store i32 %51, i32* %i, !dbg !2868
%52 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2868
%53 = load %Fiber**, %Fiber*** %52, !dbg !2868
%54 = load i32, i32* %i, !dbg !2868
%55 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %53, i32 %54), !dbg !2865
store %Fiber* %55, %Fiber** %x, !dbg !2865
%56 = load %Fiber*, %Fiber** %x, !dbg !2865
%57 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %56), !dbg !2861
br label %exit12, !dbg !2861
else8: ; preds = %exit11
br label %exit12, !dbg !2861
then9: ; preds = %exit6
%58 = load i32, i32* %current, !dbg !2868
%59 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2868
%60 = load i32, i32* %59, !dbg !2868
%61 = icmp eq i32 %58, %60, !dbg !2868
br label %exit11, !dbg !2868
else10: ; preds = %exit6
%62 = load i1, i1* %__temp_89, !dbg !2868
br label %exit11, !dbg !2868
exit11: ; preds = %else10, %then9
%63 = phi i1 [ %61, %then9 ], [ %62, %else10 ], !dbg !2868
br i1 %63, label %then7, label %else8, !dbg !2868
exit12: ; preds = %else8, %then7
%64 = phi %"Deque(Fiber)"* [ %57, %then7 ], [ null, %else8 ], !dbg !2861
br label %exit13, !dbg !2861
exit13: ; preds = %exit37, %exit12
br label %exit, !dbg !2861
while17: ; preds = %body18, %else5
%65 = load i32, i32* %current15, !dbg !2864
%66 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2864
%67 = load i32, i32* %66, !dbg !2864
%68 = icmp slt i32 %65, %67, !dbg !2864
br i1 %68, label %body18, label %exit19, !dbg !2864
body18: ; preds = %while17
%69 = load i32, i32* %current15, !dbg !2864
store i32 %69, i32* %i14, !dbg !2864
%70 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2864
%71 = load %Fiber**, %Fiber*** %70, !dbg !2864
%72 = load i32, i32* %i14, !dbg !2864
%73 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %71, i32 %72), !dbg !2865
store %Fiber* %73, %Fiber** %x, !dbg !2865
%74 = load %Fiber*, %Fiber** %x, !dbg !2865
%75 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %74), !dbg !2861
%76 = load i32, i32* %current15, !dbg !2861
%77 = call i32 @"*Int32@Int#succ:Int32"(i32 %76), !dbg !2866
store i32 %77, i32* %current15, !dbg !2867
br label %while17, !dbg !2867
exit19: ; preds = %while17
%78 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 2, !dbg !2868
%79 = load i1, i1* %78, !dbg !2868
%80 = xor i1 %79, true, !dbg !2868
store i1 %80, i1* %__temp_8916, !dbg !2868
br i1 %80, label %then22, label %else23, !dbg !2868
then20: ; preds = %exit24
%81 = load i32, i32* %current15, !dbg !2868
store i32 %81, i32* %i14, !dbg !2868
%82 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2868
%83 = load %Fiber**, %Fiber*** %82, !dbg !2868
%84 = load i32, i32* %i14, !dbg !2868
%85 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %83, i32 %84), !dbg !2865
store %Fiber* %85, %Fiber** %x, !dbg !2865
%86 = load %Fiber*, %Fiber** %x, !dbg !2865
%87 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %86), !dbg !2861
br label %exit25, !dbg !2861
else21: ; preds = %exit24
br label %exit25, !dbg !2861
then22: ; preds = %exit19
%88 = load i32, i32* %current15, !dbg !2868
%89 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2868
%90 = load i32, i32* %89, !dbg !2868
%91 = icmp eq i32 %88, %90, !dbg !2868
br label %exit24, !dbg !2868
else23: ; preds = %exit19
%92 = load i1, i1* %__temp_8916, !dbg !2868
br label %exit24, !dbg !2868
exit24: ; preds = %else23, %then22
%93 = phi i1 [ %91, %then22 ], [ %92, %else23 ], !dbg !2868
br i1 %93, label %then20, label %else21, !dbg !2868
exit25: ; preds = %else21, %then20
%94 = phi %"Deque(Fiber)"* [ %87, %then20 ], [ null, %else21 ], !dbg !2861
%95 = load i32, i32* %b, !dbg !2861
%96 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 0, i32 %95, i1 true), !dbg !2856
store %"Range(Int32, Int32)" %96, %"Range(Int32, Int32)"* %2, !dbg !2856
%97 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %2, !dbg !2856
store %"Range(Int32, Int32)" %97, %"Range(Int32, Int32)"* %r, !dbg !2856
%98 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2854
%99 = load i32, i32* %98, !dbg !2854
store i32 %99, i32* %current27, !dbg !2863
br label %while29, !dbg !2863
while29: ; preds = %body30, %exit25
%100 = load i32, i32* %current27, !dbg !2864
%101 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2864
%102 = load i32, i32* %101, !dbg !2864
%103 = icmp slt i32 %100, %102, !dbg !2864
br i1 %103, label %body30, label %exit31, !dbg !2864
body30: ; preds = %while29
%104 = load i32, i32* %current27, !dbg !2864
store i32 %104, i32* %i26, !dbg !2864
%105 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2864
%106 = load %Fiber**, %Fiber*** %105, !dbg !2864
%107 = load i32, i32* %i26, !dbg !2864
%108 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %106, i32 %107), !dbg !2865
store %Fiber* %108, %Fiber** %x, !dbg !2865
%109 = load %Fiber*, %Fiber** %x, !dbg !2865
%110 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %109), !dbg !2861
%111 = load i32, i32* %current27, !dbg !2861
%112 = call i32 @"*Int32@Int#succ:Int32"(i32 %111), !dbg !2866
store i32 %112, i32* %current27, !dbg !2867
br label %while29, !dbg !2867
exit31: ; preds = %while29
%113 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 2, !dbg !2868
%114 = load i1, i1* %113, !dbg !2868
%115 = xor i1 %114, true, !dbg !2868
store i1 %115, i1* %__temp_8928, !dbg !2868
br i1 %115, label %then34, label %else35, !dbg !2868
then32: ; preds = %exit36
%116 = load i32, i32* %current27, !dbg !2868
store i32 %116, i32* %i26, !dbg !2868
%117 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %other, i32 0, i32 4, !dbg !2868
%118 = load %Fiber**, %Fiber*** %117, !dbg !2868
%119 = load i32, i32* %i26, !dbg !2868
%120 = call %Fiber* @"*Pointer(Fiber)@Pointer(T)#[]<Int32>:Fiber"(%Fiber** %118, i32 %119), !dbg !2865
store %Fiber* %120, %Fiber** %x, !dbg !2865
%121 = load %Fiber*, %Fiber** %x, !dbg !2865
%122 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %self, %Fiber* %121), !dbg !2861
br label %exit37, !dbg !2861
else33: ; preds = %exit36
br label %exit37, !dbg !2861
then34: ; preds = %exit31
%123 = load i32, i32* %current27, !dbg !2868
%124 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2868
%125 = load i32, i32* %124, !dbg !2868
%126 = icmp eq i32 %123, %125, !dbg !2868
br label %exit36, !dbg !2868
else35: ; preds = %exit31
%127 = load i1, i1* %__temp_8928, !dbg !2868
br label %exit36, !dbg !2868
exit36: ; preds = %else35, %then34
%128 = phi i1 [ %126, %then34 ], [ %127, %else35 ], !dbg !2868
br i1 %128, label %then32, label %else33, !dbg !2868
exit37: ; preds = %else33, %then32
%129 = phi %"Deque(Fiber)"* [ %122, %then32 ], [ null, %else33 ], !dbg !2861
br label %exit13, !dbg !2861
}
; Function Attrs: uwtable
define internal %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 %begin, i32 %end, i1 %exclusive) #0 !dbg !437 {
alloca:
%_ = alloca %"Range(Int32, Int32)", !dbg !2869
%0 = alloca %"Range(Int32, Int32)", !dbg !2869
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Range(Int32, Int32)"* %0 to i8*, !dbg !2869
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Range(Int32, Int32)"* getelementptr (%"Range(Int32, Int32)", %"Range(Int32, Int32)"* null, i32 1) to i32), i32 4, i1 false), !dbg !2869
%2 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %0, !dbg !2869
store %"Range(Int32, Int32)" %2, %"Range(Int32, Int32)"* %_, !dbg !2869
%3 = call i1 @"*Range(Int32, Int32)@Range(B, E)#initialize<Int32, Int32, Bool>:Bool"(%"Range(Int32, Int32)"* %_, i32 %begin, i32 %end, i1 %exclusive), !dbg !2869
%4 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %_, !dbg !2869
ret %"Range(Int32, Int32)" %4, !dbg !2869
}
; Function Attrs: uwtable
define internal i1 @"*Range(Int32, Int32)@Range(B, E)#initialize<Int32, Int32, Bool>:Bool"(%"Range(Int32, Int32)"* %self, i32 %begin, i32 %end, i1 %exclusive) #0 !dbg !439 {
entry:
%0 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %self, i32 0, i32 0, !dbg !2870
store i32 %begin, i32* %0, !dbg !2870
%1 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %self, i32 0, i32 1, !dbg !2871
store i32 %end, i32* %1, !dbg !2871
%2 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %self, i32 0, i32 2, !dbg !2872
store i1 %exclusive, i1* %2, !dbg !2872
ret i1 %exclusive, !dbg !2872
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#succ:Int32"(i32 %self) #0 !dbg !440 {
entry:
%0 = add i32 %self, 1, !dbg !2873
ret i32 %0, !dbg !2873
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#clear:Deque(Fiber)"(%"Deque(Fiber)"* %self) #0 !dbg !441 {
alloca:
%r = alloca %"Range(Int32, Int32)", !dbg !2874
%a = alloca i32, !dbg !2874
%b = alloca i32, !dbg !2874
%0 = alloca %"Range(Int32, Int32)", !dbg !2875
%1 = alloca %"Range(Int32, Int32)", !dbg !2876
%2 = alloca %"Range(Int32, Int32)", !dbg !2877
br label %entry
entry: ; preds = %alloca
%3 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %self), !dbg !2878
br i1 %3, label %then, label %else, !dbg !2878
then: ; preds = %entry
br label %exit, !dbg !2878
else: ; preds = %entry
%4 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2878
%5 = load i32, i32* %4, !dbg !2878
store i32 %5, i32* %a, !dbg !2879
%6 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2879
%7 = load i32, i32* %6, !dbg !2879
%8 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2879
%9 = load i32, i32* %8, !dbg !2879
%10 = add i32 %7, %9, !dbg !2879
store i32 %10, i32* %b, !dbg !2880
%11 = load i32, i32* %b, !dbg !2881
%12 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2881
%13 = load i32, i32* %12, !dbg !2881
%14 = icmp sgt i32 %11, %13, !dbg !2881
br i1 %14, label %then1, label %else2, !dbg !2881
exit: ; preds = %exit6, %then
%15 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !2882
store i32 0, i32* %15, !dbg !2882
%16 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 1, !dbg !2883
store i32 0, i32* %16, !dbg !2883
ret %"Deque(Fiber)"* %self, !dbg !2883
then1: ; preds = %else
%17 = load i32, i32* %b, !dbg !2881
%18 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2881
%19 = load i32, i32* %18, !dbg !2881
%20 = sub i32 %17, %19, !dbg !2881
store i32 %20, i32* %b, !dbg !2881
br label %exit3, !dbg !2881
else2: ; preds = %else
br label %exit3, !dbg !2881
exit3: ; preds = %else2, %then1
%21 = load i32, i32* %a, !dbg !2884
%22 = load i32, i32* %b, !dbg !2884
%23 = icmp slt i32 %21, %22, !dbg !2884
br i1 %23, label %then4, label %else5, !dbg !2884
then4: ; preds = %exit3
%24 = load i32, i32* %a, !dbg !2884
%25 = load i32, i32* %b, !dbg !2884
%26 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 %24, i32 %25, i1 true), !dbg !2875
store %"Range(Int32, Int32)" %26, %"Range(Int32, Int32)"* %0, !dbg !2875
%27 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %0, !dbg !2875
store %"Range(Int32, Int32)" %27, %"Range(Int32, Int32)"* %r, !dbg !2875
%28 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2875
%29 = load %Fiber**, %Fiber*** %28, !dbg !2875
%30 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2875
%31 = load i32, i32* %30, !dbg !2875
%32 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %29, i32 %31), !dbg !2885
%33 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2885
%34 = load i32, i32* %33, !dbg !2885
%35 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2885
%36 = load i32, i32* %35, !dbg !2885
%37 = sub i32 %34, %36, !dbg !2885
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %32, i32 %37), !dbg !2886
br label %exit6, !dbg !2886
else5: ; preds = %exit3
%38 = load i32, i32* %a, !dbg !2886
%39 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !2886
%40 = load i32, i32* %39, !dbg !2886
%41 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 %38, i32 %40, i1 true), !dbg !2876
store %"Range(Int32, Int32)" %41, %"Range(Int32, Int32)"* %1, !dbg !2876
%42 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %1, !dbg !2876
store %"Range(Int32, Int32)" %42, %"Range(Int32, Int32)"* %r, !dbg !2876
%43 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2876
%44 = load %Fiber**, %Fiber*** %43, !dbg !2876
%45 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2876
%46 = load i32, i32* %45, !dbg !2876
%47 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %44, i32 %46), !dbg !2885
%48 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2885
%49 = load i32, i32* %48, !dbg !2885
%50 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2885
%51 = load i32, i32* %50, !dbg !2885
%52 = sub i32 %49, %51, !dbg !2885
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %47, i32 %52), !dbg !2886
%53 = load i32, i32* %b, !dbg !2886
%54 = call %"Range(Int32, Int32)" @"*Range(B, E)::new<Int32, Int32, Bool>:Range(Int32, Int32)"(i32 0, i32 %53, i1 true), !dbg !2877
store %"Range(Int32, Int32)" %54, %"Range(Int32, Int32)"* %2, !dbg !2877
%55 = load %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %2, !dbg !2877
store %"Range(Int32, Int32)" %55, %"Range(Int32, Int32)"* %r, !dbg !2877
%56 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !2877
%57 = load %Fiber**, %Fiber*** %56, !dbg !2877
%58 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2877
%59 = load i32, i32* %58, !dbg !2877
%60 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)#+<Int32>:Pointer(Fiber)"(%Fiber** %57, i32 %59), !dbg !2885
%61 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 1, !dbg !2885
%62 = load i32, i32* %61, !dbg !2885
%63 = getelementptr inbounds %"Range(Int32, Int32)", %"Range(Int32, Int32)"* %r, i32 0, i32 0, !dbg !2885
%64 = load i32, i32* %63, !dbg !2885
%65 = sub i32 %62, %64, !dbg !2885
call void @"*Pointer(Fiber)@Pointer(T)#clear<Int32>:Nil"(%Fiber** %60, i32 %65), !dbg !2886
br label %exit6, !dbg !2886
exit6: ; preds = %else5, %then4
br label %exit, !dbg !2886
}
; Function Attrs: uwtable
define internal i1 @"*IO::FileDescriptor@IO::Buffered#flush_on_newline=<Bool>:Bool"(%"IO::FileDescriptor"* %self, i1 %flush_on_newline) #0 !dbg !442 {
entry:
%0 = xor i1 %flush_on_newline, true, !dbg !2887
%1 = xor i1 %0, true, !dbg !2887
%2 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 10, !dbg !2888
store i1 %1, i1* %2, !dbg !2888
ret i1 %1, !dbg !2888
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#puts<String>:Nil"(%"IO::FileDescriptor"* %self, %String* %string) #0 !dbg !443 {
entry:
%0 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, %String* %string), !dbg !2889
%1 = call i1 @"*String#ends_with?<Char>:Bool"(%String* %string, i32 10), !dbg !2890
br i1 %1, label %then, label %else, !dbg !2890
then: ; preds = %entry
br label %exit, !dbg !2890
else: ; preds = %entry
call void @"*IO::FileDescriptor@IO#puts:Nil"(%"IO::FileDescriptor"* %self), !dbg !2891
br label %exit, !dbg !2891
exit: ; preds = %else, %then
ret void, !dbg !2891
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, %String* %obj) #0 !dbg !444 {
entry:
call void @"*String#to_s<IO::FileDescriptor>:Nil"(%String* %obj, %"IO::FileDescriptor"* %self), !dbg !2892
ret %"IO::FileDescriptor"* %self, !dbg !2892
}
; Function Attrs: uwtable
define internal void @"*String#to_s<IO::FileDescriptor>:Nil"(%String* %self, %"IO::FileDescriptor"* %io) #0 !dbg !445 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !2893
br label %entry
entry: ; preds = %alloca
%1 = call %"Slice(UInt8)" @"*String#to_slice:Slice(UInt8)"(%String* %self), !dbg !2893
store %"Slice(UInt8)" %1, %"Slice(UInt8)"* %0, !dbg !2893
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2893
call void @"*IO::FileDescriptor@IO#write_utf8<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %io, %"Slice(UInt8)" %2), !dbg !2894
ret void, !dbg !2894
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#write_utf8<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %slice) #0 !dbg !446 {
alloca:
%encoder = alloca %"IO::Encoder"*, !dbg !2895
%slice1 = alloca %"Slice(UInt8)", !dbg !2895
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !2895
%0 = call %"IO::Encoder"* @"*IO::FileDescriptor@IO#encoder:(IO::Encoder | Nil)"(%"IO::FileDescriptor"* %self), !dbg !2896
store %"IO::Encoder"* %0, %"IO::Encoder"** %encoder, !dbg !2897
%1 = icmp ne %"IO::Encoder"* %0, null, !dbg !2897
br i1 %1, label %then, label %else, !dbg !2897
then: ; preds = %entry
%2 = load %"IO::Encoder"*, %"IO::Encoder"** %encoder, !dbg !2897
%3 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !2897
call void @"*IO::Encoder#write<IO::FileDescriptor, Slice(UInt8)>:Nil"(%"IO::Encoder"* %2, %"IO::FileDescriptor"* %self, %"Slice(UInt8)" %3), !dbg !2898
br label %exit, !dbg !2898
else: ; preds = %entry
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !2898
call void @"*IO::FileDescriptor@IO::Buffered#write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %4), !dbg !2899
br label %exit, !dbg !2899
exit: ; preds = %else, %then
ret void, !dbg !2899
}
; Function Attrs: uwtable
define internal %"IO::Encoder"* @"*IO::FileDescriptor@IO#encoder:(IO::Encoder | Nil)"(%"IO::FileDescriptor"* %self) #0 !dbg !447 {
alloca:
%encoding = alloca %"(IO::EncodingOptions | Nil)", !dbg !2900
%__temp_51 = alloca %"IO::Encoder"*, !dbg !2900
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 1, !dbg !2901
%1 = load %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, !dbg !2902
store %"(IO::EncodingOptions | Nil)" %1, %"(IO::EncodingOptions | Nil)"* %encoding, !dbg !2902
%2 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, i32 0, i32 0, !dbg !2902
%3 = load i32, i32* %2, !dbg !2902
%4 = icmp eq i32 %3, 0, !dbg !2902
%5 = xor i1 %4, true, !dbg !2902
%6 = and i1 true, %5, !dbg !2902
br i1 %6, label %then, label %else, !dbg !2902
then: ; preds = %entry
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 2, !dbg !2903
%8 = load %"IO::Encoder"*, %"IO::Encoder"** %7, !dbg !2903
store %"IO::Encoder"* %8, %"IO::Encoder"** %__temp_51, !dbg !2903
%9 = icmp ne %"IO::Encoder"* %8, null, !dbg !2903
br i1 %9, label %then1, label %else2, !dbg !2903
else: ; preds = %entry
br label %exit3, !dbg !2903
then1: ; preds = %then
%10 = load %"IO::Encoder"*, %"IO::Encoder"** %__temp_51, !dbg !2903
br label %exit, !dbg !2903
else2: ; preds = %then
%11 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %encoding, i32 0, i32 1, !dbg !2903
%12 = bitcast [3 x i64]* %11 to %"IO::EncodingOptions"*, !dbg !2903
%13 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %12, !dbg !2903
%14 = call %"IO::Encoder"* @"*IO::Encoder::new<IO::EncodingOptions>:IO::Encoder"(%"IO::EncodingOptions" %13), !dbg !2904
%15 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 2, !dbg !2903
store %"IO::Encoder"* %14, %"IO::Encoder"** %15, !dbg !2903
br label %exit, !dbg !2903
exit: ; preds = %else2, %then1
%16 = phi %"IO::Encoder"* [ %10, %then1 ], [ %14, %else2 ], !dbg !2903
br label %exit3, !dbg !2903
exit3: ; preds = %else, %exit
%17 = phi %"IO::Encoder"* [ %16, %exit ], [ null, %else ], !dbg !2903
ret %"IO::Encoder"* %17, !dbg !2903
}
; Function Attrs: uwtable
define internal void @"*IO::Encoder#write<IO::FileDescriptor, Slice(UInt8)>:Nil"(%"IO::Encoder"* %self, %"IO::FileDescriptor"* %io, %"Slice(UInt8)" %slice) #0 !dbg !448 {
alloca:
%inbuf_ptr = alloca i8*, !dbg !2905
%inbytesleft = alloca i64, !dbg !2905
%outbuf = alloca [1024 x i8], !dbg !2905
%outbuf_ptr = alloca i8*, !dbg !2905
%outbytesleft = alloca i64, !dbg !2905
%err = alloca i64, !dbg !2905
%slice1 = alloca %"Slice(UInt8)", !dbg !2905
%0 = alloca %"Slice(UInt8)", !dbg !2906
%1 = alloca %"Slice(UInt8)", !dbg !2906
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !2905
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 2, !dbg !2905
%3 = load i8*, i8** %2, !dbg !2905
store i8* %3, i8** %inbuf_ptr, !dbg !2907
%4 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !2907
%5 = load i32, i32* %4, !dbg !2907
%6 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %5), !dbg !2908
store i64 %6, i64* %inbytesleft, !dbg !2909
br label %while, !dbg !2909
while: ; preds = %exit2, %entry
%7 = load i64, i64* %inbytesleft, !dbg !2910
%8 = icmp ugt i64 %7, 0, !dbg !2910
%9 = or i1 false, %8, !dbg !2910
br i1 %9, label %body, label %exit, !dbg !2910
body: ; preds = %while
%10 = call i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %outbuf), !dbg !2911
store i8* %10, i8** %outbuf_ptr, !dbg !2912
%11 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !2913
%12 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %11), !dbg !2914
store i64 %12, i64* %outbytesleft, !dbg !2915
%13 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !2915
%14 = call i64 @"*Iconv#convert<Pointer(Pointer(UInt8)), Pointer(UInt64), Pointer(Pointer(UInt8)), Pointer(UInt64)>:UInt64"(%Iconv* %13, i8** %inbuf_ptr, i64* %inbytesleft, i8** %outbuf_ptr, i64* %outbytesleft), !dbg !2916
store i64 %14, i64* %err, !dbg !2917
%15 = load i64, i64* %err, !dbg !2918
%16 = icmp eq i64 %15, -1, !dbg !2918
br i1 %16, label %then, label %else, !dbg !2918
exit: ; preds = %while
ret void, !dbg !2919
then: ; preds = %body
%17 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !2918
%18 = call %"(UInt64 | Nil)" @"*Iconv#handle_invalid<Pointer(Pointer(UInt8)), Pointer(UInt64)>:(UInt64 | Nil)"(%Iconv* %17, i8** %inbuf_ptr, i64* %inbytesleft), !dbg !2920
br label %exit2, !dbg !2920
else: ; preds = %body
br label %exit2, !dbg !2920
exit2: ; preds = %else, %then
%19 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_slice:Slice(UInt8)"([1024 x i8]* %outbuf), !dbg !2906
store %"Slice(UInt8)" %19, %"Slice(UInt8)"* %0, !dbg !2906
%20 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !2921
%21 = load i64, i64* %outbytesleft, !dbg !2921
%22 = sext i32 %20 to i64, !dbg !2921
%23 = sub i64 %22, %21, !dbg !2921
%24 = trunc i64 %23 to i32, !dbg !2921
%25 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %0, i32 0, i32 %24), !dbg !2906
store %"Slice(UInt8)" %25, %"Slice(UInt8)"* %1, !dbg !2906
%26 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !2906
call void @"*IO::FileDescriptor@IO::Buffered#write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %io, %"Slice(UInt8)" %26), !dbg !2919
br label %while, !dbg !2919
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO::Buffered#write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %slice) #0 !dbg !449 {
alloca:
%count = alloca i32, !dbg !2922
%index = alloca %"(Int32 | Nil)", !dbg !2922
%slice1 = alloca %"Slice(UInt8)", !dbg !2922
%0 = alloca %"Slice(UInt8)", !dbg !2922
%1 = alloca %"Slice(UInt8)", !dbg !2923
%2 = alloca %"(Int32 | Nil)", !dbg !2923
%3 = alloca %"Slice(UInt8)", !dbg !2924
%4 = alloca %"Slice(UInt8)", !dbg !2925
%5 = alloca %"Slice(UInt8)", !dbg !2926
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %0, !dbg !2922
%6 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2922
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %slice1, !dbg !2922
call void @"*IO::FileDescriptor@IO#check_open:Nil"(%"IO::FileDescriptor"* %self), !dbg !2927
%7 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !2927
%8 = load i32, i32* %7, !dbg !2927
store i32 %8, i32* %count, !dbg !2928
%9 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 9, !dbg !2929
%10 = load i1, i1* %9, !dbg !2929
br i1 %10, label %then, label %else, !dbg !2929
then: ; preds = %entry
%11 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !2929
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %11), !dbg !2930
ret void, !dbg !2930
else: ; preds = %entry
%12 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 10, !dbg !2931
%13 = load i1, i1* %12, !dbg !2931
br i1 %13, label %then2, label %else3, !dbg !2931
then2: ; preds = %else
%14 = load i32, i32* %count, !dbg !2931
%15 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %slice1, i32 0, i32 %14), !dbg !2923
store %"Slice(UInt8)" %15, %"Slice(UInt8)"* %1, !dbg !2923
%16 = call %"(Int32 | Nil)" @"*Slice(UInt8)@Indexable(T)#rindex<UInt8>:(Int32 | Nil)"(%"Slice(UInt8)"* %1, i8 10), !dbg !2923
store %"(Int32 | Nil)" %16, %"(Int32 | Nil)"* %2, !dbg !2923
%17 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, !dbg !2932
store %"(Int32 | Nil)" %17, %"(Int32 | Nil)"* %index, !dbg !2932
%18 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 0, !dbg !2933
%19 = load i32, i32* %18, !dbg !2933
%20 = icmp eq i32 %19, 0, !dbg !2933
%21 = xor i1 %20, true, !dbg !2933
%22 = and i1 true, %21, !dbg !2933
br i1 %22, label %then4, label %else5, !dbg !2933
else3: ; preds = %else
br label %exit6, !dbg !2934
then4: ; preds = %then2
%23 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self), !dbg !2935
%24 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 1, !dbg !2935
%25 = bitcast [1 x i64]* %24 to i32*, !dbg !2935
%26 = load i32, i32* %25, !dbg !2935
%27 = add i32 %26, 1, !dbg !2935
%28 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 0, !dbg !2936
store i32 152, i32* %28, !dbg !2936
%29 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 1, !dbg !2936
%30 = bitcast [1 x i64]* %29 to i32*, !dbg !2936
store i32 %27, i32* %30, !dbg !2936
%31 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 1, !dbg !2936
%32 = bitcast [1 x i64]* %31 to i32*, !dbg !2936
%33 = load i32, i32* %32, !dbg !2936
%34 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %slice1, i32 0, i32 %33), !dbg !2924
store %"Slice(UInt8)" %34, %"Slice(UInt8)"* %3, !dbg !2924
%35 = load %"Slice(UInt8)", %"Slice(UInt8)"* %3, !dbg !2924
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %35), !dbg !2937
%36 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 1, !dbg !2937
%37 = bitcast [1 x i64]* %36 to i32*, !dbg !2937
%38 = load i32, i32* %37, !dbg !2937
%39 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#+<Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %slice1, i32 %38), !dbg !2925
store %"Slice(UInt8)" %39, %"Slice(UInt8)"* %4, !dbg !2925
%40 = load %"Slice(UInt8)", %"Slice(UInt8)"* %4, !dbg !2925
store %"Slice(UInt8)" %40, %"Slice(UInt8)"* %slice1, !dbg !2925
%41 = load i32, i32* %count, !dbg !2925
%42 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %index, i32 0, i32 1, !dbg !2925
%43 = bitcast [1 x i64]* %42 to i32*, !dbg !2925
%44 = load i32, i32* %43, !dbg !2925
%45 = sub i32 %41, %44, !dbg !2925
store i32 %45, i32* %count, !dbg !2934
br label %exit, !dbg !2934
else5: ; preds = %then2
br label %exit, !dbg !2934
exit: ; preds = %else5, %then4
br label %exit6, !dbg !2934
exit6: ; preds = %else3, %exit
%46 = load i32, i32* %count, !dbg !2938
%47 = icmp sge i32 %46, 8192, !dbg !2938
br i1 %47, label %then7, label %else8, !dbg !2938
then7: ; preds = %exit6
%48 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self), !dbg !2939
%49 = load i32, i32* %count, !dbg !2939
%50 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %slice1, i32 0, i32 %49), !dbg !2926
store %"Slice(UInt8)" %50, %"Slice(UInt8)"* %5, !dbg !2926
%51 = load %"Slice(UInt8)", %"Slice(UInt8)"* %5, !dbg !2926
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %51), !dbg !2940
ret void, !dbg !2940
else8: ; preds = %exit6
%52 = load i32, i32* %count, !dbg !2941
%53 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !2941
%54 = load i32, i32* %53, !dbg !2941
%55 = sub i32 8192, %54, !dbg !2941
%56 = icmp sgt i32 %52, %55, !dbg !2941
br i1 %56, label %then9, label %else10, !dbg !2941
then9: ; preds = %else8
%57 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self), !dbg !2942
br label %exit11, !dbg !2942
else10: ; preds = %else8
br label %exit11, !dbg !2942
exit11: ; preds = %else10, %then9
%58 = call i8* @"*IO::FileDescriptor@IO::Buffered#out_buffer:Pointer(UInt8)"(%"IO::FileDescriptor"* %self), !dbg !2943
%59 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !2943
%60 = load i32, i32* %59, !dbg !2943
%61 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %58, i32 %60), !dbg !2943
%62 = load i32, i32* %count, !dbg !2943
%63 = call i8* @"*Slice(UInt8)@Slice(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %slice1, i8* %61, i32 %62), !dbg !2944
%64 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !2944
%65 = load i32, i32* %64, !dbg !2944
%66 = load i32, i32* %count, !dbg !2944
%67 = add i32 %65, %66, !dbg !2944
%68 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !2945
store i32 %67, i32* %68, !dbg !2945
ret void, !dbg !2945
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#check_open:Nil"(%"IO::FileDescriptor"* %self) #0 !dbg !450 {
entry:
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 19, !dbg !2946
%1 = load i1, i1* %0, !dbg !2946
br i1 %1, label %then, label %else, !dbg !2946
then: ; preds = %entry
%2 = call %"IO::Error"* @"*IO::Error@Exception::new<String>:IO::Error"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Closed stream'" to %String*)), !dbg !2947
call void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* %2), !dbg !2946
unreachable, !dbg !2946
else: ; preds = %entry
ret void, !dbg !2946
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %slice) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !451 {
alloca:
%slice1 = alloca %"Slice(UInt8)", !dbg !2948
%slice2 = alloca %"Slice(UInt8)", !dbg !2949
%slice3 = alloca %"Slice(UInt8)", !dbg !2949
%errno_msg = alloca %String*, !dbg !2949
%writers = alloca %"Deque(Fiber)"*, !dbg !2949
%0 = alloca %"Slice(UInt8)", !dbg !2949
%bytes_written = alloca i64, !dbg !2950
%i = alloca i32, !dbg !2950
%return_code = alloca i64, !dbg !2951
%__temp_52 = alloca i1, !dbg !2951
%1 = alloca %"Slice(UInt8)", !dbg !2952
%2 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2953
%3 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2953
%4 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2953
%5 = alloca %"(Bool | Deque(Fiber) | Nil)", !dbg !2953
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !2948
%6 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !2948
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %0, !dbg !2949
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !2949
store %"Slice(UInt8)" %7, %"Slice(UInt8)"* %slice3, !dbg !2949
store %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Error writing file'" to %String*), %String** %errno_msg, !dbg !2949
store i32 0, i32* %i, !dbg !2954
br label %while, !dbg !2954
rescue: ; preds = %invoke_out25, %else22, %then21, %then12, %then7, %then
%8 = landingpad %landing_pad
cleanup, !dbg !2955
%9 = extractvalue %landing_pad %8, 0, !dbg !2955
%10 = extractvalue %landing_pad %8, 1, !dbg !2955
%11 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 16, !dbg !2956
%12 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %11, !dbg !2956
store %"Deque(Fiber)"* %12, %"Deque(Fiber)"** %writers, !dbg !2957
%13 = icmp ne %"Deque(Fiber)"* %12, null, !dbg !2957
br i1 %13, label %then29, label %else30, !dbg !2957
while: ; preds = %exit20, %entry
br i1 true, label %body, label %exit, !dbg !2958
body: ; preds = %while
%14 = load i32, i32* %i, !dbg !2958
%15 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice3, !dbg !2958
store %"Slice(UInt8)" %15, %"Slice(UInt8)"* %slice2, !dbg !2958
%16 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 4, !dbg !2958
%17 = load i32, i32* %16, !dbg !2958
%18 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice2, i32 0, i32 2, !dbg !2958
%19 = load i8*, i8** %18, !dbg !2958
%20 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice2, i32 0, i32 0, !dbg !2958
%21 = load i32, i32* %20, !dbg !2958
%22 = sext i32 %21 to i64, !dbg !2958
%23 = call i64 @write(i32 %17, i8* %19, i64 %22), !dbg !2951
store i64 %23, i64* %return_code, !dbg !2951
%24 = load i64, i64* %return_code, !dbg !2959
%25 = icmp eq i64 %24, -1, !dbg !2959
store i1 %25, i1* %__temp_52, !dbg !2959
br i1 %25, label %then4, label %else5, !dbg !2959
exit: ; preds = %while
unreachable, !dbg !2955
then: ; preds = %exit6
%26 = call %"IO::Error"* @"*IO::Error@Exception::new<String>:IO::Error"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'File not open for w...'" to %String*)), !dbg !2960
invoke void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* %26)
to label %invoke_out unwind label %rescue, !dbg !2961
else: ; preds = %exit6
store i64 %23, i64* %bytes_written, !dbg !2962
%27 = load i64, i64* %bytes_written, !dbg !2963
%28 = icmp ne i64 %27, -1, !dbg !2963
br i1 %28, label %then7, label %else8, !dbg !2963
then4: ; preds = %body
%29 = call i32 @"*Errno::value:Int32"(), !dbg !2964
%30 = icmp eq i32 %29, 9, !dbg !2964
br label %exit6, !dbg !2964
else5: ; preds = %body
%31 = load i1, i1* %__temp_52, !dbg !2964
br label %exit6, !dbg !2964
exit6: ; preds = %else5, %then4
%32 = phi i1 [ %30, %then4 ], [ %31, %else5 ], !dbg !2964
br i1 %32, label %then, label %else, !dbg !2964
invoke_out: ; preds = %then
unreachable, !dbg !2961
then7: ; preds = %else
%33 = load i64, i64* %bytes_written, !dbg !2963
%34 = invoke %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#+<Int64>:Slice(UInt8)"(%"Slice(UInt8)"* %slice3, i64 %33)
to label %invoke_out9 unwind label %rescue, !dbg !2952
else8: ; preds = %else
%35 = call i32 @"*Errno::value:Int32"(), !dbg !2965
%36 = icmp eq i32 %35, 11, !dbg !2965
br i1 %36, label %then21, label %else22, !dbg !2965
invoke_out9: ; preds = %then7
store %"Slice(UInt8)" %34, %"Slice(UInt8)"* %1, !dbg !2952
%37 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !2952
store %"Slice(UInt8)" %37, %"Slice(UInt8)"* %slice3, !dbg !2952
%38 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice3, i32 0, i32 0, !dbg !2966
%39 = load i32, i32* %38, !dbg !2966
%40 = icmp eq i32 %39, 0, !dbg !2966
br i1 %40, label %then10, label %else11, !dbg !2966
then10: ; preds = %invoke_out9
%41 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 16, !dbg !2956
%42 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %41, !dbg !2956
store %"Deque(Fiber)"* %42, %"Deque(Fiber)"** %writers, !dbg !2957
%43 = icmp ne %"Deque(Fiber)"* %42, null, !dbg !2957
br i1 %43, label %then14, label %else15, !dbg !2957
else11: ; preds = %invoke_out9
br label %exit20, !dbg !2967
then12: ; preds = %exit16
invoke void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event:Nil"(%"IO::FileDescriptor"* %self)
to label %invoke_out17 unwind label %rescue, !dbg !2967
else13: ; preds = %exit16
br label %exit18, !dbg !2967
then14: ; preds = %then10
%44 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2957
%45 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %44), !dbg !2953
%46 = xor i1 %45, true, !dbg !2953
%47 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %2, i32 0, i32 0, !dbg !2953
store i32 163, i32* %47, !dbg !2953
%48 = zext i1 %46 to i64, !dbg !2953
%49 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %2, i32 0, i32 1, !dbg !2953
%50 = bitcast [1 x i64]* %49 to i64*, !dbg !2953
store i64 %48, i64* %50, !dbg !2953
br label %exit16, !dbg !2953
else15: ; preds = %then10
%51 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2953
%52 = icmp eq %"Deque(Fiber)"* %51, null, !dbg !2953
%53 = select i1 %52, i32 0, i32 106, !dbg !2953
%54 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %3, i32 0, i32 0, !dbg !2953
store i32 %53, i32* %54, !dbg !2953
%55 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %3, i32 0, i32 1, !dbg !2953
%56 = bitcast [1 x i64]* %55 to %"Deque(Fiber)"**, !dbg !2953
store %"Deque(Fiber)"* %51, %"Deque(Fiber)"** %56, !dbg !2953
br label %exit16, !dbg !2953
exit16: ; preds = %else15, %then14
%57 = phi %"(Bool | Deque(Fiber) | Nil)"* [ %2, %then14 ], [ %3, %else15 ], !dbg !2953
%58 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %57, i32 0, i32 0, !dbg !2953
%59 = load i32, i32* %58, !dbg !2953
%60 = icmp eq i32 %59, 0, !dbg !2953
%61 = xor i1 %60, true, !dbg !2953
%62 = and i1 true, %61, !dbg !2953
%63 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %57, i32 0, i32 1, !dbg !2953
%64 = bitcast [1 x i64]* %63 to i1*, !dbg !2953
%65 = load i1, i1* %64, !dbg !2953
%66 = icmp eq i32 %59, 163, !dbg !2953
%67 = xor i1 %65, true, !dbg !2953
%68 = and i1 %66, %67, !dbg !2953
%69 = xor i1 %68, true, !dbg !2953
%70 = and i1 %62, %69, !dbg !2953
br i1 %70, label %then12, label %else13, !dbg !2953
invoke_out17: ; preds = %then12
br label %exit18, !dbg !2967
exit18: ; preds = %else13, %invoke_out17
br label %exit19, !dbg !2967
exit19: ; preds = %exit18
ret void, !dbg !2950
exit20: ; preds = %exit24, %else11
%71 = load i32, i32* %i, !dbg !2968
%72 = add i32 %71, 1, !dbg !2968
store i32 %72, i32* %i, !dbg !2955
br label %while, !dbg !2955
then21: ; preds = %else8
invoke void @"*IO::FileDescriptor@IO::Syscall#wait_writable:Nil"(%"IO::FileDescriptor"* %self)
to label %invoke_out23 unwind label %rescue, !dbg !2969
else22: ; preds = %else8
%73 = load %String*, %String** %errno_msg, !dbg !2969
%74 = invoke %Errno* @"*Errno::new<String>:Errno"(%String* %73)
to label %invoke_out25 unwind label %rescue, !dbg !2970
invoke_out23: ; preds = %then21
br label %exit24, !dbg !2969
exit24: ; preds = %invoke_out23
br label %exit20, !dbg !2968
invoke_out25: ; preds = %else22
invoke void @"*raise<Errno>:NoReturn"(%Errno* %74)
to label %invoke_out26 unwind label %rescue, !dbg !2968
invoke_out26: ; preds = %invoke_out25
unreachable, !dbg !2968
then27: ; preds = %exit31
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event:Nil"(%"IO::FileDescriptor"* %self), !dbg !2967
br label %exit32, !dbg !2967
else28: ; preds = %exit31
br label %exit32, !dbg !2967
then29: ; preds = %rescue
%75 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2957
%76 = call i1 @"*Deque(Fiber)@Indexable(T)#empty?:Bool"(%"Deque(Fiber)"* %75), !dbg !2953
%77 = xor i1 %76, true, !dbg !2953
%78 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %4, i32 0, i32 0, !dbg !2953
store i32 163, i32* %78, !dbg !2953
%79 = zext i1 %77 to i64, !dbg !2953
%80 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %4, i32 0, i32 1, !dbg !2953
%81 = bitcast [1 x i64]* %80 to i64*, !dbg !2953
store i64 %79, i64* %81, !dbg !2953
br label %exit31, !dbg !2953
else30: ; preds = %rescue
%82 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !2953
%83 = icmp eq %"Deque(Fiber)"* %82, null, !dbg !2953
%84 = select i1 %83, i32 0, i32 106, !dbg !2953
%85 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %5, i32 0, i32 0, !dbg !2953
store i32 %84, i32* %85, !dbg !2953
%86 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %5, i32 0, i32 1, !dbg !2953
%87 = bitcast [1 x i64]* %86 to %"Deque(Fiber)"**, !dbg !2953
store %"Deque(Fiber)"* %82, %"Deque(Fiber)"** %87, !dbg !2953
br label %exit31, !dbg !2953
exit31: ; preds = %else30, %then29
%88 = phi %"(Bool | Deque(Fiber) | Nil)"* [ %4, %then29 ], [ %5, %else30 ], !dbg !2953
%89 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %88, i32 0, i32 0, !dbg !2953
%90 = load i32, i32* %89, !dbg !2953
%91 = icmp eq i32 %90, 0, !dbg !2953
%92 = xor i1 %91, true, !dbg !2953
%93 = and i1 true, %92, !dbg !2953
%94 = getelementptr inbounds %"(Bool | Deque(Fiber) | Nil)", %"(Bool | Deque(Fiber) | Nil)"* %88, i32 0, i32 1, !dbg !2953
%95 = bitcast [1 x i64]* %94 to i1*, !dbg !2953
%96 = load i1, i1* %95, !dbg !2953
%97 = icmp eq i32 %90, 163, !dbg !2953
%98 = xor i1 %96, true, !dbg !2953
%99 = and i1 %97, %98, !dbg !2953
%100 = xor i1 %99, true, !dbg !2953
%101 = and i1 %93, %100, !dbg !2953
br i1 %101, label %then27, label %else28, !dbg !2953
exit32: ; preds = %else28, %then27
%102 = bitcast i8* %9 to %"struct.LibUnwind::Exception"*, !dbg !2967
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %102), !dbg !2950
unreachable, !dbg !2950
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event:Nil"(%"IO::FileDescriptor"* %self) #0 !dbg !452 {
alloca:
%timeout = alloca %"(Time::Span | Nil)", !dbg !2971
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 14, !dbg !2971
%1 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %0, !dbg !2972
store %"(Time::Span | Nil)" %1, %"(Time::Span | Nil)"* %timeout, !dbg !2972
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout, !dbg !2972
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(%"IO::FileDescriptor"* %self, %"(Time::Span | Nil)" %2), !dbg !2971
ret void, !dbg !2971
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(%"IO::FileDescriptor"* %self, %"(Time::Span | Nil)" %timeout) #0 !dbg !453 {
alloca:
%__temp_54 = alloca %"(Event::Event | Nil)", !dbg !2973
%event = alloca %"Event::Event", !dbg !2973
%timeout1 = alloca %"(Time::Span | Nil)", !dbg !2973
%0 = alloca %"Event::Event", !dbg !2974
br label %entry
entry: ; preds = %alloca
store %"(Time::Span | Nil)" %timeout, %"(Time::Span | Nil)"* %timeout1, !dbg !2973
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 6, !dbg !2975
%2 = load %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %1, !dbg !2975
store %"(Event::Event | Nil)" %2, %"(Event::Event | Nil)"* %__temp_54, !dbg !2975
%3 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %1, i32 0, i32 0, !dbg !2975
%4 = load i32, i32* %3, !dbg !2975
%5 = icmp eq i32 %4, 0, !dbg !2975
%6 = xor i1 %5, true, !dbg !2975
%7 = and i1 true, %6, !dbg !2975
br i1 %7, label %then, label %else, !dbg !2975
then: ; preds = %entry
%8 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %__temp_54, i32 0, i32 1, !dbg !2975
%9 = bitcast [2 x i64]* %8 to %"Event::Event"*, !dbg !2975
br label %exit, !dbg !2975
else: ; preds = %entry
%10 = call %"Event::Event" @"*Scheduler::create_fd_write_event<IO::FileDescriptor>:Event::Event"(%"IO::FileDescriptor"* %self), !dbg !2974
store %"Event::Event" %10, %"Event::Event"* %0, !dbg !2974
%11 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 6, !dbg !2975
%12 = load %"Event::Event", %"Event::Event"* %0, !dbg !2975
%13 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %11, i32 0, i32 0, !dbg !2975
store i32 392, i32* %13, !dbg !2975
%14 = getelementptr inbounds %"(Event::Event | Nil)", %"(Event::Event | Nil)"* %11, i32 0, i32 1, !dbg !2975
%15 = bitcast [2 x i64]* %14 to %"Event::Event"*, !dbg !2975
store %"Event::Event" %12, %"Event::Event"* %15, !dbg !2975
br label %exit, !dbg !2975
exit: ; preds = %else, %then
%16 = phi %"Event::Event"* [ %9, %then ], [ %0, %else ], !dbg !2975
%17 = load %"Event::Event", %"Event::Event"* %16, !dbg !2976
store %"Event::Event" %17, %"Event::Event"* %event, !dbg !2976
%18 = getelementptr inbounds %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, i32 0, i32 0, !dbg !2976
%19 = load i32, i32* %18, !dbg !2976
%20 = icmp eq i32 0, %19, !dbg !2976
%21 = and i1 true, %20, !dbg !2976
br i1 %21, label %current_def, label %next_def, !dbg !2976
current_def: ; preds = %exit
%22 = call i32 @"*Event::Event#add<Nil>:Int32"(%"Event::Event"* %event, %Nil zeroinitializer), !dbg !2977
br label %exit2, !dbg !2977
next_def: ; preds = %exit
%23 = icmp eq i32 430, %19, !dbg !2977
%24 = and i1 true, %23, !dbg !2977
br i1 %24, label %current_def3, label %next_def4, !dbg !2977
exit2: ; preds = %current_def3, %current_def
%25 = phi i32 [ %22, %current_def ], [ %29, %current_def3 ], !dbg !2977
ret void, !dbg !2977
current_def3: ; preds = %next_def
%26 = getelementptr inbounds %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, i32 0, i32 1, !dbg !2977
%27 = bitcast [2 x i64]* %26 to %"Time::Span"*, !dbg !2977
%28 = load %"Time::Span", %"Time::Span"* %27, !dbg !2977
%29 = call i32 @"*Event::Event#add<Time::Span>:Int32"(%"Event::Event"* %event, %"Time::Span" %28), !dbg !2977
br label %exit2, !dbg !2977
next_def4: ; preds = %next_def
unreachable, !dbg !2977
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Scheduler::create_fd_write_event<IO::FileDescriptor>:Event::Event"(%"IO::FileDescriptor"* %io) #0 !dbg !454 {
alloca:
%edge_triggered = alloca i1, !dbg !2978
%flags = alloca i16, !dbg !2978
%event = alloca %"Event::Event", !dbg !2978
%0 = alloca %"->", !dbg !2979
%1 = alloca %"Event::Event", !dbg !2980
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %edge_triggered, !dbg !2981
store i16 4, i16* %flags, !dbg !2982
%2 = load i1, i1* %edge_triggered, !dbg !2979
br i1 %2, label %then, label %else, !dbg !2979
then: ; preds = %entry
%3 = load i16, i16* %flags, !dbg !2979
%4 = call i16 @"*LibEvent2::EventFlags@Enum#|<LibEvent2::EventFlags>:LibEvent2::EventFlags"(i16 16, i16 32), !dbg !2983
%5 = call i16 @"*LibEvent2::EventFlags@Enum#|<LibEvent2::EventFlags>:LibEvent2::EventFlags"(i16 %3, i16 %4), !dbg !2979
store i16 %5, i16* %flags, !dbg !2979
br label %exit, !dbg !2979
else: ; preds = %entry
br label %exit, !dbg !2979
exit: ; preds = %else, %then
%6 = call %"Event::Base"* @"~Scheduler::eb:read"(), !dbg !2979
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %io, i32 0, i32 4, !dbg !2979
%8 = load i32, i32* %7, !dbg !2979
%9 = load i16, i16* %flags, !dbg !2979
%10 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !2979
store i8* bitcast (void (i32, i16, i8*)* @"~proc2Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:34" to i8*), i8** %10, !dbg !2979
%11 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !2979
store i8* null, i8** %11, !dbg !2979
%12 = load %"->", %"->"* %0, !dbg !2979
%13 = call %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, IO::FileDescriptor, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %6, i32 %8, i16 %9, %"IO::FileDescriptor"* %io, %"->" %12), !dbg !2980
store %"Event::Event" %13, %"Event::Event"* %1, !dbg !2980
%14 = load %"Event::Event", %"Event::Event"* %1, !dbg !2984
store %"Event::Event" %14, %"Event::Event"* %event, !dbg !2984
%15 = load %"Event::Event", %"Event::Event"* %event, !dbg !2984
ret %"Event::Event" %15, !dbg !2984
}
; Function Attrs: uwtable
define internal void @"~proc2Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/concurrent/scheduler.cr:34"(i32 %s, i16 %flags, i8* %data) #0 !dbg !455 {
alloca:
%fd_io = alloca i32*, !dbg !2985
br label %entry
entry: ; preds = %alloca
%0 = bitcast i8* %data to i32*, !dbg !2985
store i32* %0, i32** %fd_io, !dbg !2986
%1 = call i1 @"*LibEvent2::EventFlags@Enum#includes?<LibEvent2::EventFlags>:Bool"(i16 %flags, i16 4), !dbg !2987
br i1 %1, label %then, label %else, !dbg !2987
then: ; preds = %entry
%2 = load i32*, i32** %fd_io, !dbg !2987
call void @"*IO::FileDescriptor+@IO::Syscall#resume_write:Nil"(i32* %2), !dbg !2988
br label %exit, !dbg !2988
else: ; preds = %entry
%3 = call i1 @"*LibEvent2::EventFlags@Enum#includes?<LibEvent2::EventFlags>:Bool"(i16 %flags, i16 1), !dbg !2989
br i1 %3, label %then1, label %else2, !dbg !2989
exit: ; preds = %exit3, %then
ret void, !dbg !2990
then1: ; preds = %else
%4 = load i32*, i32** %fd_io, !dbg !2989
call void @"*IO::FileDescriptor+@IO::Syscall#resume_write<Bool>:Nil"(i32* %4, i1 true), !dbg !2990
br label %exit3, !dbg !2990
else2: ; preds = %else
br label %exit3, !dbg !2990
exit3: ; preds = %else2, %then1
br label %exit, !dbg !2990
}
; Function Attrs: uwtable
define internal %"Event::Event" @"*Event::Base#new_event<Int32, LibEvent2::EventFlags, IO::FileDescriptor, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Event::Event"(%"Event::Base"* %self, i32 %s, i16 %flags, %"IO::FileDescriptor"* %data, %"->" %callback) #0 !dbg !456 {
alloca:
%event = alloca i8*, !dbg !2991
%0 = alloca %"Event::Event", !dbg !2992
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"Event::Base", %"Event::Base"* %self, i32 0, i32 0, !dbg !2991
%2 = load i8*, i8** %1, !dbg !2991
%3 = call i8* @"~check_proc_is_not_closure"(%"->" %callback), !dbg !2991
%4 = bitcast i8* %3 to %Nil (i32, i16, i8*)*, !dbg !2991
%5 = bitcast %"IO::FileDescriptor"* %data to i8*, !dbg !2991
%6 = call i8* @event_new(i8* %2, i32 %s, i16 %flags, %Nil (i32, i16, i8*)* %4, i8* %5), !dbg !2993
store i8* %6, i8** %event, !dbg !2994
%7 = load i8*, i8** %event, !dbg !2994
%8 = call %"Event::Event" @"*Event::Event::new<Pointer(Void)>:Event::Event"(i8* %7), !dbg !2992
store %"Event::Event" %8, %"Event::Event"* %0, !dbg !2992
%9 = load %"Event::Event", %"Event::Event"* %0, !dbg !2992
ret %"Event::Event" %9, !dbg !2992
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO::Syscall#wait_writable:Nil"(%"IO::FileDescriptor"* %self) #0 !dbg !457 {
alloca:
%timeout = alloca %"(Time::Span | Nil)", !dbg !2995
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 14, !dbg !2995
%1 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %0, !dbg !2996
store %"(Time::Span | Nil)" %1, %"(Time::Span | Nil)"* %timeout, !dbg !2996
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout, !dbg !2996
call void @"*IO::FileDescriptor@IO::Syscall#wait_writable<(Time::Span | Nil)>:Nil"(%"IO::FileDescriptor"* %self, %"(Time::Span | Nil)" %2), !dbg !2995
ret void, !dbg !2995
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO::Syscall#wait_writable<(Time::Span | Nil)>:Nil"(%"IO::FileDescriptor"* %self, %"(Time::Span | Nil)" %timeout) #0 !dbg !458 {
alloca:
%timeout1 = alloca %"(Time::Span | Nil)", !dbg !2997
%err = alloca %"IO::Timeout"*, !dbg !2998
%timeout2 = alloca %"(Time::Span | Nil)", !dbg !2998
%__temp_53 = alloca %"Deque(Fiber)"*, !dbg !2998
%writers = alloca %"Deque(Fiber)"*, !dbg !2998
%0 = alloca %"(Time::Span | Nil)", !dbg !2998
br label %entry
entry: ; preds = %alloca
store %"(Time::Span | Nil)" %timeout, %"(Time::Span | Nil)"* %timeout1, !dbg !2997
%1 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout1, !dbg !2997
store %"(Time::Span | Nil)" %1, %"(Time::Span | Nil)"* %0, !dbg !2998
%2 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %0, !dbg !2998
store %"(Time::Span | Nil)" %2, %"(Time::Span | Nil)"* %timeout2, !dbg !2998
%3 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 16, !dbg !2999
%4 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %3, !dbg !2999
store %"Deque(Fiber)"* %4, %"Deque(Fiber)"** %__temp_53, !dbg !2999
%5 = icmp ne %"Deque(Fiber)"* %4, null, !dbg !2999
br i1 %5, label %then, label %else, !dbg !2999
then: ; preds = %entry
%6 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %__temp_53, !dbg !2999
br label %exit, !dbg !2999
else: ; preds = %entry
%7 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 613), !dbg !3000
%8 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 16, !dbg !2999
store %"Deque(Fiber)"* %7, %"Deque(Fiber)"** %8, !dbg !2999
br label %exit, !dbg !2999
exit: ; preds = %else, %then
%9 = phi %"Deque(Fiber)"* [ %6, %then ], [ %7, %else ], !dbg !2999
store %"Deque(Fiber)"* %9, %"Deque(Fiber)"** %writers, !dbg !3001
%10 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %writers, !dbg !3001
%11 = call %Fiber* @"*Fiber::current:Fiber"(), !dbg !3002
%12 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)#<<<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %10, %Fiber* %11), !dbg !3003
%13 = load %"(Time::Span | Nil)", %"(Time::Span | Nil)"* %timeout2, !dbg !3003
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#add_write_event<(Time::Span | Nil)>:Nil"(%"IO::FileDescriptor"* %self, %"(Time::Span | Nil)" %13), !dbg !3004
call void @"*Scheduler::reschedule:Nil"(), !dbg !3005
%14 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 18, !dbg !3006
%15 = load i1, i1* %14, !dbg !3006
br i1 %15, label %then3, label %else4, !dbg !3006
then3: ; preds = %exit
%16 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 18, !dbg !3007
store i1 false, i1* %16, !dbg !3007
%17 = call %"IO::Timeout"* @"*IO::Timeout@Exception::new<String>:IO::Timeout"(%String* bitcast ({ i32, i32, i32, [16 x i8] }* @"'Write timed out'" to %String*)), !dbg !3008
store %"IO::Timeout"* %17, %"IO::Timeout"** %err, !dbg !3008
%18 = load %"IO::Timeout"*, %"IO::Timeout"** %err, !dbg !3008
call void @"*raise<IO::Timeout>:NoReturn"(%"IO::Timeout"* %18), !dbg !3009
unreachable, !dbg !3009
else4: ; preds = %exit
ret void, !dbg !3009
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*Slice(UInt8)@Indexable(T)#rindex<UInt8>:(Int32 | Nil)"(%"Slice(UInt8)"* %self, i8 %value) #0 !dbg !459 {
alloca:
%offset = alloca i32, !dbg !3010
%0 = alloca %"(Int32 | Nil)", !dbg !3010
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !3010
%2 = load i32, i32* %1, !dbg !3010
%3 = sub i32 %2, 1, !dbg !3010
store i32 %3, i32* %offset, !dbg !3011
%4 = load i32, i32* %offset, !dbg !3011
%5 = call %"(Int32 | Nil)" @"*Slice(UInt8)@Indexable(T)#rindex<UInt8, Int32>:(Int32 | Nil)"(%"Slice(UInt8)"* %self, i8 %value, i32 %4), !dbg !3010
store %"(Int32 | Nil)" %5, %"(Int32 | Nil)"* %0, !dbg !3010
%6 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !3010
ret %"(Int32 | Nil)" %6, !dbg !3010
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*Slice(UInt8)@Indexable(T)#rindex<UInt8, Int32>:(Int32 | Nil)"(%"Slice(UInt8)"* %self, i8 %value, i32 %offset) #0 !dbg !460 {
alloca:
%elem = alloca i8, !dbg !3012
%offset1 = alloca i32, !dbg !3012
%0 = alloca %"(Int32 | Nil)", !dbg !3013
%i = alloca i32, !dbg !3014
%to = alloca i32, !dbg !3014
%x = alloca i32, !dbg !3014
%1 = alloca %"(Int32 | Nil)", !dbg !3015
%2 = alloca %"(Int32 | Nil)", !dbg !3016
br label %entry
entry: ; preds = %alloca
store i32 %offset, i32* %offset1, !dbg !3012
%3 = load i32, i32* %offset1, !dbg !3017
%4 = icmp slt i32 %3, 0, !dbg !3017
br i1 %4, label %then, label %else, !dbg !3017
then: ; preds = %entry
%5 = load i32, i32* %offset1, !dbg !3017
%6 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !3017
%7 = load i32, i32* %6, !dbg !3017
%8 = add i32 %5, %7, !dbg !3017
store i32 %8, i32* %offset1, !dbg !3017
br label %exit, !dbg !3017
else: ; preds = %entry
br label %exit, !dbg !3017
exit: ; preds = %else, %then
%9 = load i32, i32* %offset1, !dbg !3013
%10 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !3013
%11 = load i32, i32* %10, !dbg !3013
%12 = icmp sge i32 %9, %11, !dbg !3013
br i1 %12, label %then2, label %else3, !dbg !3013
then2: ; preds = %exit
%13 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !3013
store i32 0, i32* %13, !dbg !3013
%14 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !3013
store [1 x i64] zeroinitializer, [1 x i64]* %14, !dbg !3013
br label %exit4, !dbg !3013
else3: ; preds = %exit
%15 = load i32, i32* %offset1, !dbg !3013
store i32 0, i32* %to, !dbg !3014
store i32 %15, i32* %x, !dbg !3018
br label %while, !dbg !3018
exit4: ; preds = %exit5, %then6, %then2
%16 = phi %"(Int32 | Nil)"* [ %0, %then2 ], [ %1, %then6 ], [ %2, %exit5 ], !dbg !3016
%17 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %16, !dbg !3016
ret %"(Int32 | Nil)" %17, !dbg !3016
while: ; preds = %else7, %else3
%18 = load i32, i32* %x, !dbg !3019
%19 = load i32, i32* %to, !dbg !3019
%20 = icmp sge i32 %18, %19, !dbg !3019
br i1 %20, label %body, label %exit5, !dbg !3019
body: ; preds = %while
%21 = load i32, i32* %x, !dbg !3019
store i32 %21, i32* %i, !dbg !3019
%22 = load i32, i32* %i, !dbg !3020
%23 = call i8 @"*Slice(UInt8)@Slice(T)#unsafe_at<Int32>:UInt8"(%"Slice(UInt8)"* %self, i32 %22), !dbg !3015
store i8 %23, i8* %elem, !dbg !3015
%24 = load i8, i8* %elem, !dbg !3015
%25 = icmp eq i8 %24, %value, !dbg !3015
br i1 %25, label %then6, label %else7, !dbg !3015
exit5: ; preds = %while
%26 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 0, !dbg !3016
store i32 0, i32* %26, !dbg !3016
%27 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 1, !dbg !3016
store [1 x i64] zeroinitializer, [1 x i64]* %27, !dbg !3016
br label %exit4, !dbg !3016
then6: ; preds = %body
%28 = load i32, i32* %i, !dbg !3015
%29 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !3015
store i32 152, i32* %29, !dbg !3015
%30 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !3015
%31 = bitcast [1 x i64]* %30 to i32*, !dbg !3015
store i32 %28, i32* %31, !dbg !3015
br label %exit4, !dbg !3015
else7: ; preds = %body
%32 = load i32, i32* %x, !dbg !3015
%33 = sub i32 %32, 1, !dbg !3015
store i32 %33, i32* %x, !dbg !3016
br label %while, !dbg !3016
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*Slice(UInt8)@Slice(T)#unsafe_at<Int32>:UInt8"(%"Slice(UInt8)"* %self, i32 %index) #3 !dbg !461 {
entry:
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !3021
%1 = load i8*, i8** %0, !dbg !3021
%2 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %1, i32 %index), !dbg !3022
ret i8 %2, !dbg !3022
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self) #0 !dbg !462 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !3023
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3024
%2 = load i32, i32* %1, !dbg !3024
%3 = icmp sgt i32 %2, 0, !dbg !3024
br i1 %3, label %then, label %else, !dbg !3024
then: ; preds = %entry
%4 = call i8* @"*IO::FileDescriptor@IO::Buffered#out_buffer:Pointer(UInt8)"(%"IO::FileDescriptor"* %self), !dbg !3025
%5 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3025
%6 = load i32, i32* %5, !dbg !3025
%7 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %4, i32 %6), !dbg !3023
store %"Slice(UInt8)" %7, %"Slice(UInt8)"* %0, !dbg !3023
%8 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !3023
call void @"*IO::FileDescriptor@Crystal::System::FileDescriptor#unbuffered_write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %8), !dbg !3024
br label %exit, !dbg !3024
else: ; preds = %entry
br label %exit, !dbg !3024
exit: ; preds = %else, %then
%9 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3026
store i32 0, i32* %9, !dbg !3026
ret %"IO::FileDescriptor"* %self, !dbg !3026
}
; Function Attrs: uwtable
define internal i8* @"*IO::FileDescriptor@IO::Buffered#out_buffer:Pointer(UInt8)"(%"IO::FileDescriptor"* %self) #0 !dbg !463 {
alloca:
%__temp_56 = alloca i8*, !dbg !3027
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 12, !dbg !3028
%1 = load i8*, i8** %0, !dbg !3028
store i8* %1, i8** %__temp_56, !dbg !3028
%2 = icmp ne i8* %1, null, !dbg !3028
br i1 %2, label %then, label %else, !dbg !3028
then: ; preds = %entry
%3 = load i8*, i8** %__temp_56, !dbg !3028
br label %exit, !dbg !3028
else: ; preds = %entry
%4 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 8192), !dbg !3029
%5 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 12, !dbg !3028
store i8* %4, i8** %5, !dbg !3028
br label %exit, !dbg !3028
exit: ; preds = %else, %then
%6 = phi i8* [ %3, %then ], [ %4, %else ], !dbg !3028
ret i8* %6, !dbg !3028
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#+<Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %self, i32 %offset) #0 !dbg !464 {
alloca:
%__temp_57 = alloca i1, !dbg !3030
%0 = alloca %"Slice(UInt8)", !dbg !3031
br label %entry
entry: ; preds = %alloca
%1 = icmp sle i32 0, %offset, !dbg !3032
store i1 %1, i1* %__temp_57, !dbg !3032
br i1 %1, label %then1, label %else2, !dbg !3032
then: ; preds = %exit
br label %exit3, !dbg !3032
else: ; preds = %exit
%2 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !3033
call void @"*raise<IndexError>:NoReturn"(%IndexError* %2), !dbg !3034
unreachable, !dbg !3034
then1: ; preds = %entry
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !3032
%4 = load i32, i32* %3, !dbg !3032
%5 = icmp sle i32 %offset, %4, !dbg !3032
br label %exit, !dbg !3032
else2: ; preds = %entry
%6 = load i1, i1* %__temp_57, !dbg !3032
br label %exit, !dbg !3032
exit: ; preds = %else2, %then1
%7 = phi i1 [ %5, %then1 ], [ %6, %else2 ], !dbg !3032
br i1 %7, label %then, label %else, !dbg !3032
exit3: ; preds = %then
%8 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !3034
%9 = load i8*, i8** %8, !dbg !3034
%10 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %9, i32 %offset), !dbg !3035
%11 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !3035
%12 = load i32, i32* %11, !dbg !3035
%13 = sub i32 %12, %offset, !dbg !3035
%14 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !3035
%15 = load i1, i1* %14, !dbg !3035
%16 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %10, i32 %13, i1 %15), !dbg !3031
store %"Slice(UInt8)" %16, %"Slice(UInt8)"* %0, !dbg !3031
%17 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !3031
ret %"Slice(UInt8)" %17, !dbg !3031
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#puts:Nil"(%"IO::FileDescriptor"* %self) #0 !dbg !465 {
entry:
call void @"*IO::FileDescriptor@IO#print<Char>:Nil"(%"IO::FileDescriptor"* %self, i32 10), !dbg !3036
ret void, !dbg !3036
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#print<Char>:Nil"(%"IO::FileDescriptor"* %self, i32 %obj) #0 !dbg !466 {
entry:
%0 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<Char>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, i32 %obj), !dbg !3037
ret void, !dbg !3037
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<Char>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, i32 %obj) #0 !dbg !467 {
entry:
%0 = call %"IO::FileDescriptor"* @"*Char#to_s<IO::FileDescriptor>:(IO::FileDescriptor | Nil)"(i32 %obj, %"IO::FileDescriptor"* %self), !dbg !3038
ret %"IO::FileDescriptor"* %self, !dbg !3038
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*Char#to_s<IO::FileDescriptor>:(IO::FileDescriptor | Nil)"(i32 %self, %"IO::FileDescriptor"* %io) #0 !dbg !468 {
alloca:
%byte = alloca i8, !dbg !3039
%chars = alloca [4 x i8], !dbg !3039
%i = alloca i32, !dbg !3039
%0 = alloca %"Slice(UInt8)", !dbg !3040
%byte4 = alloca i8, !dbg !3041
%c = alloca i32, !dbg !3041
%1 = alloca %"Slice(UInt8)", !dbg !3042
%2 = alloca %"Slice(UInt8)", !dbg !3042
br label %entry
entry: ; preds = %alloca
%3 = call i1 @"*Char#ascii?:Bool"(i32 %self), !dbg !3043
br i1 %3, label %then, label %else, !dbg !3043
then: ; preds = %entry
%4 = trunc i32 %self to i8, !dbg !3043
store i8 %4, i8* %byte, !dbg !3044
%5 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %io, i32 0, i32 1, !dbg !3045
%6 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %5, i32 0, i32 0, !dbg !3045
%7 = load i32, i32* %6, !dbg !3045
%8 = icmp eq i32 %7, 0, !dbg !3045
%9 = xor i1 %8, true, !dbg !3045
%10 = and i1 true, %9, !dbg !3045
br i1 %10, label %then1, label %else2, !dbg !3045
else: ; preds = %entry
store i32 0, i32* %i, !dbg !3046
store i32 %self, i32* %c, !dbg !3047
%11 = load i32, i32* %c, !dbg !3048
%12 = icmp slt i32 %11, 128, !dbg !3048
br i1 %12, label %then5, label %else6, !dbg !3048
then1: ; preds = %then
%13 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %byte, i32 1), !dbg !3040
store %"Slice(UInt8)" %13, %"Slice(UInt8)"* %0, !dbg !3040
%14 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !3040
call void @"*IO::FileDescriptor@IO#write_utf8<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %io, %"Slice(UInt8)" %14), !dbg !3049
br label %exit, !dbg !3049
else2: ; preds = %then
%15 = load i8, i8* %byte, !dbg !3049
%16 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#write_byte<UInt8>:(IO::FileDescriptor | Nil)"(%"IO::FileDescriptor"* %io, i8 %15), !dbg !3050
br label %exit, !dbg !3050
exit: ; preds = %else2, %then1
%17 = phi %"IO::FileDescriptor"* [ null, %then1 ], [ %16, %else2 ], !dbg !3050
br label %exit3, !dbg !3050
exit3: ; preds = %exit7, %exit
%18 = phi %"IO::FileDescriptor"* [ %17, %exit ], [ null, %exit7 ], !dbg !3051
ret %"IO::FileDescriptor"* %18, !dbg !3051
then5: ; preds = %else
%19 = load i32, i32* %c, !dbg !3048
%20 = trunc i32 %19 to i8, !dbg !3048
store i8 %20, i8* %byte4, !dbg !3048
%21 = load i32, i32* %i, !dbg !3048
%22 = load i8, i8* %byte4, !dbg !3048
%23 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %21, i8 %22), !dbg !3052
%24 = load i32, i32* %i, !dbg !3052
%25 = add i32 %24, 1, !dbg !3052
store i32 %25, i32* %i, !dbg !3053
br label %exit7, !dbg !3053
else6: ; preds = %else
%26 = load i32, i32* %c, !dbg !3054
%27 = icmp sle i32 %26, 2047, !dbg !3054
br i1 %27, label %then8, label %else9, !dbg !3054
exit7: ; preds = %exit10, %then5
%28 = phi i32 [ %25, %then5 ], [ %53, %exit10 ], !dbg !3055
%29 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_slice:Slice(UInt8)"([4 x i8]* %chars), !dbg !3042
store %"Slice(UInt8)" %29, %"Slice(UInt8)"* %1, !dbg !3042
%30 = load i32, i32* %i, !dbg !3042
%31 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %1, i32 0, i32 %30), !dbg !3042
store %"Slice(UInt8)" %31, %"Slice(UInt8)"* %2, !dbg !3042
%32 = load %"Slice(UInt8)", %"Slice(UInt8)"* %2, !dbg !3042
call void @"*IO::FileDescriptor@IO#write_utf8<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %io, %"Slice(UInt8)" %32), !dbg !3051
br label %exit3, !dbg !3051
then8: ; preds = %else6
%33 = load i32, i32* %c, !dbg !3054
%34 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %33, i32 6), !dbg !3056
%35 = or i32 192, %34, !dbg !3056
%36 = trunc i32 %35 to i8, !dbg !3056
store i8 %36, i8* %byte4, !dbg !3056
%37 = load i32, i32* %i, !dbg !3056
%38 = load i8, i8* %byte4, !dbg !3056
%39 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %37, i8 %38), !dbg !3052
%40 = load i32, i32* %i, !dbg !3052
%41 = add i32 %40, 1, !dbg !3052
store i32 %41, i32* %i, !dbg !3053
%42 = load i32, i32* %c, !dbg !3053
%43 = and i32 %42, 63, !dbg !3053
%44 = or i32 128, %43, !dbg !3053
%45 = trunc i32 %44 to i8, !dbg !3053
store i8 %45, i8* %byte4, !dbg !3053
%46 = load i32, i32* %i, !dbg !3053
%47 = load i8, i8* %byte4, !dbg !3053
%48 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %46, i8 %47), !dbg !3052
%49 = load i32, i32* %i, !dbg !3052
%50 = add i32 %49, 1, !dbg !3052
store i32 %50, i32* %i, !dbg !3053
br label %exit10, !dbg !3053
else9: ; preds = %else6
%51 = load i32, i32* %c, !dbg !3057
%52 = icmp sle i32 %51, 65535, !dbg !3057
br i1 %52, label %then11, label %else12, !dbg !3057
exit10: ; preds = %exit13, %then8
%53 = phi i32 [ %50, %then8 ], [ %84, %exit13 ], !dbg !3055
br label %exit7, !dbg !3055
then11: ; preds = %else9
%54 = load i32, i32* %c, !dbg !3057
%55 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %54, i32 12), !dbg !3058
%56 = or i32 224, %55, !dbg !3058
%57 = trunc i32 %56 to i8, !dbg !3058
store i8 %57, i8* %byte4, !dbg !3058
%58 = load i32, i32* %i, !dbg !3058
%59 = load i8, i8* %byte4, !dbg !3058
%60 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %58, i8 %59), !dbg !3052
%61 = load i32, i32* %i, !dbg !3052
%62 = add i32 %61, 1, !dbg !3052
store i32 %62, i32* %i, !dbg !3053
%63 = load i32, i32* %c, !dbg !3053
%64 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %63, i32 6), !dbg !3059
%65 = and i32 %64, 63, !dbg !3059
%66 = or i32 128, %65, !dbg !3059
%67 = trunc i32 %66 to i8, !dbg !3059
store i8 %67, i8* %byte4, !dbg !3059
%68 = load i32, i32* %i, !dbg !3059
%69 = load i8, i8* %byte4, !dbg !3059
%70 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %68, i8 %69), !dbg !3052
%71 = load i32, i32* %i, !dbg !3052
%72 = add i32 %71, 1, !dbg !3052
store i32 %72, i32* %i, !dbg !3053
%73 = load i32, i32* %c, !dbg !3053
%74 = and i32 %73, 63, !dbg !3053
%75 = or i32 128, %74, !dbg !3053
%76 = trunc i32 %75 to i8, !dbg !3053
store i8 %76, i8* %byte4, !dbg !3053
%77 = load i32, i32* %i, !dbg !3053
%78 = load i8, i8* %byte4, !dbg !3053
%79 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %77, i8 %78), !dbg !3052
%80 = load i32, i32* %i, !dbg !3052
%81 = add i32 %80, 1, !dbg !3052
store i32 %81, i32* %i, !dbg !3053
br label %exit13, !dbg !3053
else12: ; preds = %else9
%82 = load i32, i32* %c, !dbg !3060
%83 = icmp sle i32 %82, 1114111, !dbg !3060
br i1 %83, label %then14, label %else15, !dbg !3060
exit13: ; preds = %exit16, %then11
%84 = phi i32 [ %81, %then11 ], [ %129, %exit16 ], !dbg !3055
br label %exit10, !dbg !3055
then14: ; preds = %else12
%85 = load i32, i32* %c, !dbg !3060
%86 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %85, i32 18), !dbg !3061
%87 = or i32 240, %86, !dbg !3061
%88 = trunc i32 %87 to i8, !dbg !3061
store i8 %88, i8* %byte4, !dbg !3061
%89 = load i32, i32* %i, !dbg !3061
%90 = load i8, i8* %byte4, !dbg !3061
%91 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %89, i8 %90), !dbg !3052
%92 = load i32, i32* %i, !dbg !3052
%93 = add i32 %92, 1, !dbg !3052
store i32 %93, i32* %i, !dbg !3053
%94 = load i32, i32* %c, !dbg !3053
%95 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %94, i32 12), !dbg !3062
%96 = and i32 %95, 63, !dbg !3062
%97 = or i32 128, %96, !dbg !3062
%98 = trunc i32 %97 to i8, !dbg !3062
store i8 %98, i8* %byte4, !dbg !3062
%99 = load i32, i32* %i, !dbg !3062
%100 = load i8, i8* %byte4, !dbg !3062
%101 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %99, i8 %100), !dbg !3052
%102 = load i32, i32* %i, !dbg !3052
%103 = add i32 %102, 1, !dbg !3052
store i32 %103, i32* %i, !dbg !3053
%104 = load i32, i32* %c, !dbg !3053
%105 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %104, i32 6), !dbg !3063
%106 = and i32 %105, 63, !dbg !3063
%107 = or i32 128, %106, !dbg !3063
%108 = trunc i32 %107 to i8, !dbg !3063
store i8 %108, i8* %byte4, !dbg !3063
%109 = load i32, i32* %i, !dbg !3063
%110 = load i8, i8* %byte4, !dbg !3063
%111 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %109, i8 %110), !dbg !3052
%112 = load i32, i32* %i, !dbg !3052
%113 = add i32 %112, 1, !dbg !3052
store i32 %113, i32* %i, !dbg !3053
%114 = load i32, i32* %c, !dbg !3053
%115 = and i32 %114, 63, !dbg !3053
%116 = or i32 128, %115, !dbg !3053
%117 = trunc i32 %116 to i8, !dbg !3053
store i8 %117, i8* %byte4, !dbg !3053
%118 = load i32, i32* %i, !dbg !3053
%119 = load i8, i8* %byte4, !dbg !3053
%120 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %118, i8 %119), !dbg !3052
%121 = load i32, i32* %i, !dbg !3052
%122 = add i32 %121, 1, !dbg !3052
store i32 %122, i32* %i, !dbg !3053
br label %exit16, !dbg !3053
else15: ; preds = %else12
%123 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3064
%124 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %123, %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Invalid char value ...'" to %String*)), !dbg !3064
%125 = call %String* @"*Char#dump:String"(i32 %self), !dbg !3065
%126 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %124, %String* %125), !dbg !3064
%127 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %126), !dbg !3064
%128 = call %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %127), !dbg !3066
call void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %128), !dbg !3055
unreachable, !dbg !3055
exit16: ; preds = %then14
%129 = phi i32 [ %122, %then14 ], !dbg !3055
br label %exit13, !dbg !3055
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#write_byte<UInt8>:(IO::FileDescriptor | Nil)"(%"IO::FileDescriptor"* %self, i8 %byte) #0 !dbg !469 {
alloca:
%__temp_71 = alloca i1, !dbg !3067
br label %entry
entry: ; preds = %alloca
call void @"*IO::FileDescriptor@IO#check_open:Nil"(%"IO::FileDescriptor"* %self), !dbg !3068
%0 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 9, !dbg !3069
%1 = load i1, i1* %0, !dbg !3069
br i1 %1, label %then, label %else, !dbg !3069
then: ; preds = %entry
call void @"*IO::FileDescriptor@IO#write_byte<UInt8>:Nil"(%"IO::FileDescriptor"* %self, i8 %byte), !dbg !3070
ret %"IO::FileDescriptor"* null, !dbg !3070
else: ; preds = %entry
%2 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3071
%3 = load i32, i32* %2, !dbg !3071
%4 = icmp sge i32 %3, 8192, !dbg !3071
br i1 %4, label %then1, label %else2, !dbg !3071
then1: ; preds = %else
%5 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self), !dbg !3072
br label %exit, !dbg !3072
else2: ; preds = %else
br label %exit, !dbg !3072
exit: ; preds = %else2, %then1
%6 = call i8* @"*IO::FileDescriptor@IO::Buffered#out_buffer:Pointer(UInt8)"(%"IO::FileDescriptor"* %self), !dbg !3073
%7 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3073
%8 = load i32, i32* %7, !dbg !3073
%9 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %6, i32 %8, i8 %byte), !dbg !3073
%10 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3073
%11 = load i32, i32* %10, !dbg !3073
%12 = add i32 %11, 1, !dbg !3073
%13 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 8, !dbg !3074
store i32 %12, i32* %13, !dbg !3074
%14 = getelementptr inbounds %"IO::FileDescriptor", %"IO::FileDescriptor"* %self, i32 0, i32 10, !dbg !3075
%15 = load i1, i1* %14, !dbg !3075
store i1 %15, i1* %__temp_71, !dbg !3075
br i1 %15, label %then5, label %else6, !dbg !3075
then3: ; preds = %exit7
%16 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %self), !dbg !3076
br label %exit8, !dbg !3076
else4: ; preds = %exit7
br label %exit8, !dbg !3076
then5: ; preds = %exit
%17 = call i1 @"*UInt8@Int#===<Char>:Bool"(i8 %byte, i32 10), !dbg !3077
br label %exit7, !dbg !3077
else6: ; preds = %exit
%18 = load i1, i1* %__temp_71, !dbg !3077
br label %exit7, !dbg !3077
exit7: ; preds = %else6, %then5
%19 = phi i1 [ %17, %then5 ], [ %18, %else6 ], !dbg !3077
br i1 %19, label %then3, label %else4, !dbg !3077
exit8: ; preds = %else4, %then3
%20 = phi %"IO::FileDescriptor"* [ %16, %then3 ], [ null, %else4 ], !dbg !3076
ret %"IO::FileDescriptor"* %20, !dbg !3076
}
; Function Attrs: uwtable
define internal void @"*IO::FileDescriptor@IO#write_byte<UInt8>:Nil"(%"IO::FileDescriptor"* %self, i8 %byte) #0 !dbg !470 {
alloca:
%x = alloca i8, !dbg !3078
%0 = alloca %"Slice(UInt8)", !dbg !3079
br label %entry
entry: ; preds = %alloca
store i8 %byte, i8* %x, !dbg !3080
%1 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %x, i32 1), !dbg !3079
store %"Slice(UInt8)" %1, %"Slice(UInt8)"* %0, !dbg !3079
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !3079
call void @"*IO::FileDescriptor@IO::Buffered#write<Slice(UInt8)>:Nil"(%"IO::FileDescriptor"* %self, %"Slice(UInt8)" %2), !dbg !3081
ret void, !dbg !3081
}
; Function Attrs: uwtable
define internal i1 @"*UInt8@Int#===<Char>:Bool"(i8 %self, i32 %char) #0 !dbg !471 {
entry:
%0 = call i1 @"*UInt8@Object#===<Int32>:Bool"(i8 %self, i32 %char), !dbg !3082
ret i1 %0, !dbg !3082
}
; Function Attrs: uwtable
define internal i1 @"*UInt8@Object#===<Int32>:Bool"(i8 %self, i32 %other) #0 !dbg !472 {
entry:
%0 = zext i8 %self to i32, !dbg !3083
%1 = icmp eq i32 %0, %other, !dbg !3083
ret i1 %1, !dbg !3083
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*Exception+@Exception#inspect_with_backtrace<IO::FileDescriptor>:IO::FileDescriptor"(i32* %self, %"IO::FileDescriptor"* %io) #0 !dbg !473 {
alloca:
%cause = alloca i32*, !dbg !3084
%__arg0 = alloca %"Array(String)"*, !dbg !3085
%__arg03 = alloca %"Array(String)"*, !dbg !3085
%frame = alloca %String*, !dbg !3086
%i = alloca i32, !dbg !3087
%i4 = alloca i32, !dbg !3087
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %Exception*, !dbg !3084
%1 = getelementptr inbounds %Exception, %Exception* %0, i32 0, i32 1, !dbg !3084
%2 = load %String*, %String** %1, !dbg !3084
%3 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<(String | Nil)>:IO::FileDescriptor"(%"IO::FileDescriptor"* %io, %String* %2), !dbg !3088
%4 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %3, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"' ('" to %String*)), !dbg !3088
%5 = load i32, i32* %self, !dbg !3088
%6 = call i32 @"~metaclass"(i32 %5), !dbg !3088
%7 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<Exception+:Class>:IO::FileDescriptor"(%"IO::FileDescriptor"* %4, i32 %6), !dbg !3088
%8 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %7, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"')\0A'" to %String*)), !dbg !3088
%9 = call %"Array(String)"* @"*Exception+@Exception#backtrace?:(Array(String) | Nil)"(i32* %self), !dbg !3085
%10 = icmp eq %"Array(String)"* %9, null, !dbg !3085
%11 = select i1 %10, i32 0, i32 7, !dbg !3085
%12 = icmp eq i32 0, %11, !dbg !3085
br i1 %12, label %current_def, label %next_def, !dbg !3085
current_def: ; preds = %entry
br label %exit, !dbg !3085
next_def: ; preds = %entry
%13 = icmp eq i32 7, %11, !dbg !3085
br i1 %13, label %current_def1, label %next_def2, !dbg !3085
exit: ; preds = %exit5, %current_def
%14 = bitcast i32* %self to %Exception*, !dbg !3089
%15 = getelementptr inbounds %Exception, %Exception* %14, i32 0, i32 2, !dbg !3089
%16 = load i32*, i32** %15, !dbg !3089
store i32* %16, i32** %cause, !dbg !3090
%17 = icmp ne i32* %16, null, !dbg !3090
br i1 %17, label %then, label %else, !dbg !3090
current_def1: ; preds = %next_def
store %"Array(String)"* %9, %"Array(String)"** %__arg03, !dbg !3085
%18 = load %"Array(String)"*, %"Array(String)"** %__arg03, !dbg !3085
store i32 0, i32* %i4, !dbg !3091
br label %while, !dbg !3091
next_def2: ; preds = %next_def
unreachable, !dbg !3092
while: ; preds = %body, %current_def1
%19 = load i32, i32* %i4, !dbg !3093
%20 = getelementptr inbounds %"Array(String)", %"Array(String)"* %18, i32 0, i32 1, !dbg !3093
%21 = load i32, i32* %20, !dbg !3093
%22 = icmp slt i32 %19, %21, !dbg !3093
br i1 %22, label %body, label %exit5, !dbg !3093
body: ; preds = %while
%23 = load i32, i32* %i4, !dbg !3093
store i32 %23, i32* %i, !dbg !3093
%24 = load i32, i32* %i, !dbg !3093
%25 = call %String* @"*Array(String)@Array(T)#unsafe_at<Int32>:String"(%"Array(String)"* %18, i32 %24), !dbg !3094
store %String* %25, %String** %frame, !dbg !3094
call void @"*IO::FileDescriptor@IO#print<String>:Nil"(%"IO::FileDescriptor"* %io, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"' from '" to %String*)), !dbg !3095
%26 = load %String*, %String** %frame, !dbg !3095
call void @"*IO::FileDescriptor@IO#puts<String>:Nil"(%"IO::FileDescriptor"* %io, %String* %26), !dbg !3096
%27 = load i32, i32* %i4, !dbg !3096
%28 = add i32 %27, 1, !dbg !3096
store i32 %28, i32* %i4, !dbg !3092
br label %while, !dbg !3092
exit5: ; preds = %while
br label %exit, !dbg !3092
then: ; preds = %exit
%29 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %io, %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'Caused by: '" to %String*)), !dbg !3097
%30 = load i32*, i32** %cause, !dbg !3097
%31 = call %"IO::FileDescriptor"* @"*Exception+@Exception#inspect_with_backtrace<IO::FileDescriptor>:IO::FileDescriptor"(i32* %30, %"IO::FileDescriptor"* %io), !dbg !3098
br label %exit6, !dbg !3098
else: ; preds = %exit
br label %exit6, !dbg !3098
exit6: ; preds = %else, %then
%32 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO::Buffered#flush:IO::FileDescriptor"(%"IO::FileDescriptor"* %io), !dbg !3099
ret %"IO::FileDescriptor"* %32, !dbg !3099
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<(String | Nil)>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, %String* %obj) #0 !dbg !474 {
entry:
%0 = icmp eq %String* %obj, null, !dbg !3100
%1 = select i1 %0, i32 0, i32 1, !dbg !3100
%2 = icmp eq i32 0, %1, !dbg !3100
br i1 %2, label %current_def, label %next_def, !dbg !3100
current_def: ; preds = %entry
br label %exit, !dbg !3100
next_def: ; preds = %entry
%3 = icmp eq i32 1, %1, !dbg !3100
br i1 %3, label %current_def1, label %next_def2, !dbg !3100
exit: ; preds = %current_def1, %current_def
ret %"IO::FileDescriptor"* %self, !dbg !3101
current_def1: ; preds = %next_def
call void @"*String#to_s<IO::FileDescriptor>:Nil"(%String* %obj, %"IO::FileDescriptor"* %self), !dbg !3101
br label %exit, !dbg !3101
next_def2: ; preds = %next_def
unreachable, !dbg !3101
}
define internal i32 @"~metaclass"(i32) {
entry:
switch i32 %0, label %otherwise [
i32 0, label %type_0
i32 1, label %type_1
i32 2, label %type_2
i32 3, label %type_3
i32 4, label %type_4
i32 5, label %type_5
i32 6, label %type_6
i32 7, label %type_7
i32 8, label %type_8
i32 9, label %type_9
i32 10, label %type_10
i32 11, label %type_11
i32 12, label %type_12
i32 13, label %type_13
i32 14, label %type_14
i32 15, label %type_15
i32 16, label %type_16
i32 17, label %type_17
i32 18, label %type_18
i32 19, label %type_19
i32 20, label %type_20
i32 21, label %type_21
i32 22, label %type_22
i32 23, label %type_23
i32 24, label %type_24
i32 25, label %type_25
i32 26, label %type_26
i32 27, label %type_27
i32 28, label %type_28
i32 29, label %type_29
i32 30, label %type_30
i32 31, label %type_31
i32 32, label %type_32
i32 33, label %type_33
i32 34, label %type_34
i32 35, label %type_35
i32 36, label %type_36
i32 37, label %type_37
i32 38, label %type_38
i32 39, label %type_39
i32 40, label %type_40
i32 41, label %type_41
i32 42, label %type_42
i32 43, label %type_43
i32 44, label %type_44
i32 45, label %type_45
i32 46, label %type_46
i32 47, label %type_47
i32 48, label %type_48
i32 49, label %type_49
i32 50, label %type_50
i32 51, label %type_51
i32 52, label %type_52
i32 53, label %type_53
i32 54, label %type_54
i32 55, label %type_55
i32 56, label %type_56
i32 57, label %type_57
i32 58, label %type_58
i32 59, label %type_59
i32 60, label %type_60
i32 61, label %type_61
i32 62, label %type_62
i32 63, label %type_63
i32 64, label %type_64
i32 65, label %type_65
i32 66, label %type_66
i32 67, label %type_67
i32 68, label %type_68
i32 69, label %type_69
i32 70, label %type_70
i32 71, label %type_71
i32 72, label %type_72
i32 73, label %type_73
i32 74, label %type_74
i32 75, label %type_75
i32 76, label %type_76
i32 77, label %type_77
i32 78, label %type_78
i32 79, label %type_79
i32 80, label %type_80
i32 81, label %type_81
i32 82, label %type_82
i32 83, label %type_83
i32 84, label %type_84
i32 85, label %type_85
i32 86, label %type_86
i32 87, label %type_87
i32 88, label %type_88
i32 89, label %type_89
i32 90, label %type_90
i32 91, label %type_91
i32 92, label %type_92
i32 93, label %type_93
i32 94, label %type_94
i32 95, label %type_95
i32 96, label %type_96
i32 97, label %type_97
i32 98, label %type_98
i32 99, label %type_99
i32 100, label %type_100
i32 101, label %type_101
i32 102, label %type_102
i32 103, label %type_103
i32 104, label %type_104
i32 105, label %type_105
i32 106, label %type_106
i32 107, label %type_107
i32 108, label %type_108
i32 109, label %type_109
i32 110, label %type_110
i32 111, label %type_111
i32 112, label %type_112
i32 113, label %type_113
i32 114, label %type_114
i32 115, label %type_115
i32 116, label %type_116
i32 117, label %type_117
i32 118, label %type_118
i32 119, label %type_119
i32 120, label %type_120
i32 121, label %type_121
i32 122, label %type_122
i32 123, label %type_123
i32 124, label %type_124
i32 125, label %type_125
i32 126, label %type_126
i32 127, label %type_127
i32 128, label %type_128
i32 129, label %type_129
i32 130, label %type_130
i32 131, label %type_131
i32 132, label %type_132
i32 133, label %type_133
i32 134, label %type_134
i32 135, label %type_135
i32 136, label %type_136
i32 137, label %type_137
i32 138, label %type_138
i32 139, label %type_139
i32 140, label %type_140
i32 141, label %type_141
i32 142, label %type_142
i32 143, label %type_143
i32 144, label %type_144
i32 145, label %type_145
i32 146, label %type_146
i32 147, label %type_147
i32 148, label %type_148
i32 149, label %type_149
i32 150, label %type_150
i32 151, label %type_151
i32 152, label %type_152
i32 153, label %type_153
i32 154, label %type_154
i32 155, label %type_155
i32 156, label %type_156
i32 157, label %type_157
i32 158, label %type_158
i32 159, label %type_159
i32 160, label %type_160
i32 161, label %type_161
i32 162, label %type_162
i32 163, label %type_163
i32 164, label %type_164
i32 165, label %type_165
i32 166, label %type_166
i32 167, label %type_167
i32 168, label %type_168
i32 169, label %type_169
i32 170, label %type_170
i32 171, label %type_171
i32 172, label %type_172
i32 173, label %type_173
i32 174, label %type_174
i32 175, label %type_175
i32 176, label %type_176
i32 177, label %type_177
i32 178, label %type_178
i32 179, label %type_179
i32 180, label %type_180
i32 181, label %type_181
i32 182, label %type_182
i32 183, label %type_183
i32 184, label %type_184
i32 185, label %type_185
i32 186, label %type_186
i32 187, label %type_187
i32 188, label %type_188
i32 189, label %type_189
i32 190, label %type_190
i32 191, label %type_191
i32 192, label %type_192
i32 193, label %type_193
i32 194, label %type_194
i32 195, label %type_195
i32 196, label %type_196
i32 197, label %type_197
i32 198, label %type_198
i32 199, label %type_199
i32 200, label %type_200
i32 201, label %type_201
i32 202, label %type_202
i32 203, label %type_203
i32 204, label %type_204
i32 205, label %type_205
i32 206, label %type_206
i32 207, label %type_207
i32 208, label %type_208
i32 209, label %type_209
i32 210, label %type_210
i32 211, label %type_211
i32 212, label %type_212
i32 213, label %type_213
i32 214, label %type_214
i32 215, label %type_215
i32 216, label %type_216
i32 217, label %type_217
i32 218, label %type_218
i32 219, label %type_219
i32 220, label %type_220
i32 221, label %type_221
i32 222, label %type_222
i32 223, label %type_223
i32 224, label %type_224
i32 225, label %type_225
i32 226, label %type_226
i32 227, label %type_227
i32 228, label %type_228
i32 229, label %type_229
i32 230, label %type_230
i32 231, label %type_231
i32 232, label %type_232
i32 233, label %type_233
i32 234, label %type_234
i32 235, label %type_235
i32 236, label %type_236
i32 237, label %type_237
i32 238, label %type_238
i32 239, label %type_239
i32 240, label %type_240
i32 241, label %type_241
i32 242, label %type_242
i32 243, label %type_243
i32 244, label %type_244
i32 245, label %type_245
i32 246, label %type_246
i32 247, label %type_247
i32 248, label %type_248
i32 249, label %type_249
i32 250, label %type_250
i32 251, label %type_251
i32 252, label %type_252
i32 253, label %type_253
i32 254, label %type_254
i32 255, label %type_255
i32 256, label %type_256
i32 257, label %type_257
i32 258, label %type_258
i32 259, label %type_259
i32 260, label %type_260
i32 261, label %type_261
i32 262, label %type_262
i32 263, label %type_263
i32 264, label %type_264
i32 265, label %type_265
i32 266, label %type_266
i32 267, label %type_267
i32 268, label %type_268
i32 269, label %type_269
i32 270, label %type_270
i32 271, label %type_271
i32 272, label %type_272
i32 273, label %type_273
i32 274, label %type_274
i32 275, label %type_275
i32 276, label %type_276
i32 277, label %type_277
i32 278, label %type_278
i32 279, label %type_279
i32 280, label %type_280
i32 281, label %type_281
i32 282, label %type_282
i32 283, label %type_283
i32 284, label %type_284
i32 285, label %type_285
i32 286, label %type_286
i32 287, label %type_287
i32 288, label %type_288
i32 289, label %type_289
i32 290, label %type_290
i32 291, label %type_291
i32 292, label %type_292
i32 293, label %type_293
i32 294, label %type_294
i32 295, label %type_295
i32 296, label %type_296
i32 297, label %type_297
i32 298, label %type_298
i32 299, label %type_299
i32 300, label %type_300
i32 301, label %type_301
i32 302, label %type_302
i32 303, label %type_303
i32 304, label %type_304
i32 305, label %type_305
i32 306, label %type_306
i32 307, label %type_307
i32 308, label %type_308
i32 309, label %type_309
i32 310, label %type_310
i32 311, label %type_311
i32 312, label %type_312
i32 313, label %type_313
i32 314, label %type_314
i32 315, label %type_315
i32 316, label %type_316
i32 317, label %type_317
i32 318, label %type_318
i32 319, label %type_319
i32 320, label %type_320
i32 321, label %type_321
i32 322, label %type_322
i32 323, label %type_323
i32 324, label %type_324
i32 325, label %type_325
i32 326, label %type_326
i32 327, label %type_327
i32 328, label %type_328
i32 329, label %type_329
i32 330, label %type_330
i32 331, label %type_331
i32 332, label %type_332
i32 333, label %type_333
i32 334, label %type_334
i32 335, label %type_335
i32 336, label %type_336
i32 337, label %type_337
i32 338, label %type_338
i32 339, label %type_339
i32 340, label %type_340
i32 341, label %type_341
i32 342, label %type_342
i32 343, label %type_343
i32 344, label %type_344
i32 345, label %type_345
i32 346, label %type_346
i32 347, label %type_347
i32 348, label %type_348
i32 349, label %type_349
i32 350, label %type_350
i32 351, label %type_351
i32 352, label %type_352
i32 353, label %type_353
i32 354, label %type_354
i32 355, label %type_355
i32 356, label %type_356
i32 357, label %type_357
i32 358, label %type_358
i32 359, label %type_359
i32 360, label %type_360
i32 361, label %type_361
i32 362, label %type_362
i32 363, label %type_363
i32 364, label %type_364
i32 365, label %type_365
i32 366, label %type_366
i32 367, label %type_367
i32 368, label %type_368
i32 369, label %type_369
i32 370, label %type_370
i32 371, label %type_371
i32 372, label %type_372
i32 373, label %type_373
i32 374, label %type_374
i32 375, label %type_375
i32 376, label %type_376
i32 377, label %type_377
i32 378, label %type_378
i32 379, label %type_379
i32 380, label %type_380
i32 381, label %type_381
i32 382, label %type_382
i32 383, label %type_383
i32 384, label %type_384
i32 385, label %type_385
i32 386, label %type_386
i32 387, label %type_387
i32 388, label %type_388
i32 389, label %type_389
i32 390, label %type_390
i32 391, label %type_391
i32 392, label %type_392
i32 393, label %type_393
i32 394, label %type_394
i32 395, label %type_395
i32 396, label %type_396
i32 397, label %type_397
i32 398, label %type_398
i32 399, label %type_399
i32 400, label %type_400
i32 401, label %type_401
i32 402, label %type_402
i32 403, label %type_403
i32 404, label %type_404
i32 405, label %type_405
i32 406, label %type_406
i32 407, label %type_407
i32 408, label %type_408
i32 409, label %type_409
i32 410, label %type_410
i32 411, label %type_411
i32 412, label %type_412
i32 413, label %type_413
i32 414, label %type_414
i32 415, label %type_415
i32 416, label %type_416
i32 417, label %type_417
i32 418, label %type_418
i32 419, label %type_419
i32 420, label %type_420
i32 421, label %type_421
i32 422, label %type_422
i32 423, label %type_423
i32 424, label %type_424
i32 425, label %type_425
i32 426, label %type_426
i32 427, label %type_427
i32 428, label %type_428
i32 429, label %type_429
i32 430, label %type_430
i32 431, label %type_431
i32 432, label %type_432
i32 433, label %type_433
i32 434, label %type_434
i32 435, label %type_435
i32 436, label %type_436
i32 437, label %type_437
i32 438, label %type_438
i32 439, label %type_439
i32 440, label %type_440
i32 441, label %type_441
i32 442, label %type_442
i32 443, label %type_443
i32 444, label %type_444
i32 445, label %type_445
i32 446, label %type_446
i32 447, label %type_447
i32 448, label %type_448
i32 449, label %type_449
i32 450, label %type_450
i32 451, label %type_451
i32 452, label %type_452
i32 453, label %type_453
i32 454, label %type_454
i32 455, label %type_455
i32 456, label %type_456
i32 457, label %type_457
i32 458, label %type_458
i32 459, label %type_459
i32 460, label %type_460
i32 461, label %type_461
i32 462, label %type_462
i32 463, label %type_463
i32 464, label %type_464
i32 465, label %type_465
i32 466, label %type_466
i32 467, label %type_467
i32 468, label %type_468
i32 473, label %type_473
i32 476, label %type_476
i32 478, label %type_478
i32 480, label %type_480
i32 482, label %type_482
i32 484, label %type_484
i32 486, label %type_486
i32 495, label %type_495
i32 497, label %type_497
i32 499, label %type_499
i32 516, label %type_516
i32 518, label %type_518
i32 520, label %type_520
i32 522, label %type_522
i32 529, label %type_529
i32 532, label %type_532
i32 598, label %type_598
i32 602, label %type_602
i32 614, label %type_614
i32 621, label %type_621
i32 623, label %type_623
i32 625, label %type_625
i32 627, label %type_627
i32 629, label %type_629
i32 636, label %type_636
i32 639, label %type_639
i32 717, label %type_717
i32 719, label %type_719
i32 722, label %type_722
i32 724, label %type_724
i32 726, label %type_726
i32 729, label %type_729
i32 731, label %type_731
i32 733, label %type_733
i32 735, label %type_735
i32 737, label %type_737
i32 745, label %type_745
i32 747, label %type_747
i32 749, label %type_749
i32 763, label %type_763
i32 796, label %type_796
i32 798, label %type_798
i32 800, label %type_800
i32 802, label %type_802
i32 806, label %type_806
i32 808, label %type_808
i32 811, label %type_811
i32 819, label %type_819
i32 821, label %type_821
i32 823, label %type_823
i32 836, label %type_836
i32 838, label %type_838
i32 840, label %type_840
i32 842, label %type_842
i32 844, label %type_844
i32 846, label %type_846
i32 848, label %type_848
i32 850, label %type_850
i32 852, label %type_852
i32 854, label %type_854
i32 859, label %type_859
i32 865, label %type_865
i32 867, label %type_867
i32 869, label %type_869
i32 876, label %type_876
i32 879, label %type_879
i32 927, label %type_927
i32 929, label %type_929
i32 956, label %type_956
i32 1075, label %type_1075
i32 1077, label %type_1077
i32 1079, label %type_1079
i32 1081, label %type_1081
i32 1083, label %type_1083
i32 1085, label %type_1085
i32 1087, label %type_1087
i32 1089, label %type_1089
i32 1091, label %type_1091
i32 1093, label %type_1093
i32 1095, label %type_1095
i32 1097, label %type_1097
i32 1099, label %type_1099
i32 1101, label %type_1101
i32 1103, label %type_1103
i32 1105, label %type_1105
i32 1107, label %type_1107
], !dbg !3088
type_0: ; preds = %entry
ret i32 685, !dbg !3088
type_1: ; preds = %entry
ret i32 471, !dbg !3088
type_2: ; preds = %entry
ret i32 475, !dbg !3088
type_3: ; preds = %entry
ret i32 488, !dbg !3088
type_4: ; preds = %entry
ret i32 489, !dbg !3088
type_5: ; preds = %entry
ret i32 490, !dbg !3088
type_6: ; preds = %entry
ret i32 491, !dbg !3088
type_7: ; preds = %entry
ret i32 492, !dbg !3088
type_8: ; preds = %entry
ret i32 493, !dbg !3088
type_9: ; preds = %entry
ret i32 494, !dbg !3088
type_10: ; preds = %entry
ret i32 501, !dbg !3088
type_11: ; preds = %entry
ret i32 502, !dbg !3088
type_12: ; preds = %entry
ret i32 503, !dbg !3088
type_13: ; preds = %entry
ret i32 504, !dbg !3088
type_14: ; preds = %entry
ret i32 505, !dbg !3088
type_15: ; preds = %entry
ret i32 506, !dbg !3088
type_16: ; preds = %entry
ret i32 507, !dbg !3088
type_17: ; preds = %entry
ret i32 508, !dbg !3088
type_18: ; preds = %entry
ret i32 509, !dbg !3088
type_19: ; preds = %entry
ret i32 510, !dbg !3088
type_20: ; preds = %entry
ret i32 511, !dbg !3088
type_21: ; preds = %entry
ret i32 512, !dbg !3088
type_22: ; preds = %entry
ret i32 513, !dbg !3088
type_23: ; preds = %entry
ret i32 514, !dbg !3088
type_24: ; preds = %entry
ret i32 472, !dbg !3088
type_25: ; preds = %entry
ret i32 524, !dbg !3088
type_26: ; preds = %entry
ret i32 525, !dbg !3088
type_27: ; preds = %entry
ret i32 526, !dbg !3088
type_28: ; preds = %entry
ret i32 527, !dbg !3088
type_29: ; preds = %entry
ret i32 528, !dbg !3088
type_30: ; preds = %entry
ret i32 531, !dbg !3088
type_31: ; preds = %entry
ret i32 534, !dbg !3088
type_32: ; preds = %entry
ret i32 535, !dbg !3088
type_33: ; preds = %entry
ret i32 536, !dbg !3088
type_34: ; preds = %entry
ret i32 537, !dbg !3088
type_35: ; preds = %entry
ret i32 538, !dbg !3088
type_36: ; preds = %entry
ret i32 515, !dbg !3088
type_37: ; preds = %entry
ret i32 539, !dbg !3088
type_38: ; preds = %entry
ret i32 541, !dbg !3088
type_39: ; preds = %entry
ret i32 542, !dbg !3088
type_40: ; preds = %entry
ret i32 543, !dbg !3088
type_41: ; preds = %entry
ret i32 544, !dbg !3088
type_42: ; preds = %entry
ret i32 545, !dbg !3088
type_43: ; preds = %entry
ret i32 546, !dbg !3088
type_44: ; preds = %entry
ret i32 547, !dbg !3088
type_45: ; preds = %entry
ret i32 548, !dbg !3088
type_46: ; preds = %entry
ret i32 549, !dbg !3088
type_47: ; preds = %entry
ret i32 550, !dbg !3088
type_48: ; preds = %entry
ret i32 552, !dbg !3088
type_49: ; preds = %entry
ret i32 551, !dbg !3088
type_50: ; preds = %entry
ret i32 553, !dbg !3088
type_51: ; preds = %entry
ret i32 554, !dbg !3088
type_52: ; preds = %entry
ret i32 555, !dbg !3088
type_53: ; preds = %entry
ret i32 556, !dbg !3088
type_54: ; preds = %entry
ret i32 557, !dbg !3088
type_55: ; preds = %entry
ret i32 558, !dbg !3088
type_56: ; preds = %entry
ret i32 559, !dbg !3088
type_57: ; preds = %entry
ret i32 560, !dbg !3088
type_58: ; preds = %entry
ret i32 561, !dbg !3088
type_59: ; preds = %entry
ret i32 562, !dbg !3088
type_60: ; preds = %entry
ret i32 563, !dbg !3088
type_61: ; preds = %entry
ret i32 540, !dbg !3088
type_62: ; preds = %entry
ret i32 564, !dbg !3088
type_63: ; preds = %entry
ret i32 565, !dbg !3088
type_64: ; preds = %entry
ret i32 566, !dbg !3088
type_65: ; preds = %entry
ret i32 567, !dbg !3088
type_66: ; preds = %entry
ret i32 568, !dbg !3088
type_67: ; preds = %entry
ret i32 569, !dbg !3088
type_68: ; preds = %entry
ret i32 570, !dbg !3088
type_69: ; preds = %entry
ret i32 571, !dbg !3088
type_70: ; preds = %entry
ret i32 572, !dbg !3088
type_71: ; preds = %entry
ret i32 573, !dbg !3088
type_72: ; preds = %entry
ret i32 574, !dbg !3088
type_73: ; preds = %entry
ret i32 575, !dbg !3088
type_74: ; preds = %entry
ret i32 576, !dbg !3088
type_75: ; preds = %entry
ret i32 577, !dbg !3088
type_76: ; preds = %entry
ret i32 578, !dbg !3088
type_77: ; preds = %entry
ret i32 580, !dbg !3088
type_78: ; preds = %entry
ret i32 582, !dbg !3088
type_79: ; preds = %entry
ret i32 581, !dbg !3088
type_80: ; preds = %entry
ret i32 583, !dbg !3088
type_81: ; preds = %entry
ret i32 584, !dbg !3088
type_82: ; preds = %entry
ret i32 585, !dbg !3088
type_83: ; preds = %entry
ret i32 586, !dbg !3088
type_84: ; preds = %entry
ret i32 587, !dbg !3088
type_85: ; preds = %entry
ret i32 588, !dbg !3088
type_86: ; preds = %entry
ret i32 589, !dbg !3088
type_87: ; preds = %entry
ret i32 579, !dbg !3088
type_88: ; preds = %entry
ret i32 590, !dbg !3088
type_89: ; preds = %entry
ret i32 591, !dbg !3088
type_90: ; preds = %entry
ret i32 592, !dbg !3088
type_91: ; preds = %entry
ret i32 593, !dbg !3088
type_92: ; preds = %entry
ret i32 594, !dbg !3088
type_93: ; preds = %entry
ret i32 595, !dbg !3088
type_94: ; preds = %entry
ret i32 596, !dbg !3088
type_95: ; preds = %entry
ret i32 601, !dbg !3088
type_96: ; preds = %entry
ret i32 607, !dbg !3088
type_97: ; preds = %entry
ret i32 605, !dbg !3088
type_98: ; preds = %entry
ret i32 608, !dbg !3088
type_99: ; preds = %entry
ret i32 606, !dbg !3088
type_100: ; preds = %entry
ret i32 609, !dbg !3088
type_101: ; preds = %entry
ret i32 600, !dbg !3088
type_102: ; preds = %entry
ret i32 604, !dbg !3088
type_103: ; preds = %entry
ret i32 597, !dbg !3088
type_104: ; preds = %entry
ret i32 610, !dbg !3088
type_105: ; preds = %entry
ret i32 611, !dbg !3088
type_106: ; preds = %entry
ret i32 613, !dbg !3088
type_107: ; preds = %entry
ret i32 616, !dbg !3088
type_108: ; preds = %entry
ret i32 617, !dbg !3088
type_109: ; preds = %entry
ret i32 618, !dbg !3088
type_110: ; preds = %entry
ret i32 612, !dbg !3088
type_111: ; preds = %entry
ret i32 619, !dbg !3088
type_112: ; preds = %entry
ret i32 631, !dbg !3088
type_113: ; preds = %entry
ret i32 632, !dbg !3088
type_114: ; preds = %entry
ret i32 633, !dbg !3088
type_115: ; preds = %entry
ret i32 634, !dbg !3088
type_116: ; preds = %entry
ret i32 635, !dbg !3088
type_117: ; preds = %entry
ret i32 638, !dbg !3088
type_118: ; preds = %entry
ret i32 641, !dbg !3088
type_119: ; preds = %entry
ret i32 642, !dbg !3088
type_120: ; preds = %entry
ret i32 643, !dbg !3088
type_121: ; preds = %entry
ret i32 644, !dbg !3088
type_122: ; preds = %entry
ret i32 645, !dbg !3088
type_123: ; preds = %entry
ret i32 620, !dbg !3088
type_124: ; preds = %entry
ret i32 646, !dbg !3088
type_125: ; preds = %entry
ret i32 647, !dbg !3088
type_126: ; preds = %entry
ret i32 648, !dbg !3088
type_127: ; preds = %entry
ret i32 649, !dbg !3088
type_128: ; preds = %entry
ret i32 650, !dbg !3088
type_129: ; preds = %entry
ret i32 651, !dbg !3088
type_130: ; preds = %entry
ret i32 652, !dbg !3088
type_131: ; preds = %entry
ret i32 653, !dbg !3088
type_132: ; preds = %entry
ret i32 654, !dbg !3088
type_133: ; preds = %entry
ret i32 655, !dbg !3088
type_134: ; preds = %entry
ret i32 656, !dbg !3088
type_135: ; preds = %entry
ret i32 657, !dbg !3088
type_136: ; preds = %entry
ret i32 658, !dbg !3088
type_137: ; preds = %entry
ret i32 659, !dbg !3088
type_138: ; preds = %entry
ret i32 660, !dbg !3088
type_139: ; preds = %entry
ret i32 661, !dbg !3088
type_140: ; preds = %entry
ret i32 662, !dbg !3088
type_141: ; preds = %entry
ret i32 663, !dbg !3088
type_142: ; preds = %entry
ret i32 664, !dbg !3088
type_143: ; preds = %entry
ret i32 665, !dbg !3088
type_144: ; preds = %entry
ret i32 666, !dbg !3088
type_145: ; preds = %entry
ret i32 667, !dbg !3088
type_146: ; preds = %entry
ret i32 668, !dbg !3088
type_147: ; preds = %entry
ret i32 470, !dbg !3088
type_148: ; preds = %entry
ret i32 672, !dbg !3088
type_149: ; preds = %entry
ret i32 673, !dbg !3088
type_150: ; preds = %entry
ret i32 674, !dbg !3088
type_151: ; preds = %entry
ret i32 675, !dbg !3088
type_152: ; preds = %entry
ret i32 676, !dbg !3088
type_153: ; preds = %entry
ret i32 677, !dbg !3088
type_154: ; preds = %entry
ret i32 678, !dbg !3088
type_155: ; preds = %entry
ret i32 679, !dbg !3088
type_156: ; preds = %entry
ret i32 680, !dbg !3088
type_157: ; preds = %entry
ret i32 681, !dbg !3088
type_158: ; preds = %entry
ret i32 671, !dbg !3088
type_159: ; preds = %entry
ret i32 683, !dbg !3088
type_160: ; preds = %entry
ret i32 684, !dbg !3088
type_161: ; preds = %entry
ret i32 682, !dbg !3088
type_162: ; preds = %entry
ret i32 670, !dbg !3088
type_163: ; preds = %entry
ret i32 686, !dbg !3088
type_164: ; preds = %entry
ret i32 687, !dbg !3088
type_165: ; preds = %entry
ret i32 688, !dbg !3088
type_166: ; preds = %entry
ret i32 690, !dbg !3088
type_167: ; preds = %entry
ret i32 691, !dbg !3088
type_168: ; preds = %entry
ret i32 692, !dbg !3088
type_169: ; preds = %entry
ret i32 693, !dbg !3088
type_170: ; preds = %entry
ret i32 694, !dbg !3088
type_171: ; preds = %entry
ret i32 695, !dbg !3088
type_172: ; preds = %entry
ret i32 696, !dbg !3088
type_173: ; preds = %entry
ret i32 697, !dbg !3088
type_174: ; preds = %entry
ret i32 698, !dbg !3088
type_175: ; preds = %entry
ret i32 699, !dbg !3088
type_176: ; preds = %entry
ret i32 700, !dbg !3088
type_177: ; preds = %entry
ret i32 701, !dbg !3088
type_178: ; preds = %entry
ret i32 702, !dbg !3088
type_179: ; preds = %entry
ret i32 703, !dbg !3088
type_180: ; preds = %entry
ret i32 704, !dbg !3088
type_181: ; preds = %entry
ret i32 705, !dbg !3088
type_182: ; preds = %entry
ret i32 706, !dbg !3088
type_183: ; preds = %entry
ret i32 707, !dbg !3088
type_184: ; preds = %entry
ret i32 708, !dbg !3088
type_185: ; preds = %entry
ret i32 709, !dbg !3088
type_186: ; preds = %entry
ret i32 710, !dbg !3088
type_187: ; preds = %entry
ret i32 711, !dbg !3088
type_188: ; preds = %entry
ret i32 712, !dbg !3088
type_189: ; preds = %entry
ret i32 713, !dbg !3088
type_190: ; preds = %entry
ret i32 714, !dbg !3088
type_191: ; preds = %entry
ret i32 715, !dbg !3088
type_192: ; preds = %entry
ret i32 716, !dbg !3088
type_193: ; preds = %entry
ret i32 721, !dbg !3088
type_194: ; preds = %entry
ret i32 728, !dbg !3088
type_195: ; preds = %entry
ret i32 739, !dbg !3088
type_196: ; preds = %entry
ret i32 740, !dbg !3088
type_197: ; preds = %entry
ret i32 741, !dbg !3088
type_198: ; preds = %entry
ret i32 742, !dbg !3088
type_199: ; preds = %entry
ret i32 743, !dbg !3088
type_200: ; preds = %entry
ret i32 744, !dbg !3088
type_201: ; preds = %entry
ret i32 751, !dbg !3088
type_202: ; preds = %entry
ret i32 752, !dbg !3088
type_203: ; preds = %entry
ret i32 753, !dbg !3088
type_204: ; preds = %entry
ret i32 754, !dbg !3088
type_205: ; preds = %entry
ret i32 755, !dbg !3088
type_206: ; preds = %entry
ret i32 756, !dbg !3088
type_207: ; preds = %entry
ret i32 757, !dbg !3088
type_208: ; preds = %entry
ret i32 758, !dbg !3088
type_209: ; preds = %entry
ret i32 759, !dbg !3088
type_210: ; preds = %entry
ret i32 760, !dbg !3088
type_211: ; preds = %entry
ret i32 761, !dbg !3088
type_212: ; preds = %entry
ret i32 762, !dbg !3088
type_213: ; preds = %entry
ret i32 765, !dbg !3088
type_214: ; preds = %entry
ret i32 766, !dbg !3088
type_215: ; preds = %entry
ret i32 767, !dbg !3088
type_216: ; preds = %entry
ret i32 768, !dbg !3088
type_217: ; preds = %entry
ret i32 769, !dbg !3088
type_218: ; preds = %entry
ret i32 770, !dbg !3088
type_219: ; preds = %entry
ret i32 771, !dbg !3088
type_220: ; preds = %entry
ret i32 772, !dbg !3088
type_221: ; preds = %entry
ret i32 773, !dbg !3088
type_222: ; preds = %entry
ret i32 774, !dbg !3088
type_223: ; preds = %entry
ret i32 775, !dbg !3088
type_224: ; preds = %entry
ret i32 776, !dbg !3088
type_225: ; preds = %entry
ret i32 777, !dbg !3088
type_226: ; preds = %entry
ret i32 778, !dbg !3088
type_227: ; preds = %entry
ret i32 779, !dbg !3088
type_228: ; preds = %entry
ret i32 780, !dbg !3088
type_229: ; preds = %entry
ret i32 781, !dbg !3088
type_230: ; preds = %entry
ret i32 782, !dbg !3088
type_231: ; preds = %entry
ret i32 783, !dbg !3088
type_232: ; preds = %entry
ret i32 784, !dbg !3088
type_233: ; preds = %entry
ret i32 785, !dbg !3088
type_234: ; preds = %entry
ret i32 786, !dbg !3088
type_235: ; preds = %entry
ret i32 787, !dbg !3088
type_236: ; preds = %entry
ret i32 788, !dbg !3088
type_237: ; preds = %entry
ret i32 789, !dbg !3088
type_238: ; preds = %entry
ret i32 790, !dbg !3088
type_239: ; preds = %entry
ret i32 791, !dbg !3088
type_240: ; preds = %entry
ret i32 792, !dbg !3088
type_241: ; preds = %entry
ret i32 793, !dbg !3088
type_242: ; preds = %entry
ret i32 794, !dbg !3088
type_243: ; preds = %entry
ret i32 689, !dbg !3088
type_244: ; preds = %entry
ret i32 804, !dbg !3088
type_245: ; preds = %entry
ret i32 805, !dbg !3088
type_246: ; preds = %entry
ret i32 810, !dbg !3088
type_247: ; preds = %entry
ret i32 813, !dbg !3088
type_248: ; preds = %entry
ret i32 814, !dbg !3088
type_249: ; preds = %entry
ret i32 815, !dbg !3088
type_250: ; preds = %entry
ret i32 816, !dbg !3088
type_251: ; preds = %entry
ret i32 817, !dbg !3088
type_252: ; preds = %entry
ret i32 818, !dbg !3088
type_253: ; preds = %entry
ret i32 825, !dbg !3088
type_254: ; preds = %entry
ret i32 826, !dbg !3088
type_255: ; preds = %entry
ret i32 827, !dbg !3088
type_256: ; preds = %entry
ret i32 828, !dbg !3088
type_257: ; preds = %entry
ret i32 829, !dbg !3088
type_258: ; preds = %entry
ret i32 830, !dbg !3088
type_259: ; preds = %entry
ret i32 831, !dbg !3088
type_260: ; preds = %entry
ret i32 832, !dbg !3088
type_261: ; preds = %entry
ret i32 833, !dbg !3088
type_262: ; preds = %entry
ret i32 834, !dbg !3088
type_263: ; preds = %entry
ret i32 835, !dbg !3088
type_264: ; preds = %entry
ret i32 856, !dbg !3088
type_265: ; preds = %entry
ret i32 857, !dbg !3088
type_266: ; preds = %entry
ret i32 858, !dbg !3088
type_267: ; preds = %entry
ret i32 861, !dbg !3088
type_268: ; preds = %entry
ret i32 862, !dbg !3088
type_269: ; preds = %entry
ret i32 863, !dbg !3088
type_270: ; preds = %entry
ret i32 864, !dbg !3088
type_271: ; preds = %entry
ret i32 871, !dbg !3088
type_272: ; preds = %entry
ret i32 872, !dbg !3088
type_273: ; preds = %entry
ret i32 873, !dbg !3088
type_274: ; preds = %entry
ret i32 874, !dbg !3088
type_275: ; preds = %entry
ret i32 875, !dbg !3088
type_276: ; preds = %entry
ret i32 878, !dbg !3088
type_277: ; preds = %entry
ret i32 881, !dbg !3088
type_278: ; preds = %entry
ret i32 882, !dbg !3088
type_279: ; preds = %entry
ret i32 883, !dbg !3088
type_280: ; preds = %entry
ret i32 884, !dbg !3088
type_281: ; preds = %entry
ret i32 885, !dbg !3088
type_282: ; preds = %entry
ret i32 886, !dbg !3088
type_283: ; preds = %entry
ret i32 887, !dbg !3088
type_284: ; preds = %entry
ret i32 888, !dbg !3088
type_285: ; preds = %entry
ret i32 889, !dbg !3088
type_286: ; preds = %entry
ret i32 890, !dbg !3088
type_287: ; preds = %entry
ret i32 891, !dbg !3088
type_288: ; preds = %entry
ret i32 892, !dbg !3088
type_289: ; preds = %entry
ret i32 893, !dbg !3088
type_290: ; preds = %entry
ret i32 894, !dbg !3088
type_291: ; preds = %entry
ret i32 895, !dbg !3088
type_292: ; preds = %entry
ret i32 896, !dbg !3088
type_293: ; preds = %entry
ret i32 795, !dbg !3088
type_294: ; preds = %entry
ret i32 897, !dbg !3088
type_295: ; preds = %entry
ret i32 899, !dbg !3088
type_296: ; preds = %entry
ret i32 900, !dbg !3088
type_297: ; preds = %entry
ret i32 901, !dbg !3088
type_298: ; preds = %entry
ret i32 902, !dbg !3088
type_299: ; preds = %entry
ret i32 903, !dbg !3088
type_300: ; preds = %entry
ret i32 904, !dbg !3088
type_301: ; preds = %entry
ret i32 905, !dbg !3088
type_302: ; preds = %entry
ret i32 906, !dbg !3088
type_303: ; preds = %entry
ret i32 907, !dbg !3088
type_304: ; preds = %entry
ret i32 908, !dbg !3088
type_305: ; preds = %entry
ret i32 909, !dbg !3088
type_306: ; preds = %entry
ret i32 910, !dbg !3088
type_307: ; preds = %entry
ret i32 911, !dbg !3088
type_308: ; preds = %entry
ret i32 912, !dbg !3088
type_309: ; preds = %entry
ret i32 913, !dbg !3088
type_310: ; preds = %entry
ret i32 914, !dbg !3088
type_311: ; preds = %entry
ret i32 915, !dbg !3088
type_312: ; preds = %entry
ret i32 916, !dbg !3088
type_313: ; preds = %entry
ret i32 917, !dbg !3088
type_314: ; preds = %entry
ret i32 918, !dbg !3088
type_315: ; preds = %entry
ret i32 919, !dbg !3088
type_316: ; preds = %entry
ret i32 920, !dbg !3088
type_317: ; preds = %entry
ret i32 921, !dbg !3088
type_318: ; preds = %entry
ret i32 922, !dbg !3088
type_319: ; preds = %entry
ret i32 898, !dbg !3088
type_320: ; preds = %entry
ret i32 925, !dbg !3088
type_321: ; preds = %entry
ret i32 926, !dbg !3088
type_322: ; preds = %entry
ret i32 931, !dbg !3088
type_323: ; preds = %entry
ret i32 924, !dbg !3088
type_324: ; preds = %entry
ret i32 932, !dbg !3088
type_325: ; preds = %entry
ret i32 933, !dbg !3088
type_326: ; preds = %entry
ret i32 934, !dbg !3088
type_327: ; preds = %entry
ret i32 935, !dbg !3088
type_328: ; preds = %entry
ret i32 936, !dbg !3088
type_329: ; preds = %entry
ret i32 937, !dbg !3088
type_330: ; preds = %entry
ret i32 938, !dbg !3088
type_331: ; preds = %entry
ret i32 939, !dbg !3088
type_332: ; preds = %entry
ret i32 940, !dbg !3088
type_333: ; preds = %entry
ret i32 941, !dbg !3088
type_334: ; preds = %entry
ret i32 942, !dbg !3088
type_335: ; preds = %entry
ret i32 943, !dbg !3088
type_336: ; preds = %entry
ret i32 944, !dbg !3088
type_337: ; preds = %entry
ret i32 945, !dbg !3088
type_338: ; preds = %entry
ret i32 946, !dbg !3088
type_339: ; preds = %entry
ret i32 947, !dbg !3088
type_340: ; preds = %entry
ret i32 948, !dbg !3088
type_341: ; preds = %entry
ret i32 949, !dbg !3088
type_342: ; preds = %entry
ret i32 950, !dbg !3088
type_343: ; preds = %entry
ret i32 951, !dbg !3088
type_344: ; preds = %entry
ret i32 952, !dbg !3088
type_345: ; preds = %entry
ret i32 953, !dbg !3088
type_346: ; preds = %entry
ret i32 954, !dbg !3088
type_347: ; preds = %entry
ret i32 955, !dbg !3088
type_348: ; preds = %entry
ret i32 958, !dbg !3088
type_349: ; preds = %entry
ret i32 959, !dbg !3088
type_350: ; preds = %entry
ret i32 960, !dbg !3088
type_351: ; preds = %entry
ret i32 961, !dbg !3088
type_352: ; preds = %entry
ret i32 962, !dbg !3088
type_353: ; preds = %entry
ret i32 963, !dbg !3088
type_354: ; preds = %entry
ret i32 964, !dbg !3088
type_355: ; preds = %entry
ret i32 965, !dbg !3088
type_356: ; preds = %entry
ret i32 966, !dbg !3088
type_357: ; preds = %entry
ret i32 967, !dbg !3088
type_358: ; preds = %entry
ret i32 968, !dbg !3088
type_359: ; preds = %entry
ret i32 969, !dbg !3088
type_360: ; preds = %entry
ret i32 970, !dbg !3088
type_361: ; preds = %entry
ret i32 971, !dbg !3088
type_362: ; preds = %entry
ret i32 972, !dbg !3088
type_363: ; preds = %entry
ret i32 973, !dbg !3088
type_364: ; preds = %entry
ret i32 974, !dbg !3088
type_365: ; preds = %entry
ret i32 975, !dbg !3088
type_366: ; preds = %entry
ret i32 976, !dbg !3088
type_367: ; preds = %entry
ret i32 977, !dbg !3088
type_368: ; preds = %entry
ret i32 978, !dbg !3088
type_369: ; preds = %entry
ret i32 979, !dbg !3088
type_370: ; preds = %entry
ret i32 980, !dbg !3088
type_371: ; preds = %entry
ret i32 981, !dbg !3088
type_372: ; preds = %entry
ret i32 982, !dbg !3088
type_373: ; preds = %entry
ret i32 983, !dbg !3088
type_374: ; preds = %entry
ret i32 984, !dbg !3088
type_375: ; preds = %entry
ret i32 985, !dbg !3088
type_376: ; preds = %entry
ret i32 986, !dbg !3088
type_377: ; preds = %entry
ret i32 987, !dbg !3088
type_378: ; preds = %entry
ret i32 989, !dbg !3088
type_379: ; preds = %entry
ret i32 988, !dbg !3088
type_380: ; preds = %entry
ret i32 990, !dbg !3088
type_381: ; preds = %entry
ret i32 991, !dbg !3088
type_382: ; preds = %entry
ret i32 992, !dbg !3088
type_383: ; preds = %entry
ret i32 993, !dbg !3088
type_384: ; preds = %entry
ret i32 994, !dbg !3088
type_385: ; preds = %entry
ret i32 995, !dbg !3088
type_386: ; preds = %entry
ret i32 996, !dbg !3088
type_387: ; preds = %entry
ret i32 997, !dbg !3088
type_388: ; preds = %entry
ret i32 998, !dbg !3088
type_389: ; preds = %entry
ret i32 999, !dbg !3088
type_390: ; preds = %entry
ret i32 1000, !dbg !3088
type_391: ; preds = %entry
ret i32 1001, !dbg !3088
type_392: ; preds = %entry
ret i32 1002, !dbg !3088
type_393: ; preds = %entry
ret i32 1003, !dbg !3088
type_394: ; preds = %entry
ret i32 1004, !dbg !3088
type_395: ; preds = %entry
ret i32 1005, !dbg !3088
type_396: ; preds = %entry
ret i32 1006, !dbg !3088
type_397: ; preds = %entry
ret i32 1007, !dbg !3088
type_398: ; preds = %entry
ret i32 1008, !dbg !3088
type_399: ; preds = %entry
ret i32 1009, !dbg !3088
type_400: ; preds = %entry
ret i32 1010, !dbg !3088
type_401: ; preds = %entry
ret i32 1011, !dbg !3088
type_402: ; preds = %entry
ret i32 1012, !dbg !3088
type_403: ; preds = %entry
ret i32 1013, !dbg !3088
type_404: ; preds = %entry
ret i32 1014, !dbg !3088
type_405: ; preds = %entry
ret i32 1015, !dbg !3088
type_406: ; preds = %entry
ret i32 1017, !dbg !3088
type_407: ; preds = %entry
ret i32 1016, !dbg !3088
type_408: ; preds = %entry
ret i32 1018, !dbg !3088
type_409: ; preds = %entry
ret i32 1019, !dbg !3088
type_410: ; preds = %entry
ret i32 1020, !dbg !3088
type_411: ; preds = %entry
ret i32 1022, !dbg !3088
type_412: ; preds = %entry
ret i32 1023, !dbg !3088
type_413: ; preds = %entry
ret i32 1024, !dbg !3088
type_414: ; preds = %entry
ret i32 1025, !dbg !3088
type_415: ; preds = %entry
ret i32 1026, !dbg !3088
type_416: ; preds = %entry
ret i32 1027, !dbg !3088
type_417: ; preds = %entry
ret i32 1028, !dbg !3088
type_418: ; preds = %entry
ret i32 1029, !dbg !3088
type_419: ; preds = %entry
ret i32 1031, !dbg !3088
type_420: ; preds = %entry
ret i32 1030, !dbg !3088
type_421: ; preds = %entry
ret i32 1033, !dbg !3088
type_422: ; preds = %entry
ret i32 1034, !dbg !3088
type_423: ; preds = %entry
ret i32 1032, !dbg !3088
type_424: ; preds = %entry
ret i32 1035, !dbg !3088
type_425: ; preds = %entry
ret i32 1036, !dbg !3088
type_426: ; preds = %entry
ret i32 1037, !dbg !3088
type_427: ; preds = %entry
ret i32 1038, !dbg !3088
type_428: ; preds = %entry
ret i32 1039, !dbg !3088
type_429: ; preds = %entry
ret i32 1040, !dbg !3088
type_430: ; preds = %entry
ret i32 1041, !dbg !3088
type_431: ; preds = %entry
ret i32 1042, !dbg !3088
type_432: ; preds = %entry
ret i32 1043, !dbg !3088
type_433: ; preds = %entry
ret i32 1044, !dbg !3088
type_434: ; preds = %entry
ret i32 1045, !dbg !3088
type_435: ; preds = %entry
ret i32 1046, !dbg !3088
type_436: ; preds = %entry
ret i32 923, !dbg !3088
type_437: ; preds = %entry
ret i32 1073, !dbg !3088
type_438: ; preds = %entry
ret i32 1021, !dbg !3088
type_439: ; preds = %entry
ret i32 1047, !dbg !3088
type_440: ; preds = %entry
ret i32 1048, !dbg !3088
type_441: ; preds = %entry
ret i32 1049, !dbg !3088
type_442: ; preds = %entry
ret i32 1050, !dbg !3088
type_443: ; preds = %entry
ret i32 1051, !dbg !3088
type_444: ; preds = %entry
ret i32 1052, !dbg !3088
type_445: ; preds = %entry
ret i32 1053, !dbg !3088
type_446: ; preds = %entry
ret i32 1054, !dbg !3088
type_447: ; preds = %entry
ret i32 1055, !dbg !3088
type_448: ; preds = %entry
ret i32 1056, !dbg !3088
type_449: ; preds = %entry
ret i32 1057, !dbg !3088
type_450: ; preds = %entry
ret i32 1058, !dbg !3088
type_451: ; preds = %entry
ret i32 1059, !dbg !3088
type_452: ; preds = %entry
ret i32 1060, !dbg !3088
type_453: ; preds = %entry
ret i32 1061, !dbg !3088
type_454: ; preds = %entry
ret i32 1062, !dbg !3088
type_455: ; preds = %entry
ret i32 1063, !dbg !3088
type_456: ; preds = %entry
ret i32 1064, !dbg !3088
type_457: ; preds = %entry
ret i32 1065, !dbg !3088
type_458: ; preds = %entry
ret i32 1066, !dbg !3088
type_459: ; preds = %entry
ret i32 1067, !dbg !3088
type_460: ; preds = %entry
ret i32 1068, !dbg !3088
type_461: ; preds = %entry
ret i32 1069, !dbg !3088
type_462: ; preds = %entry
ret i32 1070, !dbg !3088
type_463: ; preds = %entry
ret i32 1071, !dbg !3088
type_464: ; preds = %entry
ret i32 1072, !dbg !3088
type_465: ; preds = %entry
ret i32 1074, !dbg !3088
type_466: ; preds = %entry
ret i32 1109, !dbg !3088
type_467: ; preds = %entry
ret i32 669, !dbg !3088
type_468: ; preds = %entry
ret i32 469, !dbg !3088
type_473: ; preds = %entry
ret i32 474, !dbg !3088
type_476: ; preds = %entry
ret i32 477, !dbg !3088
type_478: ; preds = %entry
ret i32 479, !dbg !3088
type_480: ; preds = %entry
ret i32 481, !dbg !3088
type_482: ; preds = %entry
ret i32 483, !dbg !3088
type_484: ; preds = %entry
ret i32 485, !dbg !3088
type_486: ; preds = %entry
ret i32 487, !dbg !3088
type_495: ; preds = %entry
ret i32 496, !dbg !3088
type_497: ; preds = %entry
ret i32 498, !dbg !3088
type_499: ; preds = %entry
ret i32 500, !dbg !3088
type_516: ; preds = %entry
ret i32 517, !dbg !3088
type_518: ; preds = %entry
ret i32 519, !dbg !3088
type_520: ; preds = %entry
ret i32 521, !dbg !3088
type_522: ; preds = %entry
ret i32 523, !dbg !3088
type_529: ; preds = %entry
ret i32 530, !dbg !3088
type_532: ; preds = %entry
ret i32 533, !dbg !3088
type_598: ; preds = %entry
ret i32 599, !dbg !3088
type_602: ; preds = %entry
ret i32 603, !dbg !3088
type_614: ; preds = %entry
ret i32 615, !dbg !3088
type_621: ; preds = %entry
ret i32 622, !dbg !3088
type_623: ; preds = %entry
ret i32 624, !dbg !3088
type_625: ; preds = %entry
ret i32 626, !dbg !3088
type_627: ; preds = %entry
ret i32 628, !dbg !3088
type_629: ; preds = %entry
ret i32 630, !dbg !3088
type_636: ; preds = %entry
ret i32 637, !dbg !3088
type_639: ; preds = %entry
ret i32 640, !dbg !3088
type_717: ; preds = %entry
ret i32 718, !dbg !3088
type_719: ; preds = %entry
ret i32 720, !dbg !3088
type_722: ; preds = %entry
ret i32 723, !dbg !3088
type_724: ; preds = %entry
ret i32 725, !dbg !3088
type_726: ; preds = %entry
ret i32 727, !dbg !3088
type_729: ; preds = %entry
ret i32 730, !dbg !3088
type_731: ; preds = %entry
ret i32 732, !dbg !3088
type_733: ; preds = %entry
ret i32 734, !dbg !3088
type_735: ; preds = %entry
ret i32 736, !dbg !3088
type_737: ; preds = %entry
ret i32 738, !dbg !3088
type_745: ; preds = %entry
ret i32 746, !dbg !3088
type_747: ; preds = %entry
ret i32 748, !dbg !3088
type_749: ; preds = %entry
ret i32 750, !dbg !3088
type_763: ; preds = %entry
ret i32 764, !dbg !3088
type_796: ; preds = %entry
ret i32 797, !dbg !3088
type_798: ; preds = %entry
ret i32 799, !dbg !3088
type_800: ; preds = %entry
ret i32 801, !dbg !3088
type_802: ; preds = %entry
ret i32 803, !dbg !3088
type_806: ; preds = %entry
ret i32 807, !dbg !3088
type_808: ; preds = %entry
ret i32 809, !dbg !3088
type_811: ; preds = %entry
ret i32 812, !dbg !3088
type_819: ; preds = %entry
ret i32 820, !dbg !3088
type_821: ; preds = %entry
ret i32 822, !dbg !3088
type_823: ; preds = %entry
ret i32 824, !dbg !3088
type_836: ; preds = %entry
ret i32 837, !dbg !3088
type_838: ; preds = %entry
ret i32 839, !dbg !3088
type_840: ; preds = %entry
ret i32 841, !dbg !3088
type_842: ; preds = %entry
ret i32 843, !dbg !3088
type_844: ; preds = %entry
ret i32 845, !dbg !3088
type_846: ; preds = %entry
ret i32 847, !dbg !3088
type_848: ; preds = %entry
ret i32 849, !dbg !3088
type_850: ; preds = %entry
ret i32 851, !dbg !3088
type_852: ; preds = %entry
ret i32 853, !dbg !3088
type_854: ; preds = %entry
ret i32 855, !dbg !3088
type_859: ; preds = %entry
ret i32 860, !dbg !3088
type_865: ; preds = %entry
ret i32 866, !dbg !3088
type_867: ; preds = %entry
ret i32 868, !dbg !3088
type_869: ; preds = %entry
ret i32 870, !dbg !3088
type_876: ; preds = %entry
ret i32 877, !dbg !3088
type_879: ; preds = %entry
ret i32 880, !dbg !3088
type_927: ; preds = %entry
ret i32 928, !dbg !3088
type_929: ; preds = %entry
ret i32 930, !dbg !3088
type_956: ; preds = %entry
ret i32 957, !dbg !3088
type_1075: ; preds = %entry
ret i32 1076, !dbg !3088
type_1077: ; preds = %entry
ret i32 1078, !dbg !3088
type_1079: ; preds = %entry
ret i32 1080, !dbg !3088
type_1081: ; preds = %entry
ret i32 1082, !dbg !3088
type_1083: ; preds = %entry
ret i32 1084, !dbg !3088
type_1085: ; preds = %entry
ret i32 1086, !dbg !3088
type_1087: ; preds = %entry
ret i32 1088, !dbg !3088
type_1089: ; preds = %entry
ret i32 1090, !dbg !3088
type_1091: ; preds = %entry
ret i32 1092, !dbg !3088
type_1093: ; preds = %entry
ret i32 1094, !dbg !3088
type_1095: ; preds = %entry
ret i32 1096, !dbg !3088
type_1097: ; preds = %entry
ret i32 1098, !dbg !3088
type_1099: ; preds = %entry
ret i32 1100, !dbg !3088
type_1101: ; preds = %entry
ret i32 1102, !dbg !3088
type_1103: ; preds = %entry
ret i32 1104, !dbg !3088
type_1105: ; preds = %entry
ret i32 1106, !dbg !3088
type_1107: ; preds = %entry
ret i32 1108, !dbg !3088
otherwise: ; preds = %entry
unreachable, !dbg !3088
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<Exception+:Class>:IO::FileDescriptor"(%"IO::FileDescriptor"* %self, i32 %obj) #0 !dbg !475 {
entry:
%0 = call %"IO::FileDescriptor"* @"*Exception+@Object::to_s<IO::FileDescriptor>:IO::FileDescriptor"(i32 %obj, %"IO::FileDescriptor"* %self), !dbg !3102
ret %"IO::FileDescriptor"* %self, !dbg !3102
}
; Function Attrs: uwtable
define internal %"IO::FileDescriptor"* @"*Exception+@Object::to_s<IO::FileDescriptor>:IO::FileDescriptor"(i32 %self, %"IO::FileDescriptor"* %io) #0 !dbg !476 {
entry:
%0 = icmp eq i32 563, %self, !dbg !3103
br i1 %0, label %current_def, label %next_def, !dbg !3103
current_def: ; preds = %entry
br label %exit, !dbg !3103
next_def: ; preds = %entry
%1 = icmp eq i32 562, %self, !dbg !3103
br i1 %1, label %current_def1, label %next_def2, !dbg !3103
exit: ; preds = %current_def45, %current_def43, %current_def41, %current_def39, %current_def37, %current_def35, %current_def33, %current_def31, %current_def29, %current_def27, %current_def25, %current_def23, %current_def21, %current_def19, %current_def17, %current_def15, %current_def13, %current_def11, %current_def9, %current_def7, %current_def5, %current_def3, %current_def1, %current_def
%2 = phi %String* [ bitcast ({ i32, i32, i32, [43 x i8] }* @"'Time::Location::Inv...'" to %String*), %current_def ], [ bitcast ({ i32, i32, i32, [41 x i8] }* @"'Time::Location::Inv...'.4" to %String*), %current_def1 ], [ bitcast ({ i32, i32, i32, [35 x i8] }* @"'Time::Location::Inv...'.5" to %String*), %current_def3 ], [ bitcast ({ i32, i32, i32, [20 x i8] }* @"'Time::Format::Error...'" to %String*), %current_def5 ], [ bitcast ({ i32, i32, i32, [34 x i8] }* @"'Time::FloatingTimeC...'" to %String*), %current_def7 ], [ bitcast ({ i32, i32, i32, [14 x i8] }* @"'Base64::Error'" to %String*), %current_def9 ], [ bitcast ({ i32, i32, i32, [22 x i8] }* @"'File::BadPatternErr...'" to %String*), %current_def11 ], [ bitcast ({ i32, i32, i32, [6 x i8] }* @"'Errno'" to %String*), %current_def13 ], [ bitcast ({ i32, i32, i32, [29 x i8] }* @"'ConcurrentExecution...'" to %String*), %current_def15 ], [ bitcast ({ i32, i32, i32, [26 x i8] }* @"'Concurrent::Cancele...'" to %String*), %current_def17 ], [ bitcast ({ i32, i32, i32, [21 x i8] }* @"'Channel::ClosedErro...'" to %String*), %current_def19 ], [ bitcast ({ i32, i32, i32, [13 x i8] }* @"'IO::EOFError'" to %String*), %current_def21 ], [ bitcast ({ i32, i32, i32, [10 x i8] }* @"'IO::Error'" to %String*), %current_def23 ], [ bitcast ({ i32, i32, i32, [12 x i8] }* @"'IO::Timeout'" to %String*), %current_def25 ], [ bitcast ({ i32, i32, i32, [23 x i8] }* @"'Enumerable::EmptyEr...'" to %String*), %current_def27 ], [ bitcast ({ i32, i32, i32, [20 x i8] }* @"'NotImplementedError...'" to %String*), %current_def29 ], [ bitcast ({ i32, i32, i32, [20 x i8] }* @"'DivisionByZeroError...'" to %String*), %current_def31 ], [ bitcast ({ i32, i32, i32, [9 x i8] }* @"'KeyError'" to %String*), %current_def33 ], [ bitcast ({ i32, i32, i32, [25 x i8] }* @"'InvalidByteSequence...'" to %String*), %current_def35 ], [ bitcast ({ i32, i32, i32, [14 x i8] }* @"'TypeCastError'" to %String*), %current_def37 ], [ bitcast ({ i32, i32, i32, [14 x i8] }* @"'ArgumentError'" to %String*), %current_def39 ], [ bitcast ({ i32, i32, i32, [11 x i8] }* @"'IndexError'" to %String*), %current_def41 ], [ bitcast ({ i32, i32, i32, [18 x i8] }* @"'Debug::ELF::Error'" to %String*), %current_def43 ], [ bitcast ({ i32, i32, i32, [10 x i8] }* @"'Exception'" to %String*), %current_def45 ], !dbg !3103
%3 = call %"IO::FileDescriptor"* @"*IO::FileDescriptor@IO#<<<String>:IO::FileDescriptor"(%"IO::FileDescriptor"* %io, %String* %2), !dbg !3104
ret %"IO::FileDescriptor"* %3, !dbg !3104
current_def1: ; preds = %next_def
br label %exit, !dbg !3103
next_def2: ; preds = %next_def
%4 = icmp eq i32 561, %self, !dbg !3103
br i1 %4, label %current_def3, label %next_def4, !dbg !3103
current_def3: ; preds = %next_def2
br label %exit, !dbg !3103
next_def4: ; preds = %next_def2
%5 = icmp eq i32 560, %self, !dbg !3103
br i1 %5, label %current_def5, label %next_def6, !dbg !3103
current_def5: ; preds = %next_def4
br label %exit, !dbg !3103
next_def6: ; preds = %next_def4
%6 = icmp eq i32 559, %self, !dbg !3103
br i1 %6, label %current_def7, label %next_def8, !dbg !3103
current_def7: ; preds = %next_def6
br label %exit, !dbg !3103
next_def8: ; preds = %next_def6
%7 = icmp eq i32 558, %self, !dbg !3103
br i1 %7, label %current_def9, label %next_def10, !dbg !3103
current_def9: ; preds = %next_def8
br label %exit, !dbg !3103
next_def10: ; preds = %next_def8
%8 = icmp eq i32 557, %self, !dbg !3103
br i1 %8, label %current_def11, label %next_def12, !dbg !3103
current_def11: ; preds = %next_def10
br label %exit, !dbg !3103
next_def12: ; preds = %next_def10
%9 = icmp eq i32 556, %self, !dbg !3103
br i1 %9, label %current_def13, label %next_def14, !dbg !3103
current_def13: ; preds = %next_def12
br label %exit, !dbg !3103
next_def14: ; preds = %next_def12
%10 = icmp eq i32 555, %self, !dbg !3103
br i1 %10, label %current_def15, label %next_def16, !dbg !3103
current_def15: ; preds = %next_def14
br label %exit, !dbg !3103
next_def16: ; preds = %next_def14
%11 = icmp eq i32 554, %self, !dbg !3103
br i1 %11, label %current_def17, label %next_def18, !dbg !3103
current_def17: ; preds = %next_def16
br label %exit, !dbg !3103
next_def18: ; preds = %next_def16
%12 = icmp eq i32 553, %self, !dbg !3103
br i1 %12, label %current_def19, label %next_def20, !dbg !3103
current_def19: ; preds = %next_def18
br label %exit, !dbg !3103
next_def20: ; preds = %next_def18
%13 = icmp eq i32 552, %self, !dbg !3103
br i1 %13, label %current_def21, label %next_def22, !dbg !3103
current_def21: ; preds = %next_def20
br label %exit, !dbg !3103
next_def22: ; preds = %next_def20
%14 = icmp eq i32 551, %self, !dbg !3103
br i1 %14, label %current_def23, label %next_def24, !dbg !3103
current_def23: ; preds = %next_def22
br label %exit, !dbg !3103
next_def24: ; preds = %next_def22
%15 = icmp eq i32 550, %self, !dbg !3103
br i1 %15, label %current_def25, label %next_def26, !dbg !3103
current_def25: ; preds = %next_def24
br label %exit, !dbg !3103
next_def26: ; preds = %next_def24
%16 = icmp eq i32 549, %self, !dbg !3103
br i1 %16, label %current_def27, label %next_def28, !dbg !3103
current_def27: ; preds = %next_def26
br label %exit, !dbg !3103
next_def28: ; preds = %next_def26
%17 = icmp eq i32 548, %self, !dbg !3103
br i1 %17, label %current_def29, label %next_def30, !dbg !3103
current_def29: ; preds = %next_def28
br label %exit, !dbg !3103
next_def30: ; preds = %next_def28
%18 = icmp eq i32 547, %self, !dbg !3103
br i1 %18, label %current_def31, label %next_def32, !dbg !3103
current_def31: ; preds = %next_def30
br label %exit, !dbg !3103
next_def32: ; preds = %next_def30
%19 = icmp eq i32 546, %self, !dbg !3103
br i1 %19, label %current_def33, label %next_def34, !dbg !3103
current_def33: ; preds = %next_def32
br label %exit, !dbg !3103
next_def34: ; preds = %next_def32
%20 = icmp eq i32 545, %self, !dbg !3103
br i1 %20, label %current_def35, label %next_def36, !dbg !3103
current_def35: ; preds = %next_def34
br label %exit, !dbg !3103
next_def36: ; preds = %next_def34
%21 = icmp eq i32 544, %self, !dbg !3103
br i1 %21, label %current_def37, label %next_def38, !dbg !3103
current_def37: ; preds = %next_def36
br label %exit, !dbg !3103
next_def38: ; preds = %next_def36
%22 = icmp eq i32 543, %self, !dbg !3103
br i1 %22, label %current_def39, label %next_def40, !dbg !3103
current_def39: ; preds = %next_def38
br label %exit, !dbg !3103
next_def40: ; preds = %next_def38
%23 = icmp eq i32 542, %self, !dbg !3103
br i1 %23, label %current_def41, label %next_def42, !dbg !3103
current_def41: ; preds = %next_def40
br label %exit, !dbg !3103
next_def42: ; preds = %next_def40
%24 = icmp eq i32 541, %self, !dbg !3103
br i1 %24, label %current_def43, label %next_def44, !dbg !3103
current_def43: ; preds = %next_def42
br label %exit, !dbg !3103
next_def44: ; preds = %next_def42
%25 = call i1 @"~match<Exception+:Class>"(i32 %self), !dbg !3103
br i1 %25, label %current_def45, label %next_def46, !dbg !3103
current_def45: ; preds = %next_def44
br label %exit, !dbg !3103
next_def46: ; preds = %next_def44
unreachable, !dbg !3103
}
define internal i1 @"~match<Exception+:Class>"(i32) {
entry:
%1 = icmp eq i32 1119, %0, !dbg !3103
%2 = icmp eq i32 540, %0, !dbg !3103
%3 = or i1 %1, %2, !dbg !3103
%4 = icmp eq i32 541, %0, !dbg !3103
%5 = or i1 %3, %4, !dbg !3103
%6 = icmp eq i32 542, %0, !dbg !3103
%7 = or i1 %5, %6, !dbg !3103
%8 = icmp eq i32 543, %0, !dbg !3103
%9 = or i1 %7, %8, !dbg !3103
%10 = icmp eq i32 544, %0, !dbg !3103
%11 = or i1 %9, %10, !dbg !3103
%12 = icmp eq i32 545, %0, !dbg !3103
%13 = or i1 %11, %12, !dbg !3103
%14 = icmp eq i32 546, %0, !dbg !3103
%15 = or i1 %13, %14, !dbg !3103
%16 = icmp eq i32 547, %0, !dbg !3103
%17 = or i1 %15, %16, !dbg !3103
%18 = icmp eq i32 548, %0, !dbg !3103
%19 = or i1 %17, %18, !dbg !3103
%20 = icmp eq i32 549, %0, !dbg !3103
%21 = or i1 %19, %20, !dbg !3103
%22 = icmp eq i32 550, %0, !dbg !3103
%23 = or i1 %21, %22, !dbg !3103
%24 = icmp eq i32 551, %0, !dbg !3103
%25 = or i1 %23, %24, !dbg !3103
%26 = icmp eq i32 552, %0, !dbg !3103
%27 = or i1 %25, %26, !dbg !3103
%28 = icmp eq i32 553, %0, !dbg !3103
%29 = or i1 %27, %28, !dbg !3103
%30 = icmp eq i32 554, %0, !dbg !3103
%31 = or i1 %29, %30, !dbg !3103
%32 = icmp eq i32 555, %0, !dbg !3103
%33 = or i1 %31, %32, !dbg !3103
%34 = icmp eq i32 556, %0, !dbg !3103
%35 = or i1 %33, %34, !dbg !3103
%36 = icmp eq i32 557, %0, !dbg !3103
%37 = or i1 %35, %36, !dbg !3103
%38 = icmp eq i32 558, %0, !dbg !3103
%39 = or i1 %37, %38, !dbg !3103
%40 = icmp eq i32 559, %0, !dbg !3103
%41 = or i1 %39, %40, !dbg !3103
%42 = icmp eq i32 560, %0, !dbg !3103
%43 = or i1 %41, %42, !dbg !3103
%44 = icmp eq i32 561, %0, !dbg !3103
%45 = or i1 %43, %44, !dbg !3103
%46 = icmp eq i32 562, %0, !dbg !3103
%47 = or i1 %45, %46, !dbg !3103
%48 = icmp eq i32 563, %0, !dbg !3103
%49 = or i1 %47, %48, !dbg !3103
ret i1 %49, !dbg !3103
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Exception+@Exception#backtrace?:(Array(String) | Nil)"(i32* %self) #0 !dbg !477 {
alloca:
%__arg0 = alloca %CallStack, !dbg !3105
%__arg03 = alloca %CallStack, !dbg !3105
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %self to %Exception*, !dbg !3106
%1 = getelementptr inbounds %Exception, %Exception* %0, i32 0, i32 3, !dbg !3106
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !3106
%3 = load i32, i32* %2, !dbg !3106
%4 = icmp eq i32 344, %3, !dbg !3106
br i1 %4, label %current_def, label %next_def, !dbg !3106
current_def: ; preds = %entry
%5 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 1, !dbg !3106
%6 = bitcast [2 x i64]* %5 to %CallStack*, !dbg !3106
%7 = load %CallStack, %CallStack* %6, !dbg !3105
store %CallStack %7, %CallStack* %__arg0, !dbg !3105
%8 = call %"Array(String)"* @"*CallStack#printable_backtrace:Array(String)"(%CallStack* %__arg0), !dbg !3105
br label %exit, !dbg !3105
next_def: ; preds = %entry
%9 = icmp eq i32 0, %3, !dbg !3105
br i1 %9, label %current_def1, label %next_def2, !dbg !3105
exit: ; preds = %current_def1, %current_def
%10 = phi %"Array(String)"* [ %8, %current_def ], [ null, %current_def1 ], !dbg !3105
ret %"Array(String)"* %10, !dbg !3105
current_def1: ; preds = %next_def
br label %exit, !dbg !3105
next_def2: ; preds = %next_def
unreachable, !dbg !3105
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack#printable_backtrace:Array(String)"(%CallStack* %self) #0 !dbg !478 {
alloca:
%__temp_72 = alloca %"Array(String)"*, !dbg !3107
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 1, !dbg !3108
%1 = load %"Array(String)"*, %"Array(String)"** %0, !dbg !3108
store %"Array(String)"* %1, %"Array(String)"** %__temp_72, !dbg !3108
%2 = icmp ne %"Array(String)"* %1, null, !dbg !3108
br i1 %2, label %then, label %else, !dbg !3108
then: ; preds = %entry
%3 = load %"Array(String)"*, %"Array(String)"** %__temp_72, !dbg !3108
br label %exit, !dbg !3108
else: ; preds = %entry
%4 = call %"Array(String)"* @"*CallStack#decode_backtrace:Array(String)"(%CallStack* %self), !dbg !3109
%5 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 1, !dbg !3108
store %"Array(String)"* %4, %"Array(String)"** %5, !dbg !3108
br label %exit, !dbg !3108
exit: ; preds = %else, %then
%6 = phi %"Array(String)"* [ %3, %then ], [ %4, %else ], !dbg !3108
ret %"Array(String)"* %6, !dbg !3108
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack#decode_backtrace:Array(String)"(%CallStack* %self) #0 !dbg !479 {
alloca:
%show_full_info = alloca i1, !dbg !3110
%ip = alloca i8*, !dbg !3111
%pc = alloca i64, !dbg !3111
%__temp_73 = alloca %"Tuple(String | Nil, Int32, Int32)", !dbg !3111
%file = alloca %String*, !dbg !3111
%line = alloca %"(Int32 | String)", !dbg !3111
%column = alloca i32, !dbg !3111
%file_line_column = alloca %String*, !dbg !3111
store %String* null, %String** %file_line_column, !dbg !3111
%name = alloca %String*, !dbg !3111
%function = alloca %String*, !dbg !3111
%frame = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !3111
%__temp_212 = alloca %"Tuple(Int64, Pointer(UInt8))", !dbg !3111
%sname = alloca i8*, !dbg !3111
%__temp_214 = alloca i1, !dbg !3111
%__temp_213 = alloca i1, !dbg !3111
%__temp_215 = alloca %"Tuple(Int64, Pointer(UInt8))", !dbg !3111
%ary = alloca %"Array(String)"*, !dbg !3111
%e = alloca i8*, !dbg !3112
%v = alloca %String*, !dbg !3112
%i = alloca i32, !dbg !3113
%i3 = alloca i32, !dbg !3113
%0 = alloca %"Tuple(String | Nil, Int32, Int32)", !dbg !3114
%1 = alloca %"(Bool | Nil)", !dbg !3115
%2 = alloca %"(Bool | Nil)", !dbg !3115
%3 = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !3116
%4 = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !3117
%5 = alloca %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !3118
br label %entry
entry: ; preds = %alloca
%6 = call %String* @"*ENV::[]?<String>:(String | Nil)"(%String* bitcast ({ i32, i32, i32, [28 x i8] }* @"'CRYSTAL_CALLSTACK_F...'" to %String*)), !dbg !3119
%7 = icmp eq %String* %6, null, !dbg !3119
%8 = select i1 %7, i32 0, i32 1, !dbg !3119
%9 = icmp eq i32 0, %8, !dbg !3119
br i1 %9, label %current_def, label %next_def, !dbg !3119
current_def: ; preds = %entry
br label %exit, !dbg !3119
next_def: ; preds = %entry
%10 = icmp eq i32 1, %8, !dbg !3119
br i1 %10, label %current_def1, label %next_def2, !dbg !3119
exit: ; preds = %current_def1, %current_def
%11 = phi i1 [ false, %current_def ], [ %15, %current_def1 ], !dbg !3119
store i1 %11, i1* %show_full_info, !dbg !3120
%12 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 0, !dbg !3120
%13 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %12, !dbg !3120
%14 = call %"Array(String)"* @"*Array(String)@Array(T)::new:Array(String)"(i32 492), !dbg !3121
store %"Array(String)"* %14, %"Array(String)"** %ary, !dbg !3122
store i32 0, i32* %i3, !dbg !3123
br label %while, !dbg !3123
current_def1: ; preds = %next_def
%15 = call i1 @"*String#==<String>:Bool"(%String* %6, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'1'" to %String*)), !dbg !3119
br label %exit, !dbg !3119
next_def2: ; preds = %next_def
unreachable, !dbg !3119
while: ; preds = %exit40, %exit
%16 = load i32, i32* %i3, !dbg !3124
%17 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %13, i32 0, i32 1, !dbg !3124
%18 = load i32, i32* %17, !dbg !3124
%19 = icmp slt i32 %16, %18, !dbg !3124
br i1 %19, label %body, label %exit4, !dbg !3124
body: ; preds = %while
%20 = load i32, i32* %i3, !dbg !3124
store i32 %20, i32* %i, !dbg !3124
%21 = load i32, i32* %i, !dbg !3124
%22 = call i8* @"*Array(Pointer(Void))@Array(T)#unsafe_at<Int32>:Pointer(Void)"(%"Array(Pointer(Void))"* %13, i32 %21), !dbg !3125
store i8* %22, i8** %e, !dbg !3125
%23 = load i8*, i8** %e, !dbg !3125
store i8* %23, i8** %ip, !dbg !3125
store %String* null, %String** %file_line_column, !dbg !3125
%24 = load i8*, i8** %ip, !dbg !3125
%25 = call i64 @"*CallStack::decode_address<Pointer(Void)>:UInt64"(i8* %24), !dbg !3126
store i64 %25, i64* %pc, !dbg !3127
%26 = load i64, i64* %pc, !dbg !3127
%27 = call %"Tuple(String | Nil, Int32, Int32)" @"*CallStack::decode_line_number<UInt64>:Tuple(String | Nil, Int32, Int32)"(i64 %26), !dbg !3114
store %"Tuple(String | Nil, Int32, Int32)" %27, %"Tuple(String | Nil, Int32, Int32)"* %0, !dbg !3114
%28 = load %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %0, !dbg !3114
store %"Tuple(String | Nil, Int32, Int32)" %28, %"Tuple(String | Nil, Int32, Int32)"* %__temp_73, !dbg !3114
%29 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %__temp_73, i32 0, i32 0, !dbg !3114
%30 = load %String*, %String** %29, !dbg !3114
store %String* %30, %String** %file, !dbg !3128
%31 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %__temp_73, i32 0, i32 1, !dbg !3128
%32 = load i32, i32* %31, !dbg !3128
%33 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !3129
store i32 152, i32* %33, !dbg !3129
%34 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3129
%35 = bitcast [1 x i64]* %34 to i32*, !dbg !3129
store i32 %32, i32* %35, !dbg !3129
%36 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %__temp_73, i32 0, i32 2, !dbg !3129
%37 = load i32, i32* %36, !dbg !3129
store i32 %37, i32* %column, !dbg !3130
%38 = load %String*, %String** %file, !dbg !3131
%39 = icmp ne %String* %38, null, !dbg !3131
br i1 %39, label %then5, label %else6, !dbg !3131
exit4: ; preds = %while
%40 = load %"Array(String)"*, %"Array(String)"** %ary, !dbg !3132
ret %"Array(String)"* %40, !dbg !3132
then: ; preds = %exit7
%41 = call %"Array(String)"** @"~CallStack::skip:read"(), !dbg !3133
%42 = load %"Array(String)"*, %"Array(String)"** %41, !dbg !3133
%43 = load %String*, %String** %file, !dbg !3133
%44 = call i1 @"*Array(String)@Enumerable(T)#includes?<String>:Bool"(%"Array(String)"* %42, %String* %43), !dbg !3134
br i1 %44, label %then8, label %else9, !dbg !3134
else: ; preds = %exit7
br label %exit11, !dbg !3135
then5: ; preds = %body
%45 = load %String*, %String** %file, !dbg !3131
%46 = call i1 @"*String@Object#!=<String>:Bool"(%String* %45, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'??'" to %String*)), !dbg !3115
%47 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %1, i32 0, i32 0, !dbg !3115
store i32 163, i32* %47, !dbg !3115
%48 = zext i1 %46 to i64, !dbg !3115
%49 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %1, i32 0, i32 1, !dbg !3115
%50 = bitcast [1 x i64]* %49 to i64*, !dbg !3115
store i64 %48, i64* %50, !dbg !3115
br label %exit7, !dbg !3115
else6: ; preds = %body
%51 = load %String*, %String** %file, !dbg !3115
%52 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %2, i32 0, i32 0, !dbg !3115
store i32 0, i32* %52, !dbg !3115
%53 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %2, i32 0, i32 1, !dbg !3115
store [1 x i64] zeroinitializer, [1 x i64]* %53, !dbg !3115
br label %exit7, !dbg !3115
exit7: ; preds = %else6, %then5
%54 = phi %"(Bool | Nil)"* [ %1, %then5 ], [ %2, %else6 ], !dbg !3115
%55 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %54, i32 0, i32 0, !dbg !3115
%56 = load i32, i32* %55, !dbg !3115
%57 = icmp eq i32 %56, 0, !dbg !3115
%58 = xor i1 %57, true, !dbg !3115
%59 = and i1 true, %58, !dbg !3115
%60 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %54, i32 0, i32 1, !dbg !3115
%61 = bitcast [1 x i64]* %60 to i1*, !dbg !3115
%62 = load i1, i1* %61, !dbg !3115
%63 = icmp eq i32 %56, 163, !dbg !3115
%64 = xor i1 %62, true, !dbg !3115
%65 = and i1 %63, %64, !dbg !3115
%66 = xor i1 %65, true, !dbg !3115
%67 = and i1 %59, %66, !dbg !3115
br i1 %67, label %then, label %else, !dbg !3115
then8: ; preds = %then
br label %exit10, !dbg !3133
else9: ; preds = %then
%68 = load %String*, %String** %file, !dbg !3133
%69 = call %String** @"~CallStack::CURRENT_DIR:read"(), !dbg !3133
%70 = load %String*, %String** %69, !dbg !3133
%71 = call %String* @"*String#lchop<String>:String"(%String* %68, %String* %70), !dbg !3136
store %String* %71, %String** %file, !dbg !3137
%72 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3138
%73 = load %String*, %String** %file, !dbg !3138
%74 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %72, %String* %73), !dbg !3138
%75 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %74, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"':'" to %String*)), !dbg !3138
%76 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3138
%77 = bitcast [1 x i64]* %76 to i32*, !dbg !3138
%78 = load i32, i32* %77, !dbg !3138
%79 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %75, i32 %78), !dbg !3138
%80 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %79, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"':'" to %String*)), !dbg !3138
%81 = load i32, i32* %column, !dbg !3138
%82 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %80, i32 %81), !dbg !3138
%83 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %82), !dbg !3138
store %String* %83, %String** %file_line_column, !dbg !3135
br label %exit11, !dbg !3135
exit10: ; preds = %exit37, %then17, %then8
%84 = phi %String* [ null, %then8 ], [ null, %then17 ], [ %199, %exit37 ], !dbg !3139
store %String* %84, %String** %v, !dbg !3140
%85 = load %String*, %String** %v, !dbg !3141
%86 = icmp eq %String* %85, null, !dbg !3141
%87 = select i1 %86, i32 0, i32 1, !dbg !3141
%88 = icmp eq i32 0, %87, !dbg !3141
br i1 %88, label %then38, label %else39, !dbg !3141
exit11: ; preds = %else, %else9
%89 = load i64, i64* %pc, !dbg !3142
%90 = call %String* @"*CallStack::decode_function_name<UInt64>:(String | Nil)"(i64 %89), !dbg !3143
store %String* %90, %String** %name, !dbg !3144
%91 = icmp ne %String* %90, null, !dbg !3144
br i1 %91, label %then12, label %else13, !dbg !3144
then12: ; preds = %exit11
%92 = load %String*, %String** %name, !dbg !3144
store %String* %92, %String** %function, !dbg !3145
br label %exit14, !dbg !3145
else13: ; preds = %exit11
%93 = load i8*, i8** %ip, !dbg !3146
%94 = call %"(Tuple(Int64, Pointer(UInt8)) | Nil)" @"*CallStack::decode_frame<Pointer(Void)>:(Tuple(Int64, Pointer(UInt8)) | Nil)"(i8* %93), !dbg !3116
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %94, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, !dbg !3116
%95 = load %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, !dbg !3147
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %95, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, !dbg !3147
%96 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, i32 0, i32 0, !dbg !3147
%97 = load i32, i32* %96, !dbg !3147
%98 = icmp eq i32 %97, 0, !dbg !3147
%99 = xor i1 %98, true, !dbg !3147
%100 = and i1 true, %99, !dbg !3147
br i1 %100, label %then15, label %else16, !dbg !3147
exit14: ; preds = %exit25, %then12
%101 = load %String*, %String** %file_line_column, !dbg !3140
%102 = icmp ne %String* %101, null, !dbg !3140
br i1 %102, label %then26, label %else27, !dbg !3140
then15: ; preds = %else13
%103 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, i32 0, i32 1, !dbg !3147
%104 = bitcast [2 x i64]* %103 to %"Tuple(Int64, Pointer(UInt8))"*, !dbg !3147
%105 = load %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %104, !dbg !3148
store %"Tuple(Int64, Pointer(UInt8))" %105, %"Tuple(Int64, Pointer(UInt8))"* %__temp_212, !dbg !3148
%106 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_212, i32 0, i32 0, !dbg !3148
%107 = load i64, i64* %106, !dbg !3148
%108 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_212, i32 0, i32 1, !dbg !3148
%109 = load i8*, i8** %108, !dbg !3148
store i8* %109, i8** %sname, !dbg !3149
%110 = load i8*, i8** %sname, !dbg !3149
%111 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %110), !dbg !3150
store %String* %111, %String** %function, !dbg !3151
%112 = load %String*, %String** %function, !dbg !3152
%113 = call i1 @"*String#starts_with?<String>:Bool"(%String* %112, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'*raise<'" to %String*)), !dbg !3152
store i1 %113, i1* %__temp_214, !dbg !3152
br i1 %113, label %then21, label %else22, !dbg !3152
else16: ; preds = %else13
store %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'???'" to %String*), %String** %function, !dbg !3153
br label %exit25, !dbg !3153
then17: ; preds = %exit24
br label %exit10, !dbg !3154
else18: ; preds = %exit24
%114 = load %String*, %String** %function, !dbg !3154
%115 = call %String* @"*String#lchop<Char>:String"(%String* %114, i32 42), !dbg !3155
store %String* %115, %String** %function, !dbg !3156
br label %exit25, !dbg !3156
then19: ; preds = %exit23
%116 = load i1, i1* %__temp_213, !dbg !3152
br label %exit24, !dbg !3152
else20: ; preds = %exit23
%117 = load %String*, %String** %function, !dbg !3152
%118 = call i1 @"*String#starts_with?<String>:Bool"(%String* %117, %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'*CallStack#'" to %String*)), !dbg !3157
br label %exit24, !dbg !3157
then21: ; preds = %then15
%119 = load i1, i1* %__temp_214, !dbg !3152
br label %exit23, !dbg !3152
else22: ; preds = %then15
%120 = load %String*, %String** %function, !dbg !3152
%121 = call i1 @"*String#starts_with?<String>:Bool"(%String* %120, %String* bitcast ({ i32, i32, i32, [13 x i8] }* @"'*CallStack::'" to %String*)), !dbg !3158
br label %exit23, !dbg !3158
exit23: ; preds = %else22, %then21
%122 = phi i1 [ %119, %then21 ], [ %121, %else22 ], !dbg !3158
store i1 %122, i1* %__temp_213, !dbg !3152
br i1 %122, label %then19, label %else20, !dbg !3152
exit24: ; preds = %else20, %then19
%123 = phi i1 [ %116, %then19 ], [ %118, %else20 ], !dbg !3157
br i1 %123, label %then17, label %else18, !dbg !3157
exit25: ; preds = %else16, %else18
br label %exit14, !dbg !3153
then26: ; preds = %exit14
%124 = load i1, i1* %show_full_info, !dbg !3159
br i1 %124, label %then30, label %else31, !dbg !3159
else27: ; preds = %exit14
%125 = load %String*, %String** %function, !dbg !3160
%126 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !3161
store i32 1, i32* %126, !dbg !3161
%127 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3161
%128 = bitcast [1 x i64]* %127 to %String**, !dbg !3161
store %String* %125, %String** %128, !dbg !3161
br label %exit34, !dbg !3161
then28: ; preds = %exit32
%129 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, i32 0, i32 1, !dbg !3118
%130 = bitcast [2 x i64]* %129 to %"Tuple(Int64, Pointer(UInt8))"*, !dbg !3118
%131 = load %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %130, !dbg !3162
store %"Tuple(Int64, Pointer(UInt8))" %131, %"Tuple(Int64, Pointer(UInt8))"* %__temp_215, !dbg !3162
%132 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_215, i32 0, i32 0, !dbg !3162
%133 = load i64, i64* %132, !dbg !3162
%134 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_215, i32 0, i32 1, !dbg !3162
%135 = load i8*, i8** %134, !dbg !3162
store i8* %135, i8** %sname, !dbg !3163
%136 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3164
%137 = load %String*, %String** %file_line_column, !dbg !3164
%138 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %136, %String* %137), !dbg !3164
%139 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %138, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"' in ''" to %String*)), !dbg !3164
%140 = load i8*, i8** %sname, !dbg !3164
%141 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %140), !dbg !3165
%142 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %139, %String* %141), !dbg !3164
%143 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %142, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !3164
%144 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %143), !dbg !3164
%145 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !3166
store i32 1, i32* %145, !dbg !3166
%146 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3166
%147 = bitcast [1 x i64]* %146 to %String**, !dbg !3166
store %String* %144, %String** %147, !dbg !3166
br label %exit33, !dbg !3166
else29: ; preds = %exit32
%148 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3167
%149 = load %String*, %String** %file_line_column, !dbg !3167
%150 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %148, %String* %149), !dbg !3167
%151 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %150, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"' in ''" to %String*)), !dbg !3167
%152 = load %String*, %String** %function, !dbg !3167
%153 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %151, %String* %152), !dbg !3167
%154 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %153, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !3167
%155 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %154), !dbg !3167
%156 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !3160
store i32 1, i32* %156, !dbg !3160
%157 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3160
%158 = bitcast [1 x i64]* %157 to %String**, !dbg !3160
store %String* %155, %String** %158, !dbg !3160
br label %exit33, !dbg !3160
then30: ; preds = %then26
%159 = load i8*, i8** %ip, !dbg !3159
%160 = call %"(Tuple(Int64, Pointer(UInt8)) | Nil)" @"*CallStack::decode_frame<Pointer(Void)>:(Tuple(Int64, Pointer(UInt8)) | Nil)"(i8* %159), !dbg !3117
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %160, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4, !dbg !3117
%161 = load %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4, !dbg !3118
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %161, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, !dbg !3118
%162 = bitcast %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4 to %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"*, !dbg !3118
br label %exit32, !dbg !3118
else31: ; preds = %then26
%163 = load i1, i1* %show_full_info, !dbg !3118
%164 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %5, i32 0, i32 0, !dbg !3118
store i32 163, i32* %164, !dbg !3118
%165 = zext i1 %163 to i128, !dbg !3118
%166 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %5, i32 0, i32 1, !dbg !3118
%167 = bitcast [2 x i64]* %166 to i128*, !dbg !3118
store i128 %165, i128* %167, !dbg !3118
br label %exit32, !dbg !3118
exit32: ; preds = %else31, %then30
%168 = phi %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* [ %162, %then30 ], [ %5, %else31 ], !dbg !3118
%169 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %168, i32 0, i32 0, !dbg !3118
%170 = load i32, i32* %169, !dbg !3118
%171 = icmp eq i32 %170, 0, !dbg !3118
%172 = xor i1 %171, true, !dbg !3118
%173 = and i1 true, %172, !dbg !3118
%174 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %168, i32 0, i32 1, !dbg !3118
%175 = bitcast [2 x i64]* %174 to i1*, !dbg !3118
%176 = load i1, i1* %175, !dbg !3118
%177 = icmp eq i32 %170, 163, !dbg !3118
%178 = xor i1 %176, true, !dbg !3118
%179 = and i1 %177, %178, !dbg !3118
%180 = xor i1 %179, true, !dbg !3118
%181 = and i1 %173, %180, !dbg !3118
br i1 %181, label %then28, label %else29, !dbg !3118
exit33: ; preds = %else29, %then28
br label %exit34, !dbg !3160
exit34: ; preds = %else27, %exit33
%182 = load i1, i1* %show_full_info, !dbg !3168
br i1 %182, label %then35, label %else36, !dbg !3168
then35: ; preds = %exit34
%183 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3169
%184 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3169
%185 = bitcast [1 x i64]* %184 to %String**, !dbg !3169
%186 = load %String*, %String** %185, !dbg !3169
%187 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %183, %String* %186), !dbg !3169
%188 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %187, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"' at 0x'" to %String*)), !dbg !3169
%189 = load i8*, i8** %ip, !dbg !3169
%190 = ptrtoint i8* %189 to i64, !dbg !3169
%191 = call %String* @"*UInt64@Int#to_s<Int32>:String"(i64 %190, i32 16), !dbg !3170
%192 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %188, %String* %191), !dbg !3169
%193 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %192), !dbg !3169
%194 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !3139
store i32 1, i32* %194, !dbg !3139
%195 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3139
%196 = bitcast [1 x i64]* %195 to %String**, !dbg !3139
store %String* %193, %String** %196, !dbg !3139
br label %exit37, !dbg !3139
else36: ; preds = %exit34
br label %exit37, !dbg !3139
exit37: ; preds = %else36, %then35
%197 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !3139
%198 = bitcast [1 x i64]* %197 to %String**, !dbg !3139
%199 = load %String*, %String** %198, !dbg !3139
br label %exit10, !dbg !3139
then38: ; preds = %exit10
br label %exit40, !dbg !3141
else39: ; preds = %exit10
%200 = load %"Array(String)"*, %"Array(String)"** %ary, !dbg !3141
%201 = load %String*, %String** %v, !dbg !3141
%202 = call %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %200, %String* %201), !dbg !3171
br label %exit40, !dbg !3171
exit40: ; preds = %else39, %then38
%203 = phi %"Array(String)"* [ null, %then38 ], [ %202, %else39 ], !dbg !3171
%204 = load i32, i32* %i3, !dbg !3171
%205 = add i32 %204, 1, !dbg !3171
store i32 %205, i32* %i3, !dbg !3132
br label %while, !dbg !3132
}
; Function Attrs: uwtable
define internal %String* @"*ENV::[]?<String>:(String | Nil)"(%String* %key) #0 !dbg !480 {
entry:
%0 = call %String* @"*ENV::fetch<String, Nil>:(String | Nil)"(%String* %key, %Nil zeroinitializer), !dbg !3172
ret %String* %0, !dbg !3172
}
; Function Attrs: uwtable
define internal %String* @"*ENV::fetch<String, Nil>:(String | Nil)"(%String* %key, %Nil %default) #0 !dbg !482 {
alloca:
%key1 = alloca %String*, !dbg !3173
%value = alloca i8*, !dbg !3173
br label %entry
entry: ; preds = %alloca
store %String* %key, %String** %key1, !dbg !3173
%0 = load %String*, %String** %key1, !dbg !3173
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %0), !dbg !3174
%2 = call i8* @getenv(i8* %1), !dbg !3175
store i8* %2, i8** %value, !dbg !3176
%3 = load i8*, i8** %value, !dbg !3177
%4 = icmp ne i8* %3, null, !dbg !3177
br i1 %4, label %then, label %else, !dbg !3177
then: ; preds = %entry
%5 = load i8*, i8** %value, !dbg !3177
%6 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %5), !dbg !3178
br label %exit, !dbg !3178
else: ; preds = %entry
%7 = load %String*, %String** %key1, !dbg !3178
br label %exit, !dbg !3178
exit: ; preds = %else, %then
%8 = phi %String* [ %6, %then ], [ null, %else ], !dbg !3178
ret %String* %8, !dbg !3178
}
declare i8* @getenv(i8*)
; Function Attrs: alwaysinline uwtable
define internal i8* @"*Array(Pointer(Void))@Array(T)#unsafe_at<Int32>:Pointer(Void)"(%"Array(Pointer(Void))"* %self, i32 %index) #3 !dbg !483 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !3179
%1 = load i8**, i8*** %0, !dbg !3179
%2 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]<Int32>:Pointer(Void)"(i8** %1, i32 %index), !dbg !3180
ret i8* %2, !dbg !3180
}
; Function Attrs: uwtable
define internal i64 @"*CallStack::decode_address<Pointer(Void)>:UInt64"(i8* %ip) #0 !dbg !484 {
alloca:
%info = alloca %"struct.LibC::DlInfo", !dbg !3181
%0 = alloca %"struct.LibC::DlInfo", !dbg !3181
br label %entry
entry: ; preds = %alloca
%1 = call i32 @dladdr(i8* %ip, %"struct.LibC::DlInfo"* %0), !dbg !3181
%2 = load %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %0, !dbg !3181
store %"struct.LibC::DlInfo" %2, %"struct.LibC::DlInfo"* %info, !dbg !3181
%3 = icmp ne i32 %1, 0, !dbg !3181
br i1 %3, label %then, label %else, !dbg !3181
then: ; preds = %entry
%4 = getelementptr inbounds %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %info, i32 0, i32 1, !dbg !3181
%5 = load i8*, i8** %4, !dbg !3181
%6 = ptrtoint i8* %5 to i64, !dbg !3181
%7 = load i32, i32* getelementptr inbounds (%"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", i32 0, i32 0), !dbg !3181
%8 = icmp eq i32 153, %7, !dbg !3181
%9 = and i1 true, %8, !dbg !3181
br i1 %9, label %current_def, label %next_def, !dbg !3181
else: ; preds = %entry
br label %exit10, !dbg !3181
then1: ; preds = %exit
br label %exit9, !dbg !3181
else2: ; preds = %exit
%10 = ptrtoint i8* %ip to i64, !dbg !3181
%11 = getelementptr inbounds %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %info, i32 0, i32 1, !dbg !3181
%12 = load i8*, i8** %11, !dbg !3181
%13 = ptrtoint i8* %12 to i64, !dbg !3181
%14 = sub i64 %10, %13, !dbg !3181
ret i64 %14, !dbg !3181
current_def: ; preds = %then
%15 = load i32, i32* bitcast ([1 x i64]* getelementptr inbounds (%"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", i32 0, i32 1) to i32*), !dbg !3181
%16 = zext i32 %15 to i64, !dbg !3181
%17 = icmp eq i64 %6, %16, !dbg !3181
br label %exit, !dbg !3181
next_def: ; preds = %then
%18 = icmp eq i32 155, %7, !dbg !3181
%19 = and i1 true, %18, !dbg !3181
br i1 %19, label %current_def3, label %next_def4, !dbg !3181
exit: ; preds = %current_def7, %current_def5, %current_def3, %current_def
%20 = phi i1 [ %17, %current_def ], [ %22, %current_def3 ], [ %26, %current_def5 ], [ false, %current_def7 ], !dbg !3181
br i1 %20, label %then1, label %else2, !dbg !3181
current_def3: ; preds = %next_def
%21 = load i64, i64* getelementptr inbounds (%"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", i32 0, i32 1, i32 0), !dbg !3181
%22 = icmp eq i64 %6, %21, !dbg !3181
br label %exit, !dbg !3181
next_def4: ; preds = %next_def
%23 = call i1 @"~match<(UInt32 | UInt64)>"(i32 %7), !dbg !3181
%24 = and i1 true, %23, !dbg !3181
br i1 %24, label %current_def5, label %next_def6, !dbg !3181
current_def5: ; preds = %next_def4
%25 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* bitcast (%"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address" to %"(UInt32 | UInt64)"*), !dbg !3181
%26 = call i1 @"*UInt64@Comparable(T)#==<(UInt32 | UInt64)>:Bool"(i64 %6, %"(UInt32 | UInt64)" %25), !dbg !3181
br label %exit, !dbg !3181
next_def6: ; preds = %next_def4
%27 = call i1 @"~match<(UInt32 | UInt64 | Nil)>"(i32 %7), !dbg !3181
%28 = and i1 true, %27, !dbg !3181
br i1 %28, label %current_def7, label %next_def8, !dbg !3181
current_def7: ; preds = %next_def6
%29 = load %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", !dbg !3181
br label %exit, !dbg !3181
next_def8: ; preds = %next_def6
unreachable, !dbg !3181
exit9: ; preds = %then1
br label %exit10, !dbg !3181
exit10: ; preds = %else, %exit9
%30 = ptrtoint i8* %ip to i64, !dbg !3181
ret i64 %30, !dbg !3181
}
declare i32 @dladdr(i8*, %"struct.LibC::DlInfo"*)
define internal i1 @"~match<(UInt32 | UInt64)>"(i32) {
entry:
%1 = icmp eq i32 153, %0, !dbg !3181
%2 = icmp eq i32 155, %0, !dbg !3181
%3 = or i1 %1, %2, !dbg !3181
ret i1 %3, !dbg !3181
}
; Function Attrs: uwtable
define internal i1 @"*UInt64@Comparable(T)#==<(UInt32 | UInt64)>:Bool"(i64 %self, %"(UInt32 | UInt64)" %other) #0 !dbg !485 {
alloca:
%other1 = alloca %"(UInt32 | UInt64)", !dbg !3182
br label %entry
entry: ; preds = %alloca
store %"(UInt32 | UInt64)" %other, %"(UInt32 | UInt64)"* %other1, !dbg !3182
%0 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, !dbg !3182
%1 = call i32 @"*UInt64@Number#<=><(UInt32 | UInt64)>:Int32"(i64 %self, %"(UInt32 | UInt64)" %0), !dbg !3183
%2 = icmp eq i32 %1, 0, !dbg !3183
ret i1 %2, !dbg !3183
}
; Function Attrs: uwtable
define internal i32 @"*UInt64@Number#<=><(UInt32 | UInt64)>:Int32"(i64 %self, %"(UInt32 | UInt64)" %other) #0 !dbg !486 {
alloca:
%other1 = alloca %"(UInt32 | UInt64)", !dbg !3184
br label %entry
entry: ; preds = %alloca
store %"(UInt32 | UInt64)" %other, %"(UInt32 | UInt64)"* %other1, !dbg !3184
%0 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 0, !dbg !3185
%1 = load i32, i32* %0, !dbg !3185
%2 = icmp eq i32 153, %1, !dbg !3185
%3 = and i1 true, %2, !dbg !3185
br i1 %3, label %current_def, label %next_def, !dbg !3185
then: ; preds = %exit
br label %exit4, !dbg !3185
else: ; preds = %exit
%4 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 0, !dbg !3186
%5 = load i32, i32* %4, !dbg !3186
%6 = icmp eq i32 153, %5, !dbg !3186
%7 = and i1 true, %6, !dbg !3186
br i1 %7, label %current_def7, label %next_def8, !dbg !3186
current_def: ; preds = %entry
%8 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !3185
%9 = bitcast [1 x i64]* %8 to i32*, !dbg !3185
%10 = load i32, i32* %9, !dbg !3185
%11 = zext i32 %10 to i64, !dbg !3185
%12 = icmp ugt i64 %self, %11, !dbg !3185
br label %exit, !dbg !3185
next_def: ; preds = %entry
%13 = icmp eq i32 155, %1, !dbg !3185
%14 = and i1 true, %13, !dbg !3185
br i1 %14, label %current_def2, label %next_def3, !dbg !3185
exit: ; preds = %current_def2, %current_def
%15 = phi i1 [ %12, %current_def ], [ %19, %current_def2 ], !dbg !3185
br i1 %15, label %then, label %else, !dbg !3185
current_def2: ; preds = %next_def
%16 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !3185
%17 = bitcast [1 x i64]* %16 to i64*, !dbg !3185
%18 = load i64, i64* %17, !dbg !3185
%19 = icmp ugt i64 %self, %18, !dbg !3185
br label %exit, !dbg !3185
next_def3: ; preds = %next_def
unreachable, !dbg !3185
exit4: ; preds = %exit12, %then
%20 = phi i32 [ 1, %then ], [ %33, %exit12 ], !dbg !3186
ret i32 %20, !dbg !3186
then5: ; preds = %exit9
br label %exit12, !dbg !3186
else6: ; preds = %exit9
br label %exit12, !dbg !3186
current_def7: ; preds = %else
%21 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !3186
%22 = bitcast [1 x i64]* %21 to i32*, !dbg !3186
%23 = load i32, i32* %22, !dbg !3186
%24 = zext i32 %23 to i64, !dbg !3186
%25 = icmp ult i64 %self, %24, !dbg !3186
br label %exit9, !dbg !3186
next_def8: ; preds = %else
%26 = icmp eq i32 155, %5, !dbg !3186
%27 = and i1 true, %26, !dbg !3186
br i1 %27, label %current_def10, label %next_def11, !dbg !3186
exit9: ; preds = %current_def10, %current_def7
%28 = phi i1 [ %25, %current_def7 ], [ %32, %current_def10 ], !dbg !3186
br i1 %28, label %then5, label %else6, !dbg !3186
current_def10: ; preds = %next_def8
%29 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !3186
%30 = bitcast [1 x i64]* %29 to i64*, !dbg !3186
%31 = load i64, i64* %30, !dbg !3186
%32 = icmp ult i64 %self, %31, !dbg !3186
br label %exit9, !dbg !3186
next_def11: ; preds = %next_def8
unreachable, !dbg !3186
exit12: ; preds = %else6, %then5
%33 = phi i32 [ -1, %then5 ], [ 0, %else6 ], !dbg !3186
br label %exit4, !dbg !3186
}
define internal i1 @"~match<(UInt32 | UInt64 | Nil)>"(i32) {
entry:
%1 = icmp eq i32 153, %0, !dbg !3181
%2 = icmp eq i32 155, %0, !dbg !3181
%3 = or i1 %1, %2, !dbg !3181
%4 = icmp eq i32 0, %0, !dbg !3181
%5 = or i1 %3, %4, !dbg !3181
ret i1 %5, !dbg !3181
}
; Function Attrs: uwtable
define internal %"Tuple(String | Nil, Int32, Int32)" @"*CallStack::decode_line_number<UInt64>:Tuple(String | Nil, Int32, Int32)"(i64 %pc) #0 !dbg !487 {
alloca:
%ln = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !3187
%row = alloca %"(Debug::DWARF::LineNumbers::Row | Nil)", !dbg !3187
%path = alloca %String*, !dbg !3187
%dirname = alloca %String*, !dbg !3187
%0 = alloca %"(Debug::DWARF::LineNumbers::Row | Nil)", !dbg !3187
%1 = alloca %"Tuple(String | Nil, Int32, Int32)", !dbg !3187
%2 = alloca %"Tuple(String, Int32, Int32)", !dbg !3187
%3 = alloca %"Tuple(String | Nil, Int32, Int32)", !dbg !3187
br label %entry
entry: ; preds = %alloca
%4 = load i32, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !3187
%5 = icmp eq i32 %4, 0, !dbg !3187
%6 = xor i1 %5, true, !dbg !3187
%7 = and i1 true, %6, !dbg !3187
br i1 %7, label %then, label %else, !dbg !3187
then: ; preds = %entry
br label %exit, !dbg !3187
else: ; preds = %entry
%8 = call %"Array(Tuple(UInt64, UInt64, String))"* @"*CallStack::read_dwarf_sections:(Array(Tuple(UInt64, UInt64, String)) | Nil)"(), !dbg !3187
br label %exit, !dbg !3187
exit: ; preds = %else, %then
%9 = load %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", !dbg !3187
store %"(Debug::DWARF::LineNumbers | Nil)" %9, %"(Debug::DWARF::LineNumbers | Nil)"* %ln, !dbg !3187
%10 = load i32, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !3187
%11 = icmp eq i32 %10, 0, !dbg !3187
%12 = xor i1 %11, true, !dbg !3187
%13 = and i1 true, %12, !dbg !3187
br i1 %13, label %then1, label %else2, !dbg !3187
then1: ; preds = %exit
%14 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %ln, i32 0, i32 1, !dbg !3187
%15 = bitcast [6 x i64]* %14 to %"Debug::DWARF::LineNumbers"*, !dbg !3187
%16 = call %"(Debug::DWARF::LineNumbers::Row | Nil)" @"*Debug::DWARF::LineNumbers#find<UInt64>:(Debug::DWARF::LineNumbers::Row | Nil)"(%"Debug::DWARF::LineNumbers"* %15, i64 %pc), !dbg !3187
store %"(Debug::DWARF::LineNumbers::Row | Nil)" %16, %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, !dbg !3187
%17 = load %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, !dbg !3187
store %"(Debug::DWARF::LineNumbers::Row | Nil)" %17, %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, !dbg !3187
%18 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, i32 0, i32 0, !dbg !3187
%19 = load i32, i32* %18, !dbg !3187
%20 = icmp eq i32 %19, 0, !dbg !3187
%21 = xor i1 %20, true, !dbg !3187
%22 = and i1 true, %21, !dbg !3187
br i1 %22, label %then3, label %else4, !dbg !3187
else2: ; preds = %exit
br label %exit8, !dbg !3187
then3: ; preds = %then1
%23 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %ln, i32 0, i32 1, !dbg !3187
%24 = bitcast [6 x i64]* %23 to %"Debug::DWARF::LineNumbers"*, !dbg !3187
%25 = getelementptr inbounds %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %24, i32 0, i32 2, !dbg !3187
%26 = load %"Array(String)"*, %"Array(String)"** %25, !dbg !3187
%27 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !3187
%28 = bitcast [4 x i64]* %27 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !3187
%29 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %28, i32 0, i32 3, !dbg !3187
%30 = load i32, i32* %29, !dbg !3187
%31 = call %String* @"*Array(String)@Indexable(T)#[]?<Int32>:(String | Nil)"(%"Array(String)"* %26, i32 %30), !dbg !3187
store %String* %31, %String** %path, !dbg !3187
%32 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %ln, i32 0, i32 1, !dbg !3187
%33 = bitcast [6 x i64]* %32 to %"Debug::DWARF::LineNumbers"*, !dbg !3187
%34 = getelementptr inbounds %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %33, i32 0, i32 1, !dbg !3187
%35 = load %"Array(String)"*, %"Array(String)"** %34, !dbg !3187
%36 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !3187
%37 = bitcast [4 x i64]* %36 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !3187
%38 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %37, i32 0, i32 2, !dbg !3187
%39 = load i32, i32* %38, !dbg !3187
%40 = call %String* @"*Array(String)@Indexable(T)#[]?<Int32>:(String | Nil)"(%"Array(String)"* %35, i32 %39), !dbg !3187
store %String* %40, %String** %dirname, !dbg !3187
%41 = icmp ne %String* %40, null, !dbg !3187
br i1 %41, label %then5, label %else6, !dbg !3187
else4: ; preds = %then1
br label %exit8, !dbg !3187
then5: ; preds = %then3
%42 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !3187
%43 = load %String*, %String** %dirname, !dbg !3187
%44 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %42, %String* %43), !dbg !3187
%45 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %44, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'/'" to %String*)), !dbg !3187
%46 = load %String*, %String** %path, !dbg !3187
%47 = call %"String::Builder"* @"*String::Builder@IO#<<<(String | Nil)>:String::Builder"(%"String::Builder"* %45, %String* %46), !dbg !3187
%48 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %47), !dbg !3187
store %String* %48, %String** %path, !dbg !3187
br label %exit7, !dbg !3187
else6: ; preds = %then3
br label %exit7, !dbg !3187
exit7: ; preds = %else6, %then5
%49 = load %String*, %String** %path, !dbg !3187
%50 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %1, i32 0, i32 0, !dbg !3187
store %String* %49, %String** %50, !dbg !3187
%51 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !3187
%52 = bitcast [4 x i64]* %51 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !3187
%53 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %52, i32 0, i32 4, !dbg !3187
%54 = load i32, i32* %53, !dbg !3187
%55 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %1, i32 0, i32 1, !dbg !3187
store i32 %54, i32* %55, !dbg !3187
%56 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !3187
%57 = bitcast [4 x i64]* %56 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !3187
%58 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %57, i32 0, i32 5, !dbg !3187
%59 = load i32, i32* %58, !dbg !3187
%60 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %1, i32 0, i32 2, !dbg !3187
store i32 %59, i32* %60, !dbg !3187
%61 = load %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %1, !dbg !3187
ret %"Tuple(String | Nil, Int32, Int32)" %61, !dbg !3187
exit8: ; preds = %else2, %else4
%62 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 0, !dbg !3187
store %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'??'" to %String*), %String** %62, !dbg !3187
%63 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 1, !dbg !3187
store i32 0, i32* %63, !dbg !3187
%64 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 2, !dbg !3187
store i32 0, i32* %64, !dbg !3187
%65 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %3, i32 0, i32 0, !dbg !3187
%66 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 0, !dbg !3187
%67 = load %String*, %String** %66, !dbg !3187
store %String* %67, %String** %65, !dbg !3187
%68 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %3, i32 0, i32 1, !dbg !3187
%69 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 1, !dbg !3187
%70 = load i32, i32* %69, !dbg !3187
store i32 %70, i32* %68, !dbg !3187
%71 = getelementptr inbounds %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %3, i32 0, i32 2, !dbg !3187
%72 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 2, !dbg !3187
%73 = load i32, i32* %72, !dbg !3187
store i32 %73, i32* %71, !dbg !3187
%74 = load %"Tuple(String | Nil, Int32, Int32)", %"Tuple(String | Nil, Int32, Int32)"* %3, !dbg !3187
ret %"Tuple(String | Nil, Int32, Int32)" %74, !dbg !3187
}
; Function Attrs: uwtable
define internal %"Array(Tuple(UInt64, UInt64, String))"* @"*CallStack::read_dwarf_sections:(Array(Tuple(UInt64, UInt64, String)) | Nil)"() #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !488 {
alloca:
%elf = alloca %"Debug::ELF", !dbg !3188
%strings = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !3188
%path = alloca %String*, !dbg !3188
%file = alloca %File*, !dbg !3189
%filename = alloca %String*, !dbg !3189
%mode = alloca %String*, !dbg !3189
%perm = alloca i16, !dbg !3189
%encoding = alloca %Nil, !dbg !3189
%invalid = alloca %Nil, !dbg !3189
%file1 = alloca %File*, !dbg !3189
%0 = alloca %"Debug::ELF", !dbg !3190
%sh = alloca %"Debug::ELF::SectionHeader", !dbg !3188
%_ = alloca i32*, !dbg !3188
%name = alloca %String*, !dbg !3188
%sh2 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3188
%sh4 = alloca %"Debug::ELF::SectionHeader", !dbg !3191
%if_none = alloca %Nil, !dbg !3191
%elem = alloca %"Debug::ELF::SectionHeader", !dbg !3192
%i = alloca i32, !dbg !3193
%i5 = alloca i32, !dbg !3193
%1 = alloca %"Debug::ELF::SectionHeader", !dbg !3194
%2 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3195
%3 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3196
%4 = alloca %"(UInt32 | UInt64)", !dbg !3197
%offset = alloca %"(UInt32 | UInt64)", !dbg !3198
%whence = alloca i32, !dbg !3198
%original_pos = alloca i64, !dbg !3198
%5 = alloca %"(UInt32 | UInt64)", !dbg !3198
%6 = alloca %"(UInt32 | UInt64)", !dbg !3188
%7 = alloca %"(UInt32 | UInt64)", !dbg !3188
%8 = alloca %"(UInt32 | UInt64)", !dbg !3188
%9 = alloca %"(UInt32 | UInt64)", !dbg !3188
%10 = alloca %"(UInt32 | UInt64)", !dbg !3188
%11 = alloca %"(UInt32 | UInt64)", !dbg !3188
%12 = alloca %"(UInt32 | UInt64 | Nil)", !dbg !3199
%sh30 = alloca %"Debug::ELF::SectionHeader", !dbg !3188
%io = alloca i32*, !dbg !3188
%name31 = alloca %String*, !dbg !3188
%sh32 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3188
%sh36 = alloca %"Debug::ELF::SectionHeader", !dbg !3191
%if_none37 = alloca %Nil, !dbg !3191
%elem38 = alloca %"Debug::ELF::SectionHeader", !dbg !3192
%i39 = alloca i32, !dbg !3193
%i40 = alloca i32, !dbg !3193
%13 = alloca %"Debug::ELF::SectionHeader", !dbg !3194
%14 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3195
%15 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3196
%16 = alloca %"(UInt32 | UInt64)", !dbg !3197
%offset51 = alloca %"(UInt32 | UInt64)", !dbg !3198
%whence52 = alloca i32, !dbg !3198
%original_pos53 = alloca i64, !dbg !3198
%17 = alloca %"(UInt32 | UInt64)", !dbg !3198
%18 = alloca %"(UInt32 | UInt64)", !dbg !3188
%19 = alloca %"Debug::DWARF::LineNumbers", !dbg !3188
%20 = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !3199
%21 = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !3199
%sh64 = alloca %"Debug::ELF::SectionHeader", !dbg !3188
%io65 = alloca i32*, !dbg !3188
%name66 = alloca %String*, !dbg !3188
%sh67 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3188
%sh71 = alloca %"Debug::ELF::SectionHeader", !dbg !3191
%if_none72 = alloca %Nil, !dbg !3191
%elem73 = alloca %"Debug::ELF::SectionHeader", !dbg !3192
%i74 = alloca i32, !dbg !3193
%i75 = alloca i32, !dbg !3193
%22 = alloca %"Debug::ELF::SectionHeader", !dbg !3194
%23 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3195
%24 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3196
%25 = alloca %"(UInt32 | UInt64)", !dbg !3197
%offset86 = alloca %"(UInt32 | UInt64)", !dbg !3198
%whence87 = alloca i32, !dbg !3198
%original_pos88 = alloca i64, !dbg !3198
%26 = alloca %"(UInt32 | UInt64)", !dbg !3198
%27 = alloca %"(UInt32 | UInt64)", !dbg !3188
%28 = alloca %"Debug::DWARF::Strings", !dbg !3188
%29 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !3199
%30 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !3199
%sh98 = alloca %"Debug::ELF::SectionHeader", !dbg !3188
%io99 = alloca i32*, !dbg !3188
%names = alloca %"Array(Tuple(UInt64, UInt64, String))"*, !dbg !3188
%offset100 = alloca i64, !dbg !3188
%info = alloca %"Debug::DWARF::Info", !dbg !3188
%name101 = alloca %String*, !dbg !3188
%sh102 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3188
%sh106 = alloca %"Debug::ELF::SectionHeader", !dbg !3191
%if_none107 = alloca %Nil, !dbg !3191
%elem108 = alloca %"Debug::ELF::SectionHeader", !dbg !3192
%i109 = alloca i32, !dbg !3193
%i110 = alloca i32, !dbg !3193
%31 = alloca %"Debug::ELF::SectionHeader", !dbg !3194
%32 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3195
%33 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3196
%34 = alloca %"(UInt32 | UInt64)", !dbg !3197
%offset121 = alloca %"(UInt32 | UInt64)", !dbg !3198
%whence122 = alloca i32, !dbg !3198
%original_pos123 = alloca i64, !dbg !3198
%35 = alloca %"(UInt32 | UInt64)", !dbg !3198
%36 = alloca %"(UInt32 | UInt64)", !dbg !3188
%37 = alloca %"(UInt32 | UInt64)", !dbg !3188
%38 = alloca %"(UInt32 | UInt64)", !dbg !3188
%39 = alloca %"Debug::DWARF::Info", !dbg !3188
%sh151 = alloca %"Debug::ELF::SectionHeader", !dbg !3188
%io152 = alloca i32*, !dbg !3188
%name153 = alloca %String*, !dbg !3188
%sh154 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3188
%sh158 = alloca %"Debug::ELF::SectionHeader", !dbg !3191
%if_none159 = alloca %Nil, !dbg !3191
%elem160 = alloca %"Debug::ELF::SectionHeader", !dbg !3192
%i161 = alloca i32, !dbg !3193
%i162 = alloca i32, !dbg !3193
%40 = alloca %"Debug::ELF::SectionHeader", !dbg !3194
%41 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3195
%42 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !3196
%43 = alloca %"(UInt32 | UInt64)", !dbg !3197
%offset173 = alloca %"(UInt32 | UInt64)", !dbg !3198
%whence174 = alloca i32, !dbg !3198
%original_pos175 = alloca i64, !dbg !3198
%44 = alloca %"(UInt32 | UInt64)", !dbg !3198
%name185 = alloca i64, !dbg !3188
%low_pc = alloca i64, !dbg !3188
%high_pc = alloca %String*, !dbg !3188
%info186 = alloca %"Debug::DWARF::Info", !dbg !3188
%strings187 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !3188
%45 = alloca %"Debug::DWARF::Info", !dbg !3188
%46 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !3188
%code = alloca i32, !dbg !3188
%abbrev = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !3188
%attributes = alloca %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, !dbg !3188
%high_pc188 = alloca %"(UInt64 | Nil)", !dbg !3188
%low_pc189 = alloca %"(UInt64 | Nil)", !dbg !3188
%name190 = alloca %String*, !dbg !3188
%__temp_204 = alloca %"(UInt64 | Nil)", !dbg !3188
%end_offset = alloca i64, !dbg !3188
%attributes191 = alloca %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, !dbg !3188
%code192 = alloca i32, !dbg !3188
%abbrev193 = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !3188
%47 = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !3200
%attr = alloca %"Debug::DWARF::Abbrev::Attribute", !dbg !3201
%value = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3201
%i208 = alloca i32, !dbg !3193
%i209 = alloca i32, !dbg !3193
%48 = alloca %"Debug::DWARF::Abbrev::Attribute", !dbg !3194
%49 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3202
%50 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3203
%51 = alloca %"(Bool | Nil)", !dbg !3188
%52 = alloca %"(Bool | Nil)", !dbg !3188
%at = alloca i32, !dbg !3188
%form = alloca i32, !dbg !3188
%value222 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", !dbg !3188
%__arg1 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3188
%i223 = alloca i32, !dbg !3193
%i224 = alloca i32, !dbg !3193
%53 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3194
%__arg2 = alloca %"Debug::DWARF::Strings", !dbg !3188
%54 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%55 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%56 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%57 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%58 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%59 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%60 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%61 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%62 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%__arg2264 = alloca %"Debug::DWARF::Strings", !dbg !3188
%63 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%64 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%65 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%66 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%67 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%68 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%69 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%70 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%71 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%72 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%73 = alloca %"(String | UInt64 | Nil)", !dbg !3188
%74 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%75 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%76 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%77 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%78 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%79 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%80 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%81 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%82 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%83 = alloca %"(UInt64 | Nil)", !dbg !3188
%84 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%85 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%86 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%87 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%88 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%89 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%90 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%91 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%92 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%93 = alloca %"(UInt64 | Nil)", !dbg !3188
%94 = alloca %"(Nil:Class | UInt64:Class)", !dbg !3188
%95 = alloca %"(Nil:Class | UInt64:Class)", !dbg !3188
%96 = alloca %"(UInt64 | Nil)", !dbg !3188
%97 = alloca %"(UInt64 | Nil)", !dbg !3188
%98 = alloca %"(UInt64 | Nil)", !dbg !3188
%99 = alloca %"(UInt64 | Nil)", !dbg !3188
%100 = alloca %"(String | UInt64 | Nil)", !dbg !3188
%101 = alloca %"Tuple(UInt64, UInt64, String)", !dbg !3188
%102 = alloca %"(Bool | Nil)", !dbg !3188
%103 = alloca %"(Bool | Nil)", !dbg !3188
%at413 = alloca i32, !dbg !3188
%form414 = alloca i32, !dbg !3188
%value415 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", !dbg !3188
%__arg1416 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3188
%i417 = alloca i32, !dbg !3193
%i418 = alloca i32, !dbg !3193
%104 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !3194
%__arg2428 = alloca %"Debug::DWARF::Strings", !dbg !3188
%105 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%106 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%107 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%108 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%109 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%110 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%111 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%112 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%113 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%__arg2461 = alloca %"Debug::DWARF::Strings", !dbg !3188
%114 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%115 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%116 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%117 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%118 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%119 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%120 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%121 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%122 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%123 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Nil:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%124 = alloca %"(String | UInt64 | Nil)", !dbg !3188
%125 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%126 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%127 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%128 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%129 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%130 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%131 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%132 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%133 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%134 = alloca %"(UInt64 | Nil)", !dbg !3188
%135 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%136 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%137 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%138 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%139 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%140 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%141 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%142 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%143 = alloca %"(Bool:Class | Int32:Class | Int64:Class | Slice(UInt8):Class | String:Class | UInt16:Class | UInt32:Class | UInt64:Class | UInt8:Class)", !dbg !3188
%144 = alloca %"(UInt64 | Nil)", !dbg !3188
%145 = alloca %"(Nil:Class | UInt64:Class)", !dbg !3188
%146 = alloca %"(Nil:Class | UInt64:Class)", !dbg !3188
%147 = alloca %"(UInt64 | Nil)", !dbg !3188
%148 = alloca %"(UInt64 | Nil)", !dbg !3188
%149 = alloca %"(UInt64 | Nil)", !dbg !3188
%150 = alloca %"(UInt64 | Nil)", !dbg !3188
%151 = alloca %"(String | UInt64 | Nil)", !dbg !3188
%152 = alloca %"Tuple(UInt64, UInt64, String)", !dbg !3188
br label %entry
entry: ; preds = %alloca
%153 = call %String** @"~PROGRAM_NAME:read"()
%154 = load %String*, %String** %153
store %String* %154, %String** %path, !dbg !3188
%155 = load %String*, %String** %path, !dbg !3188
store %String* %155, %String** %filename, !dbg !3189
store %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'r'" to %String*), %String** %mode, !dbg !3189
%156 = call i16* @"~File::DEFAULT_CREATE_PERMISSIONS:read"(), !dbg !3189
%157 = load i16, i16* %156, !dbg !3189
store i16 %157, i16* %perm, !dbg !3204
%158 = load %String*, %String** %filename, !dbg !3205
%159 = load %String*, %String** %mode, !dbg !3205
%160 = load i16, i16* %perm, !dbg !3205
%161 = load %Nil, %Nil* %encoding, !dbg !3205
%162 = load %Nil, %Nil* %invalid, !dbg !3205
%163 = call %File* @"*File::new<String, String, File::Permissions, Nil, Nil>:File"(%String* %158, %String* %159, i16 %160, %Nil zeroinitializer, %Nil zeroinitializer), !dbg !3206
store %File* %163, %File** %file1, !dbg !3207
%164 = load %File*, %File** %file1, !dbg !3207
store %File* %164, %File** %file, !dbg !3207
%165 = load %File*, %File** %file, !dbg !3207
%166 = invoke %"Debug::ELF" @"*Debug::ELF::new<File>:Debug::ELF"(%File* %165)
to label %invoke_out unwind label %rescue, !dbg !3190
rescue: ; preds = %exit602, %invoke_out603, %rescue125, %invoke_out120, %then103, %invoke_out117, %invoke_out116, %body112, %exit97, %exit93, %invoke_out94, %rescue90, %invoke_out85, %then68, %invoke_out82, %invoke_out81, %body77, %exit63, %exit59, %invoke_out60, %rescue55, %invoke_out50, %then33, %invoke_out47, %invoke_out46, %body42, %exit29, %exit25, %invoke_out26, %rescue14, %invoke_out12, %then, %invoke_out9, %invoke_out8, %body, %invoke_out, %entry
%167 = landingpad %landing_pad
cleanup, !dbg !3199
%168 = extractvalue %landing_pad %167, 0, !dbg !3199
%169 = extractvalue %landing_pad %167, 1, !dbg !3199
%170 = load %File*, %File** %file1, !dbg !3199
call void @"*File@IO::Buffered#close:Nil"(%File* %170), !dbg !3208
%171 = bitcast i8* %168 to %"struct.LibUnwind::Exception"*, !dbg !3208
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %171), !dbg !3209
unreachable, !dbg !3209
invoke_out: ; preds = %entry
store %"Debug::ELF" %166, %"Debug::ELF"* %0, !dbg !3190
%172 = load %"Debug::ELF", %"Debug::ELF"* %0, !dbg !3190
store %"Debug::ELF" %172, %"Debug::ELF"* %elf, !dbg !3190
store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'.text'" to %String*), %String** %name, !dbg !3188
%173 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out3 unwind label %rescue, !dbg !3191
then: ; preds = %exit11
%174 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3210
%175 = load i32*, i32** %174, !dbg !3210
%176 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh2, i32 0, i32 1, !dbg !3210
%177 = bitcast [20 x i64]* %176 to %"Debug::ELF::SectionHeader"*, !dbg !3210
%178 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %177)
to label %invoke_out12 unwind label %rescue, !dbg !3197
else: ; preds = %exit11
%179 = getelementptr inbounds %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %12, i32 0, i32 0, !dbg !3199
store i32 0, i32* %179, !dbg !3199
%180 = getelementptr inbounds %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %12, i32 0, i32 1, !dbg !3199
store [1 x i64] zeroinitializer, [1 x i64]* %180, !dbg !3199
br label %exit29, !dbg !3199
invoke_out3: ; preds = %invoke_out
store i32 0, i32* %i5, !dbg !3211
br label %while, !dbg !3211
while: ; preds = %else7, %invoke_out3
%181 = load i32, i32* %i5, !dbg !3212
%182 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %173, i32 0, i32 1, !dbg !3212
%183 = load i32, i32* %182, !dbg !3212
%184 = icmp slt i32 %181, %183, !dbg !3212
br i1 %184, label %body, label %exit, !dbg !3212
body: ; preds = %while
%185 = load i32, i32* %i5, !dbg !3212
store i32 %185, i32* %i, !dbg !3212
%186 = load i32, i32* %i, !dbg !3212
%187 = call %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_at<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %173, i32 %186), !dbg !3194
store %"Debug::ELF::SectionHeader" %187, %"Debug::ELF::SectionHeader"* %1, !dbg !3194
%188 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %1, !dbg !3194
store %"Debug::ELF::SectionHeader" %188, %"Debug::ELF::SectionHeader"* %elem, !dbg !3194
%189 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem, !dbg !3213
store %"Debug::ELF::SectionHeader" %189, %"Debug::ELF::SectionHeader"* %sh4, !dbg !3213
%190 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh4)
to label %invoke_out8 unwind label %rescue, !dbg !3214
exit: ; preds = %while
%191 = load %Nil, %Nil* %if_none, !dbg !3196
%192 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %3, i32 0, i32 0, !dbg !3196
store i32 0, i32* %192, !dbg !3196
%193 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %3, i32 0, i32 1, !dbg !3196
store [20 x i64] zeroinitializer, [20 x i64]* %193, !dbg !3196
br label %exit11, !dbg !3196
then6: ; preds = %invoke_out10
%194 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem, !dbg !3195
%195 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %2, i32 0, i32 0, !dbg !3195
store i32 333, i32* %195, !dbg !3195
%196 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %2, i32 0, i32 1, !dbg !3195
%197 = bitcast [20 x i64]* %196 to %"Debug::ELF::SectionHeader"*, !dbg !3195
store %"Debug::ELF::SectionHeader" %194, %"Debug::ELF::SectionHeader"* %197, !dbg !3195
br label %exit11, !dbg !3195
else7: ; preds = %invoke_out10
%198 = load i32, i32* %i5, !dbg !3195
%199 = add i32 %198, 1, !dbg !3195
store i32 %199, i32* %i5, !dbg !3196
br label %while, !dbg !3196
invoke_out8: ; preds = %body
%200 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %190)
to label %invoke_out9 unwind label %rescue, !dbg !3195
invoke_out9: ; preds = %invoke_out8
%201 = load %String*, %String** %name, !dbg !3195
%202 = invoke i1 @"*String#==<String>:Bool"(%String* %200, %String* %201)
to label %invoke_out10 unwind label %rescue, !dbg !3195
invoke_out10: ; preds = %invoke_out9
br i1 %202, label %then6, label %else7, !dbg !3195
exit11: ; preds = %exit, %then6
%203 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %2, %then6 ], [ %3, %exit ], !dbg !3196
%204 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %203, !dbg !3210
store %"(Debug::ELF::SectionHeader | Nil)" %204, %"(Debug::ELF::SectionHeader | Nil)"* %sh2, !dbg !3210
%205 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %203, i32 0, i32 0, !dbg !3210
%206 = load i32, i32* %205, !dbg !3210
%207 = icmp eq i32 %206, 0, !dbg !3210
%208 = xor i1 %207, true, !dbg !3210
%209 = and i1 true, %208, !dbg !3210
br i1 %209, label %then, label %else, !dbg !3210
invoke_out12: ; preds = %then
store %"(UInt32 | UInt64)" %178, %"(UInt32 | UInt64)"* %4, !dbg !3197
%210 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %4, !dbg !3197
store %"(UInt32 | UInt64)" %210, %"(UInt32 | UInt64)"* %5, !dbg !3198
%211 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %5, !dbg !3198
store %"(UInt32 | UInt64)" %211, %"(UInt32 | UInt64)"* %offset, !dbg !3198
store i32 0, i32* %whence, !dbg !3215
%212 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %175)
to label %invoke_out13 unwind label %rescue, !dbg !3216
invoke_out13: ; preds = %invoke_out12
store i64 %212, i64* %original_pos, !dbg !3217
%213 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset, !dbg !3217
%214 = load i32, i32* %whence, !dbg !3217
%215 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %175, %"(UInt32 | UInt64)" %213, i32 %214)
to label %invoke_out15 unwind label %rescue14, !dbg !3218
rescue14: ; preds = %invoke_out16, %invoke_out15, %invoke_out13
%216 = landingpad %landing_pad
cleanup, !dbg !3188
%217 = extractvalue %landing_pad %216, 0, !dbg !3188
%218 = extractvalue %landing_pad %216, 1, !dbg !3188
%219 = load i64, i64* %original_pos, !dbg !3188
%220 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %175, i64 %219)
to label %invoke_out26 unwind label %rescue, !dbg !3199
invoke_out15: ; preds = %invoke_out13
%221 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh2, i32 0, i32 1, !dbg !3218
%222 = bitcast [20 x i64]* %221 to %"Debug::ELF::SectionHeader"*, !dbg !3218
%223 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3218
%224 = load i32*, i32** %223, !dbg !3218
%225 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %222, !dbg !3218
store %"Debug::ELF::SectionHeader" %225, %"Debug::ELF::SectionHeader"* %sh, !dbg !3218
%226 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#addr:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh)
to label %invoke_out16 unwind label %rescue14, !dbg !3188
invoke_out16: ; preds = %invoke_out15
store %"(UInt32 | UInt64)" %226, %"(UInt32 | UInt64)"* %6, !dbg !3188
%227 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 0, !dbg !3188
%228 = load i32, i32* %227, !dbg !3188
%229 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh)
to label %invoke_out17 unwind label %rescue14, !dbg !3188
invoke_out17: ; preds = %invoke_out16
store %"(UInt32 | UInt64)" %229, %"(UInt32 | UInt64)"* %7, !dbg !3188
%230 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 0, !dbg !3188
%231 = load i32, i32* %230, !dbg !3188
%232 = icmp eq i32 153, %228, !dbg !3188
%233 = icmp eq i32 153, %231, !dbg !3188
%234 = and i1 %232, %233, !dbg !3188
br i1 %234, label %current_def, label %next_def, !dbg !3188
current_def: ; preds = %invoke_out17
%235 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !3188
%236 = bitcast [1 x i64]* %235 to i32*, !dbg !3188
%237 = load i32, i32* %236, !dbg !3188
%238 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !3188
%239 = bitcast [1 x i64]* %238 to i32*, !dbg !3188
%240 = load i32, i32* %239, !dbg !3188
%241 = sub i32 %237, %240, !dbg !3188
%242 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %8, i32 0, i32 0, !dbg !3188
store i32 153, i32* %242, !dbg !3188
%243 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %8, i32 0, i32 1, !dbg !3188
%244 = bitcast [1 x i64]* %243 to i32*, !dbg !3188
store i32 %241, i32* %244, !dbg !3188
br label %exit18, !dbg !3188
next_def: ; preds = %invoke_out17
%245 = icmp eq i32 153, %228, !dbg !3188
%246 = icmp eq i32 155, %231, !dbg !3188
%247 = and i1 %245, %246, !dbg !3188
br i1 %247, label %current_def19, label %next_def20, !dbg !3188
exit18: ; preds = %current_def23, %current_def21, %current_def19, %current_def
%248 = phi %"(UInt32 | UInt64)"* [ %8, %current_def ], [ %9, %current_def19 ], [ %10, %current_def21 ], [ %11, %current_def23 ], !dbg !3188
%249 = bitcast %"(UInt32 | UInt64)"* %248 to %"(UInt32 | UInt64 | Nil)"*, !dbg !3188
%250 = load %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %249, !dbg !3188
store %"(UInt32 | UInt64 | Nil)" %250, %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", !dbg !3188
br label %exit25, !dbg !3188
current_def19: ; preds = %next_def
%251 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !3188
%252 = bitcast [1 x i64]* %251 to i32*, !dbg !3188
%253 = load i32, i32* %252, !dbg !3188
%254 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !3188
%255 = bitcast [1 x i64]* %254 to i64*, !dbg !3188
%256 = load i64, i64* %255, !dbg !3188
%257 = zext i32 %253 to i64, !dbg !3188
%258 = sub i64 %257, %256, !dbg !3188
%259 = trunc i64 %258 to i32, !dbg !3188
%260 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %9, i32 0, i32 0, !dbg !3188
store i32 153, i32* %260, !dbg !3188
%261 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %9, i32 0, i32 1, !dbg !3188
%262 = bitcast [1 x i64]* %261 to i32*, !dbg !3188
store i32 %259, i32* %262, !dbg !3188
br label %exit18, !dbg !3188
next_def20: ; preds = %next_def
%263 = icmp eq i32 155, %228, !dbg !3188
%264 = icmp eq i32 153, %231, !dbg !3188
%265 = and i1 %263, %264, !dbg !3188
br i1 %265, label %current_def21, label %next_def22, !dbg !3188
current_def21: ; preds = %next_def20
%266 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !3188
%267 = bitcast [1 x i64]* %266 to i64*, !dbg !3188
%268 = load i64, i64* %267, !dbg !3188
%269 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !3188
%270 = bitcast [1 x i64]* %269 to i32*, !dbg !3188
%271 = load i32, i32* %270, !dbg !3188
%272 = zext i32 %271 to i64, !dbg !3188
%273 = sub i64 %268, %272, !dbg !3188
%274 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %10, i32 0, i32 0, !dbg !3188
store i32 155, i32* %274, !dbg !3188
%275 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %10, i32 0, i32 1, !dbg !3188
%276 = bitcast [1 x i64]* %275 to i64*, !dbg !3188
store i64 %273, i64* %276, !dbg !3188
br label %exit18, !dbg !3188
next_def22: ; preds = %next_def20
%277 = icmp eq i32 155, %228, !dbg !3188
%278 = icmp eq i32 155, %231, !dbg !3188
%279 = and i1 %277, %278, !dbg !3188
br i1 %279, label %current_def23, label %next_def24, !dbg !3188
current_def23: ; preds = %next_def22
%280 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !3188
%281 = bitcast [1 x i64]* %280 to i64*, !dbg !3188
%282 = load i64, i64* %281, !dbg !3188
%283 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !3188
%284 = bitcast [1 x i64]* %283 to i64*, !dbg !3188
%285 = load i64, i64* %284, !dbg !3188
%286 = sub i64 %282, %285, !dbg !3188
%287 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %11, i32 0, i32 0, !dbg !3188
store i32 155, i32* %287, !dbg !3188
%288 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %11, i32 0, i32 1, !dbg !3188
%289 = bitcast [1 x i64]* %288 to i64*, !dbg !3188
store i64 %286, i64* %289, !dbg !3188
br label %exit18, !dbg !3188
next_def24: ; preds = %next_def22
unreachable, !dbg !3188
exit25: ; preds = %exit18
%290 = phi %"(UInt32 | UInt64)"* [ %248, %exit18 ], !dbg !3218
%291 = load i64, i64* %original_pos, !dbg !3218
%292 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %175, i64 %291)
to label %invoke_out28 unwind label %rescue, !dbg !3199
invoke_out26: ; preds = %rescue14
%293 = bitcast i8* %217 to %"struct.LibUnwind::Exception"*, !dbg !3199
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %293)
to label %invoke_out27 unwind label %rescue, !dbg !3218
invoke_out27: ; preds = %invoke_out26
unreachable, !dbg !3218
invoke_out28: ; preds = %exit25
%294 = bitcast %"(UInt32 | UInt64)"* %290 to %"(UInt32 | UInt64 | Nil)"*, !dbg !3199
br label %exit29, !dbg !3199
exit29: ; preds = %else, %invoke_out28
%295 = phi %"(UInt32 | UInt64 | Nil)"* [ %294, %invoke_out28 ], [ %12, %else ], !dbg !3199
store %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'.debug_line'" to %String*), %String** %name31, !dbg !3188
%296 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out35 unwind label %rescue, !dbg !3191
then33: ; preds = %exit49
%297 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3210
%298 = load i32*, i32** %297, !dbg !3210
%299 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh32, i32 0, i32 1, !dbg !3210
%300 = bitcast [20 x i64]* %299 to %"Debug::ELF::SectionHeader"*, !dbg !3210
%301 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %300)
to label %invoke_out50 unwind label %rescue, !dbg !3197
else34: ; preds = %exit49
%302 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %21, i32 0, i32 0, !dbg !3199
store i32 0, i32* %302, !dbg !3199
%303 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %21, i32 0, i32 1, !dbg !3199
store [6 x i64] zeroinitializer, [6 x i64]* %303, !dbg !3199
br label %exit63, !dbg !3199
invoke_out35: ; preds = %exit29
store i32 0, i32* %i40, !dbg !3211
br label %while41, !dbg !3211
while41: ; preds = %else45, %invoke_out35
%304 = load i32, i32* %i40, !dbg !3212
%305 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %296, i32 0, i32 1, !dbg !3212
%306 = load i32, i32* %305, !dbg !3212
%307 = icmp slt i32 %304, %306, !dbg !3212
br i1 %307, label %body42, label %exit43, !dbg !3212
body42: ; preds = %while41
%308 = load i32, i32* %i40, !dbg !3212
store i32 %308, i32* %i39, !dbg !3212
%309 = load i32, i32* %i39, !dbg !3212
%310 = call %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_at<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %296, i32 %309), !dbg !3194
store %"Debug::ELF::SectionHeader" %310, %"Debug::ELF::SectionHeader"* %13, !dbg !3194
%311 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %13, !dbg !3194
store %"Debug::ELF::SectionHeader" %311, %"Debug::ELF::SectionHeader"* %elem38, !dbg !3194
%312 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem38, !dbg !3213
store %"Debug::ELF::SectionHeader" %312, %"Debug::ELF::SectionHeader"* %sh36, !dbg !3213
%313 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh36)
to label %invoke_out46 unwind label %rescue, !dbg !3214
exit43: ; preds = %while41
%314 = load %Nil, %Nil* %if_none37, !dbg !3196
%315 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %15, i32 0, i32 0, !dbg !3196
store i32 0, i32* %315, !dbg !3196
%316 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %15, i32 0, i32 1, !dbg !3196
store [20 x i64] zeroinitializer, [20 x i64]* %316, !dbg !3196
br label %exit49, !dbg !3196
then44: ; preds = %invoke_out48
%317 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem38, !dbg !3195
%318 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %14, i32 0, i32 0, !dbg !3195
store i32 333, i32* %318, !dbg !3195
%319 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %14, i32 0, i32 1, !dbg !3195
%320 = bitcast [20 x i64]* %319 to %"Debug::ELF::SectionHeader"*, !dbg !3195
store %"Debug::ELF::SectionHeader" %317, %"Debug::ELF::SectionHeader"* %320, !dbg !3195
br label %exit49, !dbg !3195
else45: ; preds = %invoke_out48
%321 = load i32, i32* %i40, !dbg !3195
%322 = add i32 %321, 1, !dbg !3195
store i32 %322, i32* %i40, !dbg !3196
br label %while41, !dbg !3196
invoke_out46: ; preds = %body42
%323 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %313)
to label %invoke_out47 unwind label %rescue, !dbg !3195
invoke_out47: ; preds = %invoke_out46
%324 = load %String*, %String** %name31, !dbg !3195
%325 = invoke i1 @"*String#==<String>:Bool"(%String* %323, %String* %324)
to label %invoke_out48 unwind label %rescue, !dbg !3195
invoke_out48: ; preds = %invoke_out47
br i1 %325, label %then44, label %else45, !dbg !3195
exit49: ; preds = %exit43, %then44
%326 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %14, %then44 ], [ %15, %exit43 ], !dbg !3196
%327 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %326, !dbg !3210
store %"(Debug::ELF::SectionHeader | Nil)" %327, %"(Debug::ELF::SectionHeader | Nil)"* %sh32, !dbg !3210
%328 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %326, i32 0, i32 0, !dbg !3210
%329 = load i32, i32* %328, !dbg !3210
%330 = icmp eq i32 %329, 0, !dbg !3210
%331 = xor i1 %330, true, !dbg !3210
%332 = and i1 true, %331, !dbg !3210
br i1 %332, label %then33, label %else34, !dbg !3210
invoke_out50: ; preds = %then33
store %"(UInt32 | UInt64)" %301, %"(UInt32 | UInt64)"* %16, !dbg !3197
%333 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %16, !dbg !3197
store %"(UInt32 | UInt64)" %333, %"(UInt32 | UInt64)"* %17, !dbg !3198
%334 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %17, !dbg !3198
store %"(UInt32 | UInt64)" %334, %"(UInt32 | UInt64)"* %offset51, !dbg !3198
store i32 0, i32* %whence52, !dbg !3215
%335 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %298)
to label %invoke_out54 unwind label %rescue, !dbg !3216
invoke_out54: ; preds = %invoke_out50
store i64 %335, i64* %original_pos53, !dbg !3217
%336 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset51, !dbg !3217
%337 = load i32, i32* %whence52, !dbg !3217
%338 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %298, %"(UInt32 | UInt64)" %336, i32 %337)
to label %invoke_out56 unwind label %rescue55, !dbg !3218
rescue55: ; preds = %invoke_out57, %invoke_out56, %invoke_out54
%339 = landingpad %landing_pad
cleanup, !dbg !3188
%340 = extractvalue %landing_pad %339, 0, !dbg !3188
%341 = extractvalue %landing_pad %339, 1, !dbg !3188
%342 = load i64, i64* %original_pos53, !dbg !3188
%343 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %298, i64 %342)
to label %invoke_out60 unwind label %rescue, !dbg !3199
invoke_out56: ; preds = %invoke_out54
%344 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh32, i32 0, i32 1, !dbg !3218
%345 = bitcast [20 x i64]* %344 to %"Debug::ELF::SectionHeader"*, !dbg !3218
%346 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3218
%347 = load i32*, i32** %346, !dbg !3218
%348 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %345, !dbg !3218
store %"Debug::ELF::SectionHeader" %348, %"Debug::ELF::SectionHeader"* %sh30, !dbg !3218
store i32* %347, i32** %io, !dbg !3218
%349 = load i32*, i32** %io, !dbg !3218
%350 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#size:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh30)
to label %invoke_out57 unwind label %rescue55, !dbg !3188
invoke_out57: ; preds = %invoke_out56
store %"(UInt32 | UInt64)" %350, %"(UInt32 | UInt64)"* %18, !dbg !3188
%351 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %18, !dbg !3188
%352 = invoke %"Debug::DWARF::LineNumbers" @"*Debug::DWARF::LineNumbers::new<IO::FileDescriptor+, (UInt32 | UInt64)>:Debug::DWARF::LineNumbers"(i32* %349, %"(UInt32 | UInt64)" %351)
to label %invoke_out58 unwind label %rescue55, !dbg !3188
invoke_out58: ; preds = %invoke_out57
store %"Debug::DWARF::LineNumbers" %352, %"Debug::DWARF::LineNumbers"* %19, !dbg !3188
%353 = load %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %19, !dbg !3188
store i32 341, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !3188
store %"Debug::DWARF::LineNumbers" %353, %"Debug::DWARF::LineNumbers"* bitcast ([6 x i64]* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 1) to %"Debug::DWARF::LineNumbers"*), !dbg !3188
br label %exit59, !dbg !3188
exit59: ; preds = %invoke_out58
%354 = phi %"Debug::DWARF::LineNumbers"* [ %19, %invoke_out58 ], !dbg !3218
%355 = load i64, i64* %original_pos53, !dbg !3218
%356 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %298, i64 %355)
to label %invoke_out62 unwind label %rescue, !dbg !3199
invoke_out60: ; preds = %rescue55
%357 = bitcast i8* %340 to %"struct.LibUnwind::Exception"*, !dbg !3199
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %357)
to label %invoke_out61 unwind label %rescue, !dbg !3218
invoke_out61: ; preds = %invoke_out60
unreachable, !dbg !3218
invoke_out62: ; preds = %exit59
%358 = load %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %354, !dbg !3199
%359 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %20, i32 0, i32 0, !dbg !3199
store i32 341, i32* %359, !dbg !3199
%360 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %20, i32 0, i32 1, !dbg !3199
%361 = bitcast [6 x i64]* %360 to %"Debug::DWARF::LineNumbers"*, !dbg !3199
store %"Debug::DWARF::LineNumbers" %358, %"Debug::DWARF::LineNumbers"* %361, !dbg !3199
br label %exit63, !dbg !3199
exit63: ; preds = %else34, %invoke_out62
%362 = phi %"(Debug::DWARF::LineNumbers | Nil)"* [ %20, %invoke_out62 ], [ %21, %else34 ], !dbg !3199
store %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'.debug_str'" to %String*), %String** %name66, !dbg !3188
%363 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out70 unwind label %rescue, !dbg !3191
then68: ; preds = %exit84
%364 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3210
%365 = load i32*, i32** %364, !dbg !3210
%366 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh67, i32 0, i32 1, !dbg !3210
%367 = bitcast [20 x i64]* %366 to %"Debug::ELF::SectionHeader"*, !dbg !3210
%368 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %367)
to label %invoke_out85 unwind label %rescue, !dbg !3197
else69: ; preds = %exit84
%369 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %30, i32 0, i32 0, !dbg !3199
store i32 0, i32* %369, !dbg !3199
%370 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %30, i32 0, i32 1, !dbg !3199
store [3 x i64] zeroinitializer, [3 x i64]* %370, !dbg !3199
br label %exit97, !dbg !3199
invoke_out70: ; preds = %exit63
store i32 0, i32* %i75, !dbg !3211
br label %while76, !dbg !3211
while76: ; preds = %else80, %invoke_out70
%371 = load i32, i32* %i75, !dbg !3212
%372 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %363, i32 0, i32 1, !dbg !3212
%373 = load i32, i32* %372, !dbg !3212
%374 = icmp slt i32 %371, %373, !dbg !3212
br i1 %374, label %body77, label %exit78, !dbg !3212
body77: ; preds = %while76
%375 = load i32, i32* %i75, !dbg !3212
store i32 %375, i32* %i74, !dbg !3212
%376 = load i32, i32* %i74, !dbg !3212
%377 = call %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_at<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %363, i32 %376), !dbg !3194
store %"Debug::ELF::SectionHeader" %377, %"Debug::ELF::SectionHeader"* %22, !dbg !3194
%378 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %22, !dbg !3194
store %"Debug::ELF::SectionHeader" %378, %"Debug::ELF::SectionHeader"* %elem73, !dbg !3194
%379 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem73, !dbg !3213
store %"Debug::ELF::SectionHeader" %379, %"Debug::ELF::SectionHeader"* %sh71, !dbg !3213
%380 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh71)
to label %invoke_out81 unwind label %rescue, !dbg !3214
exit78: ; preds = %while76
%381 = load %Nil, %Nil* %if_none72, !dbg !3196
%382 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %24, i32 0, i32 0, !dbg !3196
store i32 0, i32* %382, !dbg !3196
%383 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %24, i32 0, i32 1, !dbg !3196
store [20 x i64] zeroinitializer, [20 x i64]* %383, !dbg !3196
br label %exit84, !dbg !3196
then79: ; preds = %invoke_out83
%384 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem73, !dbg !3195
%385 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %23, i32 0, i32 0, !dbg !3195
store i32 333, i32* %385, !dbg !3195
%386 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %23, i32 0, i32 1, !dbg !3195
%387 = bitcast [20 x i64]* %386 to %"Debug::ELF::SectionHeader"*, !dbg !3195
store %"Debug::ELF::SectionHeader" %384, %"Debug::ELF::SectionHeader"* %387, !dbg !3195
br label %exit84, !dbg !3195
else80: ; preds = %invoke_out83
%388 = load i32, i32* %i75, !dbg !3195
%389 = add i32 %388, 1, !dbg !3195
store i32 %389, i32* %i75, !dbg !3196
br label %while76, !dbg !3196
invoke_out81: ; preds = %body77
%390 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %380)
to label %invoke_out82 unwind label %rescue, !dbg !3195
invoke_out82: ; preds = %invoke_out81
%391 = load %String*, %String** %name66, !dbg !3195
%392 = invoke i1 @"*String#==<String>:Bool"(%String* %390, %String* %391)
to label %invoke_out83 unwind label %rescue, !dbg !3195
invoke_out83: ; preds = %invoke_out82
br i1 %392, label %then79, label %else80, !dbg !3195
exit84: ; preds = %exit78, %then79
%393 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %23, %then79 ], [ %24, %exit78 ], !dbg !3196
%394 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %393, !dbg !3210
store %"(Debug::ELF::SectionHeader | Nil)" %394, %"(Debug::ELF::SectionHeader | Nil)"* %sh67, !dbg !3210
%395 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %393, i32 0, i32 0, !dbg !3210
%396 = load i32, i32* %395, !dbg !3210
%397 = icmp eq i32 %396, 0, !dbg !3210
%398 = xor i1 %397, true, !dbg !3210
%399 = and i1 true, %398, !dbg !3210
br i1 %399, label %then68, label %else69, !dbg !3210
invoke_out85: ; preds = %then68
store %"(UInt32 | UInt64)" %368, %"(UInt32 | UInt64)"* %25, !dbg !3197
%400 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %25, !dbg !3197
store %"(UInt32 | UInt64)" %400, %"(UInt32 | UInt64)"* %26, !dbg !3198
%401 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %26, !dbg !3198
store %"(UInt32 | UInt64)" %401, %"(UInt32 | UInt64)"* %offset86, !dbg !3198
store i32 0, i32* %whence87, !dbg !3215
%402 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %365)
to label %invoke_out89 unwind label %rescue, !dbg !3216
invoke_out89: ; preds = %invoke_out85
store i64 %402, i64* %original_pos88, !dbg !3217
%403 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset86, !dbg !3217
%404 = load i32, i32* %whence87, !dbg !3217
%405 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %365, %"(UInt32 | UInt64)" %403, i32 %404)
to label %invoke_out91 unwind label %rescue90, !dbg !3218
rescue90: ; preds = %invoke_out91, %invoke_out89
%406 = landingpad %landing_pad
cleanup, !dbg !3188
%407 = extractvalue %landing_pad %406, 0, !dbg !3188
%408 = extractvalue %landing_pad %406, 1, !dbg !3188
%409 = load i64, i64* %original_pos88, !dbg !3188
%410 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %365, i64 %409)
to label %invoke_out94 unwind label %rescue, !dbg !3199
invoke_out91: ; preds = %invoke_out89
%411 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh67, i32 0, i32 1, !dbg !3218
%412 = bitcast [20 x i64]* %411 to %"Debug::ELF::SectionHeader"*, !dbg !3218
%413 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !3218
%414 = load i32*, i32** %413, !dbg !3218
%415 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %412, !dbg !3218
store %"Debug::ELF::SectionHeader" %415, %"Debug::ELF::SectionHeader"* %sh64, !dbg !3218
store i32* %414, i32** %io65, !dbg !3218
%416 = load i32*, i32** %io65, !dbg !3218
%417 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh64)
to label %invoke_out92 unwind label %rescue90, !dbg !3188
invoke_out92: ; preds = %invoke_out91
store %"(UInt32 | UInt64)" %417, %"(UInt32 | UInt64)"* %27, !dbg !3188
%418 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %27, !dbg !3188
%419 = call %"Debug::DWARF::Strings" @"*Debug::DWARF::Strings::new<IO::FileDescriptor+, (UInt32 | UInt64)>:Debug::DWARF::Strings"(i32* %416, %"(UInt32 | UInt64)" %418), !dbg !3188
store %"Debug::DWARF::Strings" %419, %"Debug::DWARF::Strings"* %28, !dbg !3188
br label %exit93, !dbg !3188
exit93: ; preds = %invoke_out92
%420 = phi %"Debug::DWARF::Strings"* [ %28, %invoke_out92 ], !dbg !3218
%421 = load i64, i64* %original_pos88, !dbg !3218
%422 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %365, i64 %421)
to label %invoke_out96 unwind label %rescue, !dbg !3199
invoke_out94: ; preds = %rescue90
%423 = bitcast i8* %407 to %"struct.LibUnwind::Exception"*, !dbg !3199
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %423)
to label %invoke_out95 unwind label %rescue, !dbg !3218
invoke_out95: ; preds = %invoke_out94
unreachable, !dbg !3218
invoke_out96: ; preds = %exit93
%424 = load %"Debug::DWARF::Strings", %"Debug::DWARF::Strings"* %420, !dbg !3199
%425 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %29, i32 0, i32 0, !dbg !3199
store i32 342, i32* %425, !dbg !3199
%426 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %29, i32 0, i32 1, !dbg !3199
%427 = bitcast [3 x i64]* %426 to %"Debug::DWARF::Strings"*, !dbg !3199
store %"Debug::DWARF::Strings" %424, %"Debug::DWARF::Strings"* %427, !dbg !3199
br label %exit97, !dbg !3199
exit97: ; preds = %else69, %invoke_out96
%428 = phi %"(Debug::DWARF::Strings | Nil)"* [ %29, %invoke_out96 ], [ %30, %else69 ], !dbg !3199
%429 = load %"(Debug:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment