Skip to content

Instantly share code, notes, and snippets.

@sol-vin
Created May 10, 2019 04:34
Show Gist options
  • Save sol-vin/4aee655c9a6ccbe0669b6cbecf352cf6 to your computer and use it in GitHub Desktop.
Save sol-vin/4aee655c9a6ccbe0669b6cbecf352cf6 to your computer and use it in GitHub Desktop.
; ModuleID = 'test.c'
source_filename = "test.c"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
@.str = private unnamed_addr constant [8 x i8] c"HELLO!\0A\00", align 1
; Function Attrs: noinline nounwind optnone uwtable
define i32 @main() #0 {
%1 = alloca i32, align 4
store i32 0, i32* %1, align 4
%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0))
ret i32 0
}
declare i32 @printf(i8*, ...) #1
attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
!llvm.module.flags = !{!0}
!llvm.ident = !{!1}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)"}
This file has been truncated, but you can view the full file.
; ModuleID = 'main_module'
source_filename = "main_module"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%String = type { i32, i32, i32, i8 }
%"Slice(UInt8)" = type { i32, i1, i8* }
%"Array(String)" = type { i32, i32, i32, %String** }
%"->" = type { i8*, i8* }
%"Thread::LinkedList(Fiber)" = type { %Fiber*, %Fiber*, %"Thread::Mutex"* }
%Fiber = type { i32, %"struct.Fiber::Context", i8*, %"(Crystal::Event | Nil)", i8*, %String*, %Fiber*, %Fiber*, i1, %"Atomic(Thread | Nil)", %"->" }
%"struct.Fiber::Context" = type { i8*, i64 }
%"(Crystal::Event | Nil)" = type { i32, [2 x i64] }
%"Atomic(Thread | Nil)" = type { %Thread* }
%Thread = type { i32, i64, i32*, %Fiber*, %Thread*, %Thread*, %"Atomic(UInt8)", %"->", %"Crystal::Scheduler"* }
%"Atomic(UInt8)" = type { i8 }
%"Crystal::Scheduler" = type { i32, %Fiber*, %Fiber*, %"Deque(Fiber)"* }
%"Deque(Fiber)" = type { i32, i32, i32, i32, %Fiber** }
%"Thread::Mutex" = type { i32, %"union.LibC::PthreadMutexT" }
%"union.LibC::PthreadMutexT" = type { i8*, [32 x i8] }
%"Fiber::StackPool" = type { i32, %"Deque(Pointer(Void))"* }
%"Deque(Pointer(Void))" = type { i32, i32, i32, i32, i8** }
%"Crystal::Event::Base" = type { i8* }
%"Thread::LinkedList(Thread)" = type { %Thread*, %Thread*, %"Thread::Mutex"* }
%"(UInt32 | UInt64 | Nil)" = type { i32, [1 x i64] }
%"(Debug::DWARF::LineNumbers | Nil)" = type { i32, [4 x i64] }
%"IO::FileDescriptor" = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, i1, %"Slice(UInt8)", i32, i1, i1, i8*, i8*, %"(Time::Span | Nil)", %"(Time::Span | Nil)", %"Deque(Fiber)"*, %"Deque(Fiber)"*, %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)", 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] }
%"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(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* }
%"Array(Proc(Int32, (Exception+ | Nil), Nil))" = type { i32, i32, i32, %"->"* }
%File = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, i1, %"Slice(UInt8)", i32, i1, i1, i8*, i8*, %"(Time::Span | Nil)", %"(Time::Span | Nil)", %"Deque(Fiber)"*, %"Deque(Fiber)"*, %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)", i1, i1, %String* }
%"Atomic(Int32)" = type { i32 }
%"struct.LibC::SigsetT" = type { [16 x i64] }
%"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)"* }
%Nil = type {}
%"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 { i32, i1, %String* }
%"Array(Time::Location::ZoneTransition)" = type { i32, i32, i32, %"Time::Location::ZoneTransition"* }
%"Time::Location::ZoneTransition" = type { i64, i8, i1, i1 }
%"struct.LibUnwind::Exception" = type { i64, i64, i64, i64, i64, i32 }
%"/usr/share/crystal/src/raise.cr::LEBReader" = type { i8* }
%OverflowError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(CallStack | Nil)" = type { i32, [2 x i64] }
%ArgumentError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%CallStack = type { %"Array(Pointer(Void))"*, %"Array(String)"* }
%"Array(Pointer(Void))" = type { i32, i32, i32, i8** }
%Exception = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%Errno = type { i32, %String*, i32*, %"(CallStack | Nil)", i32, %String* }
%"String::Builder" = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, i32, i8*, i1 }
%"Tuple(UInt64, Int32)" = type { i64, i32 }
%"(UInt64 | Nil)" = type { i32, [1 x i64] }
%IndexError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"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* }
%"union.LibC::PthreadMutexattrT" = type { i32 }
%"union.LibC::PthreadAttrT" = type { i64, [48 x i8] }
%landing_pad = type { i8*, i32 }
%"(Int32 | Nil)" = type { i32, [1 x 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 }
%NilAssertionError = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"Time::Span" = type { i64, i32 }
%"(Int64 | Nil)" = type { i32, [1 x i64] }
%"Crystal::Event" = type { i8*, i1 }
%"Tuple(String, 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 | String)" = 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, [6 x i64] }
%"Debug::DWARF::LineNumbers" = type { %"Array(Array(Debug::DWARF::LineNumbers::Row))"*, 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, %String*, %String*, 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, [5 x i64] }
%"(Debug::ELF::SectionHeader | Nil)" = type { i32, [20 x i64] }
%"Debug::DWARF::Strings" = type { i32*, %"(UInt32 | UInt64)", %"Slice(UInt8)" }
%"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 | Nil)" = type { i32, [1 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] }
%"IO::Error" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(Bool | Deque(Fiber) | Nil)" = type { i32, [1 x i64] }
%"struct.LibC::Timeval" = type { i64, i64 }
%"IO::Timeout" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"(Pointer(Pointer(Void)) | Pointer(Void))" = type { i32, [1 x i64] }
%"Range(Int32, Int32)" = type { i32, i32, i1 }
%"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] }
%"(Int32 | UInt32 | UInt64)" = type { i32, [1 x i64] }
%"(UInt16 | UInt32 | UInt8)" = type { i32, [1 x i64] }
%"(Char | Nil)" = type { i32, [1 x i64] }
%"(Tuple(Int32, Int32, Int32) | Nil)" = type { i32, [2 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] }
%"Crystal::Hasher" = type { i64, i64 }
%"(Tuple(Int32, Int32) | Nil)" = type { i32, [1 x i64] }
%"(Int32 | UInt32 | UInt64 | 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"* }
%closure_1 = type { i32, %"->" }
%"Channel::ClosedError" = type { i32, %String*, i32*, %"(CallStack | Nil)" }
%"Tuple(String)" = type { %String* }
%"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
@"AtExitHandlers::running" = internal global i1 false
@"AtExitHandlers::running: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
@"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" }
@"''" = private constant { i32, i32, i32, [1 x i8] } { i32 1, i32 0, i32 0, [1 x i8] zeroinitializer }
@"'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" }
@"'Negative count'" = private constant { i32, i32, i32, [15 x i8] } { i32 1, i32 14, i32 14, [15 x i8] c"Negative count\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" }
@"String::TYPE_ID" = internal constant i32 1
@"String::TYPE_ID:init" = internal global i1 false
@"'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" }
@"'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" }
@"': '" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c": \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" }
@"''\5Ca''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Ca'\00" }
@"''\5Cb''" = private constant { i32, i32, i32, [5 x i8] } { i32 1, i32 4, i32 4, [5 x i8] c"'\5Cb'\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
@"'/usr/share/crystal/...'" = private constant { i32, i32, i32, [36 x i8] } { i32 1, i32 35, i32 35, [36 x i8] c"/usr/share/crystal/src/callstack.cr\00" }
@"'/usr/share/crystal/...'.2" = private constant { i32, i32, i32, [36 x i8] } { i32 1, i32 35, i32 35, [36 x i8] c"/usr/share/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::fibers" = internal global %"Thread::LinkedList(Fiber)" zeroinitializer
@"Fiber::fibers:init" = internal global i1 false
@"'pthread_mutex_init'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"pthread_mutex_init\00" }
@"'pthread_mutex_destr...'" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"pthread_mutex_destroy\00" }
@"Fiber::stack_pool" = internal global %"Fiber::StackPool"* null
@"Fiber::stack_pool:init" = internal global i1 false
@"Crystal::EventLoop::eb" = internal global %"Crystal::Event::Base" zeroinitializer
@"Crystal::EventLoop::eb:init" = internal global i1 false
@"Thread::threads" = internal global %"Thread::LinkedList(Thread)" zeroinitializer
@"Thread::threads:init" = internal global i1 false
@"'pthread_attr_destro...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"pthread_attr_destroy\00" }
@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" }
@"'pthread_mutex_lock'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"pthread_mutex_lock\00" }
@"'pthread_mutex_unloc...'" = private constant { i32, i32, i32, [21 x i8] } { i32 1, i32 20, i32 20, [21 x i8] c"pthread_mutex_unlock\00" }
@"Thread::current" = thread_local global %Thread* null
@"File::DEFAULT_CREATE_PERMISSIONS" = internal global i16 0
@"File::DEFAULT_CREATE_PERMISSIONS:init" = internal global i1 false
@"GC::curr_push_other_roots" = global %"->" zeroinitializer
@"GC::prev_push_other_roots" = global %"->" zeroinitializer
@"Crystal::Hasher::seed" = global [2 x i64] zeroinitializer
@"'BUG: Thread.current...'" = private constant { i32, i32, i32, [34 x i8] } { i32 1, i32 33, i32 33, [34 x i8] c"BUG: Thread.current returned NULL\00" }
@"'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" }
@"'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" }
@"'tried to resume a d...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c"tried to resume a dead fiber\00" }
@"'\0A'" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"\0A\00" }
@"'FATAL: '" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"FATAL: \00" }
@"'#<'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"#<\00" }
@"'Fiber'" = private constant { i32, i32, i32, [6 x i8] } { i32 1, i32 5, i32 5, [6 x i8] c"Fiber\00" }
@"':0x'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c":0x\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" }
@"'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" }
@"'key'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"key\00" }
@"'`'" = 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" }
@"'String '" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"String \00" }
@"'contains null byte'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c"contains null byte\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" }
@"'No file open mode s...'" = private constant { i32, i32, i32, [28 x i8] } { i32 1, i32 27, i32 27, [28 x i8] c"No file open mode specified\00" }
@"'Invalid file open m...'" = private constant { i32, i32, i32, [26 x i8] } { i32 1, i32 25, i32 25, [26 x i8] c"Invalid file open mode: '\00" }
@"'''" = private constant { i32, i32, i32, [2 x i8] } { i32 1, i32 1, i32 1, [2 x i8] c"'\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" }
@"'\5C\22'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5C\22\00" }
@"'\5C\5C'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5C\5C\00" }
@"'\5Ca'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Ca\00" }
@"'\5Cb'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cb\00" }
@"'\5Ce'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Ce\00" }
@"'\5Cf'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cf\00" }
@"'\5Cn'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cn\00" }
@"'\5Cr'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cr\00" }
@"'\5Ct'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Ct\00" }
@"'\5Cv'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cv\00" }
@"'\5C#{'" = private constant { i32, i32, i32, [4 x i8] } { i32 1, i32 3, i32 3, [4 x i8] c"\5C#{\00" }
@"'\5Cx'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cx\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" }
@"'\5Cu'" = private constant { i32, i32, i32, [3 x i8] } { i32 1, i32 2, i32 2, [3 x i8] c"\5Cu\00" }
@"'' with mode ''" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"' with mode '\00" }
@"'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" }
@"Crystal::EventLoop::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
@"'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, [4 x i8] } { i32 1, i32 3, i32 3, [4 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, [31 x i8] } { i32 1, i32 30, i32 30, [31 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" }
@"'Path::Error'" = private constant { i32, i32, i32, [12 x i8] } { i32 1, i32 11, i32 11, [12 x i8] c"Path::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" }
@"'NilAssertionError'" = private constant { i32, i32, i32, [18 x i8] } { i32 1, i32 17, i32 17, [18 x i8] c"NilAssertionError\00" }
@"'NotImplementedError...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"NotImplementedError\00" }
@"'OverflowError'" = private constant { i32, i32, i32, [14 x i8] } { i32 1, i32 13, i32 13, [14 x i8] c"OverflowError\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" }
@"' 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" }
@"'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" }
@"'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" }
@"'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" }
@"'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" }
@"', expected 2 to 36'" = private constant { i32, i32, i32, [19 x i8] } { i32 1, i32 18, i32 18, [19 x i8] c", expected 2 to 36\00" }
@"Unicode::category_Ll" = global %"Array(Tuple(Int32, Int32, Int32))"* null
@"Unicode::category_Lu" = global %"Array(Tuple(Int32, Int32, Int32))"* null
@"Unicode::casefold_ranges" = global %"Array(Tuple(Int32, Int32, Int32))"* null
@"Unicode::fold_cases" = global %"Hash(Int32, Tuple(Int32, Int32, Int32, Int32))"* null
@"Hash::HASH_PRIMES" = internal global %"Array(Int32)"* null
@"Hash::HASH_PRIMES:init" = internal global i1 false
@"'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" }
@"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 /usr/share/cry...'" = private constant { i32, i32, i32, [50 x i8] } { i32 1, i32 49, i32 49, [50 x i8] c", at /usr/share/crystal/src/callstack.cr:218:3:33\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 /usr/share/cry...'.6" = private constant { i32, i32, i32, [50 x i8] } { i32 1, i32 49, i32 49, [50 x i8] c", at /usr/share/crystal/src/callstack.cr:218:3:34\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 /usr/share/cry...'.7" = private constant { i32, i32, i32, [50 x i8] } { i32 1, i32 49, i32 49, [50 x i8] c", at /usr/share/crystal/src/callstack.cr:218:3:36\00" }
@"', at /usr/share/cry...'.8" = private constant { i32, i32, i32, [50 x i8] } { i32 1, i32 49, i32 49, [50 x i8] c", at /usr/share/crystal/src/callstack.cr:218:3:39\00" }
@"', at /usr/share/cry...'.9" = private constant { i32, i32, i32, [50 x i8] } { i32 1, i32 49, i32 49, [50 x i8] c", at /usr/share/crystal/src/callstack.cr:218:3:41\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" }
@"AtExitHandlers::handlers" = global %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* null
@"AtExitHandlers::exception" = global i32* 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...'.10" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"Unhandled exception: \00" }
@STDOUT = internal global %"IO::FileDescriptor"* null
@"STDOUT:init" = internal global i1 false
@"'can't resume a runn...'" = private constant { i32, i32, i32, [29 x i8] } { i32 1, i32 28, i32 28, [29 x i8] c"can't resume a running fiber\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" }
@"'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
@"Signal::sigset" = internal global %"struct.LibC::SigsetT" zeroinitializer
@"Signal::sigset: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
@"'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" }
@"'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" }
@"', exiting'" = private constant { i32, i32, i32, [10 x i8] } { i32 1, i32 9, i32 9, [10 x i8] c", exiting\00" }
@"'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" }
@"Crystal::Signal::child_handler" = global %"->" zeroinitializer
@"'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::mutex" = internal global %Mutex* null
@"Crystal::Signal::mutex:init" = internal global i1 false
@"'/usr/share/crystal/...'.11" = private constant { i32, i32, i32, [32 x i8] } { i32 1, i32 31, i32 31, [32 x i8] c"/usr/share/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
@"'HELLO!\0A'" = private constant { i32, i32, i32, [8 x i8] } { i32 1, i32 7, i32 7, [8 x i8] c"HELLO!\0A\00" }
@"'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" }
@"'Arithmetic overflow...'" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Arithmetic overflow\00" }
@"'Stack overflow (e.g...'" = private constant { i32, i32, i32, [56 x i8] } { i32 1, i32 55, i32 55, [56 x i8] c"Stack overflow (e.g., infinite or very deep recursion)\0A\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 !9
%1 = alloca %"Slice(UInt8)", !dbg !12
%2 = alloca %"->", !dbg !15
%3 = alloca %"->", !dbg !18
%4 = alloca %"->", !dbg !18
%5 = alloca %"->", !dbg !21
%6 = alloca %"->", !dbg !21
br label %entry
entry: ; preds = %alloca
store i32 %argc, i32* @ARGC_UNSAFE
store i8** %argv, i8*** @ARGV_UNSAFE
%7 = load i1, i1* @"AtExitHandlers::running:init"
br i1 %7, label %initialized, label %not_initialized
initialized: ; preds = %not_initialized, %entry
%8 = load i1, i1* @"Crystal::System::Random::initialized:init"
br i1 %8, label %initialized1, label %not_initialized2
not_initialized: ; preds = %entry
store i1 true, i1* @"AtExitHandlers::running:init"
call void @"~AtExitHandlers::running:init"()
br label %initialized
initialized1: ; preds = %not_initialized2, %initialized
%9 = load i1, i1* @"Crystal::System::Random::getrandom_available:init"
br i1 %9, label %initialized3, label %not_initialized4
not_initialized2: ; preds = %initialized
store i1 true, i1* @"Crystal::System::Random::initialized:init"
call void @"~Crystal::System::Random::initialized:init"()
br label %initialized1
initialized3: ; preds = %not_initialized4, %initialized1
%10 = load i1, i1* @"Debug::ELF::MAGIC:init", !dbg !22
br i1 %10, label %initialized5, label %not_initialized6, !dbg !22
not_initialized4: ; preds = %initialized1
store i1 true, i1* @"Crystal::System::Random::getrandom_available:init"
call void @"~Crystal::System::Random::getrandom_available:init"()
br label %initialized3
initialized5: ; preds = %not_initialized6, %initialized3
%11 = load i1, i1* @"CallStack::CURRENT_DIR:init", !dbg !25
br i1 %11, label %initialized7, label %not_initialized8, !dbg !25
not_initialized6: ; preds = %initialized3
store i1 true, i1* @"Debug::ELF::MAGIC:init", !dbg !22
call void @"~Debug::ELF::MAGIC:init"()
br label %initialized5
initialized7: ; preds = %not_initialized8, %initialized5
%12 = load i1, i1* @"CallStack::skip:init"
br i1 %12, label %initialized9, label %not_initialized10
not_initialized8: ; preds = %initialized5
store i1 true, i1* @"CallStack::CURRENT_DIR:init", !dbg !25
call void @"~CallStack::CURRENT_DIR:init"()
br label %initialized7
initialized9: ; preds = %not_initialized10, %initialized7
%13 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [36 x i8] }* @"'/usr/share/crystal/...'" to %String*)), !dbg !28
%14 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [36 x i8] }* @"'/usr/share/crystal/...'.2" to %String*)), !dbg !31
%15 = load i1, i1* @"LibC::SIG_DFL:init", !dbg !34
br i1 %15, label %initialized11, label %not_initialized12, !dbg !34
not_initialized10: ; preds = %initialized7
store i1 true, i1* @"CallStack::skip:init"
call void @"~CallStack::skip:init"()
br label %initialized9
initialized11: ; preds = %not_initialized12, %initialized9
%16 = load i1, i1* @"LibC::SIG_IGN:init"
br i1 %16, label %initialized13, label %not_initialized14
not_initialized12: ; preds = %initialized9
store i1 true, i1* @"LibC::SIG_DFL:init", !dbg !34
call void @"~LibC::SIG_DFL:init"()
br label %initialized11
initialized13: ; preds = %not_initialized14, %initialized11
%17 = load i1, i1* @"String::CHAR_TO_DIGIT:init"
br i1 %17, label %initialized15, label %not_initialized16
not_initialized14: ; preds = %initialized11
store i1 true, i1* @"LibC::SIG_IGN:init"
call void @"~LibC::SIG_IGN:init"()
br label %initialized13
initialized15: ; preds = %not_initialized16, %initialized13
%18 = load i1, i1* @"String::CHAR_TO_DIGIT62:init"
br i1 %18, label %initialized17, label %not_initialized18
not_initialized16: ; preds = %initialized13
store i1 true, i1* @"String::CHAR_TO_DIGIT:init"
call void @"~String::CHAR_TO_DIGIT:init"()
br label %initialized15
initialized17: ; preds = %not_initialized18, %initialized15
%19 = load i1, i1* @"LibC::MAP_FAILED:init", !dbg !37
br i1 %19, label %initialized19, label %not_initialized20, !dbg !37
not_initialized18: ; preds = %initialized15
store i1 true, i1* @"String::CHAR_TO_DIGIT62:init"
call void @"~String::CHAR_TO_DIGIT62:init"()
br label %initialized17
initialized19: ; preds = %not_initialized20, %initialized17
%20 = load i1, i1* @"Fiber::fibers:init", !dbg !40
br i1 %20, label %initialized21, label %not_initialized22, !dbg !40
not_initialized20: ; preds = %initialized17
store i1 true, i1* @"LibC::MAP_FAILED:init", !dbg !37
call void @"~LibC::MAP_FAILED:init"()
br label %initialized19
initialized21: ; preds = %not_initialized22, %initialized19
%21 = load i1, i1* @"Fiber::stack_pool:init"
br i1 %21, label %initialized23, label %not_initialized24
not_initialized22: ; preds = %initialized19
store i1 true, i1* @"Fiber::fibers:init", !dbg !40
call void @"~Fiber::fibers:init"()
br label %initialized21
initialized23: ; preds = %not_initialized24, %initialized21
%22 = load i1, i1* @"Crystal::EventLoop::eb:init", !dbg !43
br i1 %22, label %initialized25, label %not_initialized26, !dbg !43
not_initialized24: ; preds = %initialized21
store i1 true, i1* @"Fiber::stack_pool:init"
call void @"~Fiber::stack_pool:init"()
br label %initialized23
initialized25: ; preds = %not_initialized26, %initialized23
%23 = load i1, i1* @"Thread::threads:init", !dbg !46
br i1 %23, label %initialized27, label %not_initialized28, !dbg !46
not_initialized26: ; preds = %initialized23
store i1 true, i1* @"Crystal::EventLoop::eb:init", !dbg !43
call void @"~Crystal::EventLoop::eb:init"()
br label %initialized25
initialized27: ; preds = %not_initialized28, %initialized25
%24 = call %Thread* @"*Thread::new:Thread"(), !dbg !49
%25 = call %Thread* @"*Thread::current=<Thread>:Thread"(%Thread* %24), !dbg !52
%26 = load i1, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !53
br i1 %26, label %initialized29, label %not_initialized30, !dbg !53
not_initialized28: ; preds = %initialized25
store i1 true, i1* @"Thread::threads:init", !dbg !46
call void @"~Thread::threads:init"()
br label %initialized27
initialized29: ; preds = %not_initialized30, %initialized27
%27 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !9
store i8* bitcast (void ()* @"~procProc(Nil)@/usr/share/crystal/src/gc/boehm.cr:243" to i8*), i8** %27, !dbg !9
%28 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !9
store i8* null, i8** %28, !dbg !9
%29 = load %"->", %"->"* %0, !dbg !9
call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %29), !dbg !56
%30 = 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 !12
store %"Slice(UInt8)" %30, %"Slice(UInt8)"* %1, !dbg !12
%31 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !12
call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %31), !dbg !57
%32 = load i1, i1* @"Hash::HASH_PRIMES:init", !dbg !57
br i1 %32, label %initialized31, label %not_initialized32, !dbg !57
not_initialized30: ; preds = %initialized27
store i1 true, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !53
call void @"~File::DEFAULT_CREATE_PERMISSIONS:init"()
br label %initialized29
initialized31: ; preds = %not_initialized32, %initialized29
%33 = load i1, i1* @"STDOUT:init", !dbg !15
br i1 %33, label %initialized33, label %not_initialized34, !dbg !15
not_initialized32: ; preds = %initialized29
store i1 true, i1* @"Hash::HASH_PRIMES:init", !dbg !57
call void @"~Hash::HASH_PRIMES:init"(), !dbg !57
br label %initialized31, !dbg !57
initialized33: ; preds = %not_initialized34, %initialized31
%34 = load i1, i1* @"STDERR:init", !dbg !15
br i1 %34, label %initialized35, label %not_initialized36, !dbg !15
not_initialized34: ; preds = %initialized31
store i1 true, i1* @"STDOUT:init", !dbg !15
call void @"~STDOUT:init"(), !dbg !15
br label %initialized33, !dbg !15
initialized35: ; preds = %not_initialized36, %initialized33
%35 = load i1, i1* @"PROGRAM_NAME:init", !dbg !15
br i1 %35, label %initialized37, label %not_initialized38, !dbg !15
not_initialized36: ; preds = %initialized33
store i1 true, i1* @"STDERR:init", !dbg !15
call void @"~STDERR:init"(), !dbg !15
br label %initialized35, !dbg !15
initialized37: ; preds = %not_initialized38, %initialized35
%36 = load i1, i1* @"AtExitHandlers::running:init", !dbg !15
br i1 %36, label %initialized39, label %not_initialized40, !dbg !15
not_initialized38: ; preds = %initialized35
store i1 true, i1* @"PROGRAM_NAME:init", !dbg !15
call void @"~PROGRAM_NAME:init"(), !dbg !15
br label %initialized37, !dbg !15
initialized39: ; preds = %not_initialized40, %initialized37
%37 = getelementptr inbounds %"->", %"->"* %2, i32 0, i32 0, !dbg !15
store i8* bitcast (void ()* @"~procProc(Nil)@/usr/share/crystal/src/kernel.cr:540" to i8*), i8** %37, !dbg !15
%38 = getelementptr inbounds %"->", %"->"* %2, i32 0, i32 1, !dbg !15
store i8* null, i8** %38, !dbg !15
%39 = load %"->", %"->"* %2, !dbg !15
%40 = call %Fiber* @"*spawn<&Proc(Nil)>:Fiber"(%"->" %39), !dbg !58
call void @"*Signal::setup_default_handlers:Nil"(), !dbg !58
call void @setup_sigfault_handler(), !dbg !58
%41 = load i1, i1* @"Process::INITIAL_PWD:init", !dbg !59
br i1 %41, label %initialized41, label %not_initialized42, !dbg !59
not_initialized40: ; preds = %initialized37
store i1 true, i1* @"AtExitHandlers::running:init", !dbg !15
call void @"~AtExitHandlers::running:init"(), !dbg !15
br label %initialized39, !dbg !15
initialized41: ; preds = %not_initialized42, %initialized39
%42 = call %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'/usr/share/crystal/...'.11" to %String*)), !dbg !62
%43 = load i1, i1* @"Crystal::System::Random::initialized:init", !dbg !65
br i1 %43, label %initialized43, label %not_initialized44, !dbg !65
not_initialized42: ; preds = %initialized39
store i1 true, i1* @"Process::INITIAL_PWD:init", !dbg !59
call void @"~Process::INITIAL_PWD:init"(), !dbg !59
br label %initialized41, !dbg !59
initialized43: ; preds = %not_initialized44, %initialized41
%44 = load i1, i1* @"Crystal::System::Random::getrandom_available:init", !dbg !65
br i1 %44, label %initialized45, label %not_initialized46, !dbg !65
not_initialized44: ; preds = %initialized41
store i1 true, i1* @"Crystal::System::Random::initialized:init", !dbg !65
call void @"~Crystal::System::Random::initialized:init"(), !dbg !65
br label %initialized43, !dbg !65
initialized45: ; preds = %not_initialized46, %initialized43
%45 = getelementptr inbounds %"->", %"->"* %3, i32 0, i32 0, !dbg !18
store i8* bitcast (i8* (i64)* @"*GC::malloc<UInt64>:Pointer(Void)" to i8*), i8** %45, !dbg !18
%46 = getelementptr inbounds %"->", %"->"* %3, i32 0, i32 1, !dbg !18
store i8* null, i8** %46, !dbg !18
%47 = load %"->", %"->"* %3, !dbg !18
%48 = call i8* @"~check_proc_is_not_closure"(%"->" %47), !dbg !18
%49 = bitcast i8* %48 to i8* (i64)*, !dbg !18
store i8* (i64)* %49, i8* (i64)** @pcre_malloc, !dbg !18
%50 = bitcast i8* (i64)* %49 to i8*, !dbg !18
%51 = getelementptr inbounds %"->", %"->"* %4, i32 0, i32 0, !dbg !18
store i8* %50, i8** %51, !dbg !18
%52 = getelementptr inbounds %"->", %"->"* %4, i32 0, i32 1, !dbg !18
store i8* null, i8** %52, !dbg !18
%53 = load %"->", %"->"* %4, !dbg !18
%54 = getelementptr inbounds %"->", %"->"* %5, i32 0, i32 0, !dbg !21
store i8* bitcast (void (i8*)* @"*GC::free<Pointer(Void)>:Nil" to i8*), i8** %54, !dbg !21
%55 = getelementptr inbounds %"->", %"->"* %5, i32 0, i32 1, !dbg !21
store i8* null, i8** %55, !dbg !21
%56 = load %"->", %"->"* %5, !dbg !21
%57 = call i8* @"~check_proc_is_not_closure"(%"->" %56), !dbg !21
%58 = bitcast i8* %57 to %Nil (i8*)*, !dbg !21
store %Nil (i8*)* %58, %Nil (i8*)** @pcre_free, !dbg !21
%59 = bitcast %Nil (i8*)* %58 to i8*, !dbg !21
%60 = getelementptr inbounds %"->", %"->"* %6, i32 0, i32 0, !dbg !21
store i8* %59, i8** %60, !dbg !21
%61 = getelementptr inbounds %"->", %"->"* %6, i32 0, i32 1, !dbg !21
store i8* null, i8** %61, !dbg !21
%62 = load %"->", %"->"* %6, !dbg !21
%63 = load i1, i1* @"Signal::sigset:init", !dbg !68
br i1 %63, label %initialized47, label %not_initialized48, !dbg !68
not_initialized46: ; preds = %initialized43
store i1 true, i1* @"Crystal::System::Random::getrandom_available:init", !dbg !65
call void @"~Crystal::System::Random::getrandom_available:init"(), !dbg !65
br label %initialized45, !dbg !65
initialized47: ; preds = %not_initialized48, %initialized45
%64 = load i1, i1* @"Signal::setup_default_handlers:init", !dbg !68
br i1 %64, label %initialized49, label %not_initialized50, !dbg !68
not_initialized48: ; preds = %initialized45
store i1 true, i1* @"Signal::sigset:init", !dbg !68
call void @"~Signal::sigset:init"(), !dbg !68
br label %initialized47, !dbg !68
initialized49: ; preds = %not_initialized50, %initialized47
%65 = load i1, i1* @"Crystal::Signal::pipe:init", !dbg !68
br i1 %65, label %initialized51, label %not_initialized52, !dbg !68
not_initialized50: ; preds = %initialized47
store i1 true, i1* @"Signal::setup_default_handlers:init", !dbg !68
call void @"~Signal::setup_default_handlers:init"(), !dbg !68
br label %initialized49, !dbg !68
initialized51: ; preds = %not_initialized52, %initialized49
%66 = load i1, i1* @"Crystal::Signal::handlers:init", !dbg !68
br i1 %66, label %initialized53, label %not_initialized54, !dbg !68
not_initialized52: ; preds = %initialized49
store i1 true, i1* @"Crystal::Signal::pipe:init", !dbg !68
call void @"~Crystal::Signal::pipe:init"(), !dbg !68
br label %initialized51, !dbg !68
initialized53: ; preds = %not_initialized54, %initialized51
%67 = load i1, i1* @"Crystal::Signal::mutex:init", !dbg !68
br i1 %67, label %initialized55, label %not_initialized56, !dbg !68
not_initialized54: ; preds = %initialized51
store i1 true, i1* @"Crystal::Signal::handlers:init", !dbg !68
call void @"~Crystal::Signal::handlers:init"(), !dbg !68
br label %initialized53, !dbg !68
initialized55: ; preds = %not_initialized56, %initialized53
%68 = load i1, i1* @"Crystal::SignalChildHandler::pending:init", !dbg !68
br i1 %68, label %initialized57, label %not_initialized58, !dbg !68
not_initialized56: ; preds = %initialized53
store i1 true, i1* @"Crystal::Signal::mutex:init", !dbg !68
call void @"~Crystal::Signal::mutex:init"(), !dbg !68
br label %initialized55, !dbg !68
initialized57: ; preds = %not_initialized58, %initialized55
%69 = load i1, i1* @"Crystal::SignalChildHandler::waiting:init", !dbg !68
br i1 %69, label %initialized59, label %not_initialized60, !dbg !68
not_initialized58: ; preds = %initialized55
store i1 true, i1* @"Crystal::SignalChildHandler::pending:init", !dbg !68
call void @"~Crystal::SignalChildHandler::pending:init"(), !dbg !68
br label %initialized57, !dbg !68
initialized59: ; preds = %not_initialized60, %initialized57
%70 = load i1, i1* @"Crystal::SignalChildHandler::mutex:init", !dbg !68
br i1 %70, label %initialized61, label %not_initialized62, !dbg !68
not_initialized60: ; preds = %initialized57
store i1 true, i1* @"Crystal::SignalChildHandler::waiting:init", !dbg !68
call void @"~Crystal::SignalChildHandler::waiting:init"(), !dbg !68
br label %initialized59, !dbg !68
initialized61: ; preds = %not_initialized62, %initialized59
%71 = load i1, i1* @"Time::Location::location_cache:init", !dbg !71
br i1 %71, label %initialized63, label %not_initialized64, !dbg !71
not_initialized62: ; preds = %initialized59
store i1 true, i1* @"Crystal::SignalChildHandler::mutex:init", !dbg !68
call void @"~Crystal::SignalChildHandler::mutex:init"(), !dbg !68
br label %initialized61, !dbg !68
initialized63: ; preds = %not_initialized64, %initialized61
call void @"*print<String>:Nil"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'HELLO!\0A'" to %String*)), !dbg !74
ret void, !dbg !74
not_initialized64: ; preds = %initialized61
store i1 true, i1* @"Time::Location::location_cache:init", !dbg !71
call void @"~Time::Location::location_cache:init"()
br label %initialized63
}
declare i32 @printf(i8*, ...)
; Function Attrs: uwtable
define i8* @__crystal_malloc64(i64 %size) #0 !dbg !77 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !79
%1 = call i8* @"*GC::malloc<UInt64>:Pointer(Void)"(i64 %0), !dbg !80
ret i8* %1, !dbg !80
}
; Function Attrs: uwtable
define i8* @__crystal_malloc_atomic64(i64 %size) #0 !dbg !81 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !82
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !83
ret i8* %1, !dbg !83
}
; Function Attrs: uwtable
define i8* @__crystal_realloc64(i8* %ptr, i64 %size) #0 !dbg !84 {
entry:
%0 = call i64 @"*UInt64::new<UInt64>:UInt64"(i64 %size), !dbg !85
%1 = call i8* @"*GC::realloc<Pointer(Void), UInt64>:Pointer(Void)"(i8* %ptr, i64 %0), !dbg !86
ret i8* %1, !dbg !86
}
; Function Attrs: uwtable
define i32 @__crystal_personality(i32 %version, i32 %actions, i64 %exception_class, %"struct.LibUnwind::Exception"* %exception_object, i8* %context) #0 !dbg !87 {
alloca:
%start = alloca i64, !dbg !88
%ip = alloca i64, !dbg !88
%throw_offset = alloca i64, !dbg !88
%lsd = alloca i8*, !dbg !88
%leb = alloca %"/usr/share/crystal/src/raise.cr::LEBReader", !dbg !88
%cs_table_length = alloca i64, !dbg !88
%cs_table_end = alloca i8*, !dbg !88
%cs_offset = alloca i32, !dbg !88
%cs_length = alloca i32, !dbg !88
%cs_addr = alloca i32, !dbg !88
%action = alloca i64, !dbg !88
%__temp_286 = alloca i1, !dbg !88
%0 = alloca %"/usr/share/crystal/src/raise.cr::LEBReader", !dbg !88
br label %entry
entry: ; preds = %alloca
%1 = call i64 @_Unwind_GetRegionStart(i8* %context), !dbg !88
store i64 %1, i64* %start, !dbg !88
%2 = call i64 @_Unwind_GetIP(i8* %context), !dbg !88
store i64 %2, i64* %ip, !dbg !88
%3 = load i64, i64* %ip, !dbg !88
%4 = sub i64 %3, 1, !dbg !88
%5 = load i64, i64* %start, !dbg !88
%6 = sub i64 %4, %5, !dbg !88
store i64 %6, i64* %throw_offset, !dbg !88
%7 = call i8* @_Unwind_GetLanguageSpecificData(i8* %context), !dbg !88
store i8* %7, i8** %lsd, !dbg !88
%8 = load i8*, i8** %lsd, !dbg !88
%9 = call %"/usr/share/crystal/src/raise.cr::LEBReader" @"*/usr/share/crystal/src/raise.cr::LEBReader::new<Pointer(UInt8)>:/usr/share/crystal/src/raise.cr::LEBReader"(i8* %8), !dbg !88
store %"/usr/share/crystal/src/raise.cr::LEBReader" %9, %"/usr/share/crystal/src/raise.cr::LEBReader"* %0, !dbg !88
%10 = load %"/usr/share/crystal/src/raise.cr::LEBReader", %"/usr/share/crystal/src/raise.cr::LEBReader"* %0, !dbg !88
store %"/usr/share/crystal/src/raise.cr::LEBReader" %10, %"/usr/share/crystal/src/raise.cr::LEBReader"* %leb, !dbg !88
%11 = call i8 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
%12 = call i8 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
%13 = icmp ne i8 %12, -1, !dbg !88
br i1 %13, label %then, label %else, !dbg !88
then: ; preds = %entry
%14 = call i64 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
br label %exit, !dbg !88
else: ; preds = %entry
br label %exit, !dbg !88
exit: ; preds = %else, %then
%15 = call i8 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint8:UInt8"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
%16 = call i64 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
store i64 %16, i64* %cs_table_length, !dbg !88
%17 = getelementptr inbounds %"/usr/share/crystal/src/raise.cr::LEBReader", %"/usr/share/crystal/src/raise.cr::LEBReader"* %leb, i32 0, i32 0, !dbg !88
%18 = load i8*, i8** %17, !dbg !88
%19 = load i64, i64* %cs_table_length, !dbg !88
%20 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %18, i64 %19), !dbg !88
store i8* %20, i8** %cs_table_end, !dbg !88
br label %while, !dbg !88
while: ; preds = %exit14, %exit
%21 = getelementptr inbounds %"/usr/share/crystal/src/raise.cr::LEBReader", %"/usr/share/crystal/src/raise.cr::LEBReader"* %leb, i32 0, i32 0, !dbg !88
%22 = load i8*, i8** %21, !dbg !88
%23 = load i8*, i8** %cs_table_end, !dbg !88
%24 = call i1 @"*Pointer(UInt8)@Comparable(T)#<<Pointer(UInt8)>:Bool"(i8* %22, i8* %23), !dbg !88
br i1 %24, label %body, label %exit1, !dbg !88
body: ; preds = %while
%25 = call i32 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
store i32 %25, i32* %cs_offset, !dbg !88
%26 = call i32 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
store i32 %26, i32* %cs_length, !dbg !88
%27 = call i32 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uint32:UInt32"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
store i32 %27, i32* %cs_addr, !dbg !88
%28 = call i64 @"*/usr/share/crystal/src/raise.cr::LEBReader#read_uleb128:UInt64"(%"/usr/share/crystal/src/raise.cr::LEBReader"* %leb), !dbg !88
store i64 %28, i64* %action, !dbg !88
%29 = load i32, i32* %cs_addr, !dbg !88
%30 = icmp ne i32 %29, 0, !dbg !88
%31 = or i1 false, %30, !dbg !88
br i1 %31, label %then2, label %else3, !dbg !88
exit1: ; preds = %while
ret i32 8, !dbg !88
then2: ; preds = %body
%32 = load i32, i32* %cs_offset, !dbg !88
%33 = load i64, i64* %throw_offset, !dbg !88
%34 = zext i32 %32 to i64, !dbg !88
%35 = icmp ule i64 %34, %33, !dbg !88
store i1 %35, i1* %__temp_286, !dbg !88
br i1 %35, label %then6, label %else7, !dbg !88
else3: ; preds = %body
br label %exit14, !dbg !88
then4: ; preds = %exit8
%36 = call i1 @"*LibUnwind::Action@Enum#includes?<LibUnwind::Action>:Bool"(i32 %actions, i32 1), !dbg !88
br i1 %36, label %then9, label %else10, !dbg !88
else5: ; preds = %exit8
br label %exit13, !dbg !88
then6: ; preds = %then2
%37 = load i64, i64* %throw_offset, !dbg !88
%38 = load i32, i32* %cs_offset, !dbg !88
%39 = load i32, i32* %cs_length, !dbg !88
%40 = add i32 %38, %39, !dbg !88
%41 = zext i32 %40 to i64, !dbg !88
%42 = icmp ule i64 %37, %41, !dbg !88
br label %exit8, !dbg !88
else7: ; preds = %then2
%43 = load i1, i1* %__temp_286, !dbg !88
br label %exit8, !dbg !88
exit8: ; preds = %else7, %then6
%44 = phi i1 [ %42, %then6 ], [ %43, %else7 ], !dbg !88
br i1 %44, label %then4, label %else5, !dbg !88
then9: ; preds = %then4
ret i32 6, !dbg !88
else10: ; preds = %then4
%45 = call i1 @"*LibUnwind::Action@Enum#includes?<LibUnwind::Action>:Bool"(i32 %actions, i32 4), !dbg !88
br i1 %45, label %then11, label %else12, !dbg !88
then11: ; preds = %else10
%46 = ptrtoint %"struct.LibUnwind::Exception"* %exception_object to i64, !dbg !88
call void @_Unwind_SetGR(i8* %context, i32 0, i64 %46), !dbg !88
%47 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %exception_object, i32 0, i32 5, !dbg !88
%48 = load i32, i32* %47, !dbg !88
%49 = sext i32 %48 to i64, !dbg !88
call void @_Unwind_SetGR(i8* %context, i32 1, i64 %49), !dbg !88
%50 = load i64, i64* %start, !dbg !88
%51 = load i32, i32* %cs_addr, !dbg !88
%52 = zext i32 %51 to i64, !dbg !88
%53 = add i64 %50, %52, !dbg !88
%54 = call i64 @_Unwind_SetIP(i8* %context, i64 %53), !dbg !88
ret i32 7, !dbg !88
else12: ; preds = %else10
br label %exit13, !dbg !88
exit13: ; preds = %else5, %else12
br label %exit14, !dbg !88
exit14: ; preds = %else3, %exit13
br label %while, !dbg !88
}
; Function Attrs: noreturn uwtable
define void @__crystal_raise(%"struct.LibUnwind::Exception"* %unwind_ex) #1 !dbg !89 {
alloca:
%ret = alloca i32, !dbg !90
br label %entry
entry: ; preds = %alloca
%0 = call i32 @_Unwind_RaiseException(%"struct.LibUnwind::Exception"* %unwind_ex), !dbg !90
store i32 %0, i32* %ret, !dbg !90
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* bitcast ({ i32, i32, i32, [34 x i8] }* @"'Failed to raise an ...'" to %String*)), !dbg !90
%2 = load i32, i32* %ret, !dbg !90
%3 = call %String* @"*LibUnwind::ReasonCode@Enum#to_s:String"(i32 %2), !dbg !90
%4 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %3), !dbg !90
%5 = call i32 (i32, i8*, ...) @dprintf(i32 2, i8* %1, i8* %4), !dbg !90
%6 = call i32 @"*CallStack::print_backtrace:Int32"(), !dbg !90
%7 = load i32, i32* %ret, !dbg !90
%8 = call i32 @"*LibUnwind::ReasonCode@Enum#to_i32!:Int32"(i32 %7), !dbg !90
call void @exit(i32 %8), !dbg !90
unreachable, !dbg !90
}
; Function Attrs: uwtable
define i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %unwind_ex) #0 !dbg !91 {
entry:
%0 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %unwind_ex, i32 0, i32 4, !dbg !92
%1 = load i64, i64* %0, !dbg !92
ret i64 %1, !dbg !92
}
; Function Attrs: noreturn uwtable
define void @__crystal_raise_overflow() #1 !dbg !93 {
entry:
%0 = call %OverflowError* @"*OverflowError::new:OverflowError"(), !dbg !94
call void @"*raise<OverflowError>:NoReturn"(%OverflowError* %0), !dbg !95
unreachable, !dbg !95
}
define internal void @"~AtExitHandlers::running: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 @"~Debug::ELF::MAGIC:init"() {
alloca:
%__temp_111 = alloca %"Slice(UInt8)", !dbg !22
%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 1092, 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_111
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %__temp_111, 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_111, 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_111, 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_111, 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_111
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 !96 {
alloca:
%pointer = alloca i8*, !dbg !98
%0 = alloca %"Slice(UInt8)", !dbg !99
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 722, i32 %size), !dbg !100
store i8* %1, i8** %pointer, !dbg !101
%2 = load i8*, i8** %pointer, !dbg !101
%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 !99
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !99
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !99
ret %"Slice(UInt8)" %4, !dbg !99
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 %self, i32 %size) #0 !dbg !102 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !104
br i1 %0, label %then, label %else, !dbg !104
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !105
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !106
unreachable, !dbg !106
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !106
%3 = mul i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), %2, !dbg !107
%4 = call i8* @__crystal_malloc_atomic64(i64 %3), !dbg !107
%5 = trunc i64 %3 to i32, !dbg !107
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !107
ret i8* %4, !dbg !106
}
; Function Attrs: uwtable
define internal %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %message) #0 !dbg !108 {
alloca:
%_ = alloca %ArgumentError*, !dbg !109
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%ArgumentError* getelementptr (%ArgumentError, %ArgumentError* null, i32 1) to i64)), !dbg !109
%1 = bitcast i8* %0 to %ArgumentError*, !dbg !109
%2 = bitcast %ArgumentError* %1 to i8*, !dbg !109
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 !109
%3 = getelementptr inbounds %ArgumentError, %ArgumentError* %1, i32 0, i32 0, !dbg !109
store i32 39, i32* %3, !dbg !109
store %ArgumentError* %1, %ArgumentError** %_, !dbg !109
%4 = load %ArgumentError*, %ArgumentError** %_, !dbg !109
call void @"*ArgumentError#initialize<String>:Nil"(%ArgumentError* %4, %String* %message), !dbg !109
%5 = load %ArgumentError*, %ArgumentError** %_, !dbg !109
ret %ArgumentError* %5, !dbg !109
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i32, i1) #2
; Function Attrs: uwtable
define internal void @"*ArgumentError#initialize<String>:Nil"(%ArgumentError* %self, %String* %message) #0 !dbg !110 {
entry:
call void @"*ArgumentError@Exception#initialize<String>:Nil"(%ArgumentError* %self, %String* %message), !dbg !111
ret void, !dbg !111
}
; Function Attrs: uwtable
define internal void @"*ArgumentError@Exception#initialize<String>:Nil"(%ArgumentError* %self, %String* %message) #0 !dbg !112 {
alloca:
%cause = alloca %Nil, !dbg !113
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 1, !dbg !114
store %String* %message, %String** %0, !dbg !114
%1 = load %Nil, %Nil* %cause, !dbg !114
%2 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 2, !dbg !115
store i32* null, i32** %2, !dbg !115
ret void, !dbg !115
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %exception) #1 !dbg !116 {
alloca:
%__temp_24 = alloca %"(CallStack | Nil)", !dbg !117
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !117
%0 = alloca %CallStack, !dbg !117
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %ArgumentError, %ArgumentError* %exception, i32 0, i32 3, !dbg !117
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !117
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_24, !dbg !117
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !117
%4 = load i32, i32* %3, !dbg !117
%5 = icmp eq i32 %4, 0, !dbg !117
%6 = xor i1 %5, true, !dbg !117
%7 = and i1 true, %6, !dbg !117
br i1 %7, label %then, label %else, !dbg !117
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_24, i32 0, i32 1, !dbg !117
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !117
br label %exit, !dbg !117
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !117
store %CallStack %10, %CallStack* %0, !dbg !117
%11 = load %CallStack, %CallStack* %0, !dbg !117
%12 = call %CallStack @"*ArgumentError@Exception#callstack=<CallStack>:CallStack"(%ArgumentError* %exception, %CallStack %11), !dbg !117
br label %exit, !dbg !117
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !117
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !117
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !117
store i64 %15, i64* %16, !dbg !117
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !117
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !117
store i64 %18, i64* %19, !dbg !117
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
%21 = ptrtoint %ArgumentError* %exception to i64, !dbg !117
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !117
store i64 %21, i64* %22, !dbg !117
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !117
store i32 39, i32* %24, !dbg !117
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !117
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !117
unreachable, !dbg !117
}
; Function Attrs: uwtable
define internal %CallStack @"*CallStack::new:CallStack"() #0 !dbg !118 {
alloca:
%_ = alloca %CallStack, !dbg !119
%0 = alloca %CallStack, !dbg !119
br label %entry
entry: ; preds = %alloca
%1 = bitcast %CallStack* %0 to i8*, !dbg !119
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 !119
%2 = load %CallStack, %CallStack* %0, !dbg !119
store %CallStack %2, %CallStack* %_, !dbg !119
%3 = call %"Array(Pointer(Void))"* @"*CallStack#initialize:Array(Pointer(Void))"(%CallStack* %_), !dbg !119
%4 = load %CallStack, %CallStack* %_, !dbg !119
ret %CallStack %4, !dbg !119
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*CallStack#initialize:Array(Pointer(Void))"(%CallStack* %self) #0 !dbg !120 {
entry:
%0 = call %"Array(Pointer(Void))"* @"*CallStack::unwind:Array(Pointer(Void))"(), !dbg !121
%1 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 0, !dbg !122
store %"Array(Pointer(Void))"* %0, %"Array(Pointer(Void))"** %1, !dbg !122
ret %"Array(Pointer(Void))"* %0, !dbg !122
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*CallStack::unwind:Array(Pointer(Void))"() #0 !dbg !123 {
alloca:
%callstack = alloca %"Array(Pointer(Void))"*, !dbg !124
%backtrace_fn = alloca %"->", !dbg !124
%0 = alloca %"->", !dbg !125
br label %entry
entry: ; preds = %alloca
%1 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)::new:Array(Pointer(Void))"(i32 512), !dbg !126
store %"Array(Pointer(Void))"* %1, %"Array(Pointer(Void))"** %callstack, !dbg !125
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !125
store i8* bitcast (i32 (i8*, i8*)* @"~procProc(Pointer(Void), Pointer(Void), LibUnwind::ReasonCode)@/usr/share/crystal/src/callstack.cr:77" to i8*), i8** %2, !dbg !125
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !125
store i8* null, i8** %3, !dbg !125
%4 = load %"->", %"->"* %0, !dbg !125
store %"->" %4, %"->"* %backtrace_fn, !dbg !127
%5 = load %"->", %"->"* %backtrace_fn, !dbg !127
%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 !128
%11 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %callstack, !dbg !128
ret %"Array(Pointer(Void))"* %11, !dbg !128
}
; Function Attrs: uwtable
define internal %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)::new:Array(Pointer(Void))"(i32 %self) #0 !dbg !129 {
alloca:
%_ = alloca %"Array(Pointer(Void))"*, !dbg !131
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 !131
%1 = bitcast i8* %0 to %"Array(Pointer(Void))"*, !dbg !131
%2 = bitcast %"Array(Pointer(Void))"* %1 to i8*, !dbg !131
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 !131
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %1, i32 0, i32 0, !dbg !131
store i32 7, i32* %3, !dbg !131
store %"Array(Pointer(Void))"* %1, %"Array(Pointer(Void))"** %_, !dbg !131
%4 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %_, !dbg !131
%5 = call i8** @"*Array(Pointer(Void))@Array(T)#initialize:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %4), !dbg !131
%6 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %_, !dbg !131
ret %"Array(Pointer(Void))"* %6, !dbg !131
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#initialize:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self) #0 !dbg !132 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !133
store i32 0, i32* %0, !dbg !133
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !134
store i32 0, i32* %1, !dbg !134
%2 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)::null:Pointer(Pointer(Void))"(i32 737), !dbg !135
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !136
store i8** %2, i8*** %3, !dbg !136
ret i8** %2, !dbg !136
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)::null:Pointer(Pointer(Void))"(i32 %self) #0 !dbg !137 {
entry:
ret i8** null, !dbg !138
}
; Function Attrs: uwtable
define internal i32 @"~procProc(Pointer(Void), Pointer(Void), LibUnwind::ReasonCode)@/usr/share/crystal/src/callstack.cr:77"(i8* %context, i8* %data) #0 !dbg !139 {
alloca:
%bt = alloca %"Array(Pointer(Void))"*, !dbg !140
%ip = alloca i8*, !dbg !140
br label %entry
entry: ; preds = %alloca
%0 = bitcast i8* %data to %"Array(Pointer(Void))"*, !dbg !140
store %"Array(Pointer(Void))"* %0, %"Array(Pointer(Void))"** %bt, !dbg !141
%1 = call i64 @_Unwind_GetIP(i8* %context), !dbg !142
%2 = inttoptr i64 %1 to i8*, !dbg !142
store i8* %2, i8** %ip, !dbg !143
%3 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %bt, !dbg !143
%4 = load i8*, i8** %ip, !dbg !143
%5 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#<<<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %3, i8* %4), !dbg !144
ret i32 0, !dbg !144
}
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 !145 {
entry:
%0 = call %"Array(Pointer(Void))"* @"*Array(Pointer(Void))@Array(T)#push<Pointer(Void)>:Array(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i8* %value), !dbg !146
ret %"Array(Pointer(Void))"* %0, !dbg !146
}
; 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 !147 {
entry:
%0 = call i8** @"*Array(Pointer(Void))@Array(T)#check_needs_resize:(Pointer(Pointer(Void)) | Nil)"(%"Array(Pointer(Void))"* %self), !dbg !148
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !148
%2 = load i8**, i8*** %1, !dbg !148
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !148
%4 = load i32, i32* %3, !dbg !148
%5 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %2, i32 %4, i8* %value), !dbg !149
%6 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !149
%7 = load i32, i32* %6, !dbg !149
%8 = add i32 %7, 1, !dbg !149
%9 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !150
store i32 %8, i32* %9, !dbg !150
ret %"Array(Pointer(Void))"* %self, !dbg !150
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#check_needs_resize:(Pointer(Pointer(Void)) | Nil)"(%"Array(Pointer(Void))"* %self) #0 !dbg !151 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 1, !dbg !152
%1 = load i32, i32* %0, !dbg !152
%2 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !152
%3 = load i32, i32* %2, !dbg !152
%4 = icmp eq i32 %1, %3, !dbg !152
br i1 %4, label %then, label %else, !dbg !152
then: ; preds = %entry
%5 = call i8** @"*Array(Pointer(Void))@Array(T)#double_capacity:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self), !dbg !152
br label %exit, !dbg !152
else: ; preds = %entry
br label %exit, !dbg !152
exit: ; preds = %else, %then
%6 = phi i8** [ %5, %then ], [ null, %else ], !dbg !152
ret i8** %6, !dbg !152
}
; Function Attrs: uwtable
define internal i8** @"*Array(Pointer(Void))@Array(T)#double_capacity:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self) #0 !dbg !153 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !154
%1 = load i32, i32* %0, !dbg !154
%2 = icmp eq i32 %1, 0, !dbg !154
br i1 %2, label %then, label %else, !dbg !154
then: ; preds = %entry
br label %exit, !dbg !154
else: ; preds = %entry
%3 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !154
%4 = load i32, i32* %3, !dbg !154
%5 = mul i32 %4, 2, !dbg !154
br label %exit, !dbg !154
exit: ; preds = %else, %then
%6 = phi i32 [ 3, %then ], [ %5, %else ], !dbg !154
%7 = call i8** @"*Array(Pointer(Void))@Array(T)#resize_to_capacity<Int32>:Pointer(Pointer(Void))"(%"Array(Pointer(Void))"* %self, i32 %6), !dbg !155
ret i8** %7, !dbg !155
}
; 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 !156 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !157
store i32 %capacity, i32* %0, !dbg !157
%1 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !158
%2 = load i8**, i8*** %1, !dbg !158
%3 = icmp ne i8** %2, null, !dbg !158
br i1 %3, label %then, label %else, !dbg !158
then: ; preds = %entry
%4 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !158
%5 = load i8**, i8*** %4, !dbg !158
%6 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !158
%7 = load i32, i32* %6, !dbg !158
%8 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#realloc<Int32>:Pointer(Pointer(Void))"(i8** %5, i32 %7), !dbg !159
%9 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !160
store i8** %8, i8*** %9, !dbg !160
br label %exit, !dbg !160
else: ; preds = %entry
%10 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 2, !dbg !160
%11 = load i32, i32* %10, !dbg !160
%12 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)::malloc<Int32>:Pointer(Pointer(Void))"(i32 737, i32 %11), !dbg !161
%13 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !162
store i8** %12, i8*** %13, !dbg !162
br label %exit, !dbg !162
exit: ; preds = %else, %then
%14 = phi i8** [ %8, %then ], [ %12, %else ], !dbg !162
ret i8** %14, !dbg !162
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)#realloc<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %size) #0 !dbg !163 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !164
br i1 %0, label %then, label %else, !dbg !164
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !165
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !166
unreachable, !dbg !166
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !166
%3 = bitcast i8** %self to i8*, !dbg !166
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !166
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !166
%6 = bitcast i8* %5 to i8**, !dbg !166
ret i8** %6, !dbg !166
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)::malloc<Int32>:Pointer(Pointer(Void))"(i32 %self, i32 %size) #0 !dbg !167 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !168
br i1 %0, label %then, label %else, !dbg !168
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !169
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !170
unreachable, !dbg !170
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !170
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !171
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !171
%5 = trunc i64 %3 to i32, !dbg !171
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !171
%6 = bitcast i8* %4 to i8**, !dbg !171
ret i8** %6, !dbg !170
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]=<Int32, Pointer(Void)>:Pointer(Void)"(i8** %self, i32 %offset, i8* %value) #0 !dbg !172 {
entry:
%0 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %offset), !dbg !173
store i8* %value, i8** %0, !dbg !173
ret i8* %value, !dbg !173
}
; Function Attrs: uwtable
define internal i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %other) #0 !dbg !174 {
entry:
%0 = sext i32 %other to i64, !dbg !175
%1 = getelementptr inbounds i8*, i8** %self, i64 %0, !dbg !175
ret i8** %1, !dbg !175
}
define internal i8* @"~check_proc_is_not_closure"(%"->") {
entry:
%1 = extractvalue %"->" %0, 0, !dbg !127
%2 = extractvalue %"->" %0, 1, !dbg !127
%3 = icmp eq i8* %2, null, !dbg !127
br i1 %3, label %ctx_is_null, label %ctx_is_not_null, !dbg !127
ctx_is_null: ; preds = %entry
ret i8* %1, !dbg !127
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 !176 {
entry:
%0 = call %Exception* @"*Exception::new<String>:Exception"(%String* %message), !dbg !177
call void @"*raise<Exception>:NoReturn"(%Exception* %0), !dbg !178
unreachable, !dbg !178
}
; Function Attrs: uwtable
define internal %Exception* @"*Exception::new<String>:Exception"(%String* %__arg0) #0 !dbg !179 {
alloca:
%_ = alloca %Exception*, !dbg !180
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Exception* getelementptr (%Exception, %Exception* null, i32 1) to i64)), !dbg !180
%1 = bitcast i8* %0 to %Exception*, !dbg !180
%2 = bitcast %Exception* %1 to i8*, !dbg !180
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 !180
%3 = getelementptr inbounds %Exception, %Exception* %1, i32 0, i32 0, !dbg !180
store i32 63, i32* %3, !dbg !180
store %Exception* %1, %Exception** %_, !dbg !180
%4 = load %Exception*, %Exception** %_, !dbg !180
call void @"*Exception#initialize<String>:Nil"(%Exception* %4, %String* %__arg0), !dbg !180
%5 = load %Exception*, %Exception** %_, !dbg !180
ret %Exception* %5, !dbg !180
}
; Function Attrs: uwtable
define internal void @"*Exception#initialize<String>:Nil"(%Exception* %self, %String* %message) #0 !dbg !181 {
alloca:
%cause = alloca %Nil, !dbg !182
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 1, !dbg !183
store %String* %message, %String** %0, !dbg !183
%1 = load %Nil, %Nil* %cause, !dbg !183
%2 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 2, !dbg !184
store i32* null, i32** %2, !dbg !184
ret void, !dbg !184
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<Exception>:NoReturn"(%Exception* %exception) #1 !dbg !185 {
alloca:
%__temp_32 = alloca %"(CallStack | Nil)", !dbg !186
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !186
%0 = alloca %CallStack, !dbg !186
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %Exception, %Exception* %exception, i32 0, i32 3, !dbg !186
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !186
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_32, !dbg !186
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !186
%4 = load i32, i32* %3, !dbg !186
%5 = icmp eq i32 %4, 0, !dbg !186
%6 = xor i1 %5, true, !dbg !186
%7 = and i1 true, %6, !dbg !186
br i1 %7, label %then, label %else, !dbg !186
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_32, i32 0, i32 1, !dbg !186
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !186
br label %exit, !dbg !186
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !186
store %CallStack %10, %CallStack* %0, !dbg !186
%11 = load %CallStack, %CallStack* %0, !dbg !186
%12 = call %CallStack @"*Exception#callstack=<CallStack>:CallStack"(%Exception* %exception, %CallStack %11), !dbg !186
br label %exit, !dbg !186
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !186
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !186
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !186
store i64 %15, i64* %16, !dbg !186
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !186
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !186
store i64 %18, i64* %19, !dbg !186
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
%21 = ptrtoint %Exception* %exception to i64, !dbg !186
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !186
store i64 %21, i64* %22, !dbg !186
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !186
store i32 63, i32* %24, !dbg !186
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !186
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !186
unreachable, !dbg !186
}
; Function Attrs: uwtable
define internal %CallStack @"*Exception#callstack=<CallStack>:CallStack"(%Exception* %self, %CallStack %callstack) #0 !dbg !187 {
alloca:
%callstack1 = alloca %CallStack, !dbg !188
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !188
%0 = getelementptr inbounds %Exception, %Exception* %self, i32 0, i32 3, !dbg !189
%1 = load %CallStack, %CallStack* %callstack1, !dbg !189
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !189
store i32 353, i32* %2, !dbg !189
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !189
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !189
store %CallStack %1, %CallStack* %4, !dbg !189
%5 = load %CallStack, %CallStack* %callstack1, !dbg !189
ret %CallStack %5, !dbg !189
}
; Function Attrs: uwtable
define internal %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 %self) #0 !dbg !190 {
alloca:
%size = alloca i32, !dbg !191
br label %entry
entry: ; preds = %alloca
store i32 1, i32* %size, !dbg !192
%0 = load i32, i32* %size, !dbg !193
%1 = icmp slt i32 %0, 0, !dbg !193
br i1 %1, label %then, label %else, !dbg !193
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !194
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !195
unreachable, !dbg !195
else: ; preds = %entry
%3 = load i32, i32* %size, !dbg !195
%4 = sext i32 %3 to i64, !dbg !195
%5 = mul i64 ptrtoint (%"struct.LibUnwind::Exception"* getelementptr (%"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* null, i32 1) to i64), %4, !dbg !196
%6 = call i8* @__crystal_malloc_atomic64(i64 %5), !dbg !196
%7 = trunc i64 %5 to i32, !dbg !196
call void @llvm.memset.p0i8.i32(i8* %6, i8 0, i32 %7, i32 4, i1 false), !dbg !196
%8 = bitcast i8* %6 to %"struct.LibUnwind::Exception"*, !dbg !196
ret %"struct.LibUnwind::Exception"* %8, !dbg !195
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Number::zero:UInt64"() #0 !dbg !197 {
entry:
%0 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 0), !dbg !199
ret i64 %0, !dbg !199
}
; Function Attrs: uwtable
define internal i64 @"*UInt64::new<Int32>:UInt64"(i32 %value) #0 !dbg !200 {
entry:
%0 = sext i32 %value to i64, !dbg !202
ret i64 %0, !dbg !202
}
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 !203 {
alloca:
%callstack1 = alloca %CallStack, !dbg !204
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !204
%0 = getelementptr inbounds %ArgumentError, %ArgumentError* %self, i32 0, i32 3, !dbg !205
%1 = load %CallStack, %CallStack* %callstack1, !dbg !205
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !205
store i32 353, i32* %2, !dbg !205
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !205
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !205
store %CallStack %1, %CallStack* %4, !dbg !205
%5 = load %CallStack, %CallStack* %callstack1, !dbg !205
ret %CallStack %5, !dbg !205
}
; 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 %__temp_105) #0 !dbg !206 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !207
%0 = alloca %"Slice(UInt8)", !dbg !207
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !207
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 !207
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !207
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !207
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize:read_only<Pointer(UInt8), Int32, Bool>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1, i1 %__temp_105), !dbg !207
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !207
ret %"Slice(UInt8)" %4, !dbg !207
}
; 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 !208 {
entry:
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !209
store i8* %pointer, i8** %0, !dbg !209
%1 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !210
store i1 %read_only, i1* %1, !dbg !210
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !211
store i32 %size, i32* %2, !dbg !211
ret i32 %size, !dbg !211
}
; Function Attrs: uwtable
define internal i8 @"*UInt8::new!<Int32>:UInt8"(i32 %value) #0 !dbg !212 {
entry:
%0 = trunc i32 %value to i8, !dbg !213
ret i8 %0, !dbg !213
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %self, i32 %offset, i8 %value) #0 !dbg !214 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %offset), !dbg !215
store i8 %value, i8* %0, !dbg !215
ret i8 %value, !dbg !215
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %other) #0 !dbg !216 {
entry:
%0 = sext i32 %other to i64, !dbg !217
%1 = getelementptr inbounds i8, i8* %self, i64 %0, !dbg !217
ret i8* %1, !dbg !217
}
define internal void @"~CallStack::CURRENT_DIR:init"() {
alloca:
%dir = alloca %String*, !dbg !25
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 !25
br i1 %0, label %initialized, label %not_initialized, !dbg !25
initialized: ; preds = %not_initialized, %entry
ret %String** @"Process::INITIAL_PWD"
not_initialized: ; preds = %entry
store i1 true, i1* @"Process::INITIAL_PWD:init", !dbg !25
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 !218 {
entry:
%0 = call %String* @"*Crystal::System::Dir::current:String"(), !dbg !220
ret %String* %0, !dbg !220
}
; Function Attrs: uwtable
define internal %String* @"*Crystal::System::Dir::current:String"() #0 !dbg !221 {
alloca:
%dir = alloca i8*, !dbg !223
%dir_str = alloca %String*, !dbg !223
br label %entry
entry: ; preds = %alloca
%0 = call i8* @getcwd(i8* null, i64 0), !dbg !224
store i8* %0, i8** %dir, !dbg !225
%1 = icmp ne i8* %0, null, !dbg !225
br i1 %1, label %then, label %else, !dbg !225
then: ; preds = %entry
br label %exit, !dbg !225
else: ; preds = %entry
%2 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'getcwd'" to %String*)), !dbg !226
call void @"*raise<Errno>:NoReturn"(%Errno* %2), !dbg !227
unreachable, !dbg !227
exit: ; preds = %then
%3 = load i8*, i8** %dir, !dbg !227
%4 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %3), !dbg !228
store %String* %4, %String** %dir_str, !dbg !229
%5 = load i8*, i8** %dir, !dbg !229
call void @free(i8* %5), !dbg !230
%6 = load %String*, %String** %dir_str, !dbg !230
ret %String* %6, !dbg !230
}
declare i8* @getcwd(i8*, i64)
; Function Attrs: uwtable
define internal %Errno* @"*Errno::new<String>:Errno"(%String* %__arg0) #0 !dbg !231 {
alloca:
%_ = alloca %Errno*, !dbg !233
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Errno* getelementptr (%Errno, %Errno* null, i32 1) to i64)), !dbg !233
%1 = bitcast i8* %0 to %Errno*, !dbg !233
%2 = bitcast %Errno* %1 to i8*, !dbg !233
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 !233
%3 = getelementptr inbounds %Errno, %Errno* %1, i32 0, i32 0, !dbg !233
store i32 54, i32* %3, !dbg !233
store %Errno* %1, %Errno** %_, !dbg !233
%4 = load %Errno*, %Errno** %_, !dbg !233
call void @"*Errno#initialize<String>:Nil"(%Errno* %4, %String* %__arg0), !dbg !233
%5 = load %Errno*, %Errno** %_, !dbg !233
ret %Errno* %5, !dbg !233
}
; Function Attrs: uwtable
define internal void @"*Errno#initialize<String>:Nil"(%Errno* %self, %String* %message) #0 !dbg !234 {
alloca:
%errno = alloca i32, !dbg !235
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*Errno::value:Int32"(), !dbg !236
store i32 %0, i32* %errno, !dbg !237
%1 = load i32, i32* %errno, !dbg !237
call void @"*Errno#initialize<String, Int32>:Nil"(%Errno* %self, %String* %message, i32 %1), !dbg !235
ret void, !dbg !235
}
; Function Attrs: uwtable
define internal i32 @"*Errno::value:Int32"() #0 !dbg !238 {
entry:
%0 = call i32* @__errno_location(), !dbg !239
%1 = load i32, i32* %0, !dbg !239
ret i32 %1, !dbg !239
}
declare i32* @__errno_location()
; Function Attrs: uwtable
define internal void @"*Errno#initialize<String, Int32>:Nil"(%Errno* %self, %String* %message, i32 %errno) #0 !dbg !240 {
entry:
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 4, !dbg !241
store i32 %errno, i32* %0, !dbg !241
%1 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 4, !dbg !241
%2 = load i32, i32* %1, !dbg !241
%3 = call i8* @strerror(i32 %2), !dbg !242
%4 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %3), !dbg !243
%5 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 5, !dbg !244
store %String* %4, %String** %5, !dbg !244
%6 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !245
%7 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %6, %String* %message), !dbg !245
%8 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %7, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*)), !dbg !245
%9 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 5, !dbg !245
%10 = load %String*, %String** %9, !dbg !245
%11 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %8, %String* %10), !dbg !245
%12 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %11), !dbg !245
call void @"*Errno@Exception#initialize<String>:Nil"(%Errno* %self, %String* %12), !dbg !246
ret void, !dbg !246
}
declare i8* @strerror(i32)
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8)>:String"(i8* %chars) #0 !dbg !247 {
entry:
%0 = call i64 @strlen(i8* %chars), !dbg !249
%1 = call %String* @"*String::new<Pointer(UInt8), UInt64>:String"(i8* %chars, i64 %0), !dbg !250
ret %String* %1, !dbg !250
}
declare i64 @strlen(i8*)
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8), UInt64>:String"(i8* %chars, i64 %bytesize) #0 !dbg !251 {
alloca:
%size = alloca i32, !dbg !252
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %size, !dbg !253
%0 = load i32, i32* %size, !dbg !253
%1 = call %String* @"*String::new<Pointer(UInt8), UInt64, Int32>:String"(i8* %chars, i64 %bytesize, i32 %0), !dbg !252
ret %String* %1, !dbg !252
}
; Function Attrs: uwtable
define internal %String* @"*String::new<Pointer(UInt8), UInt64, Int32>:String"(i8* %chars, i64 %bytesize, i32 %size) #0 !dbg !254 {
alloca:
%buffer = alloca i8*, !dbg !255
%capacity = alloca i64, !dbg !255
%str = alloca i8*, !dbg !255
%buffer1 = alloca i8*, !dbg !255
%__temp_25 = alloca %"Tuple(UInt64, Int32)", !dbg !255
%bytesize2 = alloca i64, !dbg !255
%size3 = alloca i32, !dbg !255
%__temp_26 = alloca i1, !dbg !255
%str_header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !255
%0 = alloca %"Tuple(UInt64, Int32)", !dbg !256
%1 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !257
br label %entry
entry: ; preds = %alloca
%2 = icmp eq i64 %bytesize, 0, !dbg !258
%3 = and i1 true, %2, !dbg !258
br i1 %3, label %then, label %else, !dbg !258
then: ; preds = %entry
ret %String* bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), !dbg !258
else: ; preds = %entry
store i64 %bytesize, i64* %capacity, !dbg !255
%4 = load i64, i64* %capacity, !dbg !255
call void @"*String::check_capacity_in_bounds<UInt64>:Nil"(i64 %4), !dbg !259
%5 = load i64, i64* %capacity, !dbg !259
%6 = trunc i64 %5 to i32, !dbg !259
%7 = add i32 %6, 12, !dbg !259
%8 = add i32 %7, 1, !dbg !259
%9 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %8), !dbg !260
store i8* %9, i8** %str, !dbg !261
%10 = load i8*, i8** %str, !dbg !261
%11 = bitcast i8* %10 to %String*, !dbg !261
%12 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %11), !dbg !262
store i8* %12, i8** %buffer1, !dbg !263
%13 = load i8*, i8** %buffer1, !dbg !263
store i8* %13, i8** %buffer, !dbg !263
%14 = load i8*, i8** %buffer, !dbg !263
%15 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %14, i8* %chars, i64 %bytesize), !dbg !256
%16 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, i32 0, i32 0, !dbg !256
store i64 %bytesize, i64* %16, !dbg !256
%17 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, i32 0, i32 1, !dbg !256
store i32 %size, i32* %17, !dbg !256
%18 = load %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %0, !dbg !264
store %"Tuple(UInt64, Int32)" %18, %"Tuple(UInt64, Int32)"* %__temp_25, !dbg !264
%19 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %__temp_25, i32 0, i32 0, !dbg !264
%20 = load i64, i64* %19, !dbg !264
store i64 %20, i64* %bytesize2, !dbg !265
%21 = getelementptr inbounds %"Tuple(UInt64, Int32)", %"Tuple(UInt64, Int32)"* %__temp_25, i32 0, i32 1, !dbg !265
%22 = load i32, i32* %21, !dbg !265
store i32 %22, i32* %size3, !dbg !266
%23 = load i64, i64* %bytesize2, !dbg !267
%24 = icmp ule i64 0, %23, !dbg !267
%25 = or i1 true, %24, !dbg !267
store i1 %25, i1* %__temp_26, !dbg !267
br i1 %25, label %then6, label %else7, !dbg !267
then4: ; preds = %exit
br label %exit8, !dbg !267
else5: ; preds = %exit
%26 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Bytesize out of cap...'" to %String*)), !dbg !268
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %26), !dbg !269
unreachable, !dbg !269
then6: ; preds = %else
%27 = load i64, i64* %bytesize2, !dbg !267
%28 = load i64, i64* %capacity, !dbg !267
%29 = icmp ule i64 %27, %28, !dbg !267
br label %exit, !dbg !267
else7: ; preds = %else
%30 = load i1, i1* %__temp_26, !dbg !267
br label %exit, !dbg !267
exit: ; preds = %else7, %then6
%31 = phi i1 [ %29, %then6 ], [ %30, %else7 ], !dbg !267
br i1 %31, label %then4, label %else5, !dbg !267
exit8: ; preds = %then4
%32 = load i8*, i8** %buffer1, !dbg !269
%33 = load i64, i64* %bytesize2, !dbg !269
%34 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %32, i64 %33, i8 0), !dbg !270
%35 = load i64, i64* %bytesize2, !dbg !271
%36 = load i64, i64* %capacity, !dbg !271
%37 = icmp ult i64 %35, %36, !dbg !271
br i1 %37, label %then9, label %else10, !dbg !271
then9: ; preds = %exit8
%38 = load i8*, i8** %str, !dbg !271
%39 = load i64, i64* %bytesize2, !dbg !271
%40 = trunc i64 %39 to i32, !dbg !271
%41 = add i32 %40, 12, !dbg !271
%42 = add i32 %41, 1, !dbg !271
%43 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %38, i32 %42), !dbg !272
store i8* %43, i8** %str, !dbg !273
br label %exit11, !dbg !273
else10: ; preds = %exit8
br label %exit11, !dbg !273
exit11: ; preds = %else10, %then9
%44 = load i8*, i8** %str, !dbg !273
%45 = bitcast i8* %44 to %"Tuple(Int32, Int32, Int32)"*, !dbg !273
store %"Tuple(Int32, Int32, Int32)"* %45, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !257
%46 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !257
%47 = call i32* @"~String::TYPE_ID:read"(), !dbg !257
%48 = load i32, i32* %47, !dbg !257
%49 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 0, !dbg !257
store i32 %48, i32* %49, !dbg !257
%50 = load i64, i64* %bytesize2, !dbg !257
%51 = trunc i64 %50 to i32, !dbg !257
%52 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 1, !dbg !257
store i32 %51, i32* %52, !dbg !257
%53 = load i32, i32* %size3, !dbg !257
%54 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, i32 0, i32 2, !dbg !257
store i32 %53, i32* %54, !dbg !257
%55 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %1, !dbg !257
store %"Tuple(Int32, Int32, Int32)" %55, %"Tuple(Int32, Int32, Int32)"* %46, !dbg !257
%56 = load i8*, i8** %str, !dbg !257
%57 = bitcast i8* %56 to %String*, !dbg !257
ret %String* %57, !dbg !257
}
; Function Attrs: uwtable
define internal void @"*String::check_capacity_in_bounds<UInt64>:Nil"(i64 %capacity) #0 !dbg !274 {
entry:
%0 = icmp ult i64 %capacity, 0, !dbg !275
%1 = and i1 true, %0, !dbg !275
br i1 %1, label %then, label %else, !dbg !275
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*)), !dbg !276
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !277
unreachable, !dbg !277
else: ; preds = %entry
%3 = icmp ugt i64 %capacity, 4294967282, !dbg !278
br i1 %3, label %then1, label %else2, !dbg !278
then1: ; preds = %else
%4 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*)), !dbg !279
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %4), !dbg !280
unreachable, !dbg !280
else2: ; preds = %else
ret void, !dbg !280
}
; Function Attrs: uwtable
define internal i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %size) #0 !dbg !281 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !282
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !283
ret i8* %1, !dbg !283
}
; Function Attrs: uwtable
define internal i64 @"*UInt64::new<UInt32>:UInt64"(i32 %value) #0 !dbg !284 {
entry:
%0 = zext i32 %value to i64, !dbg !285
ret i64 %0, !dbg !285
}
; Function Attrs: uwtable
define internal i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %size) #0 !dbg !286 {
entry:
%0 = call i8* @GC_malloc_atomic(i64 %size), !dbg !287
ret i8* %0, !dbg !287
}
declare i8* @GC_malloc_atomic(i64)
; Function Attrs: uwtable
define internal i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self) #0 !dbg !288 {
entry:
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 3, !dbg !289
ret i8* %0, !dbg !289
}
; 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 !290 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %source, i8* %self, i64 %count), !dbg !291
ret i8* %0, !dbg !291
}
; 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 !292 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), UInt64>:Pointer(UInt8)"(i8* %target, i8* %self, i64 %count), !dbg !293
ret i8* %0, !dbg !293
}
; 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 !294 {
alloca:
%count1 = alloca i64, !dbg !295
br label %entry
entry: ; preds = %alloca
store i64 %count, i64* %count1, !dbg !295
%0 = load i64, i64* %count1, !dbg !296
%1 = icmp ult i64 %0, 0, !dbg !296
%2 = and i1 true, %1, !dbg !296
br i1 %2, label %then, label %else, !dbg !296
then: ; preds = %entry
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*)), !dbg !297
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !296
unreachable, !dbg !296
else: ; preds = %entry
%4 = call i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8).class>:Bool"(i32 722, i32 722), !dbg !298
br i1 %4, label %then2, label %else3, !dbg !298
then2: ; preds = %else
%5 = load i64, i64* %count1, !dbg !298
%6 = call i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<UInt64>:UInt64"(i8* %self, i64 %5), !dbg !299
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %self, i8* %source, i64 %6, i32 0, i1 false), !dbg !300
br label %exit, !dbg !300
else3: ; preds = %else
br label %while, !dbg !300
exit: ; preds = %exit4, %then2
ret i8* %self, !dbg !301
while: ; preds = %body, %else3
%7 = load i64, i64* %count1, !dbg !302
%8 = sub i64 %7, 1, !dbg !302
store i64 %8, i64* %count1, !dbg !303
%9 = icmp uge i64 %8, 0, !dbg !303
%10 = or i1 true, %9, !dbg !303
br i1 %10, label %body, label %exit4, !dbg !303
body: ; preds = %while
%11 = load i64, i64* %count1, !dbg !303
%12 = load i64, i64* %count1, !dbg !303
%13 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<UInt64>:UInt8"(i8* %source, i64 %12), !dbg !304
%14 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %self, i64 %11, i8 %13), !dbg !301
br label %while, !dbg !301
exit4: ; preds = %while
br label %exit, !dbg !301
}
; Function Attrs: uwtable
define internal i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8).class>:Bool"(i32 %self, i32 %other) #0 !dbg !305 {
entry:
ret i1 true, !dbg !307
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<UInt64>:UInt64"(i8* %self, i64 %count) #0 !dbg !308 {
entry:
%0 = mul i64 %count, 1, !dbg !309
ret i64 %0, !dbg !309
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #2
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]<UInt64>:UInt8"(i8* %self, i64 %offset) #0 !dbg !310 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %offset), !dbg !311
%1 = load i8, i8* %0, !dbg !311
ret i8 %1, !dbg !311
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %other) #0 !dbg !312 {
entry:
%0 = getelementptr inbounds i8, i8* %self, i64 %other, !dbg !313
ret i8* %0, !dbg !313
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]=<UInt64, UInt8>:UInt8"(i8* %self, i64 %offset, i8 %value) #0 !dbg !314 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<UInt64>:Pointer(UInt8)"(i8* %self, i64 %offset), !dbg !315
store i8 %value, i8* %0, !dbg !315
ret i8 %value, !dbg !315
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %self, i32 %size) #0 !dbg !316 {
entry:
%0 = icmp ult i32 %size, 0, !dbg !317
%1 = and i1 true, %0, !dbg !317
br i1 %1, label %then, label %else, !dbg !317
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !318
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !319
unreachable, !dbg !319
else: ; preds = %entry
%3 = zext i32 %size to i64, !dbg !319
%4 = mul i64 %3, ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), !dbg !319
%5 = call i8* @__crystal_realloc64(i8* %self, i64 %4), !dbg !319
ret i8* %5, !dbg !319
}
define internal i32* @"~String::TYPE_ID:read"() {
entry:
%0 = load i1, i1* @"String::TYPE_ID:init", !dbg !257
br i1 %0, label %initialized, label %not_initialized, !dbg !257
initialized: ; preds = %not_initialized, %entry
ret i32* @"String::TYPE_ID", !dbg !257
not_initialized: ; preds = %entry
store i1 true, i1* @"String::TYPE_ID:init", !dbg !257
call void @"~String::TYPE_ID:init"(), !dbg !257
br label %initialized, !dbg !257
}
define internal void @"~String::TYPE_ID:init"() {
entry:
ret void, !dbg !257
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder::new:String::Builder"() #0 !dbg !320 {
alloca:
%_ = alloca %"String::Builder"*, !dbg !322
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 !322
%1 = bitcast i8* %0 to %"String::Builder"*, !dbg !322
%2 = bitcast %"String::Builder"* %1 to i8*, !dbg !322
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 !322
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %1, i32 0, i32 0, !dbg !322
store i32 92, i32* %3, !dbg !322
store %"String::Builder"* %1, %"String::Builder"** %_, !dbg !322
%4 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !322
%5 = call i1 @"*String::Builder#initialize:Bool"(%"String::Builder"* %4), !dbg !322
%6 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !322
ret %"String::Builder"* %6, !dbg !322
}
; Function Attrs: uwtable
define internal i1 @"*String::Builder#initialize:Bool"(%"String::Builder"* %self) #0 !dbg !323 {
alloca:
%capacity = alloca i32, !dbg !324
br label %entry
entry: ; preds = %alloca
store i32 64, i32* %capacity, !dbg !325
%0 = load i32, i32* %capacity, !dbg !325
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %0), !dbg !326
%1 = load i32, i32* %capacity, !dbg !326
%2 = add i32 %1, 13, !dbg !326
store i32 %2, i32* %capacity, !dbg !327
%3 = load i32, i32* %capacity, !dbg !327
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %3), !dbg !328
%4 = load i32, i32* %capacity, !dbg !328
%5 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %4), !dbg !329
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !330
store i8* %5, i8** %6, !dbg !330
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !331
store i32 0, i32* %7, !dbg !331
%8 = load i32, i32* %capacity, !dbg !331
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !332
store i32 %8, i32* %9, !dbg !332
%10 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !333
store i1 false, i1* %10, !dbg !333
ret i1 false, !dbg !333
}
; Function Attrs: uwtable
define internal void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %capacity) #0 !dbg !334 {
entry:
%0 = icmp slt i32 %capacity, 0, !dbg !335
br i1 %0, label %then, label %else, !dbg !335
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*)), !dbg !336
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !337
unreachable, !dbg !337
else: ; preds = %entry
%2 = sext i32 %capacity to i64, !dbg !338
%3 = icmp ugt i64 %2, 4294967282, !dbg !338
br i1 %3, label %then1, label %else2, !dbg !338
then1: ; preds = %else
%4 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*)), !dbg !339
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %4), !dbg !340
unreachable, !dbg !340
else2: ; preds = %else
ret void, !dbg !340
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %self, %String* %obj) #0 !dbg !341 {
entry:
call void @"*String#to_s<String::Builder>:Nil"(%String* %obj, %"String::Builder"* %self), !dbg !343
ret %"String::Builder"* %self, !dbg !343
}
; Function Attrs: uwtable
define internal void @"*String#to_s<String::Builder>:Nil"(%String* %self, %"String::Builder"* %io) #0 !dbg !344 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !345
br label %entry
entry: ; preds = %alloca
%1 = call %"Slice(UInt8)" @"*String#to_slice:Slice(UInt8)"(%String* %self), !dbg !345
store %"Slice(UInt8)" %1, %"Slice(UInt8)"* %0, !dbg !345
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !345
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %2), !dbg !346
ret void, !dbg !346
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*String#to_slice:Slice(UInt8)"(%String* %self) #0 !dbg !347 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !348
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !349
%2 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !349
%3 = load i32, i32* %2, !dbg !349
%4 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %1, i32 %3, i1 true), !dbg !348
store %"Slice(UInt8)" %4, %"Slice(UInt8)"* %0, !dbg !348
%5 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !348
ret %"Slice(UInt8)" %5, !dbg !348
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %__arg0, i32 %__arg1, i1 %__temp_27) #0 !dbg !350 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !351
%0 = alloca %"Slice(UInt8)", !dbg !351
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !351
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 !351
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !351
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !351
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize:read_only<Pointer(UInt8), Int32, Bool>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1, i1 %__temp_27), !dbg !351
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !351
ret %"Slice(UInt8)" %4, !dbg !351
}
; Function Attrs: uwtable
define internal void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %slice) #0 !dbg !352 {
alloca:
%encoder = alloca %"IO::Encoder"*, !dbg !353
%slice1 = alloca %"Slice(UInt8)", !dbg !353
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !353
%0 = call %"IO::Encoder"* @"*String::Builder@IO#encoder:(IO::Encoder | Nil)"(%"String::Builder"* %self), !dbg !354
store %"IO::Encoder"* %0, %"IO::Encoder"** %encoder, !dbg !355
%1 = icmp ne %"IO::Encoder"* %0, null, !dbg !355
br i1 %1, label %then, label %else, !dbg !355
then: ; preds = %entry
%2 = load %"IO::Encoder"*, %"IO::Encoder"** %encoder, !dbg !355
%3 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !355
call void @"*IO::Encoder#write<String::Builder, Slice(UInt8)>:Nil"(%"IO::Encoder"* %2, %"String::Builder"* %self, %"Slice(UInt8)" %3), !dbg !356
br label %exit, !dbg !356
else: ; preds = %entry
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, !dbg !356
call void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %4), !dbg !357
br label %exit, !dbg !357
exit: ; preds = %else, %then
ret void, !dbg !357
}
; Function Attrs: uwtable
define internal %"IO::Encoder"* @"*String::Builder@IO#encoder:(IO::Encoder | Nil)"(%"String::Builder"* %self) #0 !dbg !358 {
alloca:
%encoding = alloca %"(IO::EncodingOptions | Nil)", !dbg !359
%__temp_29 = alloca %"IO::Encoder"*, !dbg !359
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 1, !dbg !360
%1 = load %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, !dbg !361
store %"(IO::EncodingOptions | Nil)" %1, %"(IO::EncodingOptions | Nil)"* %encoding, !dbg !361
%2 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, i32 0, i32 0, !dbg !361
%3 = load i32, i32* %2, !dbg !361
%4 = icmp eq i32 %3, 0, !dbg !361
%5 = xor i1 %4, true, !dbg !361
%6 = and i1 true, %5, !dbg !361
br i1 %6, label %then, label %else, !dbg !361
then: ; preds = %entry
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 2, !dbg !362
%8 = load %"IO::Encoder"*, %"IO::Encoder"** %7, !dbg !362
store %"IO::Encoder"* %8, %"IO::Encoder"** %__temp_29, !dbg !362
%9 = icmp ne %"IO::Encoder"* %8, null, !dbg !362
br i1 %9, label %then1, label %else2, !dbg !362
else: ; preds = %entry
br label %exit3, !dbg !362
then1: ; preds = %then
%10 = load %"IO::Encoder"*, %"IO::Encoder"** %__temp_29, !dbg !362
br label %exit, !dbg !362
else2: ; preds = %then
%11 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %encoding, i32 0, i32 1, !dbg !362
%12 = bitcast [3 x i64]* %11 to %"IO::EncodingOptions"*, !dbg !362
%13 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %12, !dbg !362
%14 = call %"IO::Encoder"* @"*IO::Encoder::new<IO::EncodingOptions>:IO::Encoder"(%"IO::EncodingOptions" %13), !dbg !363
%15 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 2, !dbg !362
store %"IO::Encoder"* %14, %"IO::Encoder"** %15, !dbg !362
br label %exit, !dbg !362
exit: ; preds = %else2, %then1
%16 = phi %"IO::Encoder"* [ %10, %then1 ], [ %14, %else2 ], !dbg !362
br label %exit3, !dbg !362
exit3: ; preds = %else, %exit
%17 = phi %"IO::Encoder"* [ %16, %exit ], [ null, %else ], !dbg !362
ret %"IO::Encoder"* %17, !dbg !362
}
; Function Attrs: uwtable
define internal %"IO::Encoder"* @"*IO::Encoder::new<IO::EncodingOptions>:IO::Encoder"(%"IO::EncodingOptions" %encoding_options) #0 !dbg !364 {
alloca:
%_ = alloca %"IO::Encoder"*, !dbg !366
%encoding_options1 = alloca %"IO::EncodingOptions", !dbg !366
br label %entry
entry: ; preds = %alloca
store %"IO::EncodingOptions" %encoding_options, %"IO::EncodingOptions"* %encoding_options1, !dbg !366
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"IO::Encoder"* getelementptr (%"IO::Encoder", %"IO::Encoder"* null, i32 1) to i64)), !dbg !366
%1 = bitcast i8* %0 to %"IO::Encoder"*, !dbg !366
%2 = bitcast %"IO::Encoder"* %1 to i8*, !dbg !366
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 !366
%3 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %1, i32 0, i32 0, !dbg !366
store i32 95, i32* %3, !dbg !366
store %"IO::Encoder"* %1, %"IO::Encoder"** %_, !dbg !366
%4 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !366
%5 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, !dbg !366
%6 = call i1 @"*IO::Encoder#initialize<IO::EncodingOptions>:Bool"(%"IO::Encoder"* %4, %"IO::EncodingOptions" %5), !dbg !366
%7 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !366
call void @"*GC::add_finalizer<IO::Encoder>:Nil"(%"IO::Encoder"* %7), !dbg !366
%8 = load %"IO::Encoder"*, %"IO::Encoder"** %_, !dbg !366
ret %"IO::Encoder"* %8, !dbg !366
}
; Function Attrs: uwtable
define internal i1 @"*IO::Encoder#initialize<IO::EncodingOptions>:Bool"(%"IO::Encoder"* %self, %"IO::EncodingOptions" %encoding_options) #0 !dbg !367 {
alloca:
%encoding_options1 = alloca %"IO::EncodingOptions", !dbg !368
%0 = alloca %Iconv, !dbg !369
br label %entry
entry: ; preds = %alloca
store %"IO::EncodingOptions" %encoding_options, %"IO::EncodingOptions"* %encoding_options1, !dbg !368
%1 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 1, !dbg !370
%2 = load %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, !dbg !370
store %"IO::EncodingOptions" %2, %"IO::EncodingOptions"* %1, !dbg !370
%3 = getelementptr inbounds %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, i32 0, i32 0, !dbg !370
%4 = load %String*, %String** %3, !dbg !370
%5 = getelementptr inbounds %"IO::EncodingOptions", %"IO::EncodingOptions"* %encoding_options1, i32 0, i32 1, !dbg !370
%6 = load %"(Symbol | Nil)", %"(Symbol | Nil)"* %5, !dbg !370
%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 !369
store %Iconv %7, %Iconv* %0, !dbg !369
%8 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !371
%9 = load %Iconv, %Iconv* %0, !dbg !371
store %Iconv %9, %Iconv* %8, !dbg !371
%10 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !372
store i1 false, i1* %10, !dbg !372
ret i1 false, !dbg !372
}
; Function Attrs: uwtable
define internal %Iconv @"*Iconv::new<String, String, (Symbol | Nil)>:Iconv"(%String* %from, %String* %to, %"(Symbol | Nil)" %invalid) #0 !dbg !373 {
alloca:
%_ = alloca %Iconv, !dbg !375
%invalid1 = alloca %"(Symbol | Nil)", !dbg !375
%0 = alloca %Iconv, !dbg !375
br label %entry
entry: ; preds = %alloca
store %"(Symbol | Nil)" %invalid, %"(Symbol | Nil)"* %invalid1, !dbg !375
%1 = bitcast %Iconv* %0 to i8*, !dbg !375
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 !375
%2 = load %Iconv, %Iconv* %0, !dbg !375
store %Iconv %2, %Iconv* %_, !dbg !375
%3 = load %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid1, !dbg !375
call void @"*Iconv#initialize<String, String, (Symbol | Nil)>:Nil"(%Iconv* %_, %String* %from, %String* %to, %"(Symbol | Nil)" %3), !dbg !375
%4 = load %Iconv, %Iconv* %_, !dbg !375
ret %Iconv %4, !dbg !375
}
; Function Attrs: uwtable
define internal void @"*Iconv#initialize<String, String, (Symbol | Nil)>:Nil"(%Iconv* %self, %String* %from, %String* %to, %"(Symbol | Nil)" %invalid) #0 !dbg !376 {
alloca:
%__temp_30 = alloca %String*, !dbg !377
%__temp_31 = alloca %String*, !dbg !377
%original_from = alloca %String*, !dbg !377
%original_to = alloca %String*, !dbg !377
%from1 = alloca %String*, !dbg !377
%to2 = alloca %String*, !dbg !377
%invalid3 = alloca %"(Symbol | Nil)", !dbg !377
br label %entry
entry: ; preds = %alloca
store %String* %from, %String** %from1, !dbg !377
store %String* %to, %String** %to2, !dbg !377
store %"(Symbol | Nil)" %invalid, %"(Symbol | Nil)"* %invalid3, !dbg !377
%0 = load %String*, %String** %from1, !dbg !377
store %String* %0, %String** %__temp_30, !dbg !378
%1 = load %String*, %String** %to2, !dbg !378
store %String* %1, %String** %__temp_31, !dbg !378
%2 = load %String*, %String** %__temp_30, !dbg !378
store %String* %2, %String** %original_from, !dbg !378
%3 = load %String*, %String** %__temp_31, !dbg !378
store %String* %3, %String** %original_to, !dbg !379
%4 = getelementptr inbounds %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid3, i32 0, i32 0, !dbg !379
%5 = load i32, i32* %4, !dbg !379
%6 = icmp eq i32 173, %5, !dbg !379
br i1 %6, label %current_def, label %next_def, !dbg !379
current_def: ; preds = %entry
%7 = getelementptr inbounds %"(Symbol | Nil)", %"(Symbol | Nil)"* %invalid3, i32 0, i32 1, !dbg !379
%8 = bitcast [1 x i64]* %7 to i32*, !dbg !379
%9 = load i32, i32* %8, !dbg !379
%10 = icmp eq i32 %9, 0, !dbg !379
br label %exit, !dbg !379
next_def: ; preds = %entry
%11 = icmp eq i32 0, %5, !dbg !379
br i1 %11, label %current_def4, label %next_def5, !dbg !379
exit: ; preds = %current_def4, %current_def
%12 = phi i1 [ %10, %current_def ], [ false, %current_def4 ], !dbg !379
%13 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !380
store i1 %12, i1* %13, !dbg !380
%14 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !381
%15 = load i1, i1* %14, !dbg !381
br i1 %15, label %then, label %else, !dbg !381
current_def4: ; preds = %next_def
br label %exit, !dbg !379
next_def5: ; preds = %next_def
unreachable, !dbg !379
then: ; preds = %exit
%16 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !381
%17 = load %String*, %String** %from1, !dbg !381
%18 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %16, %String* %17), !dbg !381
%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 !381
%20 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %19), !dbg !381
store %String* %20, %String** %from1, !dbg !381
%21 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !381
%22 = load %String*, %String** %to2, !dbg !381
%23 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %21, %String* %22), !dbg !381
%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 !381
%25 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %24), !dbg !381
store %String* %25, %String** %to2, !dbg !381
br label %exit6, !dbg !381
else: ; preds = %exit
br label %exit6, !dbg !381
exit6: ; preds = %else, %then
%26 = load %String*, %String** %to2, !dbg !381
%27 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %26), !dbg !382
%28 = load %String*, %String** %from1, !dbg !382
%29 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %28), !dbg !383
%30 = call i8* @iconv_open(i8* %27, i8* %29), !dbg !384
%31 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !385
store i8* %30, i8** %31, !dbg !385
%32 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !386
%33 = load i8*, i8** %32, !dbg !386
%34 = ptrtoint i8* %33 to i64, !dbg !386
%35 = icmp eq i64 %34, -1, !dbg !386
br i1 %35, label %then7, label %else8, !dbg !386
then7: ; preds = %exit6
%36 = call i32 @"*Errno::value:Int32"(), !dbg !387
%37 = icmp eq i32 %36, 22, !dbg !387
br i1 %37, label %then9, label %else10, !dbg !387
else8: ; preds = %exit6
ret void, !dbg !388
then9: ; preds = %then7
%38 = load %String*, %String** %original_from, !dbg !389
%39 = call i1 @"*String#==<String>:Bool"(%String* %38, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*)), !dbg !390
br i1 %39, label %then11, label %else12, !dbg !390
else10: ; preds = %then7
%40 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'iconv_open'" to %String*)), !dbg !391
call void @"*raise<Errno>:NoReturn"(%Errno* %40), !dbg !388
unreachable, !dbg !388
then11: ; preds = %then9
%41 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !392
%42 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %41, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !392
%43 = load %String*, %String** %original_to, !dbg !392
%44 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %42, %String* %43), !dbg !392
%45 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %44), !dbg !392
%46 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %45), !dbg !393
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %46), !dbg !394
unreachable, !dbg !394
else12: ; preds = %then9
%47 = load %String*, %String** %original_to, !dbg !395
%48 = call i1 @"*String#==<String>:Bool"(%String* %47, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*)), !dbg !396
br i1 %48, label %then13, label %else14, !dbg !396
then13: ; preds = %else12
%49 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !397
%50 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %49, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !397
%51 = load %String*, %String** %original_from, !dbg !397
%52 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %50, %String* %51), !dbg !397
%53 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %52), !dbg !397
%54 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %53), !dbg !398
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %54), !dbg !399
unreachable, !dbg !399
else14: ; preds = %else12
%55 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !400
%56 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %55, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'Invalid encoding: '" to %String*)), !dbg !400
%57 = load %String*, %String** %original_from, !dbg !400
%58 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %56, %String* %57), !dbg !400
%59 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %58, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"' -> '" to %String*)), !dbg !400
%60 = load %String*, %String** %original_to, !dbg !400
%61 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %59, %String* %60), !dbg !400
%62 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %61), !dbg !400
%63 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %62), !dbg !401
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %63), !dbg !402
unreachable, !dbg !402
}
; Function Attrs: uwtable
define internal %String* @"*String::Builder#to_s:String"(%"String::Builder"* %self) #0 !dbg !403 {
alloca:
%real_bytesize = alloca i32, !dbg !404
%header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !404
%0 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !405
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !406
%2 = load i1, i1* %1, !dbg !406
br i1 %2, label %then, label %else, !dbg !406
then: ; preds = %entry
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [47 x i8] }* @"'Can only invoke 'to...'" to %String*)), !dbg !406
unreachable, !dbg !406
else: ; preds = %entry
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !407
store i1 true, i1* %3, !dbg !407
call void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %self, i8 0), !dbg !408
%4 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !409
store i32 %4, i32* %real_bytesize, !dbg !410
%5 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !411
%6 = load i32, i32* %5, !dbg !411
%7 = load i32, i32* %real_bytesize, !dbg !411
%8 = icmp sgt i32 %6, %7, !dbg !411
br i1 %8, label %then1, label %else2, !dbg !411
then1: ; preds = %else
%9 = load i32, i32* %real_bytesize, !dbg !411
%10 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %9), !dbg !412
br label %exit, !dbg !412
else2: ; preds = %else
br label %exit, !dbg !412
exit: ; preds = %else2, %then1
%11 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !412
%12 = load i8*, i8** %11, !dbg !412
%13 = bitcast i8* %12 to %"Tuple(Int32, Int32, Int32)"*, !dbg !412
store %"Tuple(Int32, Int32, Int32)"* %13, %"Tuple(Int32, Int32, Int32)"** %header, !dbg !405
%14 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %header, !dbg !405
%15 = load i32, i32* @"String::TYPE_ID", !dbg !405
%16 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 0, !dbg !405
store i32 %15, i32* %16, !dbg !405
%17 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !405
%18 = load i32, i32* %17, !dbg !405
%19 = sub i32 %18, 1, !dbg !405
%20 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 1, !dbg !405
store i32 %19, i32* %20, !dbg !405
%21 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, i32 0, i32 2, !dbg !405
store i32 0, i32* %21, !dbg !405
%22 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %0, !dbg !405
store %"Tuple(Int32, Int32, Int32)" %22, %"Tuple(Int32, Int32, Int32)"* %14, !dbg !405
%23 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !405
%24 = load i8*, i8** %23, !dbg !405
%25 = bitcast i8* %24 to %String*, !dbg !405
ret %String* %25, !dbg !405
}
; Function Attrs: uwtable
define internal void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %self, i8 %byte) #0 !dbg !413 {
alloca:
%new_bytesize = alloca i32, !dbg !414
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !415
%1 = add i32 %0, 1, !dbg !415
store i32 %1, i32* %new_bytesize, !dbg !416
%2 = load i32, i32* %new_bytesize, !dbg !417
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !417
%4 = load i32, i32* %3, !dbg !417
%5 = icmp sgt i32 %2, %4, !dbg !417
br i1 %5, label %then, label %else, !dbg !417
then: ; preds = %entry
%6 = load i32, i32* %new_bytesize, !dbg !417
%7 = call i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %6), !dbg !418
%8 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %7), !dbg !419
br label %exit, !dbg !419
else: ; preds = %entry
br label %exit, !dbg !419
exit: ; preds = %else, %then
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !419
%10 = load i8*, i8** %9, !dbg !419
%11 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !420
%12 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %10, i32 %11, i8 %byte), !dbg !421
%13 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !421
%14 = load i32, i32* %13, !dbg !421
%15 = add i32 %14, 1, !dbg !421
%16 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !422
store i32 %15, i32* %16, !dbg !422
ret void, !dbg !422
}
; Function Attrs: uwtable
define internal i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self) #0 !dbg !423 {
entry:
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !424
%1 = load i32, i32* %0, !dbg !424
%2 = add i32 %1, 12, !dbg !424
ret i32 %2, !dbg !424
}
; Function Attrs: uwtable
define internal i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %v) #0 !dbg !425 {
alloca:
%v1 = alloca i32, !dbg !427
br label %entry
entry: ; preds = %alloca
store i32 %v, i32* %v1, !dbg !427
%0 = load i32, i32* %v1, !dbg !427
%1 = sub i32 %0, 1, !dbg !427
store i32 %1, i32* %v1, !dbg !428
%2 = load i32, i32* %v1, !dbg !428
%3 = load i32, i32* %v1, !dbg !428
%4 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %3, i32 1), !dbg !429
%5 = or i32 %2, %4, !dbg !429
store i32 %5, i32* %v1, !dbg !430
%6 = load i32, i32* %v1, !dbg !430
%7 = load i32, i32* %v1, !dbg !430
%8 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %7, i32 2), !dbg !431
%9 = or i32 %6, %8, !dbg !431
store i32 %9, i32* %v1, !dbg !432
%10 = load i32, i32* %v1, !dbg !432
%11 = load i32, i32* %v1, !dbg !432
%12 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %11, i32 4), !dbg !433
%13 = or i32 %10, %12, !dbg !433
store i32 %13, i32* %v1, !dbg !434
%14 = load i32, i32* %v1, !dbg !434
%15 = load i32, i32* %v1, !dbg !434
%16 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %15, i32 8), !dbg !435
%17 = or i32 %14, %16, !dbg !435
store i32 %17, i32* %v1, !dbg !436
%18 = load i32, i32* %v1, !dbg !436
%19 = load i32, i32* %v1, !dbg !436
%20 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %19, i32 16), !dbg !437
%21 = or i32 %18, %20, !dbg !437
store i32 %21, i32* %v1, !dbg !438
%22 = load i32, i32* %v1, !dbg !438
%23 = add i32 %22, 1, !dbg !438
store i32 %23, i32* %v1, !dbg !439
ret i32 %23, !dbg !439
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#>><Int32>:Int32"(i32 %self, i32 %count) #0 !dbg !440 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !441
br i1 %0, label %then, label %else, !dbg !441
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !442
%2 = call i32 @"*Int32@Int#<<<Int32>:Int32"(i32 %self, i32 %1), !dbg !443
br label %exit, !dbg !443
else: ; preds = %entry
%3 = icmp slt i32 %count, 32, !dbg !444
br i1 %3, label %then1, label %else2, !dbg !444
exit: ; preds = %exit3, %then
%4 = phi i32 [ %2, %then ], [ %7, %exit3 ], !dbg !445
ret i32 %4, !dbg !445
then1: ; preds = %else
%5 = ashr i32 %self, %count, !dbg !444
br label %exit3, !dbg !444
else2: ; preds = %else
%6 = call i32 @"*Int32@Number::zero:Int32"(), !dbg !445
br label %exit3, !dbg !445
exit3: ; preds = %else2, %then1
%7 = phi i32 [ %5, %then1 ], [ %6, %else2 ], !dbg !445
br label %exit, !dbg !445
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#abs:Int32"(i32 %self) #0 !dbg !446 {
entry:
%0 = icmp sge i32 %self, 0, !dbg !447
br i1 %0, label %then, label %else, !dbg !447
then: ; preds = %entry
br label %exit, !dbg !447
else: ; preds = %entry
%1 = call i32 @"*Int32#-:Int32"(i32 %self), !dbg !448
br label %exit, !dbg !448
exit: ; preds = %else, %then
%2 = phi i32 [ %self, %then ], [ %1, %else ], !dbg !448
ret i32 %2, !dbg !448
}
; Function Attrs: uwtable
define internal i32 @"*Int32#-:Int32"(i32 %self) #0 !dbg !449 {
entry:
%0 = sub i32 0, %self, !dbg !450
ret i32 %0, !dbg !450
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#<<<Int32>:Int32"(i32 %self, i32 %count) #0 !dbg !451 {
entry:
%0 = icmp slt i32 %count, 0, !dbg !452
br i1 %0, label %then, label %else, !dbg !452
then: ; preds = %entry
%1 = call i32 @"*Int32@Int#abs:Int32"(i32 %count), !dbg !453
%2 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %self, i32 %1), !dbg !454
br label %exit, !dbg !454
else: ; preds = %entry
%3 = icmp slt i32 %count, 32, !dbg !455
br i1 %3, label %then1, label %else2, !dbg !455
exit: ; preds = %exit3, %then
%4 = phi i32 [ %2, %then ], [ %7, %exit3 ], !dbg !456
ret i32 %4, !dbg !456
then1: ; preds = %else
%5 = shl i32 %self, %count, !dbg !455
br label %exit3, !dbg !455
else2: ; preds = %else
%6 = call i32 @"*Int32@Number::zero:Int32"(), !dbg !456
br label %exit3, !dbg !456
exit3: ; preds = %else2, %then1
%7 = phi i32 [ %5, %then1 ], [ %6, %else2 ], !dbg !456
br label %exit, !dbg !456
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Number::zero:Int32"() #0 !dbg !457 {
entry:
%0 = call i32 @"*Int32::new<Int32>:Int32"(i32 0), !dbg !458
ret i32 %0, !dbg !458
}
; Function Attrs: uwtable
define internal i32 @"*Int32::new<Int32>:Int32"(i32 %value) #0 !dbg !459 {
entry:
ret i32 %value, !dbg !460
}
; Function Attrs: uwtable
define internal i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %capacity) #0 !dbg !461 {
entry:
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !462
store i32 %capacity, i32* %0, !dbg !462
%1 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !462
%2 = load i8*, i8** %1, !dbg !462
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !462
%4 = load i32, i32* %3, !dbg !462
%5 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<Int32>:Pointer(UInt8)"(i8* %2, i32 %4), !dbg !463
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !464
store i8* %5, i8** %6, !dbg !464
ret i8* %5, !dbg !464
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#realloc<Int32>:Pointer(UInt8)"(i8* %self, i32 %size) #0 !dbg !465 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !466
br i1 %0, label %then, label %else, !dbg !466
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !467
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !468
unreachable, !dbg !468
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !468
%3 = mul i64 %2, ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64), !dbg !468
%4 = call i8* @__crystal_realloc64(i8* %self, i64 %3), !dbg !468
ret i8* %4, !dbg !468
}
declare i8* @iconv_open(i8*, i8*)
; Function Attrs: uwtable
define internal i1 @"*String#==<String>:Bool"(%String* %self, %String* %other) #0 !dbg !469 {
entry:
%0 = call i1 @"*String@Reference#same?<String>:Bool"(%String* %self, %String* %other), !dbg !470
br i1 %0, label %then, label %else, !dbg !470
then: ; preds = %entry
ret i1 true, !dbg !470
else: ; preds = %entry
%1 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !471
%2 = load i32, i32* %1, !dbg !471
%3 = getelementptr inbounds %String, %String* %other, i32 0, i32 1, !dbg !471
%4 = load i32, i32* %3, !dbg !471
%5 = icmp eq i32 %2, %4, !dbg !471
br i1 %5, label %then1, label %else2, !dbg !471
then1: ; preds = %else
br label %exit, !dbg !471
else2: ; preds = %else
ret i1 false, !dbg !471
exit: ; preds = %then1
%6 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !472
%7 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %other), !dbg !473
%8 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !473
%9 = load i32, i32* %8, !dbg !473
%10 = call i32 @"*Pointer(UInt8)@Pointer(T)#memcmp<Pointer(UInt8), Int32>:Int32"(i8* %6, i8* %7, i32 %9), !dbg !472
%11 = icmp eq i32 %10, 0, !dbg !472
ret i1 %11, !dbg !472
}
; Function Attrs: uwtable
define internal i1 @"*String@Reference#same?<String>:Bool"(%String* %self, %String* %other) #0 !dbg !474 {
entry:
%0 = ptrtoint %String* %self to i64, !dbg !476
%1 = ptrtoint %String* %other to i64, !dbg !476
%2 = icmp eq i64 %0, %1, !dbg !476
ret i1 %2, !dbg !476
}
; Function Attrs: uwtable
define internal i32 @"*Pointer(UInt8)@Pointer(T)#memcmp<Pointer(UInt8), Int32>:Int32"(i8* %self, i8* %other, i32 %count) #0 !dbg !477 {
entry:
%0 = mul i32 %count, 1, !dbg !478
%1 = sext i32 %0 to i64, !dbg !478
%2 = call i32 @memcmp(i8* %self, i8* %other, i64 %1), !dbg !479
ret i32 %2, !dbg !479
}
declare i32 @memcmp(i8*, i8*, i64)
; Function Attrs: noreturn uwtable
define internal void @"*raise<Errno>:NoReturn"(%Errno* %exception) #1 !dbg !480 {
alloca:
%__temp_33 = alloca %"(CallStack | Nil)", !dbg !481
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !481
%0 = alloca %CallStack, !dbg !481
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %Errno, %Errno* %exception, i32 0, i32 3, !dbg !481
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !481
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_33, !dbg !481
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !481
%4 = load i32, i32* %3, !dbg !481
%5 = icmp eq i32 %4, 0, !dbg !481
%6 = xor i1 %5, true, !dbg !481
%7 = and i1 true, %6, !dbg !481
br i1 %7, label %then, label %else, !dbg !481
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_33, i32 0, i32 1, !dbg !481
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !481
br label %exit, !dbg !481
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !481
store %CallStack %10, %CallStack* %0, !dbg !481
%11 = load %CallStack, %CallStack* %0, !dbg !481
%12 = call %CallStack @"*Errno@Exception#callstack=<CallStack>:CallStack"(%Errno* %exception, %CallStack %11), !dbg !481
br label %exit, !dbg !481
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !481
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !481
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !481
store i64 %15, i64* %16, !dbg !481
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !481
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !481
store i64 %18, i64* %19, !dbg !481
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
%21 = ptrtoint %Errno* %exception to i64, !dbg !481
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !481
store i64 %21, i64* %22, !dbg !481
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !481
store i32 54, i32* %24, !dbg !481
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !481
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !481
unreachable, !dbg !481
}
; Function Attrs: uwtable
define internal %CallStack @"*Errno@Exception#callstack=<CallStack>:CallStack"(%Errno* %self, %CallStack %callstack) #0 !dbg !482 {
alloca:
%callstack1 = alloca %CallStack, !dbg !483
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !483
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 3, !dbg !484
%1 = load %CallStack, %CallStack* %callstack1, !dbg !484
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !484
store i32 353, i32* %2, !dbg !484
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !484
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !484
store %CallStack %1, %CallStack* %4, !dbg !484
%5 = load %CallStack, %CallStack* %callstack1, !dbg !484
ret %CallStack %5, !dbg !484
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer<IO::Encoder>:Nil"(%"IO::Encoder"* %object) #0 !dbg !485 {
entry:
call void @"*GC::add_finalizer_impl<IO::Encoder>:Nil"(%"IO::Encoder"* %object), !dbg !486
ret void, !dbg !486
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer_impl<IO::Encoder>:Nil"(%"IO::Encoder"* %object) #0 !dbg !487 {
alloca:
%0 = alloca %"->", !dbg !488
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"IO::Encoder"* %object to i8*, !dbg !488
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !488
store i8* bitcast (void (i8*, i8*)* @"~procProc(Pointer(Void), Pointer(Void), Nil)@/usr/share/crystal/src/gc/boehm.cr:130" to i8*), i8** %2, !dbg !488
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !488
store i8* null, i8** %3, !dbg !488
%4 = load %"->", %"->"* %0, !dbg !488
%5 = call i8* @"~check_proc_is_not_closure"(%"->" %4), !dbg !488
%6 = bitcast i8* %5 to %Nil (i8*, i8*)*, !dbg !488
call void @GC_register_finalizer_ignore_self(i8* %1, %Nil (i8*, i8*)* %6, i8* null, %"->"* null, i8** null), !dbg !489
ret void, !dbg !489
}
; Function Attrs: uwtable
define internal void @"~procProc(Pointer(Void), Pointer(Void), Nil)@/usr/share/crystal/src/gc/boehm.cr:130"(i8* %obj, i8* %data) #0 !dbg !490 {
entry:
%0 = bitcast i8* %obj to %"IO::Encoder"*, !dbg !491
call void @"*IO::Encoder#finalize:Nil"(%"IO::Encoder"* %0), !dbg !492
ret void, !dbg !492
}
; Function Attrs: uwtable
define internal void @"*IO::Encoder#finalize:Nil"(%"IO::Encoder"* %self) #0 !dbg !493 {
entry:
call void @"*IO::Encoder#close:Nil"(%"IO::Encoder"* %self), !dbg !494
ret void, !dbg !494
}
; Function Attrs: uwtable
define internal void @"*IO::Encoder#close:Nil"(%"IO::Encoder"* %self) #0 !dbg !495 {
entry:
%0 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !496
%1 = load i1, i1* %0, !dbg !496
br i1 %1, label %then, label %else, !dbg !496
then: ; preds = %entry
ret void, !dbg !496
else: ; preds = %entry
%2 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 3, !dbg !497
store i1 true, i1* %2, !dbg !497
%3 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !497
call void @"*Iconv#close:Nil"(%Iconv* %3), !dbg !498
ret void, !dbg !498
}
; Function Attrs: uwtable
define internal void @"*Iconv#close:Nil"(%Iconv* %self) #0 !dbg !499 {
entry:
%0 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !500
%1 = load i8*, i8** %0, !dbg !500
%2 = call i32 @iconv_close(i8* %1), !dbg !501
%3 = icmp eq i32 %2, -1, !dbg !501
br i1 %3, label %then, label %else, !dbg !501
then: ; preds = %entry
%4 = call %Errno* @"*Errno::new<String>:Errno"(%String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'iconv_close'" to %String*)), !dbg !502
call void @"*raise<Errno>:NoReturn"(%Errno* %4), !dbg !503
unreachable, !dbg !503
else: ; preds = %entry
ret void, !dbg !503
}
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 !504 {
alloca:
%inbuf_ptr = alloca i8*, !dbg !505
%inbytesleft = alloca i64, !dbg !505
%outbuf = alloca [1024 x i8], !dbg !505
%outbuf_ptr = alloca i8*, !dbg !505
%outbytesleft = alloca i64, !dbg !505
%err = alloca i64, !dbg !505
%slice1 = alloca %"Slice(UInt8)", !dbg !505
%0 = alloca %"Slice(UInt8)", !dbg !506
%1 = alloca %"Slice(UInt8)", !dbg !506
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !505
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 2, !dbg !505
%3 = load i8*, i8** %2, !dbg !505
store i8* %3, i8** %inbuf_ptr, !dbg !507
%4 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !507
%5 = load i32, i32* %4, !dbg !507
%6 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %5), !dbg !508
store i64 %6, i64* %inbytesleft, !dbg !509
br label %while, !dbg !509
while: ; preds = %exit2, %entry
%7 = load i64, i64* %inbytesleft, !dbg !510
%8 = icmp ugt i64 %7, 0, !dbg !510
%9 = or i1 false, %8, !dbg !510
br i1 %9, label %body, label %exit, !dbg !510
body: ; preds = %while
%10 = call i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %outbuf), !dbg !511
store i8* %10, i8** %outbuf_ptr, !dbg !512
%11 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !513
%12 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %11), !dbg !514
store i64 %12, i64* %outbytesleft, !dbg !515
%13 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !515
%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 !516
store i64 %14, i64* %err, !dbg !517
%15 = load i64, i64* %err, !dbg !518
%16 = icmp eq i64 %15, -1, !dbg !518
br i1 %16, label %then, label %else, !dbg !518
exit: ; preds = %while
ret void, !dbg !519
then: ; preds = %body
%17 = getelementptr inbounds %"IO::Encoder", %"IO::Encoder"* %self, i32 0, i32 2, !dbg !518
%18 = call %"(UInt64 | Nil)" @"*Iconv#handle_invalid<Pointer(Pointer(UInt8)), Pointer(UInt64)>:(UInt64 | Nil)"(%Iconv* %17, i8** %inbuf_ptr, i64* %inbytesleft), !dbg !520
br label %exit2, !dbg !520
else: ; preds = %body
br label %exit2, !dbg !520
exit2: ; preds = %else, %then
%19 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_slice:Slice(UInt8)"([1024 x i8]* %outbuf), !dbg !506
store %"Slice(UInt8)" %19, %"Slice(UInt8)"* %0, !dbg !506
%20 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %outbuf), !dbg !521
%21 = load i64, i64* %outbytesleft, !dbg !521
%22 = sext i32 %20 to i64, !dbg !521
%23 = sub i64 %22, %21, !dbg !521
%24 = trunc i64 %23 to i32, !dbg !521
%25 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %0, i32 0, i32 %24), !dbg !506
store %"Slice(UInt8)" %25, %"Slice(UInt8)"* %1, !dbg !506
%26 = load %"Slice(UInt8)", %"Slice(UInt8)"* %1, !dbg !506
call void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %26), !dbg !519
br label %while, !dbg !519
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %self) #0 !dbg !522 {
entry:
%0 = getelementptr inbounds [1024 x i8], [1024 x i8]* %self, i32 0, i32 0, !dbg !524
ret i8* %0, !dbg !524
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %self) #0 !dbg !525 {
entry:
ret i32 1024, !dbg !526
}
; 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 !527 {
entry:
%0 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 1, !dbg !528
%1 = load i8*, i8** %0, !dbg !528
%2 = call i64 @iconv(i8* %1, i8** %inbuf, i64* %inbytesleft, i8** %outbuf, i64* %outbytesleft), !dbg !529
ret i64 %2, !dbg !529
}
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 !530 {
alloca:
%__temp_34 = alloca i32, !dbg !531
%0 = alloca %"(UInt64 | Nil)", !dbg !532
%1 = alloca %"(UInt64 | Nil)", !dbg !532
%2 = alloca %"(UInt64 | Nil)", !dbg !533
br label %entry
entry: ; preds = %alloca
%3 = getelementptr inbounds %Iconv, %Iconv* %self, i32 0, i32 0, !dbg !534
%4 = load i1, i1* %3, !dbg !534
br i1 %4, label %then, label %else, !dbg !534
then: ; preds = %entry
%5 = load i64, i64* %inbytesleft, !dbg !535
%6 = icmp ugt i64 %5, 0, !dbg !535
%7 = or i1 false, %6, !dbg !535
br i1 %7, label %then1, label %else2, !dbg !535
else: ; preds = %entry
%8 = call i32 @"*Errno::value:Int32"(), !dbg !536
store i32 %8, i32* %__temp_34, !dbg !536
%9 = load i32, i32* %__temp_34, !dbg !537
%10 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 22, i32 %9), !dbg !537
br i1 %10, label %then4, label %else5, !dbg !537
then1: ; preds = %then
%11 = load i8*, i8** %inbuf, !dbg !535
%12 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %11, i32 1), !dbg !532
store i8* %12, i8** %inbuf, !dbg !532
%13 = load i64, i64* %inbytesleft, !dbg !532
%14 = sub i64 %13, 1, !dbg !532
store i64 %14, i64* %inbytesleft, !dbg !532
%15 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %0, i32 0, i32 0, !dbg !532
store i32 163, i32* %15, !dbg !532
%16 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %0, i32 0, i32 1, !dbg !532
%17 = bitcast [1 x i64]* %16 to i64*, !dbg !532
store i64 %14, i64* %17, !dbg !532
br label %exit, !dbg !532
else2: ; preds = %then
%18 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1, i32 0, i32 0, !dbg !532
store i32 0, i32* %18, !dbg !532
%19 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1, i32 0, i32 1, !dbg !532
store [1 x i64] zeroinitializer, [1 x i64]* %19, !dbg !532
br label %exit, !dbg !532
exit: ; preds = %else2, %then1
%20 = phi %"(UInt64 | Nil)"* [ %0, %then1 ], [ %1, %else2 ], !dbg !532
br label %exit3, !dbg !532
exit3: ; preds = %else7, %exit
%21 = phi %"(UInt64 | Nil)"* [ %20, %exit ], [ %2, %else7 ], !dbg !533
%22 = load %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %21, !dbg !533
ret %"(UInt64 | Nil)" %22, !dbg !533
then4: ; preds = %else
%23 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [30 x i8] }* @"'Incomplete multibyt...'" to %String*)), !dbg !538
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %23), !dbg !539
unreachable, !dbg !539
else5: ; preds = %else
%24 = load i32, i32* %__temp_34, !dbg !540
%25 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 84, i32 %24), !dbg !540
br i1 %25, label %then6, label %else7, !dbg !540
then6: ; preds = %else5
%26 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [27 x i8] }* @"'Invalid multibyte s...'" to %String*)), !dbg !541
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %26), !dbg !533
unreachable, !dbg !533
else7: ; preds = %else5
%27 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %2, i32 0, i32 0, !dbg !533
store i32 0, i32* %27, !dbg !533
%28 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %2, i32 0, i32 1, !dbg !533
store [1 x i64] zeroinitializer, [1 x i64]* %28, !dbg !533
br label %exit3, !dbg !533
}
; Function Attrs: uwtable
define internal i1 @"*Int32@Object#===<Int32>:Bool"(i32 %self, i32 %other) #0 !dbg !542 {
entry:
%0 = icmp eq i32 %self, %other, !dbg !544
ret i1 %0, !dbg !544
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_slice:Slice(UInt8)"([1024 x i8]* %self) #0 !dbg !545 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !546
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([1024 x i8]* %self), !dbg !547
%2 = call i32 @"*StaticArray(UInt8, 1024)@StaticArray(T, N)#size:Int32"([1024 x i8]* %self), !dbg !548
%3 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %1, i32 %2), !dbg !546
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !546
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !546
ret %"Slice(UInt8)" %4, !dbg !546
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %__arg0, i32 %__arg1) #0 !dbg !549 {
alloca:
%_ = alloca %"Slice(UInt8)", !dbg !550
%0 = alloca %"Slice(UInt8)", !dbg !550
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Slice(UInt8)"* %0 to i8*, !dbg !550
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 !550
%2 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !550
store %"Slice(UInt8)" %2, %"Slice(UInt8)"* %_, !dbg !550
%3 = call i32 @"*Slice(UInt8)@Slice(T)#initialize<Pointer(UInt8), Int32>:Int32"(%"Slice(UInt8)"* %_, i8* %__arg0, i32 %__arg1), !dbg !550
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %_, !dbg !550
ret %"Slice(UInt8)" %4, !dbg !550
}
; Function Attrs: uwtable
define internal i32 @"*Slice(UInt8)@Slice(T)#initialize<Pointer(UInt8), Int32>:Int32"(%"Slice(UInt8)"* %self, i8* %pointer, i32 %size) #0 !dbg !551 {
alloca:
%read_only = alloca i1, !dbg !552
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %read_only, !dbg !553
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !554
store i8* %pointer, i8** %0, !dbg !554
%1 = load i1, i1* %read_only, !dbg !554
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !553
store i1 %1, i1* %2, !dbg !553
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !555
store i32 %size, i32* %3, !dbg !555
ret i32 %size, !dbg !555
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %self, i32 %start, i32 %count) #0 !dbg !556 {
alloca:
%__temp_35 = alloca i1, !dbg !557
%__temp_37 = alloca i1, !dbg !557
%0 = alloca %"Slice(UInt8)", !dbg !558
br label %entry
entry: ; preds = %alloca
%1 = icmp sle i32 0, %start, !dbg !559
store i1 %1, i1* %__temp_35, !dbg !559
br i1 %1, label %then1, label %else2, !dbg !559
then: ; preds = %exit
br label %exit3, !dbg !559
else: ; preds = %exit
%2 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !560
call void @"*raise<IndexError>:NoReturn"(%IndexError* %2), !dbg !561
unreachable, !dbg !561
then1: ; preds = %entry
%3 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !559
%4 = load i32, i32* %3, !dbg !559
%5 = icmp sle i32 %start, %4, !dbg !559
br label %exit, !dbg !559
else2: ; preds = %entry
%6 = load i1, i1* %__temp_35, !dbg !559
br label %exit, !dbg !559
exit: ; preds = %else2, %then1
%7 = phi i1 [ %5, %then1 ], [ %6, %else2 ], !dbg !559
br i1 %7, label %then, label %else, !dbg !559
exit3: ; preds = %then
%8 = icmp sle i32 0, %count, !dbg !562
store i1 %8, i1* %__temp_37, !dbg !562
br i1 %8, label %then6, label %else7, !dbg !562
then4: ; preds = %exit8
br label %exit9, !dbg !562
else5: ; preds = %exit8
%9 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !563
call void @"*raise<IndexError>:NoReturn"(%IndexError* %9), !dbg !564
unreachable, !dbg !564
then6: ; preds = %exit3
%10 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !562
%11 = load i32, i32* %10, !dbg !562
%12 = sub i32 %11, %start, !dbg !562
%13 = icmp sle i32 %count, %12, !dbg !562
br label %exit8, !dbg !562
else7: ; preds = %exit3
%14 = load i1, i1* %__temp_37, !dbg !562
br label %exit8, !dbg !562
exit8: ; preds = %else7, %then6
%15 = phi i1 [ %13, %then6 ], [ %14, %else7 ], !dbg !562
br i1 %15, label %then4, label %else5, !dbg !562
exit9: ; preds = %then4
%16 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !564
%17 = load i8*, i8** %16, !dbg !564
%18 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %17, i32 %start), !dbg !565
%19 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 1, !dbg !565
%20 = load i1, i1* %19, !dbg !565
%21 = call %"Slice(UInt8)" @"*Slice(T)::new:read_only<Pointer(UInt8), Int32, Bool>:Slice(UInt8)"(i8* %18, i32 %count, i1 %20), !dbg !558
store %"Slice(UInt8)" %21, %"Slice(UInt8)"* %0, !dbg !558
%22 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !558
ret %"Slice(UInt8)" %22, !dbg !558
}
; Function Attrs: uwtable
define internal %IndexError* @"*IndexError::new:IndexError"() #0 !dbg !566 {
alloca:
%_ = alloca %IndexError*, !dbg !567
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%IndexError* getelementptr (%IndexError, %IndexError* null, i32 1) to i64)), !dbg !567
%1 = bitcast i8* %0 to %IndexError*, !dbg !567
%2 = bitcast %IndexError* %1 to i8*, !dbg !567
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 !567
%3 = getelementptr inbounds %IndexError, %IndexError* %1, i32 0, i32 0, !dbg !567
store i32 38, i32* %3, !dbg !567
store %IndexError* %1, %IndexError** %_, !dbg !567
%4 = load %IndexError*, %IndexError** %_, !dbg !567
call void @"*IndexError#initialize:Nil"(%IndexError* %4), !dbg !567
%5 = load %IndexError*, %IndexError** %_, !dbg !567
ret %IndexError* %5, !dbg !567
}
; Function Attrs: uwtable
define internal void @"*IndexError#initialize:Nil"(%IndexError* %self) #0 !dbg !568 {
alloca:
%message = alloca %String*, !dbg !569
br label %entry
entry: ; preds = %alloca
store %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Index out of bounds...'" to %String*), %String** %message, !dbg !570
%0 = load %String*, %String** %message, !dbg !570
call void @"*IndexError#initialize<String>:Nil"(%IndexError* %self, %String* %0), !dbg !569
ret void, !dbg !569
}
; Function Attrs: uwtable
define internal void @"*IndexError#initialize<String>:Nil"(%IndexError* %self, %String* %message) #0 !dbg !571 {
entry:
call void @"*IndexError@Exception#initialize<String>:Nil"(%IndexError* %self, %String* %message), !dbg !572
ret void, !dbg !572
}
; Function Attrs: uwtable
define internal void @"*IndexError@Exception#initialize<String>:Nil"(%IndexError* %self, %String* %message) #0 !dbg !573 {
alloca:
%cause = alloca %Nil, !dbg !574
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 1, !dbg !575
store %String* %message, %String** %0, !dbg !575
%1 = load %Nil, %Nil* %cause, !dbg !575
%2 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 2, !dbg !576
store i32* null, i32** %2, !dbg !576
ret void, !dbg !576
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<IndexError>:NoReturn"(%IndexError* %exception) #1 !dbg !577 {
alloca:
%__temp_36 = alloca %"(CallStack | Nil)", !dbg !578
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !578
%0 = alloca %CallStack, !dbg !578
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %IndexError, %IndexError* %exception, i32 0, i32 3, !dbg !578
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !578
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_36, !dbg !578
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !578
%4 = load i32, i32* %3, !dbg !578
%5 = icmp eq i32 %4, 0, !dbg !578
%6 = xor i1 %5, true, !dbg !578
%7 = and i1 true, %6, !dbg !578
br i1 %7, label %then, label %else, !dbg !578
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_36, i32 0, i32 1, !dbg !578
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !578
br label %exit, !dbg !578
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !578
store %CallStack %10, %CallStack* %0, !dbg !578
%11 = load %CallStack, %CallStack* %0, !dbg !578
%12 = call %CallStack @"*IndexError@Exception#callstack=<CallStack>:CallStack"(%IndexError* %exception, %CallStack %11), !dbg !578
br label %exit, !dbg !578
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !578
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !578
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !578
store i64 %15, i64* %16, !dbg !578
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !578
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !578
store i64 %18, i64* %19, !dbg !578
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
%21 = ptrtoint %IndexError* %exception to i64, !dbg !578
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !578
store i64 %21, i64* %22, !dbg !578
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !578
store i32 38, i32* %24, !dbg !578
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !578
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !578
unreachable, !dbg !578
}
; Function Attrs: uwtable
define internal %CallStack @"*IndexError@Exception#callstack=<CallStack>:CallStack"(%IndexError* %self, %CallStack %callstack) #0 !dbg !579 {
alloca:
%callstack1 = alloca %CallStack, !dbg !580
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !580
%0 = getelementptr inbounds %IndexError, %IndexError* %self, i32 0, i32 3, !dbg !581
%1 = load %CallStack, %CallStack* %callstack1, !dbg !581
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !581
store i32 353, i32* %2, !dbg !581
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !581
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !581
store %CallStack %1, %CallStack* %4, !dbg !581
%5 = load %CallStack, %CallStack* %callstack1, !dbg !581
ret %CallStack %5, !dbg !581
}
; Function Attrs: uwtable
define internal void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %slice) #0 !dbg !582 {
alloca:
%count = alloca i32, !dbg !583
%new_bytesize = alloca i32, !dbg !583
%slice1 = alloca %"Slice(UInt8)", !dbg !583
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %slice, %"Slice(UInt8)"* %slice1, !dbg !583
%0 = call i1 @"*Slice(UInt8)@Indexable(T)#empty?:Bool"(%"Slice(UInt8)"* %slice1), !dbg !584
br i1 %0, label %then, label %else, !dbg !584
then: ; preds = %entry
ret void, !dbg !584
else: ; preds = %entry
%1 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %slice1, i32 0, i32 0, !dbg !584
%2 = load i32, i32* %1, !dbg !584
store i32 %2, i32* %count, !dbg !585
%3 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !586
%4 = load i32, i32* %count, !dbg !586
%5 = add i32 %3, %4, !dbg !586
store i32 %5, i32* %new_bytesize, !dbg !587
%6 = load i32, i32* %new_bytesize, !dbg !588
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !588
%8 = load i32, i32* %7, !dbg !588
%9 = icmp sgt i32 %6, %8, !dbg !588
br i1 %9, label %then2, label %else3, !dbg !588
then2: ; preds = %else
%10 = load i32, i32* %new_bytesize, !dbg !588
%11 = call i32 @"*Math@Math::pw2ceil<Int32>:Int32"(i32 %10), !dbg !589
%12 = call i8* @"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8)"(%"String::Builder"* %self, i32 %11), !dbg !590
br label %exit, !dbg !590
else3: ; preds = %else
br label %exit, !dbg !590
exit: ; preds = %else3, %then2
%13 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !590
%14 = load i8*, i8** %13, !dbg !590
%15 = call i32 @"*String::Builder#real_bytesize:Int32"(%"String::Builder"* %self), !dbg !591
%16 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %14, i32 %15), !dbg !592
%17 = load i32, i32* %count, !dbg !592
%18 = call i8* @"*Slice(UInt8)@Slice(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %slice1, i8* %16, i32 %17), !dbg !593
%19 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !593
%20 = load i32, i32* %19, !dbg !593
%21 = load i32, i32* %count, !dbg !593
%22 = add i32 %20, %21, !dbg !593
%23 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !594
store i32 %22, i32* %23, !dbg !594
ret void, !dbg !594
}
; Function Attrs: uwtable
define internal i1 @"*Slice(UInt8)@Indexable(T)#empty?:Bool"(%"Slice(UInt8)"* %self) #0 !dbg !595 {
entry:
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !597
%1 = load i32, i32* %0, !dbg !597
%2 = icmp eq i32 %1, 0, !dbg !597
ret i1 %2, !dbg !597
}
; 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 !598 {
entry:
%0 = call i8* @"*Slice(UInt8)@Slice(T)#pointer<Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %self, i32 %count), !dbg !599
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %0, i8* %target, i32 %count), !dbg !599
ret i8* %1, !dbg !599
}
; Function Attrs: uwtable
define internal i8* @"*Slice(UInt8)@Slice(T)#pointer<Int32>:Pointer(UInt8)"(%"Slice(UInt8)"* %self, i32 %size) #0 !dbg !600 {
alloca:
%__temp_38 = alloca i1, !dbg !601
br label %entry
entry: ; preds = %alloca
%0 = icmp sle i32 0, %size, !dbg !602
store i1 %0, i1* %__temp_38, !dbg !602
br i1 %0, label %then1, label %else2, !dbg !602
then: ; preds = %exit
br label %exit3, !dbg !602
else: ; preds = %exit
%1 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !603
call void @"*raise<IndexError>:NoReturn"(%IndexError* %1), !dbg !604
unreachable, !dbg !604
then1: ; preds = %entry
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 0, !dbg !602
%3 = load i32, i32* %2, !dbg !602
%4 = icmp sle i32 %size, %3, !dbg !602
br label %exit, !dbg !602
else2: ; preds = %entry
%5 = load i1, i1* %__temp_38, !dbg !602
br label %exit, !dbg !602
exit: ; preds = %else2, %then1
%6 = phi i1 [ %4, %then1 ], [ %5, %else2 ], !dbg !602
br i1 %6, label %then, label %else, !dbg !602
exit3: ; preds = %then
%7 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %self, i32 0, i32 2, !dbg !604
%8 = load i8*, i8** %7, !dbg !604
ret i8* %8, !dbg !604
}
; 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 !605 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from_impl<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %target, i8* %self, i32 %count), !dbg !606
ret i8* %0, !dbg !606
}
; 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 !607 {
alloca:
%count1 = alloca i32, !dbg !608
br label %entry
entry: ; preds = %alloca
store i32 %count, i32* %count1, !dbg !608
%0 = load i32, i32* %count1, !dbg !609
%1 = icmp slt i32 %0, 0, !dbg !609
br i1 %1, label %then, label %else, !dbg !609
then: ; preds = %entry
%2 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*)), !dbg !610
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %2), !dbg !609
unreachable, !dbg !609
else: ; preds = %entry
%3 = call i1 @"*Pointer(UInt8)@Object::==<Pointer(UInt8).class>:Bool"(i32 722, i32 722), !dbg !611
br i1 %3, label %then2, label %else3, !dbg !611
then2: ; preds = %else
%4 = load i32, i32* %count1, !dbg !611
%5 = call i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<Int32>:UInt64"(i8* %self, i32 %4), !dbg !612
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %self, i8* %source, i64 %5, i32 0, i1 false), !dbg !613
br label %exit, !dbg !613
else3: ; preds = %else
br label %while, !dbg !613
exit: ; preds = %exit4, %then2
ret i8* %self, !dbg !614
while: ; preds = %body, %else3
%6 = load i32, i32* %count1, !dbg !615
%7 = sub i32 %6, 1, !dbg !615
store i32 %7, i32* %count1, !dbg !616
%8 = icmp sge i32 %7, 0, !dbg !616
br i1 %8, label %body, label %exit4, !dbg !616
body: ; preds = %while
%9 = load i32, i32* %count1, !dbg !616
%10 = load i32, i32* %count1, !dbg !616
%11 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %source, i32 %10), !dbg !617
%12 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %self, i32 %9, i8 %11), !dbg !614
br label %while, !dbg !614
exit4: ; preds = %while
br label %exit, !dbg !614
}
; Function Attrs: uwtable
define internal i64 @"*Pointer(UInt8)@Pointer(T)#bytesize<Int32>:UInt64"(i8* %self, i32 %count) #0 !dbg !618 {
entry:
%0 = sext i32 %count to i64, !dbg !619
%1 = mul i64 %0, 1, !dbg !619
ret i64 %1, !dbg !619
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %self, i32 %offset) #0 !dbg !620 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %self, i32 %offset), !dbg !621
%1 = load i8, i8* %0, !dbg !621
ret i8 %1, !dbg !621
}
; Function Attrs: uwtable
define internal void @"*Errno@Exception#initialize<String>:Nil"(%Errno* %self, %String* %message) #0 !dbg !622 {
alloca:
%cause = alloca %Nil, !dbg !623
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 1, !dbg !624
store %String* %message, %String** %0, !dbg !624
%1 = load %Nil, %Nil* %cause, !dbg !624
%2 = getelementptr inbounds %Errno, %Errno* %self, i32 0, i32 2, !dbg !625
store i32* null, i32** %2, !dbg !625
ret void, !dbg !625
}
declare void @free(i8*)
; Function Attrs: uwtable
define internal i1 @"*String#ends_with?<Char>:Bool"(%String* %self, i32 %char) #0 !dbg !626 {
alloca:
%__temp_240 = alloca i1, !dbg !627
%__temp_241 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !627
%bytes = alloca [4 x i8], !dbg !627
%count = alloca i32, !dbg !627
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !628
%i = alloca i32, !dbg !629
%i8 = alloca i32, !dbg !629
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !630
%2 = load i32, i32* %1, !dbg !630
%3 = icmp sgt i32 %2, 0, !dbg !630
br i1 %3, label %then, label %else, !dbg !630
then: ; preds = %entry
br label %exit, !dbg !630
else: ; preds = %entry
ret i1 false, !dbg !630
exit: ; preds = %then
%4 = call i1 @"*Char#ascii?:Bool"(i32 %char), !dbg !631
store i1 %4, i1* %__temp_240, !dbg !631
br i1 %4, label %then3, label %else4, !dbg !631
then1: ; preds = %exit5
%5 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !632
%6 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !632
%7 = load i32, i32* %6, !dbg !632
%8 = sub i32 %7, 1, !dbg !632
%9 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %5, i32 %8), !dbg !632
%10 = zext i8 %9 to i32, !dbg !632
%11 = icmp sge i32 %char, 0, !dbg !632
%12 = icmp eq i32 %10, %char, !dbg !632
%13 = and i1 %11, %12, !dbg !632
ret i1 %13, !dbg !632
else2: ; preds = %exit5
%14 = call %"Tuple(StaticArray(UInt8, 4), Int32)" @"*String::char_bytes_and_bytesize<Char>:Tuple(StaticArray(UInt8, 4), Int32)"(i32 %char), !dbg !628
store %"Tuple(StaticArray(UInt8, 4), Int32)" %14, %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !628
%15 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !628
store %"Tuple(StaticArray(UInt8, 4), Int32)" %15, %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_241, !dbg !628
%16 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_241, i32 0, i32 0, !dbg !628
%17 = load [4 x i8], [4 x i8]* %16, !dbg !633
store [4 x i8] %17, [4 x i8]* %bytes, !dbg !633
%18 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_241, i32 0, i32 1, !dbg !633
%19 = load i32, i32* %18, !dbg !633
store i32 %19, i32* %count, !dbg !634
%20 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !635
%21 = load i32, i32* %20, !dbg !635
%22 = load i32, i32* %count, !dbg !635
%23 = icmp slt i32 %21, %22, !dbg !635
br i1 %23, label %then6, label %else7, !dbg !635
then3: ; preds = %exit
%24 = load i1, i1* %__temp_240, !dbg !631
br label %exit5, !dbg !631
else4: ; preds = %exit
%25 = call i1 @"*String#ascii_only?:Bool"(%String* %self), !dbg !636
br label %exit5, !dbg !636
exit5: ; preds = %else4, %then3
%26 = phi i1 [ %24, %then3 ], [ %25, %else4 ], !dbg !636
br i1 %26, label %then1, label %else2, !dbg !636
then6: ; preds = %else2
ret i1 false, !dbg !635
else7: ; preds = %else2
%27 = load i32, i32* %count, !dbg !635
%28 = xor i32 %27, %27, !dbg !629
store i32 %28, i32* %i8, !dbg !637
br label %while, !dbg !637
while: ; preds = %exit12, %else7
%29 = load i32, i32* %i8, !dbg !638
%30 = icmp slt i32 %29, %27, !dbg !638
br i1 %30, label %body, label %exit9, !dbg !638
body: ; preds = %while
%31 = load i32, i32* %i8, !dbg !638
store i32 %31, i32* %i, !dbg !638
%32 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !639
%33 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !639
%34 = load i32, i32* %33, !dbg !639
%35 = load i32, i32* %count, !dbg !639
%36 = sub i32 %34, %35, !dbg !639
%37 = load i32, i32* %i, !dbg !639
%38 = add i32 %36, %37, !dbg !639
%39 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %32, i32 %38), !dbg !639
%40 = load i32, i32* %i, !dbg !639
%41 = call i8 @"*StaticArray(UInt8, 4)@Indexable(T)#[]<Int32>:UInt8"([4 x i8]* %bytes, i32 %40), !dbg !640
%42 = icmp eq i8 %39, %41, !dbg !640
br i1 %42, label %then10, label %else11, !dbg !640
exit9: ; preds = %while
ret i1 true, !dbg !641
then10: ; preds = %body
br label %exit12, !dbg !640
else11: ; preds = %body
ret i1 false, !dbg !640
exit12: ; preds = %then10
%43 = load i32, i32* %i8, !dbg !640
%44 = add i32 %43, 1, !dbg !640
store i32 %44, i32* %i8, !dbg !641
br label %while, !dbg !641
}
; Function Attrs: uwtable
define internal i1 @"*Char#ascii?:Bool"(i32 %self) #0 !dbg !642 {
entry:
%0 = icmp slt i32 %self, 128, !dbg !644
ret i1 %0, !dbg !644
}
; Function Attrs: uwtable
define internal i1 @"*String#ascii_only?:Bool"(%String* %self) #0 !dbg !645 {
entry:
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !646
%1 = load i32, i32* %0, !dbg !646
%2 = call i32 @"*String#size:Int32"(%String* %self), !dbg !647
%3 = icmp eq i32 %1, %2, !dbg !647
ret i1 %3, !dbg !647
}
; Function Attrs: uwtable
define internal i32 @"*String#size:Int32"(%String* %self) #0 !dbg !648 {
alloca:
%__temp_65 = alloca i1, !dbg !649
%byte_index = alloca i32, !dbg !650
%char_index = alloca i32, !dbg !650
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !651
%1 = load i32, i32* %0, !dbg !651
%2 = icmp sgt i32 %1, 0, !dbg !651
store i1 %2, i1* %__temp_65, !dbg !651
br i1 %2, label %then1, label %else2, !dbg !651
then: ; preds = %exit
%3 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !651
%4 = load i32, i32* %3, !dbg !651
ret i32 %4, !dbg !651
else: ; preds = %exit
store i32 0, i32* %byte_index, !dbg !652
store i32 0, i32* %char_index, !dbg !653
br label %while, !dbg !653
then1: ; preds = %entry
%5 = load i1, i1* %__temp_65, !dbg !651
br label %exit, !dbg !651
else2: ; preds = %entry
%6 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !651
%7 = load i32, i32* %6, !dbg !651
%8 = icmp eq i32 %7, 0, !dbg !651
br label %exit, !dbg !651
exit: ; preds = %else2, %then1
%9 = phi i1 [ %5, %then1 ], [ %8, %else2 ], !dbg !651
br i1 %9, label %then, label %else, !dbg !651
while: ; preds = %body, %else
%10 = load i32, i32* %byte_index, !dbg !654
%11 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !654
%12 = load i32, i32* %11, !dbg !654
%13 = icmp slt i32 %10, %12, !dbg !654
br i1 %13, label %body, label %exit3, !dbg !654
body: ; preds = %while
%14 = load i32, i32* %byte_index, !dbg !654
%15 = load i32, i32* %char_index, !dbg !654
%16 = load i32, i32* %byte_index, !dbg !654
%17 = load i32, i32* %byte_index, !dbg !654
%18 = call i32 @"*String#char_bytesize_at<Int32>:Int32"(%String* %self, i32 %17), !dbg !655
%19 = add i32 %16, %18, !dbg !655
store i32 %19, i32* %byte_index, !dbg !656
%20 = load i32, i32* %char_index, !dbg !656
%21 = add i32 %20, 1, !dbg !656
store i32 %21, i32* %char_index, !dbg !657
br label %while, !dbg !657
exit3: ; preds = %while
%22 = load i32, i32* %char_index, !dbg !657
%23 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !658
store i32 %22, i32* %23, !dbg !658
ret i32 %22, !dbg !658
}
; Function Attrs: uwtable
define internal i32 @"*String#char_bytesize_at<Int32>:Int32"(%String* %self, i32 %byte_index) #0 !dbg !659 {
alloca:
%first = alloca i8, !dbg !660
%second = alloca i8, !dbg !660
%third = alloca i8, !dbg !660
%__temp_66 = alloca i1, !dbg !660
%__temp_67 = alloca i1, !dbg !660
br label %entry
entry: ; preds = %alloca
%0 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %byte_index), !dbg !661
store i8 %0, i8* %first, !dbg !662
%1 = load i8, i8* %first, !dbg !663
%2 = zext i8 %1 to i32, !dbg !663
%3 = icmp slt i32 %2, 128, !dbg !663
%4 = and i1 true, %3, !dbg !663
br i1 %4, label %then, label %else, !dbg !663
then: ; preds = %entry
ret i32 1, !dbg !663
else: ; preds = %entry
%5 = load i8, i8* %first, !dbg !664
%6 = zext i8 %5 to i32, !dbg !664
%7 = icmp slt i32 %6, 194, !dbg !664
%8 = and i1 true, %7, !dbg !664
br i1 %8, label %then1, label %else2, !dbg !664
then1: ; preds = %else
ret i32 1, !dbg !664
else2: ; preds = %else
%9 = add i32 %byte_index, 1, !dbg !664
%10 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %9), !dbg !665
store i8 %10, i8* %second, !dbg !666
%11 = load i8, i8* %second, !dbg !667
%12 = zext i8 %11 to i32, !dbg !667
%13 = and i32 %12, 192, !dbg !667
%14 = trunc i32 %13 to i8, !dbg !667
%15 = zext i8 %14 to i32, !dbg !667
%16 = icmp ne i32 %15, 128, !dbg !667
%17 = or i1 false, %16, !dbg !667
br i1 %17, label %then3, label %else4, !dbg !667
then3: ; preds = %else2
ret i32 1, !dbg !667
else4: ; preds = %else2
%18 = load i8, i8* %first, !dbg !668
%19 = zext i8 %18 to i32, !dbg !668
%20 = icmp slt i32 %19, 224, !dbg !668
%21 = and i1 true, %20, !dbg !668
br i1 %21, label %then5, label %else6, !dbg !668
then5: ; preds = %else4
ret i32 2, !dbg !668
else6: ; preds = %else4
%22 = add i32 %byte_index, 2, !dbg !668
%23 = call i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %22), !dbg !669
store i8 %23, i8* %third, !dbg !670
%24 = load i8, i8* %third, !dbg !671
%25 = zext i8 %24 to i32, !dbg !671
%26 = and i32 %25, 192, !dbg !671
%27 = trunc i32 %26 to i8, !dbg !671
%28 = zext i8 %27 to i32, !dbg !671
%29 = icmp ne i32 %28, 128, !dbg !671
%30 = or i1 false, %29, !dbg !671
br i1 %30, label %then7, label %else8, !dbg !671
then7: ; preds = %else6
ret i32 2, !dbg !671
else8: ; preds = %else6
%31 = load i8, i8* %first, !dbg !672
%32 = zext i8 %31 to i32, !dbg !672
%33 = icmp slt i32 %32, 240, !dbg !672
%34 = and i1 true, %33, !dbg !672
br i1 %34, label %then9, label %else10, !dbg !672
then9: ; preds = %else8
ret i32 3, !dbg !672
else10: ; preds = %else8
%35 = load i8, i8* %first, !dbg !673
%36 = zext i8 %35 to i32, !dbg !673
%37 = icmp eq i32 %36, 240, !dbg !673
%38 = and i1 true, %37, !dbg !673
store i1 %38, i1* %__temp_66, !dbg !673
br i1 %38, label %then13, label %else14, !dbg !673
then11: ; preds = %exit
ret i32 3, !dbg !673
else12: ; preds = %exit
%39 = load i8, i8* %first, !dbg !674
%40 = zext i8 %39 to i32, !dbg !674
%41 = icmp eq i32 %40, 244, !dbg !674
%42 = and i1 true, %41, !dbg !674
store i1 %42, i1* %__temp_67, !dbg !674
br i1 %42, label %then17, label %else18, !dbg !674
then13: ; preds = %else10
%43 = load i8, i8* %second, !dbg !673
%44 = zext i8 %43 to i32, !dbg !673
%45 = icmp slt i32 %44, 144, !dbg !673
%46 = and i1 true, %45, !dbg !673
br label %exit, !dbg !673
else14: ; preds = %else10
%47 = load i1, i1* %__temp_66, !dbg !673
br label %exit, !dbg !673
exit: ; preds = %else14, %then13
%48 = phi i1 [ %46, %then13 ], [ %47, %else14 ], !dbg !673
br i1 %48, label %then11, label %else12, !dbg !673
then15: ; preds = %exit19
ret i32 3, !dbg !674
else16: ; preds = %exit19
ret i32 4, !dbg !674
then17: ; preds = %else12
%49 = load i8, i8* %second, !dbg !674
%50 = zext i8 %49 to i32, !dbg !674
%51 = icmp sge i32 %50, 144, !dbg !674
%52 = or i1 false, %51, !dbg !674
br label %exit19, !dbg !674
else18: ; preds = %else12
%53 = load i1, i1* %__temp_67, !dbg !674
br label %exit19, !dbg !674
exit19: ; preds = %else18, %then17
%54 = phi i1 [ %52, %then17 ], [ %53, %else18 ], !dbg !674
br i1 %54, label %then15, label %else16, !dbg !674
}
; Function Attrs: uwtable
define internal i8 @"*String#unsafe_byte_at<Int32>:UInt8"(%String* %self, i32 %index) #0 !dbg !675 {
entry:
%0 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !676
%1 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %0, i32 %index), !dbg !676
ret i8 %1, !dbg !676
}
; 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 !677 {
alloca:
%bytes = alloca [4 x i8], !dbg !678
%bytesize = alloca i32, !dbg !678
%byte = alloca i8, !dbg !679
%c = alloca i32, !dbg !679
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !680
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %bytesize, !dbg !681
store i32 %char, i32* %c, !dbg !682
%1 = load i32, i32* %c, !dbg !683
%2 = icmp slt i32 %1, 128, !dbg !683
br i1 %2, label %then, label %else, !dbg !683
then: ; preds = %entry
%3 = load i32, i32* %c, !dbg !683
%4 = trunc i32 %3 to i8, !dbg !683
store i8 %4, i8* %byte, !dbg !683
%5 = load i32, i32* %bytesize, !dbg !683
%6 = load i8, i8* %byte, !dbg !683
%7 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %5, i8 %6), !dbg !684
%8 = load i32, i32* %bytesize, !dbg !684
%9 = add i32 %8, 1, !dbg !684
store i32 %9, i32* %bytesize, !dbg !685
br label %exit, !dbg !685
else: ; preds = %entry
%10 = load i32, i32* %c, !dbg !686
%11 = icmp sle i32 %10, 2047, !dbg !686
br i1 %11, label %then1, label %else2, !dbg !686
exit: ; preds = %exit3, %then
%12 = phi i32 [ %9, %then ], [ %38, %exit3 ], !dbg !680
%13 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, i32 0, i32 0, !dbg !680
%14 = load [4 x i8], [4 x i8]* %bytes, !dbg !680
store [4 x i8] %14, [4 x i8]* %13, !dbg !680
%15 = load i32, i32* %bytesize, !dbg !680
%16 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, i32 0, i32 1, !dbg !680
store i32 %15, i32* %16, !dbg !680
%17 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !680
ret %"Tuple(StaticArray(UInt8, 4), Int32)" %17, !dbg !680
then1: ; preds = %else
%18 = load i32, i32* %c, !dbg !686
%19 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %18, i32 6), !dbg !687
%20 = or i32 192, %19, !dbg !687
%21 = trunc i32 %20 to i8, !dbg !687
store i8 %21, i8* %byte, !dbg !687
%22 = load i32, i32* %bytesize, !dbg !687
%23 = load i8, i8* %byte, !dbg !687
%24 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %22, i8 %23), !dbg !684
%25 = load i32, i32* %bytesize, !dbg !684
%26 = add i32 %25, 1, !dbg !684
store i32 %26, i32* %bytesize, !dbg !685
%27 = load i32, i32* %c, !dbg !685
%28 = and i32 %27, 63, !dbg !685
%29 = or i32 128, %28, !dbg !685
%30 = trunc i32 %29 to i8, !dbg !685
store i8 %30, i8* %byte, !dbg !685
%31 = load i32, i32* %bytesize, !dbg !685
%32 = load i8, i8* %byte, !dbg !685
%33 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %31, i8 %32), !dbg !684
%34 = load i32, i32* %bytesize, !dbg !684
%35 = add i32 %34, 1, !dbg !684
store i32 %35, i32* %bytesize, !dbg !685
br label %exit3, !dbg !685
else2: ; preds = %else
%36 = load i32, i32* %c, !dbg !688
%37 = icmp sle i32 %36, 65535, !dbg !688
br i1 %37, label %then4, label %else5, !dbg !688
exit3: ; preds = %exit6, %then1
%38 = phi i32 [ %35, %then1 ], [ %69, %exit6 ], !dbg !680
br label %exit, !dbg !680
then4: ; preds = %else2
%39 = load i32, i32* %c, !dbg !688
%40 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %39, i32 12), !dbg !689
%41 = or i32 224, %40, !dbg !689
%42 = trunc i32 %41 to i8, !dbg !689
store i8 %42, i8* %byte, !dbg !689
%43 = load i32, i32* %bytesize, !dbg !689
%44 = load i8, i8* %byte, !dbg !689
%45 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %43, i8 %44), !dbg !684
%46 = load i32, i32* %bytesize, !dbg !684
%47 = add i32 %46, 1, !dbg !684
store i32 %47, i32* %bytesize, !dbg !685
%48 = load i32, i32* %c, !dbg !685
%49 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %48, i32 6), !dbg !690
%50 = and i32 %49, 63, !dbg !690
%51 = or i32 128, %50, !dbg !690
%52 = trunc i32 %51 to i8, !dbg !690
store i8 %52, i8* %byte, !dbg !690
%53 = load i32, i32* %bytesize, !dbg !690
%54 = load i8, i8* %byte, !dbg !690
%55 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %53, i8 %54), !dbg !684
%56 = load i32, i32* %bytesize, !dbg !684
%57 = add i32 %56, 1, !dbg !684
store i32 %57, i32* %bytesize, !dbg !685
%58 = load i32, i32* %c, !dbg !685
%59 = and i32 %58, 63, !dbg !685
%60 = or i32 128, %59, !dbg !685
%61 = trunc i32 %60 to i8, !dbg !685
store i8 %61, i8* %byte, !dbg !685
%62 = load i32, i32* %bytesize, !dbg !685
%63 = load i8, i8* %byte, !dbg !685
%64 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %62, i8 %63), !dbg !684
%65 = load i32, i32* %bytesize, !dbg !684
%66 = add i32 %65, 1, !dbg !684
store i32 %66, i32* %bytesize, !dbg !685
br label %exit6, !dbg !685
else5: ; preds = %else2
%67 = load i32, i32* %c, !dbg !691
%68 = icmp sle i32 %67, 1114111, !dbg !691
br i1 %68, label %then7, label %else8, !dbg !691
exit6: ; preds = %exit9, %then4
%69 = phi i32 [ %66, %then4 ], [ %114, %exit9 ], !dbg !680
br label %exit3, !dbg !680
then7: ; preds = %else5
%70 = load i32, i32* %c, !dbg !691
%71 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %70, i32 18), !dbg !692
%72 = or i32 240, %71, !dbg !692
%73 = trunc i32 %72 to i8, !dbg !692
store i8 %73, i8* %byte, !dbg !692
%74 = load i32, i32* %bytesize, !dbg !692
%75 = load i8, i8* %byte, !dbg !692
%76 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %74, i8 %75), !dbg !684
%77 = load i32, i32* %bytesize, !dbg !684
%78 = add i32 %77, 1, !dbg !684
store i32 %78, i32* %bytesize, !dbg !685
%79 = load i32, i32* %c, !dbg !685
%80 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %79, i32 12), !dbg !693
%81 = and i32 %80, 63, !dbg !693
%82 = or i32 128, %81, !dbg !693
%83 = trunc i32 %82 to i8, !dbg !693
store i8 %83, i8* %byte, !dbg !693
%84 = load i32, i32* %bytesize, !dbg !693
%85 = load i8, i8* %byte, !dbg !693
%86 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %84, i8 %85), !dbg !684
%87 = load i32, i32* %bytesize, !dbg !684
%88 = add i32 %87, 1, !dbg !684
store i32 %88, i32* %bytesize, !dbg !685
%89 = load i32, i32* %c, !dbg !685
%90 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %89, i32 6), !dbg !694
%91 = and i32 %90, 63, !dbg !694
%92 = or i32 128, %91, !dbg !694
%93 = trunc i32 %92 to i8, !dbg !694
store i8 %93, i8* %byte, !dbg !694
%94 = load i32, i32* %bytesize, !dbg !694
%95 = load i8, i8* %byte, !dbg !694
%96 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %94, i8 %95), !dbg !684
%97 = load i32, i32* %bytesize, !dbg !684
%98 = add i32 %97, 1, !dbg !684
store i32 %98, i32* %bytesize, !dbg !685
%99 = load i32, i32* %c, !dbg !685
%100 = and i32 %99, 63, !dbg !685
%101 = or i32 128, %100, !dbg !685
%102 = trunc i32 %101 to i8, !dbg !685
store i8 %102, i8* %byte, !dbg !685
%103 = load i32, i32* %bytesize, !dbg !685
%104 = load i8, i8* %byte, !dbg !685
%105 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %bytes, i32 %103, i8 %104), !dbg !684
%106 = load i32, i32* %bytesize, !dbg !684
%107 = add i32 %106, 1, !dbg !684
store i32 %107, i32* %bytesize, !dbg !685
br label %exit9, !dbg !685
else8: ; preds = %else5
%108 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !695
%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 !695
%110 = call %String* @"*Char#dump:String"(i32 %char), !dbg !696
%111 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %109, %String* %110), !dbg !695
%112 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %111), !dbg !695
%113 = call %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %112), !dbg !697
call void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %113), !dbg !680
unreachable, !dbg !680
exit9: ; preds = %then7
%114 = phi i32 [ %107, %then7 ], !dbg !680
br label %exit6, !dbg !680
}
; 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 !698 {
alloca:
%index1 = alloca i32, !dbg !699
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !699
%0 = load i32, i32* %index1, !dbg !699
%1 = call i32 @"*StaticArray(UInt8, 4)@Indexable(T)#check_index_out_of_bounds<Int32>:Int32"([4 x i8]* %self, i32 %0), !dbg !700
store i32 %1, i32* %index1, !dbg !701
%2 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !702
%3 = load i32, i32* %index1, !dbg !702
%4 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %2, i32 %3, i8 %value), !dbg !702
ret i8 %4, !dbg !702
}
; 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 !703 {
alloca:
%index1 = alloca i32, !dbg !704
%__temp_53 = alloca i1, !dbg !704
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !704
%0 = load i32, i32* %index1, !dbg !705
%1 = icmp slt i32 %0, 0, !dbg !705
br i1 %1, label %then, label %else, !dbg !705
then: ; preds = %entry
%2 = load i32, i32* %index1, !dbg !705
%3 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !706
%4 = add i32 %2, %3, !dbg !706
store i32 %4, i32* %index1, !dbg !705
br label %exit, !dbg !705
else: ; preds = %entry
br label %exit, !dbg !705
exit: ; preds = %else, %then
%5 = load i32, i32* %index1, !dbg !707
%6 = icmp sle i32 0, %5, !dbg !707
store i1 %6, i1* %__temp_53, !dbg !707
br i1 %6, label %then4, label %else5, !dbg !707
then2: ; preds = %exit6
%7 = load i32, i32* %index1, !dbg !708
br label %exit7, !dbg !708
else3: ; preds = %exit6
%8 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !709
call void @"*raise<IndexError>:NoReturn"(%IndexError* %8), !dbg !710
unreachable, !dbg !710
then4: ; preds = %exit
%9 = load i32, i32* %index1, !dbg !707
%10 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !708
%11 = icmp slt i32 %9, %10, !dbg !708
br label %exit6, !dbg !708
else5: ; preds = %exit
%12 = load i1, i1* %__temp_53, !dbg !708
br label %exit6, !dbg !708
exit6: ; preds = %else5, %then4
%13 = phi i1 [ %11, %then4 ], [ %12, %else5 ], !dbg !708
br i1 %13, label %then2, label %else3, !dbg !708
exit7: ; preds = %then2
%14 = phi i32 [ %7, %then2 ], !dbg !710
ret i32 %14, !dbg !710
}
; Function Attrs: uwtable
define internal i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self) #0 !dbg !711 {
entry:
ret i32 4, !dbg !712
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self) #0 !dbg !713 {
entry:
%0 = getelementptr inbounds [4 x i8], [4 x i8]* %self, i32 0, i32 0, !dbg !714
ret i8* %0, !dbg !714
}
; Function Attrs: uwtable
define internal %String* @"*Char#dump:String"(i32 %self) #0 !dbg !715 {
alloca:
%io = alloca %"String::Builder"*, !dbg !716
%__temp_54 = alloca i1, !dbg !716
%io28 = alloca %"String::Builder"*, !dbg !717
%capacity = alloca i32, !dbg !717
%builder = alloca %"String::Builder"*, !dbg !718
%capacity29 = alloca i32, !dbg !718
%builder30 = alloca %"String::Builder"*, !dbg !718
br label %entry
entry: ; preds = %alloca
%0 = call i1 @"*Char@Object#===<Char>:Bool"(i32 39, i32 %self), !dbg !719
br i1 %0, label %then, label %else, !dbg !719
then: ; preds = %entry
br label %exit, !dbg !719
else: ; preds = %entry
%1 = call i1 @"*Char@Object#===<Char>:Bool"(i32 92, i32 %self), !dbg !720
br i1 %1, label %then1, label %else2, !dbg !720
exit: ; preds = %exit3, %then
%2 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5C'''" to %String*), %then ], [ %4, %exit3 ], !dbg !721
ret %String* %2, !dbg !721
then1: ; preds = %else
br label %exit3, !dbg !720
else2: ; preds = %else
%3 = call i1 @"*Char@Object#===<Char>:Bool"(i32 7, i32 %self), !dbg !722
br i1 %3, label %then4, label %else5, !dbg !722
exit3: ; preds = %exit6, %then1
%4 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5C\5C''" to %String*), %then1 ], [ %6, %exit6 ], !dbg !721
br label %exit, !dbg !721
then4: ; preds = %else2
br label %exit6, !dbg !722
else5: ; preds = %else2
%5 = call i1 @"*Char@Object#===<Char>:Bool"(i32 8, i32 %self), !dbg !723
br i1 %5, label %then7, label %else8, !dbg !723
exit6: ; preds = %exit9, %then4
%6 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Ca''" to %String*), %then4 ], [ %8, %exit9 ], !dbg !721
br label %exit3, !dbg !721
then7: ; preds = %else5
br label %exit9, !dbg !723
else8: ; preds = %else5
%7 = call i1 @"*Char@Object#===<Char>:Bool"(i32 27, i32 %self), !dbg !724
br i1 %7, label %then10, label %else11, !dbg !724
exit9: ; preds = %exit12, %then7
%8 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cb''" to %String*), %then7 ], [ %10, %exit12 ], !dbg !721
br label %exit6, !dbg !721
then10: ; preds = %else8
br label %exit12, !dbg !724
else11: ; preds = %else8
%9 = call i1 @"*Char@Object#===<Char>:Bool"(i32 12, i32 %self), !dbg !725
br i1 %9, label %then13, label %else14, !dbg !725
exit12: ; preds = %exit15, %then10
%10 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Ce''" to %String*), %then10 ], [ %12, %exit15 ], !dbg !721
br label %exit9, !dbg !721
then13: ; preds = %else11
br label %exit15, !dbg !725
else14: ; preds = %else11
%11 = call i1 @"*Char@Object#===<Char>:Bool"(i32 10, i32 %self), !dbg !726
br i1 %11, label %then16, label %else17, !dbg !726
exit15: ; preds = %exit18, %then13
%12 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cf''" to %String*), %then13 ], [ %14, %exit18 ], !dbg !721
br label %exit12, !dbg !721
then16: ; preds = %else14
br label %exit18, !dbg !726
else17: ; preds = %else14
%13 = call i1 @"*Char@Object#===<Char>:Bool"(i32 13, i32 %self), !dbg !727
br i1 %13, label %then19, label %else20, !dbg !727
exit18: ; preds = %exit21, %then16
%14 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cn''" to %String*), %then16 ], [ %16, %exit21 ], !dbg !721
br label %exit15, !dbg !721
then19: ; preds = %else17
br label %exit21, !dbg !727
else20: ; preds = %else17
%15 = call i1 @"*Char@Object#===<Char>:Bool"(i32 9, i32 %self), !dbg !728
br i1 %15, label %then22, label %else23, !dbg !728
exit21: ; preds = %exit24, %then19
%16 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cr''" to %String*), %then19 ], [ %18, %exit24 ], !dbg !721
br label %exit18, !dbg !721
then22: ; preds = %else20
br label %exit24, !dbg !728
else23: ; preds = %else20
%17 = call i1 @"*Char@Object#===<Char>:Bool"(i32 11, i32 %self), !dbg !729
br i1 %17, label %then25, label %else26, !dbg !729
exit24: ; preds = %exit27, %then22
%18 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Ct''" to %String*), %then22 ], [ %28, %exit27 ], !dbg !721
br label %exit21, !dbg !721
then25: ; preds = %else23
br label %exit27, !dbg !729
else26: ; preds = %else23
store i32 64, i32* %capacity, !dbg !730
%19 = load i32, i32* %capacity, !dbg !730
store i32 %19, i32* %capacity29, !dbg !718
%20 = load i32, i32* %capacity29, !dbg !718
%21 = call %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %20), !dbg !731
store %"String::Builder"* %21, %"String::Builder"** %builder30, !dbg !732
%22 = load %"String::Builder"*, %"String::Builder"** %builder30, !dbg !732
store %"String::Builder"* %22, %"String::Builder"** %builder, !dbg !732
%23 = load %"String::Builder"*, %"String::Builder"** %builder, !dbg !732
store %"String::Builder"* %23, %"String::Builder"** %io28, !dbg !732
%24 = load %"String::Builder"*, %"String::Builder"** %io28, !dbg !732
%25 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %24, i32 39), !dbg !733
%26 = load %"String::Builder"*, %"String::Builder"** %io28, !dbg !733
store %"String::Builder"* %26, %"String::Builder"** %io, !dbg !733
%27 = call i1 @"*Char#ascii_control?:Bool"(i32 %self), !dbg !734
store i1 %27, i1* %__temp_54, !dbg !734
br i1 %27, label %then33, label %else34, !dbg !734
exit27: ; preds = %exit36, %then25
%28 = phi %String* [ bitcast ({ i32, i32, i32, [5 x i8] }* @"''\5Cv''" to %String*), %then25 ], [ %42, %exit36 ], !dbg !721
br label %exit24, !dbg !721
then31: ; preds = %exit35
%29 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !734
%30 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %29, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'\5Cu{'" to %String*)), !dbg !735
%31 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !735
call void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 16, %"String::Builder"* %31), !dbg !736
%32 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !736
%33 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %32, i32 125), !dbg !737
br label %exit36, !dbg !737
else32: ; preds = %exit35
%34 = load %"String::Builder"*, %"String::Builder"** %io, !dbg !737
call void @"*Char#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %34), !dbg !738
br label %exit36, !dbg !738
then33: ; preds = %else26
%35 = load i1, i1* %__temp_54, !dbg !734
br label %exit35, !dbg !734
else34: ; preds = %else26
%36 = icmp sge i32 %self, 128, !dbg !734
br label %exit35, !dbg !734
exit35: ; preds = %else34, %then33
%37 = phi i1 [ %35, %then33 ], [ %36, %else34 ], !dbg !734
br i1 %37, label %then31, label %else32, !dbg !734
exit36: ; preds = %else32, %then31
%38 = phi %"String::Builder"* [ %33, %then31 ], [ null, %else32 ], !dbg !738
%39 = load %"String::Builder"*, %"String::Builder"** %io28, !dbg !738
%40 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %39, i32 39), !dbg !739
%41 = load %"String::Builder"*, %"String::Builder"** %builder30, !dbg !739
%42 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %41), !dbg !721
br label %exit27, !dbg !721
}
; Function Attrs: uwtable
define internal i1 @"*Char@Object#===<Char>:Bool"(i32 %self, i32 %other) #0 !dbg !740 {
entry:
%0 = icmp eq i32 %self, %other, !dbg !741
ret i1 %0, !dbg !741
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %capacity) #0 !dbg !742 {
alloca:
%_ = alloca %"String::Builder"*, !dbg !743
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 !743
%1 = bitcast i8* %0 to %"String::Builder"*, !dbg !743
%2 = bitcast %"String::Builder"* %1 to i8*, !dbg !743
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 !743
%3 = getelementptr inbounds %"String::Builder", %"String::Builder"* %1, i32 0, i32 0, !dbg !743
store i32 92, i32* %3, !dbg !743
store %"String::Builder"* %1, %"String::Builder"** %_, !dbg !743
%4 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !743
%5 = call i1 @"*String::Builder#initialize<Int32>:Bool"(%"String::Builder"* %4, i32 %capacity), !dbg !743
%6 = load %"String::Builder"*, %"String::Builder"** %_, !dbg !743
ret %"String::Builder"* %6, !dbg !743
}
; Function Attrs: uwtable
define internal i1 @"*String::Builder#initialize<Int32>:Bool"(%"String::Builder"* %self, i32 %capacity) #0 !dbg !744 {
alloca:
%capacity1 = alloca i32, !dbg !745
br label %entry
entry: ; preds = %alloca
store i32 %capacity, i32* %capacity1, !dbg !745
%0 = load i32, i32* %capacity1, !dbg !745
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %0), !dbg !746
%1 = load i32, i32* %capacity1, !dbg !746
%2 = add i32 %1, 13, !dbg !746
store i32 %2, i32* %capacity1, !dbg !747
%3 = load i32, i32* %capacity1, !dbg !747
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %3), !dbg !748
%4 = load i32, i32* %capacity1, !dbg !748
%5 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %4), !dbg !749
%6 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 6, !dbg !750
store i8* %5, i8** %6, !dbg !750
%7 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 4, !dbg !751
store i32 0, i32* %7, !dbg !751
%8 = load i32, i32* %capacity1, !dbg !751
%9 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 5, !dbg !752
store i32 %8, i32* %9, !dbg !752
%10 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 7, !dbg !753
store i1 false, i1* %10, !dbg !753
ret i1 false, !dbg !753
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %self, i32 %obj) #0 !dbg !754 {
entry:
call void @"*Char#to_s<String::Builder>:Nil"(i32 %obj, %"String::Builder"* %self), !dbg !755
ret %"String::Builder"* %self, !dbg !755
}
; Function Attrs: uwtable
define internal void @"*Char#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %io) #0 !dbg !756 {
alloca:
%byte = alloca i8, !dbg !757
%chars = alloca [4 x i8], !dbg !757
%i = alloca i32, !dbg !757
%0 = alloca %"Slice(UInt8)", !dbg !758
%byte4 = alloca i8, !dbg !759
%c = alloca i32, !dbg !759
%1 = alloca %"Slice(UInt8)", !dbg !760
%2 = alloca %"Slice(UInt8)", !dbg !760
br label %entry
entry: ; preds = %alloca
%3 = call i1 @"*Char#ascii?:Bool"(i32 %self), !dbg !761
br i1 %3, label %then, label %else, !dbg !761
then: ; preds = %entry
%4 = trunc i32 %self to i8, !dbg !761
store i8 %4, i8* %byte, !dbg !762
%5 = call i1 @"*String::Builder@IO#has_non_utf8_encoding?:Bool"(%"String::Builder"* %io), !dbg !763
br i1 %5, label %then1, label %else2, !dbg !763
else: ; preds = %entry
store i32 0, i32* %i, !dbg !764
store i32 %self, i32* %c, !dbg !765
%6 = load i32, i32* %c, !dbg !766
%7 = icmp slt i32 %6, 128, !dbg !766
br i1 %7, label %then5, label %else6, !dbg !766
then1: ; preds = %then
%8 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %byte, i32 1), !dbg !758
store %"Slice(UInt8)" %8, %"Slice(UInt8)"* %0, !dbg !758
%9 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !758
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %9), !dbg !767
br label %exit, !dbg !767
else2: ; preds = %then
%10 = load i8, i8* %byte, !dbg !767
call void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* %io, i8 %10), !dbg !768
br label %exit, !dbg !768
exit: ; preds = %else2, %then1
br label %exit3, !dbg !768
exit3: ; preds = %exit7, %exit
ret void, !dbg !769
then5: ; preds = %else
%11 = load i32, i32* %c, !dbg !766
%12 = trunc i32 %11 to i8, !dbg !766
store i8 %12, i8* %byte4, !dbg !766
%13 = load i32, i32* %i, !dbg !766
%14 = load i8, i8* %byte4, !dbg !766
%15 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %13, i8 %14), !dbg !770
%16 = load i32, i32* %i, !dbg !770
%17 = add i32 %16, 1, !dbg !770
store i32 %17, i32* %i, !dbg !771
br label %exit7, !dbg !771
else6: ; preds = %else
%18 = load i32, i32* %c, !dbg !772
%19 = icmp sle i32 %18, 2047, !dbg !772
br i1 %19, label %then8, label %else9, !dbg !772
exit7: ; preds = %exit10, %then5
%20 = phi i32 [ %17, %then5 ], [ %45, %exit10 ], !dbg !773
%21 = call %"Slice(UInt8)" @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_slice:Slice(UInt8)"([4 x i8]* %chars), !dbg !760
store %"Slice(UInt8)" %21, %"Slice(UInt8)"* %1, !dbg !760
%22 = load i32, i32* %i, !dbg !760
%23 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8)"(%"Slice(UInt8)"* %1, i32 0, i32 %22), !dbg !760
store %"Slice(UInt8)" %23, %"Slice(UInt8)"* %2, !dbg !760
%24 = load %"Slice(UInt8)", %"Slice(UInt8)"* %2, !dbg !760
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %24), !dbg !769
br label %exit3, !dbg !769
then8: ; preds = %else6
%25 = load i32, i32* %c, !dbg !772
%26 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %25, i32 6), !dbg !774
%27 = or i32 192, %26, !dbg !774
%28 = trunc i32 %27 to i8, !dbg !774
store i8 %28, i8* %byte4, !dbg !774
%29 = load i32, i32* %i, !dbg !774
%30 = load i8, i8* %byte4, !dbg !774
%31 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %29, i8 %30), !dbg !770
%32 = load i32, i32* %i, !dbg !770
%33 = add i32 %32, 1, !dbg !770
store i32 %33, i32* %i, !dbg !771
%34 = load i32, i32* %c, !dbg !771
%35 = and i32 %34, 63, !dbg !771
%36 = or i32 128, %35, !dbg !771
%37 = trunc i32 %36 to i8, !dbg !771
store i8 %37, i8* %byte4, !dbg !771
%38 = load i32, i32* %i, !dbg !771
%39 = load i8, i8* %byte4, !dbg !771
%40 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %38, i8 %39), !dbg !770
%41 = load i32, i32* %i, !dbg !770
%42 = add i32 %41, 1, !dbg !770
store i32 %42, i32* %i, !dbg !771
br label %exit10, !dbg !771
else9: ; preds = %else6
%43 = load i32, i32* %c, !dbg !775
%44 = icmp sle i32 %43, 65535, !dbg !775
br i1 %44, label %then11, label %else12, !dbg !775
exit10: ; preds = %exit13, %then8
%45 = phi i32 [ %42, %then8 ], [ %76, %exit13 ], !dbg !773
br label %exit7, !dbg !773
then11: ; preds = %else9
%46 = load i32, i32* %c, !dbg !775
%47 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %46, i32 12), !dbg !776
%48 = or i32 224, %47, !dbg !776
%49 = trunc i32 %48 to i8, !dbg !776
store i8 %49, i8* %byte4, !dbg !776
%50 = load i32, i32* %i, !dbg !776
%51 = load i8, i8* %byte4, !dbg !776
%52 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %50, i8 %51), !dbg !770
%53 = load i32, i32* %i, !dbg !770
%54 = add i32 %53, 1, !dbg !770
store i32 %54, i32* %i, !dbg !771
%55 = load i32, i32* %c, !dbg !771
%56 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %55, i32 6), !dbg !777
%57 = and i32 %56, 63, !dbg !777
%58 = or i32 128, %57, !dbg !777
%59 = trunc i32 %58 to i8, !dbg !777
store i8 %59, i8* %byte4, !dbg !777
%60 = load i32, i32* %i, !dbg !777
%61 = load i8, i8* %byte4, !dbg !777
%62 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %60, i8 %61), !dbg !770
%63 = load i32, i32* %i, !dbg !770
%64 = add i32 %63, 1, !dbg !770
store i32 %64, i32* %i, !dbg !771
%65 = load i32, i32* %c, !dbg !771
%66 = and i32 %65, 63, !dbg !771
%67 = or i32 128, %66, !dbg !771
%68 = trunc i32 %67 to i8, !dbg !771
store i8 %68, i8* %byte4, !dbg !771
%69 = load i32, i32* %i, !dbg !771
%70 = load i8, i8* %byte4, !dbg !771
%71 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %69, i8 %70), !dbg !770
%72 = load i32, i32* %i, !dbg !770
%73 = add i32 %72, 1, !dbg !770
store i32 %73, i32* %i, !dbg !771
br label %exit13, !dbg !771
else12: ; preds = %else9
%74 = load i32, i32* %c, !dbg !778
%75 = icmp sle i32 %74, 1114111, !dbg !778
br i1 %75, label %then14, label %else15, !dbg !778
exit13: ; preds = %exit16, %then11
%76 = phi i32 [ %73, %then11 ], [ %121, %exit16 ], !dbg !773
br label %exit10, !dbg !773
then14: ; preds = %else12
%77 = load i32, i32* %c, !dbg !778
%78 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %77, i32 18), !dbg !779
%79 = or i32 240, %78, !dbg !779
%80 = trunc i32 %79 to i8, !dbg !779
store i8 %80, i8* %byte4, !dbg !779
%81 = load i32, i32* %i, !dbg !779
%82 = load i8, i8* %byte4, !dbg !779
%83 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %81, i8 %82), !dbg !770
%84 = load i32, i32* %i, !dbg !770
%85 = add i32 %84, 1, !dbg !770
store i32 %85, i32* %i, !dbg !771
%86 = load i32, i32* %c, !dbg !771
%87 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %86, i32 12), !dbg !780
%88 = and i32 %87, 63, !dbg !780
%89 = or i32 128, %88, !dbg !780
%90 = trunc i32 %89 to i8, !dbg !780
store i8 %90, i8* %byte4, !dbg !780
%91 = load i32, i32* %i, !dbg !780
%92 = load i8, i8* %byte4, !dbg !780
%93 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %91, i8 %92), !dbg !770
%94 = load i32, i32* %i, !dbg !770
%95 = add i32 %94, 1, !dbg !770
store i32 %95, i32* %i, !dbg !771
%96 = load i32, i32* %c, !dbg !771
%97 = call i32 @"*Int32@Int#>><Int32>:Int32"(i32 %96, i32 6), !dbg !781
%98 = and i32 %97, 63, !dbg !781
%99 = or i32 128, %98, !dbg !781
%100 = trunc i32 %99 to i8, !dbg !781
store i8 %100, i8* %byte4, !dbg !781
%101 = load i32, i32* %i, !dbg !781
%102 = load i8, i8* %byte4, !dbg !781
%103 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %101, i8 %102), !dbg !770
%104 = load i32, i32* %i, !dbg !770
%105 = add i32 %104, 1, !dbg !770
store i32 %105, i32* %i, !dbg !771
%106 = load i32, i32* %c, !dbg !771
%107 = and i32 %106, 63, !dbg !771
%108 = or i32 128, %107, !dbg !771
%109 = trunc i32 %108 to i8, !dbg !771
store i8 %109, i8* %byte4, !dbg !771
%110 = load i32, i32* %i, !dbg !771
%111 = load i8, i8* %byte4, !dbg !771
%112 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#[]=<Int32, UInt8>:UInt8"([4 x i8]* %chars, i32 %110, i8 %111), !dbg !770
%113 = load i32, i32* %i, !dbg !770
%114 = add i32 %113, 1, !dbg !770
store i32 %114, i32* %i, !dbg !771
br label %exit16, !dbg !771
else15: ; preds = %else12
%115 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !782
%116 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %115, %String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Invalid char value ...'" to %String*)), !dbg !782
%117 = call %String* @"*Char#dump:String"(i32 %self), !dbg !783
%118 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %116, %String* %117), !dbg !782
%119 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %118), !dbg !782
%120 = call %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %119), !dbg !784
call void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %120), !dbg !773
unreachable, !dbg !773
exit16: ; preds = %then14
%121 = phi i32 [ %114, %then14 ], !dbg !773
br label %exit13, !dbg !773
}
; Function Attrs: uwtable
define internal i1 @"*String::Builder@IO#has_non_utf8_encoding?:Bool"(%"String::Builder"* %self) #0 !dbg !785 {
entry:
%0 = getelementptr inbounds %"String::Builder", %"String::Builder"* %self, i32 0, i32 1, !dbg !786
%1 = getelementptr inbounds %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %0, i32 0, i32 0, !dbg !786
%2 = load i32, i32* %1, !dbg !786
%3 = icmp eq i32 %2, 0, !dbg !786
%4 = xor i1 %3, true, !dbg !786
%5 = and i1 true, %4, !dbg !786
%6 = xor i1 %5, true, !dbg !786
%7 = xor i1 %6, true, !dbg !786
ret i1 %7, !dbg !786
}
; Function Attrs: uwtable
define internal %InvalidByteSequenceError* @"*InvalidByteSequenceError::new<String>:InvalidByteSequenceError"(%String* %message) #0 !dbg !787 {
alloca:
%_ = alloca %InvalidByteSequenceError*, !dbg !788
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%InvalidByteSequenceError* getelementptr (%InvalidByteSequenceError, %InvalidByteSequenceError* null, i32 1) to i64)), !dbg !788
%1 = bitcast i8* %0 to %InvalidByteSequenceError*, !dbg !788
%2 = bitcast %InvalidByteSequenceError* %1 to i8*, !dbg !788
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 !788
%3 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %1, i32 0, i32 0, !dbg !788
store i32 41, i32* %3, !dbg !788
store %InvalidByteSequenceError* %1, %InvalidByteSequenceError** %_, !dbg !788
%4 = load %InvalidByteSequenceError*, %InvalidByteSequenceError** %_, !dbg !788
call void @"*InvalidByteSequenceError#initialize<String>:Nil"(%InvalidByteSequenceError* %4, %String* %message), !dbg !788
%5 = load %InvalidByteSequenceError*, %InvalidByteSequenceError** %_, !dbg !788
ret %InvalidByteSequenceError* %5, !dbg !788
}
; Function Attrs: uwtable
define internal void @"*InvalidByteSequenceError#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message) #0 !dbg !789 {
entry:
call void @"*InvalidByteSequenceError@Exception#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message), !dbg !790
ret void, !dbg !790
}
; Function Attrs: uwtable
define internal void @"*InvalidByteSequenceError@Exception#initialize<String>:Nil"(%InvalidByteSequenceError* %self, %String* %message) #0 !dbg !791 {
alloca:
%cause = alloca %Nil, !dbg !792
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 1, !dbg !793
store %String* %message, %String** %0, !dbg !793
%1 = load %Nil, %Nil* %cause, !dbg !793
%2 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 2, !dbg !794
store i32* null, i32** %2, !dbg !794
ret void, !dbg !794
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<InvalidByteSequenceError>:NoReturn"(%InvalidByteSequenceError* %exception) #1 !dbg !795 {
alloca:
%__temp_57 = alloca %"(CallStack | Nil)", !dbg !796
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !796
%0 = alloca %CallStack, !dbg !796
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %exception, i32 0, i32 3, !dbg !796
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !796
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_57, !dbg !796
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !796
%4 = load i32, i32* %3, !dbg !796
%5 = icmp eq i32 %4, 0, !dbg !796
%6 = xor i1 %5, true, !dbg !796
%7 = and i1 true, %6, !dbg !796
br i1 %7, label %then, label %else, !dbg !796
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_57, i32 0, i32 1, !dbg !796
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !796
br label %exit, !dbg !796
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !796
store %CallStack %10, %CallStack* %0, !dbg !796
%11 = load %CallStack, %CallStack* %0, !dbg !796
%12 = call %CallStack @"*InvalidByteSequenceError@Exception#callstack=<CallStack>:CallStack"(%InvalidByteSequenceError* %exception, %CallStack %11), !dbg !796
br label %exit, !dbg !796
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !796
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !796
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !796
store i64 %15, i64* %16, !dbg !796
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !796
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !796
store i64 %18, i64* %19, !dbg !796
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
%21 = ptrtoint %InvalidByteSequenceError* %exception to i64, !dbg !796
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !796
store i64 %21, i64* %22, !dbg !796
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !796
store i32 41, i32* %24, !dbg !796
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !796
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !796
unreachable, !dbg !796
}
; Function Attrs: uwtable
define internal %CallStack @"*InvalidByteSequenceError@Exception#callstack=<CallStack>:CallStack"(%InvalidByteSequenceError* %self, %CallStack %callstack) #0 !dbg !797 {
alloca:
%callstack1 = alloca %CallStack, !dbg !798
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !798
%0 = getelementptr inbounds %InvalidByteSequenceError, %InvalidByteSequenceError* %self, i32 0, i32 3, !dbg !799
%1 = load %CallStack, %CallStack* %callstack1, !dbg !799
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !799
store i32 353, i32* %2, !dbg !799
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !799
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !799
store %CallStack %1, %CallStack* %4, !dbg !799
%5 = load %CallStack, %CallStack* %callstack1, !dbg !799
ret %CallStack %5, !dbg !799
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_slice:Slice(UInt8)"([4 x i8]* %self) #0 !dbg !800 {
alloca:
%0 = alloca %"Slice(UInt8)", !dbg !801
br label %entry
entry: ; preds = %alloca
%1 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !802
%2 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !803
%3 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %1, i32 %2), !dbg !801
store %"Slice(UInt8)" %3, %"Slice(UInt8)"* %0, !dbg !801
%4 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !801
ret %"Slice(UInt8)" %4, !dbg !801
}
; Function Attrs: uwtable
define internal i1 @"*Char#ascii_control?:Bool"(i32 %self) #0 !dbg !804 {
alloca:
%__temp_55 = alloca i1, !dbg !805
%__temp_18 = alloca i32, !dbg !805
%__temp_56 = alloca i1, !dbg !805
br label %entry
entry: ; preds = %alloca
%0 = icmp slt i32 %self, 32, !dbg !806
store i1 %0, i1* %__temp_55, !dbg !806
br i1 %0, label %then, label %else, !dbg !806
then: ; preds = %entry
%1 = load i1, i1* %__temp_55, !dbg !806
br label %exit, !dbg !806
else: ; preds = %entry
store i32 %self, i32* %__temp_18, !dbg !807
%2 = icmp sle i32 127, %self, !dbg !807
store i1 %2, i1* %__temp_56, !dbg !808
br i1 %2, label %then1, label %else2, !dbg !808
exit: ; preds = %exit3, %then
%3 = phi i1 [ %1, %then ], [ %7, %exit3 ], !dbg !808
ret i1 %3, !dbg !808
then1: ; preds = %else
%4 = load i32, i32* %__temp_18, !dbg !808
%5 = icmp sle i32 %4, 159, !dbg !808
br label %exit3, !dbg !808
else2: ; preds = %else
%6 = load i1, i1* %__temp_56, !dbg !808
br label %exit3, !dbg !808
exit3: ; preds = %else2, %then1
%7 = phi i1 [ %5, %then1 ], [ %6, %else2 ], !dbg !808
br label %exit, !dbg !808
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 %base, %"String::Builder"* %io) #0 !dbg !809 {
alloca:
%upcase = alloca i1, !dbg !810
%__temp_52 = alloca i1, !dbg !810
%__temp_51 = alloca i1, !dbg !810
%ptr = alloca i8*, !dbg !811
%count = alloca i32, !dbg !811
%base16 = alloca i32, !dbg !811
%upcase17 = alloca i1, !dbg !811
%chars = alloca [129 x i8], !dbg !811
%ptr_end = alloca i8*, !dbg !811
%ptr18 = alloca i8*, !dbg !811
%num = alloca i32, !dbg !811
%neg = alloca i1, !dbg !811
%digits = alloca i8*, !dbg !811
%count19 = alloca i32, !dbg !811
%0 = alloca %"Slice(UInt8)", !dbg !812
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %upcase, !dbg !813
%1 = icmp sle i32 2, %base, !dbg !814
store i1 %1, i1* %__temp_52, !dbg !814
br i1 %1, label %then3, label %else4, !dbg !814
then: ; preds = %exit5
br label %exit6, !dbg !814
else: ; preds = %exit5
%2 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !815
%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 !815
%4 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %3, i32 %base), !dbg !815
%5 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %4), !dbg !815
%6 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %5), !dbg !816
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %6), !dbg !817
unreachable, !dbg !817
then1: ; preds = %exit
%7 = load i1, i1* %__temp_51, !dbg !814
br label %exit5, !dbg !814
else2: ; preds = %exit
%8 = icmp eq i32 %base, 62, !dbg !814
br label %exit5, !dbg !814
then3: ; preds = %entry
%9 = icmp sle i32 %base, 36, !dbg !814
br label %exit, !dbg !814
else4: ; preds = %entry
%10 = load i1, i1* %__temp_52, !dbg !814
br label %exit, !dbg !814
exit: ; preds = %else4, %then3
%11 = phi i1 [ %9, %then3 ], [ %10, %else4 ], !dbg !814
store i1 %11, i1* %__temp_51, !dbg !814
br i1 %11, label %then1, label %else2, !dbg !814
exit5: ; preds = %else2, %then1
%12 = phi i1 [ %7, %then1 ], [ %8, %else2 ], !dbg !814
br i1 %12, label %then, label %else, !dbg !814
exit6: ; preds = %then
%13 = load i1, i1* %upcase, !dbg !818
br i1 %13, label %then9, label %else10, !dbg !818
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 !819
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %14), !dbg !820
unreachable, !dbg !820
else8: ; preds = %exit11
%15 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 0, i32 %self), !dbg !821
br i1 %15, label %then12, label %else13, !dbg !821
then9: ; preds = %exit6
%16 = icmp eq i32 %base, 62, !dbg !818
br label %exit11, !dbg !818
else10: ; preds = %exit6
%17 = load i1, i1* %upcase, !dbg !818
br label %exit11, !dbg !818
exit11: ; preds = %else10, %then9
%18 = phi i1 [ %16, %then9 ], [ %17, %else10 ], !dbg !818
br i1 %18, label %then7, label %else8, !dbg !818
then12: ; preds = %else8
%19 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 48), !dbg !822
ret void, !dbg !822
else13: ; preds = %else8
%20 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 1, i32 %self), !dbg !823
br i1 %20, label %then14, label %else15, !dbg !823
then14: ; preds = %else13
%21 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 49), !dbg !824
ret void, !dbg !824
else15: ; preds = %else13
%22 = load i1, i1* %upcase, !dbg !824
store i32 %base, i32* %base16, !dbg !811
store i1 %22, i1* %upcase17, !dbg !811
%23 = call i8* @"*StaticArray(UInt8, 129)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([129 x i8]* %chars), !dbg !825
%24 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %23, i32 128), !dbg !825
store i8* %24, i8** %ptr_end, !dbg !826
%25 = load i8*, i8** %ptr_end, !dbg !826
store i8* %25, i8** %ptr18, !dbg !827
store i32 %self, i32* %num, !dbg !828
%26 = load i32, i32* %num, !dbg !828
%27 = icmp slt i32 %26, 0, !dbg !828
store i1 %27, i1* %neg, !dbg !829
%28 = load i32, i32* %base16, !dbg !830
%29 = icmp eq i32 %28, 62, !dbg !830
br i1 %29, label %then20, label %else21, !dbg !830
then20: ; preds = %else15
%30 = call %String** @"~Int::DIGITS_BASE62:read"(), !dbg !830
%31 = load %String*, %String** %30, !dbg !830
br label %exit22, !dbg !830
else21: ; preds = %else15
%32 = load i1, i1* %upcase17, !dbg !831
br i1 %32, label %then23, label %else24, !dbg !831
exit22: ; preds = %exit25, %then20
%33 = phi %String* [ %31, %then20 ], [ %39, %exit25 ], !dbg !831
%34 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %33), !dbg !832
store i8* %34, i8** %digits, !dbg !833
br label %while, !dbg !833
then23: ; preds = %else21
%35 = call %String** @"~Int::DIGITS_UPCASE:read"(), !dbg !831
%36 = load %String*, %String** %35, !dbg !831
br label %exit25, !dbg !831
else24: ; preds = %else21
%37 = call %String** @"~Int::DIGITS_DOWNCASE:read"(), !dbg !831
%38 = load %String*, %String** %37, !dbg !831
br label %exit25, !dbg !831
exit25: ; preds = %else24, %then23
%39 = phi %String* [ %36, %then23 ], [ %38, %else24 ], !dbg !831
br label %exit22, !dbg !831
while: ; preds = %body, %exit22
%40 = load i32, i32* %num, !dbg !834
%41 = icmp ne i32 %40, 0, !dbg !834
br i1 %41, label %body, label %exit26, !dbg !834
body: ; preds = %while
%42 = load i8*, i8** %ptr18, !dbg !834
%43 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %42, i32 1), !dbg !835
store i8* %43, i8** %ptr18, !dbg !835
%44 = load i8*, i8** %ptr18, !dbg !835
%45 = load i8*, i8** %digits, !dbg !835
%46 = load i32, i32* %num, !dbg !835
%47 = load i32, i32* %base16, !dbg !835
%48 = call i32 @"*Int32@Int#remainder<Int32>:Int32"(i32 %46, i32 %47), !dbg !836
%49 = call i32 @"*Int32@Int#abs:Int32"(i32 %48), !dbg !836
%50 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %45, i32 %49), !dbg !837
store i8 %50, i8* %44, !dbg !837
%51 = load i32, i32* %num, !dbg !837
%52 = load i32, i32* %base16, !dbg !837
%53 = call i32 @"*Int32@Int#tdiv<Int32>:Int32"(i32 %51, i32 %52), !dbg !838
store i32 %53, i32* %num, !dbg !839
br label %while, !dbg !839
exit26: ; preds = %while
%54 = load i1, i1* %neg, !dbg !840
br i1 %54, label %then27, label %else28, !dbg !840
then27: ; preds = %exit26
%55 = load i8*, i8** %ptr18, !dbg !840
%56 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %55, i32 1), !dbg !841
store i8* %56, i8** %ptr18, !dbg !841
%57 = load i8*, i8** %ptr18, !dbg !841
store i8 45, i8* %57, !dbg !841
br label %exit29, !dbg !841
else28: ; preds = %exit26
br label %exit29, !dbg !841
exit29: ; preds = %else28, %then27
%58 = load i8*, i8** %ptr_end, !dbg !841
%59 = load i8*, i8** %ptr18, !dbg !841
%60 = ptrtoint i8* %58 to i64, !dbg !841
%61 = ptrtoint i8* %59 to i64, !dbg !841
%62 = sub i64 %60, %61, !dbg !841
%63 = sdiv exact i64 %62, ptrtoint (i8* getelementptr inbounds (i8, i8* null, i32 1) to i64), !dbg !841
%64 = trunc i64 %63 to i32, !dbg !841
store i32 %64, i32* %count19, !dbg !842
%65 = load i8*, i8** %ptr18, !dbg !842
%66 = load i32, i32* %count19, !dbg !842
store i8* %65, i8** %ptr, !dbg !842
store i32 %66, i32* %count, !dbg !842
%67 = load i8*, i8** %ptr, !dbg !842
%68 = load i32, i32* %count, !dbg !842
%69 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %67, i32 %68), !dbg !812
store %"Slice(UInt8)" %69, %"Slice(UInt8)"* %0, !dbg !812
%70 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !812
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %70), !dbg !843
ret void, !dbg !843
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %self, i32 %obj) #0 !dbg !844 {
entry:
call void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %obj, %"String::Builder"* %self), !dbg !845
ret %"String::Builder"* %self, !dbg !845
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* %io) #0 !dbg !846 {
entry:
call void @"*Int32@Int#to_s<Int32, String::Builder>:Nil"(i32 %self, i32 10, %"String::Builder"* %io), !dbg !847
ret void, !dbg !847
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(UInt8, 129)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([129 x i8]* %self) #0 !dbg !848 {
entry:
%0 = getelementptr inbounds [129 x i8], [129 x i8]* %self, i32 0, i32 0, !dbg !849
ret i8* %0, !dbg !849
}
define internal %String** @"~Int::DIGITS_BASE62:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_BASE62:init", !dbg !830
br i1 %0, label %initialized, label %not_initialized, !dbg !830
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_BASE62", !dbg !830
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_BASE62:init", !dbg !830
call void @"~Int::DIGITS_BASE62:init"(), !dbg !830
br label %initialized, !dbg !830
}
define internal void @"~Int::DIGITS_BASE62:init"() {
entry:
ret void, !dbg !830
}
define internal %String** @"~Int::DIGITS_UPCASE:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_UPCASE:init", !dbg !831
br i1 %0, label %initialized, label %not_initialized, !dbg !831
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_UPCASE", !dbg !831
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_UPCASE:init", !dbg !831
call void @"~Int::DIGITS_UPCASE:init"(), !dbg !831
br label %initialized, !dbg !831
}
define internal void @"~Int::DIGITS_UPCASE:init"() {
entry:
ret void, !dbg !831
}
define internal %String** @"~Int::DIGITS_DOWNCASE:read"() {
entry:
%0 = load i1, i1* @"Int::DIGITS_DOWNCASE:init", !dbg !831
br i1 %0, label %initialized, label %not_initialized, !dbg !831
initialized: ; preds = %not_initialized, %entry
ret %String** @"Int::DIGITS_DOWNCASE", !dbg !831
not_initialized: ; preds = %entry
store i1 true, i1* @"Int::DIGITS_DOWNCASE:init", !dbg !831
call void @"~Int::DIGITS_DOWNCASE:init"(), !dbg !831
br label %initialized, !dbg !831
}
define internal void @"~Int::DIGITS_DOWNCASE:init"() {
entry:
ret void, !dbg !831
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %self, i32 %other) #0 !dbg !850 {
entry:
%0 = sext i32 %other to i64, !dbg !851
%1 = call i64 @"*Int64#-:Int64"(i64 %0), !dbg !852
%2 = getelementptr inbounds i8, i8* %self, i64 %1, !dbg !852
ret i8* %2, !dbg !852
}
; Function Attrs: uwtable
define internal i64 @"*Int64#-:Int64"(i64 %self) #0 !dbg !853 {
entry:
%0 = sub i64 0, %self, !dbg !854
ret i64 %0, !dbg !854
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#remainder<Int32>:Int32"(i32 %self, i32 %other) #0 !dbg !855 {
entry:
%0 = icmp eq i32 %other, 0, !dbg !856
br i1 %0, label %then, label %else, !dbg !856
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !857
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !858
unreachable, !dbg !858
else: ; preds = %entry
%2 = srem i32 %self, %other, !dbg !858
ret i32 %2, !dbg !858
}
; Function Attrs: uwtable
define internal %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"() #0 !dbg !859 {
alloca:
%_ = alloca %DivisionByZeroError*, !dbg !860
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%DivisionByZeroError* getelementptr (%DivisionByZeroError, %DivisionByZeroError* null, i32 1) to i64)), !dbg !860
%1 = bitcast i8* %0 to %DivisionByZeroError*, !dbg !860
%2 = bitcast %DivisionByZeroError* %1 to i8*, !dbg !860
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 !860
%3 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %1, i32 0, i32 0, !dbg !860
store i32 43, i32* %3, !dbg !860
store %DivisionByZeroError* %1, %DivisionByZeroError** %_, !dbg !860
%4 = load %DivisionByZeroError*, %DivisionByZeroError** %_, !dbg !860
call void @"*DivisionByZeroError#initialize:Nil"(%DivisionByZeroError* %4), !dbg !860
%5 = load %DivisionByZeroError*, %DivisionByZeroError** %_, !dbg !860
ret %DivisionByZeroError* %5, !dbg !860
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError#initialize:Nil"(%DivisionByZeroError* %self) #0 !dbg !861 {
alloca:
%message = alloca %String*, !dbg !862
br label %entry
entry: ; preds = %alloca
store %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Division by 0'" to %String*), %String** %message, !dbg !863
%0 = load %String*, %String** %message, !dbg !863
call void @"*DivisionByZeroError#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %0), !dbg !862
ret void, !dbg !862
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message) #0 !dbg !864 {
entry:
call void @"*DivisionByZeroError@Exception#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message), !dbg !865
ret void, !dbg !865
}
; Function Attrs: uwtable
define internal void @"*DivisionByZeroError@Exception#initialize<String>:Nil"(%DivisionByZeroError* %self, %String* %message) #0 !dbg !866 {
alloca:
%cause = alloca %Nil, !dbg !867
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 1, !dbg !868
store %String* %message, %String** %0, !dbg !868
%1 = load %Nil, %Nil* %cause, !dbg !868
%2 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 2, !dbg !869
store i32* null, i32** %2, !dbg !869
ret void, !dbg !869
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %exception) #1 !dbg !870 {
alloca:
%__temp_58 = alloca %"(CallStack | Nil)", !dbg !871
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !871
%0 = alloca %CallStack, !dbg !871
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %exception, i32 0, i32 3, !dbg !871
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !871
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_58, !dbg !871
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !871
%4 = load i32, i32* %3, !dbg !871
%5 = icmp eq i32 %4, 0, !dbg !871
%6 = xor i1 %5, true, !dbg !871
%7 = and i1 true, %6, !dbg !871
br i1 %7, label %then, label %else, !dbg !871
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_58, i32 0, i32 1, !dbg !871
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !871
br label %exit, !dbg !871
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !871
store %CallStack %10, %CallStack* %0, !dbg !871
%11 = load %CallStack, %CallStack* %0, !dbg !871
%12 = call %CallStack @"*DivisionByZeroError@Exception#callstack=<CallStack>:CallStack"(%DivisionByZeroError* %exception, %CallStack %11), !dbg !871
br label %exit, !dbg !871
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !871
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !871
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !871
store i64 %15, i64* %16, !dbg !871
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !871
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !871
store i64 %18, i64* %19, !dbg !871
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
%21 = ptrtoint %DivisionByZeroError* %exception to i64, !dbg !871
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !871
store i64 %21, i64* %22, !dbg !871
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !871
store i32 43, i32* %24, !dbg !871
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !871
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !871
unreachable, !dbg !871
}
; Function Attrs: uwtable
define internal %CallStack @"*DivisionByZeroError@Exception#callstack=<CallStack>:CallStack"(%DivisionByZeroError* %self, %CallStack %callstack) #0 !dbg !872 {
alloca:
%callstack1 = alloca %CallStack, !dbg !873
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !873
%0 = getelementptr inbounds %DivisionByZeroError, %DivisionByZeroError* %self, i32 0, i32 3, !dbg !874
%1 = load %CallStack, %CallStack* %callstack1, !dbg !874
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !874
store i32 353, i32* %2, !dbg !874
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !874
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !874
store %CallStack %1, %CallStack* %4, !dbg !874
%5 = load %CallStack, %CallStack* %callstack1, !dbg !874
ret %CallStack %5, !dbg !874
}
; Function Attrs: uwtable
define internal i32 @"*Int32@Int#tdiv<Int32>:Int32"(i32 %self, i32 %other) #0 !dbg !875 {
entry:
call void @"*Int32@Int#check_div_argument<Int32>:Nil"(i32 %self, i32 %other), !dbg !876
%0 = sdiv i32 %self, %other, !dbg !876
ret i32 %0, !dbg !876
}
; Function Attrs: uwtable
define internal void @"*Int32@Int#check_div_argument<Int32>:Nil"(i32 %self, i32 %other) #0 !dbg !877 {
alloca:
%__temp_60 = alloca i1, !dbg !878
%__temp_59 = alloca i1, !dbg !878
br label %entry
entry: ; preds = %alloca
%0 = icmp eq i32 %other, 0, !dbg !879
br i1 %0, label %then, label %else, !dbg !879
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !880
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !881
unreachable, !dbg !881
else: ; preds = %entry
%2 = icmp slt i32 %self, 0, !dbg !882
store i1 %2, i1* %__temp_60, !dbg !882
br i1 %2, label %then5, label %else6, !dbg !882
then1: ; preds = %exit7
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Overflow: Int32::MI...'" to %String*)), !dbg !882
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !882
unreachable, !dbg !882
else2: ; preds = %exit7
ret void, !dbg !882
then3: ; preds = %exit
%4 = icmp eq i32 %other, -1, !dbg !882
br label %exit7, !dbg !882
else4: ; preds = %exit
%5 = load i1, i1* %__temp_59, !dbg !882
br label %exit7, !dbg !882
then5: ; preds = %else
%6 = icmp eq i32 %self, -2147483648, !dbg !882
br label %exit, !dbg !882
else6: ; preds = %else
%7 = load i1, i1* %__temp_60, !dbg !882
br label %exit, !dbg !882
exit: ; preds = %else6, %then5
%8 = phi i1 [ %6, %then5 ], [ %7, %else6 ], !dbg !882
store i1 %8, i1* %__temp_59, !dbg !882
br i1 %8, label %then3, label %else4, !dbg !882
exit7: ; preds = %else4, %then3
%9 = phi i1 [ %4, %then3 ], [ %5, %else4 ], !dbg !882
br i1 %9, label %then1, label %else2, !dbg !882
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@Indexable(T)#[]<Int32>:UInt8"([4 x i8]* %self, i32 %index) #3 !dbg !883 {
alloca:
%index1 = alloca i32, !dbg !884
%index2 = alloca i32, !dbg !885
%__temp_242 = alloca i1, !dbg !885
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !884
%0 = load i32, i32* %index1, !dbg !884
store i32 %0, i32* %index2, !dbg !885
%1 = load i32, i32* %index2, !dbg !886
%2 = icmp slt i32 %1, 0, !dbg !886
br i1 %2, label %then, label %else, !dbg !886
then: ; preds = %entry
%3 = load i32, i32* %index2, !dbg !886
%4 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !887
%5 = add i32 %3, %4, !dbg !887
store i32 %5, i32* %index2, !dbg !886
br label %exit, !dbg !886
else: ; preds = %entry
br label %exit, !dbg !886
exit: ; preds = %else, %then
%6 = load i32, i32* %index2, !dbg !888
%7 = icmp sle i32 0, %6, !dbg !888
store i1 %7, i1* %__temp_242, !dbg !888
br i1 %7, label %then5, label %else6, !dbg !888
then3: ; preds = %exit7
%8 = load i32, i32* %index2, !dbg !889
br label %exit8, !dbg !889
else4: ; preds = %exit7
%9 = load i32, i32* %index1, !dbg !889
%10 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !890
call void @"*raise<IndexError>:NoReturn"(%IndexError* %10), !dbg !891
unreachable, !dbg !891
then5: ; preds = %exit
%11 = load i32, i32* %index2, !dbg !888
%12 = call i32 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#size:Int32"([4 x i8]* %self), !dbg !889
%13 = icmp slt i32 %11, %12, !dbg !889
br label %exit7, !dbg !889
else6: ; preds = %exit
%14 = load i1, i1* %__temp_242, !dbg !889
br label %exit7, !dbg !889
exit7: ; preds = %else6, %then5
%15 = phi i1 [ %13, %then5 ], [ %14, %else6 ], !dbg !889
br i1 %15, label %then3, label %else4, !dbg !889
exit8: ; preds = %then3
%16 = phi i32 [ %8, %then3 ], !dbg !891
store i32 %16, i32* %index1, !dbg !892
%17 = load i32, i32* %index1, !dbg !892
%18 = call i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#unsafe_fetch<Int32>:UInt8"([4 x i8]* %self, i32 %17), !dbg !893
ret i8 %18, !dbg !893
}
; Function Attrs: alwaysinline uwtable
define internal i8 @"*StaticArray(UInt8, 4)@StaticArray(T, N)#unsafe_fetch<Int32>:UInt8"([4 x i8]* %self, i32 %index) #3 !dbg !894 {
entry:
%0 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %self), !dbg !895
%1 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %0, i32 %index), !dbg !895
ret i8 %1, !dbg !895
}
; Function Attrs: uwtable
define internal %String* @"*String#+<Char>:String"(%String* %self, i32 %char) #0 !dbg !896 {
alloca:
%__temp_243 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !897
%bytes = alloca [4 x i8], !dbg !897
%count = alloca i32, !dbg !897
%size = alloca i32, !dbg !897
%0 = alloca %"Tuple(StaticArray(UInt8, 4), Int32)", !dbg !898
%buffer = alloca i8*, !dbg !899
%capacity = alloca i32, !dbg !899
%str = alloca i8*, !dbg !899
%buffer1 = alloca i8*, !dbg !899
%__temp_244 = alloca %"Tuple(Int32, Int32)", !dbg !899
%bytesize = alloca i32, !dbg !899
%size2 = alloca i32, !dbg !899
%__temp_246 = alloca i1, !dbg !899
%str_header = alloca %"Tuple(Int32, Int32, Int32)"*, !dbg !899
%1 = alloca %"Tuple(Int32, Int32)", !dbg !900
%2 = alloca %"Tuple(Int32, Int32)", !dbg !900
%3 = alloca %"Tuple(Int32, Int32, Int32)", !dbg !901
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 !898
store %"Tuple(StaticArray(UInt8, 4), Int32)" %4, %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !898
%5 = load %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %0, !dbg !898
store %"Tuple(StaticArray(UInt8, 4), Int32)" %5, %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_243, !dbg !898
%6 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_243, i32 0, i32 0, !dbg !898
%7 = load [4 x i8], [4 x i8]* %6, !dbg !902
store [4 x i8] %7, [4 x i8]* %bytes, !dbg !902
%8 = getelementptr inbounds %"Tuple(StaticArray(UInt8, 4), Int32)", %"Tuple(StaticArray(UInt8, 4), Int32)"* %__temp_243, i32 0, i32 1, !dbg !902
%9 = load i32, i32* %8, !dbg !902
store i32 %9, i32* %count, !dbg !903
%10 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !903
%11 = load i32, i32* %10, !dbg !903
%12 = load i32, i32* %count, !dbg !903
%13 = add i32 %11, %12, !dbg !903
store i32 %13, i32* %size, !dbg !904
%14 = load i32, i32* %size, !dbg !904
store i32 %14, i32* %capacity, !dbg !899
%15 = load i32, i32* %capacity, !dbg !899
call void @"*String::check_capacity_in_bounds<Int32>:Nil"(i32 %15), !dbg !905
%16 = load i32, i32* %capacity, !dbg !905
%17 = add i32 %16, 12, !dbg !905
%18 = add i32 %17, 1, !dbg !905
%19 = call i8* @"*GC::malloc_atomic<UInt32>:Pointer(Void)"(i32 %18), !dbg !906
store i8* %19, i8** %str, !dbg !907
%20 = load i8*, i8** %str, !dbg !907
%21 = bitcast i8* %20 to %String*, !dbg !907
%22 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %21), !dbg !908
store i8* %22, i8** %buffer1, !dbg !909
%23 = load i8*, i8** %buffer1, !dbg !909
store i8* %23, i8** %buffer, !dbg !909
%24 = load i8*, i8** %buffer, !dbg !909
%25 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !910
%26 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !910
%27 = load i32, i32* %26, !dbg !910
%28 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %24, i8* %25, i32 %27), !dbg !911
%29 = load i8*, i8** %buffer, !dbg !911
%30 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !911
%31 = load i32, i32* %30, !dbg !911
%32 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %29, i32 %31), !dbg !912
%33 = call i8* @"*StaticArray(UInt8, 4)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([4 x i8]* %bytes), !dbg !913
%34 = load i32, i32* %count, !dbg !913
%35 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %32, i8* %33, i32 %34), !dbg !914
%36 = call i1 @"*String#size_known?:Bool"(%String* %self), !dbg !900
br i1 %36, label %then, label %else, !dbg !900
then: ; preds = %entry
%37 = load i32, i32* %size, !dbg !900
%38 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %1, i32 0, i32 0, !dbg !900
store i32 %37, i32* %38, !dbg !900
%39 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !900
%40 = load i32, i32* %39, !dbg !900
%41 = add i32 %40, 1, !dbg !900
%42 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %1, i32 0, i32 1, !dbg !900
store i32 %41, i32* %42, !dbg !900
br label %exit, !dbg !900
else: ; preds = %entry
%43 = load i32, i32* %size, !dbg !900
%44 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %2, i32 0, i32 0, !dbg !900
store i32 %43, i32* %44, !dbg !900
%45 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %2, i32 0, i32 1, !dbg !900
store i32 0, i32* %45, !dbg !900
br label %exit, !dbg !900
exit: ; preds = %else, %then
%46 = phi %"Tuple(Int32, Int32)"* [ %1, %then ], [ %2, %else ], !dbg !900
%47 = load %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %46, !dbg !915
store %"Tuple(Int32, Int32)" %47, %"Tuple(Int32, Int32)"* %__temp_244, !dbg !915
%48 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %__temp_244, i32 0, i32 0, !dbg !915
%49 = load i32, i32* %48, !dbg !915
store i32 %49, i32* %bytesize, !dbg !916
%50 = getelementptr inbounds %"Tuple(Int32, Int32)", %"Tuple(Int32, Int32)"* %__temp_244, i32 0, i32 1, !dbg !916
%51 = load i32, i32* %50, !dbg !916
store i32 %51, i32* %size2, !dbg !917
%52 = load i32, i32* %bytesize, !dbg !918
%53 = icmp sle i32 0, %52, !dbg !918
store i1 %53, i1* %__temp_246, !dbg !918
br i1 %53, label %then5, label %else6, !dbg !918
then3: ; preds = %exit7
br label %exit8, !dbg !918
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 !919
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %54), !dbg !920
unreachable, !dbg !920
then5: ; preds = %exit
%55 = load i32, i32* %bytesize, !dbg !918
%56 = load i32, i32* %capacity, !dbg !918
%57 = icmp sle i32 %55, %56, !dbg !918
br label %exit7, !dbg !918
else6: ; preds = %exit
%58 = load i1, i1* %__temp_246, !dbg !918
br label %exit7, !dbg !918
exit7: ; preds = %else6, %then5
%59 = phi i1 [ %57, %then5 ], [ %58, %else6 ], !dbg !918
br i1 %59, label %then3, label %else4, !dbg !918
exit8: ; preds = %then3
%60 = load i8*, i8** %buffer1, !dbg !920
%61 = load i32, i32* %bytesize, !dbg !920
%62 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]=<Int32, UInt8>:UInt8"(i8* %60, i32 %61, i8 0), !dbg !921
%63 = load i32, i32* %bytesize, !dbg !922
%64 = load i32, i32* %capacity, !dbg !922
%65 = icmp slt i32 %63, %64, !dbg !922
br i1 %65, label %then9, label %else10, !dbg !922
then9: ; preds = %exit8
%66 = load i8*, i8** %str, !dbg !922
%67 = load i32, i32* %bytesize, !dbg !922
%68 = add i32 %67, 12, !dbg !922
%69 = add i32 %68, 1, !dbg !922
%70 = call i8* @"*Pointer(UInt8)@Pointer(T)#realloc<UInt32>:Pointer(UInt8)"(i8* %66, i32 %69), !dbg !923
store i8* %70, i8** %str, !dbg !924
br label %exit11, !dbg !924
else10: ; preds = %exit8
br label %exit11, !dbg !924
exit11: ; preds = %else10, %then9
%71 = load i8*, i8** %str, !dbg !924
%72 = bitcast i8* %71 to %"Tuple(Int32, Int32, Int32)"*, !dbg !924
store %"Tuple(Int32, Int32, Int32)"* %72, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !901
%73 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %str_header, !dbg !901
%74 = load i32, i32* @"String::TYPE_ID", !dbg !901
%75 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 0, !dbg !901
store i32 %74, i32* %75, !dbg !901
%76 = load i32, i32* %bytesize, !dbg !901
%77 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 1, !dbg !901
store i32 %76, i32* %77, !dbg !901
%78 = load i32, i32* %size2, !dbg !901
%79 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, i32 0, i32 2, !dbg !901
store i32 %78, i32* %79, !dbg !901
%80 = load %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %3, !dbg !901
store %"Tuple(Int32, Int32, Int32)" %80, %"Tuple(Int32, Int32, Int32)"* %73, !dbg !901
%81 = load i8*, i8** %str, !dbg !901
%82 = bitcast i8* %81 to %String*, !dbg !901
ret %String* %82, !dbg !901
}
; 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 !925 {
entry:
%0 = call i8* @"*Pointer(UInt8)@Pointer(T)#copy_to<Pointer(UInt8), Int32>:Pointer(UInt8)"(i8* %source, i8* %self, i32 %count), !dbg !926
ret i8* %0, !dbg !926
}
; Function Attrs: uwtable
define internal i1 @"*String#size_known?:Bool"(%String* %self) #0 !dbg !927 {
alloca:
%__temp_245 = alloca i1, !dbg !928
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !929
%1 = load i32, i32* %0, !dbg !929
%2 = icmp eq i32 %1, 0, !dbg !929
store i1 %2, i1* %__temp_245, !dbg !929
br i1 %2, label %then, label %else, !dbg !929
then: ; preds = %entry
%3 = load i1, i1* %__temp_245, !dbg !929
br label %exit, !dbg !929
else: ; preds = %entry
%4 = getelementptr inbounds %String, %String* %self, i32 0, i32 2, !dbg !929
%5 = load i32, i32* %4, !dbg !929
%6 = icmp sgt i32 %5, 0, !dbg !929
br label %exit, !dbg !929
exit: ; preds = %else, %then
%7 = phi i1 [ %3, %then ], [ %6, %else ], !dbg !929
ret i1 %7, !dbg !929
}
define internal void @"~CallStack::skip:init"() {
entry:
%0 = call %"Array(String)"* @"*Array(String)@Array(T)::new:Array(String)"(i32 513)
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 !930 {
alloca:
%_ = alloca %"Array(String)"*, !dbg !931
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 !931
%1 = bitcast i8* %0 to %"Array(String)"*, !dbg !931
%2 = bitcast %"Array(String)"* %1 to i8*, !dbg !931
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 !931
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %1, i32 0, i32 0, !dbg !931
store i32 8, i32* %3, !dbg !931
store %"Array(String)"* %1, %"Array(String)"** %_, !dbg !931
%4 = load %"Array(String)"*, %"Array(String)"** %_, !dbg !931
%5 = call %String** @"*Array(String)@Array(T)#initialize:Pointer(String)"(%"Array(String)"* %4), !dbg !931
%6 = load %"Array(String)"*, %"Array(String)"** %_, !dbg !931
ret %"Array(String)"* %6, !dbg !931
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#initialize:Pointer(String)"(%"Array(String)"* %self) #0 !dbg !932 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !933
store i32 0, i32* %0, !dbg !933
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !934
store i32 0, i32* %1, !dbg !934
%2 = call %String** @"*Pointer(String)@Pointer(T)::null:Pointer(String)"(i32 784), !dbg !935
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !936
store %String** %2, %String*** %3, !dbg !936
ret %String** %2, !dbg !936
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)::null:Pointer(String)"(i32 %self) #0 !dbg !937 {
entry:
ret %String** null, !dbg !938
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack::skip<String>:Array(String)"(%String* %filename) #0 !dbg !939 {
entry:
%0 = call %"Array(String)"** @"~CallStack::skip:read"(), !dbg !940
%1 = load %"Array(String)"*, %"Array(String)"** %0, !dbg !940
%2 = call %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %1, %String* %filename), !dbg !941
ret %"Array(String)"* %2, !dbg !941
}
define internal %"Array(String)"** @"~CallStack::skip:read"() {
entry:
%0 = load i1, i1* @"CallStack::skip:init", !dbg !940
br i1 %0, label %initialized, label %not_initialized, !dbg !940
initialized: ; preds = %not_initialized, %entry
ret %"Array(String)"** @"CallStack::skip", !dbg !940
not_initialized: ; preds = %entry
store i1 true, i1* @"CallStack::skip:init", !dbg !940
call void @"~CallStack::skip:init"(), !dbg !940
br label %initialized, !dbg !940
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %self, %String* %value) #0 !dbg !942 {
entry:
%0 = call %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %self, %String* %value), !dbg !943
ret %"Array(String)"* %0, !dbg !943
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %self, %String* %value) #0 !dbg !944 {
entry:
%0 = call %String** @"*Array(String)@Array(T)#check_needs_resize:(Pointer(String) | Nil)"(%"Array(String)"* %self), !dbg !945
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !945
%2 = load %String**, %String*** %1, !dbg !945
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !945
%4 = load i32, i32* %3, !dbg !945
%5 = call %String* @"*Pointer(String)@Pointer(T)#[]=<Int32, String>:String"(%String** %2, i32 %4, %String* %value), !dbg !946
%6 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !946
%7 = load i32, i32* %6, !dbg !946
%8 = add i32 %7, 1, !dbg !946
%9 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !947
store i32 %8, i32* %9, !dbg !947
ret %"Array(String)"* %self, !dbg !947
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#check_needs_resize:(Pointer(String) | Nil)"(%"Array(String)"* %self) #0 !dbg !948 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 1, !dbg !949
%1 = load i32, i32* %0, !dbg !949
%2 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !949
%3 = load i32, i32* %2, !dbg !949
%4 = icmp eq i32 %1, %3, !dbg !949
br i1 %4, label %then, label %else, !dbg !949
then: ; preds = %entry
%5 = call %String** @"*Array(String)@Array(T)#double_capacity:Pointer(String)"(%"Array(String)"* %self), !dbg !949
br label %exit, !dbg !949
else: ; preds = %entry
br label %exit, !dbg !949
exit: ; preds = %else, %then
%6 = phi %String** [ %5, %then ], [ null, %else ], !dbg !949
ret %String** %6, !dbg !949
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#double_capacity:Pointer(String)"(%"Array(String)"* %self) #0 !dbg !950 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !951
%1 = load i32, i32* %0, !dbg !951
%2 = icmp eq i32 %1, 0, !dbg !951
br i1 %2, label %then, label %else, !dbg !951
then: ; preds = %entry
br label %exit, !dbg !951
else: ; preds = %entry
%3 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !951
%4 = load i32, i32* %3, !dbg !951
%5 = mul i32 %4, 2, !dbg !951
br label %exit, !dbg !951
exit: ; preds = %else, %then
%6 = phi i32 [ 3, %then ], [ %5, %else ], !dbg !951
%7 = call %String** @"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String)"(%"Array(String)"* %self, i32 %6), !dbg !952
ret %String** %7, !dbg !952
}
; Function Attrs: uwtable
define internal %String** @"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String)"(%"Array(String)"* %self, i32 %capacity) #0 !dbg !953 {
entry:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !954
store i32 %capacity, i32* %0, !dbg !954
%1 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !955
%2 = load %String**, %String*** %1, !dbg !955
%3 = icmp ne %String** %2, null, !dbg !955
br i1 %3, label %then, label %else, !dbg !955
then: ; preds = %entry
%4 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !955
%5 = load %String**, %String*** %4, !dbg !955
%6 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !955
%7 = load i32, i32* %6, !dbg !955
%8 = call %String** @"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String)"(%String** %5, i32 %7), !dbg !956
%9 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !957
store %String** %8, %String*** %9, !dbg !957
br label %exit, !dbg !957
else: ; preds = %entry
%10 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 2, !dbg !957
%11 = load i32, i32* %10, !dbg !957
%12 = call %String** @"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String)"(i32 784, i32 %11), !dbg !958
%13 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i32 0, i32 3, !dbg !959
store %String** %12, %String*** %13, !dbg !959
br label %exit, !dbg !959
exit: ; preds = %else, %then
%14 = phi %String** [ %8, %then ], [ %12, %else ], !dbg !959
ret %String** %14, !dbg !959
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String)"(%String** %self, i32 %size) #0 !dbg !960 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !961
br i1 %0, label %then, label %else, !dbg !961
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*)), !dbg !962
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !963
unreachable, !dbg !963
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !963
%3 = bitcast %String** %self to i8*, !dbg !963
%4 = mul i64 %2, ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), !dbg !963
%5 = call i8* @__crystal_realloc64(i8* %3, i64 %4), !dbg !963
%6 = bitcast i8* %5 to %String**, !dbg !963
ret %String** %6, !dbg !963
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String)"(i32 %self, i32 %size) #0 !dbg !964 {
entry:
%0 = icmp slt i32 %size, 0, !dbg !965
br i1 %0, label %then, label %else, !dbg !965
then: ; preds = %entry
%1 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*)), !dbg !966
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1), !dbg !967
unreachable, !dbg !967
else: ; preds = %entry
%2 = sext i32 %size to i64, !dbg !967
%3 = mul i64 ptrtoint (i1** getelementptr (i1*, i1** null, i32 1) to i64), %2, !dbg !968
%4 = call i8* @__crystal_malloc64(i64 %3), !dbg !968
%5 = trunc i64 %3 to i32, !dbg !968
call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 %5, i32 4, i1 false), !dbg !968
%6 = bitcast i8* %4 to %String**, !dbg !968
ret %String** %6, !dbg !967
}
; Function Attrs: uwtable
define internal %String* @"*Pointer(String)@Pointer(T)#[]=<Int32, String>:String"(%String** %self, i32 %offset, %String* %value) #0 !dbg !969 {
entry:
%0 = call %String** @"*Pointer(String)@Pointer(T)#+<Int32>:Pointer(String)"(%String** %self, i32 %offset), !dbg !970
store %String* %value, %String** %0, !dbg !970
ret %String* %value, !dbg !970
}
; Function Attrs: uwtable
define internal %String** @"*Pointer(String)@Pointer(T)#+<Int32>:Pointer(String)"(%String** %self, i32 %other) #0 !dbg !971 {
entry:
%0 = sext i32 %other to i64, !dbg !972
%1 = getelementptr inbounds %String*, %String** %self, i64 %0, !dbg !972
ret %String** %1, !dbg !972
}
define internal void @"~LibC::SIG_DFL:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 724)
%1 = call %"->" @"*Proc(Int32, Nil)@Proc(T, R)::new<Pointer(Void), Pointer(Void)>:Proc(Int32, Nil)"(i32 1106, 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 !973 {
entry:
ret i8* null, !dbg !974
}
; 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 !975 {
alloca:
%func = alloca %"Tuple(Pointer(Void), Pointer(Void))", !dbg !977
%ptr = alloca %"->"*, !dbg !977
%0 = alloca %"Tuple(Pointer(Void), Pointer(Void))", !dbg !977
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 !977
store i8* %pointer, i8** %1, !dbg !977
%2 = getelementptr inbounds %"Tuple(Pointer(Void), Pointer(Void))", %"Tuple(Pointer(Void), Pointer(Void))"* %0, i32 0, i32 1, !dbg !977
store i8* %closure_data, i8** %2, !dbg !977
%3 = load %"Tuple(Pointer(Void), Pointer(Void))", %"Tuple(Pointer(Void), Pointer(Void))"* %0, !dbg !978
store %"Tuple(Pointer(Void), Pointer(Void))" %3, %"Tuple(Pointer(Void), Pointer(Void))"* %func, !dbg !978
%4 = bitcast %"Tuple(Pointer(Void), Pointer(Void))"* %func to %"->"*, !dbg !978
store %"->"* %4, %"->"** %ptr, !dbg !979
%5 = load %"->"*, %"->"** %ptr, !dbg !979
%6 = load %"->", %"->"* %5, !dbg !979
ret %"->" %6, !dbg !979
}
define internal void @"~LibC::SIG_IGN:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 724)
%1 = call %"->" @"*Proc(Int32, Nil)@Proc(T, R)::new<Pointer(Void), Pointer(Void)>:Proc(Int32, Nil)"(i32 1106, 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 973, 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 !980 {
alloca:
%array = alloca [256 x i8], !dbg !981
%i = alloca i32, !dbg !982
%i1 = alloca i32, !dbg !982
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %i1, !dbg !983
br label %while, !dbg !983
while: ; preds = %body, %entry
%0 = load i32, i32* %i1, !dbg !984
%1 = icmp slt i32 %0, 256, !dbg !984
br i1 %1, label %body, label %exit, !dbg !984
body: ; preds = %while
%2 = load i32, i32* %i1, !dbg !984
store i32 %2, i32* %i, !dbg !984
%3 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %array), !dbg !985
%4 = load i32, i32* %i, !dbg !985
%5 = load i32, i32* %i, !dbg !985
%6 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %3, i32 %4, i8 %value), !dbg !985
%7 = load i32, i32* %i1, !dbg !985
%8 = add i32 %7, 1, !dbg !985
store i32 %8, i32* %i1, !dbg !986
br label %while, !dbg !986
exit: ; preds = %while
%9 = load [256 x i8], [256 x i8]* %array, !dbg !986
ret [256 x i8] %9, !dbg !986
}
; Function Attrs: uwtable
define internal i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %self) #0 !dbg !987 {
entry:
%0 = getelementptr inbounds [256 x i8], [256 x i8]* %self, i32 0, i32 0, !dbg !988
ret i8* %0, !dbg !988
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %self, i32 %offset, i8 %value) #0 !dbg !989 {
entry:
%0 = call i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %offset), !dbg !990
store i8 %value, i8* %0, !dbg !990
ret i8 %value, !dbg !990
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %other) #0 !dbg !991 {
entry:
%0 = sext i32 %other to i64, !dbg !992
%1 = getelementptr inbounds i8, i8* %self, i64 %0, !dbg !992
ret i8* %1, !dbg !992
}
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 !993 {
alloca:
%array = alloca [256 x i8], !dbg !994
%i = alloca i32, !dbg !995
%i1 = alloca i32, !dbg !995
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %i1, !dbg !996
br label %while, !dbg !996
while: ; preds = %body, %entry
%0 = load i32, i32* %i1, !dbg !997
%1 = icmp slt i32 %0, 256, !dbg !997
br i1 %1, label %body, label %exit, !dbg !997
body: ; preds = %while
%2 = load i32, i32* %i1, !dbg !997
store i32 %2, i32* %i, !dbg !997
%3 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %array), !dbg !998
%4 = load i32, i32* %i, !dbg !998
%5 = call i8* @"*StaticArray(Int8, 256)@StaticArray(T, N)#to_unsafe:Pointer(Int8)"([256 x i8]* %self), !dbg !999
%6 = load i32, i32* %i, !dbg !999
%7 = call i8 @"*Pointer(Int8)@Pointer(T)#[]<Int32>:Int8"(i8* %5, i32 %6), !dbg !999
%8 = call i8 @"*Pointer(Int8)@Pointer(T)#[]=<Int32, Int8>:Int8"(i8* %3, i32 %4, i8 %7), !dbg !998
%9 = load i32, i32* %i1, !dbg !998
%10 = add i32 %9, 1, !dbg !998
store i32 %10, i32* %i1, !dbg !1000
br label %while, !dbg !1000
exit: ; preds = %while
%11 = load [256 x i8], [256 x i8]* %array, !dbg !1000
ret [256 x i8] %11, !dbg !1000
}
; Function Attrs: uwtable
define internal i8 @"*Pointer(Int8)@Pointer(T)#[]<Int32>:Int8"(i8* %self, i32 %offset) #0 !dbg !1001 {
entry:
%0 = call i8* @"*Pointer(Int8)@Pointer(T)#+<Int32>:Pointer(Int8)"(i8* %self, i32 %offset), !dbg !1002
%1 = load i8, i8* %0, !dbg !1002
ret i8 %1, !dbg !1002
}
define internal void @"~LibC::MAP_FAILED:init"() {
entry:
%0 = call i8* @"*Pointer(Void)@Pointer(T)::new<Int32>:Pointer(Void)"(i32 724, 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 !1003 {
entry:
%0 = sext i32 %address to i64, !dbg !1004
%1 = inttoptr i64 %0 to i8*, !dbg !1004
ret i8* %1, !dbg !1004
}
; Function Attrs: noinline uwtable
define i8* @_fiber_get_stack_top() #4 !dbg !1005 {
alloca:
%dummy = alloca i32, !dbg !1007
br label %entry
entry: ; preds = %alloca
%0 = bitcast i32* %dummy to i8*, !dbg !1007
ret i8* %0, !dbg !1007
}
define internal void @"~Fiber::fibers:init"() {
alloca:
%0 = alloca %"Thread::LinkedList(Fiber)"
br label %entry
entry: ; preds = %alloca
%1 = call %"Thread::LinkedList(Fiber)" @"*Thread::LinkedList(Fiber)@Thread::LinkedList(T)::new:Thread::LinkedList(Fiber)"(i32 1047)
store %"Thread::LinkedList(Fiber)" %1, %"Thread::LinkedList(Fiber)"* %0
%2 = load %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %0
store %"Thread::LinkedList(Fiber)" %2, %"Thread::LinkedList(Fiber)"* @"Fiber::fibers"
ret void
}
; Function Attrs: uwtable
define internal %"Thread::LinkedList(Fiber)" @"*Thread::LinkedList(Fiber)@Thread::LinkedList(T)::new:Thread::LinkedList(Fiber)"(i32 %self) #0 !dbg !1008 {
alloca:
%x = alloca %"Thread::LinkedList(Fiber)", !dbg !1010
%0 = alloca %"Thread::LinkedList(Fiber)", !dbg !1010
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Thread::LinkedList(Fiber)"* %0 to i8*, !dbg !1010
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 3) to i32), i32 4, i1 false), !dbg !1010
%2 = call %"Thread::Mutex"* @"*Thread::Mutex::new:Thread::Mutex"(), !dbg !1011
%3 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %0, i32 0, i32 2, !dbg !1011
store %"Thread::Mutex"* %2, %"Thread::Mutex"** %3, !dbg !1011
%4 = load %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %0, !dbg !1010
store %"Thread::LinkedList(Fiber)" %4, %"Thread::LinkedList(Fiber)"* %x, !dbg !1010
%5 = load %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %x, !dbg !1010
ret %"Thread::LinkedList(Fiber)" %5, !dbg !1010
}
; Function Attrs: uwtable
define internal %"Thread::Mutex"* @"*Thread::Mutex::new:Thread::Mutex"() #0 !dbg !1012 {
alloca:
%_ = alloca %"Thread::Mutex"*, !dbg !1014
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Thread::Mutex"* getelementptr (%"Thread::Mutex", %"Thread::Mutex"* null, i32 1) to i64)), !dbg !1014
%1 = bitcast i8* %0 to %"Thread::Mutex"*, !dbg !1014
%2 = bitcast %"Thread::Mutex"* %1 to i8*, !dbg !1014
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Thread::Mutex"* getelementptr (%"Thread::Mutex", %"Thread::Mutex"* null, i32 1) to i32), i32 4, i1 false), !dbg !1014
%3 = getelementptr inbounds %"Thread::Mutex", %"Thread::Mutex"* %1, i32 0, i32 0, !dbg !1014
store i32 101, i32* %3, !dbg !1014
store %"Thread::Mutex"* %1, %"Thread::Mutex"** %_, !dbg !1014
%4 = load %"Thread::Mutex"*, %"Thread::Mutex"** %_, !dbg !1014
%5 = call i32 @"*Thread::Mutex#initialize:Int32"(%"Thread::Mutex"* %4), !dbg !1014
%6 = load %"Thread::Mutex"*, %"Thread::Mutex"** %_, !dbg !1014
call void @"*GC::add_finalizer<Thread::Mutex>:Nil"(%"Thread::Mutex"* %6), !dbg !1014
%7 = load %"Thread::Mutex"*, %"Thread::Mutex"** %_, !dbg !1014
ret %"Thread::Mutex"* %7, !dbg !1014
}
; Function Attrs: uwtable
define internal i32 @"*Thread::Mutex#initialize:Int32"(%"Thread::Mutex"* %self) #0 !dbg !1015 {
alloca:
%attributes = alloca %"union.LibC::PthreadMutexattrT", !dbg !1016
%ret = alloca i32, !dbg !1016
br label %entry
entry: ; preds = %alloca
%0 = call i32 @pthread_mutexattr_init(%"union.LibC::PthreadMutexattrT"* %attributes), !dbg !1017
%1 = call i32 @pthread_mutexattr_settype(%"union.LibC::PthreadMutexattrT"* %attributes, i32 2), !dbg !1018
%2 = getelementptr inbounds %"Thread::Mutex", %"Thread::Mutex"* %self, i32 0, i32 1, !dbg !1018
%3 = call i32 @pthread_mutex_init(%"union.LibC::PthreadMutexT"* %2, %"union.LibC::PthreadMutexattrT"* %attributes), !dbg !1019
store i32 %3, i32* %ret, !dbg !1020
%4 = load i32, i32* %ret, !dbg !1021
%5 = icmp eq i32 %4, 0, !dbg !1021
br i1 %5, label %then, label %else, !dbg !1021
then: ; preds = %entry
br label %exit, !dbg !1021
else: ; preds = %entry
%6 = load i32, i32* %ret, !dbg !1021
%7 = call %Errno* @"*Errno::new<String, Int32>:Errno"(%String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'pthread_mutex_init'" to %String*), i32 %6), !dbg !1022
call void @"*raise<Errno>:NoReturn"(%Errno* %7), !dbg !1021
unreachable, !dbg !1021
exit: ; preds = %then
%8 = call i32 @pthread_mutexattr_destroy(%"union.LibC::PthreadMutexattrT"* %attributes), !dbg !1023
ret i32 %8, !dbg !1023
}
declare i32 @pthread_mutexattr_init(%"union.LibC::PthreadMutexattrT"*)
declare i32 @pthread_mutexattr_settype(%"union.LibC::PthreadMutexattrT"*, i32)
declare i32 @pthread_mutex_init(%"union.LibC::PthreadMutexT"*, %"union.LibC::PthreadMutexattrT"*)
; Function Attrs: uwtable
define internal %Errno* @"*Errno::new<String, Int32>:Errno"(%String* %message, i32 %errno) #0 !dbg !1024 {
alloca:
%_ = alloca %Errno*, !dbg !1025
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%Errno* getelementptr (%Errno, %Errno* null, i32 1) to i64)), !dbg !1025
%1 = bitcast i8* %0 to %Errno*, !dbg !1025
%2 = bitcast %Errno* %1 to i8*, !dbg !1025
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 !1025
%3 = getelementptr inbounds %Errno, %Errno* %1, i32 0, i32 0, !dbg !1025
store i32 54, i32* %3, !dbg !1025
store %Errno* %1, %Errno** %_, !dbg !1025
%4 = load %Errno*, %Errno** %_, !dbg !1025
call void @"*Errno#initialize<String, Int32>:Nil"(%Errno* %4, %String* %message, i32 %errno), !dbg !1025
%5 = load %Errno*, %Errno** %_, !dbg !1025
ret %Errno* %5, !dbg !1025
}
declare i32 @pthread_mutexattr_destroy(%"union.LibC::PthreadMutexattrT"*)
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer<Thread::Mutex>:Nil"(%"Thread::Mutex"* %object) #0 !dbg !1026 {
entry:
call void @"*GC::add_finalizer_impl<Thread::Mutex>:Nil"(%"Thread::Mutex"* %object), !dbg !1027
ret void, !dbg !1027
}
; Function Attrs: uwtable
define internal void @"*GC::add_finalizer_impl<Thread::Mutex>:Nil"(%"Thread::Mutex"* %object) #0 !dbg !1028 {
alloca:
%0 = alloca %"->", !dbg !1029
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Thread::Mutex"* %object to i8*, !dbg !1029
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1029
store i8* bitcast (void (i8*, i8*)* @"~proc2Proc(Pointer(Void), Pointer(Void), Nil)@/usr/share/crystal/src/gc/boehm.cr:130" to i8*), i8** %2, !dbg !1029
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1029
store i8* null, i8** %3, !dbg !1029
%4 = load %"->", %"->"* %0, !dbg !1029
%5 = call i8* @"~check_proc_is_not_closure"(%"->" %4), !dbg !1029
%6 = bitcast i8* %5 to %Nil (i8*, i8*)*, !dbg !1029
call void @GC_register_finalizer_ignore_self(i8* %1, %Nil (i8*, i8*)* %6, i8* null, %"->"* null, i8** null), !dbg !1030
ret void, !dbg !1030
}
; Function Attrs: uwtable
define internal void @"~proc2Proc(Pointer(Void), Pointer(Void), Nil)@/usr/share/crystal/src/gc/boehm.cr:130"(i8* %obj, i8* %data) #0 !dbg !1031 {
entry:
%0 = bitcast i8* %obj to %"Thread::Mutex"*, !dbg !1032
call void @"*Thread::Mutex#finalize:Nil"(%"Thread::Mutex"* %0), !dbg !1033
ret void, !dbg !1033
}
; Function Attrs: uwtable
define internal void @"*Thread::Mutex#finalize:Nil"(%"Thread::Mutex"* %self) #0 !dbg !1034 {
alloca:
%ret = alloca i32, !dbg !1035
br label %entry
entry: ; preds = %alloca
%0 = call %"union.LibC::PthreadMutexT"* @"*Thread::Mutex#to_unsafe:Pointer(LibC::PthreadMutexT)"(%"Thread::Mutex"* %self), !dbg !1036
%1 = call i32 @pthread_mutex_destroy(%"union.LibC::PthreadMutexT"* %0), !dbg !1037
store i32 %1, i32* %ret, !dbg !1038
%2 = load i32, i32* %ret, !dbg !1039
%3 = icmp eq i32 %2, 0, !dbg !1039
br i1 %3, label %then, label %else, !dbg !1039
then: ; preds = %entry
br label %exit, !dbg !1039
else: ; preds = %entry
%4 = load i32, i32* %ret, !dbg !1039
%5 = call %Errno* @"*Errno::new<String, Int32>:Errno"(%String* bitcast ({ i32, i32, i32, [22 x i8] }* @"'pthread_mutex_destr...'" to %String*), i32 %4), !dbg !1040
call void @"*raise<Errno>:NoReturn"(%Errno* %5), !dbg !1039
unreachable, !dbg !1039
exit: ; preds = %then
ret void, !dbg !1039
}
; Function Attrs: uwtable
define internal %"union.LibC::PthreadMutexT"* @"*Thread::Mutex#to_unsafe:Pointer(LibC::PthreadMutexT)"(%"Thread::Mutex"* %self) #0 !dbg !1041 {
entry:
%0 = getelementptr inbounds %"Thread::Mutex", %"Thread::Mutex"* %self, i32 0, i32 1, !dbg !1042
ret %"union.LibC::PthreadMutexT"* %0, !dbg !1042
}
declare i32 @pthread_mutex_destroy(%"union.LibC::PthreadMutexT"*)
define internal void @"~Fiber::stack_pool:init"() {
entry:
%0 = call %"Fiber::StackPool"* @"*Fiber::StackPool::new:Fiber::StackPool"()
store %"Fiber::StackPool"* %0, %"Fiber::StackPool"** @"Fiber::stack_pool"
ret void
}
; Function Attrs: uwtable
define internal %"Fiber::StackPool"* @"*Fiber::StackPool::new:Fiber::StackPool"() #0 !dbg !1043 {
alloca:
%_ = alloca %"Fiber::StackPool"*, !dbg !1044
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Fiber::StackPool"* getelementptr (%"Fiber::StackPool", %"Fiber::StackPool"* null, i32 1) to i64)), !dbg !1044
%1 = bitcast i8* %0 to %"Fiber::StackPool"*, !dbg !1044
%2 = bitcast %"Fiber::StackPool"* %1 to i8*, !dbg !1044
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Fiber::StackPool"* getelementptr (%"Fiber::StackPool", %"Fiber::StackPool"* null, i32 1) to i32), i32 4, i1 false), !dbg !1044
%3 = getelementptr inbounds %"Fiber::StackPool", %"Fiber::StackPool"* %1, i32 0, i32 0, !dbg !1044
store i32 104, i32* %3, !dbg !1044
store %"Fiber::StackPool"* %1, %"Fiber::StackPool"** %_, !dbg !1044
%4 = load %"Fiber::StackPool"*, %"Fiber::StackPool"** %_, !dbg !1044
%5 = call %"Deque(Pointer(Void))"* @"*Fiber::StackPool#initialize:Deque(Pointer(Void))"(%"Fiber::StackPool"* %4), !dbg !1044
%6 = load %"Fiber::StackPool"*, %"Fiber::StackPool"** %_, !dbg !1044
ret %"Fiber::StackPool"* %6, !dbg !1044
}
; Function Attrs: uwtable
define internal %"Deque(Pointer(Void))"* @"*Fiber::StackPool#initialize:Deque(Pointer(Void))"(%"Fiber::StackPool"* %self) #0 !dbg !1045 {
entry:
%0 = call %"Deque(Pointer(Void))"* @"*Deque(Pointer(Void))@Deque(T)::new:Deque(Pointer(Void))"(i32 649), !dbg !1046
%1 = getelementptr inbounds %"Fiber::StackPool", %"Fiber::StackPool"* %self, i32 0, i32 1, !dbg !1047
store %"Deque(Pointer(Void))"* %0, %"Deque(Pointer(Void))"** %1, !dbg !1047
ret %"Deque(Pointer(Void))"* %0, !dbg !1047
}
; Function Attrs: uwtable
define internal %"Deque(Pointer(Void))"* @"*Deque(Pointer(Void))@Deque(T)::new:Deque(Pointer(Void))"(i32 %self) #0 !dbg !1048 {
alloca:
%_ = alloca %"Deque(Pointer(Void))"*, !dbg !1050
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Deque(Pointer(Void))"* getelementptr (%"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* null, i32 1) to i64)), !dbg !1050
%1 = bitcast i8* %0 to %"Deque(Pointer(Void))"*, !dbg !1050
%2 = bitcast %"Deque(Pointer(Void))"* %1 to i8*, !dbg !1050
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Deque(Pointer(Void))"* getelementptr (%"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* null, i32 1) to i32), i32 4, i1 false), !dbg !1050
%3 = getelementptr inbounds %"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* %1, i32 0, i32 1, !dbg !1050
store i32 0, i32* %3, !dbg !1050
%4 = getelementptr inbounds %"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* %1, i32 0, i32 0, !dbg !1050
store i32 118, i32* %4, !dbg !1050
store %"Deque(Pointer(Void))"* %1, %"Deque(Pointer(Void))"** %_, !dbg !1050
%5 = load %"Deque(Pointer(Void))"*, %"Deque(Pointer(Void))"** %_, !dbg !1050
%6 = call i8** @"*Deque(Pointer(Void))@Deque(T)#initialize:Pointer(Pointer(Void))"(%"Deque(Pointer(Void))"* %5), !dbg !1050
%7 = load %"Deque(Pointer(Void))"*, %"Deque(Pointer(Void))"** %_, !dbg !1050
ret %"Deque(Pointer(Void))"* %7, !dbg !1050
}
; Function Attrs: uwtable
define internal i8** @"*Deque(Pointer(Void))@Deque(T)#initialize:Pointer(Pointer(Void))"(%"Deque(Pointer(Void))"* %self) #0 !dbg !1051 {
entry:
%0 = getelementptr inbounds %"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* %self, i32 0, i32 2, !dbg !1052
store i32 0, i32* %0, !dbg !1052
%1 = getelementptr inbounds %"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1053
store i32 0, i32* %1, !dbg !1053
%2 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)::null:Pointer(Pointer(Void))"(i32 737), !dbg !1054
%3 = getelementptr inbounds %"Deque(Pointer(Void))", %"Deque(Pointer(Void))"* %self, i32 0, i32 4, !dbg !1055
store i8** %2, i8*** %3, !dbg !1055
ret i8** %2, !dbg !1055
}
define internal void @"~Crystal::EventLoop::eb:init"() {
alloca:
%0 = alloca %"Crystal::Event::Base"
br label %entry
entry: ; preds = %alloca
%1 = call %"Crystal::Event::Base" @"*Crystal::Event::Base::new:Crystal::Event::Base"()
store %"Crystal::Event::Base" %1, %"Crystal::Event::Base"* %0
%2 = load %"Crystal::Event::Base", %"Crystal::Event::Base"* %0
store %"Crystal::Event::Base" %2, %"Crystal::Event::Base"* @"Crystal::EventLoop::eb"
ret void
}
; Function Attrs: uwtable
define internal %"Crystal::Event::Base" @"*Crystal::Event::Base::new:Crystal::Event::Base"() #0 !dbg !1056 {
alloca:
%_ = alloca %"Crystal::Event::Base", !dbg !1058
%0 = alloca %"Crystal::Event::Base", !dbg !1058
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Crystal::Event::Base"* %0 to i8*, !dbg !1058
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 !1058
%2 = load %"Crystal::Event::Base", %"Crystal::Event::Base"* %0, !dbg !1058
store %"Crystal::Event::Base" %2, %"Crystal::Event::Base"* %_, !dbg !1058
%3 = call i8* @"*Crystal::Event::Base#initialize:Pointer(Void)"(%"Crystal::Event::Base"* %_), !dbg !1058
%4 = load %"Crystal::Event::Base", %"Crystal::Event::Base"* %_, !dbg !1058
ret %"Crystal::Event::Base" %4, !dbg !1058
}
; Function Attrs: uwtable
define internal i8* @"*Crystal::Event::Base#initialize:Pointer(Void)"(%"Crystal::Event::Base"* %self) #0 !dbg !1059 {
entry:
%0 = call i8* @event_base_new(), !dbg !1060
%1 = getelementptr inbounds %"Crystal::Event::Base", %"Crystal::Event::Base"* %self, i32 0, i32 0, !dbg !1061
store i8* %0, i8** %1, !dbg !1061
ret i8* %0, !dbg !1061
}
declare i8* @event_base_new()
define internal void @"~Thread::threads:init"() {
alloca:
%0 = alloca %"Thread::LinkedList(Thread)"
br label %entry
entry: ; preds = %alloca
%1 = call %"Thread::LinkedList(Thread)" @"*Thread::LinkedList(Thread)@Thread::LinkedList(T)::new:Thread::LinkedList(Thread)"(i32 1048)
store %"Thread::LinkedList(Thread)" %1, %"Thread::LinkedList(Thread)"* %0
%2 = load %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %0
store %"Thread::LinkedList(Thread)" %2, %"Thread::LinkedList(Thread)"* @"Thread::threads"
ret void
}
; Function Attrs: uwtable
define internal %"Thread::LinkedList(Thread)" @"*Thread::LinkedList(Thread)@Thread::LinkedList(T)::new:Thread::LinkedList(Thread)"(i32 %self) #0 !dbg !1062 {
alloca:
%x = alloca %"Thread::LinkedList(Thread)", !dbg !1063
%0 = alloca %"Thread::LinkedList(Thread)", !dbg !1063
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Thread::LinkedList(Thread)"* %0 to i8*, !dbg !1063
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 3) to i32), i32 4, i1 false), !dbg !1063
%2 = call %"Thread::Mutex"* @"*Thread::Mutex::new:Thread::Mutex"(), !dbg !1064
%3 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %0, i32 0, i32 2, !dbg !1064
store %"Thread::Mutex"* %2, %"Thread::Mutex"** %3, !dbg !1064
%4 = load %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %0, !dbg !1063
store %"Thread::LinkedList(Thread)" %4, %"Thread::LinkedList(Thread)"* %x, !dbg !1063
%5 = load %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %x, !dbg !1063
ret %"Thread::LinkedList(Thread)" %5, !dbg !1063
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread::new:Thread"() #0 !dbg !1065 {
alloca:
%_ = alloca %Thread*, !dbg !1066
%0 = alloca %"Atomic(UInt8)", !dbg !1067
br label %entry
entry: ; preds = %alloca
%1 = call i8* @__crystal_malloc64(i64 ptrtoint (%Thread* getelementptr (%Thread, %Thread* null, i32 1) to i64)), !dbg !1066
%2 = bitcast i8* %1 to %Thread*, !dbg !1066
%3 = bitcast %Thread* %2 to i8*, !dbg !1066
call void @llvm.memset.p0i8.i32(i8* %3, i8 0, i32 ptrtoint (%Thread* getelementptr (%Thread, %Thread* null, i32 1) to i32), i32 4, i1 false), !dbg !1066
%4 = call %"Atomic(UInt8)" @"*Atomic(UInt8)@Atomic(T)::new<UInt8>:Atomic(UInt8)"(i32 1043, i8 0), !dbg !1067
store %"Atomic(UInt8)" %4, %"Atomic(UInt8)"* %0, !dbg !1067
%5 = getelementptr inbounds %Thread, %Thread* %2, i32 0, i32 6, !dbg !1067
%6 = load %"Atomic(UInt8)", %"Atomic(UInt8)"* %0, !dbg !1067
store %"Atomic(UInt8)" %6, %"Atomic(UInt8)"* %5, !dbg !1067
%7 = getelementptr inbounds %Thread, %Thread* %2, i32 0, i32 0, !dbg !1067
store i32 102, i32* %7, !dbg !1067
store %Thread* %2, %Thread** %_, !dbg !1066
%8 = load %Thread*, %Thread** %_, !dbg !1066
call void @"*Thread#initialize:Nil"(%Thread* %8), !dbg !1066
%9 = load %Thread*, %Thread** %_, !dbg !1066
ret %Thread* %9, !dbg !1066
}
; Function Attrs: uwtable
define internal %"Atomic(UInt8)" @"*Atomic(UInt8)@Atomic(T)::new<UInt8>:Atomic(UInt8)"(i32 %self, i8 %value) #0 !dbg !1068 {
alloca:
%_ = alloca %"Atomic(UInt8)", !dbg !1070
%0 = alloca %"Atomic(UInt8)", !dbg !1070
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Atomic(UInt8)"* %0 to i8*, !dbg !1070
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i32), i32 4, i1 false), !dbg !1070
%2 = load %"Atomic(UInt8)", %"Atomic(UInt8)"* %0, !dbg !1070
store %"Atomic(UInt8)" %2, %"Atomic(UInt8)"* %_, !dbg !1070
call void @"*Atomic(UInt8)@Atomic(T)#initialize<UInt8>:Nil"(%"Atomic(UInt8)"* %_, i8 %value), !dbg !1070
%3 = load %"Atomic(UInt8)", %"Atomic(UInt8)"* %_, !dbg !1070
ret %"Atomic(UInt8)" %3, !dbg !1070
}
; Function Attrs: uwtable
define internal void @"*Atomic(UInt8)@Atomic(T)#initialize<UInt8>:Nil"(%"Atomic(UInt8)"* %self, i8 %value) #0 !dbg !1071 {
entry:
%0 = getelementptr inbounds %"Atomic(UInt8)", %"Atomic(UInt8)"* %self, i32 0, i32 0, !dbg !1072
store i8 %value, i8* %0, !dbg !1072
ret void, !dbg !1072
}
; Function Attrs: uwtable
define internal void @"*Thread#initialize:Nil"(%Thread* %self) #0 !dbg !1073 {
alloca:
%0 = alloca %"->", !dbg !1074
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1074
store i8* bitcast (void ()* @"~procProc(Nil)@/usr/share/crystal/src/thread.cr:47" to i8*), i8** %1, !dbg !1074
%2 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1074
store i8* null, i8** %2, !dbg !1074
%3 = load %"->", %"->"* %0, !dbg !1074
%4 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 7, !dbg !1075
store %"->" %3, %"->"* %4, !dbg !1075
%5 = call i64 @pthread_self(), !dbg !1076
%6 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 1, !dbg !1077
store i64 %5, i64* %6, !dbg !1077
%7 = call i8* @"*Thread#stack_address:Pointer(Void)"(%Thread* %self), !dbg !1078
%8 = call %Fiber* @"*Fiber::new<Pointer(Void), Thread>:Fiber"(i8* %7, %Thread* %self), !dbg !1079
%9 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 3, !dbg !1080
store %Fiber* %8, %Fiber** %9, !dbg !1080
%10 = call %"Thread::LinkedList(Thread)"* @"~Thread::threads:read"(), !dbg !1080
call void @"*Thread::LinkedList(Thread)@Thread::LinkedList(T)#push<Thread>:Nil"(%"Thread::LinkedList(Thread)"* %10, %Thread* %self), !dbg !1081
ret void, !dbg !1081
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@/usr/share/crystal/src/thread.cr:47"() #0 !dbg !1082 {
entry:
ret void, !dbg !1083
}
declare i64 @pthread_self()
; Function Attrs: uwtable
define internal i8* @"*Thread#stack_address:Pointer(Void)"(%Thread* %self) #0 !dbg !1084 {
alloca:
%address = alloca i8*, !dbg !1085
%attr = alloca %"union.LibC::PthreadAttrT", !dbg !1085
%ret = alloca i32, !dbg !1085
%0 = alloca %"union.LibC::PthreadAttrT", !dbg !1086
%1 = alloca i64, !dbg !1086
br label %entry
entry: ; preds = %alloca
%2 = call i8* @"*Pointer(Void)@Pointer(T)::null:Pointer(Void)"(i32 724), !dbg !1087
store i8* %2, i8** %address, !dbg !1088
%3 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 1, !dbg !1086
%4 = load i64, i64* %3, !dbg !1086
%5 = call i32 @pthread_getattr_np(i64 %4, %"union.LibC::PthreadAttrT"* %0), !dbg !1086
%6 = load %"union.LibC::PthreadAttrT", %"union.LibC::PthreadAttrT"* %0, !dbg !1086
store %"union.LibC::PthreadAttrT" %6, %"union.LibC::PthreadAttrT"* %attr, !dbg !1086
%7 = icmp eq i32 %5, 0, !dbg !1086
br i1 %7, label %then, label %else, !dbg !1086
then: ; preds = %entry
%8 = call i32 @pthread_attr_getstack(%"union.LibC::PthreadAttrT"* %attr, i8** %address, i64* %1), !dbg !1086
br label %exit, !dbg !1086
else: ; preds = %entry
br label %exit, !dbg !1086
exit: ; preds = %else, %then
%9 = call i32 @pthread_attr_destroy(%"union.LibC::PthreadAttrT"* %attr), !dbg !1086
store i32 %9, i32* %ret, !dbg !1086
%10 = load i32, i32* %ret, !dbg !1086
%11 = icmp eq i32 %10, 0, !dbg !1086
br i1 %11, label %then1, label %else2, !dbg !1086
then1: ; preds = %exit
br label %exit3, !dbg !1086
else2: ; preds = %exit
%12 = load i32, i32* %ret, !dbg !1086
%13 = call %Errno* @"*Errno::new<String, Int32>:Errno"(%String* bitcast ({ i32, i32, i32, [21 x i8] }* @"'pthread_attr_destro...'" to %String*), i32 %12), !dbg !1086
call void @"*raise<Errno>:NoReturn"(%Errno* %13), !dbg !1086
unreachable, !dbg !1086
exit3: ; preds = %then1
%14 = load i8*, i8** %address, !dbg !1086
ret i8* %14, !dbg !1086
}
declare i32 @pthread_getattr_np(i64, %"union.LibC::PthreadAttrT"*)
declare i32 @pthread_attr_getstack(%"union.LibC::PthreadAttrT"*, i8**, i64*)
declare i32 @pthread_attr_destroy(%"union.LibC::PthreadAttrT"*)
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber::new<Pointer(Void), Thread>:Fiber"(i8* %stack, %Thread* %thread) #0 !dbg !1089 {
alloca:
%_ = alloca %Fiber*, !dbg !1090
%0 = alloca %"Atomic(Thread | Nil)", !dbg !1091
br label %entry
entry: ; preds = %alloca
%1 = call i8* @__crystal_malloc64(i64 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i64)), !dbg !1090
%2 = bitcast i8* %1 to %Fiber*, !dbg !1090
%3 = bitcast %Fiber* %2 to i8*, !dbg !1090
call void @llvm.memset.p0i8.i32(i8* %3, i8 0, i32 ptrtoint (%Fiber* getelementptr (%Fiber, %Fiber* null, i32 1) to i32), i32 4, i1 false), !dbg !1090
%4 = getelementptr inbounds %Fiber, %Fiber* %2, i32 0, i32 8, !dbg !1090
store i1 true, i1* %4, !dbg !1090
%5 = call %"Atomic(Thread | Nil)" @"*Atomic(Thread | Nil)@Atomic(T)::new<Nil>:Atomic(Thread | Nil)"(i32 1042, %Nil zeroinitializer), !dbg !1091
store %"Atomic(Thread | Nil)" %5, %"Atomic(Thread | Nil)"* %0, !dbg !1091
%6 = getelementptr inbounds %Fiber, %Fiber* %2, i32 0, i32 9, !dbg !1091
%7 = load %"Atomic(Thread | Nil)", %"Atomic(Thread | Nil)"* %0, !dbg !1091
store %"Atomic(Thread | Nil)" %7, %"Atomic(Thread | Nil)"* %6, !dbg !1091
%8 = getelementptr inbounds %Fiber, %Fiber* %2, i32 0, i32 0, !dbg !1091
store i32 103, i32* %8, !dbg !1091
store %Fiber* %2, %Fiber** %_, !dbg !1090
%9 = load %Fiber*, %Fiber** %_, !dbg !1090
call void @"*Fiber#initialize<Pointer(Void), Thread>:Nil"(%Fiber* %9, i8* %stack, %Thread* %thread), !dbg !1090
%10 = load %Fiber*, %Fiber** %_, !dbg !1090
ret %Fiber* %10, !dbg !1090
}
; Function Attrs: uwtable
define internal %"Atomic(Thread | Nil)" @"*Atomic(Thread | Nil)@Atomic(T)::new<Nil>:Atomic(Thread | Nil)"(i32 %self, %Nil %value) #0 !dbg !1092 {
alloca:
%_ = alloca %"Atomic(Thread | Nil)", !dbg !1093
%0 = alloca %"Atomic(Thread | Nil)", !dbg !1093
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Atomic(Thread | Nil)"* %0 to i8*, !dbg !1093
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 !1093
%2 = load %"Atomic(Thread | Nil)", %"Atomic(Thread | Nil)"* %0, !dbg !1093
store %"Atomic(Thread | Nil)" %2, %"Atomic(Thread | Nil)"* %_, !dbg !1093
call void @"*Atomic(Thread | Nil)@Atomic(T)#initialize<Nil>:Nil"(%"Atomic(Thread | Nil)"* %_, %Nil zeroinitializer), !dbg !1093
%3 = load %"Atomic(Thread | Nil)", %"Atomic(Thread | Nil)"* %_, !dbg !1093
ret %"Atomic(Thread | Nil)" %3, !dbg !1093
}
; Function Attrs: uwtable
define internal void @"*Atomic(Thread | Nil)@Atomic(T)#initialize<Nil>:Nil"(%"Atomic(Thread | Nil)"* %self, %Nil %value) #0 !dbg !1094 {
entry:
%0 = getelementptr inbounds %"Atomic(Thread | Nil)", %"Atomic(Thread | Nil)"* %self, i32 0, i32 0, !dbg !1095
store %Thread* null, %Thread** %0, !dbg !1095
ret void, !dbg !1095
}
; Function Attrs: uwtable
define internal void @"*Fiber#initialize<Pointer(Void), Thread>:Nil"(%Fiber* %self, i8* %stack, %Thread* %thread) #0 !dbg !1096 {
alloca:
%0 = alloca %"->", !dbg !1097
%1 = alloca %"struct.Fiber::Context", !dbg !1098
br label %entry
entry: ; preds = %alloca
%2 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 2, !dbg !1097
store i8* %stack, i8** %2, !dbg !1097
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1097
store i8* bitcast (void ()* @"~procProc(Nil)@/usr/share/crystal/src/fiber.cr:63" to i8*), i8** %3, !dbg !1097
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1097
store i8* null, i8** %4, !dbg !1097
%5 = load %"->", %"->"* %0, !dbg !1097
%6 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 10, !dbg !1099
store %"->" %5, %"->"* %6, !dbg !1099
%7 = call i8* @_fiber_get_stack_top(), !dbg !1100
%8 = call %"struct.Fiber::Context" @"*struct.Fiber::Context::new<Pointer(Void)>:struct.Fiber::Context"(i8* %7), !dbg !1098
store %"struct.Fiber::Context" %8, %"struct.Fiber::Context"* %1, !dbg !1098
%9 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !1101
%10 = load %"struct.Fiber::Context", %"struct.Fiber::Context"* %1, !dbg !1101
store %"struct.Fiber::Context" %10, %"struct.Fiber::Context"* %9, !dbg !1101
%11 = call i8* @"*GC::current_thread_stack_bottom:Pointer(Void)"(), !dbg !1102
%12 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !1103
store i8* %11, i8** %12, !dbg !1103
%13 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !1104
store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'main'" to %String*), %String** %13, !dbg !1104
%14 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 9, !dbg !1104
%15 = call %Thread* @"*Atomic(Thread | Nil)@Atomic(T)#set<Thread>:Thread"(%"Atomic(Thread | Nil)"* %14, %Thread* %thread), !dbg !1105
%16 = call %"Thread::LinkedList(Fiber)"* @"~Fiber::fibers:read"(), !dbg !1105
call void @"*Thread::LinkedList(Fiber)@Thread::LinkedList(T)#push<Fiber>:Nil"(%"Thread::LinkedList(Fiber)"* %16, %Fiber* %self), !dbg !1106
ret void, !dbg !1106
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@/usr/share/crystal/src/fiber.cr:63"() #0 !dbg !1107 {
entry:
ret void, !dbg !1108
}
; Function Attrs: uwtable
define internal %"struct.Fiber::Context" @"*struct.Fiber::Context::new<Pointer(Void)>:struct.Fiber::Context"(i8* %stack_top) #0 !dbg !1109 {
alloca:
%_ = alloca %"struct.Fiber::Context", !dbg !1111
%0 = alloca %"struct.Fiber::Context", !dbg !1111
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"struct.Fiber::Context"* %0 to i8*, !dbg !1111
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"struct.Fiber::Context"* getelementptr (%"struct.Fiber::Context", %"struct.Fiber::Context"* null, i32 1) to i32), i32 4, i1 false), !dbg !1111
%2 = load %"struct.Fiber::Context", %"struct.Fiber::Context"* %0, !dbg !1111
store %"struct.Fiber::Context" %2, %"struct.Fiber::Context"* %_, !dbg !1111
%3 = call i64 @"*struct.Fiber::Context#initialize<Pointer(Void)>:Int64"(%"struct.Fiber::Context"* %_, i8* %stack_top), !dbg !1111
%4 = load %"struct.Fiber::Context", %"struct.Fiber::Context"* %_, !dbg !1111
ret %"struct.Fiber::Context" %4, !dbg !1111
}
; Function Attrs: uwtable
define internal i64 @"*struct.Fiber::Context#initialize<Pointer(Void)>:Int64"(%"struct.Fiber::Context"* %self, i8* %stack_top) #0 !dbg !1112 {
entry:
%0 = getelementptr inbounds %"struct.Fiber::Context", %"struct.Fiber::Context"* %self, i32 0, i32 0, !dbg !1113
store i8* %stack_top, i8** %0, !dbg !1113
%1 = getelementptr inbounds %"struct.Fiber::Context", %"struct.Fiber::Context"* %self, i32 0, i32 1, !dbg !1114
store i64 0, i64* %1, !dbg !1114
ret i64 0, !dbg !1114
}
; Function Attrs: uwtable
define internal i8* @"*GC::current_thread_stack_bottom:Pointer(Void)"() #0 !dbg !1115 {
entry:
%0 = load i8*, i8** @GC_stackbottom, !dbg !1116
ret i8* %0, !dbg !1116
}
; Function Attrs: uwtable
define internal %Thread* @"*Atomic(Thread | Nil)@Atomic(T)#set<Thread>:Thread"(%"Atomic(Thread | Nil)"* %self, %Thread* %value) #0 !dbg !1117 {
entry:
%0 = getelementptr inbounds %"Atomic(Thread | Nil)", %"Atomic(Thread | Nil)"* %self, i32 0, i32 0, !dbg !1118
store atomic volatile %Thread* %value, %Thread** %0 seq_cst, align 8, !dbg !1118
ret %Thread* %value, !dbg !1118
}
define internal %"Thread::LinkedList(Fiber)"* @"~Fiber::fibers:read"() {
entry:
%0 = load i1, i1* @"Fiber::fibers:init", !dbg !1105
br i1 %0, label %initialized, label %not_initialized, !dbg !1105
initialized: ; preds = %not_initialized, %entry
ret %"Thread::LinkedList(Fiber)"* @"Fiber::fibers", !dbg !1105
not_initialized: ; preds = %entry
store i1 true, i1* @"Fiber::fibers:init", !dbg !1105
call void @"~Fiber::fibers:init"(), !dbg !1105
br label %initialized, !dbg !1105
}
; Function Attrs: uwtable
define internal void @"*Thread::LinkedList(Fiber)@Thread::LinkedList(T)#push<Fiber>:Nil"(%"Thread::LinkedList(Fiber)"* %self, %Fiber* %node) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !1119 {
alloca:
%tail = alloca %Fiber*, !dbg !1120
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %self, i32 0, i32 2, !dbg !1121
%1 = load %"Thread::Mutex"*, %"Thread::Mutex"** %0, !dbg !1121
invoke void @"*Thread::Mutex#lock:Nil"(%"Thread::Mutex"* %1)
to label %invoke_out unwind label %rescue, !dbg !1122
rescue: ; preds = %entry
%2 = landingpad %landing_pad
cleanup, !dbg !1123
%3 = extractvalue %landing_pad %2, 0, !dbg !1123
%4 = extractvalue %landing_pad %2, 1, !dbg !1123
%5 = bitcast i8* %3 to %"struct.LibUnwind::Exception"*, !dbg !1122
%6 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %5), !dbg !1122
%7 = inttoptr i64 %6 to i32*, !dbg !1122
call void @"*Thread::Mutex#unlock:Nil"(%"Thread::Mutex"* %1), !dbg !1124
%8 = bitcast i8* %3 to %"struct.LibUnwind::Exception"*, !dbg !1124
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %8), !dbg !1122
unreachable, !dbg !1122
invoke_out: ; preds = %entry
call void @"*Fiber#previous=<Nil>:Nil"(%Fiber* %node, %Nil zeroinitializer), !dbg !1125
%9 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %self, i32 0, i32 1, !dbg !1126
%10 = load %Fiber*, %Fiber** %9, !dbg !1126
store %Fiber* %10, %Fiber** %tail, !dbg !1127
%11 = icmp ne %Fiber* %10, null, !dbg !1127
br i1 %11, label %then, label %else, !dbg !1127
then: ; preds = %invoke_out
%12 = load %Fiber*, %Fiber** %tail, !dbg !1127
%13 = call %Fiber* @"*Fiber#previous=<Fiber>:Fiber"(%Fiber* %node, %Fiber* %12), !dbg !1128
%14 = load %Fiber*, %Fiber** %tail, !dbg !1128
%15 = call %Fiber* @"*Fiber#next=<Fiber>:Fiber"(%Fiber* %14, %Fiber* %node), !dbg !1129
%16 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %self, i32 0, i32 1, !dbg !1130
store %Fiber* %15, %Fiber** %16, !dbg !1130
br label %exit, !dbg !1130
else: ; preds = %invoke_out
%17 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %self, i32 0, i32 1, !dbg !1131
store %Fiber* %node, %Fiber** %17, !dbg !1131
%18 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %self, i32 0, i32 0, !dbg !1123
store %Fiber* %node, %Fiber** %18, !dbg !1123
br label %exit, !dbg !1123
exit: ; preds = %else, %then
%19 = phi %Fiber* [ %15, %then ], [ %node, %else ], !dbg !1123
br label %exit1, !dbg !1123
exit1: ; preds = %exit
%20 = phi %Fiber* [ %19, %exit ], !dbg !1122
call void @"*Thread::Mutex#unlock:Nil"(%"Thread::Mutex"* %1), !dbg !1124
ret void, !dbg !1124
}
; Function Attrs: uwtable
define internal void @"*Thread::Mutex#lock:Nil"(%"Thread::Mutex"* %self) #0 !dbg !1132 {
alloca:
%ret = alloca i32, !dbg !1133
br label %entry
entry: ; preds = %alloca
%0 = call %"union.LibC::PthreadMutexT"* @"*Thread::Mutex#to_unsafe:Pointer(LibC::PthreadMutexT)"(%"Thread::Mutex"* %self), !dbg !1134
%1 = call i32 @pthread_mutex_lock(%"union.LibC::PthreadMutexT"* %0), !dbg !1135
store i32 %1, i32* %ret, !dbg !1136
%2 = load i32, i32* %ret, !dbg !1137
%3 = icmp eq i32 %2, 0, !dbg !1137
br i1 %3, label %then, label %else, !dbg !1137
then: ; preds = %entry
br label %exit, !dbg !1137
else: ; preds = %entry
%4 = load i32, i32* %ret, !dbg !1137
%5 = call %Errno* @"*Errno::new<String, Int32>:Errno"(%String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'pthread_mutex_lock'" to %String*), i32 %4), !dbg !1138
call void @"*raise<Errno>:NoReturn"(%Errno* %5), !dbg !1137
unreachable, !dbg !1137
exit: ; preds = %then
ret void, !dbg !1137
}
declare i32 @pthread_mutex_lock(%"union.LibC::PthreadMutexT"*)
; Function Attrs: uwtable
define internal void @"*Fiber#previous=<Nil>:Nil"(%Fiber* %self, %Nil %previous) #0 !dbg !1139 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 7, !dbg !1140
store %Fiber* null, %Fiber** %0, !dbg !1140
ret void, !dbg !1140
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber#previous=<Fiber>:Fiber"(%Fiber* %self, %Fiber* %previous) #0 !dbg !1141 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 7, !dbg !1142
store %Fiber* %previous, %Fiber** %0, !dbg !1142
ret %Fiber* %previous, !dbg !1142
}
; Function Attrs: uwtable
define internal %Fiber* @"*Fiber#next=<Fiber>:Fiber"(%Fiber* %self, %Fiber* %__arg0) #0 !dbg !1143 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 6, !dbg !1144
store %Fiber* %__arg0, %Fiber** %0, !dbg !1144
ret %Fiber* %__arg0, !dbg !1144
}
; Function Attrs: uwtable
define internal void @"*Thread::Mutex#unlock:Nil"(%"Thread::Mutex"* %self) #0 !dbg !1145 {
alloca:
%ret = alloca i32, !dbg !1146
br label %entry
entry: ; preds = %alloca
%0 = call %"union.LibC::PthreadMutexT"* @"*Thread::Mutex#to_unsafe:Pointer(LibC::PthreadMutexT)"(%"Thread::Mutex"* %self), !dbg !1147
%1 = call i32 @pthread_mutex_unlock(%"union.LibC::PthreadMutexT"* %0), !dbg !1148
store i32 %1, i32* %ret, !dbg !1149
%2 = load i32, i32* %ret, !dbg !1150
%3 = icmp eq i32 %2, 0, !dbg !1150
br i1 %3, label %then, label %else, !dbg !1150
then: ; preds = %entry
br label %exit, !dbg !1150
else: ; preds = %entry
%4 = load i32, i32* %ret, !dbg !1150
%5 = call %Errno* @"*Errno::new<String, Int32>:Errno"(%String* bitcast ({ i32, i32, i32, [21 x i8] }* @"'pthread_mutex_unloc...'" to %String*), i32 %4), !dbg !1151
call void @"*raise<Errno>:NoReturn"(%Errno* %5), !dbg !1150
unreachable, !dbg !1150
exit: ; preds = %then
ret void, !dbg !1150
}
declare i32 @pthread_mutex_unlock(%"union.LibC::PthreadMutexT"*)
define internal %"Thread::LinkedList(Thread)"* @"~Thread::threads:read"() {
entry:
%0 = load i1, i1* @"Thread::threads:init", !dbg !1080
br i1 %0, label %initialized, label %not_initialized, !dbg !1080
initialized: ; preds = %not_initialized, %entry
ret %"Thread::LinkedList(Thread)"* @"Thread::threads", !dbg !1080
not_initialized: ; preds = %entry
store i1 true, i1* @"Thread::threads:init", !dbg !1080
call void @"~Thread::threads:init"(), !dbg !1080
br label %initialized, !dbg !1080
}
; Function Attrs: uwtable
define internal void @"*Thread::LinkedList(Thread)@Thread::LinkedList(T)#push<Thread>:Nil"(%"Thread::LinkedList(Thread)"* %self, %Thread* %node) #0 personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality !dbg !1152 {
alloca:
%tail = alloca %Thread*, !dbg !1153
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %self, i32 0, i32 2, !dbg !1154
%1 = load %"Thread::Mutex"*, %"Thread::Mutex"** %0, !dbg !1154
invoke void @"*Thread::Mutex#lock:Nil"(%"Thread::Mutex"* %1)
to label %invoke_out unwind label %rescue, !dbg !1155
rescue: ; preds = %entry
%2 = landingpad %landing_pad
cleanup, !dbg !1156
%3 = extractvalue %landing_pad %2, 0, !dbg !1156
%4 = extractvalue %landing_pad %2, 1, !dbg !1156
%5 = bitcast i8* %3 to %"struct.LibUnwind::Exception"*, !dbg !1155
%6 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %5), !dbg !1155
%7 = inttoptr i64 %6 to i32*, !dbg !1155
call void @"*Thread::Mutex#unlock:Nil"(%"Thread::Mutex"* %1), !dbg !1157
%8 = bitcast i8* %3 to %"struct.LibUnwind::Exception"*, !dbg !1157
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %8), !dbg !1155
unreachable, !dbg !1155
invoke_out: ; preds = %entry
call void @"*Thread#previous=<Nil>:Nil"(%Thread* %node, %Nil zeroinitializer), !dbg !1158
%9 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %self, i32 0, i32 1, !dbg !1159
%10 = load %Thread*, %Thread** %9, !dbg !1159
store %Thread* %10, %Thread** %tail, !dbg !1160
%11 = icmp ne %Thread* %10, null, !dbg !1160
br i1 %11, label %then, label %else, !dbg !1160
then: ; preds = %invoke_out
%12 = load %Thread*, %Thread** %tail, !dbg !1160
%13 = call %Thread* @"*Thread#previous=<Thread>:Thread"(%Thread* %node, %Thread* %12), !dbg !1161
%14 = load %Thread*, %Thread** %tail, !dbg !1161
%15 = call %Thread* @"*Thread#next=<Thread>:Thread"(%Thread* %14, %Thread* %node), !dbg !1162
%16 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %self, i32 0, i32 1, !dbg !1163
store %Thread* %15, %Thread** %16, !dbg !1163
br label %exit, !dbg !1163
else: ; preds = %invoke_out
%17 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %self, i32 0, i32 1, !dbg !1164
store %Thread* %node, %Thread** %17, !dbg !1164
%18 = getelementptr inbounds %"Thread::LinkedList(Thread)", %"Thread::LinkedList(Thread)"* %self, i32 0, i32 0, !dbg !1156
store %Thread* %node, %Thread** %18, !dbg !1156
br label %exit, !dbg !1156
exit: ; preds = %else, %then
%19 = phi %Thread* [ %15, %then ], [ %node, %else ], !dbg !1156
br label %exit1, !dbg !1156
exit1: ; preds = %exit
%20 = phi %Thread* [ %19, %exit ], !dbg !1155
call void @"*Thread::Mutex#unlock:Nil"(%"Thread::Mutex"* %1), !dbg !1157
ret void, !dbg !1157
}
; Function Attrs: uwtable
define internal void @"*Thread#previous=<Nil>:Nil"(%Thread* %self, %Nil %previous) #0 !dbg !1165 {
entry:
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 5, !dbg !1166
store %Thread* null, %Thread** %0, !dbg !1166
ret void, !dbg !1166
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread#previous=<Thread>:Thread"(%Thread* %self, %Thread* %previous) #0 !dbg !1167 {
entry:
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 5, !dbg !1168
store %Thread* %previous, %Thread** %0, !dbg !1168
ret %Thread* %previous, !dbg !1168
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread#next=<Thread>:Thread"(%Thread* %self, %Thread* %__arg0) #0 !dbg !1169 {
entry:
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 4, !dbg !1170
store %Thread* %__arg0, %Thread** %0, !dbg !1170
ret %Thread* %__arg0, !dbg !1170
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread::current=<Thread>:Thread"(%Thread* %current) #0 !dbg !1171 {
alloca:
%0 = alloca %Thread**, !dbg !1172
br label %entry
entry: ; preds = %alloca
call void @"*Thread::current"(%Thread*** %0), !dbg !1172
%1 = load %Thread**, %Thread*** %0, !dbg !1172
store %Thread* %current, %Thread** %1, !dbg !1172
ret %Thread* %current, !dbg !1172
}
; Function Attrs: noinline
define internal void @"*Thread::current"(%Thread***) #5 {
entry:
store %Thread** @"Thread::current", %Thread*** %0, !dbg !1172
ret void, !dbg !1172
}
; Function Attrs: uwtable
define i32 @main(i32 %argc, i8** %argv) #0 !dbg !1173 {
entry:
%0 = call i32 @"*Crystal::main<Int32, Pointer(Pointer(UInt8))>:Int32"(i32 %argc, i8** %argv), !dbg !1175
ret i32 %0, !dbg !1175
}
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 !1176 {
entry:
%0 = trunc i32 %int to i16, !dbg !1178
ret i16 %0, !dbg !1178
}
; Function Attrs: uwtable
define i8* @__crystal_malloc(i32 %size) #0 !dbg !1179 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !1180
%1 = call i8* @"*GC::malloc<UInt64>:Pointer(Void)"(i64 %0), !dbg !1181
ret i8* %1, !dbg !1181
}
; Function Attrs: uwtable
define i8* @__crystal_malloc_atomic(i32 %size) #0 !dbg !1182 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !1183
%1 = call i8* @"*GC::malloc_atomic<UInt64>:Pointer(Void)"(i64 %0), !dbg !1184
ret i8* %1, !dbg !1184
}
; Function Attrs: uwtable
define i8* @__crystal_realloc(i8* %pointer, i32 %size) #0 !dbg !1185 {
entry:
%0 = call i64 @"*UInt64::new<UInt32>:UInt64"(i32 %size), !dbg !1186
%1 = call i8* @"*GC::realloc<Pointer(Void), UInt64>:Pointer(Void)"(i8* %pointer, i64 %0), !dbg !1187
ret i8* %1, !dbg !1187
}
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@/usr/share/crystal/src/gc/boehm.cr:243"() #0 !dbg !1188 {
alloca:
%fiber = alloca %Fiber*, !dbg !1189
%fiber1 = alloca %Fiber*, !dbg !1190
%node = alloca %Fiber*, !dbg !1190
br label %entry
entry: ; preds = %alloca
%0 = call %"Thread::LinkedList(Fiber)"* @"~Fiber::fibers:read"(), !dbg !1189
%1 = getelementptr inbounds %"Thread::LinkedList(Fiber)", %"Thread::LinkedList(Fiber)"* %0, i32 0, i32 0, !dbg !1190
%2 = load %Fiber*, %Fiber** %1, !dbg !1190
store %Fiber* %2, %Fiber** %node, !dbg !1191
br label %while, !dbg !1191
while: ; preds = %exit2, %entry
%3 = load %Fiber*, %Fiber** %node, !dbg !1192
%4 = icmp ne %Fiber* %3, null, !dbg !1192
br i1 %4, label %body, label %exit, !dbg !1192
body: ; preds = %while
%5 = load %Fiber*, %Fiber** %node, !dbg !1192
store %Fiber* %5, %Fiber** %fiber1, !dbg !1192
%6 = load %Fiber*, %Fiber** %fiber1, !dbg !1192
store %Fiber* %6, %Fiber** %fiber, !dbg !1192
%7 = load %Fiber*, %Fiber** %fiber, !dbg !1193
%8 = call i1 @"*Fiber#running?:Bool"(%Fiber* %7), !dbg !1194
br i1 %8, label %then, label %else, !dbg !1194
exit: ; preds = %while
ret void, !dbg !1195
then: ; preds = %body
br label %exit2, !dbg !1194
else: ; preds = %body
%9 = load %Fiber*, %Fiber** %fiber, !dbg !1194
call void @"*Fiber#push_gc_roots:Nil"(%Fiber* %9), !dbg !1193
br label %exit2, !dbg !1193
exit2: ; preds = %else, %then
%10 = load %Fiber*, %Fiber** %node, !dbg !1193
%11 = getelementptr inbounds %Fiber, %Fiber* %10, i32 0, i32 6, !dbg !1193
%12 = load %Fiber*, %Fiber** %11, !dbg !1193
store %Fiber* %12, %Fiber** %node, !dbg !1195
br label %while, !dbg !1195
}
; Function Attrs: uwtable
define internal i1 @"*Fiber#running?:Bool"(%Fiber* %self) #0 !dbg !1196 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !1197
%1 = getelementptr inbounds %"struct.Fiber::Context", %"struct.Fiber::Context"* %0, i32 0, i32 1, !dbg !1197
%2 = load i64, i64* %1, !dbg !1197
%3 = icmp eq i64 %2, 0, !dbg !1197
ret i1 %3, !dbg !1197
}
; Function Attrs: uwtable
define internal void @"*Fiber#push_gc_roots:Nil"(%Fiber* %self) #0 !dbg !1198 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !1199
%1 = getelementptr inbounds %"struct.Fiber::Context", %"struct.Fiber::Context"* %0, i32 0, i32 0, !dbg !1199
%2 = load i8*, i8** %1, !dbg !1199
%3 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 4, !dbg !1199
%4 = load i8*, i8** %3, !dbg !1199
call void @"*GC::push_stack<Pointer(Void), Pointer(Void)>:Nil"(i8* %2, i8* %4), !dbg !1200
ret void, !dbg !1200
}
; Function Attrs: uwtable
define internal void @"*GC::push_stack<Pointer(Void), Pointer(Void)>:Nil"(i8* %stack_top, i8* %stack_bottom) #0 !dbg !1201 {
entry:
call void @GC_push_all_eager(i8* %stack_top, i8* %stack_bottom), !dbg !1202
ret void, !dbg !1202
}
declare void @GC_push_all_eager(i8*, i8*)
; Function Attrs: uwtable
define internal void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %block) #0 !dbg !1203 {
alloca:
%0 = alloca %"->", !dbg !1204
%1 = alloca %"->", !dbg !1205
br label %entry
entry: ; preds = %alloca
store %"->" %block, %"->"* @"GC::curr_push_other_roots", !dbg !1206
%2 = call %Nil ()* @GC_get_push_other_roots(), !dbg !1204
%3 = bitcast %Nil ()* %2 to i8*, !dbg !1204
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1204
store i8* %3, i8** %4, !dbg !1204
%5 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1204
store i8* null, i8** %5, !dbg !1204
%6 = load %"->", %"->"* %0, !dbg !1204
store %"->" %6, %"->"* @"GC::prev_push_other_roots", !dbg !1205
%7 = getelementptr inbounds %"->", %"->"* %1, i32 0, i32 0, !dbg !1205
store i8* bitcast (void ()* @"~procProc(Nil)@/usr/share/crystal/src/gc/boehm.cr:236" to i8*), i8** %7, !dbg !1205
%8 = getelementptr inbounds %"->", %"->"* %1, i32 0, i32 1, !dbg !1205
store i8* null, i8** %8, !dbg !1205
%9 = load %"->", %"->"* %1, !dbg !1205
%10 = call i8* @"~check_proc_is_not_closure"(%"->" %9), !dbg !1205
%11 = bitcast i8* %10 to %Nil ()*, !dbg !1205
call void @GC_set_push_other_roots(%Nil ()* %11), !dbg !1207
ret void, !dbg !1207
}
declare %Nil ()* @GC_get_push_other_roots()
; Function Attrs: uwtable
define internal void @"~procProc(Nil)@/usr/share/crystal/src/gc/boehm.cr:236"() #0 !dbg !1208 {
alloca:
%__arg0 = alloca %"->", !dbg !1209
%__arg03 = alloca %"->", !dbg !1209
%__arg1 = alloca %"->", !dbg !1210
%__arg110 = alloca %"->", !dbg !1210
br label %entry
entry: ; preds = %alloca
%0 = load %"->", %"->"* @"GC::curr_push_other_roots", !dbg !1211
%1 = extractvalue %"->" %0, 0, !dbg !1211
%2 = icmp eq i8* %1, null, !dbg !1211
%3 = select i1 %2, i32 0, i32 461, !dbg !1211
%4 = icmp eq i32 0, %3, !dbg !1211
br i1 %4, label %current_def, label %next_def, !dbg !1211
current_def: ; preds = %entry
br label %exit, !dbg !1209
next_def: ; preds = %entry
%5 = icmp eq i32 461, %3, !dbg !1209
br i1 %5, label %current_def1, label %next_def2, !dbg !1209
exit: ; preds = %exit4, %current_def
%6 = load %"->", %"->"* @"GC::prev_push_other_roots", !dbg !1212
%7 = extractvalue %"->" %6, 0, !dbg !1212
%8 = icmp eq i8* %7, null, !dbg !1212
%9 = select i1 %8, i32 0, i32 461, !dbg !1212
%10 = icmp eq i32 0, %9, !dbg !1212
br i1 %10, label %current_def5, label %next_def6, !dbg !1212
current_def1: ; preds = %next_def
store %"->" %0, %"->"* %__arg03, !dbg !1209
%11 = load %"->", %"->"* %__arg03, !dbg !1209
%12 = extractvalue %"->" %11, 0, !dbg !1209
%13 = extractvalue %"->" %11, 1, !dbg !1209
%14 = icmp eq i8* %13, null, !dbg !1209
br i1 %14, label %ctx_is_null, label %ctx_is_not_null, !dbg !1209
next_def2: ; preds = %next_def
unreachable, !dbg !1212
ctx_is_null: ; preds = %current_def1
%15 = bitcast i8* %12 to %Nil ()*, !dbg !1209
%16 = call %Nil %15(), !dbg !1212
br label %exit4, !dbg !1212
ctx_is_not_null: ; preds = %current_def1
%17 = bitcast i8* %12 to %Nil (i8*)*, !dbg !1212
%18 = call %Nil %17(i8* %13), !dbg !1212
br label %exit4, !dbg !1212
exit4: ; preds = %ctx_is_not_null, %ctx_is_null
br label %exit, !dbg !1212
current_def5: ; preds = %exit
br label %exit7, !dbg !1210
next_def6: ; preds = %exit
%19 = icmp eq i32 461, %9, !dbg !1210
br i1 %19, label %current_def8, label %next_def9, !dbg !1210
exit7: ; preds = %exit13, %current_def5
ret void, !dbg !1212
current_def8: ; preds = %next_def6
store %"->" %6, %"->"* %__arg110, !dbg !1210
%20 = load %"->", %"->"* %__arg110, !dbg !1210
%21 = extractvalue %"->" %20, 0, !dbg !1210
%22 = extractvalue %"->" %20, 1, !dbg !1210
%23 = icmp eq i8* %22, null, !dbg !1210
br i1 %23, label %ctx_is_null11, label %ctx_is_not_null12, !dbg !1210
next_def9: ; preds = %next_def6
unreachable, !dbg !1212
ctx_is_null11: ; preds = %current_def8
%24 = bitcast i8* %21 to %Nil ()*, !dbg !1210
%25 = call %Nil %24(), !dbg !1212
br label %exit13, !dbg !1212
ctx_is_not_null12: ; preds = %current_def8
%26 = bitcast i8* %21 to %Nil (i8*)*, !dbg !1212
%27 = call %Nil %26(i8* %22), !dbg !1212
br label %exit13, !dbg !1212
exit13: ; preds = %ctx_is_not_null12, %ctx_is_null11
br label %exit7, !dbg !1212
}
declare void @GC_set_push_other_roots(%Nil ()*)
; Function Attrs: uwtable
define internal void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %buf) #0 !dbg !1213 {
alloca:
%urandom = alloca %File*, !dbg !1215
%buf1 = alloca %"Slice(UInt8)", !dbg !1215
%0 = alloca %"(Int32 | Nil)", !dbg !1216
%1 = alloca %"(Int32 | Nil)", !dbg !1217
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %buf, %"Slice(UInt8)"* %buf1, !dbg !1215
%2 = call i1* @"~Crystal::System::Random::initialized:read"(), !dbg !1218
%3 = load i1, i1* %2, !dbg !1218
br i1 %3, label %then, label %else, !dbg !1218
then: ; preds = %entry
br label %exit, !dbg !1218
else: ; preds = %entry
%4 = call %"(Bool | File | Nil)" @"*Crystal::System::Random::init:(Bool | File | Nil)"(), !dbg !1218
br label %exit, !dbg !1218
exit: ; preds = %else, %then
%5 = call i1* @"~Crystal::System::Random::getrandom_available:read"(), !dbg !1219
%6 = load i1, i1* %5, !dbg !1219
br i1 %6, label %then2, label %else3, !dbg !1219
then2: ; preds = %exit
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, !dbg !1219
call void @"*Crystal::System::Random::getrandom<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %7), !dbg !1216
%8 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !1216
store i32 0, i32* %8, !dbg !1216
%9 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !1216
store [1 x i64] zeroinitializer, [1 x i64]* %9, !dbg !1216
br label %exit4, !dbg !1216
else3: ; preds = %exit
%10 = load %File*, %File** @"Crystal::System::Random::urandom", !dbg !1220
store %File* %10, %File** %urandom, !dbg !1221
%11 = icmp ne %File* %10, null, !dbg !1221
br i1 %11, label %then5, label %else6, !dbg !1221
exit4: ; preds = %exit7, %then2
%12 = phi %"(Int32 | Nil)"* [ %0, %then2 ], [ %1, %exit7 ], !dbg !1217
ret void, !dbg !1217
then5: ; preds = %else3
%13 = load %File*, %File** %urandom, !dbg !1221
%14 = load %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, !dbg !1221
%15 = call i32 @"*File@IO#read_fully<Slice(UInt8)>:Int32"(%File* %13, %"Slice(UInt8)" %14), !dbg !1222
br label %exit7, !dbg !1222
else6: ; preds = %else3
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [57 x i8] }* @"'Failed to access se...'" to %String*)), !dbg !1217
unreachable, !dbg !1217
exit7: ; preds = %then5
%16 = phi i32 [ %15, %then5 ], !dbg !1217
%17 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !1217
store i32 160, i32* %17, !dbg !1217
%18 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !1217
%19 = bitcast [1 x i64]* %18 to i32*, !dbg !1217
store i32 %16, i32* %19, !dbg !1217
br label %exit4, !dbg !1217
}
define internal i1* @"~Crystal::System::Random::initialized:read"() {
entry:
%0 = load i1, i1* @"Crystal::System::Random::initialized:init", !dbg !1218
br i1 %0, label %initialized, label %not_initialized, !dbg !1218
initialized: ; preds = %not_initialized, %entry
ret i1* @"Crystal::System::Random::initialized", !dbg !1218
not_initialized: ; preds = %entry
store i1 true, i1* @"Crystal::System::Random::initialized:init", !dbg !1218
call void @"~Crystal::System::Random::initialized:init"(), !dbg !1218
br label %initialized, !dbg !1218
}
; Function Attrs: uwtable
define internal %"(Bool | File | Nil)" @"*Crystal::System::Random::init:(Bool | File | Nil)"() #0 !dbg !1223 {
alloca:
%urandom = alloca %File*, !dbg !1224
%0 = alloca %"Slice(UInt8)", !dbg !1225
%1 = alloca %"(Bool | File)", !dbg !1226
%2 = alloca %"Crystal::System::FileInfo", !dbg !1227
%3 = alloca %"(Bool | File | Nil)", !dbg !1227
%4 = alloca %"(Bool | File)", !dbg !1228
br label %entry
entry: ; preds = %alloca
%5 = call i1* @"~Crystal::System::Random::initialized:read"(), !dbg !1229
store i1 true, i1* %5, !dbg !1229
%6 = call %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Int32>:Slice(UInt8)"(i32 1092, i32 16), !dbg !1225
store %"Slice(UInt8)" %6, %"Slice(UInt8)"* %0, !dbg !1225
%7 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1225
%8 = call i64 @"*Crystal::System::Random::sys_getrandom<Slice(UInt8)>:Int64"(%"Slice(UInt8)" %7), !dbg !1230
%9 = icmp sge i64 %8, 0, !dbg !1230
br i1 %9, label %then, label %else, !dbg !1230
then: ; preds = %entry
%10 = call i1* @"~Crystal::System::Random::getrandom_available:read"(), !dbg !1226
store i1 true, i1* %10, !dbg !1226
%11 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %1, i32 0, i32 0, !dbg !1226
store i32 171, i32* %11, !dbg !1226
%12 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %1, i32 0, i32 1, !dbg !1226
%13 = bitcast [1 x i64]* %12 to i64*, !dbg !1226
store i64 1, i64* %13, !dbg !1226
br label %exit, !dbg !1226
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 !1231
store %File* %14, %File** %urandom, !dbg !1232
%15 = load %File*, %File** %urandom, !dbg !1233
%16 = call %"Crystal::System::FileInfo" @"*File@IO::FileDescriptor#info:Crystal::System::FileInfo"(%File* %15), !dbg !1227
store %"Crystal::System::FileInfo" %16, %"Crystal::System::FileInfo"* %2, !dbg !1227
%17 = call i8 @"*Crystal::System::FileInfo#type:File::Type"(%"Crystal::System::FileInfo"* %2), !dbg !1227
%18 = call i1 @"*File::Type#character_device?:Bool"(i8 %17), !dbg !1227
br i1 %18, label %then1, label %else2, !dbg !1227
exit: ; preds = %exit3, %then
%19 = phi %"(Bool | File)"* [ %1, %then ], [ %4, %exit3 ], !dbg !1228
%20 = bitcast %"(Bool | File)"* %19 to %"(Bool | File | Nil)"*, !dbg !1228
%21 = load %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %20, !dbg !1228
ret %"(Bool | File | Nil)" %21, !dbg !1228
then1: ; preds = %else
br label %exit3, !dbg !1227
else2: ; preds = %else
%22 = getelementptr inbounds %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, i32 0, i32 0, !dbg !1227
store i32 0, i32* %22, !dbg !1227
%23 = getelementptr inbounds %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, i32 0, i32 1, !dbg !1227
store [1 x i64] zeroinitializer, [1 x i64]* %23, !dbg !1227
%24 = load %"(Bool | File | Nil)", %"(Bool | File | Nil)"* %3, !dbg !1227
ret %"(Bool | File | Nil)" %24, !dbg !1227
exit3: ; preds = %then1
%25 = load %File*, %File** %urandom, !dbg !1227
%26 = call i1 @"*File@IO::FileDescriptor#close_on_exec=<Bool>:Bool"(%File* %25, i1 true), !dbg !1234
%27 = load %File*, %File** %urandom, !dbg !1234
%28 = call i1 @"*File@IO::Buffered#sync=<Bool>:Bool"(%File* %27, i1 true), !dbg !1235
%29 = load %File*, %File** %urandom, !dbg !1235
store %File* %29, %File** @"Crystal::System::Random::urandom", !dbg !1228
%30 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %4, i32 0, i32 0, !dbg !1228
store i32 84, i32* %30, !dbg !1228
%31 = getelementptr inbounds %"(Bool | File)", %"(Bool | File)"* %4, i32 0, i32 1, !dbg !1228
%32 = bitcast [1 x i64]* %31 to %File**, !dbg !1228
store %File* %29, %File** %32, !dbg !1228
br label %exit, !dbg !1228
}
; Function Attrs: uwtable
define internal %"Slice(UInt8)" @"*Slice(UInt8)@Slice(T)::new<Int32>:Slice(UInt8)"(i32 %self, i32 %size) #0 !dbg !1236 {
alloca:
%read_only = alloca i1, !dbg !1237
%pointer = alloca i8*, !dbg !1237
%0 = alloca %"Slice(UInt8)", !dbg !1238
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %read_only, !dbg !1239
%1 = call i8* @"*Pointer(UInt8)@Pointer(T)::malloc<Int32>:Pointer(UInt8)"(i32 722, i32 %size), !dbg !1240
store i8* %1, i8** %pointer, !dbg !1241
%2 = load i8*, i8** %pointer, !dbg !1241
%3 = load i1, i1* %read_only, !dbg !1241
%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 !1238
store %"Slice(UInt8)" %4, %"Slice(UInt8)"* %0, !dbg !1238
%5 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1238
ret %"Slice(UInt8)" %5, !dbg !1238
}
; Function Attrs: uwtable
define internal i64 @"*Crystal::System::Random::sys_getrandom<Slice(UInt8)>:Int64"(%"Slice(UInt8)" %buf) #0 !dbg !1242 {
alloca:
%buf1 = alloca %"Slice(UInt8)", !dbg !1243
%read_bytes = alloca i64, !dbg !1244
%__temp_261 = alloca i1, !dbg !1244
%__temp_262 = alloca i1, !dbg !1244
br label %entry
entry: ; preds = %alloca
store %"Slice(UInt8)" %buf, %"Slice(UInt8)"* %buf1, !dbg !1243
br label %while, !dbg !1244
while: ; preds = %exit8, %entry
br i1 true, label %body, label %exit, !dbg !1245
body: ; preds = %while
%0 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, i32 0, i32 2, !dbg !1245
%1 = load i8*, i8** %0, !dbg !1245
%2 = getelementptr inbounds %"Slice(UInt8)", %"Slice(UInt8)"* %buf1, i32 0, i32 0, !dbg !1245
%3 = load i32, i32* %2, !dbg !1245
%4 = call i64 @"*UInt64::new<Int32>:UInt64"(i32 %3), !dbg !1246
%5 = call i64 (i64, ...) @syscall(i64 318, i8* %1, i64 %4, i32 0), !dbg !1247
store i64 %5, i64* %read_bytes, !dbg !1248
%6 = load i64, i64* %read_bytes, !dbg !1249
%7 = icmp slt i64 %6, 0, !dbg !1249
store i1 %7, i1* %__temp_261, !dbg !1249
br i1 %7, label %then2, label %else3, !dbg !1249
exit: ; preds = %while
unreachable, !dbg !1250
then: ; preds = %exit7
call void @"*Fiber::yield:Nil"(), !dbg !1250
br label %exit8, !dbg !1250
else: ; preds = %exit7
%8 = load i64, i64* %read_bytes, !dbg !1250
ret i64 %8, !dbg !1250
then2: ; preds = %body
%9 = call i32 @"*Errno::value:Int32"(), !dbg !1251
%10 = icmp eq i32 %9, 4, !dbg !1251
store i1 %10, i1* %__temp_262, !dbg !1251
br i1 %10, label %then4, label %else5, !dbg !1251
else3: ; preds = %body
%11 = load i1, i1* %__temp_261, !dbg !1252
br label %exit7, !dbg !1252
then4: ; preds = %then2
%12 = load i1, i1* %__temp_262, !dbg !1251
br label %exit6, !dbg !1251
else5: ; preds = %then2
%13 = call i32 @"*Errno::value:Int32"(), !dbg !1252
%14 = icmp eq i32 %13, 11, !dbg !1252
br label %exit6, !dbg !1252
exit6: ; preds = %else5, %then4
%15 = phi i1 [ %12, %then4 ], [ %14, %else5 ], !dbg !1252
br label %exit7, !dbg !1252
exit7: ; preds = %else3, %exit6
%16 = phi i1 [ %15, %exit6 ], [ %11, %else3 ], !dbg !1252
br i1 %16, label %then, label %else, !dbg !1252
exit8: ; preds = %then
br label %while, !dbg !1250
}
declare i64 @syscall(i64, ...)
; Function Attrs: uwtable
define internal void @"*Fiber::yield:Nil"() #0 !dbg !1253 {
entry:
call void @"*Crystal::Scheduler::yield:Nil"(), !dbg !1254
ret void, !dbg !1254
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler::yield:Nil"() #0 !dbg !1255 {
entry:
%0 = call %Thread* @"*Thread::current:Thread"(), !dbg !1257
%1 = call %"Crystal::Scheduler"* @"*Thread#scheduler:Crystal::Scheduler"(%Thread* %0), !dbg !1257
call void @"*Crystal::Scheduler#yield:Nil"(%"Crystal::Scheduler"* %1), !dbg !1257
ret void, !dbg !1257
}
; Function Attrs: uwtable
define internal %Thread* @"*Thread::current:Thread"() #0 !dbg !1258 {
alloca:
%__temp_45 = alloca %Thread*, !dbg !1259
%0 = alloca %Thread**, !dbg !1259
br label %entry
entry: ; preds = %alloca
call void @"*Thread::current"(%Thread*** %0), !dbg !1259
%1 = load %Thread**, %Thread*** %0, !dbg !1259
%2 = load %Thread*, %Thread** %1, !dbg !1259
store %Thread* %2, %Thread** %__temp_45, !dbg !1259
%3 = icmp ne %Thread* %2, null, !dbg !1259
br i1 %3, label %then, label %else, !dbg !1259
then: ; preds = %entry
%4 = load %Thread*, %Thread** %__temp_45, !dbg !1259
br label %exit, !dbg !1259
else: ; preds = %entry
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [34 x i8] }* @"'BUG: Thread.current...'" to %String*)), !dbg !1259
unreachable, !dbg !1259
exit: ; preds = %then
%5 = phi %Thread* [ %4, %then ], !dbg !1259
ret %Thread* %5, !dbg !1259
}
; Function Attrs: uwtable
define internal %"Crystal::Scheduler"* @"*Thread#scheduler:Crystal::Scheduler"(%Thread* %self) #0 !dbg !1260 {
alloca:
%__temp_46 = alloca %"Crystal::Scheduler"*, !dbg !1261
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 8, !dbg !1262
%1 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %0, !dbg !1262
store %"Crystal::Scheduler"* %1, %"Crystal::Scheduler"** %__temp_46, !dbg !1262
%2 = icmp ne %"Crystal::Scheduler"* %1, null, !dbg !1262
br i1 %2, label %then, label %else, !dbg !1262
then: ; preds = %entry
%3 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %__temp_46, !dbg !1262
br label %exit, !dbg !1262
else: ; preds = %entry
%4 = call %Fiber* @"*Thread#main_fiber:Fiber"(%Thread* %self), !dbg !1263
%5 = call %"Crystal::Scheduler"* @"*Crystal::Scheduler::new<Fiber>:Crystal::Scheduler"(%Fiber* %4), !dbg !1264
%6 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 8, !dbg !1262
store %"Crystal::Scheduler"* %5, %"Crystal::Scheduler"** %6, !dbg !1262
br label %exit, !dbg !1262
exit: ; preds = %else, %then
%7 = phi %"Crystal::Scheduler"* [ %3, %then ], [ %5, %else ], !dbg !1262
ret %"Crystal::Scheduler"* %7, !dbg !1262
}
; Function Attrs: uwtable
define internal %Fiber* @"*Thread#main_fiber:Fiber"(%Thread* %self) #0 !dbg !1265 {
entry:
%0 = getelementptr inbounds %Thread, %Thread* %self, i32 0, i32 3, !dbg !1266
%1 = load %Fiber*, %Fiber** %0, !dbg !1266
%2 = icmp eq %Fiber* %1, null, !dbg !1266
%3 = select i1 %2, i32 0, i32 103, !dbg !1266
%4 = icmp eq i32 0, %3, !dbg !1266
br i1 %4, label %current_def, label %next_def, !dbg !1266
current_def: ; preds = %entry
call void @"*Nil#not_nil!:NoReturn"(%Nil zeroinitializer), !dbg !1267
unreachable, !dbg !1267
next_def: ; preds = %entry
%5 = icmp eq i32 103, %3, !dbg !1267
br i1 %5, label %current_def1, label %next_def2, !dbg !1267
current_def1: ; preds = %next_def
br label %exit, !dbg !1267
next_def2: ; preds = %next_def
unreachable, !dbg !1267
exit: ; preds = %current_def1
%6 = phi %Fiber* [ %1, %current_def1 ], !dbg !1267
ret %Fiber* %6, !dbg !1267
}
; Function Attrs: noreturn uwtable
define internal void @"*Nil#not_nil!:NoReturn"(%Nil %self) #1 !dbg !1268 {
entry:
%0 = call %NilAssertionError* @"*NilAssertionError::new:NilAssertionError"(), !dbg !1270
call void @"*raise<NilAssertionError>:NoReturn"(%NilAssertionError* %0), !dbg !1271
unreachable, !dbg !1271
}
; Function Attrs: uwtable
define internal %NilAssertionError* @"*NilAssertionError::new:NilAssertionError"() #0 !dbg !1272 {
alloca:
%_ = alloca %NilAssertionError*, !dbg !1273
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%NilAssertionError* getelementptr (%NilAssertionError, %NilAssertionError* null, i32 1) to i64)), !dbg !1273
%1 = bitcast i8* %0 to %NilAssertionError*, !dbg !1273
%2 = bitcast %NilAssertionError* %1 to i8*, !dbg !1273
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%NilAssertionError* getelementptr (%NilAssertionError, %NilAssertionError* null, i32 1) to i32), i32 4, i1 false), !dbg !1273
%3 = getelementptr inbounds %NilAssertionError, %NilAssertionError* %1, i32 0, i32 0, !dbg !1273
store i32 46, i32* %3, !dbg !1273
store %NilAssertionError* %1, %NilAssertionError** %_, !dbg !1273
%4 = load %NilAssertionError*, %NilAssertionError** %_, !dbg !1273
call void @"*NilAssertionError#initialize:Nil"(%NilAssertionError* %4), !dbg !1273
%5 = load %NilAssertionError*, %NilAssertionError** %_, !dbg !1273
ret %NilAssertionError* %5, !dbg !1273
}
; Function Attrs: uwtable
define internal void @"*NilAssertionError#initialize:Nil"(%NilAssertionError* %self) #0 !dbg !1274 {
alloca:
%message = alloca %String*, !dbg !1275
br label %entry
entry: ; preds = %alloca
store %String* bitcast ({ i32, i32, i32, [21 x i8] }* @"'Nil assertion faile...'" to %String*), %String** %message, !dbg !1276
%0 = load %String*, %String** %message, !dbg !1276
call void @"*NilAssertionError#initialize<String>:Nil"(%NilAssertionError* %self, %String* %0), !dbg !1275
ret void, !dbg !1275
}
; Function Attrs: uwtable
define internal void @"*NilAssertionError#initialize<String>:Nil"(%NilAssertionError* %self, %String* %message) #0 !dbg !1277 {
entry:
call void @"*NilAssertionError@Exception#initialize<String>:Nil"(%NilAssertionError* %self, %String* %message), !dbg !1278
ret void, !dbg !1278
}
; Function Attrs: uwtable
define internal void @"*NilAssertionError@Exception#initialize<String>:Nil"(%NilAssertionError* %self, %String* %message) #0 !dbg !1279 {
alloca:
%cause = alloca %Nil, !dbg !1280
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %NilAssertionError, %NilAssertionError* %self, i32 0, i32 1, !dbg !1281
store %String* %message, %String** %0, !dbg !1281
%1 = load %Nil, %Nil* %cause, !dbg !1281
%2 = getelementptr inbounds %NilAssertionError, %NilAssertionError* %self, i32 0, i32 2, !dbg !1282
store i32* null, i32** %2, !dbg !1282
ret void, !dbg !1282
}
; Function Attrs: noreturn uwtable
define internal void @"*raise<NilAssertionError>:NoReturn"(%NilAssertionError* %exception) #1 !dbg !1283 {
alloca:
%__temp_47 = alloca %"(CallStack | Nil)", !dbg !1284
%unwind_ex = alloca %"struct.LibUnwind::Exception"*, !dbg !1284
%0 = alloca %CallStack, !dbg !1284
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %NilAssertionError, %NilAssertionError* %exception, i32 0, i32 3, !dbg !1284
%2 = load %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, !dbg !1284
store %"(CallStack | Nil)" %2, %"(CallStack | Nil)"* %__temp_47, !dbg !1284
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %1, i32 0, i32 0, !dbg !1284
%4 = load i32, i32* %3, !dbg !1284
%5 = icmp eq i32 %4, 0, !dbg !1284
%6 = xor i1 %5, true, !dbg !1284
%7 = and i1 true, %6, !dbg !1284
br i1 %7, label %then, label %else, !dbg !1284
then: ; preds = %entry
%8 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %__temp_47, i32 0, i32 1, !dbg !1284
%9 = bitcast [2 x i64]* %8 to %CallStack*, !dbg !1284
br label %exit, !dbg !1284
else: ; preds = %entry
%10 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1284
store %CallStack %10, %CallStack* %0, !dbg !1284
%11 = load %CallStack, %CallStack* %0, !dbg !1284
%12 = call %CallStack @"*NilAssertionError@Exception#callstack=<CallStack>:CallStack"(%NilAssertionError* %exception, %CallStack %11), !dbg !1284
br label %exit, !dbg !1284
exit: ; preds = %else, %then
%13 = call %"struct.LibUnwind::Exception"* @"*Pointer(LibUnwind::Exception)@Pointer(T)::malloc:Pointer(LibUnwind::Exception)"(i32 728), !dbg !1284
store %"struct.LibUnwind::Exception"* %13, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
%14 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
%15 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1284
%16 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %14, i32 0, i32 0, !dbg !1284
store i64 %15, i64* %16, !dbg !1284
%17 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
%18 = call i64 @"*UInt64@Number::zero:UInt64"(), !dbg !1284
%19 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %17, i32 0, i32 1, !dbg !1284
store i64 %18, i64* %19, !dbg !1284
%20 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
%21 = ptrtoint %NilAssertionError* %exception to i64, !dbg !1284
%22 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %20, i32 0, i32 4, !dbg !1284
store i64 %21, i64* %22, !dbg !1284
%23 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
%24 = getelementptr inbounds %"struct.LibUnwind::Exception", %"struct.LibUnwind::Exception"* %23, i32 0, i32 5, !dbg !1284
store i32 46, i32* %24, !dbg !1284
%25 = load %"struct.LibUnwind::Exception"*, %"struct.LibUnwind::Exception"** %unwind_ex, !dbg !1284
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %25), !dbg !1284
unreachable, !dbg !1284
}
; Function Attrs: uwtable
define internal %CallStack @"*NilAssertionError@Exception#callstack=<CallStack>:CallStack"(%NilAssertionError* %self, %CallStack %callstack) #0 !dbg !1285 {
alloca:
%callstack1 = alloca %CallStack, !dbg !1286
br label %entry
entry: ; preds = %alloca
store %CallStack %callstack, %CallStack* %callstack1, !dbg !1286
%0 = getelementptr inbounds %NilAssertionError, %NilAssertionError* %self, i32 0, i32 3, !dbg !1287
%1 = load %CallStack, %CallStack* %callstack1, !dbg !1287
%2 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 0, !dbg !1287
store i32 353, i32* %2, !dbg !1287
%3 = getelementptr inbounds %"(CallStack | Nil)", %"(CallStack | Nil)"* %0, i32 0, i32 1, !dbg !1287
%4 = bitcast [2 x i64]* %3 to %CallStack*, !dbg !1287
store %CallStack %1, %CallStack* %4, !dbg !1287
%5 = load %CallStack, %CallStack* %callstack1, !dbg !1287
ret %CallStack %5, !dbg !1287
}
; Function Attrs: uwtable
define internal %"Crystal::Scheduler"* @"*Crystal::Scheduler::new<Fiber>:Crystal::Scheduler"(%Fiber* %main) #0 !dbg !1288 {
alloca:
%_ = alloca %"Crystal::Scheduler"*, !dbg !1289
br label %entry
entry: ; preds = %alloca
%0 = call i8* @__crystal_malloc64(i64 ptrtoint (%"Crystal::Scheduler"* getelementptr (%"Crystal::Scheduler", %"Crystal::Scheduler"* null, i32 1) to i64)), !dbg !1289
%1 = bitcast i8* %0 to %"Crystal::Scheduler"*, !dbg !1289
%2 = bitcast %"Crystal::Scheduler"* %1 to i8*, !dbg !1289
call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 ptrtoint (%"Crystal::Scheduler"* getelementptr (%"Crystal::Scheduler", %"Crystal::Scheduler"* null, i32 1) to i32), i32 4, i1 false), !dbg !1289
%3 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %1, i32 0, i32 0, !dbg !1289
store i32 115, i32* %3, !dbg !1289
store %"Crystal::Scheduler"* %1, %"Crystal::Scheduler"** %_, !dbg !1289
%4 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %_, !dbg !1289
%5 = call %"Deque(Fiber)"* @"*Crystal::Scheduler#initialize<Fiber>:Deque(Fiber)"(%"Crystal::Scheduler"* %4, %Fiber* %main), !dbg !1289
%6 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %_, !dbg !1289
ret %"Crystal::Scheduler"* %6, !dbg !1289
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Crystal::Scheduler#initialize<Fiber>:Deque(Fiber)"(%"Crystal::Scheduler"* %self, %Fiber* %main) #0 !dbg !1290 {
entry:
%0 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 1, !dbg !1291
store %Fiber* %main, %Fiber** %0, !dbg !1291
%1 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 1, !dbg !1291
%2 = load %Fiber*, %Fiber** %1, !dbg !1291
%3 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 2, !dbg !1292
store %Fiber* %2, %Fiber** %3, !dbg !1292
%4 = call %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 648), !dbg !1293
%5 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 3, !dbg !1294
store %"Deque(Fiber)"* %4, %"Deque(Fiber)"** %5, !dbg !1294
ret %"Deque(Fiber)"* %4, !dbg !1294
}
; Function Attrs: uwtable
define internal %"Deque(Fiber)"* @"*Deque(Fiber)@Deque(T)::new:Deque(Fiber)"(i32 %self) #0 !dbg !1295 {
alloca:
%_ = alloca %"Deque(Fiber)"*, !dbg !1296
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 !1296
%1 = bitcast i8* %0 to %"Deque(Fiber)"*, !dbg !1296
%2 = bitcast %"Deque(Fiber)"* %1 to i8*, !dbg !1296
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 !1296
%3 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %1, i32 0, i32 1, !dbg !1296
store i32 0, i32* %3, !dbg !1296
%4 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %1, i32 0, i32 0, !dbg !1296
store i32 117, i32* %4, !dbg !1296
store %"Deque(Fiber)"* %1, %"Deque(Fiber)"** %_, !dbg !1296
%5 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %_, !dbg !1296
%6 = call %Fiber** @"*Deque(Fiber)@Deque(T)#initialize:Pointer(Fiber)"(%"Deque(Fiber)"* %5), !dbg !1296
%7 = load %"Deque(Fiber)"*, %"Deque(Fiber)"** %_, !dbg !1296
ret %"Deque(Fiber)"* %7, !dbg !1296
}
; Function Attrs: uwtable
define internal %Fiber** @"*Deque(Fiber)@Deque(T)#initialize:Pointer(Fiber)"(%"Deque(Fiber)"* %self) #0 !dbg !1297 {
entry:
%0 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 2, !dbg !1298
store i32 0, i32* %0, !dbg !1298
%1 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 3, !dbg !1299
store i32 0, i32* %1, !dbg !1299
%2 = call %Fiber** @"*Pointer(Fiber)@Pointer(T)::null:Pointer(Fiber)"(i32 807), !dbg !1300
%3 = getelementptr inbounds %"Deque(Fiber)", %"Deque(Fiber)"* %self, i32 0, i32 4, !dbg !1301
store %Fiber** %2, %Fiber*** %3, !dbg !1301
ret %Fiber** %2, !dbg !1301
}
; Function Attrs: uwtable
define internal %Fiber** @"*Pointer(Fiber)@Pointer(T)::null:Pointer(Fiber)"(i32 %self) #0 !dbg !1302 {
entry:
ret %Fiber** null, !dbg !1303
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler#yield:Nil"(%"Crystal::Scheduler"* %self) #0 !dbg !1304 {
alloca:
%0 = alloca %"Time::Span", !dbg !1305
br label %entry
entry: ; preds = %alloca
%1 = call %"Time::Span" @"*Int32@Int#seconds:Time::Span"(i32 0), !dbg !1305
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !1305
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !1305
call void @"*Crystal::Scheduler#sleep<Time::Span>:Nil"(%"Crystal::Scheduler"* %self, %"Time::Span" %2), !dbg !1306
ret void, !dbg !1306
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Int32@Int#seconds:Time::Span"(i32 %self) #0 !dbg !1307 {
alloca:
%0 = alloca %"Time::Span", !dbg !1309
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 !1309
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !1309
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !1309
ret %"Time::Span" %2, !dbg !1309
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Time::Span::new<Int32, Int32, Int32>:Time::Span"(i32 %hours, i32 %minutes, i32 %seconds) #0 !dbg !1310 {
alloca:
%0 = alloca %"Time::Span", !dbg !1311
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 !1311
store %"Time::Span" %1, %"Time::Span"* %0, !dbg !1311
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !1311
ret %"Time::Span" %2, !dbg !1311
}
; 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 !1312 {
alloca:
%nanoseconds = alloca i32, !dbg !1313
%0 = alloca %"Time::Span", !dbg !1314
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %nanoseconds, !dbg !1315
%1 = call i64 @"*Time::Span::compute_seconds!<Int32, Int32, Int32, Int32>:Int64"(i32 %days, i32 %hours, i32 %minutes, i32 %seconds), !dbg !1316
%2 = load i32, i32* %nanoseconds, !dbg !1316
%3 = sext i32 %2 to i64, !dbg !1316
%4 = call %"Time::Span" @"*Time::Span::new:seconds:nanoseconds<Int64, Int64>:Time::Span"(i64 %1, i64 %3), !dbg !1314
store %"Time::Span" %4, %"Time::Span"* %0, !dbg !1314
%5 = load %"Time::Span", %"Time::Span"* %0, !dbg !1314
ret %"Time::Span" %5, !dbg !1314
}
; 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 !1317 {
alloca:
%0 = alloca %"(Int64 | Nil)", !dbg !1318
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 !1318
store %"(Int64 | Nil)" %1, %"(Int64 | Nil)"* %0, !dbg !1318
%2 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 0, !dbg !1318
%3 = load i32, i32* %2, !dbg !1318
%4 = icmp eq i32 162, %3, !dbg !1318
br i1 %4, label %current_def, label %next_def, !dbg !1318
current_def: ; preds = %entry
%5 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 1, !dbg !1318
%6 = bitcast [1 x i64]* %5 to i64*, !dbg !1318
%7 = load i64, i64* %6, !dbg !1318
br label %exit, !dbg !1318
next_def: ; preds = %entry
%8 = icmp eq i32 0, %3, !dbg !1318
br i1 %8, label %current_def1, label %next_def2, !dbg !1318
exit: ; preds = %current_def
%9 = phi i64 [ %7, %current_def ], !dbg !1318
ret i64 %9, !dbg !1318
current_def1: ; preds = %next_def
call void @"*Nil#not_nil!:NoReturn"(%Nil zeroinitializer), !dbg !1318
unreachable, !dbg !1318
next_def2: ; preds = %next_def
unreachable, !dbg !1318
}
; 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 !1319 {
alloca:
%hrssec = alloca i64, !dbg !1320
%minsec = alloca i64, !dbg !1320
%s = alloca i64, !dbg !1320
%result = alloca i64, !dbg !1320
%overflow = alloca i1, !dbg !1320
%sd = alloca i64, !dbg !1320
%temp = alloca i64, !dbg !1320
%nanos = alloca i64, !dbg !1320
%0 = alloca %"(Int64 | Nil)", !dbg !1321
%1 = alloca %"(Int64 | Nil)", !dbg !1321
br label %entry
entry: ; preds = %alloca
%2 = sext i32 %hours to i64, !dbg !1320
%3 = mul i64 3600, %2, !dbg !1320
store i64 %3, i64* %hrssec, !dbg !1322
%4 = sext i32 %minutes to i64, !dbg !1322
%5 = mul i64 60, %4, !dbg !1322
store i64 %5, i64* %minsec, !dbg !1323
%6 = load i64, i64* %hrssec, !dbg !1323
%7 = load i64, i64* %minsec, !dbg !1323
%8 = add i64 %6, %7, !dbg !1323
%9 = sext i32 %seconds to i64, !dbg !1323
%10 = add i64 %8, %9, !dbg !1323
store i64 %10, i64* %s, !dbg !1324
store i64 0, i64* %result, !dbg !1325
store i1 false, i1* %overflow, !dbg !1326
%11 = icmp sgt i32 %days, 0, !dbg !1327
br i1 %11, label %then, label %else, !dbg !1327
then: ; preds = %entry
%12 = sext i32 %days to i64, !dbg !1327
%13 = mul i64 86400, %12, !dbg !1327
store i64 %13, i64* %sd, !dbg !1328
%14 = load i64, i64* %sd, !dbg !1329
%15 = sext i32 %days to i64, !dbg !1329
%16 = icmp slt i64 %14, %15, !dbg !1329
br i1 %16, label %then1, label %else2, !dbg !1329
else: ; preds = %entry
%17 = icmp slt i32 %days, 0, !dbg !1330
br i1 %17, label %then7, label %else8, !dbg !1330
then1: ; preds = %then
store i1 true, i1* %overflow, !dbg !1331
br label %exit, !dbg !1331
else2: ; preds = %then
%18 = load i64, i64* %s, !dbg !1332
%19 = icmp slt i64 %18, 0, !dbg !1332
br i1 %19, label %then3, label %else4, !dbg !1332
exit: ; preds = %exit5, %then1
br label %exit6, !dbg !1333
then3: ; preds = %else2
%20 = load i64, i64* %s, !dbg !1332
store i64 %20, i64* %temp, !dbg !1334
%21 = load i64, i64* %s, !dbg !1334
%22 = load i64, i64* %sd, !dbg !1334
%23 = add i64 %21, %22, !dbg !1334
store i64 %23, i64* %s, !dbg !1335
%24 = load i64, i64* %temp, !dbg !1335
%25 = load i64, i64* %s, !dbg !1335
%26 = icmp sgt i64 %24, %25, !dbg !1335
store i1 %26, i1* %overflow, !dbg !1336
br label %exit5, !dbg !1336
else4: ; preds = %else2
%27 = load i64, i64* %s, !dbg !1336
%28 = load i64, i64* %sd, !dbg !1336
%29 = add i64 %27, %28, !dbg !1336
store i64 %29, i64* %s, !dbg !1337
%30 = load i64, i64* %s, !dbg !1337
%31 = icmp slt i64 %30, 0, !dbg !1337
store i1 %31, i1* %overflow, !dbg !1333
br label %exit5, !dbg !1333
exit5: ; preds = %else4, %then3
br label %exit, !dbg !1333
exit6: ; preds = %exit15, %exit
%32 = load i1, i1* %overflow, !dbg !1338
br i1 %32, label %then16, label %else17, !dbg !1338
then7: ; preds = %else
%33 = sext i32 %days to i64, !dbg !1330
%34 = mul i64 86400, %33, !dbg !1330
store i64 %34, i64* %sd, !dbg !1339
%35 = load i64, i64* %sd, !dbg !1340
%36 = sext i32 %days to i64, !dbg !1340
%37 = icmp sgt i64 %35, %36, !dbg !1340
br i1 %37, label %then9, label %else10, !dbg !1340
else8: ; preds = %else
br label %exit15, !dbg !1341
then9: ; preds = %then7
store i1 true, i1* %overflow, !dbg !1342
br label %exit11, !dbg !1342
else10: ; preds = %then7
%38 = load i64, i64* %s, !dbg !1343
%39 = icmp sle i64 %38, 0, !dbg !1343
br i1 %39, label %then12, label %else13, !dbg !1343
exit11: ; preds = %exit14, %then9
br label %exit15, !dbg !1341
then12: ; preds = %else10
%40 = load i64, i64* %s, !dbg !1343
%41 = load i64, i64* %sd, !dbg !1343
%42 = add i64 %40, %41, !dbg !1343
store i64 %42, i64* %s, !dbg !1344
%43 = load i64, i64* %s, !dbg !1344
%44 = icmp sgt i64 %43, 0, !dbg !1344
store i1 %44, i1* %overflow, !dbg !1345
br label %exit14, !dbg !1345
else13: ; preds = %else10
%45 = load i64, i64* %s, !dbg !1345
store i64 %45, i64* %nanos, !dbg !1346
%46 = load i64, i64* %s, !dbg !1346
%47 = load i64, i64* %sd, !dbg !1346
%48 = add i64 %46, %47, !dbg !1346
store i64 %48, i64* %s, !dbg !1347
%49 = load i64, i64* %s, !dbg !1347
%50 = load i64, i64* %nanos, !dbg !1347
%51 = icmp sgt i64 %49, %50, !dbg !1347
store i1 %51, i1* %overflow, !dbg !1341
br label %exit14, !dbg !1341
exit14: ; preds = %else13, %then12
br label %exit11, !dbg !1341
exit15: ; preds = %else8, %exit11
br label %exit6, !dbg !1341
then16: ; preds = %exit6
br i1 %raise_exception, label %then18, label %else19, !dbg !1348
else17: ; preds = %exit6
%52 = load i64, i64* %s, !dbg !1321
%53 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, i32 0, i32 0, !dbg !1321
store i32 162, i32* %53, !dbg !1321
%54 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, i32 0, i32 1, !dbg !1321
%55 = bitcast [1 x i64]* %54 to i64*, !dbg !1321
store i64 %52, i64* %55, !dbg !1321
%56 = load %"(Int64 | Nil)", %"(Int64 | Nil)"* %1, !dbg !1321
ret %"(Int64 | Nil)" %56, !dbg !1321
then18: ; preds = %then16
%57 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [32 x i8] }* @"'Time::Span too big ...'" to %String*)), !dbg !1349
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %57), !dbg !1321
unreachable, !dbg !1321
else19: ; preds = %then16
%58 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 0, !dbg !1321
store i32 0, i32* %58, !dbg !1321
%59 = getelementptr inbounds %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, i32 0, i32 1, !dbg !1321
store [1 x i64] zeroinitializer, [1 x i64]* %59, !dbg !1321
%60 = load %"(Int64 | Nil)", %"(Int64 | Nil)"* %0, !dbg !1321
ret %"(Int64 | Nil)" %60, !dbg !1321
}
; Function Attrs: uwtable
define internal %"Time::Span" @"*Time::Span::new:seconds:nanoseconds<Int64, Int64>:Time::Span"(i64 %__temp_263, i64 %__temp_264) #0 !dbg !1350 {
alloca:
%_ = alloca %"Time::Span", !dbg !1351
%0 = alloca %"Time::Span", !dbg !1351
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Time::Span"* %0 to i8*, !dbg !1351
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 !1351
%2 = load %"Time::Span", %"Time::Span"* %0, !dbg !1351
store %"Time::Span" %2, %"Time::Span"* %_, !dbg !1351
%3 = call i32 @"*Time::Span#initialize:seconds:nanoseconds<Int64, Int64>:Int32"(%"Time::Span"* %_, i64 %__temp_263, i64 %__temp_264), !dbg !1351
%4 = load %"Time::Span", %"Time::Span"* %_, !dbg !1351
ret %"Time::Span" %4, !dbg !1351
}
; Function Attrs: uwtable
define internal i32 @"*Time::Span#initialize:seconds:nanoseconds<Int64, Int64>:Int32"(%"Time::Span"* %self, i64 %seconds, i64 %nanoseconds) #0 !dbg !1352 {
alloca:
%__temp_269 = alloca i1, !dbg !1353
%__temp_270 = alloca i1, !dbg !1353
%seconds1 = alloca i64, !dbg !1353
%nanoseconds2 = alloca i64, !dbg !1353
br label %entry
entry: ; preds = %alloca
store i64 %seconds, i64* %seconds1, !dbg !1353
store i64 %nanoseconds, i64* %nanoseconds2, !dbg !1353
%0 = load i64, i64* %seconds1, !dbg !1353
%1 = load i64, i64* %nanoseconds2, !dbg !1353
%2 = call i64 @"*Int64@Int#tdiv<Int64>:Int64"(i64 %1, i64 1000000000), !dbg !1354
%3 = add i64 %0, %2, !dbg !1354
store i64 %3, i64* %seconds1, !dbg !1355
%4 = load i64, i64* %nanoseconds2, !dbg !1355
%5 = call i64 @"*Int64@Int#remainder<Int64>:Int64"(i64 %4, i64 1000000000), !dbg !1356
store i64 %5, i64* %nanoseconds2, !dbg !1357
%6 = load i64, i64* %seconds1, !dbg !1358
%7 = icmp sgt i64 %6, 0, !dbg !1358
store i1 %7, i1* %__temp_269, !dbg !1358
br i1 %7, label %then3, label %else4, !dbg !1358
then: ; preds = %exit
%8 = load i64, i64* %seconds1, !dbg !1358
%9 = sub i64 %8, 1, !dbg !1358
store i64 %9, i64* %seconds1, !dbg !1359
%10 = load i64, i64* %nanoseconds2, !dbg !1359
%11 = add i64 %10, 1000000000, !dbg !1359
store i64 %11, i64* %nanoseconds2, !dbg !1360
br label %exit5, !dbg !1360
else: ; preds = %exit
%12 = load i64, i64* %seconds1, !dbg !1361
%13 = icmp slt i64 %12, 0, !dbg !1361
store i1 %13, i1* %__temp_270, !dbg !1361
br i1 %13, label %then8, label %else9, !dbg !1361
then3: ; preds = %entry
%14 = load i64, i64* %nanoseconds2, !dbg !1358
%15 = icmp slt i64 %14, 0, !dbg !1358
br label %exit, !dbg !1358
else4: ; preds = %entry
%16 = load i1, i1* %__temp_269, !dbg !1358
br label %exit, !dbg !1358
exit: ; preds = %else4, %then3
%17 = phi i1 [ %15, %then3 ], [ %16, %else4 ], !dbg !1358
br i1 %17, label %then, label %else, !dbg !1358
exit5: ; preds = %exit11, %then
%18 = load i64, i64* %seconds1, !dbg !1362
%19 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 0, !dbg !1363
store i64 %18, i64* %19, !dbg !1363
%20 = load i64, i64* %nanoseconds2, !dbg !1363
%21 = trunc i64 %20 to i32, !dbg !1363
%22 = getelementptr inbounds %"Time::Span", %"Time::Span"* %self, i32 0, i32 1, !dbg !1364
store i32 %21, i32* %22, !dbg !1364
ret i32 %21, !dbg !1364
then6: ; preds = %exit10
%23 = load i64, i64* %seconds1, !dbg !1361
%24 = add i64 %23, 1, !dbg !1361
store i64 %24, i64* %seconds1, !dbg !1365
%25 = load i64, i64* %nanoseconds2, !dbg !1365
%26 = sub i64 %25, 1000000000, !dbg !1365
store i64 %26, i64* %nanoseconds2, !dbg !1362
br label %exit11, !dbg !1362
else7: ; preds = %exit10
br label %exit11, !dbg !1362
then8: ; preds = %else
%27 = load i64, i64* %nanoseconds2, !dbg !1361
%28 = icmp sgt i64 %27, 0, !dbg !1361
br label %exit10, !dbg !1361
else9: ; preds = %else
%29 = load i1, i1* %__temp_270, !dbg !1361
br label %exit10, !dbg !1361
exit10: ; preds = %else9, %then8
%30 = phi i1 [ %28, %then8 ], [ %29, %else9 ], !dbg !1361
br i1 %30, label %then6, label %else7, !dbg !1361
exit11: ; preds = %else7, %then6
br label %exit5, !dbg !1362
}
; Function Attrs: uwtable
define internal i64 @"*Int64@Int#tdiv<Int64>:Int64"(i64 %self, i64 %other) #0 !dbg !1366 {
entry:
call void @"*Int64@Int#check_div_argument<Int64>:Nil"(i64 %self, i64 %other), !dbg !1367
%0 = sdiv i64 %self, %other, !dbg !1367
ret i64 %0, !dbg !1367
}
; Function Attrs: uwtable
define internal void @"*Int64@Int#check_div_argument<Int64>:Nil"(i64 %self, i64 %other) #0 !dbg !1368 {
alloca:
%__temp_268 = alloca i1, !dbg !1369
%__temp_267 = alloca i1, !dbg !1369
br label %entry
entry: ; preds = %alloca
%0 = icmp eq i64 %other, 0, !dbg !1370
br i1 %0, label %then, label %else, !dbg !1370
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !1371
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !1372
unreachable, !dbg !1372
else: ; preds = %entry
%2 = icmp slt i64 %self, 0, !dbg !1373
store i1 %2, i1* %__temp_268, !dbg !1373
br i1 %2, label %then5, label %else6, !dbg !1373
then1: ; preds = %exit7
%3 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Overflow: Int64::MI...'" to %String*)), !dbg !1373
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %3), !dbg !1373
unreachable, !dbg !1373
else2: ; preds = %exit7
ret void, !dbg !1373
then3: ; preds = %exit
%4 = icmp eq i64 %other, -1, !dbg !1373
br label %exit7, !dbg !1373
else4: ; preds = %exit
%5 = load i1, i1* %__temp_267, !dbg !1373
br label %exit7, !dbg !1373
then5: ; preds = %else
%6 = icmp eq i64 %self, -9223372036854775808, !dbg !1373
br label %exit, !dbg !1373
else6: ; preds = %else
%7 = load i1, i1* %__temp_268, !dbg !1373
br label %exit, !dbg !1373
exit: ; preds = %else6, %then5
%8 = phi i1 [ %6, %then5 ], [ %7, %else6 ], !dbg !1373
store i1 %8, i1* %__temp_267, !dbg !1373
br i1 %8, label %then3, label %else4, !dbg !1373
exit7: ; preds = %else4, %then3
%9 = phi i1 [ %4, %then3 ], [ %5, %else4 ], !dbg !1373
br i1 %9, label %then1, label %else2, !dbg !1373
}
; Function Attrs: uwtable
define internal i64 @"*Int64@Int#remainder<Int64>:Int64"(i64 %self, i64 %other) #0 !dbg !1374 {
entry:
%0 = icmp eq i64 %other, 0, !dbg !1375
br i1 %0, label %then, label %else, !dbg !1375
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !1376
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !1377
unreachable, !dbg !1377
else: ; preds = %entry
%2 = srem i64 %self, %other, !dbg !1377
ret i64 %2, !dbg !1377
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler#sleep<Time::Span>:Nil"(%"Crystal::Scheduler"* %self, %"Time::Span" %time) #0 !dbg !1378 {
alloca:
%time1 = alloca %"Time::Span", !dbg !1379
%0 = alloca %"Crystal::Event", !dbg !1380
br label %entry
entry: ; preds = %alloca
store %"Time::Span" %time, %"Time::Span"* %time1, !dbg !1379
%1 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 2, !dbg !1379
%2 = load %Fiber*, %Fiber** %1, !dbg !1379
%3 = call %"Crystal::Event" @"*Fiber#resume_event:Crystal::Event"(%Fiber* %2), !dbg !1380
store %"Crystal::Event" %3, %"Crystal::Event"* %0, !dbg !1380
%4 = load %"Time::Span", %"Time::Span"* %time1, !dbg !1380
%5 = call i32 @"*Crystal::Event#add<Time::Span>:Int32"(%"Crystal::Event"* %0, %"Time::Span" %4), !dbg !1380
call void @"*Crystal::Scheduler#reschedule:Nil"(%"Crystal::Scheduler"* %self), !dbg !1381
ret void, !dbg !1381
}
; Function Attrs: uwtable
define internal %"Crystal::Event" @"*Fiber#resume_event:Crystal::Event"(%Fiber* %self) #0 !dbg !1382 {
alloca:
%__temp_271 = alloca %"(Crystal::Event | Nil)", !dbg !1383
%0 = alloca %"Crystal::Event", !dbg !1384
br label %entry
entry: ; preds = %alloca
%1 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !1385
%2 = load %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)"* %1, !dbg !1385
store %"(Crystal::Event | Nil)" %2, %"(Crystal::Event | Nil)"* %__temp_271, !dbg !1385
%3 = getelementptr inbounds %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)"* %1, i32 0, i32 0, !dbg !1385
%4 = load i32, i32* %3, !dbg !1385
%5 = icmp eq i32 %4, 0, !dbg !1385
%6 = xor i1 %5, true, !dbg !1385
%7 = and i1 true, %6, !dbg !1385
br i1 %7, label %then, label %else, !dbg !1385
then: ; preds = %entry
%8 = getelementptr inbounds %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)"* %__temp_271, i32 0, i32 1, !dbg !1385
%9 = bitcast [2 x i64]* %8 to %"Crystal::Event"*, !dbg !1385
br label %exit, !dbg !1385
else: ; preds = %entry
%10 = call %"Crystal::Event" @"*Crystal::EventLoop::create_resume_event<Fiber>:Crystal::Event"(%Fiber* %self), !dbg !1384
store %"Crystal::Event" %10, %"Crystal::Event"* %0, !dbg !1384
%11 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 3, !dbg !1385
%12 = load %"Crystal::Event", %"Crystal::Event"* %0, !dbg !1385
%13 = getelementptr inbounds %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)"* %11, i32 0, i32 0, !dbg !1385
store i32 412, i32* %13, !dbg !1385
%14 = getelementptr inbounds %"(Crystal::Event | Nil)", %"(Crystal::Event | Nil)"* %11, i32 0, i32 1, !dbg !1385
%15 = bitcast [2 x i64]* %14 to %"Crystal::Event"*, !dbg !1385
store %"Crystal::Event" %12, %"Crystal::Event"* %15, !dbg !1385
br label %exit, !dbg !1385
exit: ; preds = %else, %then
%16 = phi %"Crystal::Event"* [ %9, %then ], [ %0, %else ], !dbg !1385
%17 = load %"Crystal::Event", %"Crystal::Event"* %16, !dbg !1385
ret %"Crystal::Event" %17, !dbg !1385
}
; Function Attrs: uwtable
define internal %"Crystal::Event" @"*Crystal::EventLoop::create_resume_event<Fiber>:Crystal::Event"(%Fiber* %fiber) #0 !dbg !1386 {
alloca:
%0 = alloca %"->", !dbg !1388
%1 = alloca %"Crystal::Event", !dbg !1389
br label %entry
entry: ; preds = %alloca
%2 = call %"Crystal::Event::Base"* @"~Crystal::EventLoop::eb:read"(), !dbg !1388
%3 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 0, !dbg !1388
store i8* bitcast (void (i32, i16, i8*)* @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@/usr/share/crystal/src/crystal/event_loop.cr:20" to i8*), i8** %3, !dbg !1388
%4 = getelementptr inbounds %"->", %"->"* %0, i32 0, i32 1, !dbg !1388
store i8* null, i8** %4, !dbg !1388
%5 = load %"->", %"->"* %0, !dbg !1388
%6 = call %"Crystal::Event" @"*Crystal::Event::Base#new_event<Int32, LibEvent2::EventFlags, Fiber, &Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)>:Crystal::Event"(%"Crystal::Event::Base"* %2, i32 -1, i16 0, %Fiber* %fiber, %"->" %5), !dbg !1389
store %"Crystal::Event" %6, %"Crystal::Event"* %1, !dbg !1389
%7 = load %"Crystal::Event", %"Crystal::Event"* %1, !dbg !1389
ret %"Crystal::Event" %7, !dbg !1389
}
define internal %"Crystal::Event::Base"* @"~Crystal::EventLoop::eb:read"() {
entry:
%0 = load i1, i1* @"Crystal::EventLoop::eb:init", !dbg !1388
br i1 %0, label %initialized, label %not_initialized, !dbg !1388
initialized: ; preds = %not_initialized, %entry
ret %"Crystal::Event::Base"* @"Crystal::EventLoop::eb", !dbg !1388
not_initialized: ; preds = %entry
store i1 true, i1* @"Crystal::EventLoop::eb:init", !dbg !1388
call void @"~Crystal::EventLoop::eb:init"(), !dbg !1388
br label %initialized, !dbg !1388
}
; Function Attrs: uwtable
define internal void @"~procProc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@/usr/share/crystal/src/crystal/event_loop.cr:20"(i32 %s, i16 %flags, i8* %data) #0 !dbg !1390 {
entry:
%0 = bitcast i8* %data to %Fiber*, !dbg !1391
call void @"*Fiber#resume:Nil"(%Fiber* %0), !dbg !1392
ret void, !dbg !1392
}
; Function Attrs: uwtable
define internal void @"*Fiber#resume:Nil"(%Fiber* %self) #0 !dbg !1393 {
entry:
call void @"*Crystal::Scheduler::resume<Fiber>:Nil"(%Fiber* %self), !dbg !1394
ret void, !dbg !1394
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler::resume<Fiber>:Nil"(%Fiber* %fiber) #0 !dbg !1395 {
entry:
%0 = call %Thread* @"*Thread::current:Thread"(), !dbg !1396
%1 = call %"Crystal::Scheduler"* @"*Thread#scheduler:Crystal::Scheduler"(%Thread* %0), !dbg !1396
call void @"*Crystal::Scheduler#resume<Fiber>:Nil"(%"Crystal::Scheduler"* %1, %Fiber* %fiber), !dbg !1396
ret void, !dbg !1396
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler#resume<Fiber>:Nil"(%"Crystal::Scheduler"* %self, %Fiber* %fiber) #0 !dbg !1397 {
alloca:
%__temp_258 = alloca %Fiber*, !dbg !1398
%__temp_259 = alloca %Fiber*, !dbg !1398
%current = alloca %Fiber*, !dbg !1398
br label %entry
entry: ; preds = %alloca
call void @"*Crystal::Scheduler#validate_resumable<Fiber>:Nil"(%"Crystal::Scheduler"* %self, %Fiber* %fiber), !dbg !1399
%0 = getelementptr inbounds %Fiber, %Fiber* %fiber, i32 0, i32 4, !dbg !1399
%1 = load i8*, i8** %0, !dbg !1399
%2 = call i8* @"*GC::set_stackbottom<Pointer(Void)>:Pointer(Void)"(i8* %1), !dbg !1400
%3 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 2, !dbg !1400
%4 = load %Fiber*, %Fiber** %3, !dbg !1400
store %Fiber* %4, %Fiber** %__temp_258, !dbg !1401
store %Fiber* %fiber, %Fiber** %__temp_259, !dbg !1401
%5 = load %Fiber*, %Fiber** %__temp_258, !dbg !1401
store %Fiber* %5, %Fiber** %current, !dbg !1401
%6 = load %Fiber*, %Fiber** %__temp_259, !dbg !1401
%7 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %self, i32 0, i32 2, !dbg !1402
store %Fiber* %6, %Fiber** %7, !dbg !1402
%8 = load %Fiber*, %Fiber** %current, !dbg !1402
%9 = getelementptr inbounds %Fiber, %Fiber* %8, i32 0, i32 1, !dbg !1402
%10 = getelementptr inbounds %Fiber, %Fiber* %fiber, i32 0, i32 1, !dbg !1402
call void @"*Fiber::swapcontext<Pointer(Fiber::Context), Pointer(Fiber::Context)>:Nil"(%"struct.Fiber::Context"* %9, %"struct.Fiber::Context"* %10), !dbg !1403
ret void, !dbg !1403
}
; Function Attrs: uwtable
define internal void @"*Crystal::Scheduler#validate_resumable<Fiber>:Nil"(%"Crystal::Scheduler"* %self, %Fiber* %fiber) #0 !dbg !1404 {
entry:
%0 = call i1 @"*Fiber#resumable?:Bool"(%Fiber* %fiber), !dbg !1405
br i1 %0, label %then, label %else, !dbg !1405
then: ; preds = %entry
ret void, !dbg !1405
else: ; preds = %entry
%1 = call i1 @"*Fiber#dead?:Bool"(%Fiber* %fiber), !dbg !1406
br i1 %1, label %then1, label %else2, !dbg !1406
then1: ; preds = %else
call void @"*Crystal::Scheduler#fatal_resume_error<Fiber, String>:NoReturn"(%"Crystal::Scheduler"* %self, %Fiber* %fiber, %String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'tried to resume a d...'" to %String*)), !dbg !1407
unreachable, !dbg !1407
else2: ; preds = %else
call void @"*Crystal::Scheduler#fatal_resume_error<Fiber, String>:NoReturn"(%"Crystal::Scheduler"* %self, %Fiber* %fiber, %String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'can't resume a runn...'" to %String*)), !dbg !1408
unreachable, !dbg !1408
}
; Function Attrs: uwtable
define internal i1 @"*Fiber#resumable?:Bool"(%Fiber* %self) #0 !dbg !1409 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 1, !dbg !1410
%1 = getelementptr inbounds %"struct.Fiber::Context", %"struct.Fiber::Context"* %0, i32 0, i32 1, !dbg !1410
%2 = load i64, i64* %1, !dbg !1410
%3 = icmp eq i64 %2, 1, !dbg !1410
ret i1 %3, !dbg !1410
}
; Function Attrs: uwtable
define internal i1 @"*Fiber#dead?:Bool"(%Fiber* %self) #0 !dbg !1411 {
entry:
%0 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 8, !dbg !1412
%1 = load i1, i1* %0, !dbg !1412
%2 = icmp eq i1 %1, false, !dbg !1412
ret i1 %2, !dbg !1412
}
; Function Attrs: noreturn uwtable
define internal void @"*Crystal::Scheduler#fatal_resume_error<Fiber, String>:NoReturn"(%"Crystal::Scheduler"* %self, %Fiber* %fiber, %String* %message) #1 !dbg !1413 {
alloca:
%line = alloca %String*, !dbg !1414
%i = alloca i32, !dbg !1415
%i1 = alloca i32, !dbg !1415
br label %entry
entry: ; preds = %alloca
%0 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1416
%1 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %0, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'\0A'" to %String*)), !dbg !1416
%2 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'FATAL: '" to %String*)), !dbg !1416
%3 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %2, %String* %message), !dbg !1416
%4 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %3, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*)), !dbg !1416
%5 = call %"String::Builder"* @"*String::Builder@IO#<<<Fiber>:String::Builder"(%"String::Builder"* %4, %Fiber* %fiber), !dbg !1416
%6 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %5, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'\0A'" to %String*)), !dbg !1416
%7 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %6), !dbg !1416
%8 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %7), !dbg !1416
%9 = call i32 (i32, i8*, ...) @dprintf(i32 2, i8* %8), !dbg !1417
%10 = call %"Array(String)"* @"*caller:Array(String)"(), !dbg !1414
store i32 0, i32* %i1, !dbg !1418
br label %while, !dbg !1418
while: ; preds = %body, %entry
%11 = load i32, i32* %i1, !dbg !1419
%12 = getelementptr inbounds %"Array(String)", %"Array(String)"* %10, i32 0, i32 1, !dbg !1419
%13 = load i32, i32* %12, !dbg !1419
%14 = icmp slt i32 %11, %13, !dbg !1419
br i1 %14, label %body, label %exit, !dbg !1419
body: ; preds = %while
%15 = load i32, i32* %i1, !dbg !1419
store i32 %15, i32* %i, !dbg !1419
%16 = load i32, i32* %i, !dbg !1419
%17 = call %String* @"*Array(String)@Array(T)#unsafe_fetch<Int32>:String"(%"Array(String)"* %10, i32 %16), !dbg !1420
store %String* %17, %String** %line, !dbg !1420
%18 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1421
%19 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %18, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"' from '" to %String*)), !dbg !1421
%20 = load %String*, %String** %line, !dbg !1421
%21 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %19, %String* %20), !dbg !1421
%22 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %21, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'\0A'" to %String*)), !dbg !1421
%23 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %22), !dbg !1421
%24 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %23), !dbg !1421
%25 = call i32 (i32, i8*, ...) @dprintf(i32 2, i8* %24), !dbg !1422
%26 = load i32, i32* %i1, !dbg !1422
%27 = add i32 %26, 1, !dbg !1422
store i32 %27, i32* %i1, !dbg !1423
br label %while, !dbg !1423
exit: ; preds = %while
call void @"*exit<Int32>:NoReturn"(i32 1), !dbg !1424
unreachable, !dbg !1424
}
; Function Attrs: uwtable
define internal %"String::Builder"* @"*String::Builder@IO#<<<Fiber>:String::Builder"(%"String::Builder"* %self, %Fiber* %obj) #0 !dbg !1425 {
entry:
call void @"*Fiber#to_s<String::Builder>:Nil"(%Fiber* %obj, %"String::Builder"* %self), !dbg !1426
ret %"String::Builder"* %self, !dbg !1426
}
; Function Attrs: uwtable
define internal void @"*Fiber#to_s<String::Builder>:Nil"(%Fiber* %self, %"String::Builder"* %io) #0 !dbg !1427 {
alloca:
%name = alloca %String*, !dbg !1428
br label %entry
entry: ; preds = %alloca
%0 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %io, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'#<'" to %String*)), !dbg !1429
%1 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %0, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'Fiber'" to %String*)), !dbg !1429
%2 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"':0x'" to %String*)), !dbg !1429
%3 = ptrtoint %Fiber* %self to i64, !dbg !1429
call void @"*UInt64@Int#to_s<Int32, String::Builder>:Nil"(i64 %3, i32 16, %"String::Builder"* %io), !dbg !1430
%4 = getelementptr inbounds %Fiber, %Fiber* %self, i32 0, i32 5, !dbg !1431
%5 = load %String*, %String** %4, !dbg !1431
store %String* %5, %String** %name, !dbg !1432
%6 = icmp ne %String* %5, null, !dbg !1432
br i1 %6, label %then, label %else, !dbg !1432
then: ; preds = %entry
%7 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %io, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*)), !dbg !1433
%8 = load %String*, %String** %name, !dbg !1433
%9 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %7, %String* %8), !dbg !1433
br label %exit, !dbg !1433
else: ; preds = %entry
br label %exit, !dbg !1433
exit: ; preds = %else, %then
%10 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 62), !dbg !1434
ret void, !dbg !1434
}
; Function Attrs: uwtable
define internal void @"*UInt64@Int#to_s<Int32, String::Builder>:Nil"(i64 %self, i32 %base, %"String::Builder"* %io) #0 !dbg !1435 {
alloca:
%upcase = alloca i1, !dbg !1436
%__temp_50 = alloca i1, !dbg !1436
%__temp_49 = alloca i1, !dbg !1436
%ptr = alloca i8*, !dbg !1437
%count = alloca i32, !dbg !1437
%base16 = alloca i32, !dbg !1437
%upcase17 = alloca i1, !dbg !1437
%chars = alloca [129 x i8], !dbg !1437
%ptr_end = alloca i8*, !dbg !1437
%ptr18 = alloca i8*, !dbg !1437
%num = alloca i64, !dbg !1437
%neg = alloca i1, !dbg !1437
%digits = alloca i8*, !dbg !1437
%count19 = alloca i32, !dbg !1437
%0 = alloca %"Slice(UInt8)", !dbg !1438
br label %entry
entry: ; preds = %alloca
store i1 false, i1* %upcase, !dbg !1439
%1 = icmp sle i32 2, %base, !dbg !1440
store i1 %1, i1* %__temp_50, !dbg !1440
br i1 %1, label %then3, label %else4, !dbg !1440
then: ; preds = %exit5
br label %exit6, !dbg !1440
else: ; preds = %exit5
%2 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1441
%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 !1441
%4 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %3, i32 %base), !dbg !1441
%5 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %4), !dbg !1441
%6 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %5), !dbg !1442
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %6), !dbg !1443
unreachable, !dbg !1443
then1: ; preds = %exit
%7 = load i1, i1* %__temp_49, !dbg !1440
br label %exit5, !dbg !1440
else2: ; preds = %exit
%8 = icmp eq i32 %base, 62, !dbg !1440
br label %exit5, !dbg !1440
then3: ; preds = %entry
%9 = icmp sle i32 %base, 36, !dbg !1440
br label %exit, !dbg !1440
else4: ; preds = %entry
%10 = load i1, i1* %__temp_50, !dbg !1440
br label %exit, !dbg !1440
exit: ; preds = %else4, %then3
%11 = phi i1 [ %9, %then3 ], [ %10, %else4 ], !dbg !1440
store i1 %11, i1* %__temp_49, !dbg !1440
br i1 %11, label %then1, label %else2, !dbg !1440
exit5: ; preds = %else2, %then1
%12 = phi i1 [ %7, %then1 ], [ %8, %else2 ], !dbg !1440
br i1 %12, label %then, label %else, !dbg !1440
exit6: ; preds = %then
%13 = load i1, i1* %upcase, !dbg !1444
br i1 %13, label %then9, label %else10, !dbg !1444
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 !1445
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %14), !dbg !1446
unreachable, !dbg !1446
else8: ; preds = %exit11
%15 = call i1 @"*Int32@Object#===<UInt64>:Bool"(i32 0, i64 %self), !dbg !1447
br i1 %15, label %then12, label %else13, !dbg !1447
then9: ; preds = %exit6
%16 = icmp eq i32 %base, 62, !dbg !1444
br label %exit11, !dbg !1444
else10: ; preds = %exit6
%17 = load i1, i1* %upcase, !dbg !1444
br label %exit11, !dbg !1444
exit11: ; preds = %else10, %then9
%18 = phi i1 [ %16, %then9 ], [ %17, %else10 ], !dbg !1444
br i1 %18, label %then7, label %else8, !dbg !1444
then12: ; preds = %else8
%19 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 48), !dbg !1448
ret void, !dbg !1448
else13: ; preds = %else8
%20 = call i1 @"*Int32@Object#===<UInt64>:Bool"(i32 1, i64 %self), !dbg !1449
br i1 %20, label %then14, label %else15, !dbg !1449
then14: ; preds = %else13
%21 = call %"String::Builder"* @"*String::Builder@IO#<<<Char>:String::Builder"(%"String::Builder"* %io, i32 49), !dbg !1450
ret void, !dbg !1450
else15: ; preds = %else13
%22 = load i1, i1* %upcase, !dbg !1450
store i32 %base, i32* %base16, !dbg !1437
store i1 %22, i1* %upcase17, !dbg !1437
%23 = call i8* @"*StaticArray(UInt8, 129)@StaticArray(T, N)#to_unsafe:Pointer(UInt8)"([129 x i8]* %chars), !dbg !1451
%24 = call i8* @"*Pointer(UInt8)@Pointer(T)#+<Int32>:Pointer(UInt8)"(i8* %23, i32 128), !dbg !1451
store i8* %24, i8** %ptr_end, !dbg !1452
%25 = load i8*, i8** %ptr_end, !dbg !1452
store i8* %25, i8** %ptr18, !dbg !1453
store i64 %self, i64* %num, !dbg !1454
%26 = load i64, i64* %num, !dbg !1454
%27 = icmp ult i64 %26, 0, !dbg !1454
%28 = and i1 true, %27, !dbg !1454
store i1 %28, i1* %neg, !dbg !1455
%29 = load i32, i32* %base16, !dbg !1456
%30 = icmp eq i32 %29, 62, !dbg !1456
br i1 %30, label %then20, label %else21, !dbg !1456
then20: ; preds = %else15
%31 = call %String** @"~Int::DIGITS_BASE62:read"(), !dbg !1456
%32 = load %String*, %String** %31, !dbg !1456
br label %exit22, !dbg !1456
else21: ; preds = %else15
%33 = load i1, i1* %upcase17, !dbg !1457
br i1 %33, label %then23, label %else24, !dbg !1457
exit22: ; preds = %exit25, %then20
%34 = phi %String* [ %32, %then20 ], [ %40, %exit25 ], !dbg !1457
%35 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %34), !dbg !1458
store i8* %35, i8** %digits, !dbg !1459
br label %while, !dbg !1459
then23: ; preds = %else21
%36 = call %String** @"~Int::DIGITS_UPCASE:read"(), !dbg !1457
%37 = load %String*, %String** %36, !dbg !1457
br label %exit25, !dbg !1457
else24: ; preds = %else21
%38 = call %String** @"~Int::DIGITS_DOWNCASE:read"(), !dbg !1457
%39 = load %String*, %String** %38, !dbg !1457
br label %exit25, !dbg !1457
exit25: ; preds = %else24, %then23
%40 = phi %String* [ %37, %then23 ], [ %39, %else24 ], !dbg !1457
br label %exit22, !dbg !1457
while: ; preds = %body, %exit22
%41 = load i64, i64* %num, !dbg !1460
%42 = icmp ne i64 %41, 0, !dbg !1460
%43 = or i1 false, %42, !dbg !1460
br i1 %43, label %body, label %exit26, !dbg !1460
body: ; preds = %while
%44 = load i8*, i8** %ptr18, !dbg !1460
%45 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %44, i32 1), !dbg !1461
store i8* %45, i8** %ptr18, !dbg !1461
%46 = load i8*, i8** %ptr18, !dbg !1461
%47 = load i8*, i8** %digits, !dbg !1461
%48 = load i64, i64* %num, !dbg !1461
%49 = load i32, i32* %base16, !dbg !1461
%50 = call i64 @"*UInt64@Int#remainder<Int32>:UInt64"(i64 %48, i32 %49), !dbg !1462
%51 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<UInt64>:UInt8"(i8* %47, i64 %50), !dbg !1463
store i8 %51, i8* %46, !dbg !1463
%52 = load i64, i64* %num, !dbg !1463
%53 = load i32, i32* %base16, !dbg !1463
%54 = call i64 @"*UInt64@Int#tdiv<Int32>:UInt64"(i64 %52, i32 %53), !dbg !1464
store i64 %54, i64* %num, !dbg !1465
br label %while, !dbg !1465
exit26: ; preds = %while
%55 = load i1, i1* %neg, !dbg !1466
br i1 %55, label %then27, label %else28, !dbg !1466
then27: ; preds = %exit26
%56 = load i8*, i8** %ptr18, !dbg !1466
%57 = call i8* @"*Pointer(UInt8)@Pointer(T)#-<Int32>:Pointer(UInt8)"(i8* %56, i32 1), !dbg !1467
store i8* %57, i8** %ptr18, !dbg !1467
%58 = load i8*, i8** %ptr18, !dbg !1467
store i8 45, i8* %58, !dbg !1467
br label %exit29, !dbg !1467
else28: ; preds = %exit26
br label %exit29, !dbg !1467
exit29: ; preds = %else28, %then27
%59 = load i8*, i8** %ptr_end, !dbg !1467
%60 = load i8*, i8** %ptr18, !dbg !1467
%61 = ptrtoint i8* %59 to i64, !dbg !1467
%62 = ptrtoint i8* %60 to i64, !dbg !1467
%63 = sub i64 %61, %62, !dbg !1467
%64 = sdiv exact i64 %63, ptrtoint (i8* getelementptr inbounds (i8, i8* null, i32 1) to i64), !dbg !1467
%65 = trunc i64 %64 to i32, !dbg !1467
store i32 %65, i32* %count19, !dbg !1468
%66 = load i8*, i8** %ptr18, !dbg !1468
%67 = load i32, i32* %count19, !dbg !1468
store i8* %66, i8** %ptr, !dbg !1468
store i32 %67, i32* %count, !dbg !1468
%68 = load i8*, i8** %ptr, !dbg !1468
%69 = load i32, i32* %count, !dbg !1468
%70 = call %"Slice(UInt8)" @"*Slice(T)::new<Pointer(UInt8), Int32>:Slice(UInt8)"(i8* %68, i32 %69), !dbg !1438
store %"Slice(UInt8)" %70, %"Slice(UInt8)"* %0, !dbg !1438
%71 = load %"Slice(UInt8)", %"Slice(UInt8)"* %0, !dbg !1438
call void @"*String::Builder@IO#write_utf8<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %71), !dbg !1469
ret void, !dbg !1469
}
; Function Attrs: uwtable
define internal i1 @"*Int32@Object#===<UInt64>:Bool"(i32 %self, i64 %other) #0 !dbg !1470 {
entry:
%0 = sext i32 %self to i64, !dbg !1471
%1 = icmp sge i64 %0, 0, !dbg !1471
%2 = icmp eq i64 %0, %other, !dbg !1471
%3 = and i1 %1, %2, !dbg !1471
ret i1 %3, !dbg !1471
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Int#remainder<Int32>:UInt64"(i64 %self, i32 %other) #0 !dbg !1472 {
entry:
%0 = icmp eq i32 %other, 0, !dbg !1473
br i1 %0, label %then, label %else, !dbg !1473
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !1474
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !1475
unreachable, !dbg !1475
else: ; preds = %entry
%2 = sext i32 %other to i64, !dbg !1475
%3 = urem i64 %self, %2, !dbg !1475
ret i64 %3, !dbg !1475
}
; Function Attrs: uwtable
define internal i64 @"*UInt64@Int#tdiv<Int32>:UInt64"(i64 %self, i32 %other) #0 !dbg !1476 {
entry:
call void @"*UInt64@Int#check_div_argument<Int32>:Nil"(i64 %self, i32 %other), !dbg !1477
%0 = sext i32 %other to i64, !dbg !1477
%1 = udiv i64 %self, %0, !dbg !1477
ret i64 %1, !dbg !1477
}
; Function Attrs: uwtable
define internal void @"*UInt64@Int#check_div_argument<Int32>:Nil"(i64 %self, i32 %other) #0 !dbg !1478 {
alloca:
%__temp_62 = alloca i1, !dbg !1479
%__temp_61 = alloca i1, !dbg !1479
br label %entry
entry: ; preds = %alloca
%0 = icmp eq i32 %other, 0, !dbg !1480
br i1 %0, label %then, label %else, !dbg !1480
then: ; preds = %entry
%1 = call %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"(), !dbg !1481
call void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %1), !dbg !1482
unreachable, !dbg !1482
else: ; preds = %entry
%2 = icmp ult i64 %self, 0, !dbg !1483
%3 = and i1 true, %2, !dbg !1483
store i1 %3, i1* %__temp_62, !dbg !1483
br i1 %3, label %then5, label %else6, !dbg !1483
then1: ; preds = %exit7
%4 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [27 x i8] }* @"'Overflow: UInt64::M...'" to %String*)), !dbg !1483
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %4), !dbg !1483
unreachable, !dbg !1483
else2: ; preds = %exit7
ret void, !dbg !1483
then3: ; preds = %exit
%5 = icmp eq i32 %other, -1, !dbg !1483
br label %exit7, !dbg !1483
else4: ; preds = %exit
%6 = load i1, i1* %__temp_61, !dbg !1483
br label %exit7, !dbg !1483
then5: ; preds = %else
%7 = icmp eq i64 %self, 0, !dbg !1483
br label %exit, !dbg !1483
else6: ; preds = %else
%8 = load i1, i1* %__temp_62, !dbg !1483
br label %exit, !dbg !1483
exit: ; preds = %else6, %then5
%9 = phi i1 [ %7, %then5 ], [ %8, %else6 ], !dbg !1483
store i1 %9, i1* %__temp_61, !dbg !1483
br i1 %9, label %then3, label %else4, !dbg !1483
exit7: ; preds = %else4, %then3
%10 = phi i1 [ %5, %then3 ], [ %6, %else4 ], !dbg !1483
br i1 %10, label %then1, label %else2, !dbg !1483
}
declare i32 @dprintf(i32, i8*, ...)
; Function Attrs: uwtable
define internal %"Array(String)"* @"*caller:Array(String)"() #0 !dbg !1484 {
alloca:
%0 = alloca %CallStack, !dbg !1485
br label %entry
entry: ; preds = %alloca
%1 = call %CallStack @"*CallStack::new:CallStack"(), !dbg !1485
store %CallStack %1, %CallStack* %0, !dbg !1485
%2 = call %"Array(String)"* @"*CallStack#printable_backtrace:Array(String)"(%CallStack* %0), !dbg !1485
ret %"Array(String)"* %2, !dbg !1485
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack#printable_backtrace:Array(String)"(%CallStack* %self) #0 !dbg !1486 {
alloca:
%__temp_63 = alloca %"Array(String)"*, !dbg !1487
br label %entry
entry: ; preds = %alloca
%0 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 1, !dbg !1488
%1 = load %"Array(String)"*, %"Array(String)"** %0, !dbg !1488
store %"Array(String)"* %1, %"Array(String)"** %__temp_63, !dbg !1488
%2 = icmp ne %"Array(String)"* %1, null, !dbg !1488
br i1 %2, label %then, label %else, !dbg !1488
then: ; preds = %entry
%3 = load %"Array(String)"*, %"Array(String)"** %__temp_63, !dbg !1488
br label %exit, !dbg !1488
else: ; preds = %entry
%4 = call %"Array(String)"* @"*CallStack#decode_backtrace:Array(String)"(%CallStack* %self), !dbg !1489
%5 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 1, !dbg !1488
store %"Array(String)"* %4, %"Array(String)"** %5, !dbg !1488
br label %exit, !dbg !1488
exit: ; preds = %else, %then
%6 = phi %"Array(String)"* [ %3, %then ], [ %4, %else ], !dbg !1488
ret %"Array(String)"* %6, !dbg !1488
}
; Function Attrs: uwtable
define internal %"Array(String)"* @"*CallStack#decode_backtrace:Array(String)"(%CallStack* %self) #0 !dbg !1490 {
alloca:
%show_full_info = alloca i1, !dbg !1491
%ip = alloca i8*, !dbg !1492
%pc = alloca i64, !dbg !1492
%__temp_64 = alloca %"Tuple(String, Int32, Int32)", !dbg !1492
%file = alloca %String*, !dbg !1492
%line = alloca %"(Int32 | String)", !dbg !1492
%column = alloca i32, !dbg !1492
%file_line_column = alloca %String*, !dbg !1492
store %String* null, %String** %file_line_column, !dbg !1492
%name = alloca %String*, !dbg !1492
%function = alloca %String*, !dbg !1492
%frame = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !1492
%__temp_249 = alloca %"Tuple(Int64, Pointer(UInt8))", !dbg !1492
%sname = alloca i8*, !dbg !1492
%__temp_251 = alloca i1, !dbg !1492
%__temp_250 = alloca i1, !dbg !1492
%__temp_253 = alloca %"Tuple(Int64, Pointer(UInt8))", !dbg !1492
%ary = alloca %"Array(String)"*, !dbg !1492
%e = alloca i8*, !dbg !1493
%v = alloca %String*, !dbg !1493
%i = alloca i32, !dbg !1494
%i3 = alloca i32, !dbg !1494
%0 = alloca %"Tuple(String, Int32, Int32)", !dbg !1495
%1 = alloca %"(Bool | String)", !dbg !1496
%2 = alloca %"(Bool | String)", !dbg !1496
%3 = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !1497
%4 = alloca %"(Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !1498
%5 = alloca %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", !dbg !1499
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 !1500
%7 = icmp eq %String* %6, null, !dbg !1500
%8 = select i1 %7, i32 0, i32 1, !dbg !1500
%9 = icmp eq i32 0, %8, !dbg !1500
br i1 %9, label %current_def, label %next_def, !dbg !1500
current_def: ; preds = %entry
br label %exit, !dbg !1500
next_def: ; preds = %entry
%10 = icmp eq i32 1, %8, !dbg !1500
br i1 %10, label %current_def1, label %next_def2, !dbg !1500
exit: ; preds = %current_def1, %current_def
%11 = phi i1 [ false, %current_def ], [ %15, %current_def1 ], !dbg !1500
store i1 %11, i1* %show_full_info, !dbg !1501
%12 = getelementptr inbounds %CallStack, %CallStack* %self, i32 0, i32 0, !dbg !1501
%13 = load %"Array(Pointer(Void))"*, %"Array(Pointer(Void))"** %12, !dbg !1501
%14 = call %"Array(String)"* @"*Array(String)@Array(T)::new:Array(String)"(i32 513), !dbg !1502
store %"Array(String)"* %14, %"Array(String)"** %ary, !dbg !1503
store i32 0, i32* %i3, !dbg !1504
br label %while, !dbg !1504
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 !1500
br label %exit, !dbg !1500
next_def2: ; preds = %next_def
unreachable, !dbg !1500
while: ; preds = %exit40, %exit
%16 = load i32, i32* %i3, !dbg !1505
%17 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %13, i32 0, i32 1, !dbg !1505
%18 = load i32, i32* %17, !dbg !1505
%19 = icmp slt i32 %16, %18, !dbg !1505
br i1 %19, label %body, label %exit4, !dbg !1505
body: ; preds = %while
%20 = load i32, i32* %i3, !dbg !1505
store i32 %20, i32* %i, !dbg !1505
%21 = load i32, i32* %i, !dbg !1505
%22 = call i8* @"*Array(Pointer(Void))@Array(T)#unsafe_fetch<Int32>:Pointer(Void)"(%"Array(Pointer(Void))"* %13, i32 %21), !dbg !1506
store i8* %22, i8** %e, !dbg !1506
%23 = load i8*, i8** %e, !dbg !1506
store i8* %23, i8** %ip, !dbg !1506
store %String* null, %String** %file_line_column, !dbg !1506
%24 = load i8*, i8** %ip, !dbg !1506
%25 = call i64 @"*CallStack::decode_address<Pointer(Void)>:UInt64"(i8* %24), !dbg !1507
store i64 %25, i64* %pc, !dbg !1508
%26 = load i64, i64* %pc, !dbg !1508
%27 = call %"Tuple(String, Int32, Int32)" @"*CallStack::decode_line_number<UInt64>:Tuple(String, Int32, Int32)"(i64 %26), !dbg !1495
store %"Tuple(String, Int32, Int32)" %27, %"Tuple(String, Int32, Int32)"* %0, !dbg !1495
%28 = load %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %0, !dbg !1495
store %"Tuple(String, Int32, Int32)" %28, %"Tuple(String, Int32, Int32)"* %__temp_64, !dbg !1495
%29 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %__temp_64, i32 0, i32 0, !dbg !1495
%30 = load %String*, %String** %29, !dbg !1495
store %String* %30, %String** %file, !dbg !1509
%31 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %__temp_64, i32 0, i32 1, !dbg !1509
%32 = load i32, i32* %31, !dbg !1509
%33 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !1510
store i32 160, i32* %33, !dbg !1510
%34 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1510
%35 = bitcast [1 x i64]* %34 to i32*, !dbg !1510
store i32 %32, i32* %35, !dbg !1510
%36 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %__temp_64, i32 0, i32 2, !dbg !1510
%37 = load i32, i32* %36, !dbg !1510
store i32 %37, i32* %column, !dbg !1511
%38 = load %String*, %String** %file, !dbg !1512
br i1 true, label %then5, label %else6, !dbg !1512
exit4: ; preds = %while
%39 = load %"Array(String)"*, %"Array(String)"** %ary, !dbg !1513
ret %"Array(String)"* %39, !dbg !1513
then: ; preds = %exit7
%40 = call %"Array(String)"** @"~CallStack::skip:read"(), !dbg !1514
%41 = load %"Array(String)"*, %"Array(String)"** %40, !dbg !1514
%42 = load %String*, %String** %file, !dbg !1514
%43 = call i1 @"*Array(String)@Enumerable(T)#includes?<String>:Bool"(%"Array(String)"* %41, %String* %42), !dbg !1515
br i1 %43, label %then8, label %else9, !dbg !1515
else: ; preds = %exit7
br label %exit11, !dbg !1516
then5: ; preds = %body
%44 = load %String*, %String** %file, !dbg !1512
%45 = call i1 @"*String@Object#!=<String>:Bool"(%String* %44, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'??'" to %String*)), !dbg !1496
%46 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %1, i32 0, i32 0, !dbg !1496
store i32 171, i32* %46, !dbg !1496
%47 = zext i1 %45 to i64, !dbg !1496
%48 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %1, i32 0, i32 1, !dbg !1496
%49 = bitcast [1 x i64]* %48 to i64*, !dbg !1496
store i64 %47, i64* %49, !dbg !1496
br label %exit7, !dbg !1496
else6: ; preds = %body
%50 = load %String*, %String** %file, !dbg !1496
%51 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %2, i32 0, i32 0, !dbg !1496
store i32 1, i32* %51, !dbg !1496
%52 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %2, i32 0, i32 1, !dbg !1496
%53 = bitcast [1 x i64]* %52 to %String**, !dbg !1496
store %String* %50, %String** %53, !dbg !1496
br label %exit7, !dbg !1496
exit7: ; preds = %else6, %then5
%54 = phi %"(Bool | String)"* [ %1, %then5 ], [ %2, %else6 ], !dbg !1496
%55 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %54, i32 0, i32 0, !dbg !1496
%56 = load i32, i32* %55, !dbg !1496
%57 = getelementptr inbounds %"(Bool | String)", %"(Bool | String)"* %54, i32 0, i32 1, !dbg !1496
%58 = bitcast [1 x i64]* %57 to i1*, !dbg !1496
%59 = load i1, i1* %58, !dbg !1496
%60 = icmp eq i32 %56, 171, !dbg !1496
%61 = xor i1 %59, true, !dbg !1496
%62 = and i1 %60, %61, !dbg !1496
%63 = xor i1 %62, true, !dbg !1496
%64 = and i1 true, %63, !dbg !1496
br i1 %64, label %then, label %else, !dbg !1496
then8: ; preds = %then
br label %exit10, !dbg !1514
else9: ; preds = %then
%65 = load %String*, %String** %file, !dbg !1514
%66 = call %String** @"~CallStack::CURRENT_DIR:read"(), !dbg !1514
%67 = load %String*, %String** %66, !dbg !1514
%68 = call %String* @"*String#lchop<String>:String"(%String* %65, %String* %67), !dbg !1517
store %String* %68, %String** %file, !dbg !1518
%69 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1519
%70 = load %String*, %String** %file, !dbg !1519
%71 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %69, %String* %70), !dbg !1519
%72 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %71, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"':'" to %String*)), !dbg !1519
%73 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1519
%74 = bitcast [1 x i64]* %73 to i32*, !dbg !1519
%75 = load i32, i32* %74, !dbg !1519
%76 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %72, i32 %75), !dbg !1519
%77 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %76, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"':'" to %String*)), !dbg !1519
%78 = load i32, i32* %column, !dbg !1519
%79 = call %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %77, i32 %78), !dbg !1519
%80 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %79), !dbg !1519
store %String* %80, %String** %file_line_column, !dbg !1516
br label %exit11, !dbg !1516
exit10: ; preds = %exit37, %then17, %then8
%81 = phi %String* [ null, %then8 ], [ null, %then17 ], [ %196, %exit37 ], !dbg !1520
store %String* %81, %String** %v, !dbg !1521
%82 = load %String*, %String** %v, !dbg !1522
%83 = icmp eq %String* %82, null, !dbg !1522
%84 = select i1 %83, i32 0, i32 1, !dbg !1522
%85 = icmp eq i32 0, %84, !dbg !1522
br i1 %85, label %then38, label %else39, !dbg !1522
exit11: ; preds = %else, %else9
%86 = load i64, i64* %pc, !dbg !1523
%87 = call %String* @"*CallStack::decode_function_name<UInt64>:(String | Nil)"(i64 %86), !dbg !1524
store %String* %87, %String** %name, !dbg !1525
%88 = icmp ne %String* %87, null, !dbg !1525
br i1 %88, label %then12, label %else13, !dbg !1525
then12: ; preds = %exit11
%89 = load %String*, %String** %name, !dbg !1525
store %String* %89, %String** %function, !dbg !1526
br label %exit14, !dbg !1526
else13: ; preds = %exit11
%90 = load i8*, i8** %ip, !dbg !1527
%91 = call %"(Tuple(Int64, Pointer(UInt8)) | Nil)" @"*CallStack::decode_frame<Pointer(Void)>:(Tuple(Int64, Pointer(UInt8)) | Nil)"(i8* %90), !dbg !1497
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %91, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, !dbg !1497
%92 = load %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, !dbg !1528
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %92, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, !dbg !1528
%93 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %3, i32 0, i32 0, !dbg !1528
%94 = load i32, i32* %93, !dbg !1528
%95 = icmp eq i32 %94, 0, !dbg !1528
%96 = xor i1 %95, true, !dbg !1528
%97 = and i1 true, %96, !dbg !1528
br i1 %97, label %then15, label %else16, !dbg !1528
exit14: ; preds = %exit25, %then12
%98 = load %String*, %String** %file_line_column, !dbg !1529
%99 = icmp ne %String* %98, null, !dbg !1529
br i1 %99, label %then26, label %else27, !dbg !1529
then15: ; preds = %else13
%100 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, i32 0, i32 1, !dbg !1528
%101 = bitcast [2 x i64]* %100 to %"Tuple(Int64, Pointer(UInt8))"*, !dbg !1528
%102 = load %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %101, !dbg !1530
store %"Tuple(Int64, Pointer(UInt8))" %102, %"Tuple(Int64, Pointer(UInt8))"* %__temp_249, !dbg !1530
%103 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_249, i32 0, i32 0, !dbg !1530
%104 = load i64, i64* %103, !dbg !1530
%105 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_249, i32 0, i32 1, !dbg !1530
%106 = load i8*, i8** %105, !dbg !1530
store i8* %106, i8** %sname, !dbg !1531
%107 = load i8*, i8** %sname, !dbg !1531
%108 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %107), !dbg !1532
store %String* %108, %String** %function, !dbg !1533
%109 = load %String*, %String** %function, !dbg !1534
%110 = call i1 @"*String#starts_with?<String>:Bool"(%String* %109, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'*raise<'" to %String*)), !dbg !1534
store i1 %110, i1* %__temp_251, !dbg !1534
br i1 %110, label %then21, label %else22, !dbg !1534
else16: ; preds = %else13
store %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'???'" to %String*), %String** %function, !dbg !1535
br label %exit25, !dbg !1535
then17: ; preds = %exit24
br label %exit10, !dbg !1536
else18: ; preds = %exit24
%111 = load %String*, %String** %function, !dbg !1536
%112 = call %String* @"*String#lchop<Char>:String"(%String* %111, i32 42), !dbg !1537
store %String* %112, %String** %function, !dbg !1538
br label %exit25, !dbg !1538
then19: ; preds = %exit23
%113 = load i1, i1* %__temp_250, !dbg !1534
br label %exit24, !dbg !1534
else20: ; preds = %exit23
%114 = load %String*, %String** %function, !dbg !1534
%115 = call i1 @"*String#starts_with?<String>:Bool"(%String* %114, %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'*CallStack#'" to %String*)), !dbg !1539
br label %exit24, !dbg !1539
then21: ; preds = %then15
%116 = load i1, i1* %__temp_251, !dbg !1534
br label %exit23, !dbg !1534
else22: ; preds = %then15
%117 = load %String*, %String** %function, !dbg !1534
%118 = call i1 @"*String#starts_with?<String>:Bool"(%String* %117, %String* bitcast ({ i32, i32, i32, [13 x i8] }* @"'*CallStack::'" to %String*)), !dbg !1540
br label %exit23, !dbg !1540
exit23: ; preds = %else22, %then21
%119 = phi i1 [ %116, %then21 ], [ %118, %else22 ], !dbg !1540
store i1 %119, i1* %__temp_250, !dbg !1534
br i1 %119, label %then19, label %else20, !dbg !1534
exit24: ; preds = %else20, %then19
%120 = phi i1 [ %113, %then19 ], [ %115, %else20 ], !dbg !1539
br i1 %120, label %then17, label %else18, !dbg !1539
exit25: ; preds = %else16, %else18
br label %exit14, !dbg !1535
then26: ; preds = %exit14
%121 = load i1, i1* %show_full_info, !dbg !1541
br i1 %121, label %then30, label %else31, !dbg !1541
else27: ; preds = %exit14
%122 = load %String*, %String** %function, !dbg !1542
%123 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !1543
store i32 1, i32* %123, !dbg !1543
%124 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1543
%125 = bitcast [1 x i64]* %124 to %String**, !dbg !1543
store %String* %122, %String** %125, !dbg !1543
br label %exit34, !dbg !1543
then28: ; preds = %exit32
%126 = getelementptr inbounds %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, i32 0, i32 1, !dbg !1499
%127 = bitcast [2 x i64]* %126 to %"Tuple(Int64, Pointer(UInt8))"*, !dbg !1499
%128 = load %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %127, !dbg !1544
store %"Tuple(Int64, Pointer(UInt8))" %128, %"Tuple(Int64, Pointer(UInt8))"* %__temp_253, !dbg !1544
%129 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_253, i32 0, i32 0, !dbg !1544
%130 = load i64, i64* %129, !dbg !1544
%131 = getelementptr inbounds %"Tuple(Int64, Pointer(UInt8))", %"Tuple(Int64, Pointer(UInt8))"* %__temp_253, i32 0, i32 1, !dbg !1544
%132 = load i8*, i8** %131, !dbg !1544
store i8* %132, i8** %sname, !dbg !1545
%133 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1546
%134 = load %String*, %String** %file_line_column, !dbg !1546
%135 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %133, %String* %134), !dbg !1546
%136 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %135, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"' in ''" to %String*)), !dbg !1546
%137 = load i8*, i8** %sname, !dbg !1546
%138 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %137), !dbg !1547
%139 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %136, %String* %138), !dbg !1546
%140 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %139, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1546
%141 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %140), !dbg !1546
%142 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !1548
store i32 1, i32* %142, !dbg !1548
%143 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1548
%144 = bitcast [1 x i64]* %143 to %String**, !dbg !1548
store %String* %141, %String** %144, !dbg !1548
br label %exit33, !dbg !1548
else29: ; preds = %exit32
%145 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1549
%146 = load %String*, %String** %file_line_column, !dbg !1549
%147 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %145, %String* %146), !dbg !1549
%148 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %147, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"' in ''" to %String*)), !dbg !1549
%149 = load %String*, %String** %function, !dbg !1549
%150 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %148, %String* %149), !dbg !1549
%151 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %150, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1549
%152 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %151), !dbg !1549
%153 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !1542
store i32 1, i32* %153, !dbg !1542
%154 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1542
%155 = bitcast [1 x i64]* %154 to %String**, !dbg !1542
store %String* %152, %String** %155, !dbg !1542
br label %exit33, !dbg !1542
then30: ; preds = %then26
%156 = load i8*, i8** %ip, !dbg !1541
%157 = call %"(Tuple(Int64, Pointer(UInt8)) | Nil)" @"*CallStack::decode_frame<Pointer(Void)>:(Tuple(Int64, Pointer(UInt8)) | Nil)"(i8* %156), !dbg !1498
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %157, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4, !dbg !1498
%158 = load %"(Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4, !dbg !1499
store %"(Tuple(Int64, Pointer(UInt8)) | Nil)" %158, %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %frame, !dbg !1499
%159 = bitcast %"(Tuple(Int64, Pointer(UInt8)) | Nil)"* %4 to %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"*, !dbg !1499
br label %exit32, !dbg !1499
else31: ; preds = %then26
%160 = load i1, i1* %show_full_info, !dbg !1499
%161 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %5, i32 0, i32 0, !dbg !1499
store i32 171, i32* %161, !dbg !1499
%162 = zext i1 %160 to i128, !dbg !1499
%163 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %5, i32 0, i32 1, !dbg !1499
%164 = bitcast [2 x i64]* %163 to i128*, !dbg !1499
store i128 %162, i128* %164, !dbg !1499
br label %exit32, !dbg !1499
exit32: ; preds = %else31, %then30
%165 = phi %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* [ %159, %then30 ], [ %5, %else31 ], !dbg !1499
%166 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %165, i32 0, i32 0, !dbg !1499
%167 = load i32, i32* %166, !dbg !1499
%168 = icmp eq i32 %167, 0, !dbg !1499
%169 = xor i1 %168, true, !dbg !1499
%170 = and i1 true, %169, !dbg !1499
%171 = getelementptr inbounds %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)", %"(Bool | Tuple(Int64, Pointer(UInt8)) | Nil)"* %165, i32 0, i32 1, !dbg !1499
%172 = bitcast [2 x i64]* %171 to i1*, !dbg !1499
%173 = load i1, i1* %172, !dbg !1499
%174 = icmp eq i32 %167, 171, !dbg !1499
%175 = xor i1 %173, true, !dbg !1499
%176 = and i1 %174, %175, !dbg !1499
%177 = xor i1 %176, true, !dbg !1499
%178 = and i1 %170, %177, !dbg !1499
br i1 %178, label %then28, label %else29, !dbg !1499
exit33: ; preds = %else29, %then28
br label %exit34, !dbg !1542
exit34: ; preds = %else27, %exit33
%179 = load i1, i1* %show_full_info, !dbg !1550
br i1 %179, label %then35, label %else36, !dbg !1550
then35: ; preds = %exit34
%180 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1551
%181 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1551
%182 = bitcast [1 x i64]* %181 to %String**, !dbg !1551
%183 = load %String*, %String** %182, !dbg !1551
%184 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %180, %String* %183), !dbg !1551
%185 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %184, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"' at 0x'" to %String*)), !dbg !1551
%186 = load i8*, i8** %ip, !dbg !1551
%187 = ptrtoint i8* %186 to i64, !dbg !1551
%188 = call %String* @"*UInt64@Int#to_s<Int32>:String"(i64 %187, i32 16), !dbg !1552
%189 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %185, %String* %188), !dbg !1551
%190 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %189), !dbg !1551
%191 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 0, !dbg !1520
store i32 1, i32* %191, !dbg !1520
%192 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1520
%193 = bitcast [1 x i64]* %192 to %String**, !dbg !1520
store %String* %190, %String** %193, !dbg !1520
br label %exit37, !dbg !1520
else36: ; preds = %exit34
br label %exit37, !dbg !1520
exit37: ; preds = %else36, %then35
%194 = getelementptr inbounds %"(Int32 | String)", %"(Int32 | String)"* %line, i32 0, i32 1, !dbg !1520
%195 = bitcast [1 x i64]* %194 to %String**, !dbg !1520
%196 = load %String*, %String** %195, !dbg !1520
br label %exit10, !dbg !1520
then38: ; preds = %exit10
br label %exit40, !dbg !1522
else39: ; preds = %exit10
%197 = load %"Array(String)"*, %"Array(String)"** %ary, !dbg !1522
%198 = load %String*, %String** %v, !dbg !1522
%199 = call %"Array(String)"* @"*Array(String)@Array(T)#<<<String>:Array(String)"(%"Array(String)"* %197, %String* %198), !dbg !1553
br label %exit40, !dbg !1553
exit40: ; preds = %else39, %then38
%200 = phi %"Array(String)"* [ null, %then38 ], [ %199, %else39 ], !dbg !1553
%201 = load i32, i32* %i3, !dbg !1553
%202 = add i32 %201, 1, !dbg !1553
store i32 %202, i32* %i3, !dbg !1513
br label %while, !dbg !1513
}
; Function Attrs: uwtable
define internal %String* @"*ENV::[]?<String>:(String | Nil)"(%String* %key) #0 !dbg !1554 {
entry:
%0 = call %String* @"*ENV::fetch<String, Nil>:(String | Nil)"(%String* %key, %Nil zeroinitializer), !dbg !1556
ret %String* %0, !dbg !1556
}
; Function Attrs: uwtable
define internal %String* @"*ENV::fetch<String, Nil>:(String | Nil)"(%String* %key, %Nil %default) #0 !dbg !1557 {
alloca:
%key1 = alloca %String*, !dbg !1558
%value = alloca %String*, !dbg !1558
br label %entry
entry: ; preds = %alloca
store %String* %key, %String** %key1, !dbg !1558
%0 = load %String*, %String** %key1, !dbg !1559
%1 = call %String* @"*Crystal::System::Env::get<String>:(String | Nil)"(%String* %0), !dbg !1560
store %String* %1, %String** %value, !dbg !1561
%2 = icmp ne %String* %1, null, !dbg !1561
br i1 %2, label %then, label %else, !dbg !1561
then: ; preds = %entry
%3 = load %String*, %String** %value, !dbg !1561
br label %exit, !dbg !1561
else: ; preds = %entry
%4 = load %String*, %String** %key1, !dbg !1561
br label %exit, !dbg !1561
exit: ; preds = %else, %then
%5 = phi %String* [ %3, %then ], [ null, %else ], !dbg !1561
ret %String* %5, !dbg !1561
}
; Function Attrs: uwtable
define internal %String* @"*Crystal::System::Env::get<String>:(String | Nil)"(%String* %key) #0 !dbg !1562 {
alloca:
%value = alloca i8*, !dbg !1564
br label %entry
entry: ; preds = %alloca
%0 = call %String* @"*String#check_no_null_byte<String>:String"(%String* %key, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'key'" to %String*)), !dbg !1565
%1 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %key), !dbg !1566
%2 = call i8* @getenv(i8* %1), !dbg !1567
store i8* %2, i8** %value, !dbg !1568
%3 = icmp ne i8* %2, null, !dbg !1568
br i1 %3, label %then, label %else, !dbg !1568
then: ; preds = %entry
%4 = load i8*, i8** %value, !dbg !1568
%5 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %4), !dbg !1569
br label %exit, !dbg !1569
else: ; preds = %entry
br label %exit, !dbg !1569
exit: ; preds = %else, %then
%6 = phi %String* [ %5, %then ], [ null, %else ], !dbg !1569
ret %String* %6, !dbg !1569
}
; Function Attrs: uwtable
define internal %String* @"*String#check_no_null_byte<String>:String"(%String* %self, %String* %name) #0 !dbg !1570 {
alloca:
%name1 = alloca %String*, !dbg !1571
%0 = alloca %"(Int32 | Nil)", !dbg !1572
br label %entry
entry: ; preds = %alloca
store %String* %name, %String** %name1, !dbg !1571
%1 = call %"(Int32 | Nil)" @"*String#byte_index<Int32>:(Int32 | Nil)"(%String* %self, i32 0), !dbg !1572
store %"(Int32 | Nil)" %1, %"(Int32 | Nil)"* %0, !dbg !1572
%2 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !1572
%3 = load i32, i32* %2, !dbg !1572
%4 = icmp eq i32 %3, 0, !dbg !1572
%5 = xor i1 %4, true, !dbg !1572
%6 = and i1 true, %5, !dbg !1572
br i1 %6, label %then, label %else, !dbg !1572
then: ; preds = %entry
%7 = load %String*, %String** %name1, !dbg !1573
br i1 true, label %then2, label %else3, !dbg !1573
else: ; preds = %entry
ret %String* %self, !dbg !1574
then2: ; preds = %then
%8 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1575
%9 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %8, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'`'" to %String*)), !dbg !1575
%10 = load %String*, %String** %name1, !dbg !1575
%11 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %9, %String* %10), !dbg !1575
%12 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %11, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'` '" to %String*)), !dbg !1575
%13 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %12), !dbg !1575
store %String* %13, %String** %name1, !dbg !1573
br label %exit, !dbg !1573
else3: ; preds = %then
br label %exit, !dbg !1573
exit: ; preds = %else3, %then2
%14 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1576
%15 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %14, %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'String '" to %String*)), !dbg !1576
%16 = load %String*, %String** %name1, !dbg !1576
%17 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %15, %String* %16), !dbg !1576
%18 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %17, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'contains null byte'" to %String*)), !dbg !1576
%19 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %18), !dbg !1576
%20 = call %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %19), !dbg !1577
call void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %20), !dbg !1574
unreachable, !dbg !1574
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*String#byte_index<Int32>:(Int32 | Nil)"(%String* %self, i32 %byte) #0 !dbg !1578 {
alloca:
%offset = alloca i32, !dbg !1579
%0 = alloca %"(Int32 | Nil)", !dbg !1579
br label %entry
entry: ; preds = %alloca
store i32 0, i32* %offset, !dbg !1580
%1 = load i32, i32* %offset, !dbg !1580
%2 = call %"(Int32 | Nil)" @"*String#byte_index<Int32, Int32>:(Int32 | Nil)"(%String* %self, i32 %byte, i32 %1), !dbg !1579
store %"(Int32 | Nil)" %2, %"(Int32 | Nil)"* %0, !dbg !1579
%3 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !1579
ret %"(Int32 | Nil)" %3, !dbg !1579
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*String#byte_index<Int32, Int32>:(Int32 | Nil)"(%String* %self, i32 %byte, i32 %offset) #0 !dbg !1581 {
alloca:
%i = alloca i32, !dbg !1582
%to = alloca i32, !dbg !1582
%x = alloca i32, !dbg !1582
%0 = alloca %"(Int32 | Nil)", !dbg !1583
%1 = alloca %"(Int32 | Nil)", !dbg !1584
br label %entry
entry: ; preds = %alloca
%2 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1585
%3 = load i32, i32* %2, !dbg !1585
%4 = sub i32 %3, 1, !dbg !1585
store i32 %4, i32* %to, !dbg !1582
%5 = load i32, i32* %to, !dbg !1586
%6 = icmp sle i32 %offset, %5, !dbg !1586
br i1 %6, label %then, label %else, !dbg !1586
then: ; preds = %entry
br label %exit, !dbg !1586
else: ; preds = %entry
br label %exit1, !dbg !1586
exit: ; preds = %then
store i32 %offset, i32* %x, !dbg !1587
br label %while, !dbg !1587
exit1: ; preds = %then5, %else
%7 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !1584
store i32 0, i32* %7, !dbg !1584
%8 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !1584
store [1 x i64] zeroinitializer, [1 x i64]* %8, !dbg !1584
%9 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, !dbg !1584
ret %"(Int32 | Nil)" %9, !dbg !1584
while: ; preds = %else6, %exit
br i1 true, label %body, label %exit2, !dbg !1588
body: ; preds = %while
%10 = load i32, i32* %x, !dbg !1588
store i32 %10, i32* %i, !dbg !1588
%11 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1583
%12 = load i32, i32* %i, !dbg !1583
%13 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %11, i32 %12), !dbg !1583
%14 = zext i8 %13 to i32, !dbg !1583
%15 = icmp sge i32 %byte, 0, !dbg !1583
%16 = icmp eq i32 %14, %byte, !dbg !1583
%17 = and i1 %15, %16, !dbg !1583
br i1 %17, label %then3, label %else4, !dbg !1583
exit2: ; preds = %while
unreachable, !dbg !1584
then3: ; preds = %body
%18 = load i32, i32* %i, !dbg !1583
%19 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !1583
store i32 160, i32* %19, !dbg !1583
%20 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !1583
%21 = bitcast [1 x i64]* %20 to i32*, !dbg !1583
store i32 %18, i32* %21, !dbg !1583
%22 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, !dbg !1583
ret %"(Int32 | Nil)" %22, !dbg !1583
else4: ; preds = %body
%23 = load i32, i32* %x, !dbg !1589
%24 = load i32, i32* %to, !dbg !1589
%25 = icmp eq i32 %23, %24, !dbg !1589
br i1 %25, label %then5, label %else6, !dbg !1589
then5: ; preds = %else4
br label %exit1, !dbg !1589
else6: ; preds = %else4
%26 = load i32, i32* %x, !dbg !1589
%27 = add i32 %26, 1, !dbg !1589
store i32 %27, i32* %x, !dbg !1584
br label %while, !dbg !1584
}
declare i8* @getenv(i8*)
; Function Attrs: alwaysinline uwtable
define internal i8* @"*Array(Pointer(Void))@Array(T)#unsafe_fetch<Int32>:Pointer(Void)"(%"Array(Pointer(Void))"* %self, i32 %index) #3 !dbg !1590 {
entry:
%0 = getelementptr inbounds %"Array(Pointer(Void))", %"Array(Pointer(Void))"* %self, i32 0, i32 3, !dbg !1591
%1 = load i8**, i8*** %0, !dbg !1591
%2 = call i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]<Int32>:Pointer(Void)"(i8** %1, i32 %index), !dbg !1592
ret i8* %2, !dbg !1592
}
; Function Attrs: uwtable
define internal i8* @"*Pointer(Pointer(Void))@Pointer(T)#[]<Int32>:Pointer(Void)"(i8** %self, i32 %offset) #0 !dbg !1593 {
entry:
%0 = call i8** @"*Pointer(Pointer(Void))@Pointer(T)#+<Int32>:Pointer(Pointer(Void))"(i8** %self, i32 %offset), !dbg !1594
%1 = load i8*, i8** %0, !dbg !1594
ret i8* %1, !dbg !1594
}
; Function Attrs: uwtable
define internal i64 @"*CallStack::decode_address<Pointer(Void)>:UInt64"(i8* %ip) #0 !dbg !1595 {
alloca:
%info = alloca %"struct.LibC::DlInfo", !dbg !1596
%0 = alloca %"struct.LibC::DlInfo", !dbg !1596
br label %entry
entry: ; preds = %alloca
%1 = call i32 @dladdr(i8* %ip, %"struct.LibC::DlInfo"* %0), !dbg !1596
%2 = load %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %0, !dbg !1596
store %"struct.LibC::DlInfo" %2, %"struct.LibC::DlInfo"* %info, !dbg !1596
%3 = icmp ne i32 %1, 0, !dbg !1596
br i1 %3, label %then, label %else, !dbg !1596
then: ; preds = %entry
%4 = getelementptr inbounds %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %info, i32 0, i32 1, !dbg !1596
%5 = load i8*, i8** %4, !dbg !1596
%6 = ptrtoint i8* %5 to i64, !dbg !1596
%7 = load i32, i32* getelementptr inbounds (%"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", i32 0, i32 0), !dbg !1596
%8 = icmp eq i32 161, %7, !dbg !1596
%9 = and i1 true, %8, !dbg !1596
br i1 %9, label %current_def, label %next_def, !dbg !1596
else: ; preds = %entry
br label %exit10, !dbg !1596
then1: ; preds = %exit
br label %exit9, !dbg !1596
else2: ; preds = %exit
%10 = ptrtoint i8* %ip to i64, !dbg !1596
%11 = getelementptr inbounds %"struct.LibC::DlInfo", %"struct.LibC::DlInfo"* %info, i32 0, i32 1, !dbg !1596
%12 = load i8*, i8** %11, !dbg !1596
%13 = ptrtoint i8* %12 to i64, !dbg !1596
%14 = sub i64 %10, %13, !dbg !1596
ret i64 %14, !dbg !1596
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 !1596
%16 = zext i32 %15 to i64, !dbg !1596
%17 = icmp eq i64 %6, %16, !dbg !1596
br label %exit, !dbg !1596
next_def: ; preds = %then
%18 = icmp eq i32 163, %7, !dbg !1596
%19 = and i1 true, %18, !dbg !1596
br i1 %19, label %current_def3, label %next_def4, !dbg !1596
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 !1596
br i1 %20, label %then1, label %else2, !dbg !1596
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 !1596
%22 = icmp eq i64 %6, %21, !dbg !1596
br label %exit, !dbg !1596
next_def4: ; preds = %next_def
%23 = call i1 @"~match<(UInt32 | UInt64)>"(i32 %7), !dbg !1596
%24 = and i1 true, %23, !dbg !1596
br i1 %24, label %current_def5, label %next_def6, !dbg !1596
current_def5: ; preds = %next_def4
%25 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* bitcast (%"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address" to %"(UInt32 | UInt64)"*), !dbg !1596
%26 = call i1 @"*UInt64@Comparable(T)#==<(UInt32 | UInt64)>:Bool"(i64 %6, %"(UInt32 | UInt64)" %25), !dbg !1596
br label %exit, !dbg !1596
next_def6: ; preds = %next_def4
%27 = call i1 @"~match<(UInt32 | UInt64 | Nil)>"(i32 %7), !dbg !1596
%28 = and i1 true, %27, !dbg !1596
br i1 %28, label %current_def7, label %next_def8, !dbg !1596
current_def7: ; preds = %next_def6
%29 = load %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", !dbg !1596
br label %exit, !dbg !1596
next_def8: ; preds = %next_def6
unreachable, !dbg !1596
exit9: ; preds = %then1
br label %exit10, !dbg !1596
exit10: ; preds = %else, %exit9
%30 = ptrtoint i8* %ip to i64, !dbg !1596
ret i64 %30, !dbg !1596
}
declare i32 @dladdr(i8*, %"struct.LibC::DlInfo"*)
define internal i1 @"~match<(UInt32 | UInt64)>"(i32) {
entry:
%1 = icmp eq i32 161, %0, !dbg !1596
%2 = icmp eq i32 163, %0, !dbg !1596
%3 = or i1 %1, %2, !dbg !1596
ret i1 %3, !dbg !1596
}
; Function Attrs: uwtable
define internal i1 @"*UInt64@Comparable(T)#==<(UInt32 | UInt64)>:Bool"(i64 %self, %"(UInt32 | UInt64)" %other) #0 !dbg !1597 {
alloca:
%cmp = alloca i32, !dbg !1599
%other1 = alloca %"(UInt32 | UInt64)", !dbg !1599
br label %entry
entry: ; preds = %alloca
store %"(UInt32 | UInt64)" %other, %"(UInt32 | UInt64)"* %other1, !dbg !1599
%0 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, !dbg !1599
%1 = call i32 @"*UInt64@Int#<=><(UInt32 | UInt64)>:Int32"(i64 %self, %"(UInt32 | UInt64)" %0), !dbg !1600
store i32 %1, i32* %cmp, !dbg !1601
%2 = load i32, i32* %cmp, !dbg !1602
br i1 true, label %then, label %else, !dbg !1602
then: ; preds = %entry
%3 = load i32, i32* %cmp, !dbg !1602
%4 = icmp eq i32 %3, 0, !dbg !1602
br label %exit, !dbg !1602
else: ; preds = %entry
br label %exit, !dbg !1602
exit: ; preds = %else, %then
%5 = phi i1 [ %4, %then ], [ false, %else ], !dbg !1602
ret i1 %5, !dbg !1602
}
; Function Attrs: uwtable
define internal i32 @"*UInt64@Int#<=><(UInt32 | UInt64)>:Int32"(i64 %self, %"(UInt32 | UInt64)" %other) #0 !dbg !1603 {
alloca:
%other1 = alloca %"(UInt32 | UInt64)", !dbg !1604
br label %entry
entry: ; preds = %alloca
store %"(UInt32 | UInt64)" %other, %"(UInt32 | UInt64)"* %other1, !dbg !1604
%0 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 0, !dbg !1605
%1 = load i32, i32* %0, !dbg !1605
%2 = icmp eq i32 161, %1, !dbg !1605
%3 = and i1 true, %2, !dbg !1605
br i1 %3, label %current_def, label %next_def, !dbg !1605
then: ; preds = %exit
br label %exit4, !dbg !1605
else: ; preds = %exit
%4 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 0, !dbg !1606
%5 = load i32, i32* %4, !dbg !1606
%6 = icmp eq i32 161, %5, !dbg !1606
%7 = and i1 true, %6, !dbg !1606
br i1 %7, label %current_def7, label %next_def8, !dbg !1606
current_def: ; preds = %entry
%8 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !1605
%9 = bitcast [1 x i64]* %8 to i32*, !dbg !1605
%10 = load i32, i32* %9, !dbg !1605
%11 = zext i32 %10 to i64, !dbg !1605
%12 = icmp ugt i64 %self, %11, !dbg !1605
br label %exit, !dbg !1605
next_def: ; preds = %entry
%13 = icmp eq i32 163, %1, !dbg !1605
%14 = and i1 true, %13, !dbg !1605
br i1 %14, label %current_def2, label %next_def3, !dbg !1605
exit: ; preds = %current_def2, %current_def
%15 = phi i1 [ %12, %current_def ], [ %19, %current_def2 ], !dbg !1605
br i1 %15, label %then, label %else, !dbg !1605
current_def2: ; preds = %next_def
%16 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !1605
%17 = bitcast [1 x i64]* %16 to i64*, !dbg !1605
%18 = load i64, i64* %17, !dbg !1605
%19 = icmp ugt i64 %self, %18, !dbg !1605
br label %exit, !dbg !1605
next_def3: ; preds = %next_def
unreachable, !dbg !1605
exit4: ; preds = %exit12, %then
%20 = phi i32 [ 1, %then ], [ %33, %exit12 ], !dbg !1606
ret i32 %20, !dbg !1606
then5: ; preds = %exit9
br label %exit12, !dbg !1606
else6: ; preds = %exit9
br label %exit12, !dbg !1606
current_def7: ; preds = %else
%21 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !1606
%22 = bitcast [1 x i64]* %21 to i32*, !dbg !1606
%23 = load i32, i32* %22, !dbg !1606
%24 = zext i32 %23 to i64, !dbg !1606
%25 = icmp ult i64 %self, %24, !dbg !1606
br label %exit9, !dbg !1606
next_def8: ; preds = %else
%26 = icmp eq i32 163, %5, !dbg !1606
%27 = and i1 true, %26, !dbg !1606
br i1 %27, label %current_def10, label %next_def11, !dbg !1606
exit9: ; preds = %current_def10, %current_def7
%28 = phi i1 [ %25, %current_def7 ], [ %32, %current_def10 ], !dbg !1606
br i1 %28, label %then5, label %else6, !dbg !1606
current_def10: ; preds = %next_def8
%29 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %other1, i32 0, i32 1, !dbg !1606
%30 = bitcast [1 x i64]* %29 to i64*, !dbg !1606
%31 = load i64, i64* %30, !dbg !1606
%32 = icmp ult i64 %self, %31, !dbg !1606
br label %exit9, !dbg !1606
next_def11: ; preds = %next_def8
unreachable, !dbg !1606
exit12: ; preds = %else6, %then5
%33 = phi i32 [ -1, %then5 ], [ 0, %else6 ], !dbg !1606
br label %exit4, !dbg !1606
}
define internal i1 @"~match<(UInt32 | UInt64 | Nil)>"(i32) {
entry:
%1 = icmp eq i32 161, %0, !dbg !1596
%2 = icmp eq i32 163, %0, !dbg !1596
%3 = or i1 %1, %2, !dbg !1596
%4 = icmp eq i32 0, %0, !dbg !1596
%5 = or i1 %3, %4, !dbg !1596
ret i1 %5, !dbg !1596
}
; Function Attrs: uwtable
define internal %"Tuple(String, Int32, Int32)" @"*CallStack::decode_line_number<UInt64>:Tuple(String, Int32, Int32)"(i64 %pc) #0 !dbg !1607 {
alloca:
%ln = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !1608
%row = alloca %"(Debug::DWARF::LineNumbers::Row | Nil)", !dbg !1608
%path = alloca %String*, !dbg !1608
%0 = alloca %"(Debug::DWARF::LineNumbers::Row | Nil)", !dbg !1608
%1 = alloca %"Tuple(String, Int32, Int32)", !dbg !1608
%2 = alloca %"Tuple(String, Int32, Int32)", !dbg !1608
br label %entry
entry: ; preds = %alloca
%3 = load i32, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !1608
%4 = icmp eq i32 %3, 0, !dbg !1608
%5 = xor i1 %4, true, !dbg !1608
%6 = and i1 true, %5, !dbg !1608
br i1 %6, label %then, label %else, !dbg !1608
then: ; preds = %entry
br label %exit, !dbg !1608
else: ; preds = %entry
%7 = call %"Array(Tuple(UInt64, UInt64, String))"* @"*CallStack::read_dwarf_sections:(Array(Tuple(UInt64, UInt64, String)) | Nil)"(), !dbg !1608
br label %exit, !dbg !1608
exit: ; preds = %else, %then
%8 = load %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", !dbg !1608
store %"(Debug::DWARF::LineNumbers | Nil)" %8, %"(Debug::DWARF::LineNumbers | Nil)"* %ln, !dbg !1608
%9 = load i32, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !1608
%10 = icmp eq i32 %9, 0, !dbg !1608
%11 = xor i1 %10, true, !dbg !1608
%12 = and i1 true, %11, !dbg !1608
br i1 %12, label %then1, label %else2, !dbg !1608
then1: ; preds = %exit
%13 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %ln, i32 0, i32 1, !dbg !1608
%14 = bitcast [4 x i64]* %13 to %"Debug::DWARF::LineNumbers"*, !dbg !1608
%15 = call %"(Debug::DWARF::LineNumbers::Row | Nil)" @"*Debug::DWARF::LineNumbers#find<UInt64>:(Debug::DWARF::LineNumbers::Row | Nil)"(%"Debug::DWARF::LineNumbers"* %14, i64 %pc), !dbg !1608
store %"(Debug::DWARF::LineNumbers::Row | Nil)" %15, %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, !dbg !1608
%16 = load %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, !dbg !1608
store %"(Debug::DWARF::LineNumbers::Row | Nil)" %16, %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, !dbg !1608
%17 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %0, i32 0, i32 0, !dbg !1608
%18 = load i32, i32* %17, !dbg !1608
%19 = icmp eq i32 %18, 0, !dbg !1608
%20 = xor i1 %19, true, !dbg !1608
%21 = and i1 true, %20, !dbg !1608
br i1 %21, label %then3, label %else4, !dbg !1608
else2: ; preds = %exit
br label %exit5, !dbg !1608
then3: ; preds = %then1
%22 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1608
%23 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !1608
%24 = bitcast [6 x i64]* %23 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !1608
%25 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %24, i32 0, i32 2, !dbg !1608
%26 = load %String*, %String** %25, !dbg !1608
%27 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %22, %String* %26), !dbg !1608
%28 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %27, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'/'" to %String*)), !dbg !1608
%29 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !1608
%30 = bitcast [6 x i64]* %29 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !1608
%31 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %30, i32 0, i32 3, !dbg !1608
%32 = load %String*, %String** %31, !dbg !1608
%33 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %28, %String* %32), !dbg !1608
%34 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %33), !dbg !1608
store %String* %34, %String** %path, !dbg !1608
%35 = load %String*, %String** %path, !dbg !1608
%36 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %1, i32 0, i32 0, !dbg !1608
store %String* %35, %String** %36, !dbg !1608
%37 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !1608
%38 = bitcast [6 x i64]* %37 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !1608
%39 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %38, i32 0, i32 4, !dbg !1608
%40 = load i32, i32* %39, !dbg !1608
%41 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %1, i32 0, i32 1, !dbg !1608
store i32 %40, i32* %41, !dbg !1608
%42 = getelementptr inbounds %"(Debug::DWARF::LineNumbers::Row | Nil)", %"(Debug::DWARF::LineNumbers::Row | Nil)"* %row, i32 0, i32 1, !dbg !1608
%43 = bitcast [6 x i64]* %42 to %"Debug::DWARF::LineNumbers::Row"*, !dbg !1608
%44 = getelementptr inbounds %"Debug::DWARF::LineNumbers::Row", %"Debug::DWARF::LineNumbers::Row"* %43, i32 0, i32 5, !dbg !1608
%45 = load i32, i32* %44, !dbg !1608
%46 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %1, i32 0, i32 2, !dbg !1608
store i32 %45, i32* %46, !dbg !1608
%47 = load %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %1, !dbg !1608
ret %"Tuple(String, Int32, Int32)" %47, !dbg !1608
else4: ; preds = %then1
br label %exit5, !dbg !1608
exit5: ; preds = %else2, %else4
%48 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 0, !dbg !1608
store %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'??'" to %String*), %String** %48, !dbg !1608
%49 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 1, !dbg !1608
store i32 0, i32* %49, !dbg !1608
%50 = getelementptr inbounds %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, i32 0, i32 2, !dbg !1608
store i32 0, i32* %50, !dbg !1608
%51 = load %"Tuple(String, Int32, Int32)", %"Tuple(String, Int32, Int32)"* %2, !dbg !1608
ret %"Tuple(String, Int32, Int32)" %51, !dbg !1608
}
; 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 !1609 {
alloca:
%elf = alloca %"Debug::ELF", !dbg !1610
%strings = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !1610
%path = alloca %String*, !dbg !1610
%file = alloca %File*, !dbg !1611
%filename = alloca %String*, !dbg !1611
%mode = alloca %String*, !dbg !1611
%perm = alloca i16, !dbg !1611
%encoding = alloca %Nil, !dbg !1611
%invalid = alloca %Nil, !dbg !1611
%file1 = alloca %File*, !dbg !1611
%0 = alloca %"Debug::ELF", !dbg !1612
%sh = alloca %"Debug::ELF::SectionHeader", !dbg !1610
%_ = alloca i32*, !dbg !1610
%name = alloca %String*, !dbg !1610
%sh2 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1610
%sh4 = alloca %"Debug::ELF::SectionHeader", !dbg !1613
%if_none = alloca %Nil, !dbg !1613
%elem = alloca %"Debug::ELF::SectionHeader", !dbg !1614
%i = alloca i32, !dbg !1615
%i5 = alloca i32, !dbg !1615
%1 = alloca %"Debug::ELF::SectionHeader", !dbg !1616
%2 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1617
%3 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1618
%4 = alloca %"(UInt32 | UInt64)", !dbg !1619
%offset = alloca %"(UInt32 | UInt64)", !dbg !1620
%whence = alloca i32, !dbg !1620
%original_pos = alloca i64, !dbg !1620
%5 = alloca %"(UInt32 | UInt64)", !dbg !1620
%6 = alloca %"(UInt32 | UInt64)", !dbg !1610
%7 = alloca %"(UInt32 | UInt64)", !dbg !1610
%8 = alloca %"(UInt32 | UInt64)", !dbg !1610
%9 = alloca %"(UInt32 | UInt64)", !dbg !1610
%10 = alloca %"(UInt32 | UInt64)", !dbg !1610
%11 = alloca %"(UInt32 | UInt64)", !dbg !1610
%12 = alloca %"(UInt32 | UInt64 | Nil)", !dbg !1621
%sh31 = alloca %"Debug::ELF::SectionHeader", !dbg !1610
%io = alloca i32*, !dbg !1610
%name32 = alloca %String*, !dbg !1610
%sh33 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1610
%sh37 = alloca %"Debug::ELF::SectionHeader", !dbg !1613
%if_none38 = alloca %Nil, !dbg !1613
%elem39 = alloca %"Debug::ELF::SectionHeader", !dbg !1614
%i40 = alloca i32, !dbg !1615
%i41 = alloca i32, !dbg !1615
%13 = alloca %"Debug::ELF::SectionHeader", !dbg !1616
%14 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1617
%15 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1618
%16 = alloca %"(UInt32 | UInt64)", !dbg !1619
%offset53 = alloca %"(UInt32 | UInt64)", !dbg !1620
%whence54 = alloca i32, !dbg !1620
%original_pos55 = alloca i64, !dbg !1620
%17 = alloca %"(UInt32 | UInt64)", !dbg !1620
%18 = alloca %"(UInt32 | UInt64)", !dbg !1610
%19 = alloca %"Debug::DWARF::LineNumbers", !dbg !1610
%20 = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !1621
%21 = alloca %"(Debug::DWARF::LineNumbers | Nil)", !dbg !1621
%sh66 = alloca %"Debug::ELF::SectionHeader", !dbg !1610
%io67 = alloca i32*, !dbg !1610
%name68 = alloca %String*, !dbg !1610
%sh69 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1610
%sh73 = alloca %"Debug::ELF::SectionHeader", !dbg !1613
%if_none74 = alloca %Nil, !dbg !1613
%elem75 = alloca %"Debug::ELF::SectionHeader", !dbg !1614
%i76 = alloca i32, !dbg !1615
%i77 = alloca i32, !dbg !1615
%22 = alloca %"Debug::ELF::SectionHeader", !dbg !1616
%23 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1617
%24 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1618
%25 = alloca %"(UInt32 | UInt64)", !dbg !1619
%offset89 = alloca %"(UInt32 | UInt64)", !dbg !1620
%whence90 = alloca i32, !dbg !1620
%original_pos91 = alloca i64, !dbg !1620
%26 = alloca %"(UInt32 | UInt64)", !dbg !1620
%27 = alloca %"(UInt32 | UInt64)", !dbg !1610
%28 = alloca %"(UInt32 | UInt64)", !dbg !1610
%29 = alloca %"Debug::DWARF::Strings", !dbg !1610
%30 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !1621
%31 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !1621
%sh103 = alloca %"Debug::ELF::SectionHeader", !dbg !1610
%io104 = alloca i32*, !dbg !1610
%names = alloca %"Array(Tuple(UInt64, UInt64, String))"*, !dbg !1610
%offset105 = alloca i64, !dbg !1610
%info = alloca %"Debug::DWARF::Info", !dbg !1610
%name106 = alloca %String*, !dbg !1610
%sh107 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1610
%sh111 = alloca %"Debug::ELF::SectionHeader", !dbg !1613
%if_none112 = alloca %Nil, !dbg !1613
%elem113 = alloca %"Debug::ELF::SectionHeader", !dbg !1614
%i114 = alloca i32, !dbg !1615
%i115 = alloca i32, !dbg !1615
%32 = alloca %"Debug::ELF::SectionHeader", !dbg !1616
%33 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1617
%34 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1618
%35 = alloca %"(UInt32 | UInt64)", !dbg !1619
%offset127 = alloca %"(UInt32 | UInt64)", !dbg !1620
%whence128 = alloca i32, !dbg !1620
%original_pos129 = alloca i64, !dbg !1620
%36 = alloca %"(UInt32 | UInt64)", !dbg !1620
%37 = alloca %"(UInt32 | UInt64)", !dbg !1610
%38 = alloca %"(UInt32 | UInt64)", !dbg !1610
%39 = alloca %"Debug::DWARF::Info", !dbg !1610
%sh150 = alloca %"Debug::ELF::SectionHeader", !dbg !1610
%io151 = alloca i32*, !dbg !1610
%name152 = alloca %String*, !dbg !1610
%sh153 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1610
%sh157 = alloca %"Debug::ELF::SectionHeader", !dbg !1613
%if_none158 = alloca %Nil, !dbg !1613
%elem159 = alloca %"Debug::ELF::SectionHeader", !dbg !1614
%i160 = alloca i32, !dbg !1615
%i161 = alloca i32, !dbg !1615
%40 = alloca %"Debug::ELF::SectionHeader", !dbg !1616
%41 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1617
%42 = alloca %"(Debug::ELF::SectionHeader | Nil)", !dbg !1618
%43 = alloca %"(UInt32 | UInt64)", !dbg !1619
%offset173 = alloca %"(UInt32 | UInt64)", !dbg !1620
%whence174 = alloca i32, !dbg !1620
%original_pos175 = alloca i64, !dbg !1620
%44 = alloca %"(UInt32 | UInt64)", !dbg !1620
%name185 = alloca i64, !dbg !1610
%low_pc = alloca i64, !dbg !1610
%high_pc = alloca %String*, !dbg !1610
%info186 = alloca %"Debug::DWARF::Info", !dbg !1610
%strings187 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !1610
%45 = alloca %"Debug::DWARF::Info", !dbg !1610
%46 = alloca %"(Debug::DWARF::Strings | Nil)", !dbg !1610
%code = alloca i32, !dbg !1610
%abbrev = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !1610
%attributes = alloca %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, !dbg !1610
%high_pc188 = alloca %"(UInt64 | Nil)", !dbg !1610
%low_pc189 = alloca %"(UInt64 | Nil)", !dbg !1610
%name190 = alloca %String*, !dbg !1610
%__temp_238 = alloca %"(UInt64 | Nil)", !dbg !1610
%end_offset = alloca i64, !dbg !1610
%attributes191 = alloca %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, !dbg !1610
%code192 = alloca i32, !dbg !1610
%abbrev193 = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !1610
%47 = alloca %"(Debug::DWARF::Abbrev | Nil)", !dbg !1622
%attr = alloca %"Debug::DWARF::Abbrev::Attribute", !dbg !1623
%value = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1623
%i209 = alloca i32, !dbg !1615
%i210 = alloca i32, !dbg !1615
%48 = alloca %"Debug::DWARF::Abbrev::Attribute", !dbg !1616
%49 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1624
%50 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1625
%51 = alloca %"(Bool | Nil)", !dbg !1610
%52 = alloca %"(Bool | Nil)", !dbg !1610
%at = alloca i32, !dbg !1610
%form = alloca i32, !dbg !1610
%value224 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", !dbg !1610
%__arg1 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1610
%i225 = alloca i32, !dbg !1615
%i226 = alloca i32, !dbg !1615
%53 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1616
%__arg2 = alloca %"Debug::DWARF::Strings", !dbg !1610
%54 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%55 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%56 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%57 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%58 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%59 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%60 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%61 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%62 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%__arg2267 = alloca %"Debug::DWARF::Strings", !dbg !1610
%63 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%64 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%65 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%66 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%67 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%68 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%69 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%70 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%71 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%72 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%73 = alloca %"(String | UInt64 | Nil)", !dbg !1610
%74 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%75 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%76 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%77 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%78 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%79 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%80 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%81 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%82 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%83 = alloca %"(UInt64 | Nil)", !dbg !1610
%84 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%85 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%86 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%87 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%88 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%89 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%90 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%91 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%92 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%93 = alloca %"(UInt64 | Nil)", !dbg !1610
%94 = alloca %"(Nil.class | UInt64.class)", !dbg !1610
%95 = alloca %"(Nil.class | UInt64.class)", !dbg !1610
%96 = alloca %"(UInt64 | Nil)", !dbg !1610
%97 = alloca %"(UInt64 | Nil)", !dbg !1610
%98 = alloca %"(UInt64 | Nil)", !dbg !1610
%99 = alloca %"(UInt64 | Nil)", !dbg !1610
%100 = alloca %"(String | UInt64 | Nil)", !dbg !1610
%101 = alloca %"Tuple(UInt64, UInt64, String)", !dbg !1610
%102 = alloca %"(Bool | Nil)", !dbg !1610
%103 = alloca %"(Bool | Nil)", !dbg !1610
%at416 = alloca i32, !dbg !1610
%form417 = alloca i32, !dbg !1610
%value418 = alloca %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", !dbg !1610
%__arg1419 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1610
%i420 = alloca i32, !dbg !1615
%i421 = alloca i32, !dbg !1615
%104 = alloca %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", !dbg !1616
%__arg2432 = alloca %"Debug::DWARF::Strings", !dbg !1610
%105 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%106 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%107 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%108 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%109 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%110 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%111 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%112 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%113 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%__arg2465 = alloca %"Debug::DWARF::Strings", !dbg !1610
%114 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%115 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%116 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%117 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%118 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%119 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%120 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%121 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%122 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%123 = alloca %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%124 = alloca %"(String | UInt64 | Nil)", !dbg !1610
%125 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%126 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%127 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%128 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%129 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%130 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%131 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%132 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%133 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%134 = alloca %"(UInt64 | Nil)", !dbg !1610
%135 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%136 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%137 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%138 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%139 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%140 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%141 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%142 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%143 = alloca %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", !dbg !1610
%144 = alloca %"(UInt64 | Nil)", !dbg !1610
%145 = alloca %"(Nil.class | UInt64.class)", !dbg !1610
%146 = alloca %"(Nil.class | UInt64.class)", !dbg !1610
%147 = alloca %"(UInt64 | Nil)", !dbg !1610
%148 = alloca %"(UInt64 | Nil)", !dbg !1610
%149 = alloca %"(UInt64 | Nil)", !dbg !1610
%150 = alloca %"(UInt64 | Nil)", !dbg !1610
%151 = alloca %"(String | UInt64 | Nil)", !dbg !1610
%152 = alloca %"Tuple(UInt64, UInt64, String)", !dbg !1610
br label %entry
entry: ; preds = %alloca
%153 = call %String** @"~PROGRAM_NAME:read"()
%154 = load %String*, %String** %153
store %String* %154, %String** %path, !dbg !1610
%155 = load %String*, %String** %path, !dbg !1610
store %String* %155, %String** %filename, !dbg !1611
store %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'r'" to %String*), %String** %mode, !dbg !1611
%156 = call i16* @"~File::DEFAULT_CREATE_PERMISSIONS:read"(), !dbg !1611
%157 = load i16, i16* %156, !dbg !1611
store i16 %157, i16* %perm, !dbg !1626
%158 = load %String*, %String** %filename, !dbg !1627
%159 = load %String*, %String** %mode, !dbg !1627
%160 = load i16, i16* %perm, !dbg !1627
%161 = load %Nil, %Nil* %encoding, !dbg !1627
%162 = load %Nil, %Nil* %invalid, !dbg !1627
%163 = call %File* @"*File::new<String, String, File::Permissions, Nil, Nil>:File"(%String* %158, %String* %159, i16 %160, %Nil zeroinitializer, %Nil zeroinitializer), !dbg !1628
store %File* %163, %File** %file1, !dbg !1629
%164 = load %File*, %File** %file1, !dbg !1629
store %File* %164, %File** %file, !dbg !1629
%165 = load %File*, %File** %file, !dbg !1629
%166 = invoke %"Debug::ELF" @"*Debug::ELF::new<File>:Debug::ELF"(%File* %165)
to label %invoke_out unwind label %rescue, !dbg !1612
rescue: ; preds = %exit606, %invoke_out607, %rescue131, %invoke_out126, %then108, %invoke_out123, %invoke_out122, %invoke_out119, %body117, %exit102, %exit98, %invoke_out99, %rescue93, %invoke_out88, %then70, %invoke_out85, %invoke_out84, %invoke_out81, %body79, %exit65, %exit61, %invoke_out62, %rescue57, %invoke_out52, %then34, %invoke_out49, %invoke_out48, %invoke_out45, %body43, %exit30, %exit26, %invoke_out27, %rescue15, %invoke_out13, %then, %invoke_out10, %invoke_out9, %invoke_out6, %body, %invoke_out, %entry
%167 = landingpad %landing_pad
cleanup, !dbg !1621
%168 = extractvalue %landing_pad %167, 0, !dbg !1621
%169 = extractvalue %landing_pad %167, 1, !dbg !1621
%170 = bitcast i8* %168 to %"struct.LibUnwind::Exception"*, !dbg !1630
%171 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %170), !dbg !1630
%172 = inttoptr i64 %171 to i32*, !dbg !1630
%173 = load %File*, %File** %file1, !dbg !1630
call void @"*File@IO::Buffered#close:Nil"(%File* %173), !dbg !1631
%174 = bitcast i8* %168 to %"struct.LibUnwind::Exception"*, !dbg !1631
call void @__crystal_raise(%"struct.LibUnwind::Exception"* %174), !dbg !1630
unreachable, !dbg !1630
invoke_out: ; preds = %entry
store %"Debug::ELF" %166, %"Debug::ELF"* %0, !dbg !1612
%175 = load %"Debug::ELF", %"Debug::ELF"* %0, !dbg !1612
store %"Debug::ELF" %175, %"Debug::ELF"* %elf, !dbg !1612
store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'.text'" to %String*), %String** %name, !dbg !1610
%176 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out3 unwind label %rescue, !dbg !1613
then: ; preds = %exit12
%177 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1632
%178 = load i32*, i32** %177, !dbg !1632
%179 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh2, i32 0, i32 1, !dbg !1632
%180 = bitcast [20 x i64]* %179 to %"Debug::ELF::SectionHeader"*, !dbg !1632
%181 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %180)
to label %invoke_out13 unwind label %rescue, !dbg !1619
else: ; preds = %exit12
%182 = getelementptr inbounds %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %12, i32 0, i32 0, !dbg !1621
store i32 0, i32* %182, !dbg !1621
%183 = getelementptr inbounds %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %12, i32 0, i32 1, !dbg !1621
store [1 x i64] zeroinitializer, [1 x i64]* %183, !dbg !1621
br label %exit30, !dbg !1621
invoke_out3: ; preds = %invoke_out
store i32 0, i32* %i5, !dbg !1633
br label %while, !dbg !1633
while: ; preds = %else8, %invoke_out3
%184 = load i32, i32* %i5, !dbg !1634
%185 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %176, i32 0, i32 1, !dbg !1634
%186 = load i32, i32* %185, !dbg !1634
%187 = icmp slt i32 %184, %186, !dbg !1634
br i1 %187, label %body, label %exit, !dbg !1634
body: ; preds = %while
%188 = load i32, i32* %i5, !dbg !1634
store i32 %188, i32* %i, !dbg !1634
%189 = load i32, i32* %i, !dbg !1634
%190 = invoke %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_fetch<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %176, i32 %189)
to label %invoke_out6 unwind label %rescue, !dbg !1616
exit: ; preds = %while
%191 = load %Nil, %Nil* %if_none, !dbg !1618
%192 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %3, i32 0, i32 0, !dbg !1618
store i32 0, i32* %192, !dbg !1618
%193 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %3, i32 0, i32 1, !dbg !1618
store [20 x i64] zeroinitializer, [20 x i64]* %193, !dbg !1618
br label %exit12, !dbg !1618
invoke_out6: ; preds = %body
store %"Debug::ELF::SectionHeader" %190, %"Debug::ELF::SectionHeader"* %1, !dbg !1616
%194 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %1, !dbg !1616
store %"Debug::ELF::SectionHeader" %194, %"Debug::ELF::SectionHeader"* %elem, !dbg !1616
%195 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem, !dbg !1635
store %"Debug::ELF::SectionHeader" %195, %"Debug::ELF::SectionHeader"* %sh4, !dbg !1635
%196 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh4)
to label %invoke_out9 unwind label %rescue, !dbg !1636
then7: ; preds = %invoke_out11
%197 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem, !dbg !1617
%198 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %2, i32 0, i32 0, !dbg !1617
store i32 342, i32* %198, !dbg !1617
%199 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %2, i32 0, i32 1, !dbg !1617
%200 = bitcast [20 x i64]* %199 to %"Debug::ELF::SectionHeader"*, !dbg !1617
store %"Debug::ELF::SectionHeader" %197, %"Debug::ELF::SectionHeader"* %200, !dbg !1617
br label %exit12, !dbg !1617
else8: ; preds = %invoke_out11
%201 = load i32, i32* %i5, !dbg !1617
%202 = add i32 %201, 1, !dbg !1617
store i32 %202, i32* %i5, !dbg !1618
br label %while, !dbg !1618
invoke_out9: ; preds = %invoke_out6
%203 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %196)
to label %invoke_out10 unwind label %rescue, !dbg !1617
invoke_out10: ; preds = %invoke_out9
%204 = load %String*, %String** %name, !dbg !1617
%205 = invoke i1 @"*String#==<String>:Bool"(%String* %203, %String* %204)
to label %invoke_out11 unwind label %rescue, !dbg !1617
invoke_out11: ; preds = %invoke_out10
br i1 %205, label %then7, label %else8, !dbg !1617
exit12: ; preds = %exit, %then7
%206 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %2, %then7 ], [ %3, %exit ], !dbg !1618
%207 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %206, !dbg !1632
store %"(Debug::ELF::SectionHeader | Nil)" %207, %"(Debug::ELF::SectionHeader | Nil)"* %sh2, !dbg !1632
%208 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %206, i32 0, i32 0, !dbg !1632
%209 = load i32, i32* %208, !dbg !1632
%210 = icmp eq i32 %209, 0, !dbg !1632
%211 = xor i1 %210, true, !dbg !1632
%212 = and i1 true, %211, !dbg !1632
br i1 %212, label %then, label %else, !dbg !1632
invoke_out13: ; preds = %then
store %"(UInt32 | UInt64)" %181, %"(UInt32 | UInt64)"* %4, !dbg !1619
%213 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %4, !dbg !1619
store %"(UInt32 | UInt64)" %213, %"(UInt32 | UInt64)"* %5, !dbg !1620
%214 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %5, !dbg !1620
store %"(UInt32 | UInt64)" %214, %"(UInt32 | UInt64)"* %offset, !dbg !1620
store i32 0, i32* %whence, !dbg !1637
%215 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %178)
to label %invoke_out14 unwind label %rescue, !dbg !1638
invoke_out14: ; preds = %invoke_out13
store i64 %215, i64* %original_pos, !dbg !1639
%216 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset, !dbg !1639
%217 = load i32, i32* %whence, !dbg !1639
%218 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %178, %"(UInt32 | UInt64)" %216, i32 %217)
to label %invoke_out16 unwind label %rescue15, !dbg !1640
rescue15: ; preds = %invoke_out17, %invoke_out16, %invoke_out14
%219 = landingpad %landing_pad
cleanup, !dbg !1610
%220 = extractvalue %landing_pad %219, 0, !dbg !1610
%221 = extractvalue %landing_pad %219, 1, !dbg !1610
%222 = bitcast i8* %220 to %"struct.LibUnwind::Exception"*, !dbg !1640
%223 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %222), !dbg !1640
%224 = inttoptr i64 %223 to i32*, !dbg !1640
%225 = load i64, i64* %original_pos, !dbg !1640
%226 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %178, i64 %225)
to label %invoke_out27 unwind label %rescue, !dbg !1621
invoke_out16: ; preds = %invoke_out14
%227 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh2, i32 0, i32 1, !dbg !1640
%228 = bitcast [20 x i64]* %227 to %"Debug::ELF::SectionHeader"*, !dbg !1640
%229 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1640
%230 = load i32*, i32** %229, !dbg !1640
%231 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %228, !dbg !1640
store %"Debug::ELF::SectionHeader" %231, %"Debug::ELF::SectionHeader"* %sh, !dbg !1640
%232 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#addr:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh)
to label %invoke_out17 unwind label %rescue15, !dbg !1610
invoke_out17: ; preds = %invoke_out16
store %"(UInt32 | UInt64)" %232, %"(UInt32 | UInt64)"* %6, !dbg !1610
%233 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 0, !dbg !1610
%234 = load i32, i32* %233, !dbg !1610
%235 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh)
to label %invoke_out18 unwind label %rescue15, !dbg !1610
invoke_out18: ; preds = %invoke_out17
store %"(UInt32 | UInt64)" %235, %"(UInt32 | UInt64)"* %7, !dbg !1610
%236 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 0, !dbg !1610
%237 = load i32, i32* %236, !dbg !1610
%238 = icmp eq i32 161, %234, !dbg !1610
%239 = icmp eq i32 161, %237, !dbg !1610
%240 = and i1 %238, %239, !dbg !1610
br i1 %240, label %current_def, label %next_def, !dbg !1610
current_def: ; preds = %invoke_out18
%241 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !1610
%242 = bitcast [1 x i64]* %241 to i32*, !dbg !1610
%243 = load i32, i32* %242, !dbg !1610
%244 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !1610
%245 = bitcast [1 x i64]* %244 to i32*, !dbg !1610
%246 = load i32, i32* %245, !dbg !1610
%247 = sub i32 %243, %246, !dbg !1610
%248 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %8, i32 0, i32 0, !dbg !1610
store i32 161, i32* %248, !dbg !1610
%249 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %8, i32 0, i32 1, !dbg !1610
%250 = bitcast [1 x i64]* %249 to i32*, !dbg !1610
store i32 %247, i32* %250, !dbg !1610
br label %exit19, !dbg !1610
next_def: ; preds = %invoke_out18
%251 = icmp eq i32 161, %234, !dbg !1610
%252 = icmp eq i32 163, %237, !dbg !1610
%253 = and i1 %251, %252, !dbg !1610
br i1 %253, label %current_def20, label %next_def21, !dbg !1610
exit19: ; preds = %current_def24, %current_def22, %current_def20, %current_def
%254 = phi %"(UInt32 | UInt64)"* [ %8, %current_def ], [ %9, %current_def20 ], [ %10, %current_def22 ], [ %11, %current_def24 ], !dbg !1610
%255 = bitcast %"(UInt32 | UInt64)"* %254 to %"(UInt32 | UInt64 | Nil)"*, !dbg !1610
%256 = load %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)"* %255, !dbg !1610
store %"(UInt32 | UInt64 | Nil)" %256, %"(UInt32 | UInt64 | Nil)"* @"CallStack::base_address", !dbg !1610
br label %exit26, !dbg !1610
current_def20: ; preds = %next_def
%257 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !1610
%258 = bitcast [1 x i64]* %257 to i32*, !dbg !1610
%259 = load i32, i32* %258, !dbg !1610
%260 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !1610
%261 = bitcast [1 x i64]* %260 to i64*, !dbg !1610
%262 = load i64, i64* %261, !dbg !1610
%263 = zext i32 %259 to i64, !dbg !1610
%264 = sub i64 %263, %262, !dbg !1610
%265 = trunc i64 %264 to i32, !dbg !1610
%266 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %9, i32 0, i32 0, !dbg !1610
store i32 161, i32* %266, !dbg !1610
%267 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %9, i32 0, i32 1, !dbg !1610
%268 = bitcast [1 x i64]* %267 to i32*, !dbg !1610
store i32 %265, i32* %268, !dbg !1610
br label %exit19, !dbg !1610
next_def21: ; preds = %next_def
%269 = icmp eq i32 163, %234, !dbg !1610
%270 = icmp eq i32 161, %237, !dbg !1610
%271 = and i1 %269, %270, !dbg !1610
br i1 %271, label %current_def22, label %next_def23, !dbg !1610
current_def22: ; preds = %next_def21
%272 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !1610
%273 = bitcast [1 x i64]* %272 to i64*, !dbg !1610
%274 = load i64, i64* %273, !dbg !1610
%275 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !1610
%276 = bitcast [1 x i64]* %275 to i32*, !dbg !1610
%277 = load i32, i32* %276, !dbg !1610
%278 = zext i32 %277 to i64, !dbg !1610
%279 = sub i64 %274, %278, !dbg !1610
%280 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %10, i32 0, i32 0, !dbg !1610
store i32 163, i32* %280, !dbg !1610
%281 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %10, i32 0, i32 1, !dbg !1610
%282 = bitcast [1 x i64]* %281 to i64*, !dbg !1610
store i64 %279, i64* %282, !dbg !1610
br label %exit19, !dbg !1610
next_def23: ; preds = %next_def21
%283 = icmp eq i32 163, %234, !dbg !1610
%284 = icmp eq i32 163, %237, !dbg !1610
%285 = and i1 %283, %284, !dbg !1610
br i1 %285, label %current_def24, label %next_def25, !dbg !1610
current_def24: ; preds = %next_def23
%286 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %6, i32 0, i32 1, !dbg !1610
%287 = bitcast [1 x i64]* %286 to i64*, !dbg !1610
%288 = load i64, i64* %287, !dbg !1610
%289 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %7, i32 0, i32 1, !dbg !1610
%290 = bitcast [1 x i64]* %289 to i64*, !dbg !1610
%291 = load i64, i64* %290, !dbg !1610
%292 = sub i64 %288, %291, !dbg !1610
%293 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %11, i32 0, i32 0, !dbg !1610
store i32 163, i32* %293, !dbg !1610
%294 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %11, i32 0, i32 1, !dbg !1610
%295 = bitcast [1 x i64]* %294 to i64*, !dbg !1610
store i64 %292, i64* %295, !dbg !1610
br label %exit19, !dbg !1610
next_def25: ; preds = %next_def23
unreachable, !dbg !1610
exit26: ; preds = %exit19
%296 = phi %"(UInt32 | UInt64)"* [ %254, %exit19 ], !dbg !1640
%297 = load i64, i64* %original_pos, !dbg !1640
%298 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %178, i64 %297)
to label %invoke_out29 unwind label %rescue, !dbg !1621
invoke_out27: ; preds = %rescue15
%299 = bitcast i8* %220 to %"struct.LibUnwind::Exception"*, !dbg !1621
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %299)
to label %invoke_out28 unwind label %rescue, !dbg !1640
invoke_out28: ; preds = %invoke_out27
unreachable, !dbg !1640
invoke_out29: ; preds = %exit26
%300 = bitcast %"(UInt32 | UInt64)"* %296 to %"(UInt32 | UInt64 | Nil)"*, !dbg !1621
br label %exit30, !dbg !1621
exit30: ; preds = %else, %invoke_out29
%301 = phi %"(UInt32 | UInt64 | Nil)"* [ %300, %invoke_out29 ], [ %12, %else ], !dbg !1621
store %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'.debug_line'" to %String*), %String** %name32, !dbg !1610
%302 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out36 unwind label %rescue, !dbg !1613
then34: ; preds = %exit51
%303 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1632
%304 = load i32*, i32** %303, !dbg !1632
%305 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh33, i32 0, i32 1, !dbg !1632
%306 = bitcast [20 x i64]* %305 to %"Debug::ELF::SectionHeader"*, !dbg !1632
%307 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %306)
to label %invoke_out52 unwind label %rescue, !dbg !1619
else35: ; preds = %exit51
%308 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %21, i32 0, i32 0, !dbg !1621
store i32 0, i32* %308, !dbg !1621
%309 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %21, i32 0, i32 1, !dbg !1621
store [4 x i64] zeroinitializer, [4 x i64]* %309, !dbg !1621
br label %exit65, !dbg !1621
invoke_out36: ; preds = %exit30
store i32 0, i32* %i41, !dbg !1633
br label %while42, !dbg !1633
while42: ; preds = %else47, %invoke_out36
%310 = load i32, i32* %i41, !dbg !1634
%311 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %302, i32 0, i32 1, !dbg !1634
%312 = load i32, i32* %311, !dbg !1634
%313 = icmp slt i32 %310, %312, !dbg !1634
br i1 %313, label %body43, label %exit44, !dbg !1634
body43: ; preds = %while42
%314 = load i32, i32* %i41, !dbg !1634
store i32 %314, i32* %i40, !dbg !1634
%315 = load i32, i32* %i40, !dbg !1634
%316 = invoke %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_fetch<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %302, i32 %315)
to label %invoke_out45 unwind label %rescue, !dbg !1616
exit44: ; preds = %while42
%317 = load %Nil, %Nil* %if_none38, !dbg !1618
%318 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %15, i32 0, i32 0, !dbg !1618
store i32 0, i32* %318, !dbg !1618
%319 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %15, i32 0, i32 1, !dbg !1618
store [20 x i64] zeroinitializer, [20 x i64]* %319, !dbg !1618
br label %exit51, !dbg !1618
invoke_out45: ; preds = %body43
store %"Debug::ELF::SectionHeader" %316, %"Debug::ELF::SectionHeader"* %13, !dbg !1616
%320 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %13, !dbg !1616
store %"Debug::ELF::SectionHeader" %320, %"Debug::ELF::SectionHeader"* %elem39, !dbg !1616
%321 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem39, !dbg !1635
store %"Debug::ELF::SectionHeader" %321, %"Debug::ELF::SectionHeader"* %sh37, !dbg !1635
%322 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh37)
to label %invoke_out48 unwind label %rescue, !dbg !1636
then46: ; preds = %invoke_out50
%323 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem39, !dbg !1617
%324 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %14, i32 0, i32 0, !dbg !1617
store i32 342, i32* %324, !dbg !1617
%325 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %14, i32 0, i32 1, !dbg !1617
%326 = bitcast [20 x i64]* %325 to %"Debug::ELF::SectionHeader"*, !dbg !1617
store %"Debug::ELF::SectionHeader" %323, %"Debug::ELF::SectionHeader"* %326, !dbg !1617
br label %exit51, !dbg !1617
else47: ; preds = %invoke_out50
%327 = load i32, i32* %i41, !dbg !1617
%328 = add i32 %327, 1, !dbg !1617
store i32 %328, i32* %i41, !dbg !1618
br label %while42, !dbg !1618
invoke_out48: ; preds = %invoke_out45
%329 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %322)
to label %invoke_out49 unwind label %rescue, !dbg !1617
invoke_out49: ; preds = %invoke_out48
%330 = load %String*, %String** %name32, !dbg !1617
%331 = invoke i1 @"*String#==<String>:Bool"(%String* %329, %String* %330)
to label %invoke_out50 unwind label %rescue, !dbg !1617
invoke_out50: ; preds = %invoke_out49
br i1 %331, label %then46, label %else47, !dbg !1617
exit51: ; preds = %exit44, %then46
%332 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %14, %then46 ], [ %15, %exit44 ], !dbg !1618
%333 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %332, !dbg !1632
store %"(Debug::ELF::SectionHeader | Nil)" %333, %"(Debug::ELF::SectionHeader | Nil)"* %sh33, !dbg !1632
%334 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %332, i32 0, i32 0, !dbg !1632
%335 = load i32, i32* %334, !dbg !1632
%336 = icmp eq i32 %335, 0, !dbg !1632
%337 = xor i1 %336, true, !dbg !1632
%338 = and i1 true, %337, !dbg !1632
br i1 %338, label %then34, label %else35, !dbg !1632
invoke_out52: ; preds = %then34
store %"(UInt32 | UInt64)" %307, %"(UInt32 | UInt64)"* %16, !dbg !1619
%339 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %16, !dbg !1619
store %"(UInt32 | UInt64)" %339, %"(UInt32 | UInt64)"* %17, !dbg !1620
%340 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %17, !dbg !1620
store %"(UInt32 | UInt64)" %340, %"(UInt32 | UInt64)"* %offset53, !dbg !1620
store i32 0, i32* %whence54, !dbg !1637
%341 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %304)
to label %invoke_out56 unwind label %rescue, !dbg !1638
invoke_out56: ; preds = %invoke_out52
store i64 %341, i64* %original_pos55, !dbg !1639
%342 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset53, !dbg !1639
%343 = load i32, i32* %whence54, !dbg !1639
%344 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %304, %"(UInt32 | UInt64)" %342, i32 %343)
to label %invoke_out58 unwind label %rescue57, !dbg !1640
rescue57: ; preds = %invoke_out59, %invoke_out58, %invoke_out56
%345 = landingpad %landing_pad
cleanup, !dbg !1610
%346 = extractvalue %landing_pad %345, 0, !dbg !1610
%347 = extractvalue %landing_pad %345, 1, !dbg !1610
%348 = bitcast i8* %346 to %"struct.LibUnwind::Exception"*, !dbg !1640
%349 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %348), !dbg !1640
%350 = inttoptr i64 %349 to i32*, !dbg !1640
%351 = load i64, i64* %original_pos55, !dbg !1640
%352 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %304, i64 %351)
to label %invoke_out62 unwind label %rescue, !dbg !1621
invoke_out58: ; preds = %invoke_out56
%353 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh33, i32 0, i32 1, !dbg !1640
%354 = bitcast [20 x i64]* %353 to %"Debug::ELF::SectionHeader"*, !dbg !1640
%355 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1640
%356 = load i32*, i32** %355, !dbg !1640
%357 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %354, !dbg !1640
store %"Debug::ELF::SectionHeader" %357, %"Debug::ELF::SectionHeader"* %sh31, !dbg !1640
store i32* %356, i32** %io, !dbg !1640
%358 = load i32*, i32** %io, !dbg !1640
%359 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#size:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh31)
to label %invoke_out59 unwind label %rescue57, !dbg !1610
invoke_out59: ; preds = %invoke_out58
store %"(UInt32 | UInt64)" %359, %"(UInt32 | UInt64)"* %18, !dbg !1610
%360 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %18, !dbg !1610
%361 = invoke %"Debug::DWARF::LineNumbers" @"*Debug::DWARF::LineNumbers::new<IO::FileDescriptor+, (UInt32 | UInt64)>:Debug::DWARF::LineNumbers"(i32* %358, %"(UInt32 | UInt64)" %360)
to label %invoke_out60 unwind label %rescue57, !dbg !1610
invoke_out60: ; preds = %invoke_out59
store %"Debug::DWARF::LineNumbers" %361, %"Debug::DWARF::LineNumbers"* %19, !dbg !1610
%362 = load %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %19, !dbg !1610
store i32 350, i32* getelementptr inbounds (%"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* @"CallStack::dwarf_line_numbers", i32 0, i32 0), !dbg !1610
store %"Debug::DWARF::LineNumbers" %362, %"Debug::DWARF::LineNumbers"* bitcast ([4 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 !1610
br label %exit61, !dbg !1610
exit61: ; preds = %invoke_out60
%363 = phi %"Debug::DWARF::LineNumbers"* [ %19, %invoke_out60 ], !dbg !1640
%364 = load i64, i64* %original_pos55, !dbg !1640
%365 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %304, i64 %364)
to label %invoke_out64 unwind label %rescue, !dbg !1621
invoke_out62: ; preds = %rescue57
%366 = bitcast i8* %346 to %"struct.LibUnwind::Exception"*, !dbg !1621
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %366)
to label %invoke_out63 unwind label %rescue, !dbg !1640
invoke_out63: ; preds = %invoke_out62
unreachable, !dbg !1640
invoke_out64: ; preds = %exit61
%367 = load %"Debug::DWARF::LineNumbers", %"Debug::DWARF::LineNumbers"* %363, !dbg !1621
%368 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %20, i32 0, i32 0, !dbg !1621
store i32 350, i32* %368, !dbg !1621
%369 = getelementptr inbounds %"(Debug::DWARF::LineNumbers | Nil)", %"(Debug::DWARF::LineNumbers | Nil)"* %20, i32 0, i32 1, !dbg !1621
%370 = bitcast [4 x i64]* %369 to %"Debug::DWARF::LineNumbers"*, !dbg !1621
store %"Debug::DWARF::LineNumbers" %367, %"Debug::DWARF::LineNumbers"* %370, !dbg !1621
br label %exit65, !dbg !1621
exit65: ; preds = %else35, %invoke_out64
%371 = phi %"(Debug::DWARF::LineNumbers | Nil)"* [ %20, %invoke_out64 ], [ %21, %else35 ], !dbg !1621
store %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'.debug_str'" to %String*), %String** %name68, !dbg !1610
%372 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out72 unwind label %rescue, !dbg !1613
then70: ; preds = %exit87
%373 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1632
%374 = load i32*, i32** %373, !dbg !1632
%375 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh69, i32 0, i32 1, !dbg !1632
%376 = bitcast [20 x i64]* %375 to %"Debug::ELF::SectionHeader"*, !dbg !1632
%377 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %376)
to label %invoke_out88 unwind label %rescue, !dbg !1619
else71: ; preds = %exit87
%378 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %31, i32 0, i32 0, !dbg !1621
store i32 0, i32* %378, !dbg !1621
%379 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %31, i32 0, i32 1, !dbg !1621
store [5 x i64] zeroinitializer, [5 x i64]* %379, !dbg !1621
br label %exit102, !dbg !1621
invoke_out72: ; preds = %exit65
store i32 0, i32* %i77, !dbg !1633
br label %while78, !dbg !1633
while78: ; preds = %else83, %invoke_out72
%380 = load i32, i32* %i77, !dbg !1634
%381 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %372, i32 0, i32 1, !dbg !1634
%382 = load i32, i32* %381, !dbg !1634
%383 = icmp slt i32 %380, %382, !dbg !1634
br i1 %383, label %body79, label %exit80, !dbg !1634
body79: ; preds = %while78
%384 = load i32, i32* %i77, !dbg !1634
store i32 %384, i32* %i76, !dbg !1634
%385 = load i32, i32* %i76, !dbg !1634
%386 = invoke %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_fetch<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %372, i32 %385)
to label %invoke_out81 unwind label %rescue, !dbg !1616
exit80: ; preds = %while78
%387 = load %Nil, %Nil* %if_none74, !dbg !1618
%388 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %24, i32 0, i32 0, !dbg !1618
store i32 0, i32* %388, !dbg !1618
%389 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %24, i32 0, i32 1, !dbg !1618
store [20 x i64] zeroinitializer, [20 x i64]* %389, !dbg !1618
br label %exit87, !dbg !1618
invoke_out81: ; preds = %body79
store %"Debug::ELF::SectionHeader" %386, %"Debug::ELF::SectionHeader"* %22, !dbg !1616
%390 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %22, !dbg !1616
store %"Debug::ELF::SectionHeader" %390, %"Debug::ELF::SectionHeader"* %elem75, !dbg !1616
%391 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem75, !dbg !1635
store %"Debug::ELF::SectionHeader" %391, %"Debug::ELF::SectionHeader"* %sh73, !dbg !1635
%392 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh73)
to label %invoke_out84 unwind label %rescue, !dbg !1636
then82: ; preds = %invoke_out86
%393 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem75, !dbg !1617
%394 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %23, i32 0, i32 0, !dbg !1617
store i32 342, i32* %394, !dbg !1617
%395 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %23, i32 0, i32 1, !dbg !1617
%396 = bitcast [20 x i64]* %395 to %"Debug::ELF::SectionHeader"*, !dbg !1617
store %"Debug::ELF::SectionHeader" %393, %"Debug::ELF::SectionHeader"* %396, !dbg !1617
br label %exit87, !dbg !1617
else83: ; preds = %invoke_out86
%397 = load i32, i32* %i77, !dbg !1617
%398 = add i32 %397, 1, !dbg !1617
store i32 %398, i32* %i77, !dbg !1618
br label %while78, !dbg !1618
invoke_out84: ; preds = %invoke_out81
%399 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %392)
to label %invoke_out85 unwind label %rescue, !dbg !1617
invoke_out85: ; preds = %invoke_out84
%400 = load %String*, %String** %name68, !dbg !1617
%401 = invoke i1 @"*String#==<String>:Bool"(%String* %399, %String* %400)
to label %invoke_out86 unwind label %rescue, !dbg !1617
invoke_out86: ; preds = %invoke_out85
br i1 %401, label %then82, label %else83, !dbg !1617
exit87: ; preds = %exit80, %then82
%402 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %23, %then82 ], [ %24, %exit80 ], !dbg !1618
%403 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %402, !dbg !1632
store %"(Debug::ELF::SectionHeader | Nil)" %403, %"(Debug::ELF::SectionHeader | Nil)"* %sh69, !dbg !1632
%404 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %402, i32 0, i32 0, !dbg !1632
%405 = load i32, i32* %404, !dbg !1632
%406 = icmp eq i32 %405, 0, !dbg !1632
%407 = xor i1 %406, true, !dbg !1632
%408 = and i1 true, %407, !dbg !1632
br i1 %408, label %then70, label %else71, !dbg !1632
invoke_out88: ; preds = %then70
store %"(UInt32 | UInt64)" %377, %"(UInt32 | UInt64)"* %25, !dbg !1619
%409 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %25, !dbg !1619
store %"(UInt32 | UInt64)" %409, %"(UInt32 | UInt64)"* %26, !dbg !1620
%410 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %26, !dbg !1620
store %"(UInt32 | UInt64)" %410, %"(UInt32 | UInt64)"* %offset89, !dbg !1620
store i32 0, i32* %whence90, !dbg !1637
%411 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %374)
to label %invoke_out92 unwind label %rescue, !dbg !1638
invoke_out92: ; preds = %invoke_out88
store i64 %411, i64* %original_pos91, !dbg !1639
%412 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset89, !dbg !1639
%413 = load i32, i32* %whence90, !dbg !1639
%414 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %374, %"(UInt32 | UInt64)" %412, i32 %413)
to label %invoke_out94 unwind label %rescue93, !dbg !1640
rescue93: ; preds = %invoke_out96, %invoke_out95, %invoke_out94, %invoke_out92
%415 = landingpad %landing_pad
cleanup, !dbg !1610
%416 = extractvalue %landing_pad %415, 0, !dbg !1610
%417 = extractvalue %landing_pad %415, 1, !dbg !1610
%418 = bitcast i8* %416 to %"struct.LibUnwind::Exception"*, !dbg !1640
%419 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %418), !dbg !1640
%420 = inttoptr i64 %419 to i32*, !dbg !1640
%421 = load i64, i64* %original_pos91, !dbg !1640
%422 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %374, i64 %421)
to label %invoke_out99 unwind label %rescue, !dbg !1621
invoke_out94: ; preds = %invoke_out92
%423 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh69, i32 0, i32 1, !dbg !1640
%424 = bitcast [20 x i64]* %423 to %"Debug::ELF::SectionHeader"*, !dbg !1640
%425 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1640
%426 = load i32*, i32** %425, !dbg !1640
%427 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %424, !dbg !1640
store %"Debug::ELF::SectionHeader" %427, %"Debug::ELF::SectionHeader"* %sh66, !dbg !1640
store i32* %426, i32** %io67, !dbg !1640
%428 = load i32*, i32** %io67, !dbg !1640
%429 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh66)
to label %invoke_out95 unwind label %rescue93, !dbg !1610
invoke_out95: ; preds = %invoke_out94
store %"(UInt32 | UInt64)" %429, %"(UInt32 | UInt64)"* %27, !dbg !1610
%430 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %27, !dbg !1610
%431 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#size:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh66)
to label %invoke_out96 unwind label %rescue93, !dbg !1610
invoke_out96: ; preds = %invoke_out95
store %"(UInt32 | UInt64)" %431, %"(UInt32 | UInt64)"* %28, !dbg !1610
%432 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %28, !dbg !1610
%433 = invoke %"Debug::DWARF::Strings" @"*Debug::DWARF::Strings::new<IO::FileDescriptor+, (UInt32 | UInt64), (UInt32 | UInt64)>:Debug::DWARF::Strings"(i32* %428, %"(UInt32 | UInt64)" %430, %"(UInt32 | UInt64)" %432)
to label %invoke_out97 unwind label %rescue93, !dbg !1610
invoke_out97: ; preds = %invoke_out96
store %"Debug::DWARF::Strings" %433, %"Debug::DWARF::Strings"* %29, !dbg !1610
br label %exit98, !dbg !1610
exit98: ; preds = %invoke_out97
%434 = phi %"Debug::DWARF::Strings"* [ %29, %invoke_out97 ], !dbg !1640
%435 = load i64, i64* %original_pos91, !dbg !1640
%436 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %374, i64 %435)
to label %invoke_out101 unwind label %rescue, !dbg !1621
invoke_out99: ; preds = %rescue93
%437 = bitcast i8* %416 to %"struct.LibUnwind::Exception"*, !dbg !1621
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %437)
to label %invoke_out100 unwind label %rescue, !dbg !1640
invoke_out100: ; preds = %invoke_out99
unreachable, !dbg !1640
invoke_out101: ; preds = %exit98
%438 = load %"Debug::DWARF::Strings", %"Debug::DWARF::Strings"* %434, !dbg !1621
%439 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %30, i32 0, i32 0, !dbg !1621
store i32 351, i32* %439, !dbg !1621
%440 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %30, i32 0, i32 1, !dbg !1621
%441 = bitcast [5 x i64]* %440 to %"Debug::DWARF::Strings"*, !dbg !1621
store %"Debug::DWARF::Strings" %438, %"Debug::DWARF::Strings"* %441, !dbg !1621
br label %exit102, !dbg !1621
exit102: ; preds = %else71, %invoke_out101
%442 = phi %"(Debug::DWARF::Strings | Nil)"* [ %30, %invoke_out101 ], [ %31, %else71 ], !dbg !1621
%443 = load %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %442, !dbg !1610
store %"(Debug::DWARF::Strings | Nil)" %443, %"(Debug::DWARF::Strings | Nil)"* %strings, !dbg !1610
store %String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'.debug_info'" to %String*), %String** %name106, !dbg !1610
%444 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out110 unwind label %rescue, !dbg !1613
then108: ; preds = %exit125
%445 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1632
%446 = load i32*, i32** %445, !dbg !1632
%447 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh107, i32 0, i32 1, !dbg !1632
%448 = bitcast [20 x i64]* %447 to %"Debug::ELF::SectionHeader"*, !dbg !1632
%449 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %448)
to label %invoke_out126 unwind label %rescue, !dbg !1619
else109: ; preds = %exit125
br label %exit610, !dbg !1621
invoke_out110: ; preds = %exit102
store i32 0, i32* %i115, !dbg !1633
br label %while116, !dbg !1633
while116: ; preds = %else121, %invoke_out110
%450 = load i32, i32* %i115, !dbg !1634
%451 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %444, i32 0, i32 1, !dbg !1634
%452 = load i32, i32* %451, !dbg !1634
%453 = icmp slt i32 %450, %452, !dbg !1634
br i1 %453, label %body117, label %exit118, !dbg !1634
body117: ; preds = %while116
%454 = load i32, i32* %i115, !dbg !1634
store i32 %454, i32* %i114, !dbg !1634
%455 = load i32, i32* %i114, !dbg !1634
%456 = invoke %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_fetch<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %444, i32 %455)
to label %invoke_out119 unwind label %rescue, !dbg !1616
exit118: ; preds = %while116
%457 = load %Nil, %Nil* %if_none112, !dbg !1618
%458 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %34, i32 0, i32 0, !dbg !1618
store i32 0, i32* %458, !dbg !1618
%459 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %34, i32 0, i32 1, !dbg !1618
store [20 x i64] zeroinitializer, [20 x i64]* %459, !dbg !1618
br label %exit125, !dbg !1618
invoke_out119: ; preds = %body117
store %"Debug::ELF::SectionHeader" %456, %"Debug::ELF::SectionHeader"* %32, !dbg !1616
%460 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %32, !dbg !1616
store %"Debug::ELF::SectionHeader" %460, %"Debug::ELF::SectionHeader"* %elem113, !dbg !1616
%461 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem113, !dbg !1635
store %"Debug::ELF::SectionHeader" %461, %"Debug::ELF::SectionHeader"* %sh111, !dbg !1635
%462 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh111)
to label %invoke_out122 unwind label %rescue, !dbg !1636
then120: ; preds = %invoke_out124
%463 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem113, !dbg !1617
%464 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %33, i32 0, i32 0, !dbg !1617
store i32 342, i32* %464, !dbg !1617
%465 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %33, i32 0, i32 1, !dbg !1617
%466 = bitcast [20 x i64]* %465 to %"Debug::ELF::SectionHeader"*, !dbg !1617
store %"Debug::ELF::SectionHeader" %463, %"Debug::ELF::SectionHeader"* %466, !dbg !1617
br label %exit125, !dbg !1617
else121: ; preds = %invoke_out124
%467 = load i32, i32* %i115, !dbg !1617
%468 = add i32 %467, 1, !dbg !1617
store i32 %468, i32* %i115, !dbg !1618
br label %while116, !dbg !1618
invoke_out122: ; preds = %invoke_out119
%469 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %462)
to label %invoke_out123 unwind label %rescue, !dbg !1617
invoke_out123: ; preds = %invoke_out122
%470 = load %String*, %String** %name106, !dbg !1617
%471 = invoke i1 @"*String#==<String>:Bool"(%String* %469, %String* %470)
to label %invoke_out124 unwind label %rescue, !dbg !1617
invoke_out124: ; preds = %invoke_out123
br i1 %471, label %then120, label %else121, !dbg !1617
exit125: ; preds = %exit118, %then120
%472 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %33, %then120 ], [ %34, %exit118 ], !dbg !1618
%473 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %472, !dbg !1632
store %"(Debug::ELF::SectionHeader | Nil)" %473, %"(Debug::ELF::SectionHeader | Nil)"* %sh107, !dbg !1632
%474 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %472, i32 0, i32 0, !dbg !1632
%475 = load i32, i32* %474, !dbg !1632
%476 = icmp eq i32 %475, 0, !dbg !1632
%477 = xor i1 %476, true, !dbg !1632
%478 = and i1 true, %477, !dbg !1632
br i1 %478, label %then108, label %else109, !dbg !1632
invoke_out126: ; preds = %then108
store %"(UInt32 | UInt64)" %449, %"(UInt32 | UInt64)"* %35, !dbg !1619
%479 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %35, !dbg !1619
store %"(UInt32 | UInt64)" %479, %"(UInt32 | UInt64)"* %36, !dbg !1620
%480 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %36, !dbg !1620
store %"(UInt32 | UInt64)" %480, %"(UInt32 | UInt64)"* %offset127, !dbg !1620
store i32 0, i32* %whence128, !dbg !1637
%481 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %446)
to label %invoke_out130 unwind label %rescue, !dbg !1638
invoke_out130: ; preds = %invoke_out126
store i64 %481, i64* %original_pos129, !dbg !1639
%482 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset127, !dbg !1639
%483 = load i32, i32* %whence128, !dbg !1639
%484 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %446, %"(UInt32 | UInt64)" %482, i32 %483)
to label %invoke_out132 unwind label %rescue131, !dbg !1640
rescue131: ; preds = %then596, %current_def583, %invoke_out576, %invoke_out575, %invoke_out574, %invoke_out573, %exit570, %invoke_out566, %doesnt_match565, %invoke_out559, %invoke_out558, %invoke_out557, %invoke_out556, %exit539, %invoke_out535, %doesnt_match534, %invoke_out526, %invoke_out525, %invoke_out524, %invoke_out523, %exit506, %invoke_out502, %doesnt_match501, %invoke_out495, %invoke_out494, %invoke_out493, %invoke_out492, %exit473, %invoke_out469, %doesnt_match468, %matches433, %invoke_out459, %invoke_out458, %invoke_out457, %invoke_out456, %exit439, %invoke_out435, %doesnt_match434, %body423, %then398, %current_def385, %invoke_out378, %invoke_out377, %invoke_out376, %invoke_out375, %exit372, %invoke_out368, %doesnt_match367, %invoke_out361, %invoke_out360, %invoke_out359, %invoke_out358, %exit341, %invoke_out337, %doesnt_match336, %invoke_out328, %invoke_out327, %invoke_out326, %invoke_out325, %exit308, %invoke_out304, %doesnt_match303, %invoke_out297, %invoke_out296, %invoke_out295, %invoke_out294, %exit275, %invoke_out271, %doesnt_match270, %matches, %invoke_out261, %invoke_out260, %invoke_out259, %invoke_out258, %exit241, %invoke_out237, %doesnt_match, %body228, %invoke_out215, %invoke_out214, %body212, %invoke_out207, %invoke_out204, %invoke_out203, %body200, %while199, %exit180, %invoke_out181, %rescue177, %invoke_out172, %then154, %invoke_out169, %invoke_out168, %invoke_out165, %body163, %invoke_out149, %body134, %exit140, %invoke_out136, %while133, %invoke_out130
%485 = landingpad %landing_pad
cleanup, !dbg !1610
%486 = extractvalue %landing_pad %485, 0, !dbg !1610
%487 = extractvalue %landing_pad %485, 1, !dbg !1610
%488 = bitcast i8* %486 to %"struct.LibUnwind::Exception"*, !dbg !1640
%489 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %488), !dbg !1640
%490 = inttoptr i64 %489 to i32*, !dbg !1640
%491 = load i64, i64* %original_pos129, !dbg !1640
%492 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %446, i64 %491)
to label %invoke_out607 unwind label %rescue, !dbg !1621
invoke_out132: ; preds = %invoke_out130
%493 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh107, i32 0, i32 1, !dbg !1640
%494 = bitcast [20 x i64]* %493 to %"Debug::ELF::SectionHeader"*, !dbg !1640
%495 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1640
%496 = load i32*, i32** %495, !dbg !1640
%497 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %494, !dbg !1640
store %"Debug::ELF::SectionHeader" %497, %"Debug::ELF::SectionHeader"* %sh103, !dbg !1640
store i32* %496, i32** %io104, !dbg !1640
%498 = call %"Array(Tuple(UInt64, UInt64, String))"* @"*Array(Tuple(UInt64, UInt64, String))@Array(T)::new:Array(Tuple(UInt64, UInt64, String))"(i32 514), !dbg !1610
store %"Array(Tuple(UInt64, UInt64, String))"* %498, %"Array(Tuple(UInt64, UInt64, String))"** %names, !dbg !1610
br label %while133, !dbg !1610
while133: ; preds = %exit201, %invoke_out132
%499 = load i32*, i32** %io104, !dbg !1610
%500 = invoke i64 @"*IO::FileDescriptor+@IO::FileDescriptor#pos:Int64"(i32* %499)
to label %invoke_out136 unwind label %rescue131, !dbg !1610
body134: ; preds = %exit146
%501 = load i32*, i32** %io104, !dbg !1610
%502 = load i64, i64* %offset105, !dbg !1610
%503 = invoke %"Debug::DWARF::Info" @"*Debug::DWARF::Info::new<IO::FileDescriptor+, Int64>:Debug::DWARF::Info"(i32* %501, i64 %502)
to label %invoke_out149 unwind label %rescue131, !dbg !1610
exit135: ; preds = %exit146
%504 = load %"Array(Tuple(UInt64, UInt64, String))"*, %"Array(Tuple(UInt64, UInt64, String))"** %names, !dbg !1610
store %"Array(Tuple(UInt64, UInt64, String))"* %504, %"Array(Tuple(UInt64, UInt64, String))"** @"CallStack::dwarf_function_names", !dbg !1610
br label %exit606, !dbg !1610
invoke_out136: ; preds = %while133
%505 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh103)
to label %invoke_out137 unwind label %rescue131, !dbg !1610
invoke_out137: ; preds = %invoke_out136
store %"(UInt32 | UInt64)" %505, %"(UInt32 | UInt64)"* %37, !dbg !1610
%506 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %37, i32 0, i32 0, !dbg !1610
%507 = load i32, i32* %506, !dbg !1610
%508 = icmp eq i32 161, %507, !dbg !1610
%509 = and i1 true, %508, !dbg !1610
br i1 %509, label %current_def138, label %next_def139, !dbg !1610
current_def138: ; preds = %invoke_out137
%510 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %37, i32 0, i32 1, !dbg !1610
%511 = bitcast [1 x i64]* %510 to i32*, !dbg !1610
%512 = load i32, i32* %511, !dbg !1610
%513 = zext i32 %512 to i64, !dbg !1610
%514 = sub i64 %500, %513, !dbg !1610
br label %exit140, !dbg !1610
next_def139: ; preds = %invoke_out137
%515 = icmp eq i32 163, %507, !dbg !1610
%516 = and i1 true, %515, !dbg !1610
br i1 %516, label %current_def141, label %next_def142, !dbg !1610
exit140: ; preds = %current_def141, %current_def138
%517 = phi i64 [ %514, %current_def138 ], [ %522, %current_def141 ], !dbg !1610
store i64 %517, i64* %offset105, !dbg !1610
%518 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#size:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %sh103)
to label %invoke_out143 unwind label %rescue131, !dbg !1610
current_def141: ; preds = %next_def139
%519 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %37, i32 0, i32 1, !dbg !1610
%520 = bitcast [1 x i64]* %519 to i64*, !dbg !1610
%521 = load i64, i64* %520, !dbg !1610
%522 = sub i64 %500, %521, !dbg !1610
br label %exit140, !dbg !1610
next_def142: ; preds = %next_def139
unreachable, !dbg !1610
invoke_out143: ; preds = %exit140
store %"(UInt32 | UInt64)" %518, %"(UInt32 | UInt64)"* %38, !dbg !1610
%523 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %38, i32 0, i32 0, !dbg !1610
%524 = load i32, i32* %523, !dbg !1610
%525 = icmp eq i32 161, %524, !dbg !1610
%526 = and i1 true, %525, !dbg !1610
br i1 %526, label %current_def144, label %next_def145, !dbg !1610
current_def144: ; preds = %invoke_out143
%527 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %38, i32 0, i32 1, !dbg !1610
%528 = bitcast [1 x i64]* %527 to i32*, !dbg !1610
%529 = load i32, i32* %528, !dbg !1610
%530 = icmp slt i64 %517, 0, !dbg !1610
%531 = zext i32 %529 to i64, !dbg !1610
%532 = icmp slt i64 %517, %531, !dbg !1610
%533 = or i1 %530, %532, !dbg !1610
br label %exit146, !dbg !1610
next_def145: ; preds = %invoke_out143
%534 = icmp eq i32 163, %524, !dbg !1610
%535 = and i1 true, %534, !dbg !1610
br i1 %535, label %current_def147, label %next_def148, !dbg !1610
exit146: ; preds = %current_def147, %current_def144
%536 = phi i1 [ %533, %current_def144 ], [ %542, %current_def147 ], !dbg !1610
br i1 %536, label %body134, label %exit135, !dbg !1610
current_def147: ; preds = %next_def145
%537 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %38, i32 0, i32 1, !dbg !1610
%538 = bitcast [1 x i64]* %537 to i64*, !dbg !1610
%539 = load i64, i64* %538, !dbg !1610
%540 = icmp slt i64 %517, 0, !dbg !1610
%541 = icmp ult i64 %517, %539, !dbg !1610
%542 = or i1 %540, %541, !dbg !1610
br label %exit146, !dbg !1610
next_def148: ; preds = %next_def145
unreachable, !dbg !1610
invoke_out149: ; preds = %body134
store %"Debug::DWARF::Info" %503, %"Debug::DWARF::Info"* %39, !dbg !1610
%543 = load %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %39, !dbg !1610
store %"Debug::DWARF::Info" %543, %"Debug::DWARF::Info"* %info, !dbg !1610
store %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'.debug_abbrev'" to %String*), %String** %name152, !dbg !1610
%544 = invoke %"Array(Debug::ELF::SectionHeader)"* @"*Debug::ELF#section_headers:Array(Debug::ELF::SectionHeader)"(%"Debug::ELF"* %elf)
to label %invoke_out156 unwind label %rescue131, !dbg !1613
then154: ; preds = %exit171
%545 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1632
%546 = load i32*, i32** %545, !dbg !1632
%547 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh153, i32 0, i32 1, !dbg !1632
%548 = bitcast [20 x i64]* %547 to %"Debug::ELF::SectionHeader"*, !dbg !1632
%549 = invoke %"(UInt32 | UInt64)" @"*Debug::ELF::SectionHeader#offset:(UInt32 | UInt64)"(%"Debug::ELF::SectionHeader"* %548)
to label %invoke_out172 unwind label %rescue131, !dbg !1619
else155: ; preds = %exit171
br label %exit184, !dbg !1621
invoke_out156: ; preds = %invoke_out149
store i32 0, i32* %i161, !dbg !1633
br label %while162, !dbg !1633
while162: ; preds = %else167, %invoke_out156
%550 = load i32, i32* %i161, !dbg !1634
%551 = getelementptr inbounds %"Array(Debug::ELF::SectionHeader)", %"Array(Debug::ELF::SectionHeader)"* %544, i32 0, i32 1, !dbg !1634
%552 = load i32, i32* %551, !dbg !1634
%553 = icmp slt i32 %550, %552, !dbg !1634
br i1 %553, label %body163, label %exit164, !dbg !1634
body163: ; preds = %while162
%554 = load i32, i32* %i161, !dbg !1634
store i32 %554, i32* %i160, !dbg !1634
%555 = load i32, i32* %i160, !dbg !1634
%556 = invoke %"Debug::ELF::SectionHeader" @"*Array(Debug::ELF::SectionHeader)@Array(T)#unsafe_fetch<Int32>:Debug::ELF::SectionHeader"(%"Array(Debug::ELF::SectionHeader)"* %544, i32 %555)
to label %invoke_out165 unwind label %rescue131, !dbg !1616
exit164: ; preds = %while162
%557 = load %Nil, %Nil* %if_none158, !dbg !1618
%558 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %42, i32 0, i32 0, !dbg !1618
store i32 0, i32* %558, !dbg !1618
%559 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %42, i32 0, i32 1, !dbg !1618
store [20 x i64] zeroinitializer, [20 x i64]* %559, !dbg !1618
br label %exit171, !dbg !1618
invoke_out165: ; preds = %body163
store %"Debug::ELF::SectionHeader" %556, %"Debug::ELF::SectionHeader"* %40, !dbg !1616
%560 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %40, !dbg !1616
store %"Debug::ELF::SectionHeader" %560, %"Debug::ELF::SectionHeader"* %elem159, !dbg !1616
%561 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem159, !dbg !1635
store %"Debug::ELF::SectionHeader" %561, %"Debug::ELF::SectionHeader"* %sh157, !dbg !1635
%562 = invoke i32 @"*Debug::ELF::SectionHeader#name:UInt32"(%"Debug::ELF::SectionHeader"* %sh157)
to label %invoke_out168 unwind label %rescue131, !dbg !1636
then166: ; preds = %invoke_out170
%563 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %elem159, !dbg !1617
%564 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %41, i32 0, i32 0, !dbg !1617
store i32 342, i32* %564, !dbg !1617
%565 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %41, i32 0, i32 1, !dbg !1617
%566 = bitcast [20 x i64]* %565 to %"Debug::ELF::SectionHeader"*, !dbg !1617
store %"Debug::ELF::SectionHeader" %563, %"Debug::ELF::SectionHeader"* %566, !dbg !1617
br label %exit171, !dbg !1617
else167: ; preds = %invoke_out170
%567 = load i32, i32* %i161, !dbg !1617
%568 = add i32 %567, 1, !dbg !1617
store i32 %568, i32* %i161, !dbg !1618
br label %while162, !dbg !1618
invoke_out168: ; preds = %invoke_out165
%569 = invoke %String* @"*Debug::ELF#sh_name<UInt32>:String"(%"Debug::ELF"* %elf, i32 %562)
to label %invoke_out169 unwind label %rescue131, !dbg !1617
invoke_out169: ; preds = %invoke_out168
%570 = load %String*, %String** %name152, !dbg !1617
%571 = invoke i1 @"*String#==<String>:Bool"(%String* %569, %String* %570)
to label %invoke_out170 unwind label %rescue131, !dbg !1617
invoke_out170: ; preds = %invoke_out169
br i1 %571, label %then166, label %else167, !dbg !1617
exit171: ; preds = %exit164, %then166
%572 = phi %"(Debug::ELF::SectionHeader | Nil)"* [ %41, %then166 ], [ %42, %exit164 ], !dbg !1618
%573 = load %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %572, !dbg !1632
store %"(Debug::ELF::SectionHeader | Nil)" %573, %"(Debug::ELF::SectionHeader | Nil)"* %sh153, !dbg !1632
%574 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %572, i32 0, i32 0, !dbg !1632
%575 = load i32, i32* %574, !dbg !1632
%576 = icmp eq i32 %575, 0, !dbg !1632
%577 = xor i1 %576, true, !dbg !1632
%578 = and i1 true, %577, !dbg !1632
br i1 %578, label %then154, label %else155, !dbg !1632
invoke_out172: ; preds = %then154
store %"(UInt32 | UInt64)" %549, %"(UInt32 | UInt64)"* %43, !dbg !1619
%579 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %43, !dbg !1619
store %"(UInt32 | UInt64)" %579, %"(UInt32 | UInt64)"* %44, !dbg !1620
%580 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %44, !dbg !1620
store %"(UInt32 | UInt64)" %580, %"(UInt32 | UInt64)"* %offset173, !dbg !1620
store i32 0, i32* %whence174, !dbg !1637
%581 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %546)
to label %invoke_out176 unwind label %rescue131, !dbg !1638
invoke_out176: ; preds = %invoke_out172
store i64 %581, i64* %original_pos175, !dbg !1639
%582 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %offset173, !dbg !1639
%583 = load i32, i32* %whence174, !dbg !1639
%584 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<(UInt32 | UInt64), IO::Seek>:IO::FileDescriptor+"(i32* %546, %"(UInt32 | UInt64)" %582, i32 %583)
to label %invoke_out178 unwind label %rescue177, !dbg !1640
rescue177: ; preds = %invoke_out178, %invoke_out176
%585 = landingpad %landing_pad
cleanup, !dbg !1610
%586 = extractvalue %landing_pad %585, 0, !dbg !1610
%587 = extractvalue %landing_pad %585, 1, !dbg !1610
%588 = bitcast i8* %586 to %"struct.LibUnwind::Exception"*, !dbg !1640
%589 = call i64 @__crystal_get_exception(%"struct.LibUnwind::Exception"* %588), !dbg !1640
%590 = inttoptr i64 %589 to i32*, !dbg !1640
%591 = load i64, i64* %original_pos175, !dbg !1640
%592 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %546, i64 %591)
to label %invoke_out181 unwind label %rescue131, !dbg !1621
invoke_out178: ; preds = %invoke_out176
%593 = getelementptr inbounds %"(Debug::ELF::SectionHeader | Nil)", %"(Debug::ELF::SectionHeader | Nil)"* %sh153, i32 0, i32 1, !dbg !1640
%594 = bitcast [20 x i64]* %593 to %"Debug::ELF::SectionHeader"*, !dbg !1640
%595 = getelementptr inbounds %"Debug::ELF", %"Debug::ELF"* %elf, i32 0, i32 14, !dbg !1640
%596 = load i32*, i32** %595, !dbg !1640
%597 = load %"Debug::ELF::SectionHeader", %"Debug::ELF::SectionHeader"* %594, !dbg !1640
store %"Debug::ELF::SectionHeader" %597, %"Debug::ELF::SectionHeader"* %sh150, !dbg !1640
store i32* %596, i32** %io151, !dbg !1640
%598 = load i32*, i32** %io151, !dbg !1640
%599 = invoke %"Array(Debug::DWARF::Abbrev)"* @"*Debug::DWARF::Info#read_abbreviations<IO::FileDescriptor+>:Array(Debug::DWARF::Abbrev)"(%"Debug::DWARF::Info"* %info, i32* %598)
to label %invoke_out179 unwind label %rescue177, !dbg !1610
invoke_out179: ; preds = %invoke_out178
br label %exit180, !dbg !1610
exit180: ; preds = %invoke_out179
%600 = phi %"Array(Debug::DWARF::Abbrev)"* [ %599, %invoke_out179 ], !dbg !1640
%601 = load i64, i64* %original_pos175, !dbg !1640
%602 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %546, i64 %601)
to label %invoke_out183 unwind label %rescue131, !dbg !1621
invoke_out181: ; preds = %rescue177
%603 = bitcast i8* %586 to %"struct.LibUnwind::Exception"*, !dbg !1621
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %603)
to label %invoke_out182 unwind label %rescue131, !dbg !1640
invoke_out182: ; preds = %invoke_out181
unreachable, !dbg !1640
invoke_out183: ; preds = %exit180
br label %exit184, !dbg !1621
exit184: ; preds = %else155, %invoke_out183
%604 = phi %"Array(Debug::DWARF::Abbrev)"* [ %600, %invoke_out183 ], [ null, %else155 ], !dbg !1621
%605 = load %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %info, !dbg !1621
%606 = load %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %strings, !dbg !1621
store %"Debug::DWARF::Info" %605, %"Debug::DWARF::Info"* %45, !dbg !1610
%607 = load %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %45, !dbg !1610
store %"Debug::DWARF::Info" %607, %"Debug::DWARF::Info"* %info186, !dbg !1610
store %"(Debug::DWARF::Strings | Nil)" %606, %"(Debug::DWARF::Strings | Nil)"* %46, !dbg !1610
%608 = load %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %46, !dbg !1610
store %"(Debug::DWARF::Strings | Nil)" %608, %"(Debug::DWARF::Strings | Nil)"* %strings187, !dbg !1610
%609 = getelementptr inbounds %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %info186, i32 0, i32 6, !dbg !1610
%610 = load i64, i64* %609, !dbg !1610
%611 = getelementptr inbounds %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %info186, i32 0, i32 0, !dbg !1610
%612 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %611, i32 0, i32 0, !dbg !1610
%613 = load i32, i32* %612, !dbg !1610
%614 = icmp eq i32 161, %613, !dbg !1610
%615 = and i1 true, %614, !dbg !1610
br i1 %615, label %current_def194, label %next_def195, !dbg !1610
current_def194: ; preds = %exit184
%616 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %611, i32 0, i32 1, !dbg !1610
%617 = bitcast [1 x i64]* %616 to i32*, !dbg !1610
%618 = load i32, i32* %617, !dbg !1610
%619 = zext i32 %618 to i64, !dbg !1610
%620 = add i64 %610, %619, !dbg !1610
br label %exit196, !dbg !1610
next_def195: ; preds = %exit184
%621 = icmp eq i32 163, %613, !dbg !1610
%622 = and i1 true, %621, !dbg !1610
br i1 %622, label %current_def197, label %next_def198, !dbg !1610
exit196: ; preds = %current_def197, %current_def194
%623 = phi i64 [ %620, %current_def194 ], [ %628, %current_def197 ], !dbg !1610
store i64 %623, i64* %end_offset, !dbg !1641
%624 = call %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* @"*Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))@Array(T)::new:Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"(i32 538), !dbg !1642
store %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %624, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes191, !dbg !1643
br label %while199, !dbg !1643
current_def197: ; preds = %next_def195
%625 = getelementptr inbounds %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %611, i32 0, i32 1, !dbg !1610
%626 = bitcast [1 x i64]* %625 to i64*, !dbg !1610
%627 = load i64, i64* %626, !dbg !1610
%628 = add i64 %610, %627, !dbg !1610
br label %exit196, !dbg !1610
next_def198: ; preds = %next_def195
unreachable, !dbg !1610
while199: ; preds = %exit408, %exit196
%629 = getelementptr inbounds %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %info186, i32 0, i32 8, !dbg !1644
%630 = load i32*, i32** %629, !dbg !1644
%631 = invoke i64 @"*IO::FileDescriptor+@IO#tell:Int64"(i32* %630)
to label %invoke_out202 unwind label %rescue131, !dbg !1644
body200: ; preds = %invoke_out202
%632 = getelementptr inbounds %"Debug::DWARF::Info", %"Debug::DWARF::Info"* %info186, i32 0, i32 8, !dbg !1644
%633 = load i32*, i32** %632, !dbg !1644
%634 = invoke i32 @"*Debug::DWARF::read_unsigned_leb128<IO::FileDescriptor+>:UInt32"(i32* %633)
to label %invoke_out203 unwind label %rescue131, !dbg !1645
exit201: ; preds = %invoke_out202
br label %while133, !dbg !1610
invoke_out202: ; preds = %while199
%635 = load i64, i64* %end_offset, !dbg !1644
%636 = icmp slt i64 %631, %635, !dbg !1644
br i1 %636, label %body200, label %exit201, !dbg !1644
invoke_out203: ; preds = %body200
store i32 %634, i32* %code192, !dbg !1646
%637 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes191, !dbg !1646
%638 = invoke %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* @"*Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))@Array(T)#clear:Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"(%"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %637)
to label %invoke_out204 unwind label %rescue131, !dbg !1647
invoke_out204: ; preds = %invoke_out203
%639 = invoke %"Array(Debug::DWARF::Abbrev)"* @"*Debug::DWARF::Info#abbreviations:Array(Debug::DWARF::Abbrev)"(%"Debug::DWARF::Info"* %info186)
to label %invoke_out207 unwind label %rescue131, !dbg !1622
then205: ; preds = %invoke_out208
%640 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev193, i32 0, i32 1, !dbg !1648
%641 = bitcast [3 x i64]* %640 to %"Debug::DWARF::Abbrev"*, !dbg !1648
%642 = getelementptr inbounds %"Debug::DWARF::Abbrev", %"Debug::DWARF::Abbrev"* %641, i32 0, i32 2, !dbg !1648
%643 = load %"Array(Debug::DWARF::Abbrev::Attribute)"*, %"Array(Debug::DWARF::Abbrev::Attribute)"** %642, !dbg !1648
store i32 0, i32* %i210, !dbg !1633
br label %while211, !dbg !1633
else206: ; preds = %invoke_out208
%644 = load i32, i32* %code192, !dbg !1610
%645 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes191, !dbg !1610
store i32 %644, i32* %code, !dbg !1610
%646 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 0, !dbg !1610
store i32 0, i32* %646, !dbg !1610
%647 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 1, !dbg !1610
store [3 x i64] zeroinitializer, [3 x i64]* %647, !dbg !1610
store %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %645, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes, !dbg !1610
%648 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 0, !dbg !1610
%649 = load i32, i32* %648, !dbg !1610
%650 = icmp eq i32 %649, 0, !dbg !1610
%651 = xor i1 %650, true, !dbg !1610
%652 = and i1 true, %651, !dbg !1610
br i1 %652, label %then411, label %else412, !dbg !1610
invoke_out207: ; preds = %invoke_out204
%653 = load i32, i32* %code192, !dbg !1622
%654 = sub i32 %653, 1, !dbg !1622
%655 = invoke %"(Debug::DWARF::Abbrev | Nil)" @"*Array(Debug::DWARF::Abbrev)@Indexable(T)#[]?<UInt32>:(Debug::DWARF::Abbrev | Nil)"(%"Array(Debug::DWARF::Abbrev)"* %639, i32 %654)
to label %invoke_out208 unwind label %rescue131, !dbg !1622
invoke_out208: ; preds = %invoke_out207
store %"(Debug::DWARF::Abbrev | Nil)" %655, %"(Debug::DWARF::Abbrev | Nil)"* %47, !dbg !1622
%656 = load %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %47, !dbg !1648
store %"(Debug::DWARF::Abbrev | Nil)" %656, %"(Debug::DWARF::Abbrev | Nil)"* %abbrev193, !dbg !1648
%657 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %47, i32 0, i32 0, !dbg !1648
%658 = load i32, i32* %657, !dbg !1648
%659 = icmp eq i32 %658, 0, !dbg !1648
%660 = xor i1 %659, true, !dbg !1648
%661 = and i1 true, %660, !dbg !1648
br i1 %661, label %then205, label %else206, !dbg !1648
while211: ; preds = %invoke_out216, %then205
%662 = load i32, i32* %i210, !dbg !1634
%663 = getelementptr inbounds %"Array(Debug::DWARF::Abbrev::Attribute)", %"Array(Debug::DWARF::Abbrev::Attribute)"* %643, i32 0, i32 1, !dbg !1634
%664 = load i32, i32* %663, !dbg !1634
%665 = icmp slt i32 %662, %664, !dbg !1634
br i1 %665, label %body212, label %exit213, !dbg !1634
body212: ; preds = %while211
%666 = load i32, i32* %i210, !dbg !1634
store i32 %666, i32* %i209, !dbg !1634
%667 = load i32, i32* %i209, !dbg !1634
%668 = invoke %"Debug::DWARF::Abbrev::Attribute" @"*Array(Debug::DWARF::Abbrev::Attribute)@Array(T)#unsafe_fetch<Int32>:Debug::DWARF::Abbrev::Attribute"(%"Array(Debug::DWARF::Abbrev::Attribute)"* %643, i32 %667)
to label %invoke_out214 unwind label %rescue131, !dbg !1616
exit213: ; preds = %while211
%669 = load i32, i32* %code192, !dbg !1618
%670 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev193, i32 0, i32 1, !dbg !1618
%671 = bitcast [3 x i64]* %670 to %"Debug::DWARF::Abbrev"*, !dbg !1618
%672 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes191, !dbg !1618
store i32 %669, i32* %code, !dbg !1618
%673 = load %"Debug::DWARF::Abbrev", %"Debug::DWARF::Abbrev"* %671, !dbg !1618
%674 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 0, !dbg !1618
store i32 345, i32* %674, !dbg !1618
%675 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 1, !dbg !1618
%676 = bitcast [3 x i64]* %675 to %"Debug::DWARF::Abbrev"*, !dbg !1618
store %"Debug::DWARF::Abbrev" %673, %"Debug::DWARF::Abbrev"* %676, !dbg !1618
store %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %672, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes, !dbg !1618
%677 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 0, !dbg !1610
%678 = load i32, i32* %677, !dbg !1610
%679 = icmp eq i32 %678, 0, !dbg !1610
%680 = xor i1 %679, true, !dbg !1610
%681 = and i1 true, %680, !dbg !1610
br i1 %681, label %then219, label %else220, !dbg !1610
invoke_out214: ; preds = %body212
store %"Debug::DWARF::Abbrev::Attribute" %668, %"Debug::DWARF::Abbrev::Attribute"* %48, !dbg !1616
%682 = load %"Debug::DWARF::Abbrev::Attribute", %"Debug::DWARF::Abbrev::Attribute"* %48, !dbg !1616
store %"Debug::DWARF::Abbrev::Attribute" %682, %"Debug::DWARF::Abbrev::Attribute"* %attr, !dbg !1616
%683 = getelementptr inbounds %"Debug::DWARF::Abbrev::Attribute", %"Debug::DWARF::Abbrev::Attribute"* %attr, i32 0, i32 1, !dbg !1616
%684 = load i32, i32* %683, !dbg !1616
%685 = invoke %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" @"*Debug::DWARF::Info#read_attribute_value<Debug::DWARF::FORM>:(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"(%"Debug::DWARF::Info"* %info186, i32 %684)
to label %invoke_out215 unwind label %rescue131, !dbg !1624
invoke_out215: ; preds = %invoke_out214
store %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %685, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %49, !dbg !1624
%686 = load %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %49, !dbg !1625
store %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %686, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %value, !dbg !1625
%687 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes191, !dbg !1625
%688 = getelementptr inbounds %"Debug::DWARF::Abbrev::Attribute", %"Debug::DWARF::Abbrev::Attribute"* %attr, i32 0, i32 0, !dbg !1625
%689 = load i32, i32* %688, !dbg !1625
%690 = getelementptr inbounds %"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)"* %50, i32 0, i32 0, !dbg !1625
store i32 %689, i32* %690, !dbg !1625
%691 = getelementptr inbounds %"Debug::DWARF::Abbrev::Attribute", %"Debug::DWARF::Abbrev::Attribute"* %attr, i32 0, i32 1, !dbg !1625
%692 = load i32, i32* %691, !dbg !1625
%693 = getelementptr inbounds %"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)"* %50, i32 0, i32 1, !dbg !1625
store i32 %692, i32* %693, !dbg !1625
%694 = getelementptr inbounds %"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)"* %50, i32 0, i32 2, !dbg !1625
%695 = load %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %value, !dbg !1625
store %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %695, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %694, !dbg !1625
%696 = load %"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)"* %50, !dbg !1625
%697 = invoke %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* @"*Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))@Array(T)#<<<Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)>:Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"(%"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %687, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %696)
to label %invoke_out216 unwind label %rescue131, !dbg !1649
invoke_out216: ; preds = %invoke_out215
%698 = load i32, i32* %i210, !dbg !1649
%699 = add i32 %698, 1, !dbg !1649
store i32 %699, i32* %i210, !dbg !1618
br label %while211, !dbg !1618
then217: ; preds = %exit221
br label %exit222, !dbg !1610
else218: ; preds = %exit221
br label %exit223, !dbg !1610
then219: ; preds = %exit213
%700 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 1, !dbg !1610
%701 = bitcast [3 x i64]* %700 to %"Debug::DWARF::Abbrev"*, !dbg !1610
%702 = getelementptr inbounds %"Debug::DWARF::Abbrev", %"Debug::DWARF::Abbrev"* %701, i32 0, i32 1, !dbg !1610
%703 = load i32, i32* %702, !dbg !1610
%704 = call i1 @"*Debug::DWARF::TAG#subprogram?:Bool"(i32 %703), !dbg !1610
%705 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %51, i32 0, i32 0, !dbg !1610
store i32 171, i32* %705, !dbg !1610
%706 = zext i1 %704 to i64, !dbg !1610
%707 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %51, i32 0, i32 1, !dbg !1610
%708 = bitcast [1 x i64]* %707 to i64*, !dbg !1610
store i64 %706, i64* %708, !dbg !1610
br label %exit221, !dbg !1610
else220: ; preds = %exit213
%709 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %52, i32 0, i32 0, !dbg !1610
store i32 0, i32* %709, !dbg !1610
%710 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %52, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %710, !dbg !1610
br label %exit221, !dbg !1610
exit221: ; preds = %else220, %then219
%711 = phi %"(Bool | Nil)"* [ %51, %then219 ], [ %52, %else220 ], !dbg !1610
%712 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %711, i32 0, i32 0, !dbg !1610
%713 = load i32, i32* %712, !dbg !1610
%714 = icmp eq i32 %713, 0, !dbg !1610
%715 = xor i1 %714, true, !dbg !1610
%716 = and i1 true, %715, !dbg !1610
%717 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %711, i32 0, i32 1, !dbg !1610
%718 = bitcast [1 x i64]* %717 to i1*, !dbg !1610
%719 = load i1, i1* %718, !dbg !1610
%720 = icmp eq i32 %713, 171, !dbg !1610
%721 = xor i1 %719, true, !dbg !1610
%722 = and i1 %720, %721, !dbg !1610
%723 = xor i1 %722, true, !dbg !1610
%724 = and i1 %716, %723, !dbg !1610
br i1 %724, label %then217, label %else218, !dbg !1610
exit222: ; preds = %then217
%725 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 0, i32* %725, !dbg !1610
%726 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %726, !dbg !1610
%727 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
store i32 0, i32* %727, !dbg !1610
%728 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %728, !dbg !1610
store %String* null, %String** %name190, !dbg !1610
%729 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes, !dbg !1610
store i32 0, i32* %i226, !dbg !1633
br label %while227, !dbg !1633
exit223: ; preds = %exit407, %else218
br label %exit408, !dbg !1610
while227: ; preds = %exit299, %exit222
%730 = load i32, i32* %i226, !dbg !1634
%731 = getelementptr inbounds %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))", %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %729, i32 0, i32 1, !dbg !1634
%732 = load i32, i32* %731, !dbg !1634
%733 = icmp slt i32 %730, %732, !dbg !1634
br i1 %733, label %body228, label %exit229, !dbg !1634
body228: ; preds = %while227
%734 = load i32, i32* %i226, !dbg !1634
store i32 %734, i32* %i225, !dbg !1634
%735 = load i32, i32* %i225, !dbg !1634
%736 = invoke %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" @"*Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))@Array(T)#unsafe_fetch<Int32>:Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"(%"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %729, i32 %735)
to label %invoke_out230 unwind label %rescue131, !dbg !1616
exit229: ; preds = %while227
%737 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%738 = load i32, i32* %737, !dbg !1610
%739 = icmp eq i32 %738, 0, !dbg !1610
%740 = xor i1 %739, true, !dbg !1610
%741 = and i1 true, %740, !dbg !1610
br i1 %741, label %then402, label %else403, !dbg !1610
invoke_out230: ; preds = %body228
store %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %736, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %53, !dbg !1616
%742 = load %"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)"* %53, !dbg !1616
store %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %742, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %__arg1, !dbg !1616
%743 = getelementptr inbounds %"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)"* %__arg1, i32 0, i32 0, !dbg !1616
%744 = load i32, i32* %743, !dbg !1616
store i32 %744, i32* %at, !dbg !1610
%745 = getelementptr inbounds %"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)"* %__arg1, i32 0, i32 1, !dbg !1610
%746 = load i32, i32* %745, !dbg !1610
store i32 %746, i32* %form, !dbg !1610
%747 = getelementptr inbounds %"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)"* %__arg1, i32 0, i32 2, !dbg !1610
%748 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %747 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"*, !dbg !1610
%749 = load %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %748, !dbg !1610
store %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)" %749, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, !dbg !1610
%750 = load i32, i32* %at, !dbg !1610
%751 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 3, i32 %750), !dbg !1610
br i1 %751, label %then231, label %else232, !dbg !1610
then231: ; preds = %invoke_out230
%752 = load i32, i32* %form, !dbg !1610
%753 = call i1 @"*Debug::DWARF::FORM#strp?:Bool"(i32 %752), !dbg !1610
br i1 %753, label %then233, label %else234, !dbg !1610
else232: ; preds = %invoke_out230
%754 = load i32, i32* %at, !dbg !1610
%755 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 17, i32 %754), !dbg !1610
br i1 %755, label %then300, label %else301, !dbg !1610
then233: ; preds = %then231
%756 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %strings187, i32 0, i32 0, !dbg !1610
%757 = load i32, i32* %756, !dbg !1610
%758 = icmp eq i32 351, %757, !dbg !1610
br i1 %758, label %current_def235, label %next_def236, !dbg !1610
else234: ; preds = %then231
br label %exit268, !dbg !1610
current_def235: ; preds = %then233
%759 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %strings187, i32 0, i32 1, !dbg !1610
%760 = bitcast [5 x i64]* %759 to %"Debug::DWARF::Strings"*, !dbg !1610
%761 = load %"Debug::DWARF::Strings", %"Debug::DWARF::Strings"* %760, !dbg !1610
store %"Debug::DWARF::Strings" %761, %"Debug::DWARF::Strings"* %__arg2, !dbg !1610
%762 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%763 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 0, !dbg !1610
%764 = load i32, i32* %763, !dbg !1610
%765 = call i1 @"~match<(UInt32 | UInt64)>"(i32 %764), !dbg !1610
br i1 %765, label %matches, label %doesnt_match, !dbg !1610
next_def236: ; preds = %then233
%766 = icmp eq i32 0, %757, !dbg !1610
br i1 %766, label %current_def265, label %next_def266, !dbg !1610
matches: ; preds = %current_def235
%767 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762 to %"(UInt32 | UInt64)"*, !dbg !1610
%768 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %767, !dbg !1610
%769 = invoke %String* @"*Debug::DWARF::Strings#decode<(UInt32 | UInt64)>:String"(%"Debug::DWARF::Strings"* %__arg2, %"(UInt32 | UInt64)" %768)
to label %invoke_out263 unwind label %rescue131, !dbg !1610
doesnt_match: ; preds = %current_def235
%770 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 102)
to label %invoke_out237 unwind label %rescue131, !dbg !1610
invoke_out237: ; preds = %doesnt_match
%771 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %770, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out238 unwind label %rescue131, !dbg !1610
invoke_out238: ; preds = %invoke_out237
%772 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 0, !dbg !1610
%773 = load i32, i32* %772, !dbg !1610
%774 = icmp eq i32 171, %773, !dbg !1610
br i1 %774, label %current_def239, label %next_def240, !dbg !1610
current_def239: ; preds = %invoke_out238
%775 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%776 = bitcast [2 x i64]* %775 to i8*, !dbg !1610
%777 = load i8, i8* %776, !dbg !1610
%778 = trunc i8 %777 to i1, !dbg !1610
%779 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %54, i32 0, i32 0, !dbg !1610
store i32 718, i32* %779, !dbg !1610
%780 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %54, i32 0, i32 1, !dbg !1610
%781 = bitcast [1 x i64]* %780 to i32*, !dbg !1610
store i32 718, i32* %781, !dbg !1610
br label %exit241, !dbg !1610
next_def240: ; preds = %invoke_out238
%782 = icmp eq i32 160, %773, !dbg !1610
br i1 %782, label %current_def242, label %next_def243, !dbg !1610
exit241: ; preds = %current_def256, %current_def254, %current_def252, %current_def250, %current_def248, %current_def246, %current_def244, %current_def242, %current_def239
%783 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %54, %current_def239 ], [ %55, %current_def242 ], [ %56, %current_def244 ], [ %57, %current_def246 ], [ %58, %current_def248 ], [ %59, %current_def250 ], [ %60, %current_def252 ], [ %61, %current_def254 ], [ %62, %current_def256 ], !dbg !1610
%784 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %783, !dbg !1610
%785 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %771, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %784)
to label %invoke_out258 unwind label %rescue131, !dbg !1610
current_def242: ; preds = %next_def240
%786 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%787 = bitcast [2 x i64]* %786 to i32*, !dbg !1610
%788 = load i32, i32* %787, !dbg !1610
%789 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %55, i32 0, i32 0, !dbg !1610
store i32 708, i32* %789, !dbg !1610
%790 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %55, i32 0, i32 1, !dbg !1610
%791 = bitcast [1 x i64]* %790 to i32*, !dbg !1610
store i32 708, i32* %791, !dbg !1610
br label %exit241, !dbg !1610
next_def243: ; preds = %next_def240
%792 = icmp eq i32 162, %773, !dbg !1610
br i1 %792, label %current_def244, label %next_def245, !dbg !1610
current_def244: ; preds = %next_def243
%793 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%794 = bitcast [2 x i64]* %793 to i64*, !dbg !1610
%795 = load i64, i64* %794, !dbg !1610
%796 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %56, i32 0, i32 0, !dbg !1610
store i32 710, i32* %796, !dbg !1610
%797 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %56, i32 0, i32 1, !dbg !1610
%798 = bitcast [1 x i64]* %797 to i32*, !dbg !1610
store i32 710, i32* %798, !dbg !1610
br label %exit241, !dbg !1610
next_def245: ; preds = %next_def243
%799 = icmp eq i32 438, %773, !dbg !1610
br i1 %799, label %current_def246, label %next_def247, !dbg !1610
current_def246: ; preds = %next_def245
%800 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%801 = bitcast [2 x i64]* %800 to %"Slice(UInt8)"*, !dbg !1610
%802 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %57, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %802, !dbg !1610
%803 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %57, i32 0, i32 1, !dbg !1610
%804 = bitcast [1 x i64]* %803 to i32*, !dbg !1610
store i32 1092, i32* %804, !dbg !1610
br label %exit241, !dbg !1610
next_def247: ; preds = %next_def245
%805 = icmp eq i32 1, %773, !dbg !1610
br i1 %805, label %current_def248, label %next_def249, !dbg !1610
current_def248: ; preds = %next_def247
%806 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%807 = bitcast [2 x i64]* %806 to %String**, !dbg !1610
%808 = load %String*, %String** %807, !dbg !1610
%809 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %58, i32 0, i32 0, !dbg !1610
store i32 485, i32* %809, !dbg !1610
%810 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %58, i32 0, i32 1, !dbg !1610
%811 = bitcast [1 x i64]* %810 to i32*, !dbg !1610
store i32 485, i32* %811, !dbg !1610
br label %exit241, !dbg !1610
next_def249: ; preds = %next_def247
%812 = icmp eq i32 159, %773, !dbg !1610
br i1 %812, label %current_def250, label %next_def251, !dbg !1610
current_def250: ; preds = %next_def249
%813 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%814 = bitcast [2 x i64]* %813 to i16*, !dbg !1610
%815 = load i16, i16* %814, !dbg !1610
%816 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %59, i32 0, i32 0, !dbg !1610
store i32 707, i32* %816, !dbg !1610
%817 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %59, i32 0, i32 1, !dbg !1610
%818 = bitcast [1 x i64]* %817 to i32*, !dbg !1610
store i32 707, i32* %818, !dbg !1610
br label %exit241, !dbg !1610
next_def251: ; preds = %next_def249
%819 = icmp eq i32 161, %773, !dbg !1610
br i1 %819, label %current_def252, label %next_def253, !dbg !1610
current_def252: ; preds = %next_def251
%820 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%821 = bitcast [2 x i64]* %820 to i32*, !dbg !1610
%822 = load i32, i32* %821, !dbg !1610
%823 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %60, i32 0, i32 0, !dbg !1610
store i32 709, i32* %823, !dbg !1610
%824 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %60, i32 0, i32 1, !dbg !1610
%825 = bitcast [1 x i64]* %824 to i32*, !dbg !1610
store i32 709, i32* %825, !dbg !1610
br label %exit241, !dbg !1610
next_def253: ; preds = %next_def251
%826 = icmp eq i32 163, %773, !dbg !1610
br i1 %826, label %current_def254, label %next_def255, !dbg !1610
current_def254: ; preds = %next_def253
%827 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%828 = bitcast [2 x i64]* %827 to i64*, !dbg !1610
%829 = load i64, i64* %828, !dbg !1610
%830 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %61, i32 0, i32 0, !dbg !1610
store i32 711, i32* %830, !dbg !1610
%831 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %61, i32 0, i32 1, !dbg !1610
%832 = bitcast [1 x i64]* %831 to i32*, !dbg !1610
store i32 711, i32* %832, !dbg !1610
br label %exit241, !dbg !1610
next_def255: ; preds = %next_def253
%833 = icmp eq i32 157, %773, !dbg !1610
br i1 %833, label %current_def256, label %next_def257, !dbg !1610
current_def256: ; preds = %next_def255
%834 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %762, i32 0, i32 1, !dbg !1610
%835 = bitcast [2 x i64]* %834 to i8*, !dbg !1610
%836 = load i8, i8* %835, !dbg !1610
%837 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %62, i32 0, i32 0, !dbg !1610
store i32 705, i32* %837, !dbg !1610
%838 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %62, i32 0, i32 1, !dbg !1610
%839 = bitcast [1 x i64]* %838 to i32*, !dbg !1610
store i32 705, i32* %839, !dbg !1610
br label %exit241, !dbg !1610
next_def257: ; preds = %next_def255
unreachable, !dbg !1610
invoke_out258: ; preds = %exit241
%840 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %785, %String* bitcast ({ i32, i32, i32, [29 x i8] }* @"' to (UInt32 | UInt6...'" to %String*))
to label %invoke_out259 unwind label %rescue131, !dbg !1610
invoke_out259: ; preds = %invoke_out258
%841 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %840, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'" to %String*))
to label %invoke_out260 unwind label %rescue131, !dbg !1610
invoke_out260: ; preds = %invoke_out259
%842 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %841)
to label %invoke_out261 unwind label %rescue131, !dbg !1610
invoke_out261: ; preds = %invoke_out260
%843 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %842), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %843)
to label %invoke_out262 unwind label %rescue131, !dbg !1610
invoke_out262: ; preds = %invoke_out261
unreachable, !dbg !1610
invoke_out263: ; preds = %matches
br label %exit264, !dbg !1610
exit264: ; preds = %current_def265, %invoke_out263
%844 = phi %String* [ %769, %invoke_out263 ], [ null, %current_def265 ], !dbg !1610
%845 = icmp eq %String* %844, null, !dbg !1610
%846 = select i1 %845, i32 0, i32 1, !dbg !1610
%847 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 0, !dbg !1610
store i32 %846, i32* %847, !dbg !1610
%848 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%849 = bitcast [2 x i64]* %848 to %String**, !dbg !1610
store %String* %844, %String** %849, !dbg !1610
br label %exit268, !dbg !1610
current_def265: ; preds = %next_def236
br label %exit264, !dbg !1610
next_def266: ; preds = %next_def236
unreachable, !dbg !1610
exit268: ; preds = %else234, %exit264
%850 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 0, !dbg !1610
%851 = load i32, i32* %850, !dbg !1610
%852 = icmp eq i32 1, %851, !dbg !1610
br i1 %852, label %matches269, label %doesnt_match270, !dbg !1610
matches269: ; preds = %exit268
%853 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%854 = bitcast [2 x i64]* %853 to %String**, !dbg !1610
%855 = load %String*, %String** %854, !dbg !1610
store %String* %855, %String** %name190, !dbg !1610
%856 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %73, i32 0, i32 0, !dbg !1610
store i32 1, i32* %856, !dbg !1610
%857 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %73, i32 0, i32 1, !dbg !1610
%858 = bitcast [1 x i64]* %857 to %String**, !dbg !1610
store %String* %855, %String** %858, !dbg !1610
br label %exit299, !dbg !1610
doesnt_match270: ; preds = %exit268
%859 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out271 unwind label %rescue131, !dbg !1610
invoke_out271: ; preds = %doesnt_match270
%860 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %859, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out272 unwind label %rescue131, !dbg !1610
invoke_out272: ; preds = %invoke_out271
%861 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 0, !dbg !1610
%862 = load i32, i32* %861, !dbg !1610
%863 = icmp eq i32 171, %862, !dbg !1610
br i1 %863, label %current_def273, label %next_def274, !dbg !1610
current_def273: ; preds = %invoke_out272
%864 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%865 = bitcast [2 x i64]* %864 to i8*, !dbg !1610
%866 = load i8, i8* %865, !dbg !1610
%867 = trunc i8 %866 to i1, !dbg !1610
%868 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %63, i32 0, i32 0, !dbg !1610
store i32 718, i32* %868, !dbg !1610
%869 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %63, i32 0, i32 1, !dbg !1610
%870 = bitcast [1 x i64]* %869 to i32*, !dbg !1610
store i32 718, i32* %870, !dbg !1610
br label %exit275, !dbg !1610
next_def274: ; preds = %invoke_out272
%871 = icmp eq i32 160, %862, !dbg !1610
br i1 %871, label %current_def276, label %next_def277, !dbg !1610
exit275: ; preds = %current_def292, %current_def290, %current_def288, %current_def286, %current_def284, %current_def282, %current_def280, %current_def278, %current_def276, %current_def273
%872 = phi %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %63, %current_def273 ], [ %64, %current_def276 ], [ %65, %current_def278 ], [ %66, %current_def280 ], [ %67, %current_def282 ], [ %68, %current_def284 ], [ %69, %current_def286 ], [ %70, %current_def288 ], [ %71, %current_def290 ], [ %72, %current_def292 ], !dbg !1610
%873 = load %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %872, !dbg !1610
%874 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %860, %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %873)
to label %invoke_out294 unwind label %rescue131, !dbg !1610
current_def276: ; preds = %next_def274
%875 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%876 = bitcast [2 x i64]* %875 to i32*, !dbg !1610
%877 = load i32, i32* %876, !dbg !1610
%878 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %64, i32 0, i32 0, !dbg !1610
store i32 708, i32* %878, !dbg !1610
%879 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %64, i32 0, i32 1, !dbg !1610
%880 = bitcast [1 x i64]* %879 to i32*, !dbg !1610
store i32 708, i32* %880, !dbg !1610
br label %exit275, !dbg !1610
next_def277: ; preds = %next_def274
%881 = icmp eq i32 162, %862, !dbg !1610
br i1 %881, label %current_def278, label %next_def279, !dbg !1610
current_def278: ; preds = %next_def277
%882 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%883 = bitcast [2 x i64]* %882 to i64*, !dbg !1610
%884 = load i64, i64* %883, !dbg !1610
%885 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %65, i32 0, i32 0, !dbg !1610
store i32 710, i32* %885, !dbg !1610
%886 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %65, i32 0, i32 1, !dbg !1610
%887 = bitcast [1 x i64]* %886 to i32*, !dbg !1610
store i32 710, i32* %887, !dbg !1610
br label %exit275, !dbg !1610
next_def279: ; preds = %next_def277
%888 = icmp eq i32 438, %862, !dbg !1610
br i1 %888, label %current_def280, label %next_def281, !dbg !1610
current_def280: ; preds = %next_def279
%889 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%890 = bitcast [2 x i64]* %889 to %"Slice(UInt8)"*, !dbg !1610
%891 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %66, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %891, !dbg !1610
%892 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %66, i32 0, i32 1, !dbg !1610
%893 = bitcast [1 x i64]* %892 to i32*, !dbg !1610
store i32 1092, i32* %893, !dbg !1610
br label %exit275, !dbg !1610
next_def281: ; preds = %next_def279
%894 = icmp eq i32 1, %862, !dbg !1610
br i1 %894, label %current_def282, label %next_def283, !dbg !1610
current_def282: ; preds = %next_def281
%895 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%896 = bitcast [2 x i64]* %895 to %String**, !dbg !1610
%897 = load %String*, %String** %896, !dbg !1610
%898 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %67, i32 0, i32 0, !dbg !1610
store i32 485, i32* %898, !dbg !1610
%899 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %67, i32 0, i32 1, !dbg !1610
%900 = bitcast [1 x i64]* %899 to i32*, !dbg !1610
store i32 485, i32* %900, !dbg !1610
br label %exit275, !dbg !1610
next_def283: ; preds = %next_def281
%901 = icmp eq i32 159, %862, !dbg !1610
br i1 %901, label %current_def284, label %next_def285, !dbg !1610
current_def284: ; preds = %next_def283
%902 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%903 = bitcast [2 x i64]* %902 to i16*, !dbg !1610
%904 = load i16, i16* %903, !dbg !1610
%905 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %68, i32 0, i32 0, !dbg !1610
store i32 707, i32* %905, !dbg !1610
%906 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %68, i32 0, i32 1, !dbg !1610
%907 = bitcast [1 x i64]* %906 to i32*, !dbg !1610
store i32 707, i32* %907, !dbg !1610
br label %exit275, !dbg !1610
next_def285: ; preds = %next_def283
%908 = icmp eq i32 161, %862, !dbg !1610
br i1 %908, label %current_def286, label %next_def287, !dbg !1610
current_def286: ; preds = %next_def285
%909 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%910 = bitcast [2 x i64]* %909 to i32*, !dbg !1610
%911 = load i32, i32* %910, !dbg !1610
%912 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %69, i32 0, i32 0, !dbg !1610
store i32 709, i32* %912, !dbg !1610
%913 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %69, i32 0, i32 1, !dbg !1610
%914 = bitcast [1 x i64]* %913 to i32*, !dbg !1610
store i32 709, i32* %914, !dbg !1610
br label %exit275, !dbg !1610
next_def287: ; preds = %next_def285
%915 = icmp eq i32 163, %862, !dbg !1610
br i1 %915, label %current_def288, label %next_def289, !dbg !1610
current_def288: ; preds = %next_def287
%916 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%917 = bitcast [2 x i64]* %916 to i64*, !dbg !1610
%918 = load i64, i64* %917, !dbg !1610
%919 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %70, i32 0, i32 0, !dbg !1610
store i32 711, i32* %919, !dbg !1610
%920 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %70, i32 0, i32 1, !dbg !1610
%921 = bitcast [1 x i64]* %920 to i32*, !dbg !1610
store i32 711, i32* %921, !dbg !1610
br label %exit275, !dbg !1610
next_def289: ; preds = %next_def287
%922 = icmp eq i32 157, %862, !dbg !1610
br i1 %922, label %current_def290, label %next_def291, !dbg !1610
current_def290: ; preds = %next_def289
%923 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224, i32 0, i32 1, !dbg !1610
%924 = bitcast [2 x i64]* %923 to i8*, !dbg !1610
%925 = load i8, i8* %924, !dbg !1610
%926 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %71, i32 0, i32 0, !dbg !1610
store i32 705, i32* %926, !dbg !1610
%927 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %71, i32 0, i32 1, !dbg !1610
%928 = bitcast [1 x i64]* %927 to i32*, !dbg !1610
store i32 705, i32* %928, !dbg !1610
br label %exit275, !dbg !1610
next_def291: ; preds = %next_def289
%929 = icmp eq i32 0, %862, !dbg !1610
br i1 %929, label %current_def292, label %next_def293, !dbg !1610
current_def292: ; preds = %next_def291
%930 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %72, i32 0, i32 0, !dbg !1610
store i32 717, i32* %930, !dbg !1610
%931 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %72, i32 0, i32 1, !dbg !1610
%932 = bitcast [1 x i64]* %931 to i32*, !dbg !1610
store i32 717, i32* %932, !dbg !1610
br label %exit275, !dbg !1610
next_def293: ; preds = %next_def291
unreachable, !dbg !1610
invoke_out294: ; preds = %exit275
%933 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %874, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to String failed'" to %String*))
to label %invoke_out295 unwind label %rescue131, !dbg !1610
invoke_out295: ; preds = %invoke_out294
%934 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %933, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.6" to %String*))
to label %invoke_out296 unwind label %rescue131, !dbg !1610
invoke_out296: ; preds = %invoke_out295
%935 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %934)
to label %invoke_out297 unwind label %rescue131, !dbg !1610
invoke_out297: ; preds = %invoke_out296
%936 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %935), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %936)
to label %invoke_out298 unwind label %rescue131, !dbg !1610
invoke_out298: ; preds = %invoke_out297
unreachable, !dbg !1610
exit299: ; preds = %exit330, %matches269
%937 = phi %"(String | UInt64 | Nil)"* [ %73, %matches269 ], [ %1030, %exit330 ], !dbg !1610
%938 = load i32, i32* %i226, !dbg !1610
%939 = add i32 %938, 1, !dbg !1610
store i32 %939, i32* %i226, !dbg !1618
br label %while227, !dbg !1618
then300: ; preds = %else232
%940 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%941 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 0, !dbg !1610
%942 = load i32, i32* %941, !dbg !1610
%943 = icmp eq i32 163, %942, !dbg !1610
br i1 %943, label %matches302, label %doesnt_match303, !dbg !1610
else301: ; preds = %else232
%944 = load i32, i32* %at, !dbg !1610
%945 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 18, i32 %944), !dbg !1610
br i1 %945, label %then331, label %else332, !dbg !1610
matches302: ; preds = %then300
%946 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%947 = bitcast [2 x i64]* %946 to i64*, !dbg !1610
%948 = load i64, i64* %947, !dbg !1610
%949 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
store i32 163, i32* %949, !dbg !1610
%950 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%951 = bitcast [1 x i64]* %950 to i64*, !dbg !1610
store i64 %948, i64* %951, !dbg !1610
%952 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %83, i32 0, i32 0, !dbg !1610
store i32 163, i32* %952, !dbg !1610
%953 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %83, i32 0, i32 1, !dbg !1610
%954 = bitcast [1 x i64]* %953 to i64*, !dbg !1610
store i64 %948, i64* %954, !dbg !1610
br label %exit330, !dbg !1610
doesnt_match303: ; preds = %then300
%955 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out304 unwind label %rescue131, !dbg !1610
invoke_out304: ; preds = %doesnt_match303
%956 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %955, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out305 unwind label %rescue131, !dbg !1610
invoke_out305: ; preds = %invoke_out304
%957 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 0, !dbg !1610
%958 = load i32, i32* %957, !dbg !1610
%959 = icmp eq i32 171, %958, !dbg !1610
br i1 %959, label %current_def306, label %next_def307, !dbg !1610
current_def306: ; preds = %invoke_out305
%960 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%961 = bitcast [2 x i64]* %960 to i8*, !dbg !1610
%962 = load i8, i8* %961, !dbg !1610
%963 = trunc i8 %962 to i1, !dbg !1610
%964 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %74, i32 0, i32 0, !dbg !1610
store i32 718, i32* %964, !dbg !1610
%965 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %74, i32 0, i32 1, !dbg !1610
%966 = bitcast [1 x i64]* %965 to i32*, !dbg !1610
store i32 718, i32* %966, !dbg !1610
br label %exit308, !dbg !1610
next_def307: ; preds = %invoke_out305
%967 = icmp eq i32 160, %958, !dbg !1610
br i1 %967, label %current_def309, label %next_def310, !dbg !1610
exit308: ; preds = %current_def323, %current_def321, %current_def319, %current_def317, %current_def315, %current_def313, %current_def311, %current_def309, %current_def306
%968 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %74, %current_def306 ], [ %75, %current_def309 ], [ %76, %current_def311 ], [ %77, %current_def313 ], [ %78, %current_def315 ], [ %79, %current_def317 ], [ %80, %current_def319 ], [ %81, %current_def321 ], [ %82, %current_def323 ], !dbg !1610
%969 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %968, !dbg !1610
%970 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %956, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %969)
to label %invoke_out325 unwind label %rescue131, !dbg !1610
current_def309: ; preds = %next_def307
%971 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%972 = bitcast [2 x i64]* %971 to i32*, !dbg !1610
%973 = load i32, i32* %972, !dbg !1610
%974 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %75, i32 0, i32 0, !dbg !1610
store i32 708, i32* %974, !dbg !1610
%975 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %75, i32 0, i32 1, !dbg !1610
%976 = bitcast [1 x i64]* %975 to i32*, !dbg !1610
store i32 708, i32* %976, !dbg !1610
br label %exit308, !dbg !1610
next_def310: ; preds = %next_def307
%977 = icmp eq i32 162, %958, !dbg !1610
br i1 %977, label %current_def311, label %next_def312, !dbg !1610
current_def311: ; preds = %next_def310
%978 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%979 = bitcast [2 x i64]* %978 to i64*, !dbg !1610
%980 = load i64, i64* %979, !dbg !1610
%981 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %76, i32 0, i32 0, !dbg !1610
store i32 710, i32* %981, !dbg !1610
%982 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %76, i32 0, i32 1, !dbg !1610
%983 = bitcast [1 x i64]* %982 to i32*, !dbg !1610
store i32 710, i32* %983, !dbg !1610
br label %exit308, !dbg !1610
next_def312: ; preds = %next_def310
%984 = icmp eq i32 438, %958, !dbg !1610
br i1 %984, label %current_def313, label %next_def314, !dbg !1610
current_def313: ; preds = %next_def312
%985 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%986 = bitcast [2 x i64]* %985 to %"Slice(UInt8)"*, !dbg !1610
%987 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %77, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %987, !dbg !1610
%988 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %77, i32 0, i32 1, !dbg !1610
%989 = bitcast [1 x i64]* %988 to i32*, !dbg !1610
store i32 1092, i32* %989, !dbg !1610
br label %exit308, !dbg !1610
next_def314: ; preds = %next_def312
%990 = icmp eq i32 1, %958, !dbg !1610
br i1 %990, label %current_def315, label %next_def316, !dbg !1610
current_def315: ; preds = %next_def314
%991 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%992 = bitcast [2 x i64]* %991 to %String**, !dbg !1610
%993 = load %String*, %String** %992, !dbg !1610
%994 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %78, i32 0, i32 0, !dbg !1610
store i32 485, i32* %994, !dbg !1610
%995 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %78, i32 0, i32 1, !dbg !1610
%996 = bitcast [1 x i64]* %995 to i32*, !dbg !1610
store i32 485, i32* %996, !dbg !1610
br label %exit308, !dbg !1610
next_def316: ; preds = %next_def314
%997 = icmp eq i32 159, %958, !dbg !1610
br i1 %997, label %current_def317, label %next_def318, !dbg !1610
current_def317: ; preds = %next_def316
%998 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%999 = bitcast [2 x i64]* %998 to i16*, !dbg !1610
%1000 = load i16, i16* %999, !dbg !1610
%1001 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %79, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1001, !dbg !1610
%1002 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %79, i32 0, i32 1, !dbg !1610
%1003 = bitcast [1 x i64]* %1002 to i32*, !dbg !1610
store i32 707, i32* %1003, !dbg !1610
br label %exit308, !dbg !1610
next_def318: ; preds = %next_def316
%1004 = icmp eq i32 161, %958, !dbg !1610
br i1 %1004, label %current_def319, label %next_def320, !dbg !1610
current_def319: ; preds = %next_def318
%1005 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%1006 = bitcast [2 x i64]* %1005 to i32*, !dbg !1610
%1007 = load i32, i32* %1006, !dbg !1610
%1008 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %80, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1008, !dbg !1610
%1009 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %80, i32 0, i32 1, !dbg !1610
%1010 = bitcast [1 x i64]* %1009 to i32*, !dbg !1610
store i32 709, i32* %1010, !dbg !1610
br label %exit308, !dbg !1610
next_def320: ; preds = %next_def318
%1011 = icmp eq i32 163, %958, !dbg !1610
br i1 %1011, label %current_def321, label %next_def322, !dbg !1610
current_def321: ; preds = %next_def320
%1012 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%1013 = bitcast [2 x i64]* %1012 to i64*, !dbg !1610
%1014 = load i64, i64* %1013, !dbg !1610
%1015 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %81, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1015, !dbg !1610
%1016 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %81, i32 0, i32 1, !dbg !1610
%1017 = bitcast [1 x i64]* %1016 to i32*, !dbg !1610
store i32 711, i32* %1017, !dbg !1610
br label %exit308, !dbg !1610
next_def322: ; preds = %next_def320
%1018 = icmp eq i32 157, %958, !dbg !1610
br i1 %1018, label %current_def323, label %next_def324, !dbg !1610
current_def323: ; preds = %next_def322
%1019 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %940, i32 0, i32 1, !dbg !1610
%1020 = bitcast [2 x i64]* %1019 to i8*, !dbg !1610
%1021 = load i8, i8* %1020, !dbg !1610
%1022 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %82, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1022, !dbg !1610
%1023 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %82, i32 0, i32 1, !dbg !1610
%1024 = bitcast [1 x i64]* %1023 to i32*, !dbg !1610
store i32 705, i32* %1024, !dbg !1610
br label %exit308, !dbg !1610
next_def324: ; preds = %next_def322
unreachable, !dbg !1610
invoke_out325: ; preds = %exit308
%1025 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %970, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out326 unwind label %rescue131, !dbg !1610
invoke_out326: ; preds = %invoke_out325
%1026 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1025, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.7" to %String*))
to label %invoke_out327 unwind label %rescue131, !dbg !1610
invoke_out327: ; preds = %invoke_out326
%1027 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1026)
to label %invoke_out328 unwind label %rescue131, !dbg !1610
invoke_out328: ; preds = %invoke_out327
%1028 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1027), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1028)
to label %invoke_out329 unwind label %rescue131, !dbg !1610
invoke_out329: ; preds = %invoke_out328
unreachable, !dbg !1610
exit330: ; preds = %exit397, %matches302
%1029 = phi %"(UInt64 | Nil)"* [ %83, %matches302 ], [ %1203, %exit397 ], !dbg !1610
%1030 = bitcast %"(UInt64 | Nil)"* %1029 to %"(String | UInt64 | Nil)"*, !dbg !1610
br label %exit299, !dbg !1610
then331: ; preds = %else301
%1031 = load i32, i32* %form, !dbg !1610
%1032 = call i1 @"*Debug::DWARF::FORM#addr?:Bool"(i32 %1031), !dbg !1610
br i1 %1032, label %then333, label %else334, !dbg !1610
else332: ; preds = %else301
%1033 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %98, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1033, !dbg !1610
%1034 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %98, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1034, !dbg !1610
br label %exit397, !dbg !1610
then333: ; preds = %then331
%1035 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1036 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 0, !dbg !1610
%1037 = load i32, i32* %1036, !dbg !1610
%1038 = icmp eq i32 163, %1037, !dbg !1610
br i1 %1038, label %matches335, label %doesnt_match336, !dbg !1610
else334: ; preds = %then331
%1039 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1040 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1039, i32 0, i32 0, !dbg !1610
%1041 = load i32, i32* %1040, !dbg !1610
%1042 = call i1 @"~match<(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)>"(i32 %1041), !dbg !1610
br i1 %1042, label %then364, label %else365, !dbg !1610
matches335: ; preds = %then333
%1043 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1044 = bitcast [2 x i64]* %1043 to i64*, !dbg !1610
%1045 = load i64, i64* %1044, !dbg !1610
%1046 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1046, !dbg !1610
%1047 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1048 = bitcast [1 x i64]* %1047 to i64*, !dbg !1610
store i64 %1045, i64* %1048, !dbg !1610
%1049 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %93, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1049, !dbg !1610
%1050 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %93, i32 0, i32 1, !dbg !1610
%1051 = bitcast [1 x i64]* %1050 to i64*, !dbg !1610
store i64 %1045, i64* %1051, !dbg !1610
br label %exit363, !dbg !1610
doesnt_match336: ; preds = %then333
%1052 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out337 unwind label %rescue131, !dbg !1610
invoke_out337: ; preds = %doesnt_match336
%1053 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1052, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out338 unwind label %rescue131, !dbg !1610
invoke_out338: ; preds = %invoke_out337
%1054 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 0, !dbg !1610
%1055 = load i32, i32* %1054, !dbg !1610
%1056 = icmp eq i32 171, %1055, !dbg !1610
br i1 %1056, label %current_def339, label %next_def340, !dbg !1610
current_def339: ; preds = %invoke_out338
%1057 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1058 = bitcast [2 x i64]* %1057 to i8*, !dbg !1610
%1059 = load i8, i8* %1058, !dbg !1610
%1060 = trunc i8 %1059 to i1, !dbg !1610
%1061 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %84, i32 0, i32 0, !dbg !1610
store i32 718, i32* %1061, !dbg !1610
%1062 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %84, i32 0, i32 1, !dbg !1610
%1063 = bitcast [1 x i64]* %1062 to i32*, !dbg !1610
store i32 718, i32* %1063, !dbg !1610
br label %exit341, !dbg !1610
next_def340: ; preds = %invoke_out338
%1064 = icmp eq i32 160, %1055, !dbg !1610
br i1 %1064, label %current_def342, label %next_def343, !dbg !1610
exit341: ; preds = %current_def356, %current_def354, %current_def352, %current_def350, %current_def348, %current_def346, %current_def344, %current_def342, %current_def339
%1065 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %84, %current_def339 ], [ %85, %current_def342 ], [ %86, %current_def344 ], [ %87, %current_def346 ], [ %88, %current_def348 ], [ %89, %current_def350 ], [ %90, %current_def352 ], [ %91, %current_def354 ], [ %92, %current_def356 ], !dbg !1610
%1066 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %1065, !dbg !1610
%1067 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %1053, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %1066)
to label %invoke_out358 unwind label %rescue131, !dbg !1610
current_def342: ; preds = %next_def340
%1068 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1069 = bitcast [2 x i64]* %1068 to i32*, !dbg !1610
%1070 = load i32, i32* %1069, !dbg !1610
%1071 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %85, i32 0, i32 0, !dbg !1610
store i32 708, i32* %1071, !dbg !1610
%1072 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %85, i32 0, i32 1, !dbg !1610
%1073 = bitcast [1 x i64]* %1072 to i32*, !dbg !1610
store i32 708, i32* %1073, !dbg !1610
br label %exit341, !dbg !1610
next_def343: ; preds = %next_def340
%1074 = icmp eq i32 162, %1055, !dbg !1610
br i1 %1074, label %current_def344, label %next_def345, !dbg !1610
current_def344: ; preds = %next_def343
%1075 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1076 = bitcast [2 x i64]* %1075 to i64*, !dbg !1610
%1077 = load i64, i64* %1076, !dbg !1610
%1078 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %86, i32 0, i32 0, !dbg !1610
store i32 710, i32* %1078, !dbg !1610
%1079 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %86, i32 0, i32 1, !dbg !1610
%1080 = bitcast [1 x i64]* %1079 to i32*, !dbg !1610
store i32 710, i32* %1080, !dbg !1610
br label %exit341, !dbg !1610
next_def345: ; preds = %next_def343
%1081 = icmp eq i32 438, %1055, !dbg !1610
br i1 %1081, label %current_def346, label %next_def347, !dbg !1610
current_def346: ; preds = %next_def345
%1082 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1083 = bitcast [2 x i64]* %1082 to %"Slice(UInt8)"*, !dbg !1610
%1084 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %87, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %1084, !dbg !1610
%1085 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %87, i32 0, i32 1, !dbg !1610
%1086 = bitcast [1 x i64]* %1085 to i32*, !dbg !1610
store i32 1092, i32* %1086, !dbg !1610
br label %exit341, !dbg !1610
next_def347: ; preds = %next_def345
%1087 = icmp eq i32 1, %1055, !dbg !1610
br i1 %1087, label %current_def348, label %next_def349, !dbg !1610
current_def348: ; preds = %next_def347
%1088 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1089 = bitcast [2 x i64]* %1088 to %String**, !dbg !1610
%1090 = load %String*, %String** %1089, !dbg !1610
%1091 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %88, i32 0, i32 0, !dbg !1610
store i32 485, i32* %1091, !dbg !1610
%1092 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %88, i32 0, i32 1, !dbg !1610
%1093 = bitcast [1 x i64]* %1092 to i32*, !dbg !1610
store i32 485, i32* %1093, !dbg !1610
br label %exit341, !dbg !1610
next_def349: ; preds = %next_def347
%1094 = icmp eq i32 159, %1055, !dbg !1610
br i1 %1094, label %current_def350, label %next_def351, !dbg !1610
current_def350: ; preds = %next_def349
%1095 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1096 = bitcast [2 x i64]* %1095 to i16*, !dbg !1610
%1097 = load i16, i16* %1096, !dbg !1610
%1098 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %89, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1098, !dbg !1610
%1099 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %89, i32 0, i32 1, !dbg !1610
%1100 = bitcast [1 x i64]* %1099 to i32*, !dbg !1610
store i32 707, i32* %1100, !dbg !1610
br label %exit341, !dbg !1610
next_def351: ; preds = %next_def349
%1101 = icmp eq i32 161, %1055, !dbg !1610
br i1 %1101, label %current_def352, label %next_def353, !dbg !1610
current_def352: ; preds = %next_def351
%1102 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1103 = bitcast [2 x i64]* %1102 to i32*, !dbg !1610
%1104 = load i32, i32* %1103, !dbg !1610
%1105 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %90, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1105, !dbg !1610
%1106 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %90, i32 0, i32 1, !dbg !1610
%1107 = bitcast [1 x i64]* %1106 to i32*, !dbg !1610
store i32 709, i32* %1107, !dbg !1610
br label %exit341, !dbg !1610
next_def353: ; preds = %next_def351
%1108 = icmp eq i32 163, %1055, !dbg !1610
br i1 %1108, label %current_def354, label %next_def355, !dbg !1610
current_def354: ; preds = %next_def353
%1109 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1110 = bitcast [2 x i64]* %1109 to i64*, !dbg !1610
%1111 = load i64, i64* %1110, !dbg !1610
%1112 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %91, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1112, !dbg !1610
%1113 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %91, i32 0, i32 1, !dbg !1610
%1114 = bitcast [1 x i64]* %1113 to i32*, !dbg !1610
store i32 711, i32* %1114, !dbg !1610
br label %exit341, !dbg !1610
next_def355: ; preds = %next_def353
%1115 = icmp eq i32 157, %1055, !dbg !1610
br i1 %1115, label %current_def356, label %next_def357, !dbg !1610
current_def356: ; preds = %next_def355
%1116 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1035, i32 0, i32 1, !dbg !1610
%1117 = bitcast [2 x i64]* %1116 to i8*, !dbg !1610
%1118 = load i8, i8* %1117, !dbg !1610
%1119 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %92, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1119, !dbg !1610
%1120 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %92, i32 0, i32 1, !dbg !1610
%1121 = bitcast [1 x i64]* %1120 to i32*, !dbg !1610
store i32 705, i32* %1121, !dbg !1610
br label %exit341, !dbg !1610
next_def357: ; preds = %next_def355
unreachable, !dbg !1610
invoke_out358: ; preds = %exit341
%1122 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1067, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out359 unwind label %rescue131, !dbg !1610
invoke_out359: ; preds = %invoke_out358
%1123 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1122, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.8" to %String*))
to label %invoke_out360 unwind label %rescue131, !dbg !1610
invoke_out360: ; preds = %invoke_out359
%1124 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1123)
to label %invoke_out361 unwind label %rescue131, !dbg !1610
invoke_out361: ; preds = %invoke_out360
%1125 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1124), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1125)
to label %invoke_out362 unwind label %rescue131, !dbg !1610
invoke_out362: ; preds = %invoke_out361
unreachable, !dbg !1610
exit363: ; preds = %exit396, %matches335
%1126 = phi %"(UInt64 | Nil)"* [ %93, %matches335 ], [ %1202, %exit396 ], !dbg !1610
br label %exit397, !dbg !1610
then364: ; preds = %else334
%1127 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%1128 = load i32, i32* %1127, !dbg !1610
%1129 = icmp eq i32 163, %1128, !dbg !1610
br i1 %1129, label %matches366, label %doesnt_match367, !dbg !1610
else365: ; preds = %else334
%1130 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %97, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1130, !dbg !1610
%1131 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %97, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1131, !dbg !1610
br label %exit396, !dbg !1610
matches366: ; preds = %then364
%1132 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1133 = bitcast [1 x i64]* %1132 to i64*, !dbg !1610
%1134 = load i64, i64* %1133, !dbg !1610
%1135 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value224 to %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1136 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 0, !dbg !1610
%1137 = load i32, i32* %1136, !dbg !1610
%1138 = icmp eq i32 160, %1137, !dbg !1610
br i1 %1138, label %current_def380, label %next_def381, !dbg !1610
doesnt_match367: ; preds = %then364
%1139 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out368 unwind label %rescue131, !dbg !1610
invoke_out368: ; preds = %doesnt_match367
%1140 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1139, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out369 unwind label %rescue131, !dbg !1610
invoke_out369: ; preds = %invoke_out368
%1141 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%1142 = load i32, i32* %1141, !dbg !1610
%1143 = icmp eq i32 163, %1142, !dbg !1610
br i1 %1143, label %current_def370, label %next_def371, !dbg !1610
current_def370: ; preds = %invoke_out369
%1144 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1145 = bitcast [1 x i64]* %1144 to i64*, !dbg !1610
%1146 = load i64, i64* %1145, !dbg !1610
%1147 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %94, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1147, !dbg !1610
%1148 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %94, i32 0, i32 1, !dbg !1610
%1149 = bitcast [1 x i64]* %1148 to i32*, !dbg !1610
store i32 711, i32* %1149, !dbg !1610
br label %exit372, !dbg !1610
next_def371: ; preds = %invoke_out369
%1150 = icmp eq i32 0, %1142, !dbg !1610
br i1 %1150, label %current_def373, label %next_def374, !dbg !1610
exit372: ; preds = %current_def373, %current_def370
%1151 = phi %"(Nil.class | UInt64.class)"* [ %94, %current_def370 ], [ %95, %current_def373 ], !dbg !1610
%1152 = load %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %1151, !dbg !1610
%1153 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Nil.class | UInt64.class)>:String::Builder"(%"String::Builder"* %1140, %"(Nil.class | UInt64.class)" %1152)
to label %invoke_out375 unwind label %rescue131, !dbg !1610
current_def373: ; preds = %next_def371
%1154 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %95, i32 0, i32 0, !dbg !1610
store i32 717, i32* %1154, !dbg !1610
%1155 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %95, i32 0, i32 1, !dbg !1610
%1156 = bitcast [1 x i64]* %1155 to i32*, !dbg !1610
store i32 717, i32* %1156, !dbg !1610
br label %exit372, !dbg !1610
next_def374: ; preds = %next_def371
unreachable, !dbg !1610
invoke_out375: ; preds = %exit372
%1157 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1153, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out376 unwind label %rescue131, !dbg !1610
invoke_out376: ; preds = %invoke_out375
%1158 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1157, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.9" to %String*))
to label %invoke_out377 unwind label %rescue131, !dbg !1610
invoke_out377: ; preds = %invoke_out376
%1159 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1158)
to label %invoke_out378 unwind label %rescue131, !dbg !1610
invoke_out378: ; preds = %invoke_out377
%1160 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1159), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1160)
to label %invoke_out379 unwind label %rescue131, !dbg !1610
invoke_out379: ; preds = %invoke_out378
unreachable, !dbg !1610
current_def380: ; preds = %matches366
%1161 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1162 = bitcast [1 x i64]* %1161 to i32*, !dbg !1610
%1163 = load i32, i32* %1162, !dbg !1610
br label %exit382, !dbg !1610
next_def381: ; preds = %matches366
%1164 = icmp eq i32 162, %1137, !dbg !1610
br i1 %1164, label %current_def383, label %next_def384, !dbg !1610
exit382: ; preds = %current_def394, %current_def392, %current_def390, %current_def388, %invoke_out387, %current_def383, %current_def380
%1165 = phi i32 [ %1163, %current_def380 ], [ %1177, %current_def383 ], [ %1182, %invoke_out387 ], [ %1187, %current_def388 ], [ %1191, %current_def390 ], [ %1196, %current_def392 ], [ %1201, %current_def394 ], !dbg !1610
%1166 = sext i32 %1165 to i64, !dbg !1610
%1167 = add i64 %1134, %1166, !dbg !1610
%1168 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1168, !dbg !1610
%1169 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1170 = bitcast [1 x i64]* %1169 to i64*, !dbg !1610
store i64 %1167, i64* %1170, !dbg !1610
%1171 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %96, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1171, !dbg !1610
%1172 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %96, i32 0, i32 1, !dbg !1610
%1173 = bitcast [1 x i64]* %1172 to i64*, !dbg !1610
store i64 %1167, i64* %1173, !dbg !1610
br label %exit396, !dbg !1610
current_def383: ; preds = %next_def381
%1174 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1175 = bitcast [1 x i64]* %1174 to i64*, !dbg !1610
%1176 = load i64, i64* %1175, !dbg !1610
%1177 = trunc i64 %1176 to i32, !dbg !1610
br label %exit382, !dbg !1610
next_def384: ; preds = %next_def381
%1178 = icmp eq i32 1, %1137, !dbg !1610
br i1 %1178, label %current_def385, label %next_def386, !dbg !1610
current_def385: ; preds = %next_def384
%1179 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1180 = bitcast [1 x i64]* %1179 to %String**, !dbg !1610
%1181 = load %String*, %String** %1180, !dbg !1610
%1182 = invoke i32 @"*String#to_i:Int32"(%String* %1181)
to label %invoke_out387 unwind label %rescue131, !dbg !1610
next_def386: ; preds = %next_def384
%1183 = icmp eq i32 159, %1137, !dbg !1610
br i1 %1183, label %current_def388, label %next_def389, !dbg !1610
invoke_out387: ; preds = %current_def385
br label %exit382, !dbg !1610
current_def388: ; preds = %next_def386
%1184 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1185 = bitcast [1 x i64]* %1184 to i16*, !dbg !1610
%1186 = load i16, i16* %1185, !dbg !1610
%1187 = zext i16 %1186 to i32, !dbg !1610
br label %exit382, !dbg !1610
next_def389: ; preds = %next_def386
%1188 = icmp eq i32 161, %1137, !dbg !1610
br i1 %1188, label %current_def390, label %next_def391, !dbg !1610
current_def390: ; preds = %next_def389
%1189 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1190 = bitcast [1 x i64]* %1189 to i32*, !dbg !1610
%1191 = load i32, i32* %1190, !dbg !1610
br label %exit382, !dbg !1610
next_def391: ; preds = %next_def389
%1192 = icmp eq i32 163, %1137, !dbg !1610
br i1 %1192, label %current_def392, label %next_def393, !dbg !1610
current_def392: ; preds = %next_def391
%1193 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1194 = bitcast [1 x i64]* %1193 to i64*, !dbg !1610
%1195 = load i64, i64* %1194, !dbg !1610
%1196 = trunc i64 %1195 to i32, !dbg !1610
br label %exit382, !dbg !1610
next_def393: ; preds = %next_def391
%1197 = icmp eq i32 157, %1137, !dbg !1610
br i1 %1197, label %current_def394, label %next_def395, !dbg !1610
current_def394: ; preds = %next_def393
%1198 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1135, i32 0, i32 1, !dbg !1610
%1199 = bitcast [1 x i64]* %1198 to i8*, !dbg !1610
%1200 = load i8, i8* %1199, !dbg !1610
%1201 = zext i8 %1200 to i32, !dbg !1610
br label %exit382, !dbg !1610
next_def395: ; preds = %next_def393
unreachable, !dbg !1610
exit396: ; preds = %else365, %exit382
%1202 = phi %"(UInt64 | Nil)"* [ %96, %exit382 ], [ %97, %else365 ], !dbg !1610
br label %exit363, !dbg !1610
exit397: ; preds = %else332, %exit363
%1203 = phi %"(UInt64 | Nil)"* [ %1126, %exit363 ], [ %98, %else332 ], !dbg !1610
br label %exit330, !dbg !1610
then398: ; preds = %exit405
%1204 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1205 = bitcast [1 x i64]* %1204 to i64*, !dbg !1610
%1206 = load i64, i64* %1205, !dbg !1610
%1207 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1208 = bitcast [1 x i64]* %1207 to i64*, !dbg !1610
%1209 = load i64, i64* %1208, !dbg !1610
%1210 = load %String*, %String** %name190, !dbg !1610
store i64 %1206, i64* %name185, !dbg !1610
store i64 %1209, i64* %low_pc, !dbg !1610
store %String* %1210, %String** %high_pc, !dbg !1610
%1211 = load %"Array(Tuple(UInt64, UInt64, String))"*, %"Array(Tuple(UInt64, UInt64, String))"** %names, !dbg !1610
%1212 = load i64, i64* %name185, !dbg !1610
%1213 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %101, i32 0, i32 0, !dbg !1610
store i64 %1212, i64* %1213, !dbg !1610
%1214 = load i64, i64* %low_pc, !dbg !1610
%1215 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %101, i32 0, i32 1, !dbg !1610
store i64 %1214, i64* %1215, !dbg !1610
%1216 = load %String*, %String** %high_pc, !dbg !1610
%1217 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %101, i32 0, i32 2, !dbg !1610
store %String* %1216, %String** %1217, !dbg !1610
%1218 = load %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %101, !dbg !1610
%1219 = invoke %"Array(Tuple(UInt64, UInt64, String))"* @"*Array(Tuple(UInt64, UInt64, String))@Array(T)#<<<Tuple(UInt64, UInt64, String)>:Array(Tuple(UInt64, UInt64, String))"(%"Array(Tuple(UInt64, UInt64, String))"* %1211, %"Tuple(UInt64, UInt64, String)" %1218)
to label %invoke_out406 unwind label %rescue131, !dbg !1610
else399: ; preds = %exit405
br label %exit407, !dbg !1610
then400: ; preds = %exit404
%1220 = load %String*, %String** %name190, !dbg !1610
%1221 = icmp eq %String* %1220, null, !dbg !1610
%1222 = select i1 %1221, i32 0, i32 1, !dbg !1610
%1223 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %100, i32 0, i32 0, !dbg !1610
store i32 %1222, i32* %1223, !dbg !1610
%1224 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %100, i32 0, i32 1, !dbg !1610
%1225 = bitcast [1 x i64]* %1224 to %String**, !dbg !1610
store %String* %1220, %String** %1225, !dbg !1610
br label %exit405, !dbg !1610
else401: ; preds = %exit404
%1226 = bitcast %"(UInt64 | Nil)"* %__temp_238 to %"(String | UInt64 | Nil)"*, !dbg !1610
br label %exit405, !dbg !1610
then402: ; preds = %exit229
br label %exit404, !dbg !1610
else403: ; preds = %exit229
%1227 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %99, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1227, !dbg !1610
%1228 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %99, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1228, !dbg !1610
br label %exit404, !dbg !1610
exit404: ; preds = %else403, %then402
%1229 = phi %"(UInt64 | Nil)"* [ %high_pc188, %then402 ], [ %99, %else403 ], !dbg !1610
%1230 = load %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1229, !dbg !1610
store %"(UInt64 | Nil)" %1230, %"(UInt64 | Nil)"* %__temp_238, !dbg !1610
%1231 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1229, i32 0, i32 0, !dbg !1610
%1232 = load i32, i32* %1231, !dbg !1610
%1233 = icmp eq i32 %1232, 0, !dbg !1610
%1234 = xor i1 %1233, true, !dbg !1610
%1235 = and i1 true, %1234, !dbg !1610
br i1 %1235, label %then400, label %else401, !dbg !1610
exit405: ; preds = %else401, %then400
%1236 = phi %"(String | UInt64 | Nil)"* [ %100, %then400 ], [ %1226, %else401 ], !dbg !1610
%1237 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %1236, i32 0, i32 0, !dbg !1610
%1238 = load i32, i32* %1237, !dbg !1610
%1239 = icmp eq i32 %1238, 0, !dbg !1610
%1240 = xor i1 %1239, true, !dbg !1610
%1241 = and i1 true, %1240, !dbg !1610
br i1 %1241, label %then398, label %else399, !dbg !1610
invoke_out406: ; preds = %then398
br label %exit407, !dbg !1610
exit407: ; preds = %else399, %invoke_out406
%1242 = phi %"Array(Tuple(UInt64, UInt64, String))"* [ %1219, %invoke_out406 ], [ null, %else399 ], !dbg !1610
br label %exit223, !dbg !1610
exit408: ; preds = %exit415, %exit223
br label %while199, !dbg !1610
then409: ; preds = %exit413
br label %exit414, !dbg !1610
else410: ; preds = %exit413
br label %exit415, !dbg !1610
then411: ; preds = %else206
%1243 = getelementptr inbounds %"(Debug::DWARF::Abbrev | Nil)", %"(Debug::DWARF::Abbrev | Nil)"* %abbrev, i32 0, i32 1, !dbg !1610
%1244 = bitcast [3 x i64]* %1243 to %"Debug::DWARF::Abbrev"*, !dbg !1610
%1245 = getelementptr inbounds %"Debug::DWARF::Abbrev", %"Debug::DWARF::Abbrev"* %1244, i32 0, i32 1, !dbg !1610
%1246 = load i32, i32* %1245, !dbg !1610
%1247 = call i1 @"*Debug::DWARF::TAG#subprogram?:Bool"(i32 %1246), !dbg !1610
%1248 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %102, i32 0, i32 0, !dbg !1610
store i32 171, i32* %1248, !dbg !1610
%1249 = zext i1 %1247 to i64, !dbg !1610
%1250 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %102, i32 0, i32 1, !dbg !1610
%1251 = bitcast [1 x i64]* %1250 to i64*, !dbg !1610
store i64 %1249, i64* %1251, !dbg !1610
br label %exit413, !dbg !1610
else412: ; preds = %else206
%1252 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %103, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1252, !dbg !1610
%1253 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %103, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1253, !dbg !1610
br label %exit413, !dbg !1610
exit413: ; preds = %else412, %then411
%1254 = phi %"(Bool | Nil)"* [ %102, %then411 ], [ %103, %else412 ], !dbg !1610
%1255 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %1254, i32 0, i32 0, !dbg !1610
%1256 = load i32, i32* %1255, !dbg !1610
%1257 = icmp eq i32 %1256, 0, !dbg !1610
%1258 = xor i1 %1257, true, !dbg !1610
%1259 = and i1 true, %1258, !dbg !1610
%1260 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %1254, i32 0, i32 1, !dbg !1610
%1261 = bitcast [1 x i64]* %1260 to i1*, !dbg !1610
%1262 = load i1, i1* %1261, !dbg !1610
%1263 = icmp eq i32 %1256, 171, !dbg !1610
%1264 = xor i1 %1262, true, !dbg !1610
%1265 = and i1 %1263, %1264, !dbg !1610
%1266 = xor i1 %1265, true, !dbg !1610
%1267 = and i1 %1259, %1266, !dbg !1610
br i1 %1267, label %then409, label %else410, !dbg !1610
exit414: ; preds = %then409
%1268 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1268, !dbg !1610
%1269 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1269, !dbg !1610
%1270 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1270, !dbg !1610
%1271 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1271, !dbg !1610
store %String* null, %String** %name190, !dbg !1610
%1272 = load %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"*, %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"** %attributes, !dbg !1610
store i32 0, i32* %i421, !dbg !1633
br label %while422, !dbg !1633
exit415: ; preds = %exit605, %else410
br label %exit408, !dbg !1610
while422: ; preds = %exit497, %exit414
%1273 = load i32, i32* %i421, !dbg !1634
%1274 = getelementptr inbounds %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))", %"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %1272, i32 0, i32 1, !dbg !1634
%1275 = load i32, i32* %1274, !dbg !1634
%1276 = icmp slt i32 %1273, %1275, !dbg !1634
br i1 %1276, label %body423, label %exit424, !dbg !1634
body423: ; preds = %while422
%1277 = load i32, i32* %i421, !dbg !1634
store i32 %1277, i32* %i420, !dbg !1634
%1278 = load i32, i32* %i420, !dbg !1634
%1279 = invoke %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" @"*Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))@Array(T)#unsafe_fetch<Int32>:Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"(%"Array(Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8))"* %1272, i32 %1278)
to label %invoke_out425 unwind label %rescue131, !dbg !1616
exit424: ; preds = %while422
%1280 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%1281 = load i32, i32* %1280, !dbg !1610
%1282 = icmp eq i32 %1281, 0, !dbg !1610
%1283 = xor i1 %1282, true, !dbg !1610
%1284 = and i1 true, %1283, !dbg !1610
br i1 %1284, label %then600, label %else601, !dbg !1610
invoke_out425: ; preds = %body423
store %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %1279, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %104, !dbg !1616
%1285 = load %"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)"* %104, !dbg !1616
store %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)" %1285, %"Tuple(Debug::DWARF::AT, Debug::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %__arg1419, !dbg !1616
%1286 = getelementptr inbounds %"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)"* %__arg1419, i32 0, i32 0, !dbg !1616
%1287 = load i32, i32* %1286, !dbg !1616
store i32 %1287, i32* %at416, !dbg !1610
%1288 = getelementptr inbounds %"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)"* %__arg1419, i32 0, i32 1, !dbg !1610
%1289 = load i32, i32* %1288, !dbg !1610
store i32 %1289, i32* %form417, !dbg !1610
%1290 = getelementptr inbounds %"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)"* %__arg1419, i32 0, i32 2, !dbg !1610
%1291 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1290 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"*, !dbg !1610
%1292 = load %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %1291, !dbg !1610
store %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)" %1292, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, !dbg !1610
%1293 = load i32, i32* %at416, !dbg !1610
%1294 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 3, i32 %1293), !dbg !1610
br i1 %1294, label %then426, label %else427, !dbg !1610
then426: ; preds = %invoke_out425
%1295 = load i32, i32* %form417, !dbg !1610
%1296 = call i1 @"*Debug::DWARF::FORM#strp?:Bool"(i32 %1295), !dbg !1610
br i1 %1296, label %then428, label %else429, !dbg !1610
else427: ; preds = %invoke_out425
%1297 = load i32, i32* %at416, !dbg !1610
%1298 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 17, i32 %1297), !dbg !1610
br i1 %1298, label %then498, label %else499, !dbg !1610
then428: ; preds = %then426
%1299 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %strings187, i32 0, i32 0, !dbg !1610
%1300 = load i32, i32* %1299, !dbg !1610
%1301 = icmp eq i32 351, %1300, !dbg !1610
br i1 %1301, label %current_def430, label %next_def431, !dbg !1610
else429: ; preds = %then426
br label %exit466, !dbg !1610
current_def430: ; preds = %then428
%1302 = getelementptr inbounds %"(Debug::DWARF::Strings | Nil)", %"(Debug::DWARF::Strings | Nil)"* %strings187, i32 0, i32 1, !dbg !1610
%1303 = bitcast [5 x i64]* %1302 to %"Debug::DWARF::Strings"*, !dbg !1610
%1304 = load %"Debug::DWARF::Strings", %"Debug::DWARF::Strings"* %1303, !dbg !1610
store %"Debug::DWARF::Strings" %1304, %"Debug::DWARF::Strings"* %__arg2432, !dbg !1610
%1305 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1306 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 0, !dbg !1610
%1307 = load i32, i32* %1306, !dbg !1610
%1308 = call i1 @"~match<(UInt32 | UInt64)>"(i32 %1307), !dbg !1610
br i1 %1308, label %matches433, label %doesnt_match434, !dbg !1610
next_def431: ; preds = %then428
%1309 = icmp eq i32 0, %1300, !dbg !1610
br i1 %1309, label %current_def463, label %next_def464, !dbg !1610
matches433: ; preds = %current_def430
%1310 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305 to %"(UInt32 | UInt64)"*, !dbg !1610
%1311 = load %"(UInt32 | UInt64)", %"(UInt32 | UInt64)"* %1310, !dbg !1610
%1312 = invoke %String* @"*Debug::DWARF::Strings#decode<(UInt32 | UInt64)>:String"(%"Debug::DWARF::Strings"* %__arg2432, %"(UInt32 | UInt64)" %1311)
to label %invoke_out461 unwind label %rescue131, !dbg !1610
doesnt_match434: ; preds = %current_def430
%1313 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 102)
to label %invoke_out435 unwind label %rescue131, !dbg !1610
invoke_out435: ; preds = %doesnt_match434
%1314 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1313, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out436 unwind label %rescue131, !dbg !1610
invoke_out436: ; preds = %invoke_out435
%1315 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 0, !dbg !1610
%1316 = load i32, i32* %1315, !dbg !1610
%1317 = icmp eq i32 171, %1316, !dbg !1610
br i1 %1317, label %current_def437, label %next_def438, !dbg !1610
current_def437: ; preds = %invoke_out436
%1318 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1319 = bitcast [2 x i64]* %1318 to i8*, !dbg !1610
%1320 = load i8, i8* %1319, !dbg !1610
%1321 = trunc i8 %1320 to i1, !dbg !1610
%1322 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %105, i32 0, i32 0, !dbg !1610
store i32 718, i32* %1322, !dbg !1610
%1323 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %105, i32 0, i32 1, !dbg !1610
%1324 = bitcast [1 x i64]* %1323 to i32*, !dbg !1610
store i32 718, i32* %1324, !dbg !1610
br label %exit439, !dbg !1610
next_def438: ; preds = %invoke_out436
%1325 = icmp eq i32 160, %1316, !dbg !1610
br i1 %1325, label %current_def440, label %next_def441, !dbg !1610
exit439: ; preds = %current_def454, %current_def452, %current_def450, %current_def448, %current_def446, %current_def444, %current_def442, %current_def440, %current_def437
%1326 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %105, %current_def437 ], [ %106, %current_def440 ], [ %107, %current_def442 ], [ %108, %current_def444 ], [ %109, %current_def446 ], [ %110, %current_def448 ], [ %111, %current_def450 ], [ %112, %current_def452 ], [ %113, %current_def454 ], !dbg !1610
%1327 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %1326, !dbg !1610
%1328 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %1314, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %1327)
to label %invoke_out456 unwind label %rescue131, !dbg !1610
current_def440: ; preds = %next_def438
%1329 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1330 = bitcast [2 x i64]* %1329 to i32*, !dbg !1610
%1331 = load i32, i32* %1330, !dbg !1610
%1332 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %106, i32 0, i32 0, !dbg !1610
store i32 708, i32* %1332, !dbg !1610
%1333 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %106, i32 0, i32 1, !dbg !1610
%1334 = bitcast [1 x i64]* %1333 to i32*, !dbg !1610
store i32 708, i32* %1334, !dbg !1610
br label %exit439, !dbg !1610
next_def441: ; preds = %next_def438
%1335 = icmp eq i32 162, %1316, !dbg !1610
br i1 %1335, label %current_def442, label %next_def443, !dbg !1610
current_def442: ; preds = %next_def441
%1336 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1337 = bitcast [2 x i64]* %1336 to i64*, !dbg !1610
%1338 = load i64, i64* %1337, !dbg !1610
%1339 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %107, i32 0, i32 0, !dbg !1610
store i32 710, i32* %1339, !dbg !1610
%1340 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %107, i32 0, i32 1, !dbg !1610
%1341 = bitcast [1 x i64]* %1340 to i32*, !dbg !1610
store i32 710, i32* %1341, !dbg !1610
br label %exit439, !dbg !1610
next_def443: ; preds = %next_def441
%1342 = icmp eq i32 438, %1316, !dbg !1610
br i1 %1342, label %current_def444, label %next_def445, !dbg !1610
current_def444: ; preds = %next_def443
%1343 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1344 = bitcast [2 x i64]* %1343 to %"Slice(UInt8)"*, !dbg !1610
%1345 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %108, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %1345, !dbg !1610
%1346 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %108, i32 0, i32 1, !dbg !1610
%1347 = bitcast [1 x i64]* %1346 to i32*, !dbg !1610
store i32 1092, i32* %1347, !dbg !1610
br label %exit439, !dbg !1610
next_def445: ; preds = %next_def443
%1348 = icmp eq i32 1, %1316, !dbg !1610
br i1 %1348, label %current_def446, label %next_def447, !dbg !1610
current_def446: ; preds = %next_def445
%1349 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1350 = bitcast [2 x i64]* %1349 to %String**, !dbg !1610
%1351 = load %String*, %String** %1350, !dbg !1610
%1352 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %109, i32 0, i32 0, !dbg !1610
store i32 485, i32* %1352, !dbg !1610
%1353 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %109, i32 0, i32 1, !dbg !1610
%1354 = bitcast [1 x i64]* %1353 to i32*, !dbg !1610
store i32 485, i32* %1354, !dbg !1610
br label %exit439, !dbg !1610
next_def447: ; preds = %next_def445
%1355 = icmp eq i32 159, %1316, !dbg !1610
br i1 %1355, label %current_def448, label %next_def449, !dbg !1610
current_def448: ; preds = %next_def447
%1356 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1357 = bitcast [2 x i64]* %1356 to i16*, !dbg !1610
%1358 = load i16, i16* %1357, !dbg !1610
%1359 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %110, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1359, !dbg !1610
%1360 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %110, i32 0, i32 1, !dbg !1610
%1361 = bitcast [1 x i64]* %1360 to i32*, !dbg !1610
store i32 707, i32* %1361, !dbg !1610
br label %exit439, !dbg !1610
next_def449: ; preds = %next_def447
%1362 = icmp eq i32 161, %1316, !dbg !1610
br i1 %1362, label %current_def450, label %next_def451, !dbg !1610
current_def450: ; preds = %next_def449
%1363 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1364 = bitcast [2 x i64]* %1363 to i32*, !dbg !1610
%1365 = load i32, i32* %1364, !dbg !1610
%1366 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %111, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1366, !dbg !1610
%1367 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %111, i32 0, i32 1, !dbg !1610
%1368 = bitcast [1 x i64]* %1367 to i32*, !dbg !1610
store i32 709, i32* %1368, !dbg !1610
br label %exit439, !dbg !1610
next_def451: ; preds = %next_def449
%1369 = icmp eq i32 163, %1316, !dbg !1610
br i1 %1369, label %current_def452, label %next_def453, !dbg !1610
current_def452: ; preds = %next_def451
%1370 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1371 = bitcast [2 x i64]* %1370 to i64*, !dbg !1610
%1372 = load i64, i64* %1371, !dbg !1610
%1373 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %112, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1373, !dbg !1610
%1374 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %112, i32 0, i32 1, !dbg !1610
%1375 = bitcast [1 x i64]* %1374 to i32*, !dbg !1610
store i32 711, i32* %1375, !dbg !1610
br label %exit439, !dbg !1610
next_def453: ; preds = %next_def451
%1376 = icmp eq i32 157, %1316, !dbg !1610
br i1 %1376, label %current_def454, label %next_def455, !dbg !1610
current_def454: ; preds = %next_def453
%1377 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1305, i32 0, i32 1, !dbg !1610
%1378 = bitcast [2 x i64]* %1377 to i8*, !dbg !1610
%1379 = load i8, i8* %1378, !dbg !1610
%1380 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %113, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1380, !dbg !1610
%1381 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %113, i32 0, i32 1, !dbg !1610
%1382 = bitcast [1 x i64]* %1381 to i32*, !dbg !1610
store i32 705, i32* %1382, !dbg !1610
br label %exit439, !dbg !1610
next_def455: ; preds = %next_def453
unreachable, !dbg !1610
invoke_out456: ; preds = %exit439
%1383 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1328, %String* bitcast ({ i32, i32, i32, [29 x i8] }* @"' to (UInt32 | UInt6...'" to %String*))
to label %invoke_out457 unwind label %rescue131, !dbg !1610
invoke_out457: ; preds = %invoke_out456
%1384 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1383, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'" to %String*))
to label %invoke_out458 unwind label %rescue131, !dbg !1610
invoke_out458: ; preds = %invoke_out457
%1385 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1384)
to label %invoke_out459 unwind label %rescue131, !dbg !1610
invoke_out459: ; preds = %invoke_out458
%1386 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1385), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1386)
to label %invoke_out460 unwind label %rescue131, !dbg !1610
invoke_out460: ; preds = %invoke_out459
unreachable, !dbg !1610
invoke_out461: ; preds = %matches433
br label %exit462, !dbg !1610
exit462: ; preds = %current_def463, %invoke_out461
%1387 = phi %String* [ %1312, %invoke_out461 ], [ null, %current_def463 ], !dbg !1610
%1388 = icmp eq %String* %1387, null, !dbg !1610
%1389 = select i1 %1388, i32 0, i32 1, !dbg !1610
%1390 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 0, !dbg !1610
store i32 %1389, i32* %1390, !dbg !1610
%1391 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1392 = bitcast [2 x i64]* %1391 to %String**, !dbg !1610
store %String* %1387, %String** %1392, !dbg !1610
br label %exit466, !dbg !1610
current_def463: ; preds = %next_def431
br label %exit462, !dbg !1610
next_def464: ; preds = %next_def431
unreachable, !dbg !1610
exit466: ; preds = %else429, %exit462
%1393 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 0, !dbg !1610
%1394 = load i32, i32* %1393, !dbg !1610
%1395 = icmp eq i32 1, %1394, !dbg !1610
br i1 %1395, label %matches467, label %doesnt_match468, !dbg !1610
matches467: ; preds = %exit466
%1396 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1397 = bitcast [2 x i64]* %1396 to %String**, !dbg !1610
%1398 = load %String*, %String** %1397, !dbg !1610
store %String* %1398, %String** %name190, !dbg !1610
%1399 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %124, i32 0, i32 0, !dbg !1610
store i32 1, i32* %1399, !dbg !1610
%1400 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %124, i32 0, i32 1, !dbg !1610
%1401 = bitcast [1 x i64]* %1400 to %String**, !dbg !1610
store %String* %1398, %String** %1401, !dbg !1610
br label %exit497, !dbg !1610
doesnt_match468: ; preds = %exit466
%1402 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out469 unwind label %rescue131, !dbg !1610
invoke_out469: ; preds = %doesnt_match468
%1403 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1402, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out470 unwind label %rescue131, !dbg !1610
invoke_out470: ; preds = %invoke_out469
%1404 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 0, !dbg !1610
%1405 = load i32, i32* %1404, !dbg !1610
%1406 = icmp eq i32 171, %1405, !dbg !1610
br i1 %1406, label %current_def471, label %next_def472, !dbg !1610
current_def471: ; preds = %invoke_out470
%1407 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1408 = bitcast [2 x i64]* %1407 to i8*, !dbg !1610
%1409 = load i8, i8* %1408, !dbg !1610
%1410 = trunc i8 %1409 to i1, !dbg !1610
%1411 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %114, i32 0, i32 0, !dbg !1610
store i32 718, i32* %1411, !dbg !1610
%1412 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %114, i32 0, i32 1, !dbg !1610
%1413 = bitcast [1 x i64]* %1412 to i32*, !dbg !1610
store i32 718, i32* %1413, !dbg !1610
br label %exit473, !dbg !1610
next_def472: ; preds = %invoke_out470
%1414 = icmp eq i32 160, %1405, !dbg !1610
br i1 %1414, label %current_def474, label %next_def475, !dbg !1610
exit473: ; preds = %current_def490, %current_def488, %current_def486, %current_def484, %current_def482, %current_def480, %current_def478, %current_def476, %current_def474, %current_def471
%1415 = phi %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %114, %current_def471 ], [ %115, %current_def474 ], [ %116, %current_def476 ], [ %117, %current_def478 ], [ %118, %current_def480 ], [ %119, %current_def482 ], [ %120, %current_def484 ], [ %121, %current_def486 ], [ %122, %current_def488 ], [ %123, %current_def490 ], !dbg !1610
%1416 = load %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %1415, !dbg !1610
%1417 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %1403, %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %1416)
to label %invoke_out492 unwind label %rescue131, !dbg !1610
current_def474: ; preds = %next_def472
%1418 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1419 = bitcast [2 x i64]* %1418 to i32*, !dbg !1610
%1420 = load i32, i32* %1419, !dbg !1610
%1421 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %115, i32 0, i32 0, !dbg !1610
store i32 708, i32* %1421, !dbg !1610
%1422 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %115, i32 0, i32 1, !dbg !1610
%1423 = bitcast [1 x i64]* %1422 to i32*, !dbg !1610
store i32 708, i32* %1423, !dbg !1610
br label %exit473, !dbg !1610
next_def475: ; preds = %next_def472
%1424 = icmp eq i32 162, %1405, !dbg !1610
br i1 %1424, label %current_def476, label %next_def477, !dbg !1610
current_def476: ; preds = %next_def475
%1425 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1426 = bitcast [2 x i64]* %1425 to i64*, !dbg !1610
%1427 = load i64, i64* %1426, !dbg !1610
%1428 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %116, i32 0, i32 0, !dbg !1610
store i32 710, i32* %1428, !dbg !1610
%1429 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %116, i32 0, i32 1, !dbg !1610
%1430 = bitcast [1 x i64]* %1429 to i32*, !dbg !1610
store i32 710, i32* %1430, !dbg !1610
br label %exit473, !dbg !1610
next_def477: ; preds = %next_def475
%1431 = icmp eq i32 438, %1405, !dbg !1610
br i1 %1431, label %current_def478, label %next_def479, !dbg !1610
current_def478: ; preds = %next_def477
%1432 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1433 = bitcast [2 x i64]* %1432 to %"Slice(UInt8)"*, !dbg !1610
%1434 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %117, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %1434, !dbg !1610
%1435 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %117, i32 0, i32 1, !dbg !1610
%1436 = bitcast [1 x i64]* %1435 to i32*, !dbg !1610
store i32 1092, i32* %1436, !dbg !1610
br label %exit473, !dbg !1610
next_def479: ; preds = %next_def477
%1437 = icmp eq i32 1, %1405, !dbg !1610
br i1 %1437, label %current_def480, label %next_def481, !dbg !1610
current_def480: ; preds = %next_def479
%1438 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1439 = bitcast [2 x i64]* %1438 to %String**, !dbg !1610
%1440 = load %String*, %String** %1439, !dbg !1610
%1441 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %118, i32 0, i32 0, !dbg !1610
store i32 485, i32* %1441, !dbg !1610
%1442 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %118, i32 0, i32 1, !dbg !1610
%1443 = bitcast [1 x i64]* %1442 to i32*, !dbg !1610
store i32 485, i32* %1443, !dbg !1610
br label %exit473, !dbg !1610
next_def481: ; preds = %next_def479
%1444 = icmp eq i32 159, %1405, !dbg !1610
br i1 %1444, label %current_def482, label %next_def483, !dbg !1610
current_def482: ; preds = %next_def481
%1445 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1446 = bitcast [2 x i64]* %1445 to i16*, !dbg !1610
%1447 = load i16, i16* %1446, !dbg !1610
%1448 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %119, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1448, !dbg !1610
%1449 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %119, i32 0, i32 1, !dbg !1610
%1450 = bitcast [1 x i64]* %1449 to i32*, !dbg !1610
store i32 707, i32* %1450, !dbg !1610
br label %exit473, !dbg !1610
next_def483: ; preds = %next_def481
%1451 = icmp eq i32 161, %1405, !dbg !1610
br i1 %1451, label %current_def484, label %next_def485, !dbg !1610
current_def484: ; preds = %next_def483
%1452 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1453 = bitcast [2 x i64]* %1452 to i32*, !dbg !1610
%1454 = load i32, i32* %1453, !dbg !1610
%1455 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %120, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1455, !dbg !1610
%1456 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %120, i32 0, i32 1, !dbg !1610
%1457 = bitcast [1 x i64]* %1456 to i32*, !dbg !1610
store i32 709, i32* %1457, !dbg !1610
br label %exit473, !dbg !1610
next_def485: ; preds = %next_def483
%1458 = icmp eq i32 163, %1405, !dbg !1610
br i1 %1458, label %current_def486, label %next_def487, !dbg !1610
current_def486: ; preds = %next_def485
%1459 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1460 = bitcast [2 x i64]* %1459 to i64*, !dbg !1610
%1461 = load i64, i64* %1460, !dbg !1610
%1462 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %121, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1462, !dbg !1610
%1463 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %121, i32 0, i32 1, !dbg !1610
%1464 = bitcast [1 x i64]* %1463 to i32*, !dbg !1610
store i32 711, i32* %1464, !dbg !1610
br label %exit473, !dbg !1610
next_def487: ; preds = %next_def485
%1465 = icmp eq i32 157, %1405, !dbg !1610
br i1 %1465, label %current_def488, label %next_def489, !dbg !1610
current_def488: ; preds = %next_def487
%1466 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418, i32 0, i32 1, !dbg !1610
%1467 = bitcast [2 x i64]* %1466 to i8*, !dbg !1610
%1468 = load i8, i8* %1467, !dbg !1610
%1469 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %122, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1469, !dbg !1610
%1470 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %122, i32 0, i32 1, !dbg !1610
%1471 = bitcast [1 x i64]* %1470 to i32*, !dbg !1610
store i32 705, i32* %1471, !dbg !1610
br label %exit473, !dbg !1610
next_def489: ; preds = %next_def487
%1472 = icmp eq i32 0, %1405, !dbg !1610
br i1 %1472, label %current_def490, label %next_def491, !dbg !1610
current_def490: ; preds = %next_def489
%1473 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %123, i32 0, i32 0, !dbg !1610
store i32 717, i32* %1473, !dbg !1610
%1474 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %123, i32 0, i32 1, !dbg !1610
%1475 = bitcast [1 x i64]* %1474 to i32*, !dbg !1610
store i32 717, i32* %1475, !dbg !1610
br label %exit473, !dbg !1610
next_def491: ; preds = %next_def489
unreachable, !dbg !1610
invoke_out492: ; preds = %exit473
%1476 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1417, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to String failed'" to %String*))
to label %invoke_out493 unwind label %rescue131, !dbg !1610
invoke_out493: ; preds = %invoke_out492
%1477 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1476, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.6" to %String*))
to label %invoke_out494 unwind label %rescue131, !dbg !1610
invoke_out494: ; preds = %invoke_out493
%1478 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1477)
to label %invoke_out495 unwind label %rescue131, !dbg !1610
invoke_out495: ; preds = %invoke_out494
%1479 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1478), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1479)
to label %invoke_out496 unwind label %rescue131, !dbg !1610
invoke_out496: ; preds = %invoke_out495
unreachable, !dbg !1610
exit497: ; preds = %exit528, %matches467
%1480 = phi %"(String | UInt64 | Nil)"* [ %124, %matches467 ], [ %1573, %exit528 ], !dbg !1610
%1481 = load i32, i32* %i421, !dbg !1610
%1482 = add i32 %1481, 1, !dbg !1610
store i32 %1482, i32* %i421, !dbg !1618
br label %while422, !dbg !1618
then498: ; preds = %else427
%1483 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1484 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 0, !dbg !1610
%1485 = load i32, i32* %1484, !dbg !1610
%1486 = icmp eq i32 163, %1485, !dbg !1610
br i1 %1486, label %matches500, label %doesnt_match501, !dbg !1610
else499: ; preds = %else427
%1487 = load i32, i32* %at416, !dbg !1610
%1488 = call i1 @"*Debug::DWARF::AT@Object#===<Debug::DWARF::AT>:Bool"(i32 18, i32 %1487), !dbg !1610
br i1 %1488, label %then529, label %else530, !dbg !1610
matches500: ; preds = %then498
%1489 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1490 = bitcast [2 x i64]* %1489 to i64*, !dbg !1610
%1491 = load i64, i64* %1490, !dbg !1610
%1492 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1492, !dbg !1610
%1493 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1494 = bitcast [1 x i64]* %1493 to i64*, !dbg !1610
store i64 %1491, i64* %1494, !dbg !1610
%1495 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %134, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1495, !dbg !1610
%1496 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %134, i32 0, i32 1, !dbg !1610
%1497 = bitcast [1 x i64]* %1496 to i64*, !dbg !1610
store i64 %1491, i64* %1497, !dbg !1610
br label %exit528, !dbg !1610
doesnt_match501: ; preds = %then498
%1498 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out502 unwind label %rescue131, !dbg !1610
invoke_out502: ; preds = %doesnt_match501
%1499 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1498, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out503 unwind label %rescue131, !dbg !1610
invoke_out503: ; preds = %invoke_out502
%1500 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 0, !dbg !1610
%1501 = load i32, i32* %1500, !dbg !1610
%1502 = icmp eq i32 171, %1501, !dbg !1610
br i1 %1502, label %current_def504, label %next_def505, !dbg !1610
current_def504: ; preds = %invoke_out503
%1503 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1504 = bitcast [2 x i64]* %1503 to i8*, !dbg !1610
%1505 = load i8, i8* %1504, !dbg !1610
%1506 = trunc i8 %1505 to i1, !dbg !1610
%1507 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %125, i32 0, i32 0, !dbg !1610
store i32 718, i32* %1507, !dbg !1610
%1508 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %125, i32 0, i32 1, !dbg !1610
%1509 = bitcast [1 x i64]* %1508 to i32*, !dbg !1610
store i32 718, i32* %1509, !dbg !1610
br label %exit506, !dbg !1610
next_def505: ; preds = %invoke_out503
%1510 = icmp eq i32 160, %1501, !dbg !1610
br i1 %1510, label %current_def507, label %next_def508, !dbg !1610
exit506: ; preds = %current_def521, %current_def519, %current_def517, %current_def515, %current_def513, %current_def511, %current_def509, %current_def507, %current_def504
%1511 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %125, %current_def504 ], [ %126, %current_def507 ], [ %127, %current_def509 ], [ %128, %current_def511 ], [ %129, %current_def513 ], [ %130, %current_def515 ], [ %131, %current_def517 ], [ %132, %current_def519 ], [ %133, %current_def521 ], !dbg !1610
%1512 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %1511, !dbg !1610
%1513 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %1499, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %1512)
to label %invoke_out523 unwind label %rescue131, !dbg !1610
current_def507: ; preds = %next_def505
%1514 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1515 = bitcast [2 x i64]* %1514 to i32*, !dbg !1610
%1516 = load i32, i32* %1515, !dbg !1610
%1517 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %126, i32 0, i32 0, !dbg !1610
store i32 708, i32* %1517, !dbg !1610
%1518 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %126, i32 0, i32 1, !dbg !1610
%1519 = bitcast [1 x i64]* %1518 to i32*, !dbg !1610
store i32 708, i32* %1519, !dbg !1610
br label %exit506, !dbg !1610
next_def508: ; preds = %next_def505
%1520 = icmp eq i32 162, %1501, !dbg !1610
br i1 %1520, label %current_def509, label %next_def510, !dbg !1610
current_def509: ; preds = %next_def508
%1521 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1522 = bitcast [2 x i64]* %1521 to i64*, !dbg !1610
%1523 = load i64, i64* %1522, !dbg !1610
%1524 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %127, i32 0, i32 0, !dbg !1610
store i32 710, i32* %1524, !dbg !1610
%1525 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %127, i32 0, i32 1, !dbg !1610
%1526 = bitcast [1 x i64]* %1525 to i32*, !dbg !1610
store i32 710, i32* %1526, !dbg !1610
br label %exit506, !dbg !1610
next_def510: ; preds = %next_def508
%1527 = icmp eq i32 438, %1501, !dbg !1610
br i1 %1527, label %current_def511, label %next_def512, !dbg !1610
current_def511: ; preds = %next_def510
%1528 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1529 = bitcast [2 x i64]* %1528 to %"Slice(UInt8)"*, !dbg !1610
%1530 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %128, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %1530, !dbg !1610
%1531 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %128, i32 0, i32 1, !dbg !1610
%1532 = bitcast [1 x i64]* %1531 to i32*, !dbg !1610
store i32 1092, i32* %1532, !dbg !1610
br label %exit506, !dbg !1610
next_def512: ; preds = %next_def510
%1533 = icmp eq i32 1, %1501, !dbg !1610
br i1 %1533, label %current_def513, label %next_def514, !dbg !1610
current_def513: ; preds = %next_def512
%1534 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1535 = bitcast [2 x i64]* %1534 to %String**, !dbg !1610
%1536 = load %String*, %String** %1535, !dbg !1610
%1537 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %129, i32 0, i32 0, !dbg !1610
store i32 485, i32* %1537, !dbg !1610
%1538 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %129, i32 0, i32 1, !dbg !1610
%1539 = bitcast [1 x i64]* %1538 to i32*, !dbg !1610
store i32 485, i32* %1539, !dbg !1610
br label %exit506, !dbg !1610
next_def514: ; preds = %next_def512
%1540 = icmp eq i32 159, %1501, !dbg !1610
br i1 %1540, label %current_def515, label %next_def516, !dbg !1610
current_def515: ; preds = %next_def514
%1541 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1542 = bitcast [2 x i64]* %1541 to i16*, !dbg !1610
%1543 = load i16, i16* %1542, !dbg !1610
%1544 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %130, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1544, !dbg !1610
%1545 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %130, i32 0, i32 1, !dbg !1610
%1546 = bitcast [1 x i64]* %1545 to i32*, !dbg !1610
store i32 707, i32* %1546, !dbg !1610
br label %exit506, !dbg !1610
next_def516: ; preds = %next_def514
%1547 = icmp eq i32 161, %1501, !dbg !1610
br i1 %1547, label %current_def517, label %next_def518, !dbg !1610
current_def517: ; preds = %next_def516
%1548 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1549 = bitcast [2 x i64]* %1548 to i32*, !dbg !1610
%1550 = load i32, i32* %1549, !dbg !1610
%1551 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %131, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1551, !dbg !1610
%1552 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %131, i32 0, i32 1, !dbg !1610
%1553 = bitcast [1 x i64]* %1552 to i32*, !dbg !1610
store i32 709, i32* %1553, !dbg !1610
br label %exit506, !dbg !1610
next_def518: ; preds = %next_def516
%1554 = icmp eq i32 163, %1501, !dbg !1610
br i1 %1554, label %current_def519, label %next_def520, !dbg !1610
current_def519: ; preds = %next_def518
%1555 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1556 = bitcast [2 x i64]* %1555 to i64*, !dbg !1610
%1557 = load i64, i64* %1556, !dbg !1610
%1558 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %132, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1558, !dbg !1610
%1559 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %132, i32 0, i32 1, !dbg !1610
%1560 = bitcast [1 x i64]* %1559 to i32*, !dbg !1610
store i32 711, i32* %1560, !dbg !1610
br label %exit506, !dbg !1610
next_def520: ; preds = %next_def518
%1561 = icmp eq i32 157, %1501, !dbg !1610
br i1 %1561, label %current_def521, label %next_def522, !dbg !1610
current_def521: ; preds = %next_def520
%1562 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1483, i32 0, i32 1, !dbg !1610
%1563 = bitcast [2 x i64]* %1562 to i8*, !dbg !1610
%1564 = load i8, i8* %1563, !dbg !1610
%1565 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %133, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1565, !dbg !1610
%1566 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %133, i32 0, i32 1, !dbg !1610
%1567 = bitcast [1 x i64]* %1566 to i32*, !dbg !1610
store i32 705, i32* %1567, !dbg !1610
br label %exit506, !dbg !1610
next_def522: ; preds = %next_def520
unreachable, !dbg !1610
invoke_out523: ; preds = %exit506
%1568 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1513, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out524 unwind label %rescue131, !dbg !1610
invoke_out524: ; preds = %invoke_out523
%1569 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1568, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.7" to %String*))
to label %invoke_out525 unwind label %rescue131, !dbg !1610
invoke_out525: ; preds = %invoke_out524
%1570 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1569)
to label %invoke_out526 unwind label %rescue131, !dbg !1610
invoke_out526: ; preds = %invoke_out525
%1571 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1570), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1571)
to label %invoke_out527 unwind label %rescue131, !dbg !1610
invoke_out527: ; preds = %invoke_out526
unreachable, !dbg !1610
exit528: ; preds = %exit595, %matches500
%1572 = phi %"(UInt64 | Nil)"* [ %134, %matches500 ], [ %1746, %exit595 ], !dbg !1610
%1573 = bitcast %"(UInt64 | Nil)"* %1572 to %"(String | UInt64 | Nil)"*, !dbg !1610
br label %exit497, !dbg !1610
then529: ; preds = %else499
%1574 = load i32, i32* %form417, !dbg !1610
%1575 = call i1 @"*Debug::DWARF::FORM#addr?:Bool"(i32 %1574), !dbg !1610
br i1 %1575, label %then531, label %else532, !dbg !1610
else530: ; preds = %else499
%1576 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %149, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1576, !dbg !1610
%1577 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %149, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1577, !dbg !1610
br label %exit595, !dbg !1610
then531: ; preds = %then529
%1578 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1579 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 0, !dbg !1610
%1580 = load i32, i32* %1579, !dbg !1610
%1581 = icmp eq i32 163, %1580, !dbg !1610
br i1 %1581, label %matches533, label %doesnt_match534, !dbg !1610
else532: ; preds = %then529
%1582 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418 to %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1583 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1582, i32 0, i32 0, !dbg !1610
%1584 = load i32, i32* %1583, !dbg !1610
%1585 = call i1 @"~match<(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)>"(i32 %1584), !dbg !1610
br i1 %1585, label %then562, label %else563, !dbg !1610
matches533: ; preds = %then531
%1586 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1587 = bitcast [2 x i64]* %1586 to i64*, !dbg !1610
%1588 = load i64, i64* %1587, !dbg !1610
%1589 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1589, !dbg !1610
%1590 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1591 = bitcast [1 x i64]* %1590 to i64*, !dbg !1610
store i64 %1588, i64* %1591, !dbg !1610
%1592 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %144, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1592, !dbg !1610
%1593 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %144, i32 0, i32 1, !dbg !1610
%1594 = bitcast [1 x i64]* %1593 to i64*, !dbg !1610
store i64 %1588, i64* %1594, !dbg !1610
br label %exit561, !dbg !1610
doesnt_match534: ; preds = %then531
%1595 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out535 unwind label %rescue131, !dbg !1610
invoke_out535: ; preds = %doesnt_match534
%1596 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1595, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out536 unwind label %rescue131, !dbg !1610
invoke_out536: ; preds = %invoke_out535
%1597 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 0, !dbg !1610
%1598 = load i32, i32* %1597, !dbg !1610
%1599 = icmp eq i32 171, %1598, !dbg !1610
br i1 %1599, label %current_def537, label %next_def538, !dbg !1610
current_def537: ; preds = %invoke_out536
%1600 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1601 = bitcast [2 x i64]* %1600 to i8*, !dbg !1610
%1602 = load i8, i8* %1601, !dbg !1610
%1603 = trunc i8 %1602 to i1, !dbg !1610
%1604 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %135, i32 0, i32 0, !dbg !1610
store i32 718, i32* %1604, !dbg !1610
%1605 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %135, i32 0, i32 1, !dbg !1610
%1606 = bitcast [1 x i64]* %1605 to i32*, !dbg !1610
store i32 718, i32* %1606, !dbg !1610
br label %exit539, !dbg !1610
next_def538: ; preds = %invoke_out536
%1607 = icmp eq i32 160, %1598, !dbg !1610
br i1 %1607, label %current_def540, label %next_def541, !dbg !1610
exit539: ; preds = %current_def554, %current_def552, %current_def550, %current_def548, %current_def546, %current_def544, %current_def542, %current_def540, %current_def537
%1608 = phi %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* [ %135, %current_def537 ], [ %136, %current_def540 ], [ %137, %current_def542 ], [ %138, %current_def544 ], [ %139, %current_def546 ], [ %140, %current_def548 ], [ %141, %current_def550 ], [ %142, %current_def552 ], [ %143, %current_def554 ], !dbg !1610
%1609 = load %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %1608, !dbg !1610
%1610 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)>:String::Builder"(%"String::Builder"* %1596, %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" %1609)
to label %invoke_out556 unwind label %rescue131, !dbg !1610
current_def540: ; preds = %next_def538
%1611 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1612 = bitcast [2 x i64]* %1611 to i32*, !dbg !1610
%1613 = load i32, i32* %1612, !dbg !1610
%1614 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %136, i32 0, i32 0, !dbg !1610
store i32 708, i32* %1614, !dbg !1610
%1615 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %136, i32 0, i32 1, !dbg !1610
%1616 = bitcast [1 x i64]* %1615 to i32*, !dbg !1610
store i32 708, i32* %1616, !dbg !1610
br label %exit539, !dbg !1610
next_def541: ; preds = %next_def538
%1617 = icmp eq i32 162, %1598, !dbg !1610
br i1 %1617, label %current_def542, label %next_def543, !dbg !1610
current_def542: ; preds = %next_def541
%1618 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1619 = bitcast [2 x i64]* %1618 to i64*, !dbg !1610
%1620 = load i64, i64* %1619, !dbg !1610
%1621 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %137, i32 0, i32 0, !dbg !1610
store i32 710, i32* %1621, !dbg !1610
%1622 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %137, i32 0, i32 1, !dbg !1610
%1623 = bitcast [1 x i64]* %1622 to i32*, !dbg !1610
store i32 710, i32* %1623, !dbg !1610
br label %exit539, !dbg !1610
next_def543: ; preds = %next_def541
%1624 = icmp eq i32 438, %1598, !dbg !1610
br i1 %1624, label %current_def544, label %next_def545, !dbg !1610
current_def544: ; preds = %next_def543
%1625 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1626 = bitcast [2 x i64]* %1625 to %"Slice(UInt8)"*, !dbg !1610
%1627 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %138, i32 0, i32 0, !dbg !1610
store i32 1092, i32* %1627, !dbg !1610
%1628 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %138, i32 0, i32 1, !dbg !1610
%1629 = bitcast [1 x i64]* %1628 to i32*, !dbg !1610
store i32 1092, i32* %1629, !dbg !1610
br label %exit539, !dbg !1610
next_def545: ; preds = %next_def543
%1630 = icmp eq i32 1, %1598, !dbg !1610
br i1 %1630, label %current_def546, label %next_def547, !dbg !1610
current_def546: ; preds = %next_def545
%1631 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1632 = bitcast [2 x i64]* %1631 to %String**, !dbg !1610
%1633 = load %String*, %String** %1632, !dbg !1610
%1634 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %139, i32 0, i32 0, !dbg !1610
store i32 485, i32* %1634, !dbg !1610
%1635 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %139, i32 0, i32 1, !dbg !1610
%1636 = bitcast [1 x i64]* %1635 to i32*, !dbg !1610
store i32 485, i32* %1636, !dbg !1610
br label %exit539, !dbg !1610
next_def547: ; preds = %next_def545
%1637 = icmp eq i32 159, %1598, !dbg !1610
br i1 %1637, label %current_def548, label %next_def549, !dbg !1610
current_def548: ; preds = %next_def547
%1638 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1639 = bitcast [2 x i64]* %1638 to i16*, !dbg !1610
%1640 = load i16, i16* %1639, !dbg !1610
%1641 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %140, i32 0, i32 0, !dbg !1610
store i32 707, i32* %1641, !dbg !1610
%1642 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %140, i32 0, i32 1, !dbg !1610
%1643 = bitcast [1 x i64]* %1642 to i32*, !dbg !1610
store i32 707, i32* %1643, !dbg !1610
br label %exit539, !dbg !1610
next_def549: ; preds = %next_def547
%1644 = icmp eq i32 161, %1598, !dbg !1610
br i1 %1644, label %current_def550, label %next_def551, !dbg !1610
current_def550: ; preds = %next_def549
%1645 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1646 = bitcast [2 x i64]* %1645 to i32*, !dbg !1610
%1647 = load i32, i32* %1646, !dbg !1610
%1648 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %141, i32 0, i32 0, !dbg !1610
store i32 709, i32* %1648, !dbg !1610
%1649 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %141, i32 0, i32 1, !dbg !1610
%1650 = bitcast [1 x i64]* %1649 to i32*, !dbg !1610
store i32 709, i32* %1650, !dbg !1610
br label %exit539, !dbg !1610
next_def551: ; preds = %next_def549
%1651 = icmp eq i32 163, %1598, !dbg !1610
br i1 %1651, label %current_def552, label %next_def553, !dbg !1610
current_def552: ; preds = %next_def551
%1652 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1653 = bitcast [2 x i64]* %1652 to i64*, !dbg !1610
%1654 = load i64, i64* %1653, !dbg !1610
%1655 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %142, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1655, !dbg !1610
%1656 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %142, i32 0, i32 1, !dbg !1610
%1657 = bitcast [1 x i64]* %1656 to i32*, !dbg !1610
store i32 711, i32* %1657, !dbg !1610
br label %exit539, !dbg !1610
next_def553: ; preds = %next_def551
%1658 = icmp eq i32 157, %1598, !dbg !1610
br i1 %1658, label %current_def554, label %next_def555, !dbg !1610
current_def554: ; preds = %next_def553
%1659 = getelementptr inbounds %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1578, i32 0, i32 1, !dbg !1610
%1660 = bitcast [2 x i64]* %1659 to i8*, !dbg !1610
%1661 = load i8, i8* %1660, !dbg !1610
%1662 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %143, i32 0, i32 0, !dbg !1610
store i32 705, i32* %1662, !dbg !1610
%1663 = getelementptr inbounds %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)", %"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)"* %143, i32 0, i32 1, !dbg !1610
%1664 = bitcast [1 x i64]* %1663 to i32*, !dbg !1610
store i32 705, i32* %1664, !dbg !1610
br label %exit539, !dbg !1610
next_def555: ; preds = %next_def553
unreachable, !dbg !1610
invoke_out556: ; preds = %exit539
%1665 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1610, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out557 unwind label %rescue131, !dbg !1610
invoke_out557: ; preds = %invoke_out556
%1666 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1665, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.8" to %String*))
to label %invoke_out558 unwind label %rescue131, !dbg !1610
invoke_out558: ; preds = %invoke_out557
%1667 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1666)
to label %invoke_out559 unwind label %rescue131, !dbg !1610
invoke_out559: ; preds = %invoke_out558
%1668 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1667), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1668)
to label %invoke_out560 unwind label %rescue131, !dbg !1610
invoke_out560: ; preds = %invoke_out559
unreachable, !dbg !1610
exit561: ; preds = %exit594, %matches533
%1669 = phi %"(UInt64 | Nil)"* [ %144, %matches533 ], [ %1745, %exit594 ], !dbg !1610
br label %exit595, !dbg !1610
then562: ; preds = %else532
%1670 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%1671 = load i32, i32* %1670, !dbg !1610
%1672 = icmp eq i32 163, %1671, !dbg !1610
br i1 %1672, label %matches564, label %doesnt_match565, !dbg !1610
else563: ; preds = %else532
%1673 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %148, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1673, !dbg !1610
%1674 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %148, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1674, !dbg !1610
br label %exit594, !dbg !1610
matches564: ; preds = %then562
%1675 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1676 = bitcast [1 x i64]* %1675 to i64*, !dbg !1610
%1677 = load i64, i64* %1676, !dbg !1610
%1678 = bitcast %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt16 | UInt32 | UInt64 | UInt8 | Nil)"* %value418 to %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"*, !dbg !1610
%1679 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 0, !dbg !1610
%1680 = load i32, i32* %1679, !dbg !1610
%1681 = icmp eq i32 160, %1680, !dbg !1610
br i1 %1681, label %current_def578, label %next_def579, !dbg !1610
doesnt_match565: ; preds = %then562
%1682 = invoke %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 91)
to label %invoke_out566 unwind label %rescue131, !dbg !1610
invoke_out566: ; preds = %doesnt_match565
%1683 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1682, %String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'cast from '" to %String*))
to label %invoke_out567 unwind label %rescue131, !dbg !1610
invoke_out567: ; preds = %invoke_out566
%1684 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 0, !dbg !1610
%1685 = load i32, i32* %1684, !dbg !1610
%1686 = icmp eq i32 163, %1685, !dbg !1610
br i1 %1686, label %current_def568, label %next_def569, !dbg !1610
current_def568: ; preds = %invoke_out567
%1687 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1688 = bitcast [1 x i64]* %1687 to i64*, !dbg !1610
%1689 = load i64, i64* %1688, !dbg !1610
%1690 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %145, i32 0, i32 0, !dbg !1610
store i32 711, i32* %1690, !dbg !1610
%1691 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %145, i32 0, i32 1, !dbg !1610
%1692 = bitcast [1 x i64]* %1691 to i32*, !dbg !1610
store i32 711, i32* %1692, !dbg !1610
br label %exit570, !dbg !1610
next_def569: ; preds = %invoke_out567
%1693 = icmp eq i32 0, %1685, !dbg !1610
br i1 %1693, label %current_def571, label %next_def572, !dbg !1610
exit570: ; preds = %current_def571, %current_def568
%1694 = phi %"(Nil.class | UInt64.class)"* [ %145, %current_def568 ], [ %146, %current_def571 ], !dbg !1610
%1695 = load %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %1694, !dbg !1610
%1696 = invoke %"String::Builder"* @"*String::Builder@IO#<<<(Nil.class | UInt64.class)>:String::Builder"(%"String::Builder"* %1683, %"(Nil.class | UInt64.class)" %1695)
to label %invoke_out573 unwind label %rescue131, !dbg !1610
current_def571: ; preds = %next_def569
%1697 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %146, i32 0, i32 0, !dbg !1610
store i32 717, i32* %1697, !dbg !1610
%1698 = getelementptr inbounds %"(Nil.class | UInt64.class)", %"(Nil.class | UInt64.class)"* %146, i32 0, i32 1, !dbg !1610
%1699 = bitcast [1 x i64]* %1698 to i32*, !dbg !1610
store i32 717, i32* %1699, !dbg !1610
br label %exit570, !dbg !1610
next_def572: ; preds = %next_def569
unreachable, !dbg !1610
invoke_out573: ; preds = %exit570
%1700 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1696, %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"' to UInt64 failed'" to %String*))
to label %invoke_out574 unwind label %rescue131, !dbg !1610
invoke_out574: ; preds = %invoke_out573
%1701 = invoke %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %1700, %String* bitcast ({ i32, i32, i32, [50 x i8] }* @"', at /usr/share/cry...'.9" to %String*))
to label %invoke_out575 unwind label %rescue131, !dbg !1610
invoke_out575: ; preds = %invoke_out574
%1702 = invoke %String* @"*String::Builder#to_s:String"(%"String::Builder"* %1701)
to label %invoke_out576 unwind label %rescue131, !dbg !1610
invoke_out576: ; preds = %invoke_out575
%1703 = call %TypeCastError* @"*TypeCastError::new<String>:TypeCastError"(%String* %1702), !dbg !1610
invoke void @"*raise<TypeCastError>:NoReturn"(%TypeCastError* %1703)
to label %invoke_out577 unwind label %rescue131, !dbg !1610
invoke_out577: ; preds = %invoke_out576
unreachable, !dbg !1610
current_def578: ; preds = %matches564
%1704 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1705 = bitcast [1 x i64]* %1704 to i32*, !dbg !1610
%1706 = load i32, i32* %1705, !dbg !1610
br label %exit580, !dbg !1610
next_def579: ; preds = %matches564
%1707 = icmp eq i32 162, %1680, !dbg !1610
br i1 %1707, label %current_def581, label %next_def582, !dbg !1610
exit580: ; preds = %current_def592, %current_def590, %current_def588, %current_def586, %invoke_out585, %current_def581, %current_def578
%1708 = phi i32 [ %1706, %current_def578 ], [ %1720, %current_def581 ], [ %1725, %invoke_out585 ], [ %1730, %current_def586 ], [ %1734, %current_def588 ], [ %1739, %current_def590 ], [ %1744, %current_def592 ], !dbg !1610
%1709 = sext i32 %1708 to i64, !dbg !1610
%1710 = add i64 %1677, %1709, !dbg !1610
%1711 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1711, !dbg !1610
%1712 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1713 = bitcast [1 x i64]* %1712 to i64*, !dbg !1610
store i64 %1710, i64* %1713, !dbg !1610
%1714 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %147, i32 0, i32 0, !dbg !1610
store i32 163, i32* %1714, !dbg !1610
%1715 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %147, i32 0, i32 1, !dbg !1610
%1716 = bitcast [1 x i64]* %1715 to i64*, !dbg !1610
store i64 %1710, i64* %1716, !dbg !1610
br label %exit594, !dbg !1610
current_def581: ; preds = %next_def579
%1717 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1718 = bitcast [1 x i64]* %1717 to i64*, !dbg !1610
%1719 = load i64, i64* %1718, !dbg !1610
%1720 = trunc i64 %1719 to i32, !dbg !1610
br label %exit580, !dbg !1610
next_def582: ; preds = %next_def579
%1721 = icmp eq i32 1, %1680, !dbg !1610
br i1 %1721, label %current_def583, label %next_def584, !dbg !1610
current_def583: ; preds = %next_def582
%1722 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1723 = bitcast [1 x i64]* %1722 to %String**, !dbg !1610
%1724 = load %String*, %String** %1723, !dbg !1610
%1725 = invoke i32 @"*String#to_i:Int32"(%String* %1724)
to label %invoke_out585 unwind label %rescue131, !dbg !1610
next_def584: ; preds = %next_def582
%1726 = icmp eq i32 159, %1680, !dbg !1610
br i1 %1726, label %current_def586, label %next_def587, !dbg !1610
invoke_out585: ; preds = %current_def583
br label %exit580, !dbg !1610
current_def586: ; preds = %next_def584
%1727 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1728 = bitcast [1 x i64]* %1727 to i16*, !dbg !1610
%1729 = load i16, i16* %1728, !dbg !1610
%1730 = zext i16 %1729 to i32, !dbg !1610
br label %exit580, !dbg !1610
next_def587: ; preds = %next_def584
%1731 = icmp eq i32 161, %1680, !dbg !1610
br i1 %1731, label %current_def588, label %next_def589, !dbg !1610
current_def588: ; preds = %next_def587
%1732 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1733 = bitcast [1 x i64]* %1732 to i32*, !dbg !1610
%1734 = load i32, i32* %1733, !dbg !1610
br label %exit580, !dbg !1610
next_def589: ; preds = %next_def587
%1735 = icmp eq i32 163, %1680, !dbg !1610
br i1 %1735, label %current_def590, label %next_def591, !dbg !1610
current_def590: ; preds = %next_def589
%1736 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1737 = bitcast [1 x i64]* %1736 to i64*, !dbg !1610
%1738 = load i64, i64* %1737, !dbg !1610
%1739 = trunc i64 %1738 to i32, !dbg !1610
br label %exit580, !dbg !1610
next_def591: ; preds = %next_def589
%1740 = icmp eq i32 157, %1680, !dbg !1610
br i1 %1740, label %current_def592, label %next_def593, !dbg !1610
current_def592: ; preds = %next_def591
%1741 = getelementptr inbounds %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)", %"(Int32 | Int64 | String | UInt16 | UInt32 | UInt64 | UInt8)"* %1678, i32 0, i32 1, !dbg !1610
%1742 = bitcast [1 x i64]* %1741 to i8*, !dbg !1610
%1743 = load i8, i8* %1742, !dbg !1610
%1744 = zext i8 %1743 to i32, !dbg !1610
br label %exit580, !dbg !1610
next_def593: ; preds = %next_def591
unreachable, !dbg !1610
exit594: ; preds = %else563, %exit580
%1745 = phi %"(UInt64 | Nil)"* [ %147, %exit580 ], [ %148, %else563 ], !dbg !1610
br label %exit561, !dbg !1610
exit595: ; preds = %else530, %exit561
%1746 = phi %"(UInt64 | Nil)"* [ %1669, %exit561 ], [ %149, %else530 ], !dbg !1610
br label %exit528, !dbg !1610
then596: ; preds = %exit603
%1747 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %low_pc189, i32 0, i32 1, !dbg !1610
%1748 = bitcast [1 x i64]* %1747 to i64*, !dbg !1610
%1749 = load i64, i64* %1748, !dbg !1610
%1750 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %high_pc188, i32 0, i32 1, !dbg !1610
%1751 = bitcast [1 x i64]* %1750 to i64*, !dbg !1610
%1752 = load i64, i64* %1751, !dbg !1610
%1753 = load %String*, %String** %name190, !dbg !1610
store i64 %1749, i64* %name185, !dbg !1610
store i64 %1752, i64* %low_pc, !dbg !1610
store %String* %1753, %String** %high_pc, !dbg !1610
%1754 = load %"Array(Tuple(UInt64, UInt64, String))"*, %"Array(Tuple(UInt64, UInt64, String))"** %names, !dbg !1610
%1755 = load i64, i64* %name185, !dbg !1610
%1756 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %152, i32 0, i32 0, !dbg !1610
store i64 %1755, i64* %1756, !dbg !1610
%1757 = load i64, i64* %low_pc, !dbg !1610
%1758 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %152, i32 0, i32 1, !dbg !1610
store i64 %1757, i64* %1758, !dbg !1610
%1759 = load %String*, %String** %high_pc, !dbg !1610
%1760 = getelementptr inbounds %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %152, i32 0, i32 2, !dbg !1610
store %String* %1759, %String** %1760, !dbg !1610
%1761 = load %"Tuple(UInt64, UInt64, String)", %"Tuple(UInt64, UInt64, String)"* %152, !dbg !1610
%1762 = invoke %"Array(Tuple(UInt64, UInt64, String))"* @"*Array(Tuple(UInt64, UInt64, String))@Array(T)#<<<Tuple(UInt64, UInt64, String)>:Array(Tuple(UInt64, UInt64, String))"(%"Array(Tuple(UInt64, UInt64, String))"* %1754, %"Tuple(UInt64, UInt64, String)" %1761)
to label %invoke_out604 unwind label %rescue131, !dbg !1610
else597: ; preds = %exit603
br label %exit605, !dbg !1610
then598: ; preds = %exit602
%1763 = load %String*, %String** %name190, !dbg !1610
%1764 = icmp eq %String* %1763, null, !dbg !1610
%1765 = select i1 %1764, i32 0, i32 1, !dbg !1610
%1766 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %151, i32 0, i32 0, !dbg !1610
store i32 %1765, i32* %1766, !dbg !1610
%1767 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %151, i32 0, i32 1, !dbg !1610
%1768 = bitcast [1 x i64]* %1767 to %String**, !dbg !1610
store %String* %1763, %String** %1768, !dbg !1610
br label %exit603, !dbg !1610
else599: ; preds = %exit602
%1769 = bitcast %"(UInt64 | Nil)"* %__temp_238 to %"(String | UInt64 | Nil)"*, !dbg !1610
br label %exit603, !dbg !1610
then600: ; preds = %exit424
br label %exit602, !dbg !1610
else601: ; preds = %exit424
%1770 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %150, i32 0, i32 0, !dbg !1610
store i32 0, i32* %1770, !dbg !1610
%1771 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %150, i32 0, i32 1, !dbg !1610
store [1 x i64] zeroinitializer, [1 x i64]* %1771, !dbg !1610
br label %exit602, !dbg !1610
exit602: ; preds = %else601, %then600
%1772 = phi %"(UInt64 | Nil)"* [ %high_pc188, %then600 ], [ %150, %else601 ], !dbg !1610
%1773 = load %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1772, !dbg !1610
store %"(UInt64 | Nil)" %1773, %"(UInt64 | Nil)"* %__temp_238, !dbg !1610
%1774 = getelementptr inbounds %"(UInt64 | Nil)", %"(UInt64 | Nil)"* %1772, i32 0, i32 0, !dbg !1610
%1775 = load i32, i32* %1774, !dbg !1610
%1776 = icmp eq i32 %1775, 0, !dbg !1610
%1777 = xor i1 %1776, true, !dbg !1610
%1778 = and i1 true, %1777, !dbg !1610
br i1 %1778, label %then598, label %else599, !dbg !1610
exit603: ; preds = %else599, %then598
%1779 = phi %"(String | UInt64 | Nil)"* [ %151, %then598 ], [ %1769, %else599 ], !dbg !1610
%1780 = getelementptr inbounds %"(String | UInt64 | Nil)", %"(String | UInt64 | Nil)"* %1779, i32 0, i32 0, !dbg !1610
%1781 = load i32, i32* %1780, !dbg !1610
%1782 = icmp eq i32 %1781, 0, !dbg !1610
%1783 = xor i1 %1782, true, !dbg !1610
%1784 = and i1 true, %1783, !dbg !1610
br i1 %1784, label %then596, label %else597, !dbg !1610
invoke_out604: ; preds = %then596
br label %exit605, !dbg !1610
exit605: ; preds = %else597, %invoke_out604
%1785 = phi %"Array(Tuple(UInt64, UInt64, String))"* [ %1762, %invoke_out604 ], [ null, %else597 ], !dbg !1610
br label %exit415, !dbg !1610
exit606: ; preds = %exit135
%1786 = phi %"Array(Tuple(UInt64, UInt64, String))"* [ %504, %exit135 ], !dbg !1640
%1787 = load i64, i64* %original_pos129, !dbg !1640
%1788 = invoke i32* @"*IO::FileDescriptor+@IO::FileDescriptor#seek<Int64>:IO::FileDescriptor+"(i32* %446, i64 %1787)
to label %invoke_out609 unwind label %rescue, !dbg !1621
invoke_out607: ; preds = %rescue131
%1789 = bitcast i8* %486 to %"struct.LibUnwind::Exception"*, !dbg !1621
invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1789)
to label %invoke_out608 unwind label %rescue, !dbg !1640
invoke_out608: ; preds = %invoke_out607
unreachable, !dbg !1640
invoke_out609: ; preds = %exit606
br label %exit610, !dbg !1621
exit610: ; preds = %else109, %invoke_out609
%1790 = phi %"Array(Tuple(UInt64, UInt64, String))"* [ %1786, %invoke_out609 ], [ null, %else109 ], !dbg !1621
br label %exit611, !dbg !1621
exit611: ; preds = %exit610
%1791 = phi %"Array(Tuple(UInt64, UInt64, String))"* [ %1790, %exit610 ], !dbg !1630
%1792 = load %File*, %File** %file1, !dbg !1630
call void @"*File@IO::Buffered#close:Nil"(%File* %1792), !dbg !1631
ret %"Array(Tuple(UInt64, UInt64, String))"* %1791, !dbg !1631
}
define internal %String** @"~PROGRAM_NAME:read"() {
entry:
%0 = load i1, i1* @"PROGRAM_NAME:init", !dbg !1610
br i1 %0, label %initialized, label %not_initialized, !dbg !1610
initialized: ; preds = %not_initialized, %entry
ret %String** @PROGRAM_NAME
not_initialized: ; preds = %entry
store i1 true, i1* @"PROGRAM_NAME:init", !dbg !1610
call void @"~PROGRAM_NAME:init"()
br label %initialized
}
define internal void @"~PROGRAM_NAME:init"() {
entry:
%0 = load i8**, i8*** @ARGV_UNSAFE, !dbg !1610
%1 = load i8*, i8** %0, !dbg !1610
%2 = call %String* @"*String::new<Pointer(UInt8)>:String"(i8* %1)
store %String* %2, %String** @PROGRAM_NAME
ret void
}
define internal i16* @"~File::DEFAULT_CREATE_PERMISSIONS:read"() {
entry:
%0 = load i1, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !1611
br i1 %0, label %initialized, label %not_initialized, !dbg !1611
initialized: ; preds = %not_initialized, %entry
ret i16* @"File::DEFAULT_CREATE_PERMISSIONS", !dbg !1611
not_initialized: ; preds = %entry
store i1 true, i1* @"File::DEFAULT_CREATE_PERMISSIONS:init", !dbg !1611
call void @"~File::DEFAULT_CREATE_PERMISSIONS:init"(), !dbg !1611
br label %initialized, !dbg !1611
}
; Function Attrs: uwtable
define internal %File* @"*File::new<String, String, File::Permissions, Nil, Nil>:File"(%String* %filename, %String* %mode, i16 %perm, %Nil %encoding, %Nil %invalid) #0 !dbg !1650 {
alloca:
%fd = alloca i32, !dbg !1652
%filename1 = alloca %String*, !dbg !1652
br label %entry
entry: ; preds = %alloca
store %String* %filename, %String** %filename1, !dbg !1652
%0 = load %String*, %String** %filename1, !dbg !1652
store %String* %0, %String** %filename1, !dbg !1653
%1 = load %String*, %String** %filename1, !dbg !1653
%2 = call i32 @"*Crystal::System::File::open<String, String, File::Permissions>:Int32"(%String* %1, %String* %mode, i16 %perm), !dbg !1654
store i32 %2, i32* %fd, !dbg !1655
%3 = load %String*, %String** %filename1, !dbg !1655
%4 = load i32, i32* %fd, !dbg !1655
%5 = call %File* @"*File::new:blocking:encoding:invalid<String, Int32, Bool, Nil, Nil>:File"(%String* %3, i32 %4, i1 true, %Nil zeroinitializer, %Nil zeroinitializer), !dbg !1656
ret %File* %5, !dbg !1656
}
; Function Attrs: uwtable
define internal i32 @"*Crystal::System::File::open<String, String, File::Permissions>:Int32"(%String* %filename, %String* %mode, i16 %perm) #0 !dbg !1657 {
alloca:
%oflag = alloca i32, !dbg !1659
%fd = alloca i32, !dbg !1659
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*Crystal::System::File::open_flag<String>:Int32"(%String* %mode), !dbg !1660
%1 = or i32 %0, 524288, !dbg !1660
store i32 %1, i32* %oflag, !dbg !1661
%2 = call %String* @"*String#check_no_null_byte:String"(%String* %filename), !dbg !1662
%3 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %2), !dbg !1662
%4 = load i32, i32* %oflag, !dbg !1662
%5 = call i32 (i8*, i32, ...) @open(i8* %3, i32 %4, i16 %perm), !dbg !1663
store i32 %5, i32* %fd, !dbg !1664
%6 = load i32, i32* %fd, !dbg !1665
%7 = icmp slt i32 %6, 0, !dbg !1665
br i1 %7, label %then, label %else, !dbg !1665
then: ; preds = %entry
%8 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1666
%9 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %8, %String* bitcast ({ i32, i32, i32, [21 x i8] }* @"'Error opening file ...'" to %String*)), !dbg !1666
%10 = call %String* @"*String#inspect_unquoted:String"(%String* %filename), !dbg !1667
%11 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %9, %String* %10), !dbg !1666
%12 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %11, %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'' with mode ''" to %String*)), !dbg !1666
%13 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %12, %String* %mode), !dbg !1666
%14 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %13, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1666
%15 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %14), !dbg !1666
%16 = call %Errno* @"*Errno::new<String>:Errno"(%String* %15), !dbg !1668
call void @"*raise<Errno>:NoReturn"(%Errno* %16), !dbg !1669
unreachable, !dbg !1669
else: ; preds = %entry
%17 = load i32, i32* %fd, !dbg !1669
ret i32 %17, !dbg !1669
}
; Function Attrs: uwtable
define internal i32 @"*Crystal::System::File::open_flag<String>:Int32"(%String* %mode) #0 !dbg !1670 {
alloca:
%m = alloca i32, !dbg !1672
%o = alloca i32, !dbg !1672
%__temp_68 = alloca i32, !dbg !1672
%__temp_77 = alloca i32, !dbg !1672
%__temp_78 = alloca i32, !dbg !1672
%oflag = alloca i32, !dbg !1672
br label %entry
entry: ; preds = %alloca
%0 = call i32 @"*String#size:Int32"(%String* %mode), !dbg !1673
%1 = icmp eq i32 %0, 0, !dbg !1673
br i1 %1, label %then, label %else, !dbg !1673
then: ; preds = %entry
call void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [28 x i8] }* @"'No file open mode s...'" to %String*)), !dbg !1674
unreachable, !dbg !1674
else: ; preds = %entry
store i32 0, i32* %m, !dbg !1675
store i32 0, i32* %o, !dbg !1676
%2 = call i32 @"*String#[]<Int32>:Char"(%String* %mode, i32 0), !dbg !1677
store i32 %2, i32* %__temp_68, !dbg !1677
%3 = load i32, i32* %__temp_68, !dbg !1678
%4 = call i1 @"*Char@Object#===<Char>:Bool"(i32 114, i32 %3), !dbg !1678
br i1 %4, label %then1, label %else2, !dbg !1678
then1: ; preds = %else
store i32 0, i32* %m, !dbg !1679
br label %exit, !dbg !1679
else2: ; preds = %else
%5 = load i32, i32* %__temp_68, !dbg !1680
%6 = call i1 @"*Char@Object#===<Char>:Bool"(i32 119, i32 %5), !dbg !1680
br i1 %6, label %then3, label %else4, !dbg !1680
exit: ; preds = %exit5, %then1
%7 = call i32 @"*String#size:Int32"(%String* %mode), !dbg !1681
store i32 %7, i32* %__temp_77, !dbg !1681
%8 = load i32, i32* %__temp_77, !dbg !1682
%9 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 1, i32 %8), !dbg !1682
br i1 %9, label %then9, label %else10, !dbg !1682
then3: ; preds = %else2
store i32 1, i32* %m, !dbg !1683
store i32 576, i32* %o, !dbg !1684
br label %exit5, !dbg !1684
else4: ; preds = %else2
%10 = load i32, i32* %__temp_68, !dbg !1685
%11 = call i1 @"*Char@Object#===<Char>:Bool"(i32 97, i32 %10), !dbg !1685
br i1 %11, label %then6, label %else7, !dbg !1685
exit5: ; preds = %exit8, %then3
br label %exit, !dbg !1686
then6: ; preds = %else4
store i32 1, i32* %m, !dbg !1687
store i32 1088, i32* %o, !dbg !1688
br label %exit8, !dbg !1688
else7: ; preds = %else4
%12 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1689
%13 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %12, %String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Invalid file open m...'" to %String*)), !dbg !1689
%14 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %13, %String* %mode), !dbg !1689
%15 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %14, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1689
%16 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %15), !dbg !1689
call void @"*raise<String>:NoReturn"(%String* %16), !dbg !1686
unreachable, !dbg !1686
exit8: ; preds = %then6
br label %exit5, !dbg !1686
then9: ; preds = %exit
br label %exit11, !dbg !1682
else10: ; preds = %exit
%17 = load i32, i32* %__temp_77, !dbg !1690
%18 = call i1 @"*Int32@Object#===<Int32>:Bool"(i32 2, i32 %17), !dbg !1690
br i1 %18, label %then12, label %else13, !dbg !1690
exit11: ; preds = %exit20, %then9
%19 = load i32, i32* %m, !dbg !1691
%20 = load i32, i32* %o, !dbg !1691
%21 = or i32 %19, %20, !dbg !1691
store i32 %21, i32* %oflag, !dbg !1692
ret i32 %21, !dbg !1692
then12: ; preds = %else10
%22 = call i32 @"*String#[]<Int32>:Char"(%String* %mode, i32 1), !dbg !1693
store i32 %22, i32* %__temp_78, !dbg !1693
%23 = load i32, i32* %__temp_78, !dbg !1694
%24 = call i1 @"*Char@Object#===<Char>:Bool"(i32 43, i32 %23), !dbg !1694
br i1 %24, label %then14, label %else15, !dbg !1694
else13: ; preds = %else10
%25 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1695
%26 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %25, %String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Invalid file open m...'" to %String*)), !dbg !1695
%27 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %26, %String* %mode), !dbg !1695
%28 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %27, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1695
%29 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %28), !dbg !1695
call void @"*raise<String>:NoReturn"(%String* %29), !dbg !1691
unreachable, !dbg !1691
then14: ; preds = %then12
store i32 2, i32* %m, !dbg !1696
br label %exit16, !dbg !1696
else15: ; preds = %then12
%30 = load i32, i32* %__temp_78, !dbg !1697
%31 = call i1 @"*Char@Object#===<Char>:Bool"(i32 98, i32 %30), !dbg !1697
br i1 %31, label %then17, label %else18, !dbg !1697
exit16: ; preds = %exit19, %then14
br label %exit20, !dbg !1698
then17: ; preds = %else15
br label %exit19, !dbg !1697
else18: ; preds = %else15
%32 = call %"String::Builder"* @"*String::Builder::new:String::Builder"(), !dbg !1699
%33 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %32, %String* bitcast ({ i32, i32, i32, [26 x i8] }* @"'Invalid file open m...'" to %String*)), !dbg !1699
%34 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %33, %String* %mode), !dbg !1699
%35 = call %"String::Builder"* @"*String::Builder@IO#<<<String>:String::Builder"(%"String::Builder"* %34, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*)), !dbg !1699
%36 = call %String* @"*String::Builder#to_s:String"(%"String::Builder"* %35), !dbg !1699
call void @"*raise<String>:NoReturn"(%String* %36), !dbg !1698
unreachable, !dbg !1698
exit19: ; preds = %then17
br label %exit16, !dbg !1698
exit20: ; preds = %exit16
br label %exit11, !dbg !1691
}
; Function Attrs: uwtable
define internal i32 @"*String#[]<Int32>:Char"(%String* %self, i32 %index) #0 !dbg !1700 {
alloca:
%index1 = alloca i32, !dbg !1701
%byte = alloca %"(UInt8 | Nil)", !dbg !1701
%byte_index = alloca %"(Int32 | Nil)", !dbg !1701
%reader = alloca %"Char::Reader", !dbg !1701
%0 = alloca %"(UInt8 | Nil)", !dbg !1702
%1 = alloca %"(Int32 | Nil)", !dbg !1703
%2 = alloca %"(Bool | Nil)", !dbg !1704
%3 = alloca %"(Bool | Nil)", !dbg !1704
%4 = alloca %"Char::Reader", !dbg !1705
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !1701
%5 = call i1 @"*String#ascii_only?:Bool"(%String* %self), !dbg !1706
br i1 %5, label %then, label %else, !dbg !1706
then: ; preds = %entry
%6 = load i32, i32* %index1, !dbg !1706
%7 = call %"(UInt8 | Nil)" @"*String#byte_at?<Int32>:(UInt8 | Nil)"(%String* %self, i32 %6), !dbg !1702
store %"(UInt8 | Nil)" %7, %"(UInt8 | Nil)"* %0, !dbg !1702
%8 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %0, !dbg !1707
store %"(UInt8 | Nil)" %8, %"(UInt8 | Nil)"* %byte, !dbg !1707
%9 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %byte, i32 0, i32 0, !dbg !1708
%10 = load i32, i32* %9, !dbg !1708
%11 = icmp eq i32 %10, 0, !dbg !1708
%12 = xor i1 %11, true, !dbg !1708
%13 = and i1 true, %12, !dbg !1708
br i1 %13, label %then2, label %else3, !dbg !1708
else: ; preds = %entry
%14 = load i32, i32* %index1, !dbg !1709
%15 = icmp slt i32 %14, 0, !dbg !1709
br i1 %15, label %then7, label %else8, !dbg !1709
then2: ; preds = %then
%16 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %byte, i32 0, i32 1, !dbg !1710
%17 = bitcast [1 x i64]* %16 to i8*, !dbg !1710
%18 = load i8, i8* %17, !dbg !1710
%19 = zext i8 %18 to i32, !dbg !1710
%20 = icmp slt i32 %19, 128, !dbg !1710
%21 = and i1 true, %20, !dbg !1710
br i1 %21, label %then4, label %else5, !dbg !1710
else3: ; preds = %then
%22 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1711
call void @"*raise<IndexError>:NoReturn"(%IndexError* %22), !dbg !1712
unreachable, !dbg !1712
then4: ; preds = %then2
%23 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %byte, i32 0, i32 1, !dbg !1710
%24 = bitcast [1 x i64]* %23 to i8*, !dbg !1710
%25 = load i8, i8* %24, !dbg !1710
%26 = zext i8 %25 to i32, !dbg !1710
br label %exit, !dbg !1710
else5: ; preds = %then2
br label %exit, !dbg !1710
exit: ; preds = %else5, %then4
%27 = phi i32 [ %26, %then4 ], [ 65533, %else5 ], !dbg !1710
br label %exit6, !dbg !1710
exit6: ; preds = %then10, %exit
%28 = phi i32 [ %27, %exit ], [ %46, %then10 ], !dbg !1712
ret i32 %28, !dbg !1712
then7: ; preds = %else
%29 = load i32, i32* %index1, !dbg !1709
%30 = call i32 @"*String#size:Int32"(%String* %self), !dbg !1713
%31 = add i32 %29, %30, !dbg !1713
store i32 %31, i32* %index1, !dbg !1709
br label %exit9, !dbg !1709
else8: ; preds = %else
br label %exit9, !dbg !1709
exit9: ; preds = %else8, %then7
%32 = load i32, i32* %index1, !dbg !1709
%33 = call %"(Int32 | Nil)" @"*String#char_index_to_byte_index<Int32>:(Int32 | Nil)"(%String* %self, i32 %32), !dbg !1703
store %"(Int32 | Nil)" %33, %"(Int32 | Nil)"* %1, !dbg !1703
%34 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, !dbg !1714
store %"(Int32 | Nil)" %34, %"(Int32 | Nil)"* %byte_index, !dbg !1714
%35 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %byte_index, i32 0, i32 0, !dbg !1704
%36 = load i32, i32* %35, !dbg !1704
%37 = icmp eq i32 %36, 0, !dbg !1704
%38 = xor i1 %37, true, !dbg !1704
%39 = and i1 true, %38, !dbg !1704
br i1 %39, label %then12, label %else13, !dbg !1704
then10: ; preds = %exit14
%40 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %byte_index, i32 0, i32 1, !dbg !1704
%41 = bitcast [1 x i64]* %40 to i32*, !dbg !1704
%42 = load i32, i32* %41, !dbg !1704
%43 = call %"Char::Reader" @"*Char::Reader::new:pos<String, Int32>:Char::Reader"(%String* %self, i32 %42), !dbg !1705
store %"Char::Reader" %43, %"Char::Reader"* %4, !dbg !1705
%44 = load %"Char::Reader", %"Char::Reader"* %4, !dbg !1715
store %"Char::Reader" %44, %"Char::Reader"* %reader, !dbg !1715
%45 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %reader, i32 0, i32 1, !dbg !1715
%46 = load i32, i32* %45, !dbg !1715
br label %exit6, !dbg !1715
else11: ; preds = %exit14
%47 = call %IndexError* @"*IndexError::new:IndexError"(), !dbg !1711
call void @"*raise<IndexError>:NoReturn"(%IndexError* %47), !dbg !1712
unreachable, !dbg !1712
then12: ; preds = %exit9
%48 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %byte_index, i32 0, i32 1, !dbg !1704
%49 = bitcast [1 x i64]* %48 to i32*, !dbg !1704
%50 = load i32, i32* %49, !dbg !1704
%51 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1704
%52 = load i32, i32* %51, !dbg !1704
%53 = icmp slt i32 %50, %52, !dbg !1704
%54 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %2, i32 0, i32 0, !dbg !1704
store i32 171, i32* %54, !dbg !1704
%55 = zext i1 %53 to i64, !dbg !1704
%56 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %2, i32 0, i32 1, !dbg !1704
%57 = bitcast [1 x i64]* %56 to i64*, !dbg !1704
store i64 %55, i64* %57, !dbg !1704
br label %exit14, !dbg !1704
else13: ; preds = %exit9
%58 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %3, i32 0, i32 0, !dbg !1704
store i32 0, i32* %58, !dbg !1704
%59 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %3, i32 0, i32 1, !dbg !1704
store [1 x i64] zeroinitializer, [1 x i64]* %59, !dbg !1704
br label %exit14, !dbg !1704
exit14: ; preds = %else13, %then12
%60 = phi %"(Bool | Nil)"* [ %2, %then12 ], [ %3, %else13 ], !dbg !1704
%61 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %60, i32 0, i32 0, !dbg !1704
%62 = load i32, i32* %61, !dbg !1704
%63 = icmp eq i32 %62, 0, !dbg !1704
%64 = xor i1 %63, true, !dbg !1704
%65 = and i1 true, %64, !dbg !1704
%66 = getelementptr inbounds %"(Bool | Nil)", %"(Bool | Nil)"* %60, i32 0, i32 1, !dbg !1704
%67 = bitcast [1 x i64]* %66 to i1*, !dbg !1704
%68 = load i1, i1* %67, !dbg !1704
%69 = icmp eq i32 %62, 171, !dbg !1704
%70 = xor i1 %68, true, !dbg !1704
%71 = and i1 %69, %70, !dbg !1704
%72 = xor i1 %71, true, !dbg !1704
%73 = and i1 %65, %72, !dbg !1704
br i1 %73, label %then10, label %else11, !dbg !1704
}
; Function Attrs: uwtable
define internal %"(UInt8 | Nil)" @"*String#byte_at?<Int32>:(UInt8 | Nil)"(%String* %self, i32 %index) #0 !dbg !1716 {
alloca:
%index1 = alloca i32, !dbg !1717
%__temp_69 = alloca i1, !dbg !1717
%0 = alloca %"(UInt8 | Nil)", !dbg !1718
%1 = alloca %"(UInt8 | Nil)", !dbg !1718
br label %entry
entry: ; preds = %alloca
store i32 %index, i32* %index1, !dbg !1717
%2 = load i32, i32* %index1, !dbg !1719
%3 = icmp slt i32 %2, 0, !dbg !1719
br i1 %3, label %then, label %else, !dbg !1719
then: ; preds = %entry
%4 = load i32, i32* %index1, !dbg !1719
%5 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1719
%6 = load i32, i32* %5, !dbg !1719
%7 = add i32 %4, %6, !dbg !1719
store i32 %7, i32* %index1, !dbg !1719
br label %exit, !dbg !1719
else: ; preds = %entry
br label %exit, !dbg !1719
exit: ; preds = %else, %then
%8 = load i32, i32* %index1, !dbg !1720
%9 = icmp sle i32 0, %8, !dbg !1720
store i1 %9, i1* %__temp_69, !dbg !1720
br i1 %9, label %then4, label %else5, !dbg !1720
then2: ; preds = %exit6
%10 = call i8* @"*String#to_unsafe:Pointer(UInt8)"(%String* %self), !dbg !1718
%11 = load i32, i32* %index1, !dbg !1718
%12 = call i8 @"*Pointer(UInt8)@Pointer(T)#[]<Int32>:UInt8"(i8* %10, i32 %11), !dbg !1718
%13 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %0, i32 0, i32 0, !dbg !1718
store i32 157, i32* %13, !dbg !1718
%14 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %0, i32 0, i32 1, !dbg !1718
%15 = bitcast [1 x i64]* %14 to i8*, !dbg !1718
store i8 %12, i8* %15, !dbg !1718
br label %exit7, !dbg !1718
else3: ; preds = %exit6
%16 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %1, i32 0, i32 0, !dbg !1718
store i32 0, i32* %16, !dbg !1718
%17 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %1, i32 0, i32 1, !dbg !1718
store [1 x i64] zeroinitializer, [1 x i64]* %17, !dbg !1718
br label %exit7, !dbg !1718
then4: ; preds = %exit
%18 = load i32, i32* %index1, !dbg !1720
%19 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1720
%20 = load i32, i32* %19, !dbg !1720
%21 = icmp slt i32 %18, %20, !dbg !1720
br label %exit6, !dbg !1720
else5: ; preds = %exit
%22 = load i1, i1* %__temp_69, !dbg !1720
br label %exit6, !dbg !1720
exit6: ; preds = %else5, %then4
%23 = phi i1 [ %21, %then4 ], [ %22, %else5 ], !dbg !1720
br i1 %23, label %then2, label %else3, !dbg !1720
exit7: ; preds = %else3, %then2
%24 = phi %"(UInt8 | Nil)"* [ %0, %then2 ], [ %1, %else3 ], !dbg !1718
%25 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %24, !dbg !1718
ret %"(UInt8 | Nil)" %25, !dbg !1718
}
; Function Attrs: uwtable
define internal %"(Int32 | Nil)" @"*String#char_index_to_byte_index<Int32>:(Int32 | Nil)"(%String* %self, i32 %index) #0 !dbg !1721 {
alloca:
%__temp_70 = alloca i1, !dbg !1722
%size = alloca i32, !dbg !1722
%0 = alloca %"(Int32 | Nil)", !dbg !1723
%1 = alloca %"(Int32 | Nil)", !dbg !1723
%byte_index = alloca i32, !dbg !1724
%char_index = alloca i32, !dbg !1724
%byte_index6 = alloca i32, !dbg !1724
%char_index7 = alloca i32, !dbg !1724
%2 = alloca %"(Int32 | Nil)", !dbg !1725
%3 = alloca %"(Int32 | Nil)", !dbg !1726
%4 = alloca %"(Int32 | Nil)", !dbg !1726
br label %entry
entry: ; preds = %alloca
%5 = call i1 @"*String#ascii_only?:Bool"(%String* %self), !dbg !1727
br i1 %5, label %then, label %else, !dbg !1727
then: ; preds = %entry
%6 = icmp sle i32 0, %index, !dbg !1723
store i1 %6, i1* %__temp_70, !dbg !1723
br i1 %6, label %then3, label %else4, !dbg !1723
else: ; preds = %entry
store i32 0, i32* %byte_index6, !dbg !1728
store i32 0, i32* %char_index7, !dbg !1729
br label %while, !dbg !1729
then1: ; preds = %exit
%7 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 0, !dbg !1723
store i32 160, i32* %7, !dbg !1723
%8 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %0, i32 0, i32 1, !dbg !1723
%9 = bitcast [1 x i64]* %8 to i32*, !dbg !1723
store i32 %index, i32* %9, !dbg !1723
br label %exit5, !dbg !1723
else2: ; preds = %exit
%10 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 0, !dbg !1723
store i32 0, i32* %10, !dbg !1723
%11 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %1, i32 0, i32 1, !dbg !1723
store [1 x i64] zeroinitializer, [1 x i64]* %11, !dbg !1723
br label %exit5, !dbg !1723
then3: ; preds = %then
%12 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1723
%13 = load i32, i32* %12, !dbg !1723
%14 = icmp sle i32 %index, %13, !dbg !1723
br label %exit, !dbg !1723
else4: ; preds = %then
%15 = load i1, i1* %__temp_70, !dbg !1723
br label %exit, !dbg !1723
exit: ; preds = %else4, %then3
%16 = phi i1 [ %14, %then3 ], [ %15, %else4 ], !dbg !1723
br i1 %16, label %then1, label %else2, !dbg !1723
exit5: ; preds = %else2, %then1
%17 = phi %"(Int32 | Nil)"* [ %0, %then1 ], [ %1, %else2 ], !dbg !1723
%18 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %17, !dbg !1723
ret %"(Int32 | Nil)" %18, !dbg !1723
while: ; preds = %else10, %else
%19 = load i32, i32* %byte_index6, !dbg !1730
%20 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1730
%21 = load i32, i32* %20, !dbg !1730
%22 = icmp slt i32 %19, %21, !dbg !1730
br i1 %22, label %body, label %exit8, !dbg !1730
body: ; preds = %while
%23 = load i32, i32* %byte_index6, !dbg !1730
%24 = load i32, i32* %char_index7, !dbg !1730
store i32 %23, i32* %byte_index, !dbg !1730
store i32 %24, i32* %char_index, !dbg !1730
%25 = load i32, i32* %char_index, !dbg !1725
%26 = icmp eq i32 %index, %25, !dbg !1725
br i1 %26, label %then9, label %else10, !dbg !1725
exit8: ; preds = %while
%27 = load i32, i32* %char_index7, !dbg !1731
store i32 %27, i32* %size, !dbg !1732
%28 = load i32, i32* %size, !dbg !1726
%29 = icmp eq i32 %index, %28, !dbg !1726
br i1 %29, label %then11, label %else12, !dbg !1726
then9: ; preds = %body
%30 = load i32, i32* %byte_index, !dbg !1725
%31 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 0, !dbg !1725
store i32 160, i32* %31, !dbg !1725
%32 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, i32 0, i32 1, !dbg !1725
%33 = bitcast [1 x i64]* %32 to i32*, !dbg !1725
store i32 %30, i32* %33, !dbg !1725
%34 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %2, !dbg !1725
ret %"(Int32 | Nil)" %34, !dbg !1725
else10: ; preds = %body
%35 = load i32, i32* %byte_index6, !dbg !1725
%36 = load i32, i32* %byte_index6, !dbg !1725
%37 = call i32 @"*String#char_bytesize_at<Int32>:Int32"(%String* %self, i32 %36), !dbg !1733
%38 = add i32 %35, %37, !dbg !1733
store i32 %38, i32* %byte_index6, !dbg !1734
%39 = load i32, i32* %char_index7, !dbg !1734
%40 = add i32 %39, 1, !dbg !1734
store i32 %40, i32* %char_index7, !dbg !1731
br label %while, !dbg !1731
then11: ; preds = %exit8
%41 = getelementptr inbounds %String, %String* %self, i32 0, i32 1, !dbg !1726
%42 = load i32, i32* %41, !dbg !1726
%43 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %3, i32 0, i32 0, !dbg !1726
store i32 160, i32* %43, !dbg !1726
%44 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %3, i32 0, i32 1, !dbg !1726
%45 = bitcast [1 x i64]* %44 to i32*, !dbg !1726
store i32 %42, i32* %45, !dbg !1726
%46 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %3, !dbg !1726
ret %"(Int32 | Nil)" %46, !dbg !1726
else12: ; preds = %exit8
%47 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %4, i32 0, i32 0, !dbg !1726
store i32 0, i32* %47, !dbg !1726
%48 = getelementptr inbounds %"(Int32 | Nil)", %"(Int32 | Nil)"* %4, i32 0, i32 1, !dbg !1726
store [1 x i64] zeroinitializer, [1 x i64]* %48, !dbg !1726
%49 = load %"(Int32 | Nil)", %"(Int32 | Nil)"* %4, !dbg !1726
ret %"(Int32 | Nil)" %49, !dbg !1726
}
; Function Attrs: uwtable
define internal %"Char::Reader" @"*Char::Reader::new:pos<String, Int32>:Char::Reader"(%String* %__arg0, i32 %__temp_71) #0 !dbg !1735 {
alloca:
%_ = alloca %"Char::Reader", !dbg !1737
%0 = alloca %"Char::Reader", !dbg !1737
br label %entry
entry: ; preds = %alloca
%1 = bitcast %"Char::Reader"* %0 to i8*, !dbg !1737
call void @llvm.memset.p0i8.i32(i8* %1, i8 0, i32 ptrtoint (%"Char::Reader"* getelementptr (%"Char::Reader", %"Char::Reader"* null, i32 1) to i32), i32 4, i1 false), !dbg !1737
%2 = load %"Char::Reader", %"Char::Reader"* %0, !dbg !1737
store %"Char::Reader" %2, %"Char::Reader"* %_, !dbg !1737
%3 = call i32 @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* %_, %String* %__arg0, i32 %__temp_71), !dbg !1737
%4 = load %"Char::Reader", %"Char::Reader"* %_, !dbg !1737
ret %"Char::Reader" %4, !dbg !1737
}
; Function Attrs: uwtable
define internal i32 @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* %self, %String* %string, i32 %pos) #0 !dbg !1738 {
entry:
%0 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1739
store %String* %string, %String** %0, !dbg !1739
%1 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1740
store i32 %pos, i32* %1, !dbg !1740
%2 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1741
store i32 0, i32* %2, !dbg !1741
%3 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1742
store i32 0, i32* %3, !dbg !1742
%4 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1743
store i1 false, i1* %4, !dbg !1743
%5 = call i32 @"*Char::Reader#decode_current_char:Char"(%"Char::Reader"* %self), !dbg !1744
ret i32 %5, !dbg !1744
}
; Function Attrs: alwaysinline uwtable
define internal i32 @"*Char::Reader#decode_current_char:Char"(%"Char::Reader"* %self) #3 !dbg !1745 {
alloca:
%code_point = alloca %"(Int32 | UInt32)", !dbg !1746
%width = alloca i32, !dbg !1746
%error = alloca %"(UInt8 | Nil)", !dbg !1746
%pos = alloca i32, !dbg !1746
%__temp_72 = alloca %"(UInt32 | Nil)", !dbg !1746
%first = alloca i32, !dbg !1746
%second = alloca %"(UInt32 | Nil)", !dbg !1746
%third = alloca %"(UInt32 | Nil)", !dbg !1746
%__temp_73 = alloca i1, !dbg !1746
%__temp_74 = alloca i1, !dbg !1746
%__temp_75 = alloca i1, !dbg !1746
%__temp_76 = alloca i1, !dbg !1746
%fourth = alloca %"(UInt32 | Nil)", !dbg !1746
%0 = alloca %"(UInt32 | Nil)", !dbg !1747
%1 = alloca %"(UInt32 | Nil)", !dbg !1748
%2 = alloca %"(UInt32 | Nil)", !dbg !1749
%3 = alloca %"(UInt32 | Nil)", !dbg !1750
br label %entry
entry: ; preds = %alloca
%4 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1751
%5 = load i32, i32* %4, !dbg !1751
store i32 %5, i32* %pos, !dbg !1746
%6 = load i32, i32* %pos, !dbg !1747
%7 = call %"(UInt32 | Nil)" @"*Char::Reader#byte_at?<Int32>:(UInt32 | Nil)"(%"Char::Reader"* %self, i32 %6), !dbg !1747
store %"(UInt32 | Nil)" %7, %"(UInt32 | Nil)"* %0, !dbg !1747
%8 = load %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %0, !dbg !1747
store %"(UInt32 | Nil)" %8, %"(UInt32 | Nil)"* %__temp_72, !dbg !1747
%9 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %0, i32 0, i32 0, !dbg !1747
%10 = load i32, i32* %9, !dbg !1747
%11 = icmp eq i32 %10, 0, !dbg !1747
%12 = xor i1 %11, true, !dbg !1747
%13 = and i1 true, %12, !dbg !1747
br i1 %13, label %then, label %else, !dbg !1747
then: ; preds = %entry
%14 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %__temp_72, i32 0, i32 1, !dbg !1747
%15 = bitcast [1 x i64]* %14 to i32*, !dbg !1747
%16 = load i32, i32* %15, !dbg !1747
br label %exit, !dbg !1747
else: ; preds = %entry
br label %exit, !dbg !1747
exit: ; preds = %else, %then
%17 = phi i32 [ %16, %then ], [ 0, %else ], !dbg !1747
store i32 %17, i32* %first, !dbg !1752
%18 = load i32, i32* %first, !dbg !1753
%19 = icmp ult i32 %18, 128, !dbg !1753
%20 = and i1 true, %19, !dbg !1753
br i1 %20, label %then1, label %else2, !dbg !1753
then1: ; preds = %exit
%21 = load i32, i32* %first, !dbg !1753
%22 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1753
store i32 161, i32* %22, !dbg !1753
%23 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1753
%24 = bitcast [1 x i64]* %23 to i32*, !dbg !1753
store i32 %21, i32* %24, !dbg !1753
store i32 1, i32* %width, !dbg !1753
%25 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1753
store i32 0, i32* %25, !dbg !1753
%26 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1753
store [1 x i64] zeroinitializer, [1 x i64]* %26, !dbg !1753
%27 = load i32, i32* %width, !dbg !1753
%28 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %27, i32* %28, !dbg !1754
%29 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%30 = load i32, i32* %29, !dbg !1754
%31 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%32 = load %String*, %String** %31, !dbg !1754
%33 = getelementptr inbounds %String, %String* %32, i32 0, i32 1, !dbg !1754
%34 = load i32, i32* %33, !dbg !1754
%35 = icmp eq i32 %30, %34, !dbg !1754
%36 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %35, i1* %36, !dbg !1755
%37 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%38 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %38, %"(UInt8 | Nil)"* %37, !dbg !1756
%39 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%40 = load i32, i32* %39, !dbg !1756
%41 = icmp eq i32 160, %40, !dbg !1756
br i1 %41, label %current_def, label %next_def, !dbg !1756
else2: ; preds = %exit
%42 = load i32, i32* %first, !dbg !1757
%43 = icmp ult i32 %42, 194, !dbg !1757
%44 = and i1 true, %43, !dbg !1757
br i1 %44, label %then7, label %else8, !dbg !1757
current_def: ; preds = %then1
%45 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%46 = bitcast [1 x i64]* %45 to i32*, !dbg !1756
%47 = load i32, i32* %46, !dbg !1756
br label %exit3, !dbg !1756
next_def: ; preds = %then1
%48 = icmp eq i32 161, %40, !dbg !1756
br i1 %48, label %current_def4, label %next_def5, !dbg !1756
exit3: ; preds = %current_def4, %current_def
%49 = phi i32 [ %47, %current_def ], [ %53, %current_def4 ], !dbg !1756
%50 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %49, i32* %50, !dbg !1758
br label %exit6, !dbg !1758
current_def4: ; preds = %next_def
%51 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%52 = bitcast [1 x i64]* %51 to i32*, !dbg !1756
%53 = load i32, i32* %52, !dbg !1756
br label %exit3, !dbg !1756
next_def5: ; preds = %next_def
unreachable, !dbg !1756
exit6: ; preds = %exit111, %exit106, %exit99, %exit92, %exit85, %exit75, %exit65, %exit60, %exit50, %exit38, %exit28, %exit21, %exit11, %exit3
%54 = phi i32 [ %49, %exit3 ], [ %89, %exit11 ], [ %131, %exit21 ], [ %174, %exit28 ], [ %216, %exit38 ], [ %264, %exit50 ], [ %335, %exit60 ], [ %344, %exit65 ], [ %386, %exit75 ], [ %432, %exit85 ], [ %470, %exit92 ], [ %505, %exit99 ], [ %574, %exit106 ], [ %583, %exit111 ], !dbg !1758
ret i32 %54, !dbg !1758
then7: ; preds = %else2
%55 = load i32, i32* %first, !dbg !1757
%56 = trunc i32 %55 to i8, !dbg !1757
%57 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1757
store i32 160, i32* %57, !dbg !1757
%58 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1757
%59 = bitcast [1 x i64]* %58 to i32*, !dbg !1757
store i32 65533, i32* %59, !dbg !1757
store i32 1, i32* %width, !dbg !1757
%60 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1757
store i32 157, i32* %60, !dbg !1757
%61 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1757
%62 = bitcast [1 x i64]* %61 to i8*, !dbg !1757
store i8 %56, i8* %62, !dbg !1757
%63 = load i32, i32* %width, !dbg !1757
%64 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %63, i32* %64, !dbg !1754
%65 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%66 = load i32, i32* %65, !dbg !1754
%67 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%68 = load %String*, %String** %67, !dbg !1754
%69 = getelementptr inbounds %String, %String* %68, i32 0, i32 1, !dbg !1754
%70 = load i32, i32* %69, !dbg !1754
%71 = icmp eq i32 %66, %70, !dbg !1754
%72 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %71, i1* %72, !dbg !1755
%73 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%74 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %74, %"(UInt8 | Nil)"* %73, !dbg !1756
%75 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%76 = load i32, i32* %75, !dbg !1756
%77 = icmp eq i32 160, %76, !dbg !1756
br i1 %77, label %current_def9, label %next_def10, !dbg !1756
else8: ; preds = %else2
%78 = load i32, i32* %pos, !dbg !1758
%79 = add i32 %78, 1, !dbg !1758
%80 = call %"(UInt32 | Nil)" @"*Char::Reader#byte_at?<Int32>:(UInt32 | Nil)"(%"Char::Reader"* %self, i32 %79), !dbg !1748
store %"(UInt32 | Nil)" %80, %"(UInt32 | Nil)"* %1, !dbg !1748
%81 = load %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %1, !dbg !1759
store %"(UInt32 | Nil)" %81, %"(UInt32 | Nil)"* %second, !dbg !1759
%82 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 0, !dbg !1760
%83 = load i32, i32* %82, !dbg !1760
%84 = icmp eq i32 0, %83, !dbg !1760
br i1 %84, label %then16, label %else17, !dbg !1760
current_def9: ; preds = %then7
%85 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%86 = bitcast [1 x i64]* %85 to i32*, !dbg !1756
%87 = load i32, i32* %86, !dbg !1756
br label %exit11, !dbg !1756
next_def10: ; preds = %then7
%88 = icmp eq i32 161, %76, !dbg !1756
br i1 %88, label %current_def12, label %next_def13, !dbg !1756
exit11: ; preds = %current_def12, %current_def9
%89 = phi i32 [ %87, %current_def9 ], [ %93, %current_def12 ], !dbg !1756
%90 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %89, i32* %90, !dbg !1758
br label %exit6, !dbg !1758
current_def12: ; preds = %next_def10
%91 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%92 = bitcast [1 x i64]* %91 to i32*, !dbg !1756
%93 = load i32, i32* %92, !dbg !1756
br label %exit11, !dbg !1756
next_def13: ; preds = %next_def10
unreachable, !dbg !1756
then14: ; preds = %exit18
%94 = load i32, i32* %first, !dbg !1760
%95 = trunc i32 %94 to i8, !dbg !1760
%96 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1760
store i32 160, i32* %96, !dbg !1760
%97 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1760
%98 = bitcast [1 x i64]* %97 to i32*, !dbg !1760
store i32 65533, i32* %98, !dbg !1760
store i32 1, i32* %width, !dbg !1760
%99 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1760
store i32 157, i32* %99, !dbg !1760
%100 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1760
%101 = bitcast [1 x i64]* %100 to i8*, !dbg !1760
store i8 %95, i8* %101, !dbg !1760
%102 = load i32, i32* %width, !dbg !1760
%103 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %102, i32* %103, !dbg !1754
%104 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%105 = load i32, i32* %104, !dbg !1754
%106 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%107 = load %String*, %String** %106, !dbg !1754
%108 = getelementptr inbounds %String, %String* %107, i32 0, i32 1, !dbg !1754
%109 = load i32, i32* %108, !dbg !1754
%110 = icmp eq i32 %105, %109, !dbg !1754
%111 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %110, i1* %111, !dbg !1755
%112 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%113 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %113, %"(UInt8 | Nil)"* %112, !dbg !1756
%114 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%115 = load i32, i32* %114, !dbg !1756
%116 = icmp eq i32 160, %115, !dbg !1756
br i1 %116, label %current_def19, label %next_def20, !dbg !1756
else15: ; preds = %exit18
%117 = load i32, i32* %first, !dbg !1761
%118 = icmp ult i32 %117, 224, !dbg !1761
%119 = and i1 true, %118, !dbg !1761
br i1 %119, label %then24, label %else25, !dbg !1761
then16: ; preds = %else8
br label %exit18, !dbg !1760
else17: ; preds = %else8
%120 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1760
%121 = bitcast [1 x i64]* %120 to i32*, !dbg !1760
%122 = load i32, i32* %121, !dbg !1760
%123 = and i32 %122, 192, !dbg !1760
%124 = icmp ne i32 %123, 128, !dbg !1760
%125 = or i1 false, %124, !dbg !1760
br label %exit18, !dbg !1760
exit18: ; preds = %else17, %then16
%126 = phi i1 [ true, %then16 ], [ %125, %else17 ], !dbg !1760
br i1 %126, label %then14, label %else15, !dbg !1760
current_def19: ; preds = %then14
%127 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%128 = bitcast [1 x i64]* %127 to i32*, !dbg !1756
%129 = load i32, i32* %128, !dbg !1756
br label %exit21, !dbg !1756
next_def20: ; preds = %then14
%130 = icmp eq i32 161, %115, !dbg !1756
br i1 %130, label %current_def22, label %next_def23, !dbg !1756
exit21: ; preds = %current_def22, %current_def19
%131 = phi i32 [ %129, %current_def19 ], [ %135, %current_def22 ], !dbg !1756
%132 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %131, i32* %132, !dbg !1758
br label %exit6, !dbg !1758
current_def22: ; preds = %next_def20
%133 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%134 = bitcast [1 x i64]* %133 to i32*, !dbg !1756
%135 = load i32, i32* %134, !dbg !1756
br label %exit21, !dbg !1756
next_def23: ; preds = %next_def20
unreachable, !dbg !1756
then24: ; preds = %else15
%136 = load i32, i32* %first, !dbg !1761
%137 = call i32 @"*UInt32@Int#<<<Int32>:UInt32"(i32 %136, i32 6), !dbg !1762
%138 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1762
%139 = bitcast [1 x i64]* %138 to i32*, !dbg !1762
%140 = load i32, i32* %139, !dbg !1762
%141 = sub i32 %140, 12416, !dbg !1762
%142 = add i32 %137, %141, !dbg !1762
%143 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1762
store i32 161, i32* %143, !dbg !1762
%144 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1762
%145 = bitcast [1 x i64]* %144 to i32*, !dbg !1762
store i32 %142, i32* %145, !dbg !1762
store i32 2, i32* %width, !dbg !1762
%146 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1762
store i32 0, i32* %146, !dbg !1762
%147 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1762
store [1 x i64] zeroinitializer, [1 x i64]* %147, !dbg !1762
%148 = load i32, i32* %width, !dbg !1762
%149 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %148, i32* %149, !dbg !1754
%150 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%151 = load i32, i32* %150, !dbg !1754
%152 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%153 = load %String*, %String** %152, !dbg !1754
%154 = getelementptr inbounds %String, %String* %153, i32 0, i32 1, !dbg !1754
%155 = load i32, i32* %154, !dbg !1754
%156 = icmp eq i32 %151, %155, !dbg !1754
%157 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %156, i1* %157, !dbg !1755
%158 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%159 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %159, %"(UInt8 | Nil)"* %158, !dbg !1756
%160 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%161 = load i32, i32* %160, !dbg !1756
%162 = icmp eq i32 160, %161, !dbg !1756
br i1 %162, label %current_def26, label %next_def27, !dbg !1756
else25: ; preds = %else15
%163 = load i32, i32* %pos, !dbg !1758
%164 = add i32 %163, 2, !dbg !1758
%165 = call %"(UInt32 | Nil)" @"*Char::Reader#byte_at?<Int32>:(UInt32 | Nil)"(%"Char::Reader"* %self, i32 %164), !dbg !1749
store %"(UInt32 | Nil)" %165, %"(UInt32 | Nil)"* %2, !dbg !1749
%166 = load %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %2, !dbg !1763
store %"(UInt32 | Nil)" %166, %"(UInt32 | Nil)"* %third, !dbg !1763
%167 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %third, i32 0, i32 0, !dbg !1764
%168 = load i32, i32* %167, !dbg !1764
%169 = icmp eq i32 0, %168, !dbg !1764
br i1 %169, label %then33, label %else34, !dbg !1764
current_def26: ; preds = %then24
%170 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%171 = bitcast [1 x i64]* %170 to i32*, !dbg !1756
%172 = load i32, i32* %171, !dbg !1756
br label %exit28, !dbg !1756
next_def27: ; preds = %then24
%173 = icmp eq i32 161, %161, !dbg !1756
br i1 %173, label %current_def29, label %next_def30, !dbg !1756
exit28: ; preds = %current_def29, %current_def26
%174 = phi i32 [ %172, %current_def26 ], [ %178, %current_def29 ], !dbg !1756
%175 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %174, i32* %175, !dbg !1758
br label %exit6, !dbg !1758
current_def29: ; preds = %next_def27
%176 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%177 = bitcast [1 x i64]* %176 to i32*, !dbg !1756
%178 = load i32, i32* %177, !dbg !1756
br label %exit28, !dbg !1756
next_def30: ; preds = %next_def27
unreachable, !dbg !1756
then31: ; preds = %exit35
%179 = load i32, i32* %first, !dbg !1764
%180 = trunc i32 %179 to i8, !dbg !1764
%181 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1764
store i32 160, i32* %181, !dbg !1764
%182 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1764
%183 = bitcast [1 x i64]* %182 to i32*, !dbg !1764
store i32 65533, i32* %183, !dbg !1764
store i32 2, i32* %width, !dbg !1764
%184 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1764
store i32 157, i32* %184, !dbg !1764
%185 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1764
%186 = bitcast [1 x i64]* %185 to i8*, !dbg !1764
store i8 %180, i8* %186, !dbg !1764
%187 = load i32, i32* %width, !dbg !1764
%188 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %187, i32* %188, !dbg !1754
%189 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%190 = load i32, i32* %189, !dbg !1754
%191 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%192 = load %String*, %String** %191, !dbg !1754
%193 = getelementptr inbounds %String, %String* %192, i32 0, i32 1, !dbg !1754
%194 = load i32, i32* %193, !dbg !1754
%195 = icmp eq i32 %190, %194, !dbg !1754
%196 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %195, i1* %196, !dbg !1755
%197 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%198 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %198, %"(UInt8 | Nil)"* %197, !dbg !1756
%199 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%200 = load i32, i32* %199, !dbg !1756
%201 = icmp eq i32 160, %200, !dbg !1756
br i1 %201, label %current_def36, label %next_def37, !dbg !1756
else32: ; preds = %exit35
%202 = load i32, i32* %first, !dbg !1765
%203 = icmp ult i32 %202, 240, !dbg !1765
%204 = and i1 true, %203, !dbg !1765
br i1 %204, label %then41, label %else42, !dbg !1765
then33: ; preds = %else25
br label %exit35, !dbg !1764
else34: ; preds = %else25
%205 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %third, i32 0, i32 1, !dbg !1764
%206 = bitcast [1 x i64]* %205 to i32*, !dbg !1764
%207 = load i32, i32* %206, !dbg !1764
%208 = and i32 %207, 192, !dbg !1764
%209 = icmp ne i32 %208, 128, !dbg !1764
%210 = or i1 false, %209, !dbg !1764
br label %exit35, !dbg !1764
exit35: ; preds = %else34, %then33
%211 = phi i1 [ true, %then33 ], [ %210, %else34 ], !dbg !1764
br i1 %211, label %then31, label %else32, !dbg !1764
current_def36: ; preds = %then31
%212 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%213 = bitcast [1 x i64]* %212 to i32*, !dbg !1756
%214 = load i32, i32* %213, !dbg !1756
br label %exit38, !dbg !1756
next_def37: ; preds = %then31
%215 = icmp eq i32 161, %200, !dbg !1756
br i1 %215, label %current_def39, label %next_def40, !dbg !1756
exit38: ; preds = %current_def39, %current_def36
%216 = phi i32 [ %214, %current_def36 ], [ %220, %current_def39 ], !dbg !1756
%217 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %216, i32* %217, !dbg !1758
br label %exit6, !dbg !1758
current_def39: ; preds = %next_def37
%218 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%219 = bitcast [1 x i64]* %218 to i32*, !dbg !1756
%220 = load i32, i32* %219, !dbg !1756
br label %exit38, !dbg !1756
next_def40: ; preds = %next_def37
unreachable, !dbg !1756
then41: ; preds = %else32
%221 = load i32, i32* %first, !dbg !1766
%222 = icmp eq i32 %221, 224, !dbg !1766
%223 = and i1 true, %222, !dbg !1766
store i1 %223, i1* %__temp_73, !dbg !1766
br i1 %223, label %then45, label %else46, !dbg !1766
else42: ; preds = %else32
%224 = load i32, i32* %first, !dbg !1767
%225 = icmp eq i32 %224, 240, !dbg !1767
%226 = and i1 true, %225, !dbg !1767
store i1 %226, i1* %__temp_75, !dbg !1767
br i1 %226, label %then70, label %else71, !dbg !1767
then43: ; preds = %exit47
%227 = load i32, i32* %first, !dbg !1766
%228 = trunc i32 %227 to i8, !dbg !1766
%229 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1766
store i32 160, i32* %229, !dbg !1766
%230 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1766
%231 = bitcast [1 x i64]* %230 to i32*, !dbg !1766
store i32 65533, i32* %231, !dbg !1766
store i32 3, i32* %width, !dbg !1766
%232 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1766
store i32 157, i32* %232, !dbg !1766
%233 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1766
%234 = bitcast [1 x i64]* %233 to i8*, !dbg !1766
store i8 %228, i8* %234, !dbg !1766
%235 = load i32, i32* %width, !dbg !1766
%236 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %235, i32* %236, !dbg !1754
%237 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%238 = load i32, i32* %237, !dbg !1754
%239 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%240 = load %String*, %String** %239, !dbg !1754
%241 = getelementptr inbounds %String, %String* %240, i32 0, i32 1, !dbg !1754
%242 = load i32, i32* %241, !dbg !1754
%243 = icmp eq i32 %238, %242, !dbg !1754
%244 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %243, i1* %244, !dbg !1755
%245 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%246 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %246, %"(UInt8 | Nil)"* %245, !dbg !1756
%247 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%248 = load i32, i32* %247, !dbg !1756
%249 = icmp eq i32 160, %248, !dbg !1756
br i1 %249, label %current_def48, label %next_def49, !dbg !1756
else44: ; preds = %exit47
%250 = load i32, i32* %first, !dbg !1768
%251 = icmp eq i32 %250, 237, !dbg !1768
%252 = and i1 true, %251, !dbg !1768
store i1 %252, i1* %__temp_74, !dbg !1768
br i1 %252, label %then55, label %else56, !dbg !1768
then45: ; preds = %then41
%253 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1766
%254 = bitcast [1 x i64]* %253 to i32*, !dbg !1766
%255 = load i32, i32* %254, !dbg !1766
%256 = icmp ult i32 %255, 160, !dbg !1766
%257 = and i1 true, %256, !dbg !1766
br label %exit47, !dbg !1766
else46: ; preds = %then41
%258 = load i1, i1* %__temp_73, !dbg !1766
br label %exit47, !dbg !1766
exit47: ; preds = %else46, %then45
%259 = phi i1 [ %257, %then45 ], [ %258, %else46 ], !dbg !1766
br i1 %259, label %then43, label %else44, !dbg !1766
current_def48: ; preds = %then43
%260 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%261 = bitcast [1 x i64]* %260 to i32*, !dbg !1756
%262 = load i32, i32* %261, !dbg !1756
br label %exit50, !dbg !1756
next_def49: ; preds = %then43
%263 = icmp eq i32 161, %248, !dbg !1756
br i1 %263, label %current_def51, label %next_def52, !dbg !1756
exit50: ; preds = %current_def51, %current_def48
%264 = phi i32 [ %262, %current_def48 ], [ %268, %current_def51 ], !dbg !1756
%265 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %264, i32* %265, !dbg !1758
br label %exit6, !dbg !1758
current_def51: ; preds = %next_def49
%266 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%267 = bitcast [1 x i64]* %266 to i32*, !dbg !1756
%268 = load i32, i32* %267, !dbg !1756
br label %exit50, !dbg !1756
next_def52: ; preds = %next_def49
unreachable, !dbg !1756
then53: ; preds = %exit57
%269 = load i32, i32* %first, !dbg !1768
%270 = trunc i32 %269 to i8, !dbg !1768
%271 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1768
store i32 160, i32* %271, !dbg !1768
%272 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1768
%273 = bitcast [1 x i64]* %272 to i32*, !dbg !1768
store i32 65533, i32* %273, !dbg !1768
store i32 3, i32* %width, !dbg !1768
%274 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1768
store i32 157, i32* %274, !dbg !1768
%275 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1768
%276 = bitcast [1 x i64]* %275 to i8*, !dbg !1768
store i8 %270, i8* %276, !dbg !1768
%277 = load i32, i32* %width, !dbg !1768
%278 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %277, i32* %278, !dbg !1754
%279 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%280 = load i32, i32* %279, !dbg !1754
%281 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%282 = load %String*, %String** %281, !dbg !1754
%283 = getelementptr inbounds %String, %String* %282, i32 0, i32 1, !dbg !1754
%284 = load i32, i32* %283, !dbg !1754
%285 = icmp eq i32 %280, %284, !dbg !1754
%286 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %285, i1* %286, !dbg !1755
%287 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%288 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %288, %"(UInt8 | Nil)"* %287, !dbg !1756
%289 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%290 = load i32, i32* %289, !dbg !1756
%291 = icmp eq i32 160, %290, !dbg !1756
br i1 %291, label %current_def58, label %next_def59, !dbg !1756
else54: ; preds = %exit57
%292 = load i32, i32* %first, !dbg !1758
%293 = call i32 @"*UInt32@Int#<<<Int32>:UInt32"(i32 %292, i32 12), !dbg !1769
%294 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1769
%295 = bitcast [1 x i64]* %294 to i32*, !dbg !1769
%296 = load i32, i32* %295, !dbg !1769
%297 = call i32 @"*UInt32@Int#<<<Int32>:UInt32"(i32 %296, i32 6), !dbg !1770
%298 = add i32 %293, %297, !dbg !1770
%299 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %third, i32 0, i32 1, !dbg !1770
%300 = bitcast [1 x i64]* %299 to i32*, !dbg !1770
%301 = load i32, i32* %300, !dbg !1770
%302 = sub i32 %301, 925824, !dbg !1770
%303 = add i32 %298, %302, !dbg !1770
%304 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1770
store i32 161, i32* %304, !dbg !1770
%305 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1770
%306 = bitcast [1 x i64]* %305 to i32*, !dbg !1770
store i32 %303, i32* %306, !dbg !1770
store i32 3, i32* %width, !dbg !1770
%307 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1770
store i32 0, i32* %307, !dbg !1770
%308 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1770
store [1 x i64] zeroinitializer, [1 x i64]* %308, !dbg !1770
%309 = load i32, i32* %width, !dbg !1770
%310 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %309, i32* %310, !dbg !1754
%311 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%312 = load i32, i32* %311, !dbg !1754
%313 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%314 = load %String*, %String** %313, !dbg !1754
%315 = getelementptr inbounds %String, %String* %314, i32 0, i32 1, !dbg !1754
%316 = load i32, i32* %315, !dbg !1754
%317 = icmp eq i32 %312, %316, !dbg !1754
%318 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %317, i1* %318, !dbg !1755
%319 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%320 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %320, %"(UInt8 | Nil)"* %319, !dbg !1756
%321 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%322 = load i32, i32* %321, !dbg !1756
%323 = icmp eq i32 160, %322, !dbg !1756
br i1 %323, label %current_def63, label %next_def64, !dbg !1756
then55: ; preds = %else44
%324 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1768
%325 = bitcast [1 x i64]* %324 to i32*, !dbg !1768
%326 = load i32, i32* %325, !dbg !1768
%327 = icmp uge i32 %326, 160, !dbg !1768
%328 = or i1 false, %327, !dbg !1768
br label %exit57, !dbg !1768
else56: ; preds = %else44
%329 = load i1, i1* %__temp_74, !dbg !1768
br label %exit57, !dbg !1768
exit57: ; preds = %else56, %then55
%330 = phi i1 [ %328, %then55 ], [ %329, %else56 ], !dbg !1768
br i1 %330, label %then53, label %else54, !dbg !1768
current_def58: ; preds = %then53
%331 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%332 = bitcast [1 x i64]* %331 to i32*, !dbg !1756
%333 = load i32, i32* %332, !dbg !1756
br label %exit60, !dbg !1756
next_def59: ; preds = %then53
%334 = icmp eq i32 161, %290, !dbg !1756
br i1 %334, label %current_def61, label %next_def62, !dbg !1756
exit60: ; preds = %current_def61, %current_def58
%335 = phi i32 [ %333, %current_def58 ], [ %339, %current_def61 ], !dbg !1756
%336 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %335, i32* %336, !dbg !1758
br label %exit6, !dbg !1758
current_def61: ; preds = %next_def59
%337 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%338 = bitcast [1 x i64]* %337 to i32*, !dbg !1756
%339 = load i32, i32* %338, !dbg !1756
br label %exit60, !dbg !1756
next_def62: ; preds = %next_def59
unreachable, !dbg !1756
current_def63: ; preds = %else54
%340 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%341 = bitcast [1 x i64]* %340 to i32*, !dbg !1756
%342 = load i32, i32* %341, !dbg !1756
br label %exit65, !dbg !1756
next_def64: ; preds = %else54
%343 = icmp eq i32 161, %322, !dbg !1756
br i1 %343, label %current_def66, label %next_def67, !dbg !1756
exit65: ; preds = %current_def66, %current_def63
%344 = phi i32 [ %342, %current_def63 ], [ %348, %current_def66 ], !dbg !1756
%345 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %344, i32* %345, !dbg !1758
br label %exit6, !dbg !1758
current_def66: ; preds = %next_def64
%346 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%347 = bitcast [1 x i64]* %346 to i32*, !dbg !1756
%348 = load i32, i32* %347, !dbg !1756
br label %exit65, !dbg !1756
next_def67: ; preds = %next_def64
unreachable, !dbg !1756
then68: ; preds = %exit72
%349 = load i32, i32* %first, !dbg !1767
%350 = trunc i32 %349 to i8, !dbg !1767
%351 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1767
store i32 160, i32* %351, !dbg !1767
%352 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1767
%353 = bitcast [1 x i64]* %352 to i32*, !dbg !1767
store i32 65533, i32* %353, !dbg !1767
store i32 3, i32* %width, !dbg !1767
%354 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1767
store i32 157, i32* %354, !dbg !1767
%355 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1767
%356 = bitcast [1 x i64]* %355 to i8*, !dbg !1767
store i8 %350, i8* %356, !dbg !1767
%357 = load i32, i32* %width, !dbg !1767
%358 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %357, i32* %358, !dbg !1754
%359 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%360 = load i32, i32* %359, !dbg !1754
%361 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%362 = load %String*, %String** %361, !dbg !1754
%363 = getelementptr inbounds %String, %String* %362, i32 0, i32 1, !dbg !1754
%364 = load i32, i32* %363, !dbg !1754
%365 = icmp eq i32 %360, %364, !dbg !1754
%366 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %365, i1* %366, !dbg !1755
%367 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%368 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %368, %"(UInt8 | Nil)"* %367, !dbg !1756
%369 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%370 = load i32, i32* %369, !dbg !1756
%371 = icmp eq i32 160, %370, !dbg !1756
br i1 %371, label %current_def73, label %next_def74, !dbg !1756
else69: ; preds = %exit72
%372 = load i32, i32* %first, !dbg !1771
%373 = icmp eq i32 %372, 244, !dbg !1771
%374 = and i1 true, %373, !dbg !1771
store i1 %374, i1* %__temp_76, !dbg !1771
br i1 %374, label %then80, label %else81, !dbg !1771
then70: ; preds = %else42
%375 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1767
%376 = bitcast [1 x i64]* %375 to i32*, !dbg !1767
%377 = load i32, i32* %376, !dbg !1767
%378 = icmp ult i32 %377, 144, !dbg !1767
%379 = and i1 true, %378, !dbg !1767
br label %exit72, !dbg !1767
else71: ; preds = %else42
%380 = load i1, i1* %__temp_75, !dbg !1767
br label %exit72, !dbg !1767
exit72: ; preds = %else71, %then70
%381 = phi i1 [ %379, %then70 ], [ %380, %else71 ], !dbg !1767
br i1 %381, label %then68, label %else69, !dbg !1767
current_def73: ; preds = %then68
%382 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%383 = bitcast [1 x i64]* %382 to i32*, !dbg !1756
%384 = load i32, i32* %383, !dbg !1756
br label %exit75, !dbg !1756
next_def74: ; preds = %then68
%385 = icmp eq i32 161, %370, !dbg !1756
br i1 %385, label %current_def76, label %next_def77, !dbg !1756
exit75: ; preds = %current_def76, %current_def73
%386 = phi i32 [ %384, %current_def73 ], [ %390, %current_def76 ], !dbg !1756
%387 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %386, i32* %387, !dbg !1758
br label %exit6, !dbg !1758
current_def76: ; preds = %next_def74
%388 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%389 = bitcast [1 x i64]* %388 to i32*, !dbg !1756
%390 = load i32, i32* %389, !dbg !1756
br label %exit75, !dbg !1756
next_def77: ; preds = %next_def74
unreachable, !dbg !1756
then78: ; preds = %exit82
%391 = load i32, i32* %first, !dbg !1771
%392 = trunc i32 %391 to i8, !dbg !1771
%393 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1771
store i32 160, i32* %393, !dbg !1771
%394 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1771
%395 = bitcast [1 x i64]* %394 to i32*, !dbg !1771
store i32 65533, i32* %395, !dbg !1771
store i32 3, i32* %width, !dbg !1771
%396 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1771
store i32 157, i32* %396, !dbg !1771
%397 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1771
%398 = bitcast [1 x i64]* %397 to i8*, !dbg !1771
store i8 %392, i8* %398, !dbg !1771
%399 = load i32, i32* %width, !dbg !1771
%400 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %399, i32* %400, !dbg !1754
%401 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%402 = load i32, i32* %401, !dbg !1754
%403 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%404 = load %String*, %String** %403, !dbg !1754
%405 = getelementptr inbounds %String, %String* %404, i32 0, i32 1, !dbg !1754
%406 = load i32, i32* %405, !dbg !1754
%407 = icmp eq i32 %402, %406, !dbg !1754
%408 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %407, i1* %408, !dbg !1755
%409 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1756
%410 = load %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, !dbg !1756
store %"(UInt8 | Nil)" %410, %"(UInt8 | Nil)"* %409, !dbg !1756
%411 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1756
%412 = load i32, i32* %411, !dbg !1756
%413 = icmp eq i32 160, %412, !dbg !1756
br i1 %413, label %current_def83, label %next_def84, !dbg !1756
else79: ; preds = %exit82
%414 = load i32, i32* %pos, !dbg !1758
%415 = add i32 %414, 3, !dbg !1758
%416 = call %"(UInt32 | Nil)" @"*Char::Reader#byte_at?<Int32>:(UInt32 | Nil)"(%"Char::Reader"* %self, i32 %415), !dbg !1750
store %"(UInt32 | Nil)" %416, %"(UInt32 | Nil)"* %3, !dbg !1750
%417 = load %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %3, !dbg !1772
store %"(UInt32 | Nil)" %417, %"(UInt32 | Nil)"* %fourth, !dbg !1772
%418 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %fourth, i32 0, i32 0, !dbg !1773
%419 = load i32, i32* %418, !dbg !1773
%420 = icmp eq i32 0, %419, !dbg !1773
br i1 %420, label %then88, label %else89, !dbg !1773
then80: ; preds = %else69
%421 = getelementptr inbounds %"(UInt32 | Nil)", %"(UInt32 | Nil)"* %second, i32 0, i32 1, !dbg !1771
%422 = bitcast [1 x i64]* %421 to i32*, !dbg !1771
%423 = load i32, i32* %422, !dbg !1771
%424 = icmp uge i32 %423, 144, !dbg !1771
%425 = or i1 false, %424, !dbg !1771
br label %exit82, !dbg !1771
else81: ; preds = %else69
%426 = load i1, i1* %__temp_76, !dbg !1771
br label %exit82, !dbg !1771
exit82: ; preds = %else81, %then80
%427 = phi i1 [ %425, %then80 ], [ %426, %else81 ], !dbg !1771
br i1 %427, label %then78, label %else79, !dbg !1771
current_def83: ; preds = %then78
%428 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%429 = bitcast [1 x i64]* %428 to i32*, !dbg !1756
%430 = load i32, i32* %429, !dbg !1756
br label %exit85, !dbg !1756
next_def84: ; preds = %then78
%431 = icmp eq i32 161, %412, !dbg !1756
br i1 %431, label %current_def86, label %next_def87, !dbg !1756
exit85: ; preds = %current_def86, %current_def83
%432 = phi i32 [ %430, %current_def83 ], [ %436, %current_def86 ], !dbg !1756
%433 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 1, !dbg !1758
store i32 %432, i32* %433, !dbg !1758
br label %exit6, !dbg !1758
current_def86: ; preds = %next_def84
%434 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1756
%435 = bitcast [1 x i64]* %434 to i32*, !dbg !1756
%436 = load i32, i32* %435, !dbg !1756
br label %exit85, !dbg !1756
next_def87: ; preds = %next_def84
unreachable, !dbg !1756
then88: ; preds = %else79
%437 = load i32, i32* %first, !dbg !1773
%438 = trunc i32 %437 to i8, !dbg !1773
%439 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 0, !dbg !1773
store i32 160, i32* %439, !dbg !1773
%440 = getelementptr inbounds %"(Int32 | UInt32)", %"(Int32 | UInt32)"* %code_point, i32 0, i32 1, !dbg !1773
%441 = bitcast [1 x i64]* %440 to i32*, !dbg !1773
store i32 65533, i32* %441, !dbg !1773
store i32 3, i32* %width, !dbg !1773
%442 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 0, !dbg !1773
store i32 157, i32* %442, !dbg !1773
%443 = getelementptr inbounds %"(UInt8 | Nil)", %"(UInt8 | Nil)"* %error, i32 0, i32 1, !dbg !1773
%444 = bitcast [1 x i64]* %443 to i8*, !dbg !1773
store i8 %438, i8* %444, !dbg !1773
%445 = load i32, i32* %width, !dbg !1773
%446 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 2, !dbg !1754
store i32 %445, i32* %446, !dbg !1754
%447 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 3, !dbg !1754
%448 = load i32, i32* %447, !dbg !1754
%449 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 0, !dbg !1754
%450 = load %String*, %String** %449, !dbg !1754
%451 = getelementptr inbounds %String, %String* %450, i32 0, i32 1, !dbg !1754
%452 = load i32, i32* %451, !dbg !1754
%453 = icmp eq i32 %448, %452, !dbg !1754
%454 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 5, !dbg !1755
store i1 %453, i1* %454, !dbg !1755
%455 = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %self, i32 0, i32 4, !dbg !1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment