Skip to content

Instantly share code, notes, and snippets.

@straight-shoota
Last active January 20, 2023 11:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save straight-shoota/fdb6d7c03d4668d02c19d7c2abc12b48 to your computer and use it in GitHub Desktop.
Save straight-shoota/fdb6d7c03d4668d02c19d7c2abc12b48 to your computer and use it in GitHub Desktop.
[Regression] Dwarf loader breaks socket IO in Crystal 1.7 (LLVM IR diff)
This file has been truncated, but you can view the full file.
diff --git 1/regression-io.no-debug.bad.ll 2/regression-io.no-debug.good.ll
index 6e89ec43b..6d5084431 100644
--- 1/regression-io.no-debug.bad.ll
+++ 2/regression-io.no-debug.good.ll
@@ -123,16 +123,14 @@ target triple = "x86_64-unknown-linux-gnu"
%"struct.LibC::Addrinfo" = type { i32, i32, i32, i32, i32, %"struct.LibC::Sockaddr"*, i8*, %"struct.LibC::Addrinfo"* }
%"struct.LibC::Sockaddr" = type { i16, [14 x i8] }
%"struct.LibC::StackT" = type { i8*, i32, i64 }
+%"Char::Reader" = type { %String*, i32, i32, i32, %"(UInt8 | Nil)", i1 }
+%"(UInt8 | Nil)" = type { i32, [1 x i64] }
%"struct.LibC::Sigaction" = type { %Nil (i32, %"struct.LibC::SiginfoT"*, i8*)*, %"struct.LibC::SigsetT", i32, i8* }
%"struct.LibC::SiginfoT" = type { i32, i32, i32, i32, i8*, [20 x i32] }
%"Socket::Addrinfo" = type { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" }
%"struct.LibC::SockaddrIn6" = type { i16, i16, i32, %"struct.LibC::In6Addr", i32 }
%"struct.LibC::In6Addr" = type { %"union.LibC::In6AddrIn6U" }
%"union.LibC::In6AddrIn6U" = type { [4 x i32] }
-%"Char::Reader" = type { %String*, i32, i32, i32, %"(UInt8 | Nil)", i1 }
-%"(UInt8 | Nil)" = type { i32, [1 x i64] }
-%"Crystal::OnceState" = type { i32, %"Array(Pointer(Bool))"* }
-%"Array(Pointer(Bool))" = type { i32, i32, i32, i32, i1** }
%"(Int32 | Nil)" = type { i32, [1 x i64] }
%ArgumentError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
%"(Exception::CallStack | Nil)" = type { i32, [2 x i64] }
@@ -148,14 +146,14 @@ target triple = "x86_64-unknown-linux-gnu"
%"(Errno | WasiError | WinError | Nil)" = type { i32, [1 x i64] }
%TCPServer = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, %"Slice(UInt8)", i32, i1, i1, i1, i32, %"(Pointer(UInt8) | Nil)", %"(Pointer(UInt8) | Nil)", %"(Time::Span | Nil)", %"(Time::Span | Nil)", i1, i1, %"Crystal::ThreadLocalValue(Deque(Fiber))", %"Crystal::ThreadLocalValue(Deque(Fiber))", %"Crystal::ThreadLocalValue(Crystal::EventLoop::Event+)", %"Crystal::ThreadLocalValue(Crystal::EventLoop::Event+)", %"Atomic(Int32)", i1, i16, i32, i32, %"(Socket::IPAddress | Nil)", %"(Socket::IPAddress | Nil)" }
%"String::Builder" = type { i32, %"(IO::EncodingOptions | Nil)", %"IO::Encoder"*, %"IO::Decoder"*, i32, i32, i8*, i1 }
-%"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" = type { i32, [3 x i64] }
-%"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" = type { i32, [4 x i64] }
%"struct.LibC::Timeval" = type { i64, i64 }
%"IO::Error" = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)", %"(Errno | WasiError | WinError | Nil)" }
%"(Slice(UInt8) | Nil)" = type { i32, [2 x i64] }
+%"Array(Pointer(Bool))" = type { i32, i32, i32, i32, i1** }
%OverflowError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
%DivisionByZeroError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
%Exception = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
+%"Crystal::OnceState" = type { i32, %"Array(Pointer(Bool))"* }
%"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 }
%"union.LibC::PthreadMutexattrT" = type { [1 x i32] }
@@ -165,8 +163,8 @@ target triple = "x86_64-unknown-linux-gnu"
%NilAssertionError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
%"Exception::CallStack" = type { %"Array(Pointer(Void))"*, %"Array(String)"* }
%"Array(Pointer(Void))" = type { i32, i32, i32, i32, i8** }
-%Path = type { %String*, i8 }
%"Tuple(String, String)" = type { %String*, %String* }
+%Path = type { %String*, i8 }
%"Array(Array(Crystal::DWARF::LineNumbers::Row))" = type { i32, i32, i32, i32, %"Array(Crystal::DWARF::LineNumbers::Row)"** }
%"Array(Crystal::DWARF::LineNumbers::Row)" = type { i32, i32, i32, i32, %"Crystal::DWARF::LineNumbers::Row"* }
%"Crystal::DWARF::LineNumbers::Row" = type { i64, i32, %String*, i32, i32, i1 }
@@ -174,8 +172,8 @@ target triple = "x86_64-unknown-linux-gnu"
%"Tuple(String, Int32, Int32)" = type { %String*, i32, i32 }
%"(Char | Nil)" = type { i32, [1 x i64] }
%"Path::PartIterator" = type { i32, %Path, %"Char::Reader", i1, i1 }
-%"Crystal::DWARF::Strings" = type { i32*, %"(UInt32 | UInt64)", %"Slice(UInt8)" }
-%"(UInt32 | UInt64)" = type { i32, [1 x i64] }
+%"struct.LibC::DlPhdrInfo" = type { i64, i8*, %"struct.LibC::Elf_Phdr"*, i16 }
+%"struct.LibC::Elf_Phdr" = type { i32, i32, i64, i64, i64, i64, i64, i64 }
%"Crystal::ELF" = type { %"(Crystal::ELF::Ident | Nil)", %"(Crystal::ELF::Type | Nil)", %"(Crystal::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(Crystal::ELF::SectionHeader)"* }
%"(Crystal::ELF::Ident | Nil)" = type { i32, [2 x i64] }
%"(Crystal::ELF::Type | Nil)" = type { i32, [1 x i64] }
@@ -187,19 +185,31 @@ target triple = "x86_64-unknown-linux-gnu"
%"Crystal::ELF::SectionHeader" = type { %"(UInt32 | Nil)", %"(Crystal::ELF::SectionHeader::Type | Nil)", %"(Crystal::ELF::SectionHeader::Flags | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | Nil)", %"(UInt32 | Nil)", %"(UInt32 | UInt64 | Nil)", %"(UInt32 | UInt64 | Nil)" }
%"(Crystal::ELF::SectionHeader::Type | Nil)" = type { i32, [1 x i64] }
%"(Crystal::ELF::SectionHeader::Flags | Nil)" = type { i32, [1 x i64] }
+%"Crystal::DWARF::LineNumbers" = type { %"Array(Array(Crystal::DWARF::LineNumbers::Row))"*, i64, %"Array(Crystal::DWARF::LineNumbers::Row)"*, i32*, i64, %"(Crystal::DWARF::Strings | Nil)", %"(Crystal::DWARF::Strings | Nil)" }
+%"(Crystal::DWARF::Strings | Nil)" = type { i32, [5 x i64] }
%"Crystal::DWARF::Info" = type { %"(UInt32 | UInt64)", i16, i8, %"(UInt32 | UInt64)", i8, %"Array(Crystal::DWARF::Abbrev)"*, i1, i64, i64, i32* }
+%"(UInt32 | UInt64)" = type { i32, [1 x i64] }
%"Array(Crystal::DWARF::Abbrev)" = type { i32, i32, i32, i32, %"Crystal::DWARF::Abbrev"* }
%"Crystal::DWARF::Abbrev" = type { i32, i32, %"Array(Crystal::DWARF::Abbrev::Attribute)"*, i1 }
%"Array(Crystal::DWARF::Abbrev::Attribute)" = type { i32, i32, i32, i32, %"Crystal::DWARF::Abbrev::Attribute"* }
%"Crystal::DWARF::Abbrev::Attribute" = type { i32, i32, i32 }
-%"Crystal::DWARF::LineNumbers" = type { %"Array(Array(Crystal::DWARF::LineNumbers::Row))"*, i64, %"Array(Crystal::DWARF::LineNumbers::Row)"*, i32*, i64, %"(Crystal::DWARF::Strings | Nil)", %"(Crystal::DWARF::Strings | Nil)" }
-%"(Crystal::DWARF::Strings | Nil)" = type { i32, [5 x i64] }
+%"Crystal::DWARF::Strings" = type { i32*, %"(UInt32 | UInt64)", %"Slice(UInt8)" }
%"Crystal::ELF::Error" = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
%"(Crystal::ELF::Endianness | Nil)" = type { i32, [1 x i64] }
%"(Crystal::ELF::OSABI | Nil)" = type { i32, [1 x i64] }
%"Crystal::ELF::Ident" = type { i8, i32, i8, i8, i8 }
%"(IO::ByteFormat::BigEndian:Module | IO::ByteFormat::LittleEndian:Module)" = type { i32, [1 x i64] }
-%"(Int32 | UInt32 | UInt64)" = type { i32, [1 x i64] }
+%"Tuple(Crystal::DWARF::AT, Crystal::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, i32, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" }
+%"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, [2 x i64] }
+%"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt128.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" = type { i32, [1 x i64] }
+%TypeCastError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
+%"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt128.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" = type { i32, [1 x i64] }
+%"(Nil.class | UInt64.class)" = type { i32, [1 x i64] }
+%"IO::TimeoutError" = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)", %"(Errno | WasiError | WinError | Nil)" }
+%"(Tuple(Hash::Entry(Thread, Deque(Fiber)), Int32) | Nil)" = type { i32, [4 x i64] }
+%"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" = type { i32, [3 x i64] }
+%"(Tuple(Hash::Entry(Thread, Crystal::EventLoop::Event+), Int32) | Nil)" = type { i32, [5 x i64] }
+%"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" = type { i32, [4 x i64] }
%"Crystal::DWARF::LineNumbers::Sequence" = type { %"(Int64 | Nil)", %"(UInt32 | Nil)", %"(UInt16 | Nil)", %"(Int32 | Nil)", %"(Int32 | Nil)", %"(UInt32 | Nil)", %"(Int32 | Nil)", %"(Int32 | Nil)", %"(Bool | Nil)", %"(Int32 | Nil)", %"(Int32 | Nil)", %"(Int32 | Nil)", %"Array(String)"*, %"Array(Crystal::DWARF::LineNumbers::Sequence::FileEntry)"*, %"Array(UInt8)"* }
%"(Int64 | Nil)" = type { i32, [1 x i64] }
%"(Bool | Nil)" = type { i32, [1 x i64] }
@@ -209,17 +219,6 @@ target triple = "x86_64-unknown-linux-gnu"
%"Array(Crystal::DWARF::LineNumbers::LNCTFormat)" = type { i32, i32, i32, i32, %"Crystal::DWARF::LineNumbers::LNCTFormat"* }
%"Crystal::DWARF::LineNumbers::LNCTFormat" = type { i32, i32 }
%"Crystal::DWARF::LineNumbers::Register" = type { i64, i32, i32, i32, i32, i1, i1, i1, i1, i1, i32, i32 }
-%"Tuple(Crystal::DWARF::AT, Crystal::DWARF::FORM, Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, i32, %"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" }
-%"(Bool | Int32 | Int64 | Slice(UInt8) | String | UInt128 | UInt16 | UInt32 | UInt64 | UInt8)" = type { i32, [2 x i64] }
-%"(Bool.class | Int32.class | Int64.class | Slice(UInt8).class | String.class | UInt128.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" = type { i32, [1 x i64] }
-%TypeCastError = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)" }
-%"(Bool.class | Int32.class | Int64.class | Nil.class | Slice(UInt8).class | String.class | UInt128.class | UInt16.class | UInt32.class | UInt64.class | UInt8.class)" = type { i32, [1 x i64] }
-%"(Nil.class | UInt64.class)" = type { i32, [1 x i64] }
-%"struct.LibC::DlPhdrInfo" = type { i64, i8*, %"struct.LibC::Elf_Phdr"*, i16 }
-%"struct.LibC::Elf_Phdr" = type { i32, i32, i64, i64, i64, i64, i64, i64 }
-%"IO::TimeoutError" = type { i32, %String*, i32*, %"(Exception::CallStack | Nil)", %"(Errno | WasiError | WinError | Nil)" }
-%"(Tuple(Hash::Entry(Thread, Deque(Fiber)), Int32) | Nil)" = type { i32, [4 x i64] }
-%"(Tuple(Hash::Entry(Thread, Crystal::EventLoop::Event+), Int32) | Nil)" = type { i32, [5 x i64] }
%"(Bool.class | Char.class)" = type { i32, [1 x i64] }
%"Tuple(String | Nil, String | Nil)" = type { %String*, %String* }
%"(Tuple(Int32, Int32) | Nil)" = type { i32, [1 x i64] }
@@ -1134,10 +1133,10 @@ target triple = "x86_64-unknown-linux-gnu"
@"'Unhandled exception...'.33" = private constant { i32, i32, i32, [22 x i8] } { i32 1, i32 21, i32 21, [22 x i8] c"Unhandled exception: \00" }
@"'Unhandled exception...'.34" = private constant { i32, i32, i32, [20 x i8] } { i32 1, i32 19, i32 19, [20 x i8] c"Unhandled exception\00" }
@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" = private unnamed_addr constant [46 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Crystal::ELF::Error...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'IndexError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'ArgumentError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'TypeCastError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'InvalidByteSequence...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [9 x i8] }* @"'KeyError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'DivisionByZeroError...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'OverflowError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'NotImplementedError...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'NilAssertionError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [13 x i8] }* @"'RuntimeError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Enumerable::EmptyEr...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'Enumerable::NotFoun...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [10 x i8] }* @"'IO::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [17 x i8] }* @"'IO::TimeoutError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [13 x i8] }* @"'IO::EOFError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'File::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'File::NotFoundError...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'File::AlreadyExists...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'File::AccessDeniedE...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'Socket::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Socket::ConnectErro...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'Socket::BindError'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'Socket::Addrinfo::E...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'Base64::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Channel::ClosedErro...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'File::BadPatternErr...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'Path::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'Time::FloatingTimeC...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Time::Format::Error...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [35 x i8] }* @"'Time::Location::Inv...'.22" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [41 x i8] }* @"'Time::Location::Inv...'.21" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [43 x i8] }* @"'Time::Location::Inv...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'URI::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [15 x i8] }* @"'OpenSSL::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'OpenSSL::SSL::Error...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'OpenSSL::Digest::Er...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'OpenSSL::Digest::Un...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'OpenSSL::Cipher::Er...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Digest::FinalizedEr...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'Compress::Deflate::...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'Compress::Gzip::Err...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'MIME::Error'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'MIME::Multipart::Er...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'HTTP::FormData::Err...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'HTTP::Server::Clien...'" to i64), i64 ptrtoint ([46 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil)" to i64)) to i32)], align 4
-@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" = private unnamed_addr constant [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'OpenSSL::Digest::Un...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'OpenSSL::Cipher::Er...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Digest::FinalizedEr...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'Compress::Deflate::...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'Compress::Gzip::Err...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'MIME::Error'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'MIME::Multipart::Er...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'HTTP::FormData::Err...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'HTTP::Server::Clien...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).413" to i64)) to i32)], align 4
-@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" = private unnamed_addr constant [13 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Socket::ConnectErro...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'Socket::BindError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'Socket::Addrinfo::E...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'Base64::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Channel::ClosedErro...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'File::BadPatternErr...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'Path::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'Time::FloatingTimeC...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Time::Format::Error...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [35 x i8] }* @"'Time::Location::Inv...'.22" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [41 x i8] }* @"'Time::Location::Inv...'.21" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [43 x i8] }* @"'Time::Location::Inv...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'URI::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).414" to i64)) to i32)], align 4
-@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).415" = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'File::NotFoundError...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).415" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'File::AlreadyExists...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).415" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'File::AccessDeniedE...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).415" to i64)) to i32)], align 4
-@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" = private unnamed_addr constant [13 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Crystal::ELF::Error...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'IndexError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'ArgumentError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'TypeCastError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'InvalidByteSequence...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [9 x i8] }* @"'KeyError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'DivisionByZeroError...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'OverflowError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'NotImplementedError...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'NilAssertionError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [13 x i8] }* @"'RuntimeError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Enumerable::EmptyEr...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'Enumerable::NotFoun...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).416" to i64)) to i32)], align 4
+@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" = private unnamed_addr constant [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'OpenSSL::Digest::Un...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'OpenSSL::Cipher::Er...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Digest::FinalizedEr...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'Compress::Deflate::...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'Compress::Gzip::Err...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'MIME::Error'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'MIME::Multipart::Er...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'HTTP::FormData::Err...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'HTTP::Server::Clien...'" to i64), i64 ptrtoint ([9 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).481" to i64)) to i32)], align 4
+@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" = private unnamed_addr constant [13 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Socket::ConnectErro...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'Socket::BindError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'Socket::Addrinfo::E...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'Base64::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [21 x i8] }* @"'Channel::ClosedErro...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [22 x i8] }* @"'File::BadPatternErr...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [12 x i8] }* @"'Path::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [34 x i8] }* @"'Time::FloatingTimeC...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Time::Format::Error...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [35 x i8] }* @"'Time::Location::Inv...'.22" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [41 x i8] }* @"'Time::Location::Inv...'.21" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [43 x i8] }* @"'Time::Location::Inv...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'URI::Error'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).482" to i64)) to i32)], align 4
+@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).483" = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'File::NotFoundError...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).483" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'File::AlreadyExists...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).483" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [24 x i8] }* @"'File::AccessDeniedE...'" to i64), i64 ptrtoint ([3 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).483" to i64)) to i32)], align 4
+@"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" = private unnamed_addr constant [13 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'Crystal::ELF::Error...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [11 x i8] }* @"'IndexError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'ArgumentError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'TypeCastError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [25 x i8] }* @"'InvalidByteSequence...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [9 x i8] }* @"'KeyError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'DivisionByZeroError...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [14 x i8] }* @"'OverflowError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [20 x i8] }* @"'NotImplementedError...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [18 x i8] }* @"'NilAssertionError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [13 x i8] }* @"'RuntimeError'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [23 x i8] }* @"'Enumerable::EmptyEr...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [26 x i8] }* @"'Enumerable::NotFoun...'" to i64), i64 ptrtoint ([13 x i32]* @"reltable.*Crystal::System::print_exception<String, Exception+>:(Int32 | Nil).484" to i64)) to i32)], align 4
@"switch.table.~metaclass" = private unnamed_addr constant [966 x i32] [i32 1267, i32 968, i32 970, i32 971, i32 972, i32 973, i32 974, i32 975, i32 976, i32 977, i32 978, i32 979, i32 980, i32 981, i32 982, i32 983, i32 984, i32 985, i32 986, i32 987, i32 988, i32 989, i32 990, i32 991, i32 992, i32 993, i32 994, i32 995, i32 996, i32 997, i32 998, i32 999, i32 1000, i32 1001, i32 1002, i32 1003, i32 1004, i32 1005, i32 1006, i32 969, i32 1008, i32 1009, i32 1010, i32 1011, i32 1012, i32 1013, i32 1014, i32 1015, i32 1016, i32 1017, i32 1018, i32 1019, i32 1020, i32 1021, i32 1022, i32 1023, i32 1024, i32 1025, i32 1026, i32 1027, i32 1028, i32 1029, i32 1030, i32 1031, i32 1032, i32 1007, i32 1033, i32 1035, i32 1036, i32 1037, i32 1038, i32 1039, i32 1040, i32 1041, i32 1042, i32 1043, i32 1044, i32 1045, i32 1046, i32 1047, i32 1049, i32 1050, i32 1052, i32 1053, i32 1054, i32 1051, i32 1056, i32 1057, i32 1058, i32 1055, i32 1048, i32 1059, i32 1060, i32 1061, i32 1062, i32 1063, i32 1064, i32 1065, i32 1066, i32 1067, i32 1068, i32 1070, i32 1072, i32 1071, i32 1073, i32 1069, i32 1074, i32 1075, i32 1076, i32 1077, i32 1078, i32 1079, i32 1080, i32 1034, i32 1081, i32 1082, i32 1083, i32 1084, i32 1085, i32 1086, i32 1087, i32 1088, i32 1089, i32 1090, i32 1091, i32 1092, i32 1093, i32 1094, i32 1095, i32 1096, i32 1097, i32 1098, i32 1099, i32 1100, i32 1101, i32 1102, i32 1103, i32 1104, i32 1105, i32 1106, i32 1107, i32 1108, i32 1110, i32 1112, i32 1111, i32 1113, i32 1114, i32 1115, i32 1116, i32 1118, i32 1117, i32 1119, i32 1120, i32 1121, i32 1125, i32 1124, i32 1126, i32 1123, i32 1128, i32 1127, i32 1122, i32 1130, i32 1131, i32 1129, i32 1132, i32 1133, i32 1134, i32 1135, i32 1136, i32 1137, i32 1138, i32 1139, i32 1140, i32 1141, i32 1109, i32 1142, i32 1143, i32 1144, i32 1145, i32 1146, i32 1147, i32 1149, i32 1150, i32 1148, i32 1151, i32 1152, i32 1153, i32 1154, i32 1156, i32 1157, i32 1158, i32 1159, i32 1155, i32 1160, i32 1161, i32 1162, i32 1163, i32 1165, i32 1166, i32 1167, i32 1168, i32 1164, i32 1170, i32 1169, i32 1171, i32 1172, i32 1174, i32 1175, i32 1176, i32 1177, i32 1178, i32 1179, i32 1180, i32 1181, i32 1173, i32 1182, i32 1183, i32 1184, i32 1186, i32 1185, i32 1187, i32 1188, i32 1189, i32 1190, i32 1191, i32 1192, i32 1193, i32 1194, i32 1195, i32 1196, i32 1197, i32 1198, i32 1199, i32 1200, i32 1201, i32 1202, i32 1203, i32 1204, i32 1205, i32 1206, i32 1207, i32 1209, i32 1210, i32 1211, i32 1208, i32 1213, i32 1212, i32 1214, i32 1215, i32 1216, i32 1217, i32 1219, i32 1220, i32 1218, i32 1221, i32 1223, i32 1224, i32 1222, i32 1225, i32 1226, i32 1227, i32 1228, i32 1229, i32 1230, i32 1231, i32 1232, i32 1233, i32 1234, i32 1235, i32 1236, i32 1237, i32 1238, i32 1239, i32 1240, i32 1241, i32 1242, i32 1243, i32 1244, i32 1245, i32 1246, i32 1247, i32 1248, i32 1249, i32 1250, i32 967, i32 1254, i32 1255, i32 1256, i32 1257, i32 1258, i32 1259, i32 1260, i32 1261, i32 1262, i32 1263, i32 1253, i32 1265, i32 1266, i32 1264, i32 1252, i32 1268, i32 1269, i32 1270, i32 1272, i32 1273, i32 1274, i32 1275, i32 1276, i32 1277, i32 1278, i32 1279, i32 1280, i32 1281, i32 1282, i32 1283, i32 1284, i32 1285, i32 1286, i32 1287, i32 1288, i32 1289, i32 1290, i32 1291, i32 1292, i32 1293, i32 1294, i32 1295, i32 1296, i32 1297, i32 1298, i32 1299, i32 1300, i32 1301, i32 1302, i32 1303, i32 1304, i32 1305, i32 1306, i32 1307, i32 1308, i32 1309, i32 1310, i32 1311, i32 1312, i32 1313, i32 1314, i32 1315, i32 1316, i32 1317, i32 1318, i32 1319, i32 1320, i32 1321, i32 1322, i32 1323, i32 1324, i32 1325, i32 1326, i32 1327, i32 1328, i32 1329, i32 1330, i32 1331, i32 1332, i32 1333, i32 1334, i32 1335, i32 1336, i32 1337, i32 1338, i32 1339, i32 1340, i32 1341, i32 1342, i32 1343, i32 1344, i32 1345, i32 1346, i32 1347, i32 1348, i32 1349, i32 1350, i32 1351, i32 1352, i32 1353, i32 1354, i32 1355, i32 1356, i32 1357, i32 1358, i32 1359, i32 1360, i32 1361, i32 1362, i32 1363, i32 1364, i32 1365, i32 1366, i32 1367, i32 1368, i32 1369, i32 1370, i32 1371, i32 1372, i32 1373, i32 1374, i32 1375, i32 1376, i32 1377, i32 1378, i32 1379, i32 1380, i32 1381, i32 1382, i32 1383, i32 1384, i32 1385, i32 1386, i32 1387, i32 1388, i32 1389, i32 1390, i32 1391, i32 1392, i32 1393, i32 1394, i32 1395, i32 1396, i32 1397, i32 1398, i32 1399, i32 1400, i32 1401, i32 1402, i32 1403, i32 1404, i32 1405, i32 1406, i32 1407, i32 1408, i32 1271, i32 1410, i32 1411, i32 1412, i32 1413, i32 1414, i32 1415, i32 1416, i32 1417, i32 1418, i32 1419, i32 1420, i32 1421, i32 1422, i32 1423, i32 1424, i32 1425, i32 1426, i32 1427, i32 1428, i32 1429, i32 1430, i32 1431, i32 1432, i32 1433, i32 1434, i32 1435, i32 1436, i32 1437, i32 1438, i32 1439, i32 1440, i32 1441, i32 1442, i32 1443, i32 1444, i32 1445, i32 1446, i32 1447, i32 1448, i32 1449, i32 1450, i32 1451, i32 1452, i32 1453, i32 1454, i32 1455, i32 1456, i32 1457, i32 1458, i32 1459, i32 1460, i32 1461, i32 1462, i32 1463, i32 1464, i32 1465, i32 1466, i32 1467, i32 1468, i32 1469, i32 1470, i32 1471, i32 1472, i32 1473, i32 1474, i32 1475, i32 1476, i32 1477, i32 1478, i32 1479, i32 1480, i32 1481, i32 1482, i32 1483, i32 1484, i32 1485, i32 1486, i32 1487, i32 1488, i32 1489, i32 1490, i32 1491, i32 1492, i32 1493, i32 1494, i32 1495, i32 1496, i32 1497, i32 1498, i32 1499, i32 1500, i32 1501, i32 1502, i32 1503, i32 1504, i32 1505, i32 1506, i32 1507, i32 1508, i32 1509, i32 1510, i32 1511, i32 1512, i32 1513, i32 1514, i32 1515, i32 1516, i32 1517, i32 1518, i32 1519, i32 1520, i32 1521, i32 1522, i32 1523, i32 1524, i32 1525, i32 1526, i32 1527, i32 1528, i32 1529, i32 1530, i32 1531, i32 1532, i32 1533, i32 1534, i32 1535, i32 1536, i32 1537, i32 1538, i32 1539, i32 1540, i32 1541, i32 1542, i32 1543, i32 1544, i32 1545, i32 1546, i32 1547, i32 1548, i32 1549, i32 1550, i32 1551, i32 1552, i32 1553, i32 1554, i32 1555, i32 1556, i32 1557, i32 1558, i32 1559, i32 1560, i32 1561, i32 1562, i32 1563, i32 1564, i32 1565, i32 1566, i32 1567, i32 1568, i32 1569, i32 1570, i32 1571, i32 1572, i32 1573, i32 1574, i32 1575, i32 1576, i32 1577, i32 1578, i32 1579, i32 1580, i32 1581, i32 1582, i32 1583, i32 1409, i32 1585, i32 1586, i32 1587, i32 1588, i32 1589, i32 1590, i32 1591, i32 1592, i32 1584, i32 1594, i32 1595, i32 1596, i32 1597, i32 1598, i32 1599, i32 1600, i32 1601, i32 1602, i32 1603, i32 1604, i32 1605, i32 1606, i32 1607, i32 1608, i32 1609, i32 1610, i32 1611, i32 1612, i32 1613, i32 1614, i32 1615, i32 1616, i32 1617, i32 1618, i32 1619, i32 1620, i32 1621, i32 1622, i32 1623, i32 1624, i32 1625, i32 1626, i32 1593, i32 1629, i32 1630, i32 1631, i32 1632, i32 1633, i32 1634, i32 1635, i32 1636, i32 1637, i32 1638, i32 1639, i32 1640, i32 1641, i32 1642, i32 1643, i32 1644, i32 1628, i32 1645, i32 1646, i32 1647, i32 1648, i32 1649, i32 1650, i32 1651, i32 1652, i32 1653, i32 1654, i32 1655, i32 1656, i32 1657, i32 1658, i32 1659, i32 1660, i32 1661, i32 1662, i32 1663, i32 1664, i32 1665, i32 1666, i32 1667, i32 1668, i32 1669, i32 1670, i32 1671, i32 1672, i32 1674, i32 1673, i32 1675, i32 1676, i32 1677, i32 1678, i32 1679, i32 1680, i32 1681, i32 1682, i32 1683, i32 1684, i32 1685, i32 1686, i32 1687, i32 1688, i32 1689, i32 1690, i32 1691, i32 1692, i32 1693, i32 1694, i32 1695, i32 1696, i32 1697, i32 1698, i32 1699, i32 1700, i32 1702, i32 1701, i32 1703, i32 1704, i32 1705, i32 1706, i32 1708, i32 1709, i32 1707, i32 1710, i32 1711, i32 1712, i32 1713, i32 1714, i32 1715, i32 1716, i32 1718, i32 1719, i32 1720, i32 1721, i32 1717, i32 1722, i32 1723, i32 1724, i32 1726, i32 1727, i32 1728, i32 1729, i32 1730, i32 1731, i32 1732, i32 1733, i32 1725, i32 1734, i32 1735, i32 1737, i32 1738, i32 1739, i32 1740, i32 1736, i32 1742, i32 1743, i32 1744, i32 1745, i32 1741, i32 1747, i32 1746, i32 1748, i32 1749, i32 1750, i32 1751, i32 1752, i32 1753, i32 1754, i32 1755, i32 1756, i32 1757, i32 1758, i32 1759, i32 1760, i32 1761, i32 1762, i32 1763, i32 1764, i32 1765, i32 1766, i32 1767, i32 1768, i32 1769, i32 1770, i32 1771, i32 1772, i32 1773, i32 1774, i32 1775, i32 1776, i32 1777, i32 1778, i32 1779, i32 1780, i32 1781, i32 1782, i32 1784, i32 1785, i32 1786, i32 1787, i32 1788, i32 1789, i32 1790, i32 1791, i32 1792, i32 1793, i32 1794, i32 1795, i32 1796, i32 1797, i32 1798, i32 1799, i32 1800, i32 1801, i32 1802, i32 1803, i32 1804, i32 1805, i32 1806, i32 1807, i32 1808, i32 1783, i32 1809, i32 1810, i32 1811, i32 1812, i32 1813, i32 1814, i32 1815, i32 1816, i32 1818, i32 1817, i32 1821, i32 1822, i32 1823, i32 1820, i32 1824, i32 1825, i32 1826, i32 1827, i32 1828, i32 1829, i32 1830, i32 1831, i32 1832, i32 1833, i32 1834, i32 1835, i32 1836, i32 1837, i32 1838, i32 1840, i32 1841, i32 1839, i32 1842, i32 1843, i32 1844, i32 1845, i32 1846, i32 1847, i32 1848, i32 1849, i32 1850, i32 1851, i32 1852, i32 1853, i32 1854, i32 1856, i32 1855, i32 1857, i32 1858, i32 1859, i32 1860, i32 1861, i32 1862, i32 1863, i32 1864, i32 1865, i32 1866, i32 1867, i32 1627, i32 1929, i32 1819, i32 1868, i32 1869, i32 1870, i32 1871, i32 1872, i32 1873, i32 1874, i32 1875, i32 1876, i32 1877, i32 1878, i32 1879, i32 1880, i32 1881, i32 1882, i32 1883, i32 1884, i32 1885, i32 1886, i32 1887, i32 1888, i32 1889, i32 1890, i32 1891, i32 1892, i32 1893, i32 1894, i32 1895, i32 1896, i32 1897, i32 1898, i32 1899, i32 1900, i32 1901, i32 1902, i32 1903, i32 1904, i32 1905, i32 1906, i32 1907, i32 1908, i32 1909, i32 1910, i32 1911, i32 1912, i32 1913, i32 1914, i32 1915, i32 1916, i32 1917, i32 1918, i32 1919, i32 1920, i32 1921, i32 1922, i32 1923, i32 1924, i32 1925, i32 1926, i32 1927, i32 1928, i32 1930, i32 1931, i32 1251, i32 966], align 4
@"reltable.*String::interpolation<String, Signal>:String" = private unnamed_addr constant [31 x i32] [i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'HUP'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'INT'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'QUIT'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'ILL'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'TRAP'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'IOT'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'BUS'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'FPE'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'KILL'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'USR1'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'SEGV'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'USR2'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'PIPE'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'ALRM'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'TERM'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [7 x i8] }* @"'STKFLT'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'CHLD'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'CONT'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'STOP'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'TSTP'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'TTIN'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'TTOU'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'URG'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'XCPU'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [5 x i8] }* @"'XFSZ'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [7 x i8] }* @"'VTALRM'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'HUP'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [6 x i8] }* @"'WINCH'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [3 x i8] }* @"'IO'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'PWR'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ({ i32, i32, i32, [4 x i8] }* @"'SYS'" to i64), i64 ptrtoint ([31 x i32]* @"reltable.*String::interpolation<String, Signal>:String" to i64)) to i32)], align 4
@"switch.table.*Log::IOBackend#write<Log::Entry>:Nil" = private unnamed_addr constant [8 x %String*] [%String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'TRACE'" to %String*), %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'DEBUG'" to %String*), %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'INFO'" to %String*), %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'NOTICE'" to %String*), %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'WARN'" to %String*), %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'ERROR'" to %String*), %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'FATAL'" to %String*), %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'NONE'" to %String*)], align 8
@@ -1156,20 +1155,16 @@ alloca:
%2 = bitcast i64* %inbytesleft.i.i.i.i to %"struct.LibC::Addrinfo"**
%3 = bitcast i64* %inbytesleft.i.i.i.i to %"struct.LibC::Addrinfo"**
%outbuf.i.i.i.i = alloca [1024 x i8], align 1
- %4 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"struct.LibC::Sigaction"*
- %5 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"Crystal::Iconv"*
+ %4 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"Char::Reader"*
+ %5 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"struct.LibC::Sigaction"*
%6 = bitcast [1024 x i8]* %outbuf.i.i.i.i to [8 x i8]*
%7 = bitcast [1024 x i8]* %outbuf.i.i.i.i to [129 x i8]*
%8 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"Socket::Addrinfo"*
%9 = bitcast [1024 x i8]* %outbuf.i.i.i.i to [8 x i8]*
%10 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"Socket::Addrinfo"*
- %11 = bitcast [1024 x i8]* %outbuf.i.i.i.i to %"Char::Reader"*
%outbuf_ptr.i.i.i.i = alloca i8*, align 8
- %12 = bitcast i8** %outbuf_ptr.i.i.i.i to i32*
- %13 = bitcast i8** %outbuf_ptr.i.i.i.i to i8*
+ %11 = bitcast i8** %outbuf_ptr.i.i.i.i to i32*
%outbytesleft.i.i.i.i = alloca i64, align 8
- %_.i.i.i.i.i.i.i = alloca %"Crystal::Iconv", align 8
- %.sroa.813.i.i.i.i.i = alloca i8, align 8
%ptr.i.i.i = alloca %"struct.LibC::Addrinfo"*, align 8
%addr26.i.i.i = alloca %"Socket::Addrinfo", align 8
%optval1.i.i.i.i.i.i.i = alloca i32, align 4
@@ -1183,134 +1178,200 @@ alloca:
%altstack.i.i = alloca %"struct.LibC::StackT", align 8
%action.i.i = alloca %"struct.LibC::Sigaction", align 8
store i8** %argv, i8*** @ARGV_UNSAFE, align 8
- %14 = tail call i8* @GC_malloc(i64 16)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %14, i8 0, i64 16, i1 false)
- %15 = tail call i8* @GC_malloc(i64 24)
- %16 = bitcast i8* %15 to <4 x i32>*
- store <4 x i32> <i32 21, i32 0, i32 0, i32 0>, <4 x i32>* %16, align 4
- %17 = getelementptr inbounds i8, i8* %15, i64 16
- %18 = bitcast i8* %17 to i1***
- store i1** null, i1*** %18, align 8
- %19 = getelementptr inbounds i8, i8* %14, i64 8
- %20 = bitcast i8* %19 to i8**
- store i8* %15, i8** %20, align 8
- %21 = bitcast i8* %14 to i32*
- store i32 114, i32* %21, align 4
- store i8* %14, i8** @"~ONCE_STATE", align 8
- %22 = tail call i8* @GC_malloc(i64 8)
- %23 = tail call i8* @GC_malloc_atomic(i64 4)
- %24 = bitcast i8* %23 to i32*
- store i32 1179403647, i32* %24, align 4
- %oldret13.i = insertvalue %"Slice(UInt8)" { i32 4, i1 false, i8* undef }, i8* %23, 2
+ %12 = tail call i8* @GC_malloc(i64 16)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %12, i8 0, i64 16, i1 false)
+ %13 = tail call i8* @GC_malloc(i64 24)
+ %14 = bitcast i8* %13 to <4 x i32>*
+ store <4 x i32> <i32 21, i32 0, i32 0, i32 0>, <4 x i32>* %14, align 4
+ %15 = getelementptr inbounds i8, i8* %13, i64 16
+ %16 = bitcast i8* %15 to i1***
+ store i1** null, i1*** %16, align 8
+ %17 = getelementptr inbounds i8, i8* %12, i64 8
+ %18 = bitcast i8* %17 to i8**
+ store i8* %13, i8** %18, align 8
+ %19 = bitcast i8* %12 to i32*
+ store i32 114, i32* %19, align 4
+ store i8* %12, i8** @"~ONCE_STATE", align 8
+ %20 = tail call i8* @GC_malloc(i64 8)
+ %21 = tail call i8* @GC_malloc_atomic(i64 4)
+ %22 = bitcast i8* %21 to i32*
+ store i32 1179403647, i32* %22, align 4
+ %oldret13.i = insertvalue %"Slice(UInt8)" { i32 4, i1 false, i8* undef }, i8* %21, 2
store %"Slice(UInt8)" %oldret13.i, %"Slice(UInt8)"* @"Crystal::ELF::MAGIC", align 8
- %25 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %25, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
- %26 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
- %27 = tail call fastcc %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %26, %String* bitcast ({ i32, i32, i32, [78 x i8] }* @"'/home/johannes/src/...'" to %String*))
- %28 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %28, i1* nonnull @"Process::INITIAL_PWD:init", i8* bitcast (void ()* @"~Process::INITIAL_PWD:init" to i8*))
- %29 = load %String*, %String** @"Process::INITIAL_PWD", align 8
- %30 = icmp eq %String* %29, null
- br i1 %30, label %"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit", label %next_def.i
+ %23 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %23, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
+ %24 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
+ tail call fastcc void @"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil)"(%"Array(String)"* %24)
+ %25 = getelementptr inbounds %"Array(String)", %"Array(String)"* %24, i64 0, i32 4
+ %26 = load %String**, %String*** %25, align 8
+ %27 = getelementptr inbounds %"Array(String)", %"Array(String)"* %24, i64 0, i32 1
+ %28 = load i32, i32* %27, align 4
+ %29 = sext i32 %28 to i64
+ %30 = getelementptr inbounds %String*, %String** %26, i64 %29
+ store %String* bitcast ({ i32, i32, i32, [78 x i8] }* @"'/home/johannes/src/...'" to %String*), %String** %30, align 8
+ %31 = load i32, i32* %27, align 4
+ %32 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %31, i32 1)
+ %33 = extractvalue { i32, i1 } %32, 1
+ br i1 %33, label %overflow.i.i.i, label %"*Exception::CallStack::skip<String>:Nil.exit", !prof !0
-next_def.i: ; preds = %alloca
- %31 = getelementptr inbounds %String, %String* %29, i64 0, i32 1
- %32 = load i32, i32* %31, align 4
- %33 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %32, i32 -1)
- %34 = extractvalue { i32, i1 } %33, 0
- %35 = extractvalue { i32, i1 } %33, 1
- br i1 %35, label %overflow4.i.i.i.i.i, label %normal5.i.i.i.i.i, !prof !0
-
-overflow4.i.i.i.i.i: ; preds = %next_def.i
+overflow.i.i.i: ; preds = %alloca
tail call void @__crystal_raise_overflow()
unreachable
-normal5.i.i.i.i.i: ; preds = %next_def.i
- %36 = icmp sgt i32 %34, -1
- br i1 %36, label %while.i.i.preheader.i.i.i, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i"
+"*Exception::CallStack::skip<String>:Nil.exit": ; preds = %alloca
+ %34 = extractvalue { i32, i1 } %32, 0
+ %35 = bitcast %"Array(String)"* %24 to i8*
+ %sunkaddr = getelementptr inbounds i8, i8* %35, i64 4
+ %36 = bitcast i8* %sunkaddr to i32*
+ store i32 %34, i32* %36, align 4
+ %37 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %37, i1* nonnull @"Process::INITIAL_PWD:init", i8* bitcast (void ()* @"~Process::INITIAL_PWD:init" to i8*))
+ %38 = load %String*, %String** @"Process::INITIAL_PWD", align 8
+ %39 = icmp eq %String* %38, null
+ br i1 %39, label %"~Exception::CallStack::CURRENT_DIR:init.exit", label %next_def.i
-while.i.i.preheader.i.i.i: ; preds = %normal5.i.i.i.i.i
- %37 = getelementptr inbounds %String, %String* %29, i64 0, i32 3
- %38 = load i8, i8* %37, align 1
- %39 = icmp eq i8 %38, 0
- br i1 %39, label %then10.i.i.i.i.i, label %else11.i.i.i.i.i.preheader
+next_def.i: ; preds = %"*Exception::CallStack::skip<String>:Nil.exit"
+ %40 = getelementptr inbounds %String, %String* %38, i64 0, i32 1
+ %41 = load i32, i32* %40, align 4
+ %42 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %41, i32 -1)
+ %43 = extractvalue { i32, i1 } %42, 0
+ %44 = extractvalue { i32, i1 } %42, 1
+ br i1 %44, label %overflow4.i.i.i.i.i.i, label %normal5.i.i.i.i.i.i, !prof !0
-else11.i.i.i.i.i.preheader: ; preds = %while.i.i.preheader.i.i.i
- br label %else11.i.i.i.i.i
-
-while.i.i.then10.i.i_crit_edge.i.i.i: ; preds = %normal15.i.i.i.i.i
- %40 = extractvalue { i32, i1 } %42, 0
- %phi.cast.i.i.i = zext i32 %40 to i64
- br label %then10.i.i.i.i.i
-
-then10.i.i.i.i.i: ; preds = %while.i.i.then10.i.i_crit_edge.i.i.i, %while.i.i.preheader.i.i.i
- %x.0.i.i.lcssa.i.i.i = phi i64 [ %phi.cast.i.i.i, %while.i.i.then10.i.i_crit_edge.i.i.i ], [ 0, %while.i.i.preheader.i.i.i ]
- %.fca.1.0.insert18.i.i.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.i.lcssa.i.i.i, 1, 0
- br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i"
-
-else11.i.i.i.i.i: ; preds = %else11.i.i.i.i.i.preheader, %normal15.i.i.i.i.i
- %lsr.iv252 = phi i32 [ 0, %else11.i.i.i.i.i.preheader ], [ %lsr.iv.next253, %normal15.i.i.i.i.i ]
- %41 = icmp eq i32 %34, %lsr.iv252
- br i1 %41, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i", label %else13.i.i.i.i.i
-
-else13.i.i.i.i.i: ; preds = %else11.i.i.i.i.i
- %42 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lsr.iv252, i32 1)
- %43 = extractvalue { i32, i1 } %42, 1
- br i1 %43, label %overflow14.i.i.i.i.i, label %normal15.i.i.i.i.i, !prof !0
-
-overflow14.i.i.i.i.i: ; preds = %else13.i.i.i.i.i
+overflow4.i.i.i.i.i.i: ; preds = %next_def.i
tail call void @__crystal_raise_overflow()
unreachable
-normal15.i.i.i.i.i: ; preds = %else13.i.i.i.i.i
- %44 = extractvalue { i32, i1 } %42, 0
- %45 = sext i32 %44 to i64
- %46 = bitcast %String* %29 to i8*
- %sunkaddr = getelementptr inbounds i8, i8* %46, i64 %45
- %sunkaddr254 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
- %47 = load i8, i8* %sunkaddr254, align 1
+normal5.i.i.i.i.i.i: ; preds = %next_def.i
+ %45 = icmp sgt i32 %43, -1
+ br i1 %45, label %while.i.preheader.i.i.i.i.i, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+
+while.i.preheader.i.i.i.i.i: ; preds = %normal5.i.i.i.i.i.i
+ %46 = getelementptr inbounds %String, %String* %38, i64 0, i32 3
+ %47 = load i8, i8* %46, align 1
%48 = icmp eq i8 %47, 0
- %lsr.iv.next253 = add nuw i32 %lsr.iv252, 1
- br i1 %48, label %while.i.i.then10.i.i_crit_edge.i.i.i, label %else11.i.i.i.i.i
+ br i1 %48, label %then10.i.i.i.i.i.i, label %else11.i.i.i.i.i.i.preheader
-"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i": ; preds = %else11.i.i.i.i.i, %then10.i.i.i.i.i, %normal5.i.i.i.i.i
- %common.ret.op.i.i.i.i.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i.i.i, %then10.i.i.i.i.i ], [ zeroinitializer, %normal5.i.i.i.i.i ], [ zeroinitializer, %else11.i.i.i.i.i ]
- %oldret.i.i.i.i.i = extractvalue %"(Int32 | Nil)" %common.ret.op.i.i.i.i.i, 0
- %.not.i.i.i.i = icmp eq i32 %oldret.i.i.i.i.i, 0
- br i1 %.not.i.i.i.i, label %"*Path::[]<String>:Path.exit.i", label %next_def.i.i.i.i
+else11.i.i.i.i.i.i.preheader: ; preds = %while.i.preheader.i.i.i.i.i
+ br label %else11.i.i.i.i.i.i
-next_def.i.i.i.i: ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i"
- %49 = tail call fastcc %String* @"*String::interpolation<String, (String | Nil), String>:String"()
- %50 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %49)
- tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %50)
+while.i.then10.i_crit_edge.i.i.i.i.i: ; preds = %normal15.i.i.i.i.i.i
+ %49 = extractvalue { i32, i1 } %51, 0
+ %phi.cast.i.i.i.i.i = zext i32 %49 to i64
+ br label %then10.i.i.i.i.i.i
+
+then10.i.i.i.i.i.i: ; preds = %while.i.then10.i_crit_edge.i.i.i.i.i, %while.i.preheader.i.i.i.i.i
+ %x.0.i.lcssa.i.i.i.i.i = phi i64 [ %phi.cast.i.i.i.i.i, %while.i.then10.i_crit_edge.i.i.i.i.i ], [ 0, %while.i.preheader.i.i.i.i.i ]
+ %.fca.1.0.insert18.i.i.i.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.lcssa.i.i.i.i.i, 1, 0
+ br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+
+else11.i.i.i.i.i.i: ; preds = %else11.i.i.i.i.i.i.preheader, %normal15.i.i.i.i.i.i
+ %lsr.iv272 = phi i32 [ 0, %else11.i.i.i.i.i.i.preheader ], [ %lsr.iv.next273, %normal15.i.i.i.i.i.i ]
+ %50 = icmp eq i32 %43, %lsr.iv272
+ br i1 %50, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i", label %else13.i.i.i.i.i.i
+
+else13.i.i.i.i.i.i: ; preds = %else11.i.i.i.i.i.i
+ %51 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lsr.iv272, i32 1)
+ %52 = extractvalue { i32, i1 } %51, 1
+ br i1 %52, label %overflow14.i.i.i.i.i.i, label %normal15.i.i.i.i.i.i, !prof !0
+
+overflow14.i.i.i.i.i.i: ; preds = %else13.i.i.i.i.i.i
+ tail call void @__crystal_raise_overflow()
unreachable
-"*Path::[]<String>:Path.exit.i": ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i"
- %51 = ptrtoint %String* %29 to i64
- br label %"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit"
+normal15.i.i.i.i.i.i: ; preds = %else13.i.i.i.i.i.i
+ %53 = extractvalue { i32, i1 } %51, 0
+ %54 = sext i32 %53 to i64
+ %55 = bitcast %String* %38 to i8*
+ %sunkaddr274 = getelementptr inbounds i8, i8* %55, i64 %54
+ %sunkaddr275 = getelementptr inbounds i8, i8* %sunkaddr274, i64 12
+ %56 = load i8, i8* %sunkaddr275, align 1
+ %57 = icmp eq i8 %56, 0
+ %lsr.iv.next273 = add nuw i32 %lsr.iv272, 1
+ br i1 %57, label %while.i.then10.i_crit_edge.i.i.i.i.i, label %else11.i.i.i.i.i.i
-"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit": ; preds = %"*Path::[]<String>:Path.exit.i", %alloca
- %.sroa.phi.sroa.speculated.i = phi i32 [ 841, %"*Path::[]<String>:Path.exit.i" ], [ 0, %alloca ]
- %.sroa.phi16.sroa.speculated.i = phi i64 [ %51, %"*Path::[]<String>:Path.exit.i" ], [ 0, %alloca ]
+"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i": ; preds = %else11.i.i.i.i.i.i, %then10.i.i.i.i.i.i, %normal5.i.i.i.i.i.i
+ %common.ret.op.i.i.i.i.i.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i.i.i.i, %then10.i.i.i.i.i.i ], [ zeroinitializer, %normal5.i.i.i.i.i.i ], [ zeroinitializer, %else11.i.i.i.i.i.i ]
+ %oldret.i.i.i.i.i.i = extractvalue %"(Int32 | Nil)" %common.ret.op.i.i.i.i.i.i, 0
+ %.not.i.i.i.i.i = icmp eq i32 %oldret.i.i.i.i.i.i, 0
+ br i1 %.not.i.i.i.i.i, label %"*Path::[]<String>:Path.exit.i", label %next_def.i.i.i.i.i
+
+next_def.i.i.i.i.i: ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+ %58 = tail call fastcc %String* @"*String::interpolation<String, (String | Nil), String>:String"()
+ %59 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %58)
+ tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %59)
+ unreachable
+
+"*Path::[]<String>:Path.exit.i": ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+ %60 = ptrtoint %String* %38 to i64
+ br label %"~Exception::CallStack::CURRENT_DIR:init.exit"
+
+"~Exception::CallStack::CURRENT_DIR:init.exit": ; preds = %"*Exception::CallStack::skip<String>:Nil.exit", %"*Path::[]<String>:Path.exit.i"
+ %.sroa.phi.sroa.speculated.i = phi i32 [ 841, %"*Path::[]<String>:Path.exit.i" ], [ 0, %"*Exception::CallStack::skip<String>:Nil.exit" ]
+ %.sroa.phi16.sroa.speculated.i = phi i64 [ %60, %"*Path::[]<String>:Path.exit.i" ], [ 0, %"*Exception::CallStack::skip<String>:Nil.exit" ]
%.fca.0.insert.i = insertvalue %"(Path | Nil)" poison, i32 %.sroa.phi.sroa.speculated.i, 0
%.fca.1.0.insert.i = insertvalue %"(Path | Nil)" %.fca.0.insert.i, i64 %.sroa.phi16.sroa.speculated.i, 1, 0
%.fca.1.1.insert.i = insertvalue %"(Path | Nil)" %.fca.1.0.insert.i, i64 0, 1, 1
store %"(Path | Nil)" %.fca.1.1.insert.i, %"(Path | Nil)"* @"Exception::CallStack::CURRENT_DIR", align 16
- %52 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %52, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
- %53 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %53, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
- %54 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
- %55 = tail call fastcc %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %54, %String* bitcast ({ i32, i32, i32, [68 x i8] }* @"'/home/johannes/src/...'.3" to %String*))
- %56 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %56, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
- %57 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
- %58 = tail call fastcc %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %57, %String* bitcast ({ i32, i32, i32, [57 x i8] }* @"'/home/johannes/src/...'.4" to %String*))
- %59 = tail call i8* @GC_malloc_atomic(i64 4)
- %60 = bitcast i8* %59 to i32*
- store i32 115, i32* %60, align 4
- store i8* %59, i8** bitcast (%"Iterator::Stop"** @"Iterator::Stop::INSTANCE" to i8**), align 8
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) bitcast (%"->"* @"LibC::SIG_DFL" to i8*), i8 0, i64 16, i1 false) #22
+ %61 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %61, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
+ %62 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %62, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
+ %63 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
+ tail call fastcc void @"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil)"(%"Array(String)"* %63)
+ %64 = getelementptr inbounds %"Array(String)", %"Array(String)"* %63, i64 0, i32 4
+ %65 = load %String**, %String*** %64, align 8
+ %66 = getelementptr inbounds %"Array(String)", %"Array(String)"* %63, i64 0, i32 1
+ %67 = load i32, i32* %66, align 4
+ %68 = sext i32 %67 to i64
+ %69 = getelementptr inbounds %String*, %String** %65, i64 %68
+ store %String* bitcast ({ i32, i32, i32, [68 x i8] }* @"'/home/johannes/src/...'.3" to %String*), %String** %69, align 8
+ %70 = load i32, i32* %66, align 4
+ %71 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %70, i32 1)
+ %72 = extractvalue { i32, i1 } %71, 1
+ br i1 %72, label %overflow.i.i.i38, label %"*Exception::CallStack::skip<String>:Nil.exit39", !prof !0
+
+overflow.i.i.i38: ; preds = %"~Exception::CallStack::CURRENT_DIR:init.exit"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Exception::CallStack::skip<String>:Nil.exit39": ; preds = %"~Exception::CallStack::CURRENT_DIR:init.exit"
+ %73 = extractvalue { i32, i1 } %71, 0
+ %74 = bitcast %"Array(String)"* %63 to i8*
+ %sunkaddr276 = getelementptr inbounds i8, i8* %74, i64 4
+ %75 = bitcast i8* %sunkaddr276 to i32*
+ store i32 %73, i32* %75, align 4
+ %76 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %76, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
+ %77 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
+ tail call fastcc void @"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil)"(%"Array(String)"* %77)
+ %78 = getelementptr inbounds %"Array(String)", %"Array(String)"* %77, i64 0, i32 4
+ %79 = load %String**, %String*** %78, align 8
+ %80 = getelementptr inbounds %"Array(String)", %"Array(String)"* %77, i64 0, i32 1
+ %81 = load i32, i32* %80, align 4
+ %82 = sext i32 %81 to i64
+ %83 = getelementptr inbounds %String*, %String** %79, i64 %82
+ store %String* bitcast ({ i32, i32, i32, [57 x i8] }* @"'/home/johannes/src/...'.4" to %String*), %String** %83, align 8
+ %84 = load i32, i32* %80, align 4
+ %85 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %84, i32 1)
+ %86 = extractvalue { i32, i1 } %85, 1
+ br i1 %86, label %overflow.i.i.i40, label %"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit", !prof !0
+
+overflow.i.i.i40: ; preds = %"*Exception::CallStack::skip<String>:Nil.exit39"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit": ; preds = %"*Exception::CallStack::skip<String>:Nil.exit39"
+ %87 = extractvalue { i32, i1 } %85, 0
+ %88 = bitcast %"Array(String)"* %77 to i8*
+ %sunkaddr277 = getelementptr inbounds i8, i8* %88, i64 4
+ %89 = bitcast i8* %sunkaddr277 to i32*
+ store i32 %87, i32* %89, align 4
+ %90 = tail call i8* @GC_malloc_atomic(i64 4)
+ %91 = bitcast i8* %90 to i32*
+ store i32 115, i32* %91, align 4
+ store i8* %90, i8** bitcast (%"Iterator::Stop"** @"Iterator::Stop::INSTANCE" to i8**), align 8
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) bitcast (%"->"* @"LibC::SIG_DFL" to i8*), i8 0, i64 16, i1 false) #21
store i8* inttoptr (i64 1 to i8*), i8** @"LibC::SIG_IGN.0", align 8
tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(48) getelementptr inbounds ([256 x i8], [256 x i8]* @"String::CHAR_TO_DIGIT", i64 0, i64 0), i8 -1, i64 48, i1 false)
store i8 0, i8* getelementptr inbounds ([256 x i8], [256 x i8]* @"String::CHAR_TO_DIGIT", i64 0, i64 48), align 16
@@ -1349,170 +1410,170 @@ next_def.i.i.i.i: ; preds = %"*String#byte_index
store i8 35, i8* getelementptr inbounds ([256 x i8], [256 x i8]* @"String::CHAR_TO_DIGIT", i64 0, i64 122), align 2
tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(133) getelementptr inbounds ([256 x i8], [256 x i8]* @"String::CHAR_TO_DIGIT", i64 0, i64 123), i8 -1, i64 133, i1 false)
store i8* inttoptr (i64 -1 to i8*), i8** @"LibC::MAP_FAILED", align 8
- %61 = tail call i8* @GC_malloc(i64 24)
- %62 = getelementptr inbounds i8, i8* %61, i64 4
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %62, i8 0, i64 20, i1 false)
- %63 = bitcast i8* %61 to i32*
- store i32 185, i32* %63, align 4
- %64 = tail call i8* @GC_malloc(i64 24)
- %65 = bitcast i8* %64 to i32*
- %66 = getelementptr inbounds i8, i8* %64, i64 4
- %67 = bitcast i8* %66 to i32*
- store i32 0, i32* %67, align 4
- store i32 207, i32* %65, align 4
- %68 = getelementptr inbounds i8, i8* %64, i64 8
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %68, i8 0, i64 16, i1 false) #22
- %69 = getelementptr inbounds i8, i8* %61, i64 8
- %70 = bitcast i8* %69 to i8**
- store i8* %64, i8** %70, align 8
- %71 = tail call fastcc %"Thread::Mutex"* @"*Thread::Mutex::new:Thread::Mutex"()
- %72 = getelementptr inbounds i8, i8* %61, i64 16
- %73 = bitcast i8* %72 to %"Thread::Mutex"**
- store %"Thread::Mutex"* %71, %"Thread::Mutex"** %73, align 8
- store i8* %61, i8** bitcast (%"Fiber::StackPool"** @"Fiber::stack_pool" to i8**), align 8
+ %92 = tail call i8* @GC_malloc(i64 24)
+ %93 = getelementptr inbounds i8, i8* %92, i64 4
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %93, i8 0, i64 20, i1 false)
+ %94 = bitcast i8* %92 to i32*
+ store i32 185, i32* %94, align 4
+ %95 = tail call i8* @GC_malloc(i64 24)
+ %96 = bitcast i8* %95 to i32*
+ %97 = getelementptr inbounds i8, i8* %95, i64 4
+ %98 = bitcast i8* %97 to i32*
+ store i32 0, i32* %98, align 4
+ store i32 207, i32* %96, align 4
+ %99 = getelementptr inbounds i8, i8* %95, i64 8
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %99, i8 0, i64 16, i1 false) #21
+ %100 = getelementptr inbounds i8, i8* %92, i64 8
+ %101 = bitcast i8* %100 to i8**
+ store i8* %95, i8** %101, align 8
+ %102 = tail call fastcc %"Thread::Mutex"* @"*Thread::Mutex::new:Thread::Mutex"()
+ %103 = getelementptr inbounds i8, i8* %92, i64 16
+ %104 = bitcast i8* %103 to %"Thread::Mutex"**
+ store %"Thread::Mutex"* %102, %"Thread::Mutex"** %104, align 8
+ store i8* %92, i8** bitcast (%"Fiber::StackPool"** @"Fiber::stack_pool" to i8**), align 8
store i1 true, i1* @"File::DEFAULT_CREATE_PERMISSIONS", align 1
store i1 true, i1* @"Float::Printer::Dragonbox::ImplInfo_Float32::BIG_DIVISOR", align 1
store i1 true, i1* @"Float::Printer::Dragonbox::ImplInfo_Float32::SMALL_DIVISOR", align 1
store i1 true, i1* @"Float::Printer::Dragonbox::ImplInfo_Float64::BIG_DIVISOR", align 1
store i1 true, i1* @"Float::Printer::Dragonbox::ImplInfo_Float64::SMALL_DIVISOR", align 1
- %74 = tail call i8* @GC_malloc(i64 24)
- %75 = bitcast i8* %74 to i32*
- %76 = getelementptr inbounds i8, i8* %74, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %76, i8 0, i64 12, i1 false)
- store i32 35, i32* %75, align 4
- %77 = getelementptr inbounds i8, i8* %74, i64 4
- %78 = bitcast i8* %77 to i32*
- store i32 0, i32* %78, align 4
- %79 = getelementptr inbounds i8, i8* %74, i64 8
- %80 = bitcast i8* %79 to i32*
- store i32 78, i32* %80, align 4
- %81 = tail call i8* @GC_malloc_atomic(i64 624)
- %82 = getelementptr inbounds i8, i8* %74, i64 16
- %83 = bitcast i8* %82 to i8**
- store i8* %81, i8** %83, align 8
- store i32 78, i32* %78, align 4
- %84 = bitcast i8* %81 to <2 x i64>*
- store <2 x i64> <i64 -9093133594791772939, i64 -6754730975062328270>, <2 x i64>* %84, align 8
- %85 = getelementptr inbounds i8, i8* %81, i64 16
- %86 = bitcast i8* %85 to <2 x i64>*
- store <2 x i64> <i64 -3831727700400522433, i64 -177973607073265138>, <2 x i64>* %86, align 8
- %87 = getelementptr inbounds i8, i8* %81, i64 32
- %88 = bitcast i8* %87 to <2 x i64>*
- store <2 x i64> <i64 -7028762532061872567, i64 -4174267146649952805>, <2 x i64>* %88, align 8
- %89 = getelementptr inbounds i8, i8* %81, i64 48
- %90 = bitcast i8* %89 to <2 x i64>*
- store <2 x i64> <i64 -606147914885053102, i64 -7296371474444240045>, <2 x i64>* %90, align 8
- %91 = getelementptr inbounds i8, i8* %81, i64 64
- %92 = bitcast i8* %91 to <2 x i64>*
- store <2 x i64> <i64 -4508778324627912152, i64 -1024286887357502286>, <2 x i64>* %92, align 8
- %93 = getelementptr inbounds i8, i8* %81, i64 80
- %94 = bitcast i8* %93 to <2 x i64>*
- store <2 x i64> <i64 -7557708332239520785, i64 -4835449396872013077>, <2 x i64>* %94, align 8
- %95 = getelementptr inbounds i8, i8* %81, i64 96
- %96 = bitcast i8* %95 to <2 x i64>*
- store <2 x i64> <i64 -1432625727662628442, i64 -7812920107430224632>, <2 x i64>* %96, align 8
- %97 = getelementptr inbounds i8, i8* %81, i64 112
- %98 = bitcast i8* %97 to <2 x i64>*
- store <2 x i64> <i64 -5154464115860392886, i64 -1831394126398103204>, <2 x i64>* %98, align 8
- %99 = getelementptr inbounds i8, i8* %81, i64 128
- %100 = bitcast i8* %99 to <2 x i64>*
- store <2 x i64> <i64 -8062150356639896358, i64 -5466001927372482544>, <2 x i64>* %100, align 8
- %101 = getelementptr inbounds i8, i8* %81, i64 144
- %102 = bitcast i8* %101 to <2 x i64>*
- store <2 x i64> <i64 -2220816390788215276, i64 -8305539271883716404>, <2 x i64>* %102, align 8
- %103 = getelementptr inbounds i8, i8* %81, i64 160
- %104 = bitcast i8* %103 to <2 x i64>*
- store <2 x i64> <i64 -5770238071427257601, i64 -2601111570856684097>, <2 x i64>* %104, align 8
- %105 = getelementptr inbounds i8, i8* %81, i64 176
- %106 = bitcast i8* %105 to <2 x i64>*
- store <2 x i64> <i64 -8543223759426509416, i64 -6067343680855748867>, <2 x i64>* %106, align 8
- %107 = getelementptr inbounds i8, i8* %81, i64 192
- %108 = bitcast i8* %107 to <2 x i64>*
- store <2 x i64> <i64 -2972493582642298179, i64 -8775337516792518218>, <2 x i64>* %108, align 8
- %109 = getelementptr inbounds i8, i8* %81, i64 208
- %110 = bitcast i8* %109 to <2 x i64>*
- store <2 x i64> <i64 -6357485877563259868, i64 -3335171328526686932>, <2 x i64>* %110, align 8
- %111 = getelementptr inbounds i8, i8* %81, i64 224
- %112 = bitcast i8* %111 to <2 x i64>*
- store <2 x i64> <i64 -9002011107970261188, i64 -6640827866535438581>, <2 x i64>* %112, align 8
- %113 = getelementptr inbounds i8, i8* %81, i64 240
- %114 = bitcast i8* %113 to <2 x i64>*
- store <2 x i64> <i64 -3689348814741910323, i64 -9223372036854775808>, <2 x i64>* %114, align 8
- %115 = getelementptr inbounds i8, i8* %81, i64 256
- %116 = bitcast i8* %115 to <2 x i64>*
- store <2 x i64> <i64 -6917529027641081856, i64 -4035225266123964416>, <2 x i64>* %116, align 8
- %117 = getelementptr inbounds i8, i8* %81, i64 272
- %118 = bitcast i8* %117 to <2 x i64>*
- store <2 x i64> <i64 -432345564227567616, i64 -7187745005283311616>, <2 x i64>* %118, align 8
- %119 = getelementptr inbounds i8, i8* %81, i64 288
- %120 = bitcast i8* %119 to <2 x i64>*
- store <2 x i64> <i64 -4372995238176751616, i64 -854558029293551616>, <2 x i64>* %120, align 8
- %121 = getelementptr inbounds i8, i8* %81, i64 304
- %122 = bitcast i8* %121 to <2 x i64>*
- store <2 x i64> <i64 -7451627795949551616, i64 -4702848726509551616>, <2 x i64>* %122, align 8
- %123 = getelementptr inbounds i8, i8* %81, i64 320
- %124 = bitcast i8* %123 to <2 x i64>*
- store <2 x i64> <i64 -1266874889709551616, i64 -7709325833709551616>, <2 x i64>* %124, align 8
- %125 = getelementptr inbounds i8, i8* %81, i64 336
- %126 = bitcast i8* %125 to <2 x i64>*
- store <2 x i64> <i64 -5024971273709551616, i64 -1669528073709551616>, <2 x i64>* %126, align 8
- %127 = getelementptr inbounds i8, i8* %81, i64 352
- %128 = bitcast i8* %127 to <2 x i64>*
- store <2 x i64> <i64 -7960984073709551616, i64 -5339544073709551616>, <2 x i64>* %128, align 8
- %129 = getelementptr inbounds i8, i8* %81, i64 368
- %130 = bitcast i8* %129 to <2 x i64>*
- store <2 x i64> <i64 -2062744073709551616, i64 -8206744073709551616>, <2 x i64>* %130, align 8
- %131 = getelementptr inbounds i8, i8* %81, i64 384
- %132 = bitcast i8* %131 to <2 x i64>*
- store <2 x i64> <i64 -5646744073709551616, i64 -2446744073709551616>, <2 x i64>* %132, align 8
- %133 = getelementptr inbounds i8, i8* %81, i64 400
- %134 = bitcast i8* %133 to <2 x i64>*
- store <2 x i64> <i64 -8446744073709551616, i64 -5946744073709551616>, <2 x i64>* %134, align 8
- %135 = getelementptr inbounds i8, i8* %81, i64 416
- %136 = bitcast i8* %135 to <2 x i64>*
- store <2 x i64> <i64 -2821744073709551616, i64 -8681119073709551616>, <2 x i64>* %136, align 8
- %137 = getelementptr inbounds i8, i8* %81, i64 432
- %138 = bitcast i8* %137 to <2 x i64>*
- store <2 x i64> <i64 -6239712823709551616, i64 -3187955011209551616>, <2 x i64>* %138, align 8
- %139 = getelementptr inbounds i8, i8* %81, i64 448
- %140 = bitcast i8* %139 to <2 x i64>*
- store <2 x i64> <i64 -8910000909647051616, i64 -6525815118631426616>, <2 x i64>* %140, align 8
- %141 = getelementptr inbounds i8, i8* %81, i64 464
- %142 = bitcast i8* %141 to <2 x i64>*
- store <2 x i64> <i64 -3545582879861895366, i64 -9133518327554766459>, <2 x i64>* %142, align 8
- %143 = getelementptr inbounds i8, i8* %81, i64 480
- %144 = bitcast i8* %143 to <2 x i64>*
- store <2 x i64> <i64 -6805211891016070170, i64 -3894828845342699809>, <2 x i64>* %144, align 8
- %145 = getelementptr inbounds i8, i8* %81, i64 496
- %146 = bitcast i8* %145 to <2 x i64>*
- store <2 x i64> <i64 -256850038250986857, i64 -7078060301547948642>, <2 x i64>* %146, align 8
- %147 = getelementptr inbounds i8, i8* %81, i64 512
- %148 = bitcast i8* %147 to <2 x i64>*
- store <2 x i64> <i64 -4235889358507547898, i64 -683175679707046969>, <2 x i64>* %148, align 8
- %149 = getelementptr inbounds i8, i8* %81, i64 528
- %150 = bitcast i8* %149 to <2 x i64>*
- store <2 x i64> <i64 -7344513827457986211, i64 -4568956265895094860>, <2 x i64>* %150, align 8
- %151 = getelementptr inbounds i8, i8* %81, i64 544
- %152 = bitcast i8* %151 to <2 x i64>*
- store <2 x i64> <i64 -1099509313941480671, i64 -7604722348854507275>, <2 x i64>* %152, align 8
- %153 = getelementptr inbounds i8, i8* %81, i64 560
- %154 = bitcast i8* %153 to <2 x i64>*
- store <2 x i64> <i64 -4894216917640746190, i64 -1506085128623544834>, <2 x i64>* %154, align 8
- %155 = getelementptr inbounds i8, i8* %81, i64 576
- %156 = bitcast i8* %155 to <2 x i64>*
- store <2 x i64> <i64 -7858832233030797377, i64 -5211854272861108818>, <2 x i64>* %156, align 8
- %157 = getelementptr inbounds i8, i8* %81, i64 592
- %158 = bitcast i8* %157 to <2 x i64>*
- store <2 x i64> <i64 -1903131822648998118, i64 -8106986416796705680>, <2 x i64>* %158, align 8
- %159 = getelementptr inbounds i8, i8* %81, i64 608
- %160 = bitcast i8* %159 to <2 x i64>*
- store <2 x i64> <i64 -5522047002568494196, i64 -2290872734783229841>, <2 x i64>* %160, align 8
- store i8* %74, i8** bitcast (%"Array(UInt64)"** @"Float::Printer::Dragonbox::ImplInfo_Float32::CACHE" to i8**), align 8
+ %105 = tail call i8* @GC_malloc(i64 24)
+ %106 = bitcast i8* %105 to i32*
+ %107 = getelementptr inbounds i8, i8* %105, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %107, i8 0, i64 12, i1 false)
+ store i32 35, i32* %106, align 4
+ %108 = getelementptr inbounds i8, i8* %105, i64 4
+ %109 = bitcast i8* %108 to i32*
+ store i32 0, i32* %109, align 4
+ %110 = getelementptr inbounds i8, i8* %105, i64 8
+ %111 = bitcast i8* %110 to i32*
+ store i32 78, i32* %111, align 4
+ %112 = tail call i8* @GC_malloc_atomic(i64 624)
+ %113 = getelementptr inbounds i8, i8* %105, i64 16
+ %114 = bitcast i8* %113 to i8**
+ store i8* %112, i8** %114, align 8
+ store i32 78, i32* %109, align 4
+ %115 = bitcast i8* %112 to <2 x i64>*
+ store <2 x i64> <i64 -9093133594791772939, i64 -6754730975062328270>, <2 x i64>* %115, align 8
+ %116 = getelementptr inbounds i8, i8* %112, i64 16
+ %117 = bitcast i8* %116 to <2 x i64>*
+ store <2 x i64> <i64 -3831727700400522433, i64 -177973607073265138>, <2 x i64>* %117, align 8
+ %118 = getelementptr inbounds i8, i8* %112, i64 32
+ %119 = bitcast i8* %118 to <2 x i64>*
+ store <2 x i64> <i64 -7028762532061872567, i64 -4174267146649952805>, <2 x i64>* %119, align 8
+ %120 = getelementptr inbounds i8, i8* %112, i64 48
+ %121 = bitcast i8* %120 to <2 x i64>*
+ store <2 x i64> <i64 -606147914885053102, i64 -7296371474444240045>, <2 x i64>* %121, align 8
+ %122 = getelementptr inbounds i8, i8* %112, i64 64
+ %123 = bitcast i8* %122 to <2 x i64>*
+ store <2 x i64> <i64 -4508778324627912152, i64 -1024286887357502286>, <2 x i64>* %123, align 8
+ %124 = getelementptr inbounds i8, i8* %112, i64 80
+ %125 = bitcast i8* %124 to <2 x i64>*
+ store <2 x i64> <i64 -7557708332239520785, i64 -4835449396872013077>, <2 x i64>* %125, align 8
+ %126 = getelementptr inbounds i8, i8* %112, i64 96
+ %127 = bitcast i8* %126 to <2 x i64>*
+ store <2 x i64> <i64 -1432625727662628442, i64 -7812920107430224632>, <2 x i64>* %127, align 8
+ %128 = getelementptr inbounds i8, i8* %112, i64 112
+ %129 = bitcast i8* %128 to <2 x i64>*
+ store <2 x i64> <i64 -5154464115860392886, i64 -1831394126398103204>, <2 x i64>* %129, align 8
+ %130 = getelementptr inbounds i8, i8* %112, i64 128
+ %131 = bitcast i8* %130 to <2 x i64>*
+ store <2 x i64> <i64 -8062150356639896358, i64 -5466001927372482544>, <2 x i64>* %131, align 8
+ %132 = getelementptr inbounds i8, i8* %112, i64 144
+ %133 = bitcast i8* %132 to <2 x i64>*
+ store <2 x i64> <i64 -2220816390788215276, i64 -8305539271883716404>, <2 x i64>* %133, align 8
+ %134 = getelementptr inbounds i8, i8* %112, i64 160
+ %135 = bitcast i8* %134 to <2 x i64>*
+ store <2 x i64> <i64 -5770238071427257601, i64 -2601111570856684097>, <2 x i64>* %135, align 8
+ %136 = getelementptr inbounds i8, i8* %112, i64 176
+ %137 = bitcast i8* %136 to <2 x i64>*
+ store <2 x i64> <i64 -8543223759426509416, i64 -6067343680855748867>, <2 x i64>* %137, align 8
+ %138 = getelementptr inbounds i8, i8* %112, i64 192
+ %139 = bitcast i8* %138 to <2 x i64>*
+ store <2 x i64> <i64 -2972493582642298179, i64 -8775337516792518218>, <2 x i64>* %139, align 8
+ %140 = getelementptr inbounds i8, i8* %112, i64 208
+ %141 = bitcast i8* %140 to <2 x i64>*
+ store <2 x i64> <i64 -6357485877563259868, i64 -3335171328526686932>, <2 x i64>* %141, align 8
+ %142 = getelementptr inbounds i8, i8* %112, i64 224
+ %143 = bitcast i8* %142 to <2 x i64>*
+ store <2 x i64> <i64 -9002011107970261188, i64 -6640827866535438581>, <2 x i64>* %143, align 8
+ %144 = getelementptr inbounds i8, i8* %112, i64 240
+ %145 = bitcast i8* %144 to <2 x i64>*
+ store <2 x i64> <i64 -3689348814741910323, i64 -9223372036854775808>, <2 x i64>* %145, align 8
+ %146 = getelementptr inbounds i8, i8* %112, i64 256
+ %147 = bitcast i8* %146 to <2 x i64>*
+ store <2 x i64> <i64 -6917529027641081856, i64 -4035225266123964416>, <2 x i64>* %147, align 8
+ %148 = getelementptr inbounds i8, i8* %112, i64 272
+ %149 = bitcast i8* %148 to <2 x i64>*
+ store <2 x i64> <i64 -432345564227567616, i64 -7187745005283311616>, <2 x i64>* %149, align 8
+ %150 = getelementptr inbounds i8, i8* %112, i64 288
+ %151 = bitcast i8* %150 to <2 x i64>*
+ store <2 x i64> <i64 -4372995238176751616, i64 -854558029293551616>, <2 x i64>* %151, align 8
+ %152 = getelementptr inbounds i8, i8* %112, i64 304
+ %153 = bitcast i8* %152 to <2 x i64>*
+ store <2 x i64> <i64 -7451627795949551616, i64 -4702848726509551616>, <2 x i64>* %153, align 8
+ %154 = getelementptr inbounds i8, i8* %112, i64 320
+ %155 = bitcast i8* %154 to <2 x i64>*
+ store <2 x i64> <i64 -1266874889709551616, i64 -7709325833709551616>, <2 x i64>* %155, align 8
+ %156 = getelementptr inbounds i8, i8* %112, i64 336
+ %157 = bitcast i8* %156 to <2 x i64>*
+ store <2 x i64> <i64 -5024971273709551616, i64 -1669528073709551616>, <2 x i64>* %157, align 8
+ %158 = getelementptr inbounds i8, i8* %112, i64 352
+ %159 = bitcast i8* %158 to <2 x i64>*
+ store <2 x i64> <i64 -7960984073709551616, i64 -5339544073709551616>, <2 x i64>* %159, align 8
+ %160 = getelementptr inbounds i8, i8* %112, i64 368
+ %161 = bitcast i8* %160 to <2 x i64>*
+ store <2 x i64> <i64 -2062744073709551616, i64 -8206744073709551616>, <2 x i64>* %161, align 8
+ %162 = getelementptr inbounds i8, i8* %112, i64 384
+ %163 = bitcast i8* %162 to <2 x i64>*
+ store <2 x i64> <i64 -5646744073709551616, i64 -2446744073709551616>, <2 x i64>* %163, align 8
+ %164 = getelementptr inbounds i8, i8* %112, i64 400
+ %165 = bitcast i8* %164 to <2 x i64>*
+ store <2 x i64> <i64 -8446744073709551616, i64 -5946744073709551616>, <2 x i64>* %165, align 8
+ %166 = getelementptr inbounds i8, i8* %112, i64 416
+ %167 = bitcast i8* %166 to <2 x i64>*
+ store <2 x i64> <i64 -2821744073709551616, i64 -8681119073709551616>, <2 x i64>* %167, align 8
+ %168 = getelementptr inbounds i8, i8* %112, i64 432
+ %169 = bitcast i8* %168 to <2 x i64>*
+ store <2 x i64> <i64 -6239712823709551616, i64 -3187955011209551616>, <2 x i64>* %169, align 8
+ %170 = getelementptr inbounds i8, i8* %112, i64 448
+ %171 = bitcast i8* %170 to <2 x i64>*
+ store <2 x i64> <i64 -8910000909647051616, i64 -6525815118631426616>, <2 x i64>* %171, align 8
+ %172 = getelementptr inbounds i8, i8* %112, i64 464
+ %173 = bitcast i8* %172 to <2 x i64>*
+ store <2 x i64> <i64 -3545582879861895366, i64 -9133518327554766459>, <2 x i64>* %173, align 8
+ %174 = getelementptr inbounds i8, i8* %112, i64 480
+ %175 = bitcast i8* %174 to <2 x i64>*
+ store <2 x i64> <i64 -6805211891016070170, i64 -3894828845342699809>, <2 x i64>* %175, align 8
+ %176 = getelementptr inbounds i8, i8* %112, i64 496
+ %177 = bitcast i8* %176 to <2 x i64>*
+ store <2 x i64> <i64 -256850038250986857, i64 -7078060301547948642>, <2 x i64>* %177, align 8
+ %178 = getelementptr inbounds i8, i8* %112, i64 512
+ %179 = bitcast i8* %178 to <2 x i64>*
+ store <2 x i64> <i64 -4235889358507547898, i64 -683175679707046969>, <2 x i64>* %179, align 8
+ %180 = getelementptr inbounds i8, i8* %112, i64 528
+ %181 = bitcast i8* %180 to <2 x i64>*
+ store <2 x i64> <i64 -7344513827457986211, i64 -4568956265895094860>, <2 x i64>* %181, align 8
+ %182 = getelementptr inbounds i8, i8* %112, i64 544
+ %183 = bitcast i8* %182 to <2 x i64>*
+ store <2 x i64> <i64 -1099509313941480671, i64 -7604722348854507275>, <2 x i64>* %183, align 8
+ %184 = getelementptr inbounds i8, i8* %112, i64 560
+ %185 = bitcast i8* %184 to <2 x i64>*
+ store <2 x i64> <i64 -4894216917640746190, i64 -1506085128623544834>, <2 x i64>* %185, align 8
+ %186 = getelementptr inbounds i8, i8* %112, i64 576
+ %187 = bitcast i8* %186 to <2 x i64>*
+ store <2 x i64> <i64 -7858832233030797377, i64 -5211854272861108818>, <2 x i64>* %187, align 8
+ %188 = getelementptr inbounds i8, i8* %112, i64 592
+ %189 = bitcast i8* %188 to <2 x i64>*
+ store <2 x i64> <i64 -1903131822648998118, i64 -8106986416796705680>, <2 x i64>* %189, align 8
+ %190 = getelementptr inbounds i8, i8* %112, i64 608
+ %191 = bitcast i8* %190 to <2 x i64>*
+ store <2 x i64> <i64 -5522047002568494196, i64 -2290872734783229841>, <2 x i64>* %191, align 8
+ store i8* %105, i8** bitcast (%"Array(UInt64)"** @"Float::Printer::Dragonbox::ImplInfo_Float32::CACHE" to i8**), align 8
tail call fastcc void @"~Float::Printer::Dragonbox::ImplInfo_Float64::CACHE:init"()
store i8* bitcast (void ()* @"~procProc(Nil)@src/gc/boehm.cr:351" to i8*), i8** getelementptr inbounds (%"->", %"->"* @"GC::curr_push_other_roots", i64 0, i32 0), align 8
store i8* null, i8** getelementptr inbounds (%"->", %"->"* @"GC::curr_push_other_roots", i64 0, i32 1), align 8
- %161 = tail call %Nil ()* @GC_get_push_other_roots()
- store %Nil ()* %161, %Nil ()** bitcast (%"->"* @"GC::prev_push_other_roots" to %Nil ()**), align 8
+ %192 = tail call %Nil ()* @GC_get_push_other_roots()
+ store %Nil ()* %192, %Nil ()** bitcast (%"->"* @"GC::prev_push_other_roots" to %Nil ()**), align 8
store i8* null, i8** getelementptr inbounds (%"->", %"->"* @"GC::prev_push_other_roots", i64 0, i32 1), align 8
tail call void @GC_set_push_other_roots(%Nil ()* bitcast (void ()* @"~procProc(Nil)@src/gc/boehm.cr:344" to %Nil ()*))
tail call fastcc void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" { i32 16, i1 false, i8* bitcast ([2 x i64]* @"Crystal::Hasher::seed" to i8*) })
@@ -1520,125 +1581,147 @@ next_def.i.i.i.i: ; preds = %"*String#byte_index
store i128 170141183460469231731687303715884105727, i128* @"Int128::MAX", align 8
store i128 0, i128* @"UInt128::MIN", align 8
store i128 -1, i128* @"UInt128::MAX", align 8
- %162 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %162, i1* nonnull @"STDOUT:init", i8* bitcast (void ()* @"~STDOUT:init" to i8*))
- %163 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %163, i1* nonnull @"STDERR:init", i8* bitcast (void ()* @"~STDERR:init" to i8*))
- %164 = load i8**, i8*** @ARGV_UNSAFE, align 8
- %165 = load i8*, i8** %164, align 8
- %166 = tail call fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %165)
- store %String* %166, %String** @PROGRAM_NAME, align 8
+ %193 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %193, i1* nonnull @"STDOUT:init", i8* bitcast (void ()* @"~STDOUT:init" to i8*))
+ %194 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %194, i1* nonnull @"STDERR:init", i8* bitcast (void ()* @"~STDERR:init" to i8*))
+ %195 = load i8**, i8*** @ARGV_UNSAFE, align 8
+ %196 = load i8*, i8** %195, align 8
+ %197 = tail call fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %196)
+ store %String* %197, %String** @PROGRAM_NAME, align 8
tail call fastcc void @"*spawn:name<String, &Proc(Nil)>:Fiber"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Fiber Clean Loop'" to %String*), %"->" { i8* bitcast (void ()* @"~procProc(Nil)@src/kernel.cr:552" to i8*), i8* null })
- %167 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %167, i1* nonnull @"Signal::setup_default_handlers:init", i8* bitcast (void ()* @"~Signal::setup_default_handlers:init" to i8*))
- %168 = atomicrmw xchg i8* getelementptr inbounds (%"Atomic::Flag", %"Atomic::Flag"* @"Signal::setup_default_handlers", i64 0, i32 0), i8 1 seq_cst, align 1
- %169 = icmp eq i8 %168, 0
- br i1 %169, label %exit.i, label %"*Signal::setup_default_handlers:Nil.exit"
+ %198 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %198, i1* nonnull @"Signal::setup_default_handlers:init", i8* bitcast (void ()* @"~Signal::setup_default_handlers:init" to i8*))
+ %199 = atomicrmw xchg i8* getelementptr inbounds (%"Atomic::Flag", %"Atomic::Flag"* @"Signal::setup_default_handlers", i64 0, i32 0), i8 1 seq_cst, align 1
+ %200 = icmp eq i8 %199, 0
+ br i1 %200, label %exit.i, label %"*Signal::setup_default_handlers:Nil.exit"
exit.i: ; preds = %"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit"
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(128) bitcast (%"struct.LibC::SigsetT"* @"Signal::sigset" to i8*), i8 0, i64 128, i1 false) #22
- %170 = tail call i32 @sigemptyset(%"struct.LibC::SigsetT"* nonnull @"Signal::sigset")
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(128) bitcast (%"struct.LibC::SigsetT"* @"Signal::sigset" to i8*), i8 0, i64 128, i1 false) #21
+ %201 = tail call i32 @sigemptyset(%"struct.LibC::SigsetT"* nonnull @"Signal::sigset")
tail call fastcc void @"*spawn:name<String, &Proc(Nil)>:Fiber"(%String* bitcast ({ i32, i32, i32, [12 x i8] }* @"'Signal Loop'" to %String*), %"->" { i8* bitcast (void ()* @"~procProc(Nil)@src/signal.cr:242" to i8*), i8* null })
%.unpack.i.i.i = load i8*, i8** @"LibC::SIG_IGN.0", align 8
- %171 = insertvalue %"->" undef, i8* %.unpack.i.i.i, 0
- %172 = insertvalue %"->" %171, i8* null, 1
- tail call fastcc void @"*Crystal::Signal::set<Signal, Proc(Int32, Nil)>:Nil"(i32 13, %"->" %172)
+ %202 = insertvalue %"->" undef, i8* %.unpack.i.i.i, 0
+ %203 = insertvalue %"->" %202, i8* null, 1
+ tail call fastcc void @"*Crystal::Signal::set<Signal, Proc(Int32, Nil)>:Nil"(i32 13, %"->" %203)
%.unpack.i.i1.i = load i8*, i8** getelementptr inbounds (%"->", %"->"* @"LibC::SIG_DFL", i64 0, i32 0), align 8
- %173 = insertvalue %"->" undef, i8* %.unpack.i.i1.i, 0
+ %204 = insertvalue %"->" undef, i8* %.unpack.i.i1.i, 0
%.unpack1.i.i2.i = load i8*, i8** getelementptr inbounds (%"->", %"->"* @"LibC::SIG_DFL", i64 0, i32 1), align 8
- %174 = insertvalue %"->" %173, i8* %.unpack1.i.i2.i, 1
- tail call fastcc void @"*Crystal::Signal::set<Signal, Proc(Int32, Nil)>:Nil"(i32 17, %"->" %174)
+ %205 = insertvalue %"->" %204, i8* %.unpack1.i.i2.i, 1
+ tail call fastcc void @"*Crystal::Signal::set<Signal, Proc(Int32, Nil)>:Nil"(i32 17, %"->" %205)
br label %"*Signal::setup_default_handlers:Nil.exit"
"*Signal::setup_default_handlers:Nil.exit": ; preds = %"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8).exit", %exit.i
- %175 = tail call fastcc %String* @"*Crystal::System::Env::get<String>:(String | Nil)"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'CRYSTAL_LOAD_DEBUG_...'" to %String*))
- %176 = icmp eq %String* %175, null
- br i1 %176, label %exit3, label %next_def
+ %206 = tail call fastcc %String* @"*ENV::[]?<String>:(String | Nil)"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'CRYSTAL_LOAD_DEBUG_...'" to %String*))
+ %207 = icmp eq %String* %206, null
+ br i1 %207, label %exit3, label %next_def
then: ; preds = %next_def, %"*String#==<String>:Bool.exit"
- tail call fastcc void @"*Exception::CallStack::load_debug_info:(Array(Tuple(UInt64, UInt64, String)) | Int32 | Nil)"()
+ tail call fastcc void @"*Exception::CallStack::load_debug_info:(Int32 | Nil)"()
br label %exit3
next_def: ; preds = %"*Signal::setup_default_handlers:Nil.exit"
- %177 = icmp eq %String* %175, bitcast ({ i32, i32, i32, [2 x i8] }* @"'1'" to %String*)
- br i1 %177, label %then, label %else.i
+ %208 = icmp eq %String* %206, bitcast ({ i32, i32, i32, [2 x i8] }* @"'1'" to %String*)
+ br i1 %208, label %then, label %else.i
else.i: ; preds = %next_def
- %178 = getelementptr inbounds %String, %String* %175, i64 0, i32 1
- %179 = load i32, i32* %178, align 4
- %180 = icmp eq i32 %179, 1
- br i1 %180, label %"*String#==<String>:Bool.exit", label %exit3
+ %209 = getelementptr inbounds %String, %String* %206, i64 0, i32 1
+ %210 = load i32, i32* %209, align 4
+ %211 = icmp eq i32 %210, 1
+ br i1 %211, label %"*String#==<String>:Bool.exit", label %exit3
"*String#==<String>:Bool.exit": ; preds = %else.i
- %181 = getelementptr inbounds %String, %String* %175, i64 0, i32 3
- %lhsc = load i8, i8* %181, align 1
- %182 = icmp eq i8 %lhsc, 49
- br i1 %182, label %then, label %exit3
+ %212 = getelementptr inbounds %String, %String* %206, i64 0, i32 3
+ %lhsc = load i8, i8* %212, align 1
+ %213 = icmp eq i8 %lhsc, 49
+ br i1 %213, label %then, label %exit3
exit3: ; preds = %else.i, %"*Signal::setup_default_handlers:Nil.exit", %"*String#==<String>:Bool.exit", %then
- %183 = bitcast %"struct.LibC::StackT"* %0 to i8*
- call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %183)
- %184 = bitcast %"struct.LibC::Sigaction"* %4 to i8*
- call void @llvm.lifetime.start.p0i8(i64 152, i8* nonnull %184)
- %185 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %185, i1* nonnull @"Signal::setup_segfault_handler:init", i8* bitcast (void ()* @"~Signal::setup_segfault_handler:init" to i8*))
- %186 = atomicrmw xchg i8* getelementptr inbounds (%"Atomic::Flag", %"Atomic::Flag"* @"Signal::setup_segfault_handler", i64 0, i32 0), i8 1 seq_cst, align 1
- %187 = icmp eq i8 %186, 0
- br i1 %187, label %exit.i.i, label %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
+ %214 = bitcast %"struct.LibC::StackT"* %0 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %214)
+ %215 = bitcast %"struct.LibC::Sigaction"* %5 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 152, i8* nonnull %215)
+ %216 = load i8*, i8** @"~ONCE_STATE", align 8
+ tail call void @__crystal_once(i8* %216, i1* nonnull @"Signal::setup_segfault_handler:init", i8* bitcast (void ()* @"~Signal::setup_segfault_handler:init" to i8*))
+ %217 = atomicrmw xchg i8* getelementptr inbounds (%"Atomic::Flag", %"Atomic::Flag"* @"Signal::setup_segfault_handler", i64 0, i32 0), i8 1 seq_cst, align 1
+ %218 = icmp eq i8 %217, 0
+ br i1 %218, label %exit.i.i, label %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
exit.i.i: ; preds = %exit3
- %.fca.2.insert30.fca.0.gep.i.i255 = bitcast %"struct.LibC::StackT"* %0 to i8**
+ %.fca.2.insert30.fca.0.gep.i.i278 = bitcast %"struct.LibC::StackT"* %0 to i8**
%.fca.2.insert30.fca.1.gep.i.i = getelementptr inbounds %"struct.LibC::StackT", %"struct.LibC::StackT"* %0, i64 0, i32 1
%.fca.2.insert30.fca.2.gep.i.i = getelementptr inbounds %"struct.LibC::StackT", %"struct.LibC::StackT"* %0, i64 0, i32 2
- %188 = tail call dereferenceable_or_null(8192) i8* @malloc(i64 8192)
- store i8* %188, i8** %.fca.2.insert30.fca.0.gep.i.i255, align 8
+ %219 = tail call dereferenceable_or_null(8192) i8* @malloc(i64 8192)
+ store i8* %219, i8** %.fca.2.insert30.fca.0.gep.i.i278, align 8
store i64 8192, i64* %.fca.2.insert30.fca.2.gep.i.i, align 8
store i32 0, i32* %.fca.2.insert30.fca.1.gep.i.i, align 8
- %189 = call i32 @sigaltstack(%"struct.LibC::StackT"* nonnull %0, %"struct.LibC::StackT"* null)
- %.fca.3.insert.fca.2.gep.i.i = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %4, i64 0, i32 2
- %.fca.3.insert.fca.3.gep.i.i = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %4, i64 0, i32 3
+ %220 = call i32 @sigaltstack(%"struct.LibC::StackT"* nonnull %0, %"struct.LibC::StackT"* null)
+ %.fca.3.insert.fca.2.gep.i.i = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %5, i64 0, i32 2
+ %.fca.3.insert.fca.3.gep.i.i = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %5, i64 0, i32 3
store i8* null, i8** %.fca.3.insert.fca.3.gep.i.i, align 8
- %190 = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %4, i64 0, i32 1
- %191 = bitcast %"struct.LibC::SigsetT"* %190 to i8*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %191, i8 0, i64 128, i1 false)
+ %221 = getelementptr inbounds %"struct.LibC::Sigaction", %"struct.LibC::Sigaction"* %5, i64 0, i32 1
+ %222 = bitcast %"struct.LibC::SigsetT"* %221 to i8*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(136) %222, i8 0, i64 128, i1 false)
store i32 134217732, i32* %.fca.3.insert.fca.2.gep.i.i, align 8
- %192 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %192, i1* nonnull @"Signal::segfault_handler:init", i8* bitcast (void ()* @"~Signal::segfault_handler:init" to i8*))
+ %223 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %223, i1* nonnull @"Signal::segfault_handler:init", i8* bitcast (void ()* @"~Signal::segfault_handler:init" to i8*))
%.b.i.i = load i1, i1* @"Signal::segfault_handler", align 1
- %193 = select i1 %.b.i.i, %"->" { i8* bitcast (void (i32, %"struct.LibC::SiginfoT"*, i8*)* @"~procProc(Int32, Pointer(LibC::SiginfoT), Pointer(Void), Nil)@src/signal.cr:127" to i8*), i8* null }, %"->" zeroinitializer
- %194 = extractvalue %"->" %193, 1
- %195 = icmp eq i8* %194, null
- br i1 %195, label %"~check_proc_is_not_closure.exit.i.i", label %ctx_is_not_null.i.i.i
+ %224 = select i1 %.b.i.i, %"->" { i8* bitcast (void (i32, %"struct.LibC::SiginfoT"*, i8*)* @"~procProc(Int32, Pointer(LibC::SiginfoT), Pointer(Void), Nil)@src/signal.cr:127" to i8*), i8* null }, %"->" zeroinitializer
+ %225 = extractvalue %"->" %224, 1
+ %226 = icmp eq i8* %225, null
+ br i1 %226, label %"~check_proc_is_not_closure.exit.i.i", label %ctx_is_not_null.i.i.i
ctx_is_not_null.i.i.i: ; preds = %exit.i.i
call fastcc void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [38 x i8] }* @"'passing a closure t...'" to %String*))
unreachable
"~check_proc_is_not_closure.exit.i.i": ; preds = %exit.i.i
- %196 = extractvalue %"->" %193, 0
- %197 = bitcast %"struct.LibC::Sigaction"* %4 to i8**
- store i8* %196, i8** %197, align 8
- %198 = call i32 @sigemptyset(%"struct.LibC::SigsetT"* nonnull %190)
- %199 = call i32 @sigaction(i32 11, %"struct.LibC::Sigaction"* nonnull %4, %"struct.LibC::Sigaction"* null)
- %200 = call i32 @sigaction(i32 7, %"struct.LibC::Sigaction"* nonnull %4, %"struct.LibC::Sigaction"* null)
+ %227 = extractvalue %"->" %224, 0
+ %228 = bitcast %"struct.LibC::Sigaction"* %5 to i8**
+ store i8* %227, i8** %228, align 8
+ %229 = call i32 @sigemptyset(%"struct.LibC::SigsetT"* nonnull %221)
+ %230 = call i32 @sigaction(i32 11, %"struct.LibC::Sigaction"* nonnull %5, %"struct.LibC::Sigaction"* null)
+ %231 = call i32 @sigaction(i32 7, %"struct.LibC::Sigaction"* nonnull %5, %"struct.LibC::Sigaction"* null)
br label %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit": ; preds = %exit3, %"~check_proc_is_not_closure.exit.i.i"
- %201 = bitcast %"struct.LibC::Sigaction"* %4 to i8*
- %202 = bitcast %"struct.LibC::StackT"* %0 to i8*
- call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %202)
- call void @llvm.lifetime.end.p0i8(i64 152, i8* nonnull %201)
- %203 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %203, i1* nonnull @"Process::INITIAL_PWD:init", i8* bitcast (void ()* @"~Process::INITIAL_PWD:init" to i8*))
- %204 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %204, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
- %205 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
- %206 = call fastcc %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* %205, %String* bitcast ({ i32, i32, i32, [53 x i8] }* @"'/home/johannes/src/...'.27" to %String*))
- %207 = bitcast [8 x i8]* %9 to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %207)
- %oldret27.i.i.i.i2.i = insertvalue %"Slice(UInt8)" { i32 8, i1 false, i8* undef }, i8* %207, 2
+ %232 = bitcast %"struct.LibC::Sigaction"* %5 to i8*
+ %233 = bitcast %"struct.LibC::StackT"* %0 to i8*
+ call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %233)
+ call void @llvm.lifetime.end.p0i8(i64 152, i8* nonnull %232)
+ %234 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %234, i1* nonnull @"Process::INITIAL_PWD:init", i8* bitcast (void ()* @"~Process::INITIAL_PWD:init" to i8*))
+ %235 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %235, i1* nonnull @"Exception::CallStack::skip:init", i8* bitcast (void ()* @"~Exception::CallStack::skip:init" to i8*))
+ %236 = load %"Array(String)"*, %"Array(String)"** @"Exception::CallStack::skip", align 8
+ call fastcc void @"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil)"(%"Array(String)"* %236)
+ %237 = getelementptr inbounds %"Array(String)", %"Array(String)"* %236, i64 0, i32 4
+ %238 = load %String**, %String*** %237, align 8
+ %239 = getelementptr inbounds %"Array(String)", %"Array(String)"* %236, i64 0, i32 1
+ %240 = load i32, i32* %239, align 4
+ %241 = sext i32 %240 to i64
+ %242 = getelementptr inbounds %String*, %String** %238, i64 %241
+ store %String* bitcast ({ i32, i32, i32, [53 x i8] }* @"'/home/johannes/src/...'.27" to %String*), %String** %242, align 8
+ %243 = load i32, i32* %239, align 4
+ %244 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %243, i32 1)
+ %245 = extractvalue { i32, i1 } %244, 1
+ br i1 %245, label %overflow.i.i.i44, label %"*Exception::CallStack::skip<String>:Nil.exit45", !prof !0
+
+overflow.i.i.i44: ; preds = %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
+ call void @__crystal_raise_overflow()
+ unreachable
+
+"*Exception::CallStack::skip<String>:Nil.exit45": ; preds = %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
+ %246 = extractvalue { i32, i1 } %244, 0
+ %247 = bitcast %"Array(String)"* %236 to i8*
+ %sunkaddr279 = getelementptr inbounds i8, i8* %247, i64 4
+ %248 = bitcast i8* %sunkaddr279 to i32*
+ store i32 %246, i32* %248, align 4
+ %249 = bitcast [8 x i8]* %9 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %249)
+ %oldret27.i.i.i.i2.i = insertvalue %"Slice(UInt8)" { i32 8, i1 false, i8* undef }, i8* %249, 2
call fastcc void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %oldret27.i.i.i.i2.i)
- %.unpack.i.i.i35.i.i3.i = load i8, i8* %207, align 1
+ %.unpack.i.i.i35.i.i3.i = load i8, i8* %249, align 1
%.elt1.i.i.i36.i.i4.i = getelementptr inbounds [8 x i8], [8 x i8]* %9, i64 0, i64 1
%.unpack2.i.i.i37.i.i5.i = load i8, i8* %.elt1.i.i.i36.i.i4.i, align 1
%.elt3.i.i.i38.i.i6.i = getelementptr inbounds [8 x i8], [8 x i8]* %9, i64 0, i64 2
@@ -1675,12 +1758,12 @@ ctx_is_not_null.i.i.i: ; preds = %exit.i.i
%x.sroa.2.0.insert.mask.i.i.i69.i.i37.i = or i64 %x.sroa.4.0.insert.insert.i.i.i68.i.i36.i, %x.sroa.6.0.insert.shift.i.i.i55.i.i23.i
%x.sroa.0.0.insert.mask.i.i.i70.i.i38.i = or i64 %x.sroa.2.0.insert.mask.i.i.i69.i.i37.i, %x.sroa.7.0.insert.shift.i.i.i53.i.i21.i
%x.sroa.0.0.insert.insert.i.i.i71.i.i39.i = or i64 %x.sroa.0.0.insert.mask.i.i.i70.i.i38.i, %x.sroa.8.0.insert.shift.i.i.i51.i.i19.i
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %207)
- %208 = bitcast [8 x i8]* %6 to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %208)
- %oldret27.i.i.i.i.i = insertvalue %"Slice(UInt8)" { i32 8, i1 false, i8* undef }, i8* %208, 2
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %249)
+ %250 = bitcast [8 x i8]* %6 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %250)
+ %oldret27.i.i.i.i.i = insertvalue %"Slice(UInt8)" { i32 8, i1 false, i8* undef }, i8* %250, 2
call fastcc void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %oldret27.i.i.i.i.i)
- %.unpack.i.i.i35.i.i.i = load i8, i8* %208, align 1
+ %.unpack.i.i.i35.i.i.i = load i8, i8* %250, align 1
%.elt1.i.i.i36.i.i.i = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 1
%.unpack2.i.i.i37.i.i.i = load i8, i8* %.elt1.i.i.i36.i.i.i, align 1
%.elt3.i.i.i38.i.i.i = getelementptr inbounds [8 x i8], [8 x i8]* %6, i64 0, i64 2
@@ -1703,587 +1786,587 @@ ctx_is_not_null.i.i.i: ; preds = %exit.i.i
%x.sroa.3.0.insert.ext.i.i.i60.i.i.i = zext i8 %.unpack4.i.i.i39.i.i.i to i64
%x.sroa.2.0.insert.ext.i.i.i62.i.i.i = zext i8 %.unpack2.i.i.i37.i.i.i to i64
%x.sroa.0.0.insert.ext.i.i.i64.i.i.i = zext i8 %.unpack.i.i.i35.i.i.i to i64
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %208)
- %209 = call i8* @GC_malloc_atomic(i64 24)
- %210 = getelementptr inbounds i8, i8* %209, i64 4
- %211 = bitcast i8* %210 to i32*
- store i32 0, i32* %211, align 4
- %212 = bitcast i8* %209 to i32*
- store i32 232, i32* %212, align 4
- %213 = getelementptr inbounds i8, i8* %209, i64 8
- %214 = bitcast i8* %213 to i64*
- %215 = getelementptr inbounds i8, i8* %209, i64 16
- %216 = bitcast i8* %215 to i64*
- %217 = shl i64 %x.sroa.8.0.insert.ext.i.i.i50.i.i.i, 57
- %218 = shl nuw nsw i64 %x.sroa.7.0.insert.ext.i.i.i52.i.i.i, 49
- %219 = shl nuw nsw i64 %x.sroa.6.0.insert.ext.i.i.i54.i.i.i, 41
- %220 = shl nuw nsw i64 %x.sroa.5.0.insert.ext.i.i.i56.i.i.i, 33
- %221 = shl nuw nsw i64 %x.sroa.4.0.insert.ext.i.i.i58.i.i.i, 25
- %222 = shl nuw nsw i64 %x.sroa.3.0.insert.ext.i.i.i60.i.i.i, 17
- %223 = shl nuw nsw i64 %x.sroa.2.0.insert.ext.i.i.i62.i.i.i, 9
- %224 = shl nuw nsw i64 %x.sroa.0.0.insert.ext.i.i.i64.i.i.i, 1
- %225 = or i64 %224, %223
- %226 = or i64 %225, %222
- %227 = or i64 %226, %221
- %228 = or i64 %227, %220
- %229 = or i64 %228, %219
- %230 = or i64 %229, %218
- %231 = or i64 %230, %217
- %232 = or i64 %231, 1
- store i64 %232, i64* %216, align 8
- %233 = add i64 %232, %x.sroa.0.0.insert.insert.i.i.i71.i.i39.i
- %234 = mul i64 %233, 6364136223846793005
- %235 = add i64 %234, %232
- store i64 %235, i64* %214, align 8
- store i8* %209, i8** bitcast (%"Random::PCG32"** @"Random::DEFAULT" to i8**), align 8
- %236 = call i8* @GC_malloc(i64 56)
- %237 = bitcast i8* %236 to i32*
- %238 = getelementptr inbounds i8, i8* %236, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %238, i8 0, i64 36, i1 false)
- store i32 40, i32* %237, align 4
- %239 = getelementptr inbounds i8, i8* %236, i64 8
- %.repack.i.i.i = getelementptr inbounds i8, i8* %236, i64 40
- %240 = getelementptr inbounds i8, i8* %236, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %239, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %240, align 1
- store i8* %236, i8** bitcast (%"Hash(Tuple(UInt64, Symbol), Bool)"** @"Reference::ExecRecursive::exec_recursive" to i8**), align 8
- %241 = call i8* @GC_malloc(i64 56)
- %242 = bitcast i8* %241 to i32*
- %243 = getelementptr inbounds i8, i8* %241, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %243, i8 0, i64 36, i1 false)
- store i32 41, i32* %242, align 4
- %244 = getelementptr inbounds i8, i8* %241, i64 8
- %.repack.i.i.i39 = getelementptr inbounds i8, i8* %241, i64 40
- %245 = getelementptr inbounds i8, i8* %241, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %244, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i39, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %245, align 1
- store i8* %241, i8** bitcast (%"Hash(UInt64, UInt64)"** @"Reference::ExecRecursiveClone::exec_recursive" to i8**), align 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(128) bitcast (%"struct.LibC::SigsetT"* @"Signal::sigset" to i8*), i8 0, i64 128, i1 false) #22
- %246 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %246, i1* nonnull @"Signal::setup_default_handlers:init", i8* bitcast (void ()* @"~Signal::setup_default_handlers:init" to i8*))
- %247 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %247, i1* nonnull @"Signal::setup_segfault_handler:init", i8* bitcast (void ()* @"~Signal::setup_segfault_handler:init" to i8*))
- %248 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %248, i1* nonnull @"Signal::segfault_handler:init", i8* bitcast (void ()* @"~Signal::segfault_handler:init" to i8*))
- %249 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %249, i1* nonnull @"Crystal::Signal::pipe:init", i8* bitcast (void ()* @"~Crystal::Signal::pipe:init" to i8*))
- %250 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %250, i1* nonnull @"Crystal::Signal::handlers:init", i8* bitcast (void ()* @"~Crystal::Signal::handlers:init" to i8*))
- %251 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %251, i1* nonnull @"Crystal::Signal::mutex:init", i8* bitcast (void ()* @"~Crystal::Signal::mutex:init" to i8*))
- %252 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %252, i1* nonnull @"Crystal::SignalChildHandler::pending:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::pending:init" to i8*))
- %253 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %253, i1* nonnull @"Crystal::SignalChildHandler::waiting:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::waiting:init" to i8*))
- %254 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %254, i1* nonnull @"Crystal::SignalChildHandler::mutex:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::mutex:init" to i8*))
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %250)
+ %251 = call i8* @GC_malloc_atomic(i64 24)
+ %252 = getelementptr inbounds i8, i8* %251, i64 4
+ %253 = bitcast i8* %252 to i32*
+ store i32 0, i32* %253, align 4
+ %254 = bitcast i8* %251 to i32*
+ store i32 232, i32* %254, align 4
+ %255 = getelementptr inbounds i8, i8* %251, i64 8
+ %256 = bitcast i8* %255 to i64*
+ %257 = getelementptr inbounds i8, i8* %251, i64 16
+ %258 = bitcast i8* %257 to i64*
+ %259 = shl i64 %x.sroa.8.0.insert.ext.i.i.i50.i.i.i, 57
+ %260 = shl nuw nsw i64 %x.sroa.7.0.insert.ext.i.i.i52.i.i.i, 49
+ %261 = shl nuw nsw i64 %x.sroa.6.0.insert.ext.i.i.i54.i.i.i, 41
+ %262 = shl nuw nsw i64 %x.sroa.5.0.insert.ext.i.i.i56.i.i.i, 33
+ %263 = shl nuw nsw i64 %x.sroa.4.0.insert.ext.i.i.i58.i.i.i, 25
+ %264 = shl nuw nsw i64 %x.sroa.3.0.insert.ext.i.i.i60.i.i.i, 17
+ %265 = shl nuw nsw i64 %x.sroa.2.0.insert.ext.i.i.i62.i.i.i, 9
+ %266 = shl nuw nsw i64 %x.sroa.0.0.insert.ext.i.i.i64.i.i.i, 1
+ %267 = or i64 %266, %265
+ %268 = or i64 %267, %264
+ %269 = or i64 %268, %263
+ %270 = or i64 %269, %262
+ %271 = or i64 %270, %261
+ %272 = or i64 %271, %260
+ %273 = or i64 %272, %259
+ %274 = or i64 %273, 1
+ store i64 %274, i64* %258, align 8
+ %275 = add i64 %274, %x.sroa.0.0.insert.insert.i.i.i71.i.i39.i
+ %276 = mul i64 %275, 6364136223846793005
+ %277 = add i64 %276, %274
+ store i64 %277, i64* %256, align 8
+ store i8* %251, i8** bitcast (%"Random::PCG32"** @"Random::DEFAULT" to i8**), align 8
+ %278 = call i8* @GC_malloc(i64 56)
+ %279 = bitcast i8* %278 to i32*
+ %280 = getelementptr inbounds i8, i8* %278, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %280, i8 0, i64 36, i1 false)
+ store i32 40, i32* %279, align 4
+ %281 = getelementptr inbounds i8, i8* %278, i64 8
+ %.repack.i.i.i = getelementptr inbounds i8, i8* %278, i64 40
+ %282 = getelementptr inbounds i8, i8* %278, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %281, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %282, align 1
+ store i8* %278, i8** bitcast (%"Hash(Tuple(UInt64, Symbol), Bool)"** @"Reference::ExecRecursive::exec_recursive" to i8**), align 8
+ %283 = call i8* @GC_malloc(i64 56)
+ %284 = bitcast i8* %283 to i32*
+ %285 = getelementptr inbounds i8, i8* %283, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %285, i8 0, i64 36, i1 false)
+ store i32 41, i32* %284, align 4
+ %286 = getelementptr inbounds i8, i8* %283, i64 8
+ %.repack.i.i.i46 = getelementptr inbounds i8, i8* %283, i64 40
+ %287 = getelementptr inbounds i8, i8* %283, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %286, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i46, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %287, align 1
+ store i8* %283, i8** bitcast (%"Hash(UInt64, UInt64)"** @"Reference::ExecRecursiveClone::exec_recursive" to i8**), align 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 16 dereferenceable(128) bitcast (%"struct.LibC::SigsetT"* @"Signal::sigset" to i8*), i8 0, i64 128, i1 false) #21
+ %288 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %288, i1* nonnull @"Signal::setup_default_handlers:init", i8* bitcast (void ()* @"~Signal::setup_default_handlers:init" to i8*))
+ %289 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %289, i1* nonnull @"Signal::setup_segfault_handler:init", i8* bitcast (void ()* @"~Signal::setup_segfault_handler:init" to i8*))
+ %290 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %290, i1* nonnull @"Signal::segfault_handler:init", i8* bitcast (void ()* @"~Signal::segfault_handler:init" to i8*))
+ %291 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %291, i1* nonnull @"Crystal::Signal::pipe:init", i8* bitcast (void ()* @"~Crystal::Signal::pipe:init" to i8*))
+ %292 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %292, i1* nonnull @"Crystal::Signal::handlers:init", i8* bitcast (void ()* @"~Crystal::Signal::handlers:init" to i8*))
+ %293 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %293, i1* nonnull @"Crystal::Signal::mutex:init", i8* bitcast (void ()* @"~Crystal::Signal::mutex:init" to i8*))
+ %294 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %294, i1* nonnull @"Crystal::SignalChildHandler::pending:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::pending:init" to i8*))
+ %295 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %295, i1* nonnull @"Crystal::SignalChildHandler::waiting:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::waiting:init" to i8*))
+ %296 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %296, i1* nonnull @"Crystal::SignalChildHandler::mutex:init", i8* bitcast (void ()* @"~Crystal::SignalChildHandler::mutex:init" to i8*))
store i1 true, i1* @"Time::DAYS_MONTH", align 1
store i1 true, i1* @"Time::DAYS_MONTH_LEAP", align 1
- %255 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %255, i1* nonnull @"Time::Location::UTC:init", i8* bitcast (void ()* @"~Time::Location::UTC:init" to i8*))
- %256 = load %"Time::Location"*, %"Time::Location"** @"Time::Location::UTC", align 8
- %oldret7.i = insertvalue %Time { i64 62135596800, i32 0, %"Time::Location"* undef }, %"Time::Location"* %256, 2
+ %297 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %297, i1* nonnull @"Time::Location::UTC:init", i8* bitcast (void ()* @"~Time::Location::UTC:init" to i8*))
+ %298 = load %"Time::Location"*, %"Time::Location"** @"Time::Location::UTC", align 8
+ %oldret7.i = insertvalue %Time { i64 62135596800, i32 0, %"Time::Location"* undef }, %"Time::Location"* %298, 2
store %Time %oldret7.i, %Time* @"Time::UNIX_EPOCH", align 16
- %257 = call i8* @GC_malloc(i64 24)
- %258 = bitcast i8* %257 to i32*
- %259 = getelementptr inbounds i8, i8* %257, i64 12
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %259, i8 0, i64 12, i1 false)
- store i32 2, i32* %258, align 4
- %260 = getelementptr inbounds i8, i8* %257, i64 4
- %261 = bitcast i8* %260 to i32*
- store i32 0, i32* %261, align 4
- %262 = getelementptr inbounds i8, i8* %257, i64 8
- %263 = bitcast i8* %262 to i32*
- store i32 12, i32* %263, align 4
- %264 = call i8* @GC_malloc(i64 96)
- %265 = getelementptr inbounds i8, i8* %257, i64 16
- %266 = bitcast i8* %265 to i8**
- store i8* %264, i8** %266, align 8
- store i32 12, i32* %261, align 4
- %.cast.i40 = bitcast i8* %264 to %String**
- store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'January'" to %String*), %String** %.cast.i40, align 8
- %267 = getelementptr inbounds i8, i8* %264, i64 8
- %268 = bitcast i8* %267 to %String**
- store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'February'" to %String*), %String** %268, align 8
- %269 = getelementptr inbounds i8, i8* %264, i64 16
- %270 = bitcast i8* %269 to %String**
- store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'March'" to %String*), %String** %270, align 8
- %271 = getelementptr inbounds i8, i8* %264, i64 24
- %272 = bitcast i8* %271 to %String**
- store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'April'" to %String*), %String** %272, align 8
- %273 = getelementptr inbounds i8, i8* %264, i64 32
- %274 = bitcast i8* %273 to %String**
- store %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'May'" to %String*), %String** %274, align 8
- %275 = getelementptr inbounds i8, i8* %264, i64 40
- %276 = bitcast i8* %275 to %String**
- store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'June'" to %String*), %String** %276, align 8
- %277 = getelementptr inbounds i8, i8* %264, i64 48
- %278 = bitcast i8* %277 to %String**
- store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'July'" to %String*), %String** %278, align 8
- %279 = getelementptr inbounds i8, i8* %264, i64 56
- %280 = bitcast i8* %279 to %String**
- store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'August'" to %String*), %String** %280, align 8
- %281 = getelementptr inbounds i8, i8* %264, i64 64
- %282 = bitcast i8* %281 to %String**
- store %String* bitcast ({ i32, i32, i32, [10 x i8] }* @"'September'" to %String*), %String** %282, align 8
- %283 = getelementptr inbounds i8, i8* %264, i64 72
- %284 = bitcast i8* %283 to %String**
- store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'October'" to %String*), %String** %284, align 8
- %285 = getelementptr inbounds i8, i8* %264, i64 80
- %286 = bitcast i8* %285 to %String**
- store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'November'" to %String*), %String** %286, align 8
- %287 = getelementptr inbounds i8, i8* %264, i64 88
- %288 = bitcast i8* %287 to %String**
- store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'December'" to %String*), %String** %288, align 8
- store i8* %257, i8** bitcast (%"Array(String)"** @"Time::Format::MONTH_NAMES" to i8**), align 8
- %289 = call i8* @GC_malloc(i64 24)
- %290 = bitcast i8* %289 to i32*
- %291 = getelementptr inbounds i8, i8* %289, i64 12
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %291, i8 0, i64 12, i1 false)
- store i32 2, i32* %290, align 4
- %292 = getelementptr inbounds i8, i8* %289, i64 4
- %293 = bitcast i8* %292 to i32*
- store i32 0, i32* %293, align 4
- %294 = getelementptr inbounds i8, i8* %289, i64 8
- %295 = bitcast i8* %294 to i32*
- store i32 7, i32* %295, align 4
- %296 = call i8* @GC_malloc(i64 56)
- %297 = getelementptr inbounds i8, i8* %289, i64 16
- %298 = bitcast i8* %297 to i8**
- store i8* %296, i8** %298, align 8
- store i32 7, i32* %293, align 4
- %.cast.i41 = bitcast i8* %296 to %String**
- store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Sunday'" to %String*), %String** %.cast.i41, align 8
- %299 = getelementptr inbounds i8, i8* %296, i64 8
- %300 = bitcast i8* %299 to %String**
- store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Monday'" to %String*), %String** %300, align 8
- %301 = getelementptr inbounds i8, i8* %296, i64 16
- %302 = bitcast i8* %301 to %String**
- store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'Tuesday'" to %String*), %String** %302, align 8
- %303 = getelementptr inbounds i8, i8* %296, i64 24
- %304 = bitcast i8* %303 to %String**
- store %String* bitcast ({ i32, i32, i32, [10 x i8] }* @"'Wednesday'" to %String*), %String** %304, align 8
- %305 = getelementptr inbounds i8, i8* %296, i64 32
- %306 = bitcast i8* %305 to %String**
- store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'Thursday'" to %String*), %String** %306, align 8
- %307 = getelementptr inbounds i8, i8* %296, i64 40
- %308 = bitcast i8* %307 to %String**
- store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Friday'" to %String*), %String** %308, align 8
- %309 = getelementptr inbounds i8, i8* %296, i64 48
+ %299 = call i8* @GC_malloc(i64 24)
+ %300 = bitcast i8* %299 to i32*
+ %301 = getelementptr inbounds i8, i8* %299, i64 12
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %301, i8 0, i64 12, i1 false)
+ store i32 2, i32* %300, align 4
+ %302 = getelementptr inbounds i8, i8* %299, i64 4
+ %303 = bitcast i8* %302 to i32*
+ store i32 0, i32* %303, align 4
+ %304 = getelementptr inbounds i8, i8* %299, i64 8
+ %305 = bitcast i8* %304 to i32*
+ store i32 12, i32* %305, align 4
+ %306 = call i8* @GC_malloc(i64 96)
+ %307 = getelementptr inbounds i8, i8* %299, i64 16
+ %308 = bitcast i8* %307 to i8**
+ store i8* %306, i8** %308, align 8
+ store i32 12, i32* %303, align 4
+ %.cast.i47 = bitcast i8* %306 to %String**
+ store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'January'" to %String*), %String** %.cast.i47, align 8
+ %309 = getelementptr inbounds i8, i8* %306, i64 8
%310 = bitcast i8* %309 to %String**
- store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'Saturday'" to %String*), %String** %310, align 8
- store i8* %289, i8** bitcast (%"Array(String)"** @"Time::Format::DAY_NAMES" to i8**), align 8
- %311 = call i8* @GC_malloc(i64 56)
- %312 = bitcast i8* %311 to i32*
- %313 = getelementptr inbounds i8, i8* %311, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %313, i8 0, i64 36, i1 false)
- store i32 55, i32* %312, align 4
- %314 = getelementptr inbounds i8, i8* %311, i64 8
- %.repack.i.i.i42 = getelementptr inbounds i8, i8* %311, i64 40
- %315 = getelementptr inbounds i8, i8* %311, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %314, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i42, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %315, align 1
- store i8* %311, i8** bitcast (%"Hash(String, NamedTuple(time: Time, location: Time::Location))"** @"Time::Location::location_cache" to i8**), align 8
- %316 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %316, i1* nonnull @"Time::Location::Zone::UTC:init", i8* bitcast (void ()* @"~Time::Location::Zone::UTC:init" to i8*))
- %317 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %317, i1* nonnull @"Time::Location::UTC:init", i8* bitcast (void ()* @"~Time::Location::UTC:init" to i8*))
- %318 = call i8* @GC_malloc(i64 56)
- %319 = bitcast i8* %318 to %"Hash(String, Int32)"*
- %320 = bitcast i8* %318 to i32*
- %321 = getelementptr inbounds i8, i8* %318, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %321, i8 0, i64 36, i1 false)
- store i32 57, i32* %320, align 4
- %322 = getelementptr inbounds i8, i8* %318, i64 8
- %.repack.i.i.i43 = getelementptr inbounds i8, i8* %318, i64 40
- %323 = getelementptr inbounds i8, i8* %318, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %322, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i43, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %323, align 1
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'acap'" to %String*), i32 674)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'afp'" to %String*), i32 548)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'dict'" to %String*), i32 2628)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'dns'" to %String*), i32 53)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ftp'" to %String*), i32 21)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ftps'" to %String*), i32 990)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'git'" to %String*), i32 9418)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'gopher'" to %String*), i32 70)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'http'" to %String*), i32 80)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'https'" to %String*), i32 443)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'imap'" to %String*), i32 143)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ipp'" to %String*), i32 631)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ipps'" to %String*), i32 631)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'irc'" to %String*), i32 194)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ircs'" to %String*), i32 6697)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ldap'" to %String*), i32 389)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'ldaps'" to %String*), i32 636)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'mms'" to %String*), i32 1755)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'msrp'" to %String*), i32 2855)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'mtqp'" to %String*), i32 1038)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'nfs'" to %String*), i32 111)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'nntp'" to %String*), i32 119)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'nntps'" to %String*), i32 563)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'pop'" to %String*), i32 110)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'prospero'" to %String*), i32 1525)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'redis'" to %String*), i32 6379)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rsync'" to %String*), i32 873)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'rtsp'" to %String*), i32 554)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rtsps'" to %String*), i32 322)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rtspu'" to %String*), i32 5005)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'scp'" to %String*), i32 22)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'sftp'" to %String*), i32 22)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'smb'" to %String*), i32 445)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'snmp'" to %String*), i32 161)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ssh'" to %String*), i32 22)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'svn'" to %String*), i32 3690)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'telnet'" to %String*), i32 23)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'ventrilo'" to %String*), i32 3784)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'vnc'" to %String*), i32 5900)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'wais'" to %String*), i32 210)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'ws'" to %String*), i32 80)
- call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %319, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'wss'" to %String*), i32 443)
- store i8* %318, i8** bitcast (%"Hash(String, Int32)"** @"URI::default_ports" to i8**), align 8
- %324 = call i8* @GC_malloc(i64 72)
- %325 = getelementptr inbounds i8, i8* %324, i64 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %325, i8 0, i64 20, i1 false) #22
- store i8* %324, i8** bitcast (%"Log::Metadata"** @"Log::Metadata::empty" to i8**), align 8
- %326 = load %String*, %String** @PROGRAM_NAME, align 8
- %327 = getelementptr inbounds %String, %String* %326, i64 0, i32 1
- %328 = load i32, i32* %327, align 4
- %329 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %328, i32 -1)
- %330 = extractvalue { i32, i1 } %329, 0
- %331 = extractvalue { i32, i1 } %329, 1
- br i1 %331, label %overflow4.i.i.i.i.i.i, label %normal5.i.i.i.i.i.i, !prof !0
+ store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'February'" to %String*), %String** %310, align 8
+ %311 = getelementptr inbounds i8, i8* %306, i64 16
+ %312 = bitcast i8* %311 to %String**
+ store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'March'" to %String*), %String** %312, align 8
+ %313 = getelementptr inbounds i8, i8* %306, i64 24
+ %314 = bitcast i8* %313 to %String**
+ store %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'April'" to %String*), %String** %314, align 8
+ %315 = getelementptr inbounds i8, i8* %306, i64 32
+ %316 = bitcast i8* %315 to %String**
+ store %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'May'" to %String*), %String** %316, align 8
+ %317 = getelementptr inbounds i8, i8* %306, i64 40
+ %318 = bitcast i8* %317 to %String**
+ store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'June'" to %String*), %String** %318, align 8
+ %319 = getelementptr inbounds i8, i8* %306, i64 48
+ %320 = bitcast i8* %319 to %String**
+ store %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'July'" to %String*), %String** %320, align 8
+ %321 = getelementptr inbounds i8, i8* %306, i64 56
+ %322 = bitcast i8* %321 to %String**
+ store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'August'" to %String*), %String** %322, align 8
+ %323 = getelementptr inbounds i8, i8* %306, i64 64
+ %324 = bitcast i8* %323 to %String**
+ store %String* bitcast ({ i32, i32, i32, [10 x i8] }* @"'September'" to %String*), %String** %324, align 8
+ %325 = getelementptr inbounds i8, i8* %306, i64 72
+ %326 = bitcast i8* %325 to %String**
+ store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'October'" to %String*), %String** %326, align 8
+ %327 = getelementptr inbounds i8, i8* %306, i64 80
+ %328 = bitcast i8* %327 to %String**
+ store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'November'" to %String*), %String** %328, align 8
+ %329 = getelementptr inbounds i8, i8* %306, i64 88
+ %330 = bitcast i8* %329 to %String**
+ store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'December'" to %String*), %String** %330, align 8
+ store i8* %299, i8** bitcast (%"Array(String)"** @"Time::Format::MONTH_NAMES" to i8**), align 8
+ %331 = call i8* @GC_malloc(i64 24)
+ %332 = bitcast i8* %331 to i32*
+ %333 = getelementptr inbounds i8, i8* %331, i64 12
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %333, i8 0, i64 12, i1 false)
+ store i32 2, i32* %332, align 4
+ %334 = getelementptr inbounds i8, i8* %331, i64 4
+ %335 = bitcast i8* %334 to i32*
+ store i32 0, i32* %335, align 4
+ %336 = getelementptr inbounds i8, i8* %331, i64 8
+ %337 = bitcast i8* %336 to i32*
+ store i32 7, i32* %337, align 4
+ %338 = call i8* @GC_malloc(i64 56)
+ %339 = getelementptr inbounds i8, i8* %331, i64 16
+ %340 = bitcast i8* %339 to i8**
+ store i8* %338, i8** %340, align 8
+ store i32 7, i32* %335, align 4
+ %.cast.i48 = bitcast i8* %338 to %String**
+ store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Sunday'" to %String*), %String** %.cast.i48, align 8
+ %341 = getelementptr inbounds i8, i8* %338, i64 8
+ %342 = bitcast i8* %341 to %String**
+ store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Monday'" to %String*), %String** %342, align 8
+ %343 = getelementptr inbounds i8, i8* %338, i64 16
+ %344 = bitcast i8* %343 to %String**
+ store %String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'Tuesday'" to %String*), %String** %344, align 8
+ %345 = getelementptr inbounds i8, i8* %338, i64 24
+ %346 = bitcast i8* %345 to %String**
+ store %String* bitcast ({ i32, i32, i32, [10 x i8] }* @"'Wednesday'" to %String*), %String** %346, align 8
+ %347 = getelementptr inbounds i8, i8* %338, i64 32
+ %348 = bitcast i8* %347 to %String**
+ store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'Thursday'" to %String*), %String** %348, align 8
+ %349 = getelementptr inbounds i8, i8* %338, i64 40
+ %350 = bitcast i8* %349 to %String**
+ store %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'Friday'" to %String*), %String** %350, align 8
+ %351 = getelementptr inbounds i8, i8* %338, i64 48
+ %352 = bitcast i8* %351 to %String**
+ store %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'Saturday'" to %String*), %String** %352, align 8
+ store i8* %331, i8** bitcast (%"Array(String)"** @"Time::Format::DAY_NAMES" to i8**), align 8
+ %353 = call i8* @GC_malloc(i64 56)
+ %354 = bitcast i8* %353 to i32*
+ %355 = getelementptr inbounds i8, i8* %353, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %355, i8 0, i64 36, i1 false)
+ store i32 55, i32* %354, align 4
+ %356 = getelementptr inbounds i8, i8* %353, i64 8
+ %.repack.i.i.i49 = getelementptr inbounds i8, i8* %353, i64 40
+ %357 = getelementptr inbounds i8, i8* %353, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %356, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i49, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %357, align 1
+ store i8* %353, i8** bitcast (%"Hash(String, NamedTuple(time: Time, location: Time::Location))"** @"Time::Location::location_cache" to i8**), align 8
+ %358 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %358, i1* nonnull @"Time::Location::Zone::UTC:init", i8* bitcast (void ()* @"~Time::Location::Zone::UTC:init" to i8*))
+ %359 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %359, i1* nonnull @"Time::Location::UTC:init", i8* bitcast (void ()* @"~Time::Location::UTC:init" to i8*))
+ %360 = call i8* @GC_malloc(i64 56)
+ %361 = bitcast i8* %360 to %"Hash(String, Int32)"*
+ %362 = bitcast i8* %360 to i32*
+ %363 = getelementptr inbounds i8, i8* %360, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %363, i8 0, i64 36, i1 false)
+ store i32 57, i32* %362, align 4
+ %364 = getelementptr inbounds i8, i8* %360, i64 8
+ %.repack.i.i.i50 = getelementptr inbounds i8, i8* %360, i64 40
+ %365 = getelementptr inbounds i8, i8* %360, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %364, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i50, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %365, align 1
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'acap'" to %String*), i32 674)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'afp'" to %String*), i32 548)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'dict'" to %String*), i32 2628)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'dns'" to %String*), i32 53)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ftp'" to %String*), i32 21)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ftps'" to %String*), i32 990)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'git'" to %String*), i32 9418)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'gopher'" to %String*), i32 70)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'http'" to %String*), i32 80)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'https'" to %String*), i32 443)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'imap'" to %String*), i32 143)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ipp'" to %String*), i32 631)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ipps'" to %String*), i32 631)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'irc'" to %String*), i32 194)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ircs'" to %String*), i32 6697)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'ldap'" to %String*), i32 389)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'ldaps'" to %String*), i32 636)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'mms'" to %String*), i32 1755)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'msrp'" to %String*), i32 2855)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'mtqp'" to %String*), i32 1038)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'nfs'" to %String*), i32 111)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'nntp'" to %String*), i32 119)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'nntps'" to %String*), i32 563)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'pop'" to %String*), i32 110)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'prospero'" to %String*), i32 1525)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'redis'" to %String*), i32 6379)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rsync'" to %String*), i32 873)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'rtsp'" to %String*), i32 554)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rtsps'" to %String*), i32 322)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'rtspu'" to %String*), i32 5005)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'scp'" to %String*), i32 22)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'sftp'" to %String*), i32 22)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'smb'" to %String*), i32 445)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'snmp'" to %String*), i32 161)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'ssh'" to %String*), i32 22)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'svn'" to %String*), i32 3690)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [7 x i8] }* @"'telnet'" to %String*), i32 23)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [9 x i8] }* @"'ventrilo'" to %String*), i32 3784)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'vnc'" to %String*), i32 5900)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [5 x i8] }* @"'wais'" to %String*), i32 210)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'ws'" to %String*), i32 80)
+ call fastcc void @"*Hash(String, Int32)@Hash(K, V)#[]=<String, Int32>:Int32"(%"Hash(String, Int32)"* %361, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'wss'" to %String*), i32 443)
+ store i8* %360, i8** bitcast (%"Hash(String, Int32)"** @"URI::default_ports" to i8**), align 8
+ %366 = call i8* @GC_malloc(i64 72)
+ %367 = getelementptr inbounds i8, i8* %366, i64 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %367, i8 0, i64 20, i1 false) #21
+ store i8* %366, i8** bitcast (%"Log::Metadata"** @"Log::Metadata::empty" to i8**), align 8
+ %368 = load %String*, %String** @PROGRAM_NAME, align 8
+ %369 = getelementptr inbounds %String, %String* %368, i64 0, i32 1
+ %370 = load i32, i32* %369, align 4
+ %371 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %370, i32 -1)
+ %372 = extractvalue { i32, i1 } %371, 0
+ %373 = extractvalue { i32, i1 } %371, 1
+ br i1 %373, label %overflow4.i.i.i.i.i.i51, label %normal5.i.i.i.i.i.i52, !prof !0
-overflow4.i.i.i.i.i.i: ; preds = %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
+overflow4.i.i.i.i.i.i51: ; preds = %"*Exception::CallStack::skip<String>:Nil.exit45"
call void @__crystal_raise_overflow()
unreachable
-normal5.i.i.i.i.i.i: ; preds = %"*Exception::CallStack::setup_crash_handler:(Int32 | Nil).exit"
- %332 = icmp sgt i32 %330, -1
- br i1 %332, label %while.i.i.preheader.i.i.i.i, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+normal5.i.i.i.i.i.i52: ; preds = %"*Exception::CallStack::skip<String>:Nil.exit45"
+ %374 = icmp sgt i32 %372, -1
+ br i1 %374, label %while.i.preheader.i.i.i.i.i53, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67"
-while.i.i.preheader.i.i.i.i: ; preds = %normal5.i.i.i.i.i.i
- %333 = getelementptr inbounds %String, %String* %326, i64 0, i32 3
- %334 = load i8, i8* %333, align 1
- %335 = icmp eq i8 %334, 0
- br i1 %335, label %then10.i.i.i.i.i.i, label %else11.i.i.i.i.i.i.preheader
+while.i.preheader.i.i.i.i.i53: ; preds = %normal5.i.i.i.i.i.i52
+ %375 = getelementptr inbounds %String, %String* %368, i64 0, i32 3
+ %376 = load i8, i8* %375, align 1
+ %377 = icmp eq i8 %376, 0
+ br i1 %377, label %then10.i.i.i.i.i.i58, label %else11.i.i.i.i.i.i60.preheader
-else11.i.i.i.i.i.i.preheader: ; preds = %while.i.i.preheader.i.i.i.i
- br label %else11.i.i.i.i.i.i
+else11.i.i.i.i.i.i60.preheader: ; preds = %while.i.preheader.i.i.i.i.i53
+ br label %else11.i.i.i.i.i.i60
-while.i.i.then10.i.i_crit_edge.i.i.i.i: ; preds = %normal15.i.i.i.i.i.i
- %336 = extractvalue { i32, i1 } %338, 0
- %phi.cast.i.i.i.i = zext i32 %336 to i64
- br label %then10.i.i.i.i.i.i
+while.i.then10.i_crit_edge.i.i.i.i.i55: ; preds = %normal15.i.i.i.i.i.i63
+ %378 = extractvalue { i32, i1 } %380, 0
+ %phi.cast.i.i.i.i.i54 = zext i32 %378 to i64
+ br label %then10.i.i.i.i.i.i58
-then10.i.i.i.i.i.i: ; preds = %while.i.i.then10.i.i_crit_edge.i.i.i.i, %while.i.i.preheader.i.i.i.i
- %x.0.i.i.lcssa.i.i.i.i = phi i64 [ %phi.cast.i.i.i.i, %while.i.i.then10.i.i_crit_edge.i.i.i.i ], [ 0, %while.i.i.preheader.i.i.i.i ]
- %.fca.1.0.insert18.i.i.i.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.i.lcssa.i.i.i.i, 1, 0
- br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
+then10.i.i.i.i.i.i58: ; preds = %while.i.then10.i_crit_edge.i.i.i.i.i55, %while.i.preheader.i.i.i.i.i53
+ %x.0.i.lcssa.i.i.i.i.i56 = phi i64 [ %phi.cast.i.i.i.i.i54, %while.i.then10.i_crit_edge.i.i.i.i.i55 ], [ 0, %while.i.preheader.i.i.i.i.i53 ]
+ %.fca.1.0.insert18.i.i.i.i.i.i57 = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.lcssa.i.i.i.i.i56, 1, 0
+ br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67"
-else11.i.i.i.i.i.i: ; preds = %else11.i.i.i.i.i.i.preheader, %normal15.i.i.i.i.i.i
- %lsr.iv250 = phi i32 [ 0, %else11.i.i.i.i.i.i.preheader ], [ %lsr.iv.next251, %normal15.i.i.i.i.i.i ]
- %337 = icmp eq i32 %330, %lsr.iv250
- br i1 %337, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i", label %else13.i.i.i.i.i.i
+else11.i.i.i.i.i.i60: ; preds = %else11.i.i.i.i.i.i60.preheader, %normal15.i.i.i.i.i.i63
+ %lsr.iv270 = phi i32 [ 0, %else11.i.i.i.i.i.i60.preheader ], [ %lsr.iv.next271, %normal15.i.i.i.i.i.i63 ]
+ %379 = icmp eq i32 %372, %lsr.iv270
+ br i1 %379, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67", label %else13.i.i.i.i.i.i61
-else13.i.i.i.i.i.i: ; preds = %else11.i.i.i.i.i.i
- %338 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lsr.iv250, i32 1)
- %339 = extractvalue { i32, i1 } %338, 1
- br i1 %339, label %overflow14.i.i.i.i.i.i, label %normal15.i.i.i.i.i.i, !prof !0
+else13.i.i.i.i.i.i61: ; preds = %else11.i.i.i.i.i.i60
+ %380 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lsr.iv270, i32 1)
+ %381 = extractvalue { i32, i1 } %380, 1
+ br i1 %381, label %overflow14.i.i.i.i.i.i62, label %normal15.i.i.i.i.i.i63, !prof !0
-overflow14.i.i.i.i.i.i: ; preds = %else13.i.i.i.i.i.i
+overflow14.i.i.i.i.i.i62: ; preds = %else13.i.i.i.i.i.i61
call void @__crystal_raise_overflow()
unreachable
-normal15.i.i.i.i.i.i: ; preds = %else13.i.i.i.i.i.i
- %340 = extractvalue { i32, i1 } %338, 0
- %341 = sext i32 %340 to i64
- %342 = bitcast %String* %326 to i8*
- %sunkaddr256 = getelementptr inbounds i8, i8* %342, i64 %341
- %sunkaddr257 = getelementptr inbounds i8, i8* %sunkaddr256, i64 12
- %343 = load i8, i8* %sunkaddr257, align 1
- %344 = icmp eq i8 %343, 0
- %lsr.iv.next251 = add nuw i32 %lsr.iv250, 1
- br i1 %344, label %while.i.i.then10.i.i_crit_edge.i.i.i.i, label %else11.i.i.i.i.i.i
+normal15.i.i.i.i.i.i63: ; preds = %else13.i.i.i.i.i.i61
+ %382 = extractvalue { i32, i1 } %380, 0
+ %383 = sext i32 %382 to i64
+ %384 = bitcast %String* %368 to i8*
+ %sunkaddr280 = getelementptr inbounds i8, i8* %384, i64 %383
+ %sunkaddr281 = getelementptr inbounds i8, i8* %sunkaddr280, i64 12
+ %385 = load i8, i8* %sunkaddr281, align 1
+ %386 = icmp eq i8 %385, 0
+ %lsr.iv.next271 = add nuw i32 %lsr.iv270, 1
+ br i1 %386, label %while.i.then10.i_crit_edge.i.i.i.i.i55, label %else11.i.i.i.i.i.i60
-"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i": ; preds = %else11.i.i.i.i.i.i, %then10.i.i.i.i.i.i, %normal5.i.i.i.i.i.i
- %common.ret.op.i.i.i.i.i.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i.i.i.i, %then10.i.i.i.i.i.i ], [ zeroinitializer, %normal5.i.i.i.i.i.i ], [ zeroinitializer, %else11.i.i.i.i.i.i ]
- %oldret.i.i.i.i.i.i = extractvalue %"(Int32 | Nil)" %common.ret.op.i.i.i.i.i.i, 0
- %.not.i.i.i.i.i = icmp eq i32 %oldret.i.i.i.i.i.i, 0
- br i1 %.not.i.i.i.i.i, label %"*Path::new<String>:Path.exit.i.i", label %next_def.i.i.i.i.i
+"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67": ; preds = %else11.i.i.i.i.i.i60, %then10.i.i.i.i.i.i58, %normal5.i.i.i.i.i.i52
+ %common.ret.op.i.i.i.i.i.i64 = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i.i.i.i57, %then10.i.i.i.i.i.i58 ], [ zeroinitializer, %normal5.i.i.i.i.i.i52 ], [ zeroinitializer, %else11.i.i.i.i.i.i60 ]
+ %oldret.i.i.i.i.i.i65 = extractvalue %"(Int32 | Nil)" %common.ret.op.i.i.i.i.i.i64, 0
+ %.not.i.i.i.i.i66 = icmp eq i32 %oldret.i.i.i.i.i.i65, 0
+ br i1 %.not.i.i.i.i.i66, label %"*Path::new<String>:Path.exit.i.i", label %next_def.i.i.i.i.i68
-next_def.i.i.i.i.i: ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
- %345 = call fastcc %String* @"*String::interpolation<String, (String | Nil), String>:String"()
- %346 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %345)
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %346)
+next_def.i.i.i.i.i68: ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67"
+ %387 = call fastcc %String* @"*String::interpolation<String, (String | Nil), String>:String"()
+ %388 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %387)
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %388)
unreachable
-"*Path::new<String>:Path.exit.i.i": ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i"
- %347 = icmp eq i32 %328, 0
- br i1 %347, label %"~Log::progname:init.exit", label %else.i.i.i
+"*Path::new<String>:Path.exit.i.i": ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i.i.i.i67"
+ %389 = icmp eq i32 %370, 0
+ br i1 %389, label %"~Log::progname:init.exit", label %else.i.i.i
else.i.i.i: ; preds = %"*Path::new<String>:Path.exit.i.i"
- %348 = call fastcc i32 @"*String#size:Int32"(%String* nonnull %326)
- %349 = icmp eq i32 %348, 1
- br i1 %349, label %current_def.i.i.i, label %else2.i.i.i
+ %390 = call fastcc i32 @"*String#size:Int32"(%String* nonnull %368)
+ %391 = icmp eq i32 %390, 1
+ br i1 %391, label %current_def.i.i.i, label %else2.i.i.i
else2.i.i.i: ; preds = %current_def.i.i.i, %else.i.i.i
- %350 = bitcast %String* %326 to i8*
- %sunkaddr258 = getelementptr inbounds i8, i8* %350, i64 4
- %351 = bitcast i8* %sunkaddr258 to i32*
- %352 = load i32, i32* %351, align 4
- %353 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %352, i32 -1)
- %354 = extractvalue { i32, i1 } %353, 1
- br i1 %354, label %overflow.i.i.i44, label %while.i.i.i.preheader, !prof !0
+ %392 = bitcast %String* %368 to i8*
+ %sunkaddr282 = getelementptr inbounds i8, i8* %392, i64 4
+ %393 = bitcast i8* %sunkaddr282 to i32*
+ %394 = load i32, i32* %393, align 4
+ %395 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %394, i32 -1)
+ %396 = extractvalue { i32, i1 } %395, 1
+ br i1 %396, label %overflow.i.i.i69, label %while.i.i.i.preheader, !prof !0
while.i.i.i.preheader: ; preds = %else2.i.i.i
br label %while.i.i.i
current_def.i.i.i: ; preds = %else.i.i.i
- %355 = call fastcc i32 @"*String#[]<Int32>:Char"(%String* nonnull %326, i32 0)
- %356 = icmp eq i32 %355, 47
- br i1 %356, label %"~Log::progname:init.exit", label %else2.i.i.i
+ %397 = call fastcc i32 @"*String#[]<Int32>:Char"(%String* nonnull %368, i32 0)
+ %398 = icmp eq i32 %397, 47
+ br i1 %398, label %"~Log::progname:init.exit", label %else2.i.i.i
-overflow.i.i.i44: ; preds = %else2.i.i.i
+overflow.i.i.i69: ; preds = %else2.i.i.i
call void @__crystal_raise_overflow()
unreachable
while.i.i.i: ; preds = %while.i.i.i.preheader, %body.i.i.i
- %.pn.i.i.i = phi { i32, i1 } [ %371, %body.i.i.i ], [ %353, %while.i.i.i.preheader ]
+ %.pn.i.i.i = phi { i32, i1 } [ %413, %body.i.i.i ], [ %395, %while.i.i.i.preheader ]
%current.0.i.i.i = extractvalue { i32, i1 } %.pn.i.i.i, 0
- %357 = icmp slt i32 %current.0.i.i.i, 0
- br i1 %357, label %then.i.i.i.i, label %then5.i.i.i.i
+ %399 = icmp slt i32 %current.0.i.i.i, 0
+ br i1 %399, label %then.i.i.i.i, label %then5.i.i.i.i
then.i.i.i.i: ; preds = %while.i.i.i
- %358 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.0.i.i.i, i32 %352)
- %359 = extractvalue { i32, i1 } %358, 1
- br i1 %359, label %overflow.i.i.i.i, label %exit.i.i.i.i, !prof !0
+ %400 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.0.i.i.i, i32 %394)
+ %401 = extractvalue { i32, i1 } %400, 1
+ br i1 %401, label %overflow.i.i.i.i, label %exit.i.i.i.i, !prof !0
overflow.i.i.i.i: ; preds = %then.i.i.i.i
call void @__crystal_raise_overflow()
unreachable
exit.i.i.i.i: ; preds = %then.i.i.i.i
- %360 = extractvalue { i32, i1 } %358, 0
- %361 = icmp sgt i32 %360, -1
- br i1 %361, label %then5.i.i.i.i, label %else4.i.i.i.i
+ %402 = extractvalue { i32, i1 } %400, 0
+ %403 = icmp sgt i32 %402, -1
+ br i1 %403, label %then5.i.i.i.i, label %else4.i.i.i.i
else4.i.i.i.i: ; preds = %then5.i.i.i.i, %exit.i.i.i.i
- %362 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %362)
+ %404 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %404)
unreachable
then5.i.i.i.i: ; preds = %exit.i.i.i.i, %while.i.i.i
- %index2.016.i.i.i.i = phi i32 [ %360, %exit.i.i.i.i ], [ %current.0.i.i.i, %while.i.i.i ]
- %363 = icmp slt i32 %index2.016.i.i.i.i, %352
- br i1 %363, label %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit.i.i.i", label %else4.i.i.i.i
+ %index2.016.i.i.i.i = phi i32 [ %402, %exit.i.i.i.i ], [ %current.0.i.i.i, %while.i.i.i ]
+ %405 = icmp slt i32 %index2.016.i.i.i.i, %394
+ br i1 %405, label %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit.i.i.i", label %else4.i.i.i.i
"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit.i.i.i": ; preds = %then5.i.i.i.i
- %364 = zext i32 %index2.016.i.i.i.i to i64
- %365 = bitcast %String* %326 to i8*
- %sunkaddr259 = getelementptr inbounds i8, i8* %365, i64 %364
- %sunkaddr260 = getelementptr inbounds i8, i8* %sunkaddr259, i64 12
- %366 = load i8, i8* %sunkaddr260, align 1
- %367 = icmp eq i8 %366, 47
- %368 = icmp sgt i32 %current.0.i.i.i, 0
- %369 = select i1 %367, i1 %368, i1 false
- br i1 %369, label %body.i.i.i, label %fail.i.i.i
+ %406 = zext i32 %index2.016.i.i.i.i to i64
+ %407 = bitcast %String* %368 to i8*
+ %sunkaddr283 = getelementptr inbounds i8, i8* %407, i64 %406
+ %sunkaddr284 = getelementptr inbounds i8, i8* %sunkaddr283, i64 12
+ %408 = load i8, i8* %sunkaddr284, align 1
+ %409 = icmp eq i8 %408, 47
+ %410 = icmp sgt i32 %current.0.i.i.i, 0
+ %411 = select i1 %409, i1 %410, i1 false
+ br i1 %411, label %body.i.i.i, label %fail.i.i.i
body.i.i.i: ; preds = %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit.i.i.i"
- %370 = add nsw i32 %current.0.i.i.i, -1
- %371 = insertvalue { i32, i1 } { i32 undef, i1 false }, i32 %370, 0
+ %412 = add nsw i32 %current.0.i.i.i, -1
+ %413 = insertvalue { i32, i1 } { i32 undef, i1 false }, i32 %412, 0
br label %while.i.i.i
fail.i.i.i: ; preds = %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit.i.i.i"
%current.0.i.i.i.le = extractvalue { i32, i1 } %.pn.i.i.i, 0
- %372 = icmp eq i32 %current.0.i.i.i.le, 0
- br i1 %372, label %then24.i.i.i, label %while26.preheader.i.i.i
+ %414 = icmp eq i32 %current.0.i.i.i.le, 0
+ br i1 %414, label %then24.i.i.i, label %while26.preheader.i.i.i
then24.i.i.i: ; preds = %fail.i.i.i
- %373 = icmp sgt i32 %352, -1
- br i1 %373, label %normal13.i.i.i.i, label %else.i186.i.i.i
+ %415 = icmp sgt i32 %394, -1
+ br i1 %415, label %normal13.i.i.i.i, label %else.i186.i.i.i
normal13.i.i.i.i: ; preds = %then24.i.i.i
- %374 = icmp ne i32 %352, 0
- %obj.1.i.i.i.i.i = zext i1 %374 to i32
- br i1 %374, label %else16.i.i.i.i, label %"~Log::progname:init.exit"
+ %416 = icmp ne i32 %394, 0
+ %obj.1.i.i.i.i.i = zext i1 %416 to i32
+ br i1 %416, label %else16.i.i.i.i, label %"~Log::progname:init.exit"
else16.i.i.i.i: ; preds = %normal13.i.i.i.i
- %375 = icmp eq i32 %352, %obj.1.i.i.i.i.i
- br i1 %375, label %"~Log::progname:init.exit", label %exit34.i.i.i.i
+ %417 = icmp eq i32 %394, %obj.1.i.i.i.i.i
+ br i1 %417, label %"~Log::progname:init.exit", label %exit34.i.i.i.i
exit34.i.i.i.i: ; preds = %else16.i.i.i.i
- %376 = call fastcc i32 @"*String#size:Int32"(%String* nonnull %326) #29
- %377 = icmp eq i32 %352, %376
- %378 = call i8* @GC_malloc_atomic(i64 14)
- %379 = bitcast i8* %378 to %String*
- %380 = getelementptr inbounds i8, i8* %378, i64 12
- %381 = bitcast %String* %326 to i8*
- %sunkaddr261 = getelementptr inbounds i8, i8* %381, i64 12
- %382 = load i8, i8* %sunkaddr261, align 1
- store i8 %382, i8* %380, align 1
- %383 = select i1 %377, i32 %obj.1.i.i.i.i.i, i32 0
- %384 = getelementptr inbounds i8, i8* %378, i64 13
- store i8 0, i8* %384, align 1
- %.repack.i.i.i.i = bitcast i8* %378 to i32*
+ %418 = call fastcc i32 @"*String#size:Int32"(%String* nonnull %368) #28
+ %419 = icmp eq i32 %394, %418
+ %420 = call i8* @GC_malloc_atomic(i64 14)
+ %421 = bitcast i8* %420 to %String*
+ %422 = getelementptr inbounds i8, i8* %420, i64 12
+ %423 = bitcast %String* %368 to i8*
+ %sunkaddr285 = getelementptr inbounds i8, i8* %423, i64 12
+ %424 = load i8, i8* %sunkaddr285, align 1
+ store i8 %424, i8* %422, align 1
+ %425 = select i1 %419, i32 %obj.1.i.i.i.i.i, i32 0
+ %426 = getelementptr inbounds i8, i8* %420, i64 13
+ store i8 0, i8* %426, align 1
+ %.repack.i.i.i.i = bitcast i8* %420 to i32*
store i32 1, i32* %.repack.i.i.i.i, align 4
- %.repack82.i.i.i.i = getelementptr inbounds i8, i8* %378, i64 4
- %385 = bitcast i8* %.repack82.i.i.i.i to i32*
- store i32 %obj.1.i.i.i.i.i, i32* %385, align 4
- %.repack84.i.i.i.i = getelementptr inbounds i8, i8* %378, i64 8
- %386 = bitcast i8* %.repack84.i.i.i.i to i32*
- store i32 %383, i32* %386, align 4
+ %.repack82.i.i.i.i = getelementptr inbounds i8, i8* %420, i64 4
+ %427 = bitcast i8* %.repack82.i.i.i.i to i32*
+ store i32 %obj.1.i.i.i.i.i, i32* %427, align 4
+ %.repack84.i.i.i.i = getelementptr inbounds i8, i8* %420, i64 8
+ %428 = bitcast i8* %.repack84.i.i.i.i to i32*
+ store i32 %425, i32* %428, align 4
br label %"~Log::progname:init.exit"
else.i186.i.i.i: ; preds = %then24.i.i.i
- %387 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %387)
+ %429 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %429)
unreachable
while26.preheader.i.i.i: ; preds = %fail.i.i.i
- %388 = icmp sgt i32 %current.0.i.i.i.le, 1
- %obj.1.i.i.i.i = select i1 %388, i32 %current.0.i.i.i.le, i32 1
+ %430 = icmp sgt i32 %current.0.i.i.i.le, 1
+ %obj.1.i.i.i.i = select i1 %430, i32 %current.0.i.i.i.le, i32 1
br label %while26.i.i.i
while26.i.i.i: ; preds = %body27.i.i.i, %while26.preheader.i.i.i
- %current.1.i.i.i = phi i32 [ %401, %body27.i.i.i ], [ %current.0.i.i.i.le, %while26.preheader.i.i.i ]
- %389 = icmp slt i32 %current.1.i.i.i, 0
- br i1 %389, label %then.i147.i.i.i, label %then5.i154.i.i.i
+ %current.1.i.i.i = phi i32 [ %443, %body27.i.i.i ], [ %current.0.i.i.i.le, %while26.preheader.i.i.i ]
+ %431 = icmp slt i32 %current.1.i.i.i, 0
+ br i1 %431, label %then.i147.i.i.i, label %then5.i154.i.i.i
then.i147.i.i.i: ; preds = %while26.i.i.i
- %390 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 %352)
- %391 = extractvalue { i32, i1 } %390, 1
- br i1 %391, label %overflow.i148.i.i.i, label %exit.i149.i.i.i, !prof !0
+ %432 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 %394)
+ %433 = extractvalue { i32, i1 } %432, 1
+ br i1 %433, label %overflow.i148.i.i.i, label %exit.i149.i.i.i, !prof !0
overflow.i148.i.i.i: ; preds = %then.i147.i.i.i
call void @__crystal_raise_overflow()
unreachable
exit.i149.i.i.i: ; preds = %then.i147.i.i.i
- %392 = extractvalue { i32, i1 } %390, 0
- %393 = icmp sgt i32 %392, -1
- br i1 %393, label %then5.i154.i.i.i, label %else4.i152.i.i.i
+ %434 = extractvalue { i32, i1 } %432, 0
+ %435 = icmp sgt i32 %434, -1
+ br i1 %435, label %then5.i154.i.i.i, label %else4.i152.i.i.i
else4.i152.i.i.i: ; preds = %then5.i154.i.i.i, %exit.i149.i.i.i
- %394 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %394)
+ %436 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %436)
unreachable
then5.i154.i.i.i: ; preds = %while26.i.i.i, %exit.i149.i.i.i
- %index2.016.i153.i.i.i = phi i32 [ %392, %exit.i149.i.i.i ], [ %current.1.i.i.i, %while26.i.i.i ]
- %395 = icmp slt i32 %index2.016.i153.i.i.i, %352
- br i1 %395, label %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit155.i.i.i", label %else4.i152.i.i.i
+ %index2.016.i153.i.i.i = phi i32 [ %434, %exit.i149.i.i.i ], [ %current.1.i.i.i, %while26.i.i.i ]
+ %437 = icmp slt i32 %index2.016.i153.i.i.i, %394
+ br i1 %437, label %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit155.i.i.i", label %else4.i152.i.i.i
"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit155.i.i.i": ; preds = %then5.i154.i.i.i
- %396 = zext i32 %index2.016.i153.i.i.i to i64
- %397 = bitcast %String* %326 to i8*
- %sunkaddr262 = getelementptr inbounds i8, i8* %397, i64 %396
- %sunkaddr263 = getelementptr inbounds i8, i8* %sunkaddr262, i64 12
- %398 = load i8, i8* %sunkaddr263, align 1
- %399 = icmp ne i8 %398, 47
- %400 = icmp sgt i32 %current.1.i.i.i, 0
- %or.cond.i.i.i = select i1 %399, i1 %400, i1 false
+ %438 = zext i32 %index2.016.i153.i.i.i to i64
+ %439 = bitcast %String* %368 to i8*
+ %sunkaddr286 = getelementptr inbounds i8, i8* %439, i64 %438
+ %sunkaddr287 = getelementptr inbounds i8, i8* %sunkaddr286, i64 12
+ %440 = load i8, i8* %sunkaddr287, align 1
+ %441 = icmp ne i8 %440, 47
+ %442 = icmp sgt i32 %current.1.i.i.i, 0
+ %or.cond.i.i.i = select i1 %441, i1 %442, i1 false
br i1 %or.cond.i.i.i, label %body27.i.i.i, label %fail28.i.i.i
body27.i.i.i: ; preds = %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit155.i.i.i"
- %401 = add nsw i32 %current.1.i.i.i, -1
+ %443 = add nsw i32 %current.1.i.i.i, -1
br label %while26.i.i.i
fail28.i.i.i: ; preds = %"*Slice(UInt8)@Indexable(T)#[]<Int32>:UInt8.exit155.i.i.i"
- %402 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 1)
- %403 = extractvalue { i32, i1 } %402, 0
- %404 = extractvalue { i32, i1 } %402, 1
- br i1 %404, label %overflow39.i.i.i, label %normal40.i.i.i, !prof !0
+ %444 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 1)
+ %445 = extractvalue { i32, i1 } %444, 0
+ %446 = extractvalue { i32, i1 } %444, 1
+ br i1 %446, label %overflow39.i.i.i, label %normal40.i.i.i, !prof !0
overflow39.i.i.i: ; preds = %fail28.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal40.i.i.i: ; preds = %fail28.i.i.i
- %405 = icmp eq i32 %403, 1
- br i1 %405, label %then43.i.i.i, label %exit50.thread.i.i.i
+ %447 = icmp eq i32 %445, 1
+ br i1 %447, label %then43.i.i.i, label %exit50.thread.i.i.i
then43.i.i.i: ; preds = %normal40.i.i.i
- %406 = icmp slt i32 %current.1.i.i.i, 0
- br i1 %406, label %then.i156.i.i.i, label %then5.i163.i.i.i
+ %448 = icmp slt i32 %current.1.i.i.i, 0
+ br i1 %448, label %then.i156.i.i.i, label %then5.i163.i.i.i
then.i156.i.i.i: ; preds = %then43.i.i.i
- %407 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 %352)
- %408 = extractvalue { i32, i1 } %407, 1
- br i1 %408, label %overflow.i157.i.i.i, label %exit.i158.i.i.i, !prof !0
+ %449 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %current.1.i.i.i, i32 %394)
+ %450 = extractvalue { i32, i1 } %449, 1
+ br i1 %450, label %overflow.i157.i.i.i, label %exit.i158.i.i.i, !prof !0
overflow.i157.i.i.i: ; preds = %then.i156.i.i.i
call void @__crystal_raise_overflow()
unreachable
exit.i158.i.i.i: ; preds = %then.i156.i.i.i
- %409 = extractvalue { i32, i1 } %407, 0
- %410 = icmp sgt i32 %409, -1
- br i1 %410, label %then5.i163.i.i.i, label %else4.i161.i.i.i
+ %451 = extractvalue { i32, i1 } %449, 0
+ %452 = icmp sgt i32 %451, -1
+ br i1 %452, label %then5.i163.i.i.i, label %else4.i161.i.i.i
else4.i161.i.i.i: ; preds = %then5.i163.i.i.i, %exit.i158.i.i.i
- %411 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %411)
+ %453 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %453)
unreachable
then5.i163.i.i.i: ; preds = %then43.i.i.i, %exit.i158.i.i.i
- %index2.016.i162.i.i.i = phi i32 [ %409, %exit.i158.i.i.i ], [ %current.1.i.i.i, %then43.i.i.i ]
- %412 = icmp slt i32 %index2.016.i162.i.i.i, %352
- br i1 %412, label %exit50.i.i.i, label %else4.i161.i.i.i
+ %index2.016.i162.i.i.i = phi i32 [ %451, %exit.i158.i.i.i ], [ %current.1.i.i.i, %then43.i.i.i ]
+ %454 = icmp slt i32 %index2.016.i162.i.i.i, %394
+ br i1 %454, label %exit50.i.i.i, label %else4.i161.i.i.i
exit50.i.i.i: ; preds = %then5.i163.i.i.i
- %413 = zext i32 %index2.016.i162.i.i.i to i64
- %414 = bitcast %String* %326 to i8*
- %sunkaddr264 = getelementptr inbounds i8, i8* %414, i64 %413
- %sunkaddr265 = getelementptr inbounds i8, i8* %sunkaddr264, i64 12
- %415 = load i8, i8* %sunkaddr265, align 1
- %416 = icmp eq i8 %415, 47
- %spec.select.i.i.i = zext i1 %416 to i32
+ %455 = zext i32 %index2.016.i162.i.i.i to i64
+ %456 = bitcast %String* %368 to i8*
+ %sunkaddr288 = getelementptr inbounds i8, i8* %456, i64 %455
+ %sunkaddr289 = getelementptr inbounds i8, i8* %sunkaddr288, i64 12
+ %457 = load i8, i8* %sunkaddr289, align 1
+ %458 = icmp eq i8 %457, 47
+ %spec.select.i.i.i = zext i1 %458 to i32
br label %exit50.thread.i.i.i
exit50.thread.i.i.i: ; preds = %exit50.i.i.i, %normal40.i.i.i
- %417 = phi i32 [ %403, %normal40.i.i.i ], [ %spec.select.i.i.i, %exit50.i.i.i ]
- %418 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %obj.1.i.i.i.i, i32 %417)
- %419 = extractvalue { i32, i1 } %418, 1
- br i1 %419, label %overflow52.i.i.i, label %normal53.i.i.i, !prof !0
+ %459 = phi i32 [ %445, %normal40.i.i.i ], [ %spec.select.i.i.i, %exit50.i.i.i ]
+ %460 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %obj.1.i.i.i.i, i32 %459)
+ %461 = extractvalue { i32, i1 } %460, 1
+ br i1 %461, label %overflow52.i.i.i, label %normal53.i.i.i, !prof !0
overflow52.i.i.i: ; preds = %exit50.thread.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal53.i.i.i: ; preds = %exit50.thread.i.i.i
- %420 = extractvalue { i32, i1 } %418, 0
- %421 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %420, i32 1)
- %422 = extractvalue { i32, i1 } %421, 1
- br i1 %422, label %overflow54.i.i.i, label %normal55.i.i.i, !prof !0
+ %462 = extractvalue { i32, i1 } %460, 0
+ %463 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %462, i32 1)
+ %464 = extractvalue { i32, i1 } %463, 1
+ br i1 %464, label %overflow54.i.i.i, label %normal55.i.i.i, !prof !0
overflow54.i.i.i: ; preds = %normal53.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal55.i.i.i: ; preds = %normal53.i.i.i
- %423 = extractvalue { i32, i1 } %421, 0
- %424 = call fastcc %String* @"*String#byte_slice?<Int32, Int32>:(String | Nil)"(%String* nonnull %326, i32 %417, i32 %423)
- %.not.i193.i.i.i = icmp eq %String* %424, null
+ %465 = extractvalue { i32, i1 } %463, 0
+ %466 = call fastcc %String* @"*String#byte_slice?<Int32, Int32>:(String | Nil)"(%String* nonnull %368, i32 %459, i32 %465)
+ %.not.i193.i.i.i = icmp eq %String* %466, null
br i1 %.not.i193.i.i.i, label %else.i195.i.i.i, label %"~Log::progname:init.exit"
else.i195.i.i.i: ; preds = %normal55.i.i.i
- %425 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %425)
+ %467 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %467)
unreachable
"~Log::progname:init.exit": ; preds = %"*Path::new<String>:Path.exit.i.i", %current_def.i.i.i, %normal13.i.i.i.i, %else16.i.i.i.i, %exit34.i.i.i.i, %normal55.i.i.i
- %common.ret.op.i.i.i = phi %String* [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %"*Path::new<String>:Path.exit.i.i" ], [ %326, %else16.i.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %normal13.i.i.i.i ], [ %379, %exit34.i.i.i.i ], [ %424, %normal55.i.i.i ], [ %326, %current_def.i.i.i ]
+ %common.ret.op.i.i.i = phi %String* [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %"*Path::new<String>:Path.exit.i.i" ], [ %368, %else16.i.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %normal13.i.i.i.i ], [ %421, %exit34.i.i.i.i ], [ %466, %normal55.i.i.i ], [ %368, %current_def.i.i.i ]
store %String* %common.ret.op.i.i.i, %String** @"Log::progname", align 8
- %426 = call i32 @getpid()
- %427 = sext i32 %426 to i64
- %428 = bitcast [129 x i8]* %7 to i8*
- call void @llvm.lifetime.start.p0i8(i64 129, i8* nonnull %428)
- switch i64 %427, label %else28.i.i [
+ %468 = call i32 @getpid()
+ %469 = sext i32 %468 to i64
+ %470 = bitcast [129 x i8]* %7 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 129, i8* nonnull %470)
+ switch i64 %469, label %else28.i.i [
i64 0, label %"~Log::pid:init.exit"
i64 1, label %exit20.fold.split.i.i
]
@@ -2295,624 +2378,624 @@ else28.i.i: ; preds = %"~Log::progname:ini
br label %body.i.i
body.i.i: ; preds = %body.i.i, %else28.i.i
- %lsr.iv238 = phi i32 [ %lsr.iv.next239, %body.i.i ], [ 0, %else28.i.i ]
- %lsr.iv234 = phi i64 [ %lsr.iv.next235, %body.i.i ], [ 0, %else28.i.i ]
- %num.0198.i.i = phi i64 [ %427, %else28.i.i ], [ %433, %body.i.i ]
- %scevgep248 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 %lsr.iv234
- %scevgep249 = getelementptr i8, i8* %scevgep248, i64 127
- %429 = srem i64 %num.0198.i.i, 10
- %430 = call i64 @llvm.abs.i64(i64 %429, i1 true)
- %431 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789abcdefghi...'.1", i64 0, i32 3, i64 %430
- %432 = load i8, i8* %431, align 1
- store i8 %432, i8* %scevgep249, align 1
- %433 = sdiv i64 %num.0198.i.i, 10
+ %lsr.iv258 = phi i32 [ %lsr.iv.next259, %body.i.i ], [ 0, %else28.i.i ]
+ %lsr.iv254 = phi i64 [ %lsr.iv.next255, %body.i.i ], [ 0, %else28.i.i ]
+ %num.0198.i.i = phi i64 [ %469, %else28.i.i ], [ %475, %body.i.i ]
+ %scevgep268 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 %lsr.iv254
+ %scevgep269 = getelementptr i8, i8* %scevgep268, i64 127
+ %471 = srem i64 %num.0198.i.i, 10
+ %472 = call i64 @llvm.abs.i64(i64 %471, i1 true)
+ %473 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789abcdefghi...'.1", i64 0, i32 3, i64 %472
+ %474 = load i8, i8* %473, align 1
+ store i8 %474, i8* %scevgep269, align 1
+ %475 = sdiv i64 %num.0198.i.i, 10
%num.0198.off.i.i = add nsw i64 %num.0198.i.i, 9
- %434 = icmp ult i64 %num.0198.off.i.i, 19
- %lsr.iv.next235 = add i64 %lsr.iv234, -1
- %lsr.iv.next239 = add i32 %lsr.iv238, 1
- br i1 %434, label %fail.i.i, label %body.i.i
+ %476 = icmp ult i64 %num.0198.off.i.i, 19
+ %lsr.iv.next255 = add i64 %lsr.iv254, -1
+ %lsr.iv.next259 = add i32 %lsr.iv258, 1
+ br i1 %476, label %fail.i.i, label %body.i.i
fail.i.i: ; preds = %body.i.i
- %435 = trunc i64 %427 to i32
- %436 = mul i64 %lsr.iv.next235, -1
- %437 = add i64 %436, -2147483648
- %438 = icmp ult i64 %437, -4294967296
- %scevgep = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 %lsr.iv.next235
- %scevgep236 = getelementptr i8, i8* %scevgep, i64 128
- br i1 %438, label %overflow.i.i, label %normal.i.i, !prof !0
+ %477 = trunc i64 %469 to i32
+ %478 = mul i64 %lsr.iv.next255, -1
+ %479 = add i64 %478, -2147483648
+ %480 = icmp ult i64 %479, -4294967296
+ %scevgep = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 %lsr.iv.next255
+ %scevgep256 = getelementptr i8, i8* %scevgep, i64 128
+ br i1 %480, label %overflow.i.i, label %normal.i.i, !prof !0
overflow.i.i: ; preds = %fail.i.i
call void @__crystal_raise_overflow()
unreachable
normal.i.i: ; preds = %fail.i.i
- %439 = mul i64 %lsr.iv.next235, -1
- %440 = mul i64 %lsr.iv.next235, -1
- %441 = mul i64 %lsr.iv.next235, -1
- %442 = mul i64 %lsr.iv.next235, -1
- %tmp247 = trunc i64 %439 to i32
- %443 = icmp slt i32 %tmp247, 1
- br i1 %443, label %then49.i.i, label %normal.i.i.exit57.i.i_crit_edge
+ %481 = mul i64 %lsr.iv.next255, -1
+ %482 = mul i64 %lsr.iv.next255, -1
+ %483 = mul i64 %lsr.iv.next255, -1
+ %484 = mul i64 %lsr.iv.next255, -1
+ %tmp267 = trunc i64 %481 to i32
+ %485 = icmp slt i32 %tmp267, 1
+ br i1 %485, label %then49.i.i, label %normal.i.i.exit57.i.i_crit_edge
normal.i.i.exit57.i.i_crit_edge: ; preds = %normal.i.i
- %tmp = trunc i64 %442 to i32
+ %tmp = trunc i64 %484 to i32
br label %exit57.i.i
then49.i.i: ; preds = %normal.i.i
- %tmp246 = trunc i64 %440 to i32
- %444 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp246)
- %445 = extractvalue { i32, i1 } %444, 0
- %446 = extractvalue { i32, i1 } %444, 1
- br i1 %446, label %overflow51.i.i, label %"*Slice(UInt8)@Slice(T)#fill<UInt8>:Slice(UInt8).exit.i.i", !prof !0
+ %tmp266 = trunc i64 %482 to i32
+ %486 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp266)
+ %487 = extractvalue { i32, i1 } %486, 0
+ %488 = extractvalue { i32, i1 } %486, 1
+ br i1 %488, label %overflow51.i.i, label %"*Slice(UInt8)@Slice(T)#fill<UInt8>:Slice(UInt8).exit.i.i", !prof !0
overflow51.i.i: ; preds = %then49.i.i
call void @__crystal_raise_overflow()
unreachable
"*Slice(UInt8)@Slice(T)#fill<UInt8>:Slice(UInt8).exit.i.i": ; preds = %then49.i.i
- %447 = sext i32 %445 to i64
- %scevgep242 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 127
- %448 = sext i32 %lsr.iv.next239 to i64
- %scevgep243 = getelementptr i8, i8* %scevgep242, i64 %448
- %scevgep244 = getelementptr i8, i8* %scevgep243, i64 %lsr.iv.next235
- %scevgep237 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 127
- %449 = sext i32 %lsr.iv.next239 to i64
- %scevgep240 = getelementptr i8, i8* %scevgep237, i64 %449
- %scevgep241 = getelementptr i8, i8* %scevgep240, i64 %lsr.iv.next235
- call void @llvm.memset.p0i8.i64(i8* nonnull align 1 %scevgep244, i8 48, i64 %447, i1 false)
- %tmp245 = trunc i64 %441 to i32
- %450 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %tmp245, i32 %445)
- %451 = extractvalue { i32, i1 } %450, 1
- br i1 %451, label %overflow55.i.i, label %normal56.i.i, !prof !0
+ %489 = sext i32 %487 to i64
+ %scevgep262 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 127
+ %490 = sext i32 %lsr.iv.next259 to i64
+ %scevgep263 = getelementptr i8, i8* %scevgep262, i64 %490
+ %scevgep264 = getelementptr i8, i8* %scevgep263, i64 %lsr.iv.next255
+ %scevgep257 = getelementptr [129 x i8], [129 x i8]* %7, i64 0, i64 127
+ %491 = sext i32 %lsr.iv.next259 to i64
+ %scevgep260 = getelementptr i8, i8* %scevgep257, i64 %491
+ %scevgep261 = getelementptr i8, i8* %scevgep260, i64 %lsr.iv.next255
+ call void @llvm.memset.p0i8.i64(i8* nonnull align 1 %scevgep264, i8 48, i64 %489, i1 false)
+ %tmp265 = trunc i64 %483 to i32
+ %492 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %tmp265, i32 %487)
+ %493 = extractvalue { i32, i1 } %492, 1
+ br i1 %493, label %overflow55.i.i, label %normal56.i.i, !prof !0
overflow55.i.i: ; preds = %"*Slice(UInt8)@Slice(T)#fill<UInt8>:Slice(UInt8).exit.i.i"
call void @__crystal_raise_overflow()
unreachable
normal56.i.i: ; preds = %"*Slice(UInt8)@Slice(T)#fill<UInt8>:Slice(UInt8).exit.i.i"
- %452 = extractvalue { i32, i1 } %450, 0
+ %494 = extractvalue { i32, i1 } %492, 0
br label %exit57.i.i
exit57.i.i: ; preds = %normal.i.i.exit57.i.i_crit_edge, %normal56.i.i
- %count.0.i.i = phi i32 [ %452, %normal56.i.i ], [ %tmp, %normal.i.i.exit57.i.i_crit_edge ]
- %ptr.0.i.i = phi i8* [ %scevgep241, %normal56.i.i ], [ %scevgep236, %normal.i.i.exit57.i.i_crit_edge ]
- %453 = icmp slt i32 %435, 0
- br i1 %453, label %then58.i.i, label %exit64.i.i
+ %count.0.i.i = phi i32 [ %494, %normal56.i.i ], [ %tmp, %normal.i.i.exit57.i.i_crit_edge ]
+ %ptr.0.i.i = phi i8* [ %scevgep261, %normal56.i.i ], [ %scevgep256, %normal.i.i.exit57.i.i_crit_edge ]
+ %495 = icmp slt i32 %477, 0
+ br i1 %495, label %then58.i.i, label %exit64.i.i
then58.i.i: ; preds = %exit57.i.i
- %454 = getelementptr inbounds i8, i8* %ptr.0.i.i, i64 -1
- store i8 45, i8* %454, align 1
- %455 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %count.0.i.i, i32 1)
- %456 = extractvalue { i32, i1 } %455, 1
- br i1 %456, label %overflow62.i.i, label %normal63.i.i, !prof !0
+ %496 = getelementptr inbounds i8, i8* %ptr.0.i.i, i64 -1
+ store i8 45, i8* %496, align 1
+ %497 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %count.0.i.i, i32 1)
+ %498 = extractvalue { i32, i1 } %497, 1
+ br i1 %498, label %overflow62.i.i, label %normal63.i.i, !prof !0
overflow62.i.i: ; preds = %then58.i.i
call void @__crystal_raise_overflow()
unreachable
normal63.i.i: ; preds = %then58.i.i
- %457 = extractvalue { i32, i1 } %455, 0
+ %499 = extractvalue { i32, i1 } %497, 0
br label %exit64.i.i
exit64.i.i: ; preds = %normal63.i.i, %exit57.i.i
- %count.1.i.i = phi i32 [ %457, %normal63.i.i ], [ %count.0.i.i, %exit57.i.i ]
- %ptr.1.i.i = phi i8* [ %454, %normal63.i.i ], [ %ptr.0.i.i, %exit57.i.i ]
- %458 = icmp eq i32 %count.1.i.i, 0
- br i1 %458, label %"~Log::pid:init.exit", label %else.i195.i.i
+ %count.1.i.i = phi i32 [ %499, %normal63.i.i ], [ %count.0.i.i, %exit57.i.i ]
+ %ptr.1.i.i = phi i8* [ %496, %normal63.i.i ], [ %ptr.0.i.i, %exit57.i.i ]
+ %500 = icmp eq i32 %count.1.i.i, 0
+ br i1 %500, label %"~Log::pid:init.exit", label %else.i195.i.i
else.i195.i.i: ; preds = %exit64.i.i
- %459 = icmp slt i32 %count.1.i.i, 0
- br i1 %459, label %then.i.i196.i.i, label %exit14.i.i.i
+ %501 = icmp slt i32 %count.1.i.i, 0
+ br i1 %501, label %then.i.i196.i.i, label %exit14.i.i.i
then.i.i196.i.i: ; preds = %else.i195.i.i
- %460 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %460) #29
+ %502 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %502)
unreachable
exit14.i.i.i: ; preds = %else.i195.i.i
- %461 = add nuw i32 %count.1.i.i, 13
- %462 = zext i32 %461 to i64
- %463 = call i8* @GC_malloc_atomic(i64 %462)
- %464 = bitcast i8* %463 to %String*
- %465 = getelementptr inbounds i8, i8* %463, i64 12
- %466 = zext i32 %count.1.i.i to i64
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %465, i8* nonnull align 1 %ptr.1.i.i, i64 %466, i1 false)
- %467 = getelementptr inbounds i8, i8* %465, i64 %466
- store i8 0, i8* %467, align 1
- %.repack.i.i.i45 = bitcast i8* %463 to i32*
- store i32 1, i32* %.repack.i.i.i45, align 4
- %.repack40.i.i.i = getelementptr inbounds i8, i8* %463, i64 4
- %468 = bitcast i8* %.repack40.i.i.i to i32*
- store i32 %count.1.i.i, i32* %468, align 4
- %.repack42.i.i.i = getelementptr inbounds i8, i8* %463, i64 8
- %469 = bitcast i8* %.repack42.i.i.i to i32*
- store i32 %count.1.i.i, i32* %469, align 4
+ %503 = add nuw i32 %count.1.i.i, 13
+ %504 = zext i32 %503 to i64
+ %505 = call i8* @GC_malloc_atomic(i64 %504)
+ %506 = bitcast i8* %505 to %String*
+ %507 = getelementptr inbounds i8, i8* %505, i64 12
+ %508 = zext i32 %count.1.i.i to i64
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %507, i8* nonnull align 1 %ptr.1.i.i, i64 %508, i1 false)
+ %509 = getelementptr inbounds i8, i8* %507, i64 %508
+ store i8 0, i8* %509, align 1
+ %.repack.i.i.i70 = bitcast i8* %505 to i32*
+ store i32 1, i32* %.repack.i.i.i70, align 4
+ %.repack40.i.i.i = getelementptr inbounds i8, i8* %505, i64 4
+ %510 = bitcast i8* %.repack40.i.i.i to i32*
+ store i32 %count.1.i.i, i32* %510, align 4
+ %.repack42.i.i.i = getelementptr inbounds i8, i8* %505, i64 8
+ %511 = bitcast i8* %.repack42.i.i.i to i32*
+ store i32 %count.1.i.i, i32* %511, align 4
br label %"~Log::pid:init.exit"
"~Log::pid:init.exit": ; preds = %"~Log::progname:init.exit", %exit20.fold.split.i.i, %exit64.i.i, %exit14.i.i.i
- %470 = phi %String* [ bitcast ({ i32, i32, i32, [2 x i8] }* @"'0'" to %String*), %"~Log::progname:init.exit" ], [ %464, %exit14.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %exit64.i.i ], [ bitcast ({ i32, i32, i32, [2 x i8] }* @"'1'" to %String*), %exit20.fold.split.i.i ]
- %471 = bitcast [129 x i8]* %7 to i8*
- call void @llvm.lifetime.end.p0i8(i64 129, i8* nonnull %471)
- store %String* %470, %String** @"Log::pid", align 8
- %472 = call i8* @GC_malloc(i64 32)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(32) %472, i8 0, i64 32, i1 false)
- %473 = call i8* @GC_malloc(i64 56)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %473, i8 0, i64 56, i1 false)
- %474 = call i8* @GC_malloc(i64 24)
- %475 = bitcast i8* %474 to i32*
- %476 = getelementptr inbounds i8, i8* %474, i64 4
- %477 = bitcast i8* %476 to i32*
- store i32 0, i32* %477, align 4
- store i32 206, i32* %475, align 4
- %478 = getelementptr inbounds i8, i8* %474, i64 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %478, i8 0, i64 16, i1 false) #22
- %479 = getelementptr inbounds i8, i8* %473, i64 24
- %480 = bitcast i8* %479 to i8**
- store i8* %474, i8** %480, align 8
- %481 = getelementptr inbounds i8, i8* %473, i64 32
- %482 = bitcast i8* %481 to i32*
- store i32 0, i32* %482, align 4
- %483 = call i8* @GC_malloc_atomic(i64 4)
- %484 = bitcast i8* %483 to i32*
- store i32 186, i32* %484, align 4
- %485 = getelementptr inbounds i8, i8* %473, i64 40
- %486 = bitcast i8* %485 to i8**
- store i8* %483, i8** %486, align 8
- %487 = bitcast i8* %473 to i32*
- store i32 224, i32* %487, align 4
- %488 = getelementptr inbounds i8, i8* %473, i64 48
- %489 = bitcast i8* %488 to i32*
- store i32 2, i32* %489, align 4
- %490 = getelementptr inbounds i8, i8* %472, i64 8
- %491 = bitcast i8* %490 to i8**
- store i8* %473, i8** %491, align 8
- %492 = call i8* @GC_malloc(i64 56)
- %493 = bitcast i8* %492 to i32*
- %494 = getelementptr inbounds i8, i8* %492, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %494, i8 0, i64 36, i1 false)
- store i32 60, i32* %493, align 4
- %495 = getelementptr inbounds i8, i8* %492, i64 8
- %.repack.i.i.i.i46 = getelementptr inbounds i8, i8* %492, i64 40
- %496 = getelementptr inbounds i8, i8* %492, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %495, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i46, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %496, align 1
- %497 = getelementptr inbounds i8, i8* %472, i64 16
- %498 = bitcast i8* %497 to i8**
- store i8* %492, i8** %498, align 8
- %499 = call i8* @GC_malloc(i64 24)
- %500 = bitcast i8* %499 to <4 x i32>*
- store <4 x i32> <i32 29, i32 0, i32 0, i32 0>, <4 x i32>* %500, align 4
- %501 = getelementptr inbounds i8, i8* %499, i64 16
- %502 = bitcast i8* %501 to %"Log::Builder::Binding"**
- store %"Log::Builder::Binding"* null, %"Log::Builder::Binding"** %502, align 8
- %503 = getelementptr inbounds i8, i8* %472, i64 24
- %504 = bitcast i8* %503 to i8**
- store i8* %499, i8** %504, align 8
- %505 = bitcast i8* %472 to i32*
- store i32 247, i32* %505, align 4
- store i8* %472, i8** bitcast (%"Log::Builder"** @"Log::builder" to i8**), align 8
- %506 = load %"Array(Proc(Int32, (Exception+ | Nil), Nil))"*, %"Array(Proc(Int32, (Exception+ | Nil), Nil))"** @"Crystal::AtExitHandlers::handlers", align 8
- %507 = icmp eq %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %506, null
- br i1 %507, label %then.i.i.i, label %"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i"
+ %512 = phi %String* [ bitcast ({ i32, i32, i32, [2 x i8] }* @"'0'" to %String*), %"~Log::progname:init.exit" ], [ %506, %exit14.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %exit64.i.i ], [ bitcast ({ i32, i32, i32, [2 x i8] }* @"'1'" to %String*), %exit20.fold.split.i.i ]
+ %513 = bitcast [129 x i8]* %7 to i8*
+ call void @llvm.lifetime.end.p0i8(i64 129, i8* nonnull %513)
+ store %String* %512, %String** @"Log::pid", align 8
+ %514 = call i8* @GC_malloc(i64 32)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(32) %514, i8 0, i64 32, i1 false)
+ %515 = call i8* @GC_malloc(i64 56)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %515, i8 0, i64 56, i1 false)
+ %516 = call i8* @GC_malloc(i64 24)
+ %517 = bitcast i8* %516 to i32*
+ %518 = getelementptr inbounds i8, i8* %516, i64 4
+ %519 = bitcast i8* %518 to i32*
+ store i32 0, i32* %519, align 4
+ store i32 206, i32* %517, align 4
+ %520 = getelementptr inbounds i8, i8* %516, i64 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %520, i8 0, i64 16, i1 false) #21
+ %521 = getelementptr inbounds i8, i8* %515, i64 24
+ %522 = bitcast i8* %521 to i8**
+ store i8* %516, i8** %522, align 8
+ %523 = getelementptr inbounds i8, i8* %515, i64 32
+ %524 = bitcast i8* %523 to i32*
+ store i32 0, i32* %524, align 4
+ %525 = call i8* @GC_malloc_atomic(i64 4)
+ %526 = bitcast i8* %525 to i32*
+ store i32 186, i32* %526, align 4
+ %527 = getelementptr inbounds i8, i8* %515, i64 40
+ %528 = bitcast i8* %527 to i8**
+ store i8* %525, i8** %528, align 8
+ %529 = bitcast i8* %515 to i32*
+ store i32 224, i32* %529, align 4
+ %530 = getelementptr inbounds i8, i8* %515, i64 48
+ %531 = bitcast i8* %530 to i32*
+ store i32 2, i32* %531, align 4
+ %532 = getelementptr inbounds i8, i8* %514, i64 8
+ %533 = bitcast i8* %532 to i8**
+ store i8* %515, i8** %533, align 8
+ %534 = call i8* @GC_malloc(i64 56)
+ %535 = bitcast i8* %534 to i32*
+ %536 = getelementptr inbounds i8, i8* %534, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %536, i8 0, i64 36, i1 false)
+ store i32 60, i32* %535, align 4
+ %537 = getelementptr inbounds i8, i8* %534, i64 8
+ %.repack.i.i.i.i71 = getelementptr inbounds i8, i8* %534, i64 40
+ %538 = getelementptr inbounds i8, i8* %534, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %537, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i71, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %538, align 1
+ %539 = getelementptr inbounds i8, i8* %514, i64 16
+ %540 = bitcast i8* %539 to i8**
+ store i8* %534, i8** %540, align 8
+ %541 = call i8* @GC_malloc(i64 24)
+ %542 = bitcast i8* %541 to <4 x i32>*
+ store <4 x i32> <i32 29, i32 0, i32 0, i32 0>, <4 x i32>* %542, align 4
+ %543 = getelementptr inbounds i8, i8* %541, i64 16
+ %544 = bitcast i8* %543 to %"Log::Builder::Binding"**
+ store %"Log::Builder::Binding"* null, %"Log::Builder::Binding"** %544, align 8
+ %545 = getelementptr inbounds i8, i8* %514, i64 24
+ %546 = bitcast i8* %545 to i8**
+ store i8* %541, i8** %546, align 8
+ %547 = bitcast i8* %514 to i32*
+ store i32 247, i32* %547, align 4
+ store i8* %514, i8** bitcast (%"Log::Builder"** @"Log::builder" to i8**), align 8
+ %548 = load %"Array(Proc(Int32, (Exception+ | Nil), Nil))"*, %"Array(Proc(Int32, (Exception+ | Nil), Nil))"** @"Crystal::AtExitHandlers::handlers", align 8
+ %549 = icmp eq %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %548, null
+ br i1 %549, label %then.i.i.i, label %"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i"
then.i.i.i: ; preds = %"~Log::pid:init.exit"
- %508 = call i8* @GC_malloc(i64 24)
- %509 = bitcast i8* %508 to %"Array(Proc(Int32, (Exception+ | Nil), Nil))"*
- %510 = bitcast i8* %508 to <4 x i32>*
- store <4 x i32> <i32 24, i32 0, i32 0, i32 0>, <4 x i32>* %510, align 4
- %511 = getelementptr inbounds i8, i8* %508, i64 16
- %512 = bitcast i8* %511 to %"->"**
- store %"->"* null, %"->"** %512, align 8
- store i8* %508, i8** bitcast (%"Array(Proc(Int32, (Exception+ | Nil), Nil))"** @"Crystal::AtExitHandlers::handlers" to i8**), align 8
+ %550 = call i8* @GC_malloc(i64 24)
+ %551 = bitcast i8* %550 to %"Array(Proc(Int32, (Exception+ | Nil), Nil))"*
+ %552 = bitcast i8* %550 to <4 x i32>*
+ store <4 x i32> <i32 24, i32 0, i32 0, i32 0>, <4 x i32>* %552, align 4
+ %553 = getelementptr inbounds i8, i8* %550, i64 16
+ %554 = bitcast i8* %553 to %"->"**
+ store %"->"* null, %"->"** %554, align 8
+ store i8* %550, i8** bitcast (%"Array(Proc(Int32, (Exception+ | Nil), Nil))"** @"Crystal::AtExitHandlers::handlers" to i8**), align 8
br label %"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i"
"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i": ; preds = %then.i.i.i, %"~Log::pid:init.exit"
- %513 = phi %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* [ %509, %then.i.i.i ], [ %506, %"~Log::pid:init.exit" ]
- %self.idx5.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 1
+ %555 = phi %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* [ %551, %then.i.i.i ], [ %548, %"~Log::pid:init.exit" ]
+ %self.idx5.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 1
%self.idx5.val.i.i.i.i.i = load i32, i32* %self.idx5.i.i.i.i.i, align 4
- %514 = zext i32 %self.idx5.val.i.i.i.i.i to i64
- %self.idx6.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 2
+ %556 = zext i32 %self.idx5.val.i.i.i.i.i to i64
+ %self.idx6.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 2
%self.idx6.val.i.i.i.i.i = load i32, i32* %self.idx6.i.i.i.i.i, align 4
- %self.idx7.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 3
+ %self.idx7.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 3
%self.idx7.val.i.i.i.i.i = load i32, i32* %self.idx7.i.i.i.i.i, align 4
- %515 = sext i32 %self.idx7.val.i.i.i.i.i to i64
- %516 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 %self.idx7.val.i.i.i.i.i)
- %517 = extractvalue { i32, i1 } %516, 1
- br i1 %517, label %overflow.i.i.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#needs_resize?:Bool.exit.i.i.i.i.i", !prof !0
+ %557 = sext i32 %self.idx7.val.i.i.i.i.i to i64
+ %558 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 %self.idx7.val.i.i.i.i.i)
+ %559 = extractvalue { i32, i1 } %558, 1
+ br i1 %559, label %overflow.i.i.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#needs_resize?:Bool.exit.i.i.i.i.i", !prof !0
overflow.i.i.i.i.i.i.i: ; preds = %"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i"
call void @__crystal_raise_overflow()
unreachable
"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#needs_resize?:Bool.exit.i.i.i.i.i": ; preds = %"*Crystal::AtExitHandlers::handlers:Array(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i"
- %518 = trunc i64 %514 to i32
- %519 = extractvalue { i32, i1 } %516, 0
- %520 = icmp eq i32 %519, %518
- br i1 %520, label %exit.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
+ %560 = trunc i64 %556 to i32
+ %561 = extractvalue { i32, i1 } %558, 0
+ %562 = icmp eq i32 %561, %560
+ br i1 %562, label %exit.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
exit.i.i.i.i.i: ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#needs_resize?:Bool.exit.i.i.i.i.i"
- %.not.i.i.i.i.i47 = icmp eq i32 %self.idx6.val.i.i.i.i.i, 0
- br i1 %.not.i.i.i.i.i47, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i", label %then5.i.i.i.i.i
+ %.not.i.i.i.i.i72 = icmp eq i32 %self.idx6.val.i.i.i.i.i, 0
+ br i1 %.not.i.i.i.i.i72, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i", label %then5.i.i.i.i.i
then1.i.i.i.i.i: ; preds = %then3.i.i.i.i.i
- %521 = trunc i64 %514 to i32
- %self.idx4.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 4
+ %563 = trunc i64 %556 to i32
+ %self.idx4.i.i.i.i.i = getelementptr %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 4
%self.idx4.val.i.i.i.i.i = load %"->"*, %"->"** %self.idx4.i.i.i.i.i, align 8
- %522 = icmp slt i32 %521, 0
- br i1 %522, label %then.i.i.i.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#copy_from<Pointer(Proc(Int32, (Exception+ | Nil), Nil)), Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
+ %564 = icmp slt i32 %563, 0
+ br i1 %564, label %then.i.i.i.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#copy_from<Pointer(Proc(Int32, (Exception+ | Nil), Nil)), Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
then.i.i.i.i.i.i.i.i: ; preds = %then1.i.i.i.i.i
- %523 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %523)
+ %565 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %565)
unreachable
"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#copy_from<Pointer(Proc(Int32, (Exception+ | Nil), Nil)), Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i": ; preds = %then1.i.i.i.i.i
- %524 = sub nsw i64 0, %515
- %525 = getelementptr inbounds %"->", %"->"* %self.idx4.val.i.i.i.i.i, i64 %524
- %526 = bitcast %"->"* %525 to i8*
- %527 = bitcast %"->"* %self.idx4.val.i.i.i.i.i to i8*
- %528 = shl nuw nsw i64 %514, 4
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %526, i8* align 1 %527, i64 %528, i1 false)
- %529 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr266 = getelementptr i8, i8* %529, i64 12
- %530 = bitcast i8* %sunkaddr266 to i32*
- %self.idx.val.i.i.i.i.i = load i32, i32* %530, align 4
- %531 = zext i32 %self.idx.val.i.i.i.i.i to i64
- %532 = icmp slt i32 %self.idx.val.i.i.i.i.i, 0
- br i1 %532, label %overflow.i.i8.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#clear<Int32>:Nil.exit.i.i.i.i.i", !prof !0
+ %566 = sub nsw i64 0, %557
+ %567 = getelementptr inbounds %"->", %"->"* %self.idx4.val.i.i.i.i.i, i64 %566
+ %568 = bitcast %"->"* %567 to i8*
+ %569 = bitcast %"->"* %self.idx4.val.i.i.i.i.i to i8*
+ %570 = shl nuw nsw i64 %556, 4
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %568, i8* align 1 %569, i64 %570, i1 false)
+ %571 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr290 = getelementptr i8, i8* %571, i64 12
+ %572 = bitcast i8* %sunkaddr290 to i32*
+ %self.idx.val.i.i.i.i.i = load i32, i32* %572, align 4
+ %573 = zext i32 %self.idx.val.i.i.i.i.i to i64
+ %574 = icmp slt i32 %self.idx.val.i.i.i.i.i, 0
+ br i1 %574, label %overflow.i.i8.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#clear<Int32>:Nil.exit.i.i.i.i.i", !prof !0
overflow.i.i8.i.i.i.i.i: ; preds = %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#copy_from<Pointer(Proc(Int32, (Exception+ | Nil), Nil)), Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
call void @__crystal_raise_overflow()
unreachable
"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#clear<Int32>:Nil.exit.i.i.i.i.i": ; preds = %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#copy_from<Pointer(Proc(Int32, (Exception+ | Nil), Nil)), Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
- %533 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr267 = getelementptr i8, i8* %533, i64 16
- %534 = bitcast i8* %sunkaddr267 to %"->"**
- %self.idx2.val.i.i.i.i.i = load %"->"*, %"->"** %534, align 8
- %535 = sub nsw i64 0, %531
- %536 = getelementptr inbounds %"->", %"->"* %self.idx2.val.i.i.i.i.i, i64 %535
- %537 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr268 = getelementptr i8, i8* %537, i64 4
- %538 = bitcast i8* %sunkaddr268 to i32*
- %539 = load i32, i32* %538, align 4
- %540 = sext i32 %539 to i64
- %541 = getelementptr inbounds %"->", %"->"* %536, i64 %540
- %542 = shl nuw nsw i64 %531, 4
- %543 = bitcast %"->"* %541 to i8*
- call void @llvm.memset.p0i8.i64(i8* align 1 %543, i8 0, i64 %542, i1 false)
- %544 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr269 = getelementptr i8, i8* %544, i64 12
- %545 = bitcast i8* %sunkaddr269 to i32*
- %self.idx.val.i.i.i.i.i.i = load i32, i32* %545, align 4
- %self.idx1.val.i.i.i.i.i.i = load %"->"*, %"->"** %534, align 8
- %546 = sext i32 %self.idx.val.i.i.i.i.i.i to i64
- %547 = sub nsw i64 0, %546
- %548 = getelementptr inbounds %"->", %"->"* %self.idx1.val.i.i.i.i.i.i, i64 %547
- store %"->"* %548, %"->"** %534, align 8
- store i32 0, i32* %545, align 4
+ %575 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr291 = getelementptr i8, i8* %575, i64 16
+ %576 = bitcast i8* %sunkaddr291 to %"->"**
+ %self.idx2.val.i.i.i.i.i = load %"->"*, %"->"** %576, align 8
+ %577 = sub nsw i64 0, %573
+ %578 = getelementptr inbounds %"->", %"->"* %self.idx2.val.i.i.i.i.i, i64 %577
+ %579 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr292 = getelementptr i8, i8* %579, i64 4
+ %580 = bitcast i8* %sunkaddr292 to i32*
+ %581 = load i32, i32* %580, align 4
+ %582 = sext i32 %581 to i64
+ %583 = getelementptr inbounds %"->", %"->"* %578, i64 %582
+ %584 = bitcast %"->"* %583 to i8*
+ %585 = shl nuw nsw i64 %573, 4
+ call void @llvm.memset.p0i8.i64(i8* align 1 %584, i8 0, i64 %585, i1 false)
+ %586 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr293 = getelementptr i8, i8* %586, i64 12
+ %587 = bitcast i8* %sunkaddr293 to i32*
+ %self.idx.val.i.i.i.i.i.i = load i32, i32* %587, align 4
+ %self.idx1.val.i.i.i.i.i.i = load %"->"*, %"->"** %576, align 8
+ %588 = sext i32 %self.idx.val.i.i.i.i.i.i to i64
+ %589 = sub nsw i64 0, %588
+ %590 = getelementptr inbounds %"->", %"->"* %self.idx1.val.i.i.i.i.i.i, i64 %589
+ store %"->"* %590, %"->"** %576, align 8
+ store i32 0, i32* %587, align 4
br label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
else.i.i.i.i.i.i.i: ; preds = %then5.i.i.i.i.i, %then3.i.i.i.i.i
- %549 = icmp slt i32 %self.idx6.val.i.i.i.i.i, 256
- br i1 %549, label %then1.i.i.i.i.i.i.i, label %normal4.i.i.i.i.i.i.i
+ %591 = icmp slt i32 %self.idx6.val.i.i.i.i.i, 256
+ br i1 %591, label %then1.i.i.i.i.i.i.i, label %normal4.i.i.i.i.i.i.i
then1.i.i.i.i.i.i.i: ; preds = %else.i.i.i.i.i.i.i
- %550 = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 2)
- %551 = extractvalue { i32, i1 } %550, 1
- br i1 %551, label %overflow.i.i11.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i", !prof !0
+ %592 = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 2)
+ %593 = extractvalue { i32, i1 } %592, 1
+ br i1 %593, label %overflow.i.i11.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i", !prof !0
overflow.i.i11.i.i.i.i.i: ; preds = %then1.i.i.i.i.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal4.i.i.i.i.i.i.i: ; preds = %else.i.i.i.i.i.i.i
- %552 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 768)
- %553 = extractvalue { i32, i1 } %552, 1
- br i1 %553, label %overflow5.i.i.i.i.i.i.i, label %normal6.i.i.i.i.i.i.i, !prof !0
+ %594 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 768)
+ %595 = extractvalue { i32, i1 } %594, 1
+ br i1 %595, label %overflow5.i.i.i.i.i.i.i, label %normal6.i.i.i.i.i.i.i, !prof !0
overflow5.i.i.i.i.i.i.i: ; preds = %normal4.i.i.i.i.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal6.i.i.i.i.i.i.i: ; preds = %normal4.i.i.i.i.i.i.i
- %554 = extractvalue { i32, i1 } %552, 0
- %555 = lshr i32 %554, 2
- %556 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 %555)
- %557 = extractvalue { i32, i1 } %556, 1
- br i1 %557, label %overflow7.i.i.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i", !prof !0
+ %596 = extractvalue { i32, i1 } %594, 0
+ %597 = lshr i32 %596, 2
+ %598 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %self.idx6.val.i.i.i.i.i, i32 %597)
+ %599 = extractvalue { i32, i1 } %598, 1
+ br i1 %599, label %overflow7.i.i.i.i.i.i.i, label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i", !prof !0
overflow7.i.i.i.i.i.i.i: ; preds = %normal6.i.i.i.i.i.i.i
call void @__crystal_raise_overflow()
unreachable
"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i": ; preds = %normal6.i.i.i.i.i.i.i, %then1.i.i.i.i.i.i.i
- %.pn.i.i.i.i.i.i = phi { i32, i1 } [ %550, %then1.i.i.i.i.i.i.i ], [ %556, %normal6.i.i.i.i.i.i.i ]
+ %.pn.i.i.i.i.i.i = phi { i32, i1 } [ %592, %then1.i.i.i.i.i.i.i ], [ %598, %normal6.i.i.i.i.i.i.i ]
%common.ret.op.i.i.i.i.i.i.i = extractvalue { i32, i1 } %.pn.i.i.i.i.i.i, 0
- %558 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr270 = getelementptr i8, i8* %558, i64 8
- %559 = bitcast i8* %sunkaddr270 to i32*
- store i32 %common.ret.op.i.i.i.i.i.i.i, i32* %559, align 4
- %560 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 4
- %561 = load %"->"*, %"->"** %560, align 8
- %.not.i.i.i.i.i.i.i = icmp eq %"->"* %561, null
+ %600 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr294 = getelementptr i8, i8* %600, i64 8
+ %601 = bitcast i8* %sunkaddr294 to i32*
+ store i32 %common.ret.op.i.i.i.i.i.i.i, i32* %601, align 4
+ %602 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 4
+ %603 = load %"->"*, %"->"** %602, align 8
+ %.not.i.i.i.i.i.i.i = icmp eq %"->"* %603, null
br i1 %.not.i.i.i.i.i.i.i, label %else.i1.i.i.i.i.i.i, label %then.i.i.i.i.i.i.i
"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i": ; preds = %exit.i.i.i.i.i
- %562 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr271 = getelementptr i8, i8* %562, i64 8
- %563 = bitcast i8* %sunkaddr271 to i32*
- store i32 3, i32* %563, align 4
- %564 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 4
- %565 = load %"->"*, %"->"** %564, align 8
- %.not.i3.i.i.i.i.i.i = icmp eq %"->"* %565, null
+ %604 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr295 = getelementptr i8, i8* %604, i64 8
+ %605 = bitcast i8* %sunkaddr295 to i32*
+ store i32 3, i32* %605, align 4
+ %606 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 4
+ %607 = load %"->"*, %"->"** %606, align 8
+ %.not.i3.i.i.i.i.i.i = icmp eq %"->"* %607, null
br i1 %.not.i3.i.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i", label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
then.i.i.i.i.i.i.i: ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i"
- %566 = icmp slt i32 %common.ret.op.i.i.i.i.i.i.i, 0
- br i1 %566, label %then.i.i.i12.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
+ %608 = icmp slt i32 %common.ret.op.i.i.i.i.i.i.i, 0
+ br i1 %608, label %then.i.i.i12.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
then.i.i.i12.i.i.i.i.i: ; preds = %then.i.i.i.i.i.i.i
- %567 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %567)
+ %609 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %609)
unreachable
"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i": ; preds = %then.i.i.i.i.i.i.i, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i"
%common.ret.op.i48.i.i.i.i.i.i = phi i32 [ %common.ret.op.i.i.i.i.i.i.i, %then.i.i.i.i.i.i.i ], [ 3, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
- %568 = phi %"->"** [ %560, %then.i.i.i.i.i.i.i ], [ %564, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
- %569 = phi %"->"* [ %561, %then.i.i.i.i.i.i.i ], [ %565, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
- %570 = trunc i64 %515 to i32
- %571 = sext i32 %570 to i64
- %572 = sub nsw i64 0, %571
- %573 = getelementptr inbounds %"->", %"->"* %569, i64 %572
- %574 = zext i32 %common.ret.op.i48.i.i.i.i.i.i to i64
- %575 = bitcast %"->"* %573 to i8*
- %576 = shl nuw nsw i64 %574, 4
- %577 = call i8* @GC_realloc(i8* nonnull %575, i64 %576)
- %578 = bitcast i8* %577 to %"->"*
- %579 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr272 = getelementptr i8, i8* %579, i64 12
- %580 = bitcast i8* %sunkaddr272 to i32*
- %581 = load i32, i32* %580, align 4
- %582 = sext i32 %581 to i64
- %583 = getelementptr inbounds %"->", %"->"* %578, i64 %582
+ %610 = phi %"->"** [ %602, %then.i.i.i.i.i.i.i ], [ %606, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
+ %611 = phi %"->"* [ %603, %then.i.i.i.i.i.i.i ], [ %607, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
+ %612 = trunc i64 %557 to i32
+ %613 = sext i32 %612 to i64
+ %614 = sub nsw i64 0, %613
+ %615 = getelementptr inbounds %"->", %"->"* %611, i64 %614
+ %616 = zext i32 %common.ret.op.i48.i.i.i.i.i.i to i64
+ %617 = bitcast %"->"* %615 to i8*
+ %618 = shl nuw nsw i64 %616, 4
+ %619 = call i8* @GC_realloc(i8* nonnull %617, i64 %618)
+ %620 = bitcast i8* %619 to %"->"*
+ %621 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr296 = getelementptr i8, i8* %621, i64 12
+ %622 = bitcast i8* %sunkaddr296 to i32*
+ %623 = load i32, i32* %622, align 4
+ %624 = sext i32 %623 to i64
+ %625 = getelementptr inbounds %"->", %"->"* %620, i64 %624
br label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#increase_capacity:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
else.i1.i.i.i.i.i.i: ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.i.i.i.i.i.i"
- %584 = icmp slt i32 %common.ret.op.i.i.i.i.i.i.i, 0
- br i1 %584, label %then.i2.i.i.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
+ %626 = icmp slt i32 %common.ret.op.i.i.i.i.i.i.i, 0
+ br i1 %626, label %then.i2.i.i.i.i.i.i.i, label %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
then.i2.i.i.i.i.i.i.i: ; preds = %else.i1.i.i.i.i.i.i
- %585 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %585)
+ %627 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %627)
unreachable
"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i": ; preds = %else.i1.i.i.i.i.i.i, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i"
%common.ret.op.i511.i.i.i.i.i.i = phi i32 [ %common.ret.op.i.i.i.i.i.i.i, %else.i1.i.i.i.i.i.i ], [ 3, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
- %586 = phi %"->"** [ %560, %else.i1.i.i.i.i.i.i ], [ %564, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
- %587 = zext i32 %common.ret.op.i511.i.i.i.i.i.i to i64
- %588 = shl nuw nsw i64 %587, 4
- %589 = call i8* @GC_malloc(i64 %588)
- call void @llvm.memset.p0i8.i64(i8* align 4 %589, i8 0, i64 %588, i1 false)
- %590 = bitcast i8* %589 to %"->"*
+ %628 = phi %"->"** [ %602, %else.i1.i.i.i.i.i.i ], [ %606, %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#calculate_new_capacity:Int32.exit.thread.i.i.i.i.i.i" ]
+ %629 = zext i32 %common.ret.op.i511.i.i.i.i.i.i to i64
+ %630 = shl nuw nsw i64 %629, 4
+ %631 = call i8* @GC_malloc(i64 %630)
+ call void @llvm.memset.p0i8.i64(i8* align 4 %631, i8 0, i64 %630, i1 false)
+ %632 = bitcast i8* %631 to %"->"*
br label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#increase_capacity:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i"
"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#increase_capacity:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i": ; preds = %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i", %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i"
- %591 = phi %"->"** [ %586, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ], [ %568, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ]
- %storemerge.i.i.i.i.i.i.i = phi %"->"* [ %590, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ], [ %583, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ]
- store %"->"* %storemerge.i.i.i.i.i.i.i, %"->"** %591, align 8
+ %633 = phi %"->"** [ %628, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ], [ %610, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ]
+ %storemerge.i.i.i.i.i.i.i = phi %"->"* [ %632, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)::malloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ], [ %625, %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#realloc<Int32>:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i.i.i" ]
+ store %"->"* %storemerge.i.i.i.i.i.i.i, %"->"** %633, align 8
br label %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
then3.i.i.i.i.i: ; preds = %then5.i.i.i.i.i
- %592 = trunc i64 %515 to i32
- %593 = sitofp i32 %self.idx6.val.i.i.i.i.i to double
- %594 = fmul double %593, 5.000000e-01
- %595 = sitofp i32 %592 to double
- %596 = fcmp ugt double %594, %595
- br i1 %596, label %else.i.i.i.i.i.i.i, label %then1.i.i.i.i.i
+ %634 = trunc i64 %557 to i32
+ %635 = sitofp i32 %self.idx6.val.i.i.i.i.i to double
+ %636 = fmul double %635, 5.000000e-01
+ %637 = sitofp i32 %634 to double
+ %638 = fcmp ugt double %636, %637
+ br i1 %638, label %else.i.i.i.i.i.i.i, label %then1.i.i.i.i.i
then5.i.i.i.i.i: ; preds = %exit.i.i.i.i.i
- %597 = trunc i64 %515 to i32
- %.not13.i.i.i.i.i = icmp eq i32 %597, 0
+ %639 = trunc i64 %557 to i32
+ %.not13.i.i.i.i.i = icmp eq i32 %639, 0
br i1 %.not13.i.i.i.i.i, label %else.i.i.i.i.i.i.i, label %then3.i.i.i.i.i
"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i": ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#increase_capacity:Pointer(Proc(Int32, (Exception+ | Nil), Nil)).exit.i.i.i.i.i", %"*Pointer(Proc(Int32, (Exception+ | Nil), Nil))@Pointer(T)#clear<Int32>:Nil.exit.i.i.i.i.i", %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#needs_resize?:Bool.exit.i.i.i.i.i"
- %598 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513, i64 0, i32 4
- %599 = load %"->"*, %"->"** %598, align 8
- %600 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr273 = getelementptr i8, i8* %600, i64 4
- %601 = bitcast i8* %sunkaddr273 to i32*
- %602 = load i32, i32* %601, align 4
- %603 = sext i32 %602 to i64
- %.repack.i.i.i.i.i = getelementptr inbounds %"->", %"->"* %599, i64 %603, i32 0
+ %640 = getelementptr inbounds %"Array(Proc(Int32, (Exception+ | Nil), Nil))", %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555, i64 0, i32 4
+ %641 = load %"->"*, %"->"** %640, align 8
+ %642 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr297 = getelementptr i8, i8* %642, i64 4
+ %643 = bitcast i8* %sunkaddr297 to i32*
+ %644 = load i32, i32* %643, align 4
+ %645 = sext i32 %644 to i64
+ %.repack.i.i.i.i.i = getelementptr inbounds %"->", %"->"* %641, i64 %645, i32 0
store i8* bitcast (void (i32, i32*)* @"~procProc(Int32, (Exception | Nil), Nil)@src/log/main.cr:49" to i8*), i8** %.repack.i.i.i.i.i, align 8
- %.repack1.i.i.i.i.i = getelementptr inbounds %"->", %"->"* %599, i64 %603, i32 1
+ %.repack1.i.i.i.i.i = getelementptr inbounds %"->", %"->"* %641, i64 %645, i32 1
store i8* null, i8** %.repack1.i.i.i.i.i, align 8
- %604 = load i32, i32* %601, align 4
- %605 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %604, i32 1)
- %606 = extractvalue { i32, i1 } %605, 1
- br i1 %606, label %overflow.i.i.i.i48, label %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit", !prof !0
+ %646 = load i32, i32* %643, align 4
+ %647 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %646, i32 1)
+ %648 = extractvalue { i32, i1 } %647, 1
+ br i1 %648, label %overflow.i.i.i.i73, label %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit", !prof !0
-overflow.i.i.i.i48: ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
+overflow.i.i.i.i73: ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
call void @__crystal_raise_overflow()
unreachable
"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit": ; preds = %"*Array(Proc(Int32, (Exception+ | Nil), Nil))@Array(T)#check_needs_resize:(Int32 | Pointer(Proc(Int32, (Exception+ | Nil), Nil)) | Nil).exit.i.i.i.i"
- %607 = extractvalue { i32, i1 } %605, 0
- %608 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %513 to i8*
- %sunkaddr274 = getelementptr i8, i8* %608, i64 4
- %609 = bitcast i8* %sunkaddr274 to i32*
- store i32 %607, i32* %609, align 4
- %610 = call i8* @GC_malloc(i64 56)
- %611 = getelementptr inbounds i8, i8* %610, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %611, i8 0, i64 52, i1 false)
- %612 = bitcast i8* %610 to i32*
- store i32 243, i32* %612, align 4
- %613 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %613, i1* nonnull @"STDOUT:init", i8* bitcast (void ()* @"~STDOUT:init" to i8*))
- %614 = load i32*, i32** bitcast (%"IO::FileDescriptor"** @STDOUT to i32**), align 8
- %615 = getelementptr inbounds i8, i8* %610, i64 24
- %616 = bitcast i8* %615 to i32**
- store i32* %614, i32** %616, align 8
- %617 = getelementptr inbounds i8, i8* %610, i64 32
- %618 = bitcast i8* %617 to i32*
- store i32 1856, i32* %618, align 4
- %619 = getelementptr inbounds i8, i8* %610, i64 40
- %620 = bitcast i8* %619 to i32*
- store i32 1856, i32* %620, align 4
- %621 = call i8* @GC_malloc(i64 24)
- %622 = getelementptr inbounds i8, i8* %621, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %622, i8 0, i64 20, i1 false)
- %623 = bitcast i8* %621 to i32*
- store i32 249, i32* %623, align 4
- %624 = call i8* @GC_malloc(i64 8)
- %625 = bitcast i8* %624 to i8**
- store i8* %621, i8** %625, align 8
- %626 = call i8* @GC_malloc(i64 48)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(48) %626, i8 0, i64 48, i1 false)
- %627 = call i8* @GC_malloc_atomic(i64 4)
- %628 = bitcast i8* %627 to i32*
- store i32 186, i32* %628, align 4
- %629 = getelementptr inbounds i8, i8* %626, i64 16
- %630 = bitcast i8* %629 to i8**
- store i8* %627, i8** %630, align 8
- %631 = bitcast i8* %626 to i32*
- store i32 199, i32* %631, align 4
- %632 = getelementptr inbounds i8, i8* %626, i64 24
- %633 = bitcast i8* %632 to i32*
- store i32 2048, i32* %633, align 4
- %634 = getelementptr inbounds i8, i8* %626, i64 28
- %635 = bitcast i8* %634 to i1*
- store i1 false, i1* %635, align 1
- %636 = getelementptr inbounds i8, i8* %626, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %636, i8 0, i64 16, i1 false)
- %637 = call i8* @GC_malloc(i64 24)
- %638 = bitcast i8* %637 to i32*
- %639 = getelementptr inbounds i8, i8* %637, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(20) %639, i8 0, i64 20, i1 false)
- store i32 212, i32* %638, align 4
- %640 = getelementptr inbounds i8, i8* %637, i64 12
- %641 = bitcast i8* %640 to i32*
- store i32 2048, i32* %641, align 4
- %642 = call i8* @GC_malloc(i64 163840)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(163840) %642, i8 0, i64 163840, i1 false)
- %643 = getelementptr inbounds i8, i8* %637, i64 16
- %644 = bitcast i8* %643 to i8**
- store i8* %642, i8** %644, align 8
- %645 = getelementptr inbounds i8, i8* %626, i64 8
- %646 = bitcast i8* %645 to i8**
- store i8* %637, i8** %646, align 8
- %647 = getelementptr inbounds i8, i8* %621, i64 8
- %648 = bitcast i8* %647 to i8**
- store i8* %626, i8** %648, align 8
- %649 = call i8* @GC_malloc(i64 48)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(48) %649, i8 0, i64 48, i1 false)
- %650 = call i8* @GC_malloc_atomic(i64 4)
- %651 = bitcast i8* %650 to i32*
- store i32 186, i32* %651, align 4
- %652 = getelementptr inbounds i8, i8* %649, i64 16
- %653 = bitcast i8* %652 to i8**
- store i8* %650, i8** %653, align 8
- %654 = bitcast i8* %649 to i32*
- store i32 200, i32* %654, align 4
- %655 = getelementptr inbounds i8, i8* %649, i64 24
- %656 = bitcast i8* %655 to i32*
- store i32 0, i32* %656, align 4
- %657 = getelementptr inbounds i8, i8* %649, i64 28
- %658 = bitcast i8* %657 to i1*
- store i1 false, i1* %658, align 1
- %659 = getelementptr inbounds i8, i8* %649, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %659, i8 0, i64 16, i1 false) #22
- %660 = getelementptr inbounds i8, i8* %621, i64 16
- %661 = bitcast i8* %660 to i8**
- store i8* %649, i8** %661, align 8
- %.fca.1.insert.i.i.i.i.i.i = insertvalue %"->" { i8* bitcast (void (i8*)* @"~procProc(Nil)@src/log/dispatch.cr:51" to i8*), i8* poison }, i8* %624, 1
- %662 = call fastcc %Fiber* @"*Fiber::new<Nil, &Proc(Nil)>:Fiber"(%"->" %.fca.1.insert.i.i.i.i.i.i)
- call fastcc void @"*Crystal::Scheduler::enqueue<Fiber>:Nil"(%Fiber* %662)
- call void @GC_register_finalizer_ignore_self(i8* %621, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc6Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
- %663 = ptrtoint i8* %621 to i64
- %oldret1.i.i = insertvalue [1 x i64] poison, i64 %663, 0
+ %649 = extractvalue { i32, i1 } %647, 0
+ %650 = bitcast %"Array(Proc(Int32, (Exception+ | Nil), Nil))"* %555 to i8*
+ %sunkaddr298 = getelementptr i8, i8* %650, i64 4
+ %651 = bitcast i8* %sunkaddr298 to i32*
+ store i32 %649, i32* %651, align 4
+ %652 = call i8* @GC_malloc(i64 56)
+ %653 = getelementptr inbounds i8, i8* %652, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %653, i8 0, i64 52, i1 false)
+ %654 = bitcast i8* %652 to i32*
+ store i32 243, i32* %654, align 4
+ %655 = load i8*, i8** @"~ONCE_STATE", align 8
+ call void @__crystal_once(i8* %655, i1* nonnull @"STDOUT:init", i8* bitcast (void ()* @"~STDOUT:init" to i8*))
+ %656 = load i32*, i32** bitcast (%"IO::FileDescriptor"** @STDOUT to i32**), align 8
+ %657 = getelementptr inbounds i8, i8* %652, i64 24
+ %658 = bitcast i8* %657 to i32**
+ store i32* %656, i32** %658, align 8
+ %659 = getelementptr inbounds i8, i8* %652, i64 32
+ %660 = bitcast i8* %659 to i32*
+ store i32 1856, i32* %660, align 4
+ %661 = getelementptr inbounds i8, i8* %652, i64 40
+ %662 = bitcast i8* %661 to i32*
+ store i32 1856, i32* %662, align 4
+ %663 = call i8* @GC_malloc(i64 24)
+ %664 = getelementptr inbounds i8, i8* %663, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %664, i8 0, i64 20, i1 false)
+ %665 = bitcast i8* %663 to i32*
+ store i32 249, i32* %665, align 4
+ %666 = call i8* @GC_malloc(i64 8)
+ %667 = bitcast i8* %666 to i8**
+ store i8* %663, i8** %667, align 8
+ %668 = call i8* @GC_malloc(i64 48)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(48) %668, i8 0, i64 48, i1 false)
+ %669 = call i8* @GC_malloc_atomic(i64 4)
+ %670 = bitcast i8* %669 to i32*
+ store i32 186, i32* %670, align 4
+ %671 = getelementptr inbounds i8, i8* %668, i64 16
+ %672 = bitcast i8* %671 to i8**
+ store i8* %669, i8** %672, align 8
+ %673 = bitcast i8* %668 to i32*
+ store i32 199, i32* %673, align 4
+ %674 = getelementptr inbounds i8, i8* %668, i64 24
+ %675 = bitcast i8* %674 to i32*
+ store i32 2048, i32* %675, align 4
+ %676 = getelementptr inbounds i8, i8* %668, i64 28
+ %677 = bitcast i8* %676 to i1*
+ store i1 false, i1* %677, align 1
+ %678 = getelementptr inbounds i8, i8* %668, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %678, i8 0, i64 16, i1 false)
+ %679 = call i8* @GC_malloc(i64 24)
+ %680 = bitcast i8* %679 to i32*
+ %681 = getelementptr inbounds i8, i8* %679, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(20) %681, i8 0, i64 20, i1 false)
+ store i32 212, i32* %680, align 4
+ %682 = getelementptr inbounds i8, i8* %679, i64 12
+ %683 = bitcast i8* %682 to i32*
+ store i32 2048, i32* %683, align 4
+ %684 = call i8* @GC_malloc(i64 163840)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(163840) %684, i8 0, i64 163840, i1 false)
+ %685 = getelementptr inbounds i8, i8* %679, i64 16
+ %686 = bitcast i8* %685 to i8**
+ store i8* %684, i8** %686, align 8
+ %687 = getelementptr inbounds i8, i8* %668, i64 8
+ %688 = bitcast i8* %687 to i8**
+ store i8* %679, i8** %688, align 8
+ %689 = getelementptr inbounds i8, i8* %663, i64 8
+ %690 = bitcast i8* %689 to i8**
+ store i8* %668, i8** %690, align 8
+ %691 = call i8* @GC_malloc(i64 48)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(48) %691, i8 0, i64 48, i1 false)
+ %692 = call i8* @GC_malloc_atomic(i64 4)
+ %693 = bitcast i8* %692 to i32*
+ store i32 186, i32* %693, align 4
+ %694 = getelementptr inbounds i8, i8* %691, i64 16
+ %695 = bitcast i8* %694 to i8**
+ store i8* %692, i8** %695, align 8
+ %696 = bitcast i8* %691 to i32*
+ store i32 200, i32* %696, align 4
+ %697 = getelementptr inbounds i8, i8* %691, i64 24
+ %698 = bitcast i8* %697 to i32*
+ store i32 0, i32* %698, align 4
+ %699 = getelementptr inbounds i8, i8* %691, i64 28
+ %700 = bitcast i8* %699 to i1*
+ store i1 false, i1* %700, align 1
+ %701 = getelementptr inbounds i8, i8* %691, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %701, i8 0, i64 16, i1 false) #21
+ %702 = getelementptr inbounds i8, i8* %663, i64 16
+ %703 = bitcast i8* %702 to i8**
+ store i8* %691, i8** %703, align 8
+ %.fca.1.insert.i.i.i.i.i.i = insertvalue %"->" { i8* bitcast (void (i8*)* @"~procProc(Nil)@src/log/dispatch.cr:51" to i8*), i8* poison }, i8* %666, 1
+ %704 = call fastcc %Fiber* @"*Fiber::new<Nil, &Proc(Nil)>:Fiber"(%"->" %.fca.1.insert.i.i.i.i.i.i)
+ call fastcc void @"*Crystal::Scheduler::enqueue<Fiber>:Nil"(%Fiber* %704)
+ call void @GC_register_finalizer_ignore_self(i8* %663, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc6Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
+ %705 = ptrtoint i8* %663 to i64
+ %oldret1.i.i = insertvalue [1 x i64] poison, i64 %705, 0
%oldret2.i.i.i.i = insertvalue %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)" { i32 249, [1 x i64] undef }, [1 x i64] %oldret1.i.i, 1
- %664 = getelementptr inbounds i8, i8* %610, i64 8
- %665 = bitcast i8* %664 to %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)"*
- store %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)" %oldret2.i.i.i.i, %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)"* %665, align 8
- %666 = load %"Log::Builder"*, %"Log::Builder"** @"Log::builder", align 8
- %667 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %666, i64 0, i32 1
- %668 = load %Mutex*, %Mutex** %667, align 8
- %669 = getelementptr inbounds %Mutex, %Mutex* %668, i64 0, i32 2, i32 0
- %670 = atomicrmw xchg i32* %669, i32 1 seq_cst, align 4
- %671 = icmp eq i32 %670, 0
- %672 = getelementptr inbounds %Mutex, %Mutex* %668, i64 0, i32 7
- %673 = load i32, i32* %672, align 4
- br i1 %671, label %then.i.i.i49, label %else.i.i.i50
+ %706 = getelementptr inbounds i8, i8* %652, i64 8
+ %707 = bitcast i8* %706 to %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)"*
+ store %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)" %oldret2.i.i.i.i, %"(Log::AsyncDispatcher | Log::DirectDispatcher:Module | Log::SyncDispatcher)"* %707, align 8
+ %708 = load %"Log::Builder"*, %"Log::Builder"** @"Log::builder", align 8
+ %709 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %708, i64 0, i32 1
+ %710 = load %Mutex*, %Mutex** %709, align 8
+ %711 = getelementptr inbounds %Mutex, %Mutex* %710, i64 0, i32 2, i32 0
+ %712 = atomicrmw xchg i32* %711, i32 1 seq_cst, align 4
+ %713 = icmp eq i32 %712, 0
+ %714 = getelementptr inbounds %Mutex, %Mutex* %710, i64 0, i32 7
+ %715 = load i32, i32* %714, align 4
+ br i1 %713, label %then.i.i.i74, label %else.i.i.i75
-then.i.i.i49: ; preds = %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit"
- %674 = icmp eq i32 %673, 2
- br i1 %674, label %"*Mutex#lock:Nil.exit.i.i", label %else2.i.i.i51
+then.i.i.i74: ; preds = %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit"
+ %716 = icmp eq i32 %715, 2
+ br i1 %716, label %"*Mutex#lock:Nil.exit.i.i", label %else2.i.i.i76
-else.i.i.i50: ; preds = %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit"
- %675 = icmp eq i32 %673, 2
- br i1 %675, label %else4.i.i.i, label %then5.i.i.i
+else.i.i.i75: ; preds = %"*at_exit<&Proc(Int32, (Exception+ | Nil), Nil)>:Nil.exit"
+ %717 = icmp eq i32 %715, 2
+ br i1 %717, label %else4.i.i.i, label %then5.i.i.i
-else2.i.i.i51: ; preds = %then.i.i.i49
- %676 = call fastcc %Fiber* @"*Crystal::Scheduler::current_fiber:Fiber"()
- %677 = getelementptr inbounds %Mutex, %Mutex* %668, i64 0, i32 1
- store %Fiber* %676, %Fiber** %677, align 8
+else2.i.i.i76: ; preds = %then.i.i.i74
+ %718 = call fastcc %Fiber* @"*Fiber::current:Fiber"()
+ %719 = getelementptr inbounds %Mutex, %Mutex* %710, i64 0, i32 1
+ store %Fiber* %718, %Fiber** %719, align 8
br label %"*Mutex#lock:Nil.exit.i.i"
then3.i.i.i: ; preds = %then5.i.i.i
- %678 = bitcast %Mutex* %668 to i8*
- %sunkaddr275 = getelementptr inbounds i8, i8* %678, i64 48
- %679 = bitcast i8* %sunkaddr275 to i32*
- %680 = load i32, i32* %679, align 4
- %681 = icmp eq i32 %680, 1
- br i1 %681, label %then11.i.i.i, label %else12.i.i.i
+ %720 = bitcast %Mutex* %710 to i8*
+ %sunkaddr299 = getelementptr inbounds i8, i8* %720, i64 48
+ %721 = bitcast i8* %sunkaddr299 to i32*
+ %722 = load i32, i32* %721, align 4
+ %723 = icmp eq i32 %722, 1
+ br i1 %723, label %then11.i.i.i, label %else12.i.i.i
-else4.i.i.i: ; preds = %then5.i.i.i, %else.i.i.i50
- call void @"*Mutex#lock_slow:Nil"(%Mutex* nonnull %668)
+else4.i.i.i: ; preds = %then5.i.i.i, %else.i.i.i75
+ call void @"*Mutex#lock_slow:Nil"(%Mutex* nonnull %710)
br label %"*Mutex#lock:Nil.exit.i.i"
-then5.i.i.i: ; preds = %else.i.i.i50
- %682 = getelementptr inbounds %Mutex, %Mutex* %668, i64 0, i32 1
- %683 = load %Fiber*, %Fiber** %682, align 8
- %684 = icmp ne %Fiber* %683, null
- %685 = call fastcc %Fiber* @"*Crystal::Scheduler::current_fiber:Fiber"()
- %686 = icmp eq %Fiber* %683, %685
- %or.cond.i.i.i52 = select i1 %684, i1 %686, i1 false
- br i1 %or.cond.i.i.i52, label %then3.i.i.i, label %else4.i.i.i
+then5.i.i.i: ; preds = %else.i.i.i75
+ %724 = getelementptr inbounds %Mutex, %Mutex* %710, i64 0, i32 1
+ %725 = load %Fiber*, %Fiber** %724, align 8
+ %726 = icmp ne %Fiber* %725, null
+ %727 = call fastcc %Fiber* @"*Fiber::current:Fiber"()
+ %728 = icmp eq %Fiber* %725, %727
+ %or.cond.i.i.i77 = select i1 %726, i1 %728, i1 false
+ br i1 %or.cond.i.i.i77, label %then3.i.i.i, label %else4.i.i.i
then11.i.i.i: ; preds = %then3.i.i.i
- %687 = getelementptr inbounds %Mutex, %Mutex* %668, i64 0, i32 3
- %688 = load i32, i32* %687, align 4
- %689 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %688, i32 1)
- %690 = extractvalue { i32, i1 } %689, 1
- br i1 %690, label %overflow.i.i.i53, label %normal.i.i.i, !prof !0
+ %729 = getelementptr inbounds %Mutex, %Mutex* %710, i64 0, i32 3
+ %730 = load i32, i32* %729, align 4
+ %731 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %730, i32 1)
+ %732 = extractvalue { i32, i1 } %731, 1
+ br i1 %732, label %overflow.i.i.i78, label %normal.i.i.i, !prof !0
else12.i.i.i: ; preds = %then3.i.i.i
call fastcc void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [47 x i8] }* @"'Attempt to lock a m...'" to %String*))
unreachable
-overflow.i.i.i53: ; preds = %then11.i.i.i
+overflow.i.i.i78: ; preds = %then11.i.i.i
call void @__crystal_raise_overflow()
unreachable
normal.i.i.i: ; preds = %then11.i.i.i
- %691 = extractvalue { i32, i1 } %689, 0
- %692 = bitcast %Mutex* %668 to i8*
- %sunkaddr276 = getelementptr inbounds i8, i8* %692, i64 20
- %693 = bitcast i8* %sunkaddr276 to i32*
- store i32 %691, i32* %693, align 4
+ %733 = extractvalue { i32, i1 } %731, 0
+ %734 = bitcast %Mutex* %710 to i8*
+ %sunkaddr300 = getelementptr inbounds i8, i8* %734, i64 20
+ %735 = bitcast i8* %sunkaddr300 to i32*
+ store i32 %733, i32* %735, align 4
br label %"*Mutex#lock:Nil.exit.i.i"
-"*Mutex#lock:Nil.exit.i.i": ; preds = %normal.i.i.i, %else4.i.i.i, %else2.i.i.i51, %then.i.i.i49
- %694 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %666, i64 0, i32 3
- %695 = load %"Array(Log::Builder::Binding)"*, %"Array(Log::Builder::Binding)"** %694, align 8
- %696 = getelementptr inbounds %"Array(Log::Builder::Binding)", %"Array(Log::Builder::Binding)"* %695, i64 0, i32 1
- %697 = load i32, i32* %696, align 4
- %698 = zext i32 %697 to i64
- %699 = icmp slt i32 %697, 0
- br i1 %699, label %overflow.i.i.i.i.i, label %invoke_out.i.i, !prof !0
+"*Mutex#lock:Nil.exit.i.i": ; preds = %normal.i.i.i, %else4.i.i.i, %else2.i.i.i76, %then.i.i.i74
+ %736 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %708, i64 0, i32 3
+ %737 = load %"Array(Log::Builder::Binding)"*, %"Array(Log::Builder::Binding)"** %736, align 8
+ %738 = getelementptr inbounds %"Array(Log::Builder::Binding)", %"Array(Log::Builder::Binding)"* %737, i64 0, i32 1
+ %739 = load i32, i32* %738, align 4
+ %740 = zext i32 %739 to i64
+ %741 = icmp slt i32 %739, 0
+ br i1 %741, label %overflow.i.i.i.i.i, label %invoke_out.i.i, !prof !0
overflow.i.i.i.i.i: ; preds = %"*Mutex#lock:Nil.exit.i.i"
invoke void @__crystal_raise_overflow()
@@ -2921,41 +3004,41 @@ overflow.i.i.i.i.i: ; preds = %"*Mutex#lock:Nil.ex
.noexc.i.i: ; preds = %overflow.i.i.i.i.i
unreachable
-rescue.i.i: ; preds = %overflow53.i.i, %overflow31.i.i, %overflow.i140.i.i, %overflow20.i.i, %overflow7.i.i.i, %overflow5.i.i.i, %overflow1.i.i.i, %overflow.i131.i.i, %overflow.i.i55, %overflow.i128.i.i, %overflow.i.i.i.i.i
- %700 = landingpad %landing_pad
+rescue.i.i: ; preds = %overflow53.i.i, %overflow31.i.i, %overflow.i140.i.i, %overflow20.i.i, %overflow7.i.i.i, %overflow5.i.i.i, %overflow1.i.i.i, %overflow.i131.i.i, %overflow.i.i80, %overflow.i128.i.i, %overflow.i.i.i.i.i
+ %742 = landingpad %landing_pad
cleanup
- %701 = extractvalue %landing_pad %700, 0
- %702 = bitcast i8* %701 to %"struct.LibUnwind::Exception"*
- call fastcc void @"*Mutex#unlock:Nil"(%Mutex* %668)
- call void @__crystal_raise(%"struct.LibUnwind::Exception"* %702)
+ %743 = extractvalue %landing_pad %742, 0
+ %744 = bitcast i8* %743 to %"struct.LibUnwind::Exception"*
+ call fastcc void @"*Mutex#unlock:Nil"(%Mutex* %710)
+ call void @__crystal_raise(%"struct.LibUnwind::Exception"* %744)
unreachable
invoke_out.i.i: ; preds = %"*Mutex#lock:Nil.exit.i.i"
- %703 = getelementptr inbounds %"Array(Log::Builder::Binding)", %"Array(Log::Builder::Binding)"* %695, i64 0, i32 4
- %704 = bitcast %"Log::Builder::Binding"** %703 to i8**
- %705 = load i8*, i8** %704, align 8
- %706 = mul nuw nsw i64 %698, 24
- call void @llvm.memset.p0i8.i64(i8* align 1 %705, i8 0, i64 %706, i1 false)
- %707 = bitcast %"Array(Log::Builder::Binding)"* %695 to i8*
- %sunkaddr277 = getelementptr inbounds i8, i8* %707, i64 4
- %708 = bitcast i8* %sunkaddr277 to i32*
- store i32 0, i32* %708, align 4
- %709 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %666, i64 0, i32 2
- %710 = load %"Hash(String, WeakRef(Log))"*, %"Hash(String, WeakRef(Log))"** %709, align 8
- %711 = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %710, i64 0, i32 4
- %712 = load i32, i32* %711, align 4
- %713 = icmp eq i32 %712, 0
- br i1 %713, label %else.i60, label %else.i66.i
+ %745 = getelementptr inbounds %"Array(Log::Builder::Binding)", %"Array(Log::Builder::Binding)"* %737, i64 0, i32 4
+ %746 = bitcast %"Log::Builder::Binding"** %745 to i8**
+ %747 = load i8*, i8** %746, align 8
+ %748 = mul nuw nsw i64 %740, 24
+ call void @llvm.memset.p0i8.i64(i8* align 1 %747, i8 0, i64 %748, i1 false)
+ %749 = bitcast %"Array(Log::Builder::Binding)"* %737 to i8*
+ %sunkaddr301 = getelementptr inbounds i8, i8* %749, i64 4
+ %750 = bitcast i8* %sunkaddr301 to i32*
+ store i32 0, i32* %750, align 4
+ %751 = getelementptr inbounds %"Log::Builder", %"Log::Builder"* %708, i64 0, i32 2
+ %752 = load %"Hash(String, WeakRef(Log))"*, %"Hash(String, WeakRef(Log))"** %751, align 8
+ %753 = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %752, i64 0, i32 4
+ %754 = load i32, i32* %753, align 4
+ %755 = icmp eq i32 %754, 0
+ br i1 %755, label %else.i85, label %else.i66.i
else.i66.i: ; preds = %invoke_out.i.i
- %714 = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %710, i64 0, i32 1
- %715 = load i32, i32* %714, align 4
- %716 = sext i32 %715 to i64
- %.idx125.i.i = getelementptr %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %710, i64 0, i32 5
+ %756 = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %752, i64 0, i32 1
+ %757 = load i32, i32* %756, align 4
+ %758 = sext i32 %757 to i64
+ %.idx125.i.i = getelementptr %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %752, i64 0, i32 5
%.idx125.val.i.i = load i32, i32* %.idx125.i.i, align 4
- %717 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %712, i32 %.idx125.val.i.i)
- %718 = extractvalue { i32, i1 } %717, 1
- br i1 %718, label %overflow.i128.i.i, label %invoke_out2.i.i, !prof !0
+ %759 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %754, i32 %.idx125.val.i.i)
+ %760 = extractvalue { i32, i1 } %759, 1
+ br i1 %760, label %overflow.i128.i.i, label %invoke_out2.i.i, !prof !0
overflow.i128.i.i: ; preds = %else.i66.i
invoke void @__crystal_raise_overflow()
@@ -2964,17 +3047,17 @@ overflow.i128.i.i: ; preds = %else.i66.i
.noexc130.i.i: ; preds = %overflow.i128.i.i
unreachable
-exit.i.i54: ; preds = %exit12.i.i
- %719 = bitcast %"Log::Builder"* %666 to i8*
- %sunkaddr278 = getelementptr inbounds i8, i8* %719, i64 16
- %720 = bitcast i8* %sunkaddr278 to %"Hash(String, WeakRef(Log))"**
- %.pre.i.i = load %"Hash(String, WeakRef(Log))"*, %"Hash(String, WeakRef(Log))"** %720, align 8
+exit.i.i79: ; preds = %exit12.i.i
+ %761 = bitcast %"Log::Builder"* %708 to i8*
+ %sunkaddr302 = getelementptr inbounds i8, i8* %761, i64 16
+ %762 = bitcast i8* %sunkaddr302 to %"Hash(String, WeakRef(Log))"**
+ %.pre.i.i = load %"Hash(String, WeakRef(Log))"*, %"Hash(String, WeakRef(Log))"** %762, align 8
%.phi.trans.insert.i.i = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %.pre.i.i, i64 0, i32 4
%.pre155.i.i = load i32, i32* %.phi.trans.insert.i.i, align 4
- %721 = icmp eq i32 %.pre155.i.i, 0
- br i1 %721, label %else.i60, label %exit.i.else28.i69_crit_edge.i
+ %763 = icmp eq i32 %.pre155.i.i, 0
+ br i1 %763, label %else.i85, label %exit.i.else28.i69_crit_edge.i
-exit.i.else28.i69_crit_edge.i: ; preds = %exit.i.i54
+exit.i.else28.i69_crit_edge.i: ; preds = %exit.i.i79
%.phi.trans.insert.i = getelementptr inbounds %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %.pre.i.i, i64 0, i32 1
%.pre.i = load i32, i32* %.phi.trans.insert.i, align 4
%.idx123.i.phi.trans.insert.i = getelementptr %"Hash(String, WeakRef(Log))", %"Hash(String, WeakRef(Log))"* %.pre.i.i, i64 0, i32 5
@@ -2983,53 +3066,53 @@ exit.i.else28.i69_crit_edge.i: ; preds = %exit.i.i54
br label %else28.i69.i
invoke_out2.i.i: ; preds = %else.i66.i
- %722 = extractvalue { i32, i1 } %717, 0
- %723 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %722, i32 -1)
- %724 = extractvalue { i32, i1 } %723, 0
- %725 = extractvalue { i32, i1 } %723, 1
- br i1 %725, label %overflow.i.i55, label %normal.i.i56, !prof !0
+ %764 = extractvalue { i32, i1 } %759, 0
+ %765 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %764, i32 -1)
+ %766 = extractvalue { i32, i1 } %765, 0
+ %767 = extractvalue { i32, i1 } %765, 1
+ br i1 %767, label %overflow.i.i80, label %normal.i.i81, !prof !0
-overflow.i.i55: ; preds = %invoke_out2.i.i
+overflow.i.i80: ; preds = %invoke_out2.i.i
invoke void @__crystal_raise_overflow()
to label %invoke_out3.i.i unwind label %rescue.i.i
-normal.i.i56: ; preds = %invoke_out2.i.i
- %.not.i67.i = icmp sgt i32 %715, %724
+normal.i.i81: ; preds = %invoke_out2.i.i
+ %.not.i67.i = icmp sgt i32 %757, %766
br i1 %.not.i67.i, label %else28.i69.i, label %invoke_out9.preheader.i.i
-invoke_out9.preheader.i.i: ; preds = %normal.i.i56
- %sext.i.i = sext i32 %724 to i64
+invoke_out9.preheader.i.i: ; preds = %normal.i.i81
+ %sext.i.i = sext i32 %766 to i64
br label %invoke_out9.i.i
-invoke_out3.i.i: ; preds = %overflow.i.i55
+invoke_out3.i.i: ; preds = %overflow.i.i80
unreachable
invoke_out9.i.i: ; preds = %else19.i.i, %invoke_out9.preheader.i.i
- %indvars.iv.i.i = phi i64 [ %716, %invoke_out9.preheader.i.i ], [ %indvars.iv.next.i.i, %else19.i.i ]
- %726 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr279 = getelementptr i8, i8* %726, i64 8
- %727 = bitcast i8* %sunkaddr279 to %"Hash::Entry(String, WeakRef(Log))"**
- %.idx126.val.i.i = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %727, align 8
- %728 = getelementptr inbounds %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %.idx126.val.i.i, i64 %indvars.iv.i.i
- %729 = load %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %728, align 8
- %oldret.i.i.i68.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %729, 0
- %730 = icmp eq i32 %oldret.i.i.i68.i, 0
- br i1 %730, label %exit12.i.i, label %invoke_out15.i.i
+ %indvars.iv.i.i = phi i64 [ %758, %invoke_out9.preheader.i.i ], [ %indvars.iv.next.i.i, %else19.i.i ]
+ %768 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr303 = getelementptr i8, i8* %768, i64 8
+ %769 = bitcast i8* %sunkaddr303 to %"Hash::Entry(String, WeakRef(Log))"**
+ %.idx126.val.i.i = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %769, align 8
+ %770 = getelementptr inbounds %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %.idx126.val.i.i, i64 %indvars.iv.i.i
+ %771 = load %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %770, align 8
+ %oldret.i.i.i68.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %771, 0
+ %772 = icmp eq i32 %oldret.i.i.i68.i, 0
+ br i1 %772, label %exit12.i.i, label %invoke_out15.i.i
-exit12.i.i: ; preds = %while.i.i.i58, %invoke_out15.i.i, %then3.i134.i.i, %normal2.i.i.i, %invoke_out9.i.i
- %731 = icmp eq i64 %indvars.iv.i.i, %sext.i.i
- br i1 %731, label %exit.i.i54, label %else19.i.i
+exit12.i.i: ; preds = %while.i.i.i83, %invoke_out15.i.i, %then3.i134.i.i, %normal2.i.i.i, %invoke_out9.i.i
+ %773 = icmp eq i64 %indvars.iv.i.i, %sext.i.i
+ br i1 %773, label %exit.i.i79, label %else19.i.i
then13.i.i: ; preds = %invoke_out15.i.i
- %732 = bitcast %"Hash::Entry(String, WeakRef(Log))"* %728 to i8*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %732, i8 0, i64 24, i1 false) #22
- %733 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr280 = getelementptr inbounds i8, i8* %733, i64 24
- %734 = bitcast i8* %sunkaddr280 to i32*
- %735 = load i32, i32* %734, align 4
- %736 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %735, i32 -1)
- %737 = extractvalue { i32, i1 } %736, 1
- br i1 %737, label %overflow.i131.i.i, label %normal.i132.i.i, !prof !0
+ %774 = bitcast %"Hash::Entry(String, WeakRef(Log))"* %770 to i8*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %774, i8 0, i64 24, i1 false) #21
+ %775 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr304 = getelementptr inbounds i8, i8* %775, i64 24
+ %776 = bitcast i8* %sunkaddr304 to i32*
+ %777 = load i32, i32* %776, align 4
+ %778 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %777, i32 -1)
+ %779 = extractvalue { i32, i1 } %778, 1
+ br i1 %779, label %overflow.i131.i.i, label %normal.i132.i.i, !prof !0
overflow.i131.i.i: ; preds = %then13.i.i
invoke void @__crystal_raise_overflow()
@@ -3039,19 +3122,19 @@ overflow.i131.i.i: ; preds = %then13.i.i
unreachable
normal.i132.i.i: ; preds = %then13.i.i
- %738 = extractvalue { i32, i1 } %736, 0
- %739 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr281 = getelementptr inbounds i8, i8* %739, i64 24
- %740 = bitcast i8* %sunkaddr281 to i32*
- store i32 %738, i32* %740, align 4
- %741 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr282 = getelementptr i8, i8* %741, i64 28
- %742 = bitcast i8* %sunkaddr282 to i32*
- %743 = load i32, i32* %742, align 4
- %744 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %743, i32 1)
- %745 = extractvalue { i32, i1 } %744, 0
- %746 = extractvalue { i32, i1 } %744, 1
- br i1 %746, label %overflow1.i.i.i, label %normal2.i.i.i, !prof !0
+ %780 = extractvalue { i32, i1 } %778, 0
+ %781 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr305 = getelementptr inbounds i8, i8* %781, i64 24
+ %782 = bitcast i8* %sunkaddr305 to i32*
+ store i32 %780, i32* %782, align 4
+ %783 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr306 = getelementptr i8, i8* %783, i64 28
+ %784 = bitcast i8* %sunkaddr306 to i32*
+ %785 = load i32, i32* %784, align 4
+ %786 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %785, i32 1)
+ %787 = extractvalue { i32, i1 } %786, 0
+ %788 = extractvalue { i32, i1 } %786, 1
+ br i1 %788, label %overflow1.i.i.i, label %normal2.i.i.i, !prof !0
overflow1.i.i.i: ; preds = %normal.i132.i.i
invoke void @__crystal_raise_overflow()
@@ -3061,40 +3144,40 @@ overflow1.i.i.i: ; preds = %normal.i132.i.i
unreachable
normal2.i.i.i: ; preds = %normal.i132.i.i
- %747 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr283 = getelementptr i8, i8* %747, i64 28
- %748 = bitcast i8* %sunkaddr283 to i32*
- store i32 %745, i32* %748, align 4
- %749 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr284 = getelementptr inbounds i8, i8* %749, i64 4
- %750 = bitcast i8* %sunkaddr284 to i32*
- %751 = load i32, i32* %750, align 4
- %752 = trunc i64 %indvars.iv.i.i to i32
- %.not.i.i.i = icmp eq i32 %751, %752
+ %789 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr307 = getelementptr i8, i8* %789, i64 28
+ %790 = bitcast i8* %sunkaddr307 to i32*
+ store i32 %787, i32* %790, align 4
+ %791 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr308 = getelementptr inbounds i8, i8* %791, i64 4
+ %792 = bitcast i8* %sunkaddr308 to i32*
+ %793 = load i32, i32* %792, align 4
+ %794 = trunc i64 %indvars.iv.i.i to i32
+ %.not.i.i.i = icmp eq i32 %793, %794
br i1 %.not.i.i.i, label %else.i133.i.i, label %exit12.i.i
else.i133.i.i: ; preds = %normal2.i.i.i
- %753 = icmp eq i32 %738, 0
- br i1 %753, label %then3.i134.i.i, label %else4.i135.i.i
+ %795 = icmp eq i32 %780, 0
+ br i1 %795, label %then3.i134.i.i, label %else4.i135.i.i
then3.i134.i.i: ; preds = %else.i133.i.i
- %754 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr285 = getelementptr inbounds i8, i8* %754, i64 4
- %755 = bitcast i8* %sunkaddr285 to i32*
- store i32 %745, i32* %755, align 4
+ %796 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr309 = getelementptr inbounds i8, i8* %796, i64 4
+ %797 = bitcast i8* %sunkaddr309 to i32*
+ store i32 %787, i32* %797, align 4
br label %exit12.i.i
else4.i135.i.i: ; preds = %else.i133.i.i
- %756 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %751, i32 1)
- %757 = extractvalue { i32, i1 } %756, 1
- br i1 %757, label %overflow5.i.i.i, label %while.preheader.i.i.i, !prof !0
+ %798 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %793, i32 1)
+ %799 = extractvalue { i32, i1 } %798, 1
+ br i1 %799, label %overflow5.i.i.i, label %while.preheader.i.i.i, !prof !0
while.preheader.i.i.i: ; preds = %else4.i135.i.i
- %758 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr286 = getelementptr i8, i8* %758, i64 8
- %759 = bitcast i8* %sunkaddr286 to %"Hash::Entry(String, WeakRef(Log))"**
- %760 = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %759, align 8
- br label %while.i.i.i58
+ %800 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr310 = getelementptr i8, i8* %800, i64 8
+ %801 = bitcast i8* %sunkaddr310 to %"Hash::Entry(String, WeakRef(Log))"**
+ %802 = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %801, align 8
+ br label %while.i.i.i83
overflow5.i.i.i: ; preds = %else4.i135.i.i
invoke void @__crystal_raise_overflow()
@@ -3103,25 +3186,25 @@ overflow5.i.i.i: ; preds = %else4.i135.i.i
.noexc138.i.i: ; preds = %overflow5.i.i.i
unreachable
-while.i.i.i58: ; preds = %body.i.i.i59, %while.preheader.i.i.i
- %.pn.i.i.i57 = phi { i32, i1 } [ %767, %body.i.i.i59 ], [ %756, %while.preheader.i.i.i ]
- %storemerge.i.i.i = extractvalue { i32, i1 } %.pn.i.i.i57, 0
- %761 = bitcast %"Hash(String, WeakRef(Log))"* %710 to i8*
- %sunkaddr287 = getelementptr inbounds i8, i8* %761, i64 4
- %762 = bitcast i8* %sunkaddr287 to i32*
- store i32 %storemerge.i.i.i, i32* %762, align 4
- %763 = sext i32 %storemerge.i.i.i to i64
- %764 = getelementptr inbounds %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %760, i64 %763, i32 0
- %765 = load i32, i32* %764, align 4
- %766 = icmp eq i32 %765, 0
- br i1 %766, label %body.i.i.i59, label %exit12.i.i
+while.i.i.i83: ; preds = %body.i.i.i84, %while.preheader.i.i.i
+ %.pn.i.i.i82 = phi { i32, i1 } [ %809, %body.i.i.i84 ], [ %798, %while.preheader.i.i.i ]
+ %storemerge.i.i.i = extractvalue { i32, i1 } %.pn.i.i.i82, 0
+ %803 = bitcast %"Hash(String, WeakRef(Log))"* %752 to i8*
+ %sunkaddr311 = getelementptr inbounds i8, i8* %803, i64 4
+ %804 = bitcast i8* %sunkaddr311 to i32*
+ store i32 %storemerge.i.i.i, i32* %804, align 4
+ %805 = sext i32 %storemerge.i.i.i to i64
+ %806 = getelementptr inbounds %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %802, i64 %805, i32 0
+ %807 = load i32, i32* %806, align 4
+ %808 = icmp eq i32 %807, 0
+ br i1 %808, label %body.i.i.i84, label %exit12.i.i
-body.i.i.i59: ; preds = %while.i.i.i58
- %767 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %storemerge.i.i.i, i32 1)
- %768 = extractvalue { i32, i1 } %767, 1
- br i1 %768, label %overflow7.i.i.i, label %while.i.i.i58, !prof !0
+body.i.i.i84: ; preds = %while.i.i.i83
+ %809 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %storemerge.i.i.i, i32 1)
+ %810 = extractvalue { i32, i1 } %809, 1
+ br i1 %810, label %overflow7.i.i.i, label %while.i.i.i83, !prof !0
-overflow7.i.i.i: ; preds = %body.i.i.i59
+overflow7.i.i.i: ; preds = %body.i.i.i84
invoke void @__crystal_raise_overflow()
to label %.noexc139.i.i unwind label %rescue.i.i
@@ -3129,17 +3212,17 @@ overflow7.i.i.i: ; preds = %body.i.i.i59
unreachable
invoke_out15.i.i: ; preds = %invoke_out9.i.i
- %oldret3.i.i.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %729, 2
- %769 = getelementptr inbounds %"WeakRef(Log)", %"WeakRef(Log)"* %oldret3.i.i.i.i, i64 0, i32 1
- %770 = bitcast i8** %769 to %Log**
- %771 = load %Log*, %Log** %770, align 8
- %772 = icmp eq %Log* %771, null
- br i1 %772, label %then13.i.i, label %exit12.i.i
+ %oldret3.i.i.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %771, 2
+ %811 = getelementptr inbounds %"WeakRef(Log)", %"WeakRef(Log)"* %oldret3.i.i.i.i, i64 0, i32 1
+ %812 = bitcast i8** %811 to %Log**
+ %813 = load %Log*, %Log** %812, align 8
+ %814 = icmp eq %Log* %813, null
+ br i1 %814, label %then13.i.i, label %exit12.i.i
else19.i.i: ; preds = %exit12.i.i
%indvars.iv.next.i.i = add nsw i64 %indvars.iv.i.i, 1
- %773 = icmp eq i64 %indvars.iv.i.i, 2147483647
- br i1 %773, label %overflow20.i.i, label %invoke_out9.i.i, !prof !0
+ %815 = icmp eq i64 %indvars.iv.i.i, 2147483647
+ br i1 %815, label %overflow20.i.i, label %invoke_out9.i.i, !prof !0
overflow20.i.i: ; preds = %else19.i.i
invoke void @__crystal_raise_overflow()
@@ -3148,12 +3231,12 @@ overflow20.i.i: ; preds = %else19.i.i
invoke_out22.i.i: ; preds = %overflow20.i.i
unreachable
-else28.i69.i: ; preds = %normal.i.i56, %exit.i.else28.i69_crit_edge.i
- %.pre-phi.i = phi { i32, i1 } [ %.pre127.i, %exit.i.else28.i69_crit_edge.i ], [ %717, %normal.i.i56 ]
- %774 = phi i32 [ %.pre.i, %exit.i.else28.i69_crit_edge.i ], [ %715, %normal.i.i56 ]
- %775 = phi %"Hash(String, WeakRef(Log))"* [ %.pre.i.i, %exit.i.else28.i69_crit_edge.i ], [ %710, %normal.i.i56 ]
- %776 = extractvalue { i32, i1 } %.pre-phi.i, 1
- br i1 %776, label %overflow.i140.i.i, label %invoke_out30.i.i, !prof !0
+else28.i69.i: ; preds = %normal.i.i81, %exit.i.else28.i69_crit_edge.i
+ %.pre-phi.i = phi { i32, i1 } [ %.pre127.i, %exit.i.else28.i69_crit_edge.i ], [ %759, %normal.i.i81 ]
+ %816 = phi i32 [ %.pre.i, %exit.i.else28.i69_crit_edge.i ], [ %757, %normal.i.i81 ]
+ %817 = phi %"Hash(String, WeakRef(Log))"* [ %.pre.i.i, %exit.i.else28.i69_crit_edge.i ], [ %752, %normal.i.i81 ]
+ %818 = extractvalue { i32, i1 } %.pre-phi.i, 1
+ br i1 %818, label %overflow.i140.i.i, label %invoke_out30.i.i, !prof !0
overflow.i140.i.i: ; preds = %else28.i69.i
invoke void @__crystal_raise_overflow()
@@ -3163,71 +3246,71 @@ overflow.i140.i.i: ; preds = %else28.i69.i
unreachable
invoke_out30.i.i: ; preds = %else28.i69.i
- %777 = extractvalue { i32, i1 } %.pre-phi.i, 0
- %778 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %777, i32 -1)
- %779 = extractvalue { i32, i1 } %778, 0
- %780 = extractvalue { i32, i1 } %778, 1
- br i1 %780, label %overflow31.i.i, label %normal32.i.i, !prof !0
+ %819 = extractvalue { i32, i1 } %.pre-phi.i, 0
+ %820 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %819, i32 -1)
+ %821 = extractvalue { i32, i1 } %820, 0
+ %822 = extractvalue { i32, i1 } %820, 1
+ br i1 %822, label %overflow31.i.i, label %normal32.i.i, !prof !0
overflow31.i.i: ; preds = %invoke_out30.i.i
invoke void @__crystal_raise_overflow()
to label %invoke_out33.i.i unwind label %rescue.i.i
normal32.i.i: ; preds = %invoke_out30.i.i
- %.not121.i.i = icmp sgt i32 %774, %779
- br i1 %.not121.i.i, label %else.i60, label %invoke_out43.preheader.i.i
+ %.not121.i.i = icmp sgt i32 %816, %821
+ br i1 %.not121.i.i, label %else.i85, label %invoke_out43.preheader.i.i
invoke_out43.preheader.i.i: ; preds = %normal32.i.i
- %781 = sext i32 %774 to i64
- %sext153.i.i = sext i32 %779 to i64
- %782 = add nsw i64 %781, -2147483648
- %783 = sub i64 0, %sext153.i.i
- %784 = mul nsw i64 %781, 24
+ %823 = sext i32 %816 to i64
+ %sext153.i.i = sext i32 %821 to i64
+ %824 = add nsw i64 %823, -2147483648
+ %825 = sub i64 0, %sext153.i.i
+ %826 = mul nsw i64 %823, 24
br label %invoke_out43.i.i
invoke_out33.i.i: ; preds = %overflow31.i.i
unreachable
invoke_out43.i.i: ; preds = %else52.i.i, %invoke_out43.preheader.i.i
- %lsr.iv230 = phi i64 [ %lsr.iv.next231, %else52.i.i ], [ %784, %invoke_out43.preheader.i.i ]
- %lsr.iv = phi i64 [ %math, %else52.i.i ], [ %782, %invoke_out43.preheader.i.i ]
- %785 = add i64 %783, %lsr.iv
- %786 = bitcast %"Hash(String, WeakRef(Log))"* %775 to i8*
- %sunkaddr288 = getelementptr i8, i8* %786, i64 8
- %787 = bitcast i8* %sunkaddr288 to %"Hash::Entry(String, WeakRef(Log))"**
- %.idx127.val.i.i = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %787, align 8
- %.idx127.val.i.i232 = bitcast %"Hash::Entry(String, WeakRef(Log))"* %.idx127.val.i.i to i8*
- %uglygep = getelementptr i8, i8* %.idx127.val.i.i232, i64 %lsr.iv230
- %uglygep233 = bitcast i8* %uglygep to %"Hash::Entry(String, WeakRef(Log))"*
- %788 = load %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %uglygep233, align 8
- %oldret.i.i144.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %788, 0
- %789 = icmp eq i32 %oldret.i.i144.i.i, 0
- br i1 %789, label %exit46.i.i, label %invoke_out47.i.i
+ %lsr.iv250 = phi i64 [ %lsr.iv.next251, %else52.i.i ], [ %826, %invoke_out43.preheader.i.i ]
+ %lsr.iv = phi i64 [ %math, %else52.i.i ], [ %824, %invoke_out43.preheader.i.i ]
+ %827 = add i64 %825, %lsr.iv
+ %828 = bitcast %"Hash(String, WeakRef(Log))"* %817 to i8*
+ %sunkaddr312 = getelementptr i8, i8* %828, i64 8
+ %829 = bitcast i8* %sunkaddr312 to %"Hash::Entry(String, WeakRef(Log))"**
+ %.idx127.val.i.i = load %"Hash::Entry(String, WeakRef(Log))"*, %"Hash::Entry(String, WeakRef(Log))"** %829, align 8
+ %.idx127.val.i.i252 = bitcast %"Hash::Entry(String, WeakRef(Log))"* %.idx127.val.i.i to i8*
+ %uglygep = getelementptr i8, i8* %.idx127.val.i.i252, i64 %lsr.iv250
+ %uglygep253 = bitcast i8* %uglygep to %"Hash::Entry(String, WeakRef(Log))"*
+ %830 = load %"Hash::Entry(String, WeakRef(Log))", %"Hash::Entry(String, WeakRef(Log))"* %uglygep253, align 8
+ %oldret.i.i144.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %830, 0
+ %831 = icmp eq i32 %oldret.i.i144.i.i, 0
+ br i1 %831, label %exit46.i.i, label %invoke_out47.i.i
exit46.i.i: ; preds = %then48.i.i, %invoke_out47.i.i, %invoke_out43.i.i
- %790 = icmp eq i64 %785, -2147483648
- br i1 %790, label %else.i60, label %else52.i.i
+ %832 = icmp eq i64 %827, -2147483648
+ br i1 %832, label %else.i85, label %else52.i.i
invoke_out47.i.i: ; preds = %invoke_out43.i.i
- %oldret3.i.i148.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %788, 2
- %791 = getelementptr inbounds %"WeakRef(Log)", %"WeakRef(Log)"* %oldret3.i.i148.i.i, i64 0, i32 1
- %792 = bitcast i8** %791 to %Log**
- %793 = load %Log*, %Log** %792, align 8
- %.not122.i.i = icmp eq %Log* %793, null
+ %oldret3.i.i148.i.i = extractvalue %"Hash::Entry(String, WeakRef(Log))" %830, 2
+ %833 = getelementptr inbounds %"WeakRef(Log)", %"WeakRef(Log)"* %oldret3.i.i148.i.i, i64 0, i32 1
+ %834 = bitcast i8** %833 to %Log**
+ %835 = load %Log*, %Log** %834, align 8
+ %.not122.i.i = icmp eq %Log* %835, null
br i1 %.not122.i.i, label %exit46.i.i, label %then48.i.i
then48.i.i: ; preds = %invoke_out47.i.i
- %794 = getelementptr inbounds %Log, %Log* %793, i64 0, i32 2
- store i32* null, i32** %794, align 8
- %795 = getelementptr inbounds %Log, %Log* %793, i64 0, i32 4
- store i32 7, i32* %795, align 4
+ %836 = getelementptr inbounds %Log, %Log* %835, i64 0, i32 2
+ store i32* null, i32** %836, align 8
+ %837 = getelementptr inbounds %Log, %Log* %835, i64 0, i32 4
+ store i32 7, i32* %837, align 4
br label %exit46.i.i
else52.i.i: ; preds = %exit46.i.i
- %796 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %lsr.iv, i64 1)
- %math = extractvalue { i64, i1 } %796, 0
- %ov = extractvalue { i64, i1 } %796, 1
- %lsr.iv.next231 = add nsw i64 %lsr.iv230, 24
+ %838 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %lsr.iv, i64 1)
+ %math = extractvalue { i64, i1 } %838, 0
+ %ov = extractvalue { i64, i1 } %838, 1
+ %lsr.iv.next251 = add nsw i64 %lsr.iv250, 24
br i1 %ov, label %overflow53.i.i, label %invoke_out43.i.i, !prof !0
overflow53.i.i: ; preds = %else52.i.i
@@ -3237,31 +3320,31 @@ overflow53.i.i: ; preds = %else52.i.i
invoke_out55.i.i: ; preds = %overflow53.i.i
unreachable
-else.i60: ; preds = %exit46.i.i, %normal32.i.i, %exit.i.i54, %invoke_out.i.i
- call fastcc void @"*Mutex#unlock:Nil"(%Mutex* %668)
- %797 = bitcast %"Char::Reader"* %11 to i8*
- call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %797)
- %.fca.5.insert.fca.0.gep.i.i289 = bitcast %"Char::Reader"* %11 to %String**
- %.fca.5.insert.fca.1.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 1
- %.fca.5.insert.fca.2.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 2
- %.fca.5.insert.fca.3.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 3
- %.fca.5.insert.fca.4.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 4, i32 0
+else.i85: ; preds = %exit46.i.i, %normal32.i.i, %exit.i.i79, %invoke_out.i.i
+ call fastcc void @"*Mutex#unlock:Nil"(%Mutex* %710)
+ %839 = bitcast %"Char::Reader"* %4 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %839)
+ %.fca.5.insert.fca.0.gep.i.i313 = bitcast %"Char::Reader"* %4 to %String**
+ %.fca.5.insert.fca.1.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 1
+ %.fca.5.insert.fca.2.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 2
+ %.fca.5.insert.fca.3.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 3
+ %.fca.5.insert.fca.4.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 4, i32 0
store i32 0, i32* %.fca.5.insert.fca.4.0.gep.i.i, align 8
- %.fca.5.insert.fca.4.1.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 4, i32 1, i64 0
+ %.fca.5.insert.fca.4.1.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 4, i32 1, i64 0
store i64 0, i64* %.fca.5.insert.fca.4.1.0.gep.i.i, align 8
- %.fca.5.insert.fca.5.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %11, i64 0, i32 5
+ %.fca.5.insert.fca.5.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %4, i64 0, i32 5
store i1 false, i1* %.fca.5.insert.fca.5.gep.i.i, align 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %797, i8 0, i64 20, i1 false)
- call fastcc void @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* nonnull %11, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'*'" to %String*), i32 0)
- %.fca.0.load.i.i = load %String*, %String** %.fca.5.insert.fca.0.gep.i.i289, align 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %839, i8 0, i64 20, i1 false)
+ call fastcc void @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* nonnull %4, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'*'" to %String*), i32 0)
+ %.fca.0.load.i.i = load %String*, %String** %.fca.5.insert.fca.0.gep.i.i313, align 8
%.fca.1.load.i.i = load i32, i32* %.fca.5.insert.fca.1.gep.i.i, align 8
%.fca.2.load.i.i = load i32, i32* %.fca.5.insert.fca.2.gep.i.i, align 4
%.fca.3.load.i.i = load i32, i32* %.fca.5.insert.fca.3.gep.i.i, align 8
%.fca.5.load.i.i = load i1, i1* %.fca.5.insert.fca.5.gep.i.i, align 8
- call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %797)
+ call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %839)
br i1 %.fca.5.load.i.i, label %fail.i, label %body.lr.ph.i
-body.lr.ph.i: ; preds = %else.i60
+body.lr.ph.i: ; preds = %else.i85
br label %body.i
body.i: ; preds = %"*Char::Reader#decode_current_char:Char.exit.i", %body.lr.ph.i
@@ -3269,87 +3352,87 @@ body.i: ; preds = %"*Char::Reader#deco
%byte_offset.0119.i = phi i32 [ 0, %body.lr.ph.i ], [ %byte_offset.1137.i, %"*Char::Reader#decode_current_char:Char.exit.i" ]
%reader.sroa.2.0118.i = phi i32 [ %.fca.1.load.i.i, %body.lr.ph.i ], [ %.sink.i.i, %"*Char::Reader#decode_current_char:Char.exit.i" ]
%reader.sroa.5.0117.i = phi i32 [ %.fca.2.load.i.i, %body.lr.ph.i ], [ %reader.sroa.5.1.i, %"*Char::Reader#decode_current_char:Char.exit.i" ]
- %reader.sroa.21.0116.i = phi i32 [ %.fca.3.load.i.i, %body.lr.ph.i ], [ %827, %"*Char::Reader#decode_current_char:Char.exit.i" ]
- %798 = icmp eq i32 %reader.sroa.2.0118.i, 44
- br i1 %798, label %then6.i, label %exit18.i
+ %reader.sroa.21.0116.i = phi i32 [ %.fca.3.load.i.i, %body.lr.ph.i ], [ %869, %"*Char::Reader#decode_current_char:Char.exit.i" ]
+ %840 = icmp eq i32 %reader.sroa.2.0118.i, 44
+ br i1 %840, label %then6.i, label %exit18.i
-fail.i: ; preds = %"*Char::Reader#decode_current_char:Char.exit.i", %else.i60
- %byte_offset.0.lcssa.i = phi i32 [ 0, %else.i60 ], [ %byte_offset.1137.i, %"*Char::Reader#decode_current_char:Char.exit.i" ]
- %799 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %byte_offset.0.lcssa.i)
- %800 = extractvalue { i32, i1 } %799, 0
- %801 = extractvalue { i32, i1 } %799, 1
- br i1 %801, label %overflow21.i, label %else24.i, !prof !0
+fail.i: ; preds = %"*Char::Reader#decode_current_char:Char.exit.i", %else.i85
+ %byte_offset.0.lcssa.i = phi i32 [ 0, %else.i85 ], [ %byte_offset.1137.i, %"*Char::Reader#decode_current_char:Char.exit.i" ]
+ %841 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %byte_offset.0.lcssa.i)
+ %842 = extractvalue { i32, i1 } %841, 0
+ %843 = extractvalue { i32, i1 } %841, 1
+ br i1 %843, label %overflow21.i, label %else24.i, !prof !0
then6.i: ; preds = %body.i
- %802 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %reader.sroa.21.0116.i, i32 %byte_offset.0119.i)
- %803 = extractvalue { i32, i1 } %802, 0
- %804 = extractvalue { i32, i1 } %802, 1
- br i1 %804, label %overflow.i, label %else9.i, !prof !0
+ %844 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %reader.sroa.21.0116.i, i32 %byte_offset.0119.i)
+ %845 = extractvalue { i32, i1 } %844, 0
+ %846 = extractvalue { i32, i1 } %844, 1
+ br i1 %846, label %overflow.i, label %else9.i, !prof !0
overflow.i: ; preds = %then6.i
call void @__crystal_raise_overflow()
unreachable
else9.i: ; preds = %then6.i
- %805 = sext i32 %byte_offset.0119.i to i64
- %806 = getelementptr inbounds { i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'*'", i64 0, i32 3, i64 %805
- %807 = icmp eq i32 %803, 0
- br i1 %807, label %"*String::new<Pointer(UInt8), Int32>:String.exit.i", label %else2.i.i71.i
+ %847 = sext i32 %byte_offset.0119.i to i64
+ %848 = getelementptr inbounds { i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'*'", i64 0, i32 3, i64 %847
+ %849 = icmp eq i32 %845, 0
+ br i1 %849, label %"*String::new<Pointer(UInt8), Int32>:String.exit.i", label %else2.i.i71.i
else2.i.i71.i: ; preds = %else9.i
- %808 = icmp slt i32 %803, 0
- br i1 %808, label %then.i.i.i.i61, label %exit14.i.i.i65
+ %850 = icmp slt i32 %845, 0
+ br i1 %850, label %then.i.i.i.i86, label %exit14.i.i.i90
-then.i.i.i.i61: ; preds = %else2.i.i71.i
- %809 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %809) #29
+then.i.i.i.i86: ; preds = %else2.i.i71.i
+ %851 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %851)
unreachable
-exit14.i.i.i65: ; preds = %else2.i.i71.i
- %810 = add nuw i32 %803, 13
- %811 = zext i32 %810 to i64
- %812 = call i8* @GC_malloc_atomic(i64 %811)
- %813 = bitcast i8* %812 to %String*
- %814 = getelementptr inbounds i8, i8* %812, i64 12
- %815 = zext i32 %803 to i64
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %814, i8* nonnull align 1 %806, i64 %815, i1 false)
- %816 = getelementptr inbounds i8, i8* %814, i64 %815
- store i8 0, i8* %816, align 1
- %.repack.i.i.i62 = bitcast i8* %812 to i32*
- store i32 1, i32* %.repack.i.i.i62, align 4
- %.repack40.i.i.i63 = getelementptr inbounds i8, i8* %812, i64 4
- %817 = bitcast i8* %.repack40.i.i.i63 to i32*
- store i32 %803, i32* %817, align 4
- %.repack42.i.i.i64 = getelementptr inbounds i8, i8* %812, i64 8
- %818 = bitcast i8* %.repack42.i.i.i64 to i32*
- store i32 0, i32* %818, align 4
+exit14.i.i.i90: ; preds = %else2.i.i71.i
+ %852 = add nuw i32 %845, 13
+ %853 = zext i32 %852 to i64
+ %854 = call i8* @GC_malloc_atomic(i64 %853)
+ %855 = bitcast i8* %854 to %String*
+ %856 = getelementptr inbounds i8, i8* %854, i64 12
+ %857 = zext i32 %845 to i64
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %856, i8* nonnull align 1 %848, i64 %857, i1 false)
+ %858 = getelementptr inbounds i8, i8* %856, i64 %857
+ store i8 0, i8* %858, align 1
+ %.repack.i.i.i87 = bitcast i8* %854 to i32*
+ store i32 1, i32* %.repack.i.i.i87, align 4
+ %.repack40.i.i.i88 = getelementptr inbounds i8, i8* %854, i64 4
+ %859 = bitcast i8* %.repack40.i.i.i88 to i32*
+ store i32 %845, i32* %859, align 4
+ %.repack42.i.i.i89 = getelementptr inbounds i8, i8* %854, i64 8
+ %860 = bitcast i8* %.repack42.i.i.i89 to i32*
+ store i32 0, i32* %860, align 4
br label %"*String::new<Pointer(UInt8), Int32>:String.exit.i"
-"*String::new<Pointer(UInt8), Int32>:String.exit.i": ; preds = %exit14.i.i.i65, %else9.i
- %common.ret.op.i.i.i66 = phi %String* [ %813, %exit14.i.i.i65 ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else9.i ]
- %819 = bitcast i8* %610 to %"Log::IOBackend"*
- %820 = call fastcc %String* @"*String#strip:String"(%String* nonnull %common.ret.op.i.i.i66)
- call fastcc void @"*Log::Builder#bind<String, Log::Severity, Log::IOBackend>:Nil"(%"Log::Builder"* %666, %String* %820, %"Log::IOBackend"* %819)
- %821 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %yielded.0120.i, i32 1)
- %822 = extractvalue { i32, i1 } %821, 0
- %823 = extractvalue { i32, i1 } %821, 1
- br i1 %823, label %overflow14.i, label %normal15.i, !prof !0
+"*String::new<Pointer(UInt8), Int32>:String.exit.i": ; preds = %exit14.i.i.i90, %else9.i
+ %common.ret.op.i.i.i91 = phi %String* [ %855, %exit14.i.i.i90 ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else9.i ]
+ %861 = bitcast i8* %652 to %"Log::IOBackend"*
+ %862 = call fastcc %String* @"*String#strip:String"(%String* nonnull %common.ret.op.i.i.i91)
+ call fastcc void @"*Log::Builder#bind<String, Log::Severity, Log::IOBackend>:Nil"(%"Log::Builder"* %708, %String* %862, %"Log::IOBackend"* %861)
+ %863 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %yielded.0120.i, i32 1)
+ %864 = extractvalue { i32, i1 } %863, 0
+ %865 = extractvalue { i32, i1 } %863, 1
+ br i1 %865, label %overflow14.i, label %normal15.i, !prof !0
overflow14.i: ; preds = %"*String::new<Pointer(UInt8), Int32>:String.exit.i"
call void @__crystal_raise_overflow()
unreachable
normal15.i: ; preds = %"*String::new<Pointer(UInt8), Int32>:String.exit.i"
- %824 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %reader.sroa.21.0116.i, i32 %reader.sroa.5.0117.i)
- %825 = extractvalue { i32, i1 } %824, 1
- br i1 %825, label %overflow16.i, label %exit18.thread.i, !prof !0
+ %866 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %reader.sroa.21.0116.i, i32 %reader.sroa.5.0117.i)
+ %867 = extractvalue { i32, i1 } %866, 1
+ br i1 %867, label %overflow16.i, label %exit18.thread.i, !prof !0
overflow16.i: ; preds = %normal15.i
call void @__crystal_raise_overflow()
unreachable
exit18.thread.i: ; preds = %normal15.i
- %826 = extractvalue { i32, i1 } %824, 0
+ %868 = extractvalue { i32, i1 } %866, 0
br label %normal20.i
exit18.i: ; preds = %body.i
@@ -3362,164 +3445,164 @@ overflow19.i: ; preds = %exit18.i
unreachable
normal20.i: ; preds = %exit18.i, %exit18.thread.i
- %yielded.1138.i = phi i32 [ %822, %exit18.thread.i ], [ %yielded.0120.i, %exit18.i ]
- %byte_offset.1137.i = phi i32 [ %826, %exit18.thread.i ], [ %byte_offset.0119.i, %exit18.i ]
- %.pre-phi129136.i = phi { i32, i1 } [ %824, %exit18.thread.i ], [ %.pre128.i, %exit18.i ]
- %827 = extractvalue { i32, i1 } %.pre-phi129136.i, 0
- %828 = sext i32 %827 to i64
- %829 = bitcast %String* %.fca.0.load.i.i to i8*
- %sunkaddr290 = getelementptr inbounds i8, i8* %829, i64 %828
- %sunkaddr291 = getelementptr inbounds i8, i8* %sunkaddr290, i64 12
- %830 = load i8, i8* %sunkaddr291, align 1
- %831 = zext i8 %830 to i32
- %832 = icmp sgt i8 %830, -1
- br i1 %832, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else.i.i
+ %yielded.1138.i = phi i32 [ %864, %exit18.thread.i ], [ %yielded.0120.i, %exit18.i ]
+ %byte_offset.1137.i = phi i32 [ %868, %exit18.thread.i ], [ %byte_offset.0119.i, %exit18.i ]
+ %.pre-phi129136.i = phi { i32, i1 } [ %866, %exit18.thread.i ], [ %.pre128.i, %exit18.i ]
+ %869 = extractvalue { i32, i1 } %.pre-phi129136.i, 0
+ %870 = sext i32 %869 to i64
+ %871 = bitcast %String* %.fca.0.load.i.i to i8*
+ %sunkaddr314 = getelementptr inbounds i8, i8* %871, i64 %870
+ %sunkaddr315 = getelementptr inbounds i8, i8* %sunkaddr314, i64 12
+ %872 = load i8, i8* %sunkaddr315, align 1
+ %873 = zext i8 %872 to i32
+ %874 = icmp sgt i8 %872, -1
+ br i1 %874, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else.i.i
else.i.i: ; preds = %normal20.i
- %833 = trunc i32 %831 to i8
- %834 = icmp ult i8 %833, -62
- br i1 %834, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else2.i.i
+ %875 = trunc i32 %873 to i8
+ %876 = icmp ult i8 %875, -62
+ br i1 %876, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else2.i.i
else2.i.i: ; preds = %else.i.i
- %835 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %827, i32 1)
- %836 = extractvalue { i32, i1 } %835, 1
- br i1 %836, label %overflow7.i.i, label %normal8.i.i, !prof !0
+ %877 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %869, i32 1)
+ %878 = extractvalue { i32, i1 } %877, 1
+ br i1 %878, label %overflow7.i.i, label %normal8.i.i, !prof !0
overflow7.i.i: ; preds = %else2.i.i
call void @__crystal_raise_overflow()
unreachable
normal8.i.i: ; preds = %else2.i.i
- %837 = extractvalue { i32, i1 } %835, 0
- %838 = sext i32 %837 to i64
- %839 = bitcast %String* %.fca.0.load.i.i to i8*
- %sunkaddr292 = getelementptr inbounds i8, i8* %839, i64 %838
- %sunkaddr293 = getelementptr inbounds i8, i8* %sunkaddr292, i64 12
- %840 = load i8, i8* %sunkaddr293, align 1
- %841 = zext i8 %840 to i32
- %842 = and i32 %841, 192
- %.not.i.i = icmp eq i32 %842, 128
+ %879 = extractvalue { i32, i1 } %877, 0
+ %880 = sext i32 %879 to i64
+ %881 = bitcast %String* %.fca.0.load.i.i to i8*
+ %sunkaddr316 = getelementptr inbounds i8, i8* %881, i64 %880
+ %sunkaddr317 = getelementptr inbounds i8, i8* %sunkaddr316, i64 12
+ %882 = load i8, i8* %sunkaddr317, align 1
+ %883 = zext i8 %882 to i32
+ %884 = and i32 %883, 192
+ %.not.i.i = icmp eq i32 %884, 128
br i1 %.not.i.i, label %else10.i.i, label %"*Char::Reader#decode_current_char:Char.exit.i"
else10.i.i: ; preds = %normal8.i.i
- %843 = trunc i32 %831 to i8
- %844 = icmp ult i8 %843, -32
- br i1 %844, label %then15.i.i, label %else16.i.i
+ %885 = trunc i32 %873 to i8
+ %886 = icmp ult i8 %885, -32
+ br i1 %886, label %then15.i.i, label %else16.i.i
then15.i.i: ; preds = %else10.i.i
- %845 = shl nuw nsw i32 %831, 6
- %846 = add nsw i32 %845, -12416
- %847 = add nsw i32 %846, %841
+ %887 = shl nuw nsw i32 %873, 6
+ %888 = add nsw i32 %887, -12416
+ %889 = add nsw i32 %888, %883
br label %"*Char::Reader#decode_current_char:Char.exit.i"
else16.i.i: ; preds = %else10.i.i
- %848 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %827, i32 2)
- %849 = extractvalue { i32, i1 } %848, 1
- br i1 %849, label %overflow19.i.i, label %normal20.i.i, !prof !0
+ %890 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %869, i32 2)
+ %891 = extractvalue { i32, i1 } %890, 1
+ br i1 %891, label %overflow19.i.i, label %normal20.i.i, !prof !0
overflow19.i.i: ; preds = %else16.i.i
call void @__crystal_raise_overflow()
unreachable
normal20.i.i: ; preds = %else16.i.i
- %850 = extractvalue { i32, i1 } %848, 0
- %851 = sext i32 %850 to i64
- %852 = bitcast %String* %.fca.0.load.i.i to i8*
- %sunkaddr294 = getelementptr inbounds i8, i8* %852, i64 %851
- %sunkaddr295 = getelementptr inbounds i8, i8* %sunkaddr294, i64 12
- %853 = load i8, i8* %sunkaddr295, align 1
- %854 = zext i8 %853 to i32
- %855 = and i32 %854, 192
- %.not344.i.i = icmp eq i32 %855, 128
+ %892 = extractvalue { i32, i1 } %890, 0
+ %893 = sext i32 %892 to i64
+ %894 = bitcast %String* %.fca.0.load.i.i to i8*
+ %sunkaddr318 = getelementptr inbounds i8, i8* %894, i64 %893
+ %sunkaddr319 = getelementptr inbounds i8, i8* %sunkaddr318, i64 12
+ %895 = load i8, i8* %sunkaddr319, align 1
+ %896 = zext i8 %895 to i32
+ %897 = and i32 %896, 192
+ %.not344.i.i = icmp eq i32 %897, 128
br i1 %.not344.i.i, label %else22.i.i, label %"*Char::Reader#decode_current_char:Char.exit.i"
else22.i.i: ; preds = %normal20.i.i
- %856 = trunc i32 %831 to i8
- %857 = icmp ult i8 %856, -16
- br i1 %857, label %then27.i.i, label %else28.i.i67
+ %898 = trunc i32 %873 to i8
+ %899 = icmp ult i8 %898, -16
+ br i1 %899, label %then27.i.i, label %else28.i.i92
then27.i.i: ; preds = %else22.i.i
- %858 = trunc i32 %841 to i8
- %859 = trunc i32 %831 to i8
- %860 = icmp eq i8 %859, -32
- %861 = icmp ult i8 %858, -96
- %862 = select i1 %860, i1 %861, i1 false
- br i1 %862, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else30.i.i
+ %900 = trunc i32 %883 to i8
+ %901 = trunc i32 %873 to i8
+ %902 = icmp eq i8 %901, -32
+ %903 = icmp ult i8 %900, -96
+ %904 = select i1 %902, i1 %903, i1 false
+ br i1 %904, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else30.i.i
-else28.i.i67: ; preds = %else22.i.i
- %863 = trunc i32 %831 to i8
- %864 = trunc i32 %841 to i8
- %865 = icmp eq i8 %863, -16
- %866 = icmp ult i8 %864, -112
- %867 = select i1 %865, i1 %866, i1 false
- br i1 %867, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else50.i.i
+else28.i.i92: ; preds = %else22.i.i
+ %905 = trunc i32 %873 to i8
+ %906 = trunc i32 %883 to i8
+ %907 = icmp eq i8 %905, -16
+ %908 = icmp ult i8 %906, -112
+ %909 = select i1 %907, i1 %908, i1 false
+ br i1 %909, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else50.i.i
else30.i.i: ; preds = %then27.i.i
- %868 = trunc i32 %841 to i8
- %869 = trunc i32 %831 to i8
- %870 = icmp eq i8 %869, -19
- %871 = icmp ugt i8 %868, -97
- %872 = select i1 %870, i1 %871, i1 false
- br i1 %872, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else39.i.i
+ %910 = trunc i32 %883 to i8
+ %911 = trunc i32 %873 to i8
+ %912 = icmp eq i8 %911, -19
+ %913 = icmp ugt i8 %910, -97
+ %914 = select i1 %912, i1 %913, i1 false
+ br i1 %914, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else39.i.i
else39.i.i: ; preds = %else30.i.i
- %873 = shl nuw nsw i32 %831, 12
- %874 = shl nuw nsw i32 %841, 6
- %875 = add nsw i32 %873, -925824
- %876 = add nsw i32 %875, %874
- %877 = add nsw i32 %876, %854
+ %915 = shl nuw nsw i32 %873, 12
+ %916 = shl nuw nsw i32 %883, 6
+ %917 = add nsw i32 %915, -925824
+ %918 = add nsw i32 %917, %916
+ %919 = add nsw i32 %918, %896
br label %"*Char::Reader#decode_current_char:Char.exit.i"
-else50.i.i: ; preds = %else28.i.i67
- %878 = trunc i32 %831 to i8
- %879 = trunc i32 %841 to i8
- %880 = icmp eq i8 %878, -12
- %881 = icmp ugt i8 %879, -113
- %882 = select i1 %880, i1 %881, i1 false
- br i1 %882, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else59.i.i
+else50.i.i: ; preds = %else28.i.i92
+ %920 = trunc i32 %873 to i8
+ %921 = trunc i32 %883 to i8
+ %922 = icmp eq i8 %920, -12
+ %923 = icmp ugt i8 %921, -113
+ %924 = select i1 %922, i1 %923, i1 false
+ br i1 %924, label %"*Char::Reader#decode_current_char:Char.exit.i", label %else59.i.i
else59.i.i: ; preds = %else50.i.i
- %883 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %827, i32 3)
- %884 = extractvalue { i32, i1 } %883, 1
- br i1 %884, label %overflow67.i.i, label %normal68.i.i, !prof !0
+ %925 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %869, i32 3)
+ %926 = extractvalue { i32, i1 } %925, 1
+ br i1 %926, label %overflow67.i.i, label %normal68.i.i, !prof !0
overflow67.i.i: ; preds = %else59.i.i
call void @__crystal_raise_overflow()
unreachable
normal68.i.i: ; preds = %else59.i.i
- %885 = trunc i32 %831 to i8
- %886 = extractvalue { i32, i1 } %883, 0
- %887 = sext i32 %886 to i64
- %888 = bitcast %String* %.fca.0.load.i.i to i8*
- %sunkaddr296 = getelementptr inbounds i8, i8* %888, i64 %887
- %sunkaddr297 = getelementptr inbounds i8, i8* %sunkaddr296, i64 12
- %889 = load i8, i8* %sunkaddr297, align 1
- %890 = zext i8 %889 to i32
- %891 = and i32 %890, 192
- %.not345.i.i = icmp eq i32 %891, 128
- %892 = icmp ult i8 %885, -11
- %or.cond.i = select i1 %.not345.i.i, i1 %892, i1 false
+ %927 = trunc i32 %873 to i8
+ %928 = extractvalue { i32, i1 } %925, 0
+ %929 = sext i32 %928 to i64
+ %930 = bitcast %String* %.fca.0.load.i.i to i8*
+ %sunkaddr320 = getelementptr inbounds i8, i8* %930, i64 %929
+ %sunkaddr321 = getelementptr inbounds i8, i8* %sunkaddr320, i64 12
+ %931 = load i8, i8* %sunkaddr321, align 1
+ %932 = zext i8 %931 to i32
+ %933 = and i32 %932, 192
+ %.not345.i.i = icmp eq i32 %933, 128
+ %934 = icmp ult i8 %927, -11
+ %or.cond.i = select i1 %.not345.i.i, i1 %934, i1 false
br i1 %or.cond.i, label %then75.i.i, label %"*Char::Reader#decode_current_char:Char.exit.i"
then75.i.i: ; preds = %normal68.i.i
- %893 = shl nuw nsw i32 %831, 18
- %894 = shl nuw nsw i32 %841, 12
- %895 = shl nuw nsw i32 %854, 6
- %896 = add nsw i32 %893, -63447168
- %897 = add nsw i32 %896, %894
- %898 = add nsw i32 %897, %895
- %899 = add nsw i32 %898, %890
+ %935 = shl nuw nsw i32 %873, 18
+ %936 = shl nuw nsw i32 %883, 12
+ %937 = shl nuw nsw i32 %896, 6
+ %938 = add nsw i32 %935, -63447168
+ %939 = add nsw i32 %938, %936
+ %940 = add nsw i32 %939, %937
+ %941 = add nsw i32 %940, %932
br label %"*Char::Reader#decode_current_char:Char.exit.i"
-"*Char::Reader#decode_current_char:Char.exit.i": ; preds = %then75.i.i, %normal68.i.i, %else50.i.i, %else39.i.i, %else30.i.i, %else28.i.i67, %then27.i.i, %normal20.i.i, %then15.i.i, %normal8.i.i, %else.i.i, %normal20.i
- %reader.sroa.5.1.i = phi i32 [ 2, %then15.i.i ], [ 3, %else39.i.i ], [ 4, %then75.i.i ], [ 1, %normal20.i ], [ 1, %else.i.i ], [ 1, %normal8.i.i ], [ 1, %normal20.i.i ], [ 1, %then27.i.i ], [ 1, %else30.i.i ], [ 1, %else28.i.i67 ], [ 1, %else50.i.i ], [ 1, %normal68.i.i ]
- %.sink.i.i = phi i32 [ %847, %then15.i.i ], [ %877, %else39.i.i ], [ %899, %then75.i.i ], [ %831, %normal20.i ], [ 65533, %else.i.i ], [ 65533, %normal8.i.i ], [ 65533, %normal20.i.i ], [ 65533, %then27.i.i ], [ 65533, %else30.i.i ], [ 65533, %else28.i.i67 ], [ 65533, %else50.i.i ], [ 65533, %normal68.i.i ]
- %900 = bitcast %String* %.fca.0.load.i.i to i8*
- %sunkaddr298 = getelementptr inbounds i8, i8* %900, i64 4
- %901 = bitcast i8* %sunkaddr298 to i32*
- %.pn.i = load i32, i32* %901, align 4
- %reader.sroa.51.1.i = icmp eq i32 %827, %.pn.i
+"*Char::Reader#decode_current_char:Char.exit.i": ; preds = %then75.i.i, %normal68.i.i, %else50.i.i, %else39.i.i, %else30.i.i, %else28.i.i92, %then27.i.i, %normal20.i.i, %then15.i.i, %normal8.i.i, %else.i.i, %normal20.i
+ %reader.sroa.5.1.i = phi i32 [ 2, %then15.i.i ], [ 3, %else39.i.i ], [ 4, %then75.i.i ], [ 1, %normal20.i ], [ 1, %else.i.i ], [ 1, %normal8.i.i ], [ 1, %normal20.i.i ], [ 1, %then27.i.i ], [ 1, %else30.i.i ], [ 1, %else28.i.i92 ], [ 1, %else50.i.i ], [ 1, %normal68.i.i ]
+ %.sink.i.i = phi i32 [ %889, %then15.i.i ], [ %919, %else39.i.i ], [ %941, %then75.i.i ], [ %873, %normal20.i ], [ 65533, %else.i.i ], [ 65533, %normal8.i.i ], [ 65533, %normal20.i.i ], [ 65533, %then27.i.i ], [ 65533, %else30.i.i ], [ 65533, %else28.i.i92 ], [ 65533, %else50.i.i ], [ 65533, %normal68.i.i ]
+ %942 = bitcast %String* %.fca.0.load.i.i to i8*
+ %sunkaddr322 = getelementptr inbounds i8, i8* %942, i64 4
+ %943 = bitcast i8* %sunkaddr322 to i32*
+ %.pn.i = load i32, i32* %943, align 4
+ %reader.sroa.51.1.i = icmp eq i32 %869, %.pn.i
br i1 %reader.sroa.51.1.i, label %fail.i, label %body.i
overflow21.i: ; preds = %fail.i
@@ -3527,240 +3610,240 @@ overflow21.i: ; preds = %fail.i
unreachable
else24.i: ; preds = %fail.i
- %902 = sext i32 %byte_offset.0.lcssa.i to i64
- %903 = getelementptr inbounds { i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'*'", i64 0, i32 3, i64 %902
- %904 = icmp eq i32 %800, 0
- br i1 %904, label %"*Log::setup:Nil.exit", label %else2.i.i74.i
+ %944 = sext i32 %byte_offset.0.lcssa.i to i64
+ %945 = getelementptr inbounds { i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'*'", i64 0, i32 3, i64 %944
+ %946 = icmp eq i32 %842, 0
+ br i1 %946, label %"*Log::setup:Nil.exit", label %else2.i.i74.i
else2.i.i74.i: ; preds = %else24.i
- %905 = icmp slt i32 %800, 0
- br i1 %905, label %then.i.i.i75.i, label %exit14.i.i79.i
+ %947 = icmp slt i32 %842, 0
+ br i1 %947, label %then.i.i.i75.i, label %exit14.i.i79.i
then.i.i.i75.i: ; preds = %else2.i.i74.i
- %906 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %906) #29
+ %948 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %948)
unreachable
exit14.i.i79.i: ; preds = %else2.i.i74.i
- %907 = add nuw i32 %800, 13
- %908 = zext i32 %907 to i64
- %909 = call i8* @GC_malloc_atomic(i64 %908)
- %910 = bitcast i8* %909 to %String*
- %911 = getelementptr inbounds i8, i8* %909, i64 12
- %912 = zext i32 %800 to i64
- call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %911, i8* nonnull align 1 %903, i64 %912, i1 false)
- %913 = getelementptr inbounds i8, i8* %911, i64 %912
- store i8 0, i8* %913, align 1
- %.repack.i.i76.i = bitcast i8* %909 to i32*
+ %949 = add nuw i32 %842, 13
+ %950 = zext i32 %949 to i64
+ %951 = call i8* @GC_malloc_atomic(i64 %950)
+ %952 = bitcast i8* %951 to %String*
+ %953 = getelementptr inbounds i8, i8* %951, i64 12
+ %954 = zext i32 %842 to i64
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %953, i8* nonnull align 1 %945, i64 %954, i1 false)
+ %955 = getelementptr inbounds i8, i8* %953, i64 %954
+ store i8 0, i8* %955, align 1
+ %.repack.i.i76.i = bitcast i8* %951 to i32*
store i32 1, i32* %.repack.i.i76.i, align 4
- %.repack40.i.i77.i = getelementptr inbounds i8, i8* %909, i64 4
- %914 = bitcast i8* %.repack40.i.i77.i to i32*
- store i32 %800, i32* %914, align 4
- %.repack42.i.i78.i = getelementptr inbounds i8, i8* %909, i64 8
- %915 = bitcast i8* %.repack42.i.i78.i to i32*
- store i32 0, i32* %915, align 4
+ %.repack40.i.i77.i = getelementptr inbounds i8, i8* %951, i64 4
+ %956 = bitcast i8* %.repack40.i.i77.i to i32*
+ store i32 %842, i32* %956, align 4
+ %.repack42.i.i78.i = getelementptr inbounds i8, i8* %951, i64 8
+ %957 = bitcast i8* %.repack42.i.i78.i to i32*
+ store i32 0, i32* %957, align 4
br label %"*Log::setup:Nil.exit"
"*Log::setup:Nil.exit": ; preds = %else24.i, %exit14.i.i79.i
- %common.ret.op.i.i80.i = phi %String* [ %910, %exit14.i.i79.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else24.i ]
- %916 = bitcast i8* %610 to %"Log::IOBackend"*
- %917 = call fastcc %String* @"*String#strip:String"(%String* nonnull %common.ret.op.i.i80.i)
- call fastcc void @"*Log::Builder#bind<String, Log::Severity, Log::IOBackend>:Nil"(%"Log::Builder"* %666, %String* %917, %"Log::IOBackend"* %916)
- %918 = call i8* @GC_malloc(i64 56)
- %919 = bitcast i8* %918 to i32*
- %920 = getelementptr inbounds i8, i8* %918, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %920, i8 0, i64 36, i1 false)
- store i32 45, i32* %919, align 4
- %921 = getelementptr inbounds i8, i8* %918, i64 8
- %.repack.i.i.i68 = getelementptr inbounds i8, i8* %918, i64 40
- %922 = getelementptr inbounds i8, i8* %918, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %921, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i68, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %922, align 1
- store i8* %918, i8** bitcast (%"Hash(String, String)"** @"MIME::types" to i8**), align 8
- %923 = call i8* @GC_malloc(i64 56)
- %924 = bitcast i8* %923 to i32*
- %925 = getelementptr inbounds i8, i8* %923, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %925, i8 0, i64 36, i1 false)
- store i32 45, i32* %924, align 4
- %926 = getelementptr inbounds i8, i8* %923, i64 8
- %.repack.i.i.i69 = getelementptr inbounds i8, i8* %923, i64 40
- %927 = getelementptr inbounds i8, i8* %923, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %926, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i69, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %927, align 1
- store i8* %923, i8** bitcast (%"Hash(String, String)"** @"MIME::types_lower" to i8**), align 8
- %928 = call i8* @GC_malloc(i64 56)
- %929 = bitcast i8* %928 to i32*
- %930 = getelementptr inbounds i8, i8* %928, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %930, i8 0, i64 36, i1 false)
- store i32 61, i32* %929, align 4
- %931 = getelementptr inbounds i8, i8* %928, i64 8
- %.repack.i.i.i70 = getelementptr inbounds i8, i8* %928, i64 40
- %932 = getelementptr inbounds i8, i8* %928, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %931, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i70, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %932, align 1
- store i8* %928, i8** bitcast (%"Hash(String, Set(String))"** @"MIME::extensions" to i8**), align 8
- %933 = call i8* @GC_malloc(i64 368)
- %934 = getelementptr inbounds i8, i8* %933, i64 77
- %935 = bitcast i8* %934 to i1*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(368) %933, i8 0, i64 368, i1 false)
- store i1 true, i1* %935, align 1
- %936 = getelementptr inbounds i8, i8* %933, i64 80
- %937 = bitcast i8* %936 to i32*
- store i32 32768, i32* %937, align 4
- %938 = call i8* @GC_malloc(i64 56)
- %939 = bitcast i8* %938 to i32*
- %940 = getelementptr inbounds i8, i8* %938, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %940, i8 0, i64 36, i1 false)
- store i32 63, i32* %939, align 4
- %941 = getelementptr inbounds i8, i8* %938, i64 8
- %.repack.i.i.i.i71 = getelementptr inbounds i8, i8* %938, i64 40
- %942 = getelementptr inbounds i8, i8* %938, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %941, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i71, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %942, align 1
- %943 = call i8* @GC_malloc_atomic(i64 4)
- %944 = bitcast i8* %943 to i32*
- store i32 186, i32* %944, align 4
- %945 = getelementptr inbounds i8, i8* %933, i64 176
- %946 = bitcast i8* %945 to i8**
- store i8* %938, i8** %946, align 8
- %.repack1.i = getelementptr inbounds i8, i8* %933, i64 184
- %947 = bitcast i8* %.repack1.i to i8**
- store i8* %943, i8** %947, align 8
- %948 = call i8* @GC_malloc(i64 56)
- %949 = bitcast i8* %948 to i32*
- %950 = getelementptr inbounds i8, i8* %948, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %950, i8 0, i64 36, i1 false)
- store i32 63, i32* %949, align 4
- %951 = getelementptr inbounds i8, i8* %948, i64 8
- %.repack.i.i.i12.i = getelementptr inbounds i8, i8* %948, i64 40
- %952 = getelementptr inbounds i8, i8* %948, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %951, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i12.i, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %952, align 1
- %953 = call i8* @GC_malloc_atomic(i64 4)
- %954 = bitcast i8* %953 to i32*
- store i32 186, i32* %954, align 4
- %955 = getelementptr inbounds i8, i8* %933, i64 192
- %956 = bitcast i8* %955 to i8**
- store i8* %948, i8** %956, align 8
- %.repack4.i = getelementptr inbounds i8, i8* %933, i64 200
- %957 = bitcast i8* %.repack4.i to i8**
- store i8* %953, i8** %957, align 8
- %958 = call i8* @GC_malloc(i64 56)
- %959 = bitcast i8* %958 to i32*
- %960 = getelementptr inbounds i8, i8* %958, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %960, i8 0, i64 36, i1 false)
- store i32 64, i32* %959, align 4
- %961 = getelementptr inbounds i8, i8* %958, i64 8
- %.repack.i.i.i15.i = getelementptr inbounds i8, i8* %958, i64 40
- %962 = getelementptr inbounds i8, i8* %958, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %961, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i15.i, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %962, align 1
- %963 = call i8* @GC_malloc_atomic(i64 4)
- %964 = bitcast i8* %963 to i32*
- store i32 186, i32* %964, align 4
- %965 = getelementptr inbounds i8, i8* %933, i64 208
- %966 = bitcast i8* %965 to i8**
- store i8* %958, i8** %966, align 8
- %.repack7.i = getelementptr inbounds i8, i8* %933, i64 216
- %967 = bitcast i8* %.repack7.i to i8**
- store i8* %963, i8** %967, align 8
- %968 = call i8* @GC_malloc(i64 56)
- %969 = bitcast i8* %968 to i32*
- %970 = getelementptr inbounds i8, i8* %968, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %970, i8 0, i64 36, i1 false)
- store i32 64, i32* %969, align 4
- %971 = getelementptr inbounds i8, i8* %968, i64 8
- %.repack.i.i.i18.i = getelementptr inbounds i8, i8* %968, i64 40
- %972 = getelementptr inbounds i8, i8* %968, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %971, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i18.i, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %972, align 1
- %973 = call i8* @GC_malloc_atomic(i64 4)
- %974 = bitcast i8* %973 to i32*
- store i32 186, i32* %974, align 4
- %975 = getelementptr inbounds i8, i8* %933, i64 224
- %976 = bitcast i8* %975 to i8**
- store i8* %968, i8** %976, align 8
- %.repack10.i = getelementptr inbounds i8, i8* %933, i64 232
- %977 = bitcast i8* %.repack10.i to i8**
- store i8* %973, i8** %977, align 8
- %978 = bitcast i8* %933 to i32*
- store i32 154, i32* %978, align 4
- %979 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %979)
- %980 = bitcast %"struct.LibC::Addrinfo"** %2 to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %980)
- %981 = bitcast %"Socket::Addrinfo"* %8 to i8*
- call void @llvm.lifetime.start.p0i8(i64 112, i8* nonnull %981)
- %982 = call fastcc %String* @"*URI::Punycode::to_ascii<String>:String"()
- %.fca.7.insert.fca.0.gep.i.i299 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i32*
+ %common.ret.op.i.i80.i = phi %String* [ %952, %exit14.i.i79.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else24.i ]
+ %958 = bitcast i8* %652 to %"Log::IOBackend"*
+ %959 = call fastcc %String* @"*String#strip:String"(%String* nonnull %common.ret.op.i.i80.i)
+ call fastcc void @"*Log::Builder#bind<String, Log::Severity, Log::IOBackend>:Nil"(%"Log::Builder"* %708, %String* %959, %"Log::IOBackend"* %958)
+ %960 = call i8* @GC_malloc(i64 56)
+ %961 = bitcast i8* %960 to i32*
+ %962 = getelementptr inbounds i8, i8* %960, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %962, i8 0, i64 36, i1 false)
+ store i32 45, i32* %961, align 4
+ %963 = getelementptr inbounds i8, i8* %960, i64 8
+ %.repack.i.i.i93 = getelementptr inbounds i8, i8* %960, i64 40
+ %964 = getelementptr inbounds i8, i8* %960, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %963, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i93, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %964, align 1
+ store i8* %960, i8** bitcast (%"Hash(String, String)"** @"MIME::types" to i8**), align 8
+ %965 = call i8* @GC_malloc(i64 56)
+ %966 = bitcast i8* %965 to i32*
+ %967 = getelementptr inbounds i8, i8* %965, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %967, i8 0, i64 36, i1 false)
+ store i32 45, i32* %966, align 4
+ %968 = getelementptr inbounds i8, i8* %965, i64 8
+ %.repack.i.i.i94 = getelementptr inbounds i8, i8* %965, i64 40
+ %969 = getelementptr inbounds i8, i8* %965, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %968, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i94, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %969, align 1
+ store i8* %965, i8** bitcast (%"Hash(String, String)"** @"MIME::types_lower" to i8**), align 8
+ %970 = call i8* @GC_malloc(i64 56)
+ %971 = bitcast i8* %970 to i32*
+ %972 = getelementptr inbounds i8, i8* %970, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %972, i8 0, i64 36, i1 false)
+ store i32 61, i32* %971, align 4
+ %973 = getelementptr inbounds i8, i8* %970, i64 8
+ %.repack.i.i.i95 = getelementptr inbounds i8, i8* %970, i64 40
+ %974 = getelementptr inbounds i8, i8* %970, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %973, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i95, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %974, align 1
+ store i8* %970, i8** bitcast (%"Hash(String, Set(String))"** @"MIME::extensions" to i8**), align 8
+ %975 = call i8* @GC_malloc(i64 368)
+ %976 = getelementptr inbounds i8, i8* %975, i64 77
+ %977 = bitcast i8* %976 to i1*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(368) %975, i8 0, i64 368, i1 false)
+ store i1 true, i1* %977, align 1
+ %978 = getelementptr inbounds i8, i8* %975, i64 80
+ %979 = bitcast i8* %978 to i32*
+ store i32 32768, i32* %979, align 4
+ %980 = call i8* @GC_malloc(i64 56)
+ %981 = bitcast i8* %980 to i32*
+ %982 = getelementptr inbounds i8, i8* %980, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %982, i8 0, i64 36, i1 false)
+ store i32 63, i32* %981, align 4
+ %983 = getelementptr inbounds i8, i8* %980, i64 8
+ %.repack.i.i.i.i96 = getelementptr inbounds i8, i8* %980, i64 40
+ %984 = getelementptr inbounds i8, i8* %980, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %983, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i96, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %984, align 1
+ %985 = call i8* @GC_malloc_atomic(i64 4)
+ %986 = bitcast i8* %985 to i32*
+ store i32 186, i32* %986, align 4
+ %987 = getelementptr inbounds i8, i8* %975, i64 176
+ %988 = bitcast i8* %987 to i8**
+ store i8* %980, i8** %988, align 8
+ %.repack1.i = getelementptr inbounds i8, i8* %975, i64 184
+ %989 = bitcast i8* %.repack1.i to i8**
+ store i8* %985, i8** %989, align 8
+ %990 = call i8* @GC_malloc(i64 56)
+ %991 = bitcast i8* %990 to i32*
+ %992 = getelementptr inbounds i8, i8* %990, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %992, i8 0, i64 36, i1 false)
+ store i32 63, i32* %991, align 4
+ %993 = getelementptr inbounds i8, i8* %990, i64 8
+ %.repack.i.i.i12.i = getelementptr inbounds i8, i8* %990, i64 40
+ %994 = getelementptr inbounds i8, i8* %990, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %993, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i12.i, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %994, align 1
+ %995 = call i8* @GC_malloc_atomic(i64 4)
+ %996 = bitcast i8* %995 to i32*
+ store i32 186, i32* %996, align 4
+ %997 = getelementptr inbounds i8, i8* %975, i64 192
+ %998 = bitcast i8* %997 to i8**
+ store i8* %990, i8** %998, align 8
+ %.repack4.i = getelementptr inbounds i8, i8* %975, i64 200
+ %999 = bitcast i8* %.repack4.i to i8**
+ store i8* %995, i8** %999, align 8
+ %1000 = call i8* @GC_malloc(i64 56)
+ %1001 = bitcast i8* %1000 to i32*
+ %1002 = getelementptr inbounds i8, i8* %1000, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1002, i8 0, i64 36, i1 false)
+ store i32 64, i32* %1001, align 4
+ %1003 = getelementptr inbounds i8, i8* %1000, i64 8
+ %.repack.i.i.i15.i = getelementptr inbounds i8, i8* %1000, i64 40
+ %1004 = getelementptr inbounds i8, i8* %1000, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1003, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i15.i, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1004, align 1
+ %1005 = call i8* @GC_malloc_atomic(i64 4)
+ %1006 = bitcast i8* %1005 to i32*
+ store i32 186, i32* %1006, align 4
+ %1007 = getelementptr inbounds i8, i8* %975, i64 208
+ %1008 = bitcast i8* %1007 to i8**
+ store i8* %1000, i8** %1008, align 8
+ %.repack7.i = getelementptr inbounds i8, i8* %975, i64 216
+ %1009 = bitcast i8* %.repack7.i to i8**
+ store i8* %1005, i8** %1009, align 8
+ %1010 = call i8* @GC_malloc(i64 56)
+ %1011 = bitcast i8* %1010 to i32*
+ %1012 = getelementptr inbounds i8, i8* %1010, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1012, i8 0, i64 36, i1 false)
+ store i32 64, i32* %1011, align 4
+ %1013 = getelementptr inbounds i8, i8* %1010, i64 8
+ %.repack.i.i.i18.i = getelementptr inbounds i8, i8* %1010, i64 40
+ %1014 = getelementptr inbounds i8, i8* %1010, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1013, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i18.i, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1014, align 1
+ %1015 = call i8* @GC_malloc_atomic(i64 4)
+ %1016 = bitcast i8* %1015 to i32*
+ store i32 186, i32* %1016, align 4
+ %1017 = getelementptr inbounds i8, i8* %975, i64 224
+ %1018 = bitcast i8* %1017 to i8**
+ store i8* %1010, i8** %1018, align 8
+ %.repack10.i = getelementptr inbounds i8, i8* %975, i64 232
+ %1019 = bitcast i8* %.repack10.i to i8**
+ store i8* %1015, i8** %1019, align 8
+ %1020 = bitcast i8* %975 to i32*
+ store i32 154, i32* %1020, align 4
+ %1021 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %1021)
+ %1022 = bitcast %"struct.LibC::Addrinfo"** %2 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1022)
+ %1023 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 112, i8* nonnull %1023)
+ %1024 = call fastcc %String* @"*URI::Punycode::to_ascii<String>:String"()
+ %.fca.7.insert.fca.0.gep.i.i323 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i32*
%.fca.7.insert.fca.2.gep.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 2
%.fca.7.insert.fca.3.gep.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 3
%.fca.7.insert.fca.5.gep.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 5
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %979, i8 0, i64 20, i1 false)
- %983 = bitcast %"struct.LibC::Sockaddr"** %.fca.7.insert.fca.5.gep.i.i to i8*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %983, i8 0, i64 24, i1 false)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %1021, i8 0, i64 20, i1 false)
+ %1025 = bitcast %"struct.LibC::Sockaddr"** %.fca.7.insert.fca.5.gep.i.i to i8*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1025, i8 0, i64 24, i1 false)
store i32 1, i32* %.fca.7.insert.fca.2.gep.i.i, align 8
store i32 6, i32* %.fca.7.insert.fca.3.gep.i.i, align 4
- store i32 1024, i32* %.fca.7.insert.fca.0.gep.i.i299, align 8
- %984 = getelementptr inbounds %String, %String* %982, i64 0, i32 3
- %985 = call fastcc %String* @"*Int32@Int#to_s:String"(i32 8081)
- %986 = getelementptr inbounds %String, %String* %985, i64 0, i32 3
- %987 = call i32 @getaddrinfo(i8* nonnull %984, i8* nonnull %986, %"struct.LibC::Addrinfo"* nonnull %hints.i.i.i, %"struct.LibC::Addrinfo"** nonnull %2)
- switch i32 %987, label %else17.i.i [
+ store i32 1024, i32* %.fca.7.insert.fca.0.gep.i.i323, align 8
+ %1026 = getelementptr inbounds %String, %String* %1024, i64 0, i32 3
+ %1027 = call fastcc %String* @"*Int32@Int#to_s:String"(i32 8081)
+ %1028 = getelementptr inbounds %String, %String* %1027, i64 0, i32 3
+ %1029 = call i32 @getaddrinfo(i8* nonnull %1026, i8* nonnull %1028, %"struct.LibC::Addrinfo"* nonnull %hints.i.i.i, %"struct.LibC::Addrinfo"** nonnull %2)
+ switch i32 %1029, label %else17.i.i [
i32 0, label %exit15.i.i
i32 -11, label %then16.i.i
]
exit15.i.i: ; preds = %"*Log::setup:Nil.exit"
- %988 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
- %989 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* %988)
+ %1030 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
+ %1031 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* %1030)
to label %exit15.invoke_out_crit_edge.i.i unwind label %rescue.loopexit.split-lp.i.i
exit15.invoke_out_crit_edge.i.i: ; preds = %exit15.i.i
- %990 = getelementptr inbounds %"Socket::Addrinfo", %"Socket::Addrinfo"* %8, i64 0, i32 4
- %.repack12.i.i.i = getelementptr inbounds i8, i8* %933, i64 264
- %.repack18.i.i.i = getelementptr inbounds i8, i8* %933, i64 320
+ %1032 = getelementptr inbounds %"Socket::Addrinfo", %"Socket::Addrinfo"* %8, i64 0, i32 4
+ %.repack12.i.i.i = getelementptr inbounds i8, i8* %975, i64 264
+ %.repack18.i.i.i = getelementptr inbounds i8, i8* %975, i64 320
br label %while.i.i
then16.i.i: ; preds = %"*Log::setup:Nil.exit"
- %991 = call fastcc i32 @"*Errno::value:Errno"()
- %992 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain<Nil, Errno, String>:Socket::Addrinfo::Error"(i32 %991, %String* %982)
- call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %992)
+ %1033 = call fastcc i32 @"*Errno::value:Errno"()
+ %1034 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain<Nil, Errno, String>:Socket::Addrinfo::Error"(i32 %1033, %String* %1024)
+ call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1034)
unreachable
else17.i.i: ; preds = %"*Log::setup:Nil.exit"
- %993 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain:type:protocol:service<Nil, Errno, String, Socket::Type, Socket::Protocol, Int32>:Socket::Addrinfo::Error"(i32 %987, %String* %982)
- call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %993)
+ %1035 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain:type:protocol:service<Nil, Errno, String, Socket::Type, Socket::Protocol, Int32>:Socket::Addrinfo::Error"(i32 %1029, %String* %1024)
+ call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1035)
unreachable
-rescue.loopexit.i.i: ; preds = %then.i.i.i79, %else42.i.i, %else2.i.i.i.i.i, %then1.i.i.i.i.i77, %then.i.i.i63.i.i, %.noexc66.i.i, %.noexc65.i.i, %.noexc64.i.i, %invoke_out32.i.i, %else29.i.i, %exit23.i.i, %invoke_out18.i.i, %"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i", %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i", %then.i.i.i.i.i.i.i74, %while.i.i
+rescue.loopexit.i.i: ; preds = %then.i.i.i104, %else42.i.i, %else2.i.i.i.i.i, %then1.i.i.i.i.i102, %then.i.i.i63.i.i, %.noexc66.i.i, %.noexc65.i.i, %.noexc64.i.i, %invoke_out32.i.i, %else29.i.i, %exit23.i.i, %invoke_out18.i.i, %"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i", %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i", %then.i.i.i.i.i.i.i99, %while.i.i
%lpad.loopexit.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i72
+ br label %rescue.i.i97
-rescue.loopexit.split-lp.i.i: ; preds = %invoke_out56.i.i, %invoke_out55.i.i81, %else54.i.i, %.noexc26.i, %.noexc25.i, %.noexc24.i, %.noexc23.i, %.noexc22.i, %.noexc21.i, %.noexc.i, %then53.i.i, %rescue.i78.i.i, %rescue.i.i.i, %.noexc60.i.i, %then.i.i.i.i.i58.i.i, %.noexc56.i.i, %then.i.i.i.i.i.i.i.i.i.i.i, %.noexc53.i.i, %then.i.i.i.i.i.i.i.i.i.i.i.i, %.noexc49.i.i, %then.i.i.i.i.i, %exit15.i.i
+rescue.loopexit.split-lp.i.i: ; preds = %invoke_out56.i.i, %invoke_out55.i.i106, %else54.i.i, %.noexc26.i, %.noexc25.i, %.noexc24.i, %.noexc23.i, %.noexc22.i, %.noexc21.i, %.noexc.i, %then53.i.i, %rescue.i78.i.i, %rescue.i.i.i, %.noexc60.i.i, %then.i.i.i.i.i58.i.i, %.noexc56.i.i, %then.i.i.i.i.i.i.i.i.i.i.i, %.noexc53.i.i, %then.i.i.i.i.i.i.i.i.i.i.i.i, %.noexc49.i.i, %then.i.i.i.i.i, %exit15.i.i
%lpad.loopexit.split-lp.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i72
+ br label %rescue.i.i97
-rescue.i.i72: ; preds = %rescue.loopexit.split-lp.i.i, %rescue.loopexit.i.i
+rescue.i.i97: ; preds = %rescue.loopexit.split-lp.i.i, %rescue.loopexit.i.i
%lpad.phi.i.i = phi %landing_pad [ %lpad.loopexit.i.i, %rescue.loopexit.i.i ], [ %lpad.loopexit.split-lp.i.i, %rescue.loopexit.split-lp.i.i ]
- %994 = extractvalue %landing_pad %lpad.phi.i.i, 0
- %995 = bitcast i8* %994 to %"struct.LibUnwind::Exception"*
- %996 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
- call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %996)
- call void @__crystal_raise(%"struct.LibUnwind::Exception"* %995)
+ %1036 = extractvalue %landing_pad %lpad.phi.i.i, 0
+ %1037 = bitcast i8* %1036 to %"struct.LibUnwind::Exception"*
+ %1038 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
+ call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1038)
+ call void @__crystal_raise(%"struct.LibUnwind::Exception"* %1037)
unreachable
-while.i.i: ; preds = %then.i.i.i79, %exit15.invoke_out_crit_edge.i.i
- %.pn.i.i = phi { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } [ %989, %exit15.invoke_out_crit_edge.i.i ], [ %1122, %then.i.i.i79 ]
+while.i.i: ; preds = %then.i.i.i104, %exit15.invoke_out_crit_edge.i.i
+ %.pn.i.i = phi { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } [ %1031, %exit15.invoke_out_crit_edge.i.i ], [ %1164, %then.i.i.i104 ]
%newret27.pn.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i, 6
%newret23.pn.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i, 4
%addrinfo6.sroa.33.0.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret23.pn.i.i, 3, 0, 0, 2
@@ -3783,170 +3866,170 @@ while.i.i: ; preds = %then.i.i.i79, %exit
%addrinfo6.sroa.48.0.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret27.pn.i.i, 0
%addrinfo6.sroa.4489.0.in.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i, 5
%addrinfo6.sroa.40.0.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret23.pn.i.i, 4
- %997 = zext i16 %addrinfo6.sroa.2.0.i.i to i32
- %998 = invoke i32 @socket(i32 %997, i32 %addrinfo6.sroa.688.0.i.i, i32 %addrinfo6.sroa.9.0.i.i)
- to label %.noexc.i.i73 unwind label %rescue.loopexit.i.i
+ %1039 = zext i16 %addrinfo6.sroa.2.0.i.i to i32
+ %1040 = invoke i32 @socket(i32 %1039, i32 %addrinfo6.sroa.688.0.i.i, i32 %addrinfo6.sroa.9.0.i.i)
+ to label %.noexc.i.i98 unwind label %rescue.loopexit.i.i
-.noexc.i.i73: ; preds = %while.i.i
- %999 = icmp eq i32 %998, -1
- br i1 %999, label %then.i.i.i.i.i, label %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
+.noexc.i.i98: ; preds = %while.i.i
+ %1041 = icmp eq i32 %1040, -1
+ br i1 %1041, label %then.i.i.i.i.i, label %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
-then.i.i.i.i.i: ; preds = %.noexc.i.i73
- %1000 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'Failed to create so...'" to %String*))
+then.i.i.i.i.i: ; preds = %.noexc.i.i98
+ %1042 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'Failed to create so...'" to %String*))
to label %.noexc49.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc49.i.i: ; preds = %then.i.i.i.i.i
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1000)
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1042)
to label %.noexc50.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc50.i.i: ; preds = %.noexc49.i.i
unreachable
-"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i": ; preds = %.noexc.i.i73
- %sunkaddr301 = getelementptr inbounds i8, i8* %933, i64 246
- %1001 = bitcast i8* %sunkaddr301 to i16*
- store i16 %addrinfo6.sroa.2.0.i.i, i16* %1001, align 2
- %sunkaddr302 = getelementptr inbounds i8, i8* %933, i64 248
- %1002 = bitcast i8* %sunkaddr302 to i32*
- store i32 %addrinfo6.sroa.688.0.i.i, i32* %1002, align 4
- %sunkaddr303 = getelementptr inbounds i8, i8* %933, i64 252
- %1003 = bitcast i8* %sunkaddr303 to i32*
- store i32 %addrinfo6.sroa.9.0.i.i, i32* %1003, align 4
- %sunkaddr304 = getelementptr inbounds i8, i8* %933, i64 240
- %1004 = bitcast i8* %sunkaddr304 to i32*
- store i32 %998, i32* %1004, align 4
- %sunkaddr305 = getelementptr inbounds i8, i8* %933, i64 244
- %1005 = bitcast i8* %sunkaddr305 to i1*
- store i1 false, i1* %1005, align 1
- %sunkaddr306 = getelementptr inbounds i8, i8* %933, i64 76
- %1006 = bitcast i8* %sunkaddr306 to i1*
- %1007 = load i1, i1* %1006, align 1
- br i1 %1007, label %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i", label %then.i.i.i.i.i.i.i74
+"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i": ; preds = %.noexc.i.i98
+ %sunkaddr325 = getelementptr inbounds i8, i8* %975, i64 246
+ %1043 = bitcast i8* %sunkaddr325 to i16*
+ store i16 %addrinfo6.sroa.2.0.i.i, i16* %1043, align 2
+ %sunkaddr326 = getelementptr inbounds i8, i8* %975, i64 248
+ %1044 = bitcast i8* %sunkaddr326 to i32*
+ store i32 %addrinfo6.sroa.688.0.i.i, i32* %1044, align 4
+ %sunkaddr327 = getelementptr inbounds i8, i8* %975, i64 252
+ %1045 = bitcast i8* %sunkaddr327 to i32*
+ store i32 %addrinfo6.sroa.9.0.i.i, i32* %1045, align 4
+ %sunkaddr328 = getelementptr inbounds i8, i8* %975, i64 240
+ %1046 = bitcast i8* %sunkaddr328 to i32*
+ store i32 %1040, i32* %1046, align 4
+ %sunkaddr329 = getelementptr inbounds i8, i8* %975, i64 244
+ %1047 = bitcast i8* %sunkaddr329 to i1*
+ store i1 false, i1* %1047, align 1
+ %sunkaddr330 = getelementptr inbounds i8, i8* %975, i64 76
+ %1048 = bitcast i8* %sunkaddr330 to i1*
+ %1049 = load i1, i1* %1048, align 1
+ br i1 %1049, label %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i", label %then.i.i.i.i.i.i.i99
-then.i.i.i.i.i.i.i74: ; preds = %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
- %1008 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1008)
+then.i.i.i.i.i.i.i99: ; preds = %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
+ %1050 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1050)
to label %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i" unwind label %rescue.loopexit.i.i
-"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i": ; preds = %then.i.i.i.i.i.i.i74, %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
- %sunkaddr307 = getelementptr inbounds i8, i8* %933, i64 76
- %1009 = bitcast i8* %sunkaddr307 to i1*
- store i1 true, i1* %1009, align 1
- %sunkaddr308 = getelementptr inbounds i8, i8* %933, i64 240
- %1010 = bitcast i8* %sunkaddr308 to i32*
- %1011 = load atomic volatile i32, i32* %1010 seq_cst, align 4
- %1012 = invoke i32 (i32, i32, ...) @fcntl(i32 %1011, i32 3, i32 0)
+"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i": ; preds = %then.i.i.i.i.i.i.i99, %"*TCPServer@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
+ %sunkaddr331 = getelementptr inbounds i8, i8* %975, i64 76
+ %1051 = bitcast i8* %sunkaddr331 to i1*
+ store i1 true, i1* %1051, align 1
+ %sunkaddr332 = getelementptr inbounds i8, i8* %975, i64 240
+ %1052 = bitcast i8* %sunkaddr332 to i32*
+ %1053 = load atomic volatile i32, i32* %1052 seq_cst, align 4
+ %1054 = invoke i32 (i32, i32, ...) @fcntl(i32 %1053, i32 3, i32 0)
to label %.noexc52.i.i unwind label %rescue.loopexit.i.i
.noexc52.i.i: ; preds = %"*TCPServer@IO::Buffered#sync=<Bool>:Bool.exit.i.i.i.i.i.i"
- %1013 = icmp eq i32 %1012, -1
- br i1 %1013, label %then.i.i.i.i.i.i.i.i.i.i.i.i, label %"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i"
+ %1055 = icmp eq i32 %1054, -1
+ br i1 %1055, label %then.i.i.i.i.i.i.i.i.i.i.i.i, label %"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i"
then.i.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.noexc52.i.i
- %1014 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'fcntl() failed'" to %String*))
+ %1056 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'fcntl() failed'" to %String*))
to label %.noexc53.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc53.i.i: ; preds = %then.i.i.i.i.i.i.i.i.i.i.i.i
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1014)
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1056)
to label %.noexc54.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc54.i.i: ; preds = %.noexc53.i.i
unreachable
"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i": ; preds = %.noexc52.i.i
- %1015 = or i32 %1012, 2048
- %sunkaddr309 = getelementptr inbounds i8, i8* %933, i64 240
- %1016 = bitcast i8* %sunkaddr309 to i32*
- %1017 = load atomic volatile i32, i32* %1016 seq_cst, align 4
- %1018 = invoke i32 (i32, i32, ...) @fcntl(i32 %1017, i32 4, i32 %1015)
+ %1057 = or i32 %1054, 2048
+ %sunkaddr333 = getelementptr inbounds i8, i8* %975, i64 240
+ %1058 = bitcast i8* %sunkaddr333 to i32*
+ %1059 = load atomic volatile i32, i32* %1058 seq_cst, align 4
+ %1060 = invoke i32 (i32, i32, ...) @fcntl(i32 %1059, i32 4, i32 %1057)
to label %.noexc55.i.i unwind label %rescue.loopexit.i.i
.noexc55.i.i: ; preds = %"*TCPServer@Socket#fcntl<Int32>:Int32.exit.i.i.i.i.i.i.i.i"
- %1019 = icmp eq i32 %1018, -1
- br i1 %1019, label %then.i.i.i.i.i.i.i.i.i.i.i, label %invoke_out18.i.i
+ %1061 = icmp eq i32 %1060, -1
+ br i1 %1061, label %then.i.i.i.i.i.i.i.i.i.i.i, label %invoke_out18.i.i
then.i.i.i.i.i.i.i.i.i.i.i: ; preds = %.noexc55.i.i
- %1020 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'fcntl() failed'" to %String*))
+ %1062 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'fcntl() failed'" to %String*))
to label %.noexc56.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc56.i.i: ; preds = %then.i.i.i.i.i.i.i.i.i.i.i
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1020)
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1062)
to label %.noexc57.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc57.i.i: ; preds = %.noexc56.i.i
unreachable
invoke_out18.i.i: ; preds = %.noexc55.i.i
- %1021 = bitcast i32* %12 to i8*
- %sunkaddr310 = getelementptr inbounds i8, i8* %933, i64 240
- %1022 = bitcast i8* %sunkaddr310 to i32*
- %1023 = load atomic volatile i32, i32* %1022 seq_cst, align 4
- call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %1021)
- store i32 1, i32* %12, align 4
- %1024 = invoke i32 @setsockopt(i32 %1023, i32 1, i32 2, i8* nonnull %1021, i32 4)
+ %1063 = bitcast i32* %11 to i8*
+ %sunkaddr334 = getelementptr inbounds i8, i8* %975, i64 240
+ %1064 = bitcast i8* %sunkaddr334 to i32*
+ %1065 = load atomic volatile i32, i32* %1064 seq_cst, align 4
+ call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %1063)
+ store i32 1, i32* %11, align 4
+ %1066 = invoke i32 @setsockopt(i32 %1065, i32 1, i32 2, i8* nonnull %1063, i32 4)
to label %.noexc59.i.i unwind label %rescue.loopexit.i.i
.noexc59.i.i: ; preds = %invoke_out18.i.i
- %1025 = icmp eq i32 %1024, -1
- br i1 %1025, label %then.i.i.i.i.i58.i.i, label %exit23.i.i
+ %1067 = icmp eq i32 %1066, -1
+ br i1 %1067, label %then.i.i.i.i.i58.i.i, label %exit23.i.i
then.i.i.i.i.i58.i.i: ; preds = %.noexc59.i.i
- %1026 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'setsockopt'" to %String*))
+ %1068 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [11 x i8] }* @"'setsockopt'" to %String*))
to label %.noexc60.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc60.i.i: ; preds = %then.i.i.i.i.i58.i.i
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1026)
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1068)
to label %.noexc61.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc61.i.i: ; preds = %.noexc60.i.i
unreachable
exit23.i.i: ; preds = %.noexc59.i.i
- %1027 = bitcast i32* %12 to i8*
- call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %1027)
- %1028 = invoke fastcc %String* @"*String::interpolation<String, String, Int32>:String"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'0.0.0.0'" to %String*), i32 8081)
- to label %invoke_out30.i.i76 unwind label %rescue.loopexit.i.i
+ %1069 = bitcast i32* %11 to i8*
+ call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %1069)
+ %1070 = invoke fastcc %String* @"*String::interpolation<String, String, Int32>:String"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'0.0.0.0'" to %String*), i32 8081)
+ to label %invoke_out30.i.i101 unwind label %rescue.loopexit.i.i
then24.i.i: ; preds = %.noexc70.i.i, %.noexc69.i.i, %.noexc68.i.i
- %.sink.i.i.i.i.i = phi i8* [ %1103, %.noexc69.i.i ], [ %1106, %.noexc70.i.i ], [ %1100, %.noexc68.i.i ]
- %.pre-phi.i.i.i.i.i = phi i32* [ %1105, %.noexc69.i.i ], [ %1108, %.noexc70.i.i ], [ %1102, %.noexc68.i.i ]
- %1029 = getelementptr inbounds i8, i8* %.sink.i.i.i.i.i, i64 8
- %1030 = bitcast i8* %1029 to %String**
- store %String* %1099, %String** %1030, align 8
- %1031 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i, i64 12
- store i32 1941, i32* %1031, align 4
- %1032 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i, i64 14
- store i32 %1096, i32* %1032, align 4
- %sunkaddr311 = getelementptr inbounds i8, i8* %933, i64 72
- %1033 = bitcast i8* %sunkaddr311 to i32*
- %1034 = load i32, i32* %1033, align 4
- %1035 = icmp sgt i32 %1034, 0
- br i1 %1035, label %then.i.i.i.i75, label %exit1.i.i.i.i
+ %.sink.i.i.i.i.i = phi i8* [ %1145, %.noexc69.i.i ], [ %1148, %.noexc70.i.i ], [ %1142, %.noexc68.i.i ]
+ %.pre-phi.i.i.i.i.i = phi i32* [ %1147, %.noexc69.i.i ], [ %1150, %.noexc70.i.i ], [ %1144, %.noexc68.i.i ]
+ %1071 = getelementptr inbounds i8, i8* %.sink.i.i.i.i.i, i64 8
+ %1072 = bitcast i8* %1071 to %String**
+ store %String* %1141, %String** %1072, align 8
+ %1073 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i, i64 12
+ store i32 1941, i32* %1073, align 4
+ %1074 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i, i64 14
+ store i32 %1138, i32* %1074, align 4
+ %sunkaddr335 = getelementptr inbounds i8, i8* %975, i64 72
+ %1075 = bitcast i8* %sunkaddr335 to i32*
+ %1076 = load i32, i32* %1075, align 4
+ %1077 = icmp sgt i32 %1076, 0
+ br i1 %1077, label %then.i.i.i.i100, label %exit1.i.i.i.i
-rescue.i.i.i.i: ; preds = %then.i.i.i.i75
- %1036 = landingpad %landing_pad
+rescue.i.i.i.i: ; preds = %then.i.i.i.i100
+ %1078 = landingpad %landing_pad
cleanup
- %1037 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1037)
+ %1079 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1079)
to label %.noexc.i.i.i unwind label %rescue.i.loopexit.split-lp.i.i
.noexc.i.i.i: ; preds = %rescue.i.i.i.i
- %1038 = extractvalue %landing_pad %1036, 0
- %1039 = bitcast i8* %1038 to %"struct.LibUnwind::Exception"*
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1039)
+ %1080 = extractvalue %landing_pad %1078, 0
+ %1081 = bitcast i8* %1080 to %"struct.LibUnwind::Exception"*
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1081)
to label %.noexc24.i.i.i unwind label %rescue.i.loopexit.split-lp.i.i
.noexc24.i.i.i: ; preds = %.noexc.i.i.i
unreachable
-then.i.i.i.i75: ; preds = %then24.i.i
- %1040 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1040)
+then.i.i.i.i100: ; preds = %then24.i.i
+ %1082 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1082)
to label %exit1.i.i.i.i unwind label %rescue.i.i.i.i
-exit1.i.i.i.i: ; preds = %then.i.i.i.i75, %then24.i.i
- %1041 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1041)
+exit1.i.i.i.i: ; preds = %then.i.i.i.i100, %then24.i.i
+ %1083 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1083)
to label %exit48.i.i unwind label %rescue.i.loopexit.i.i
rescue.i.loopexit.i.i: ; preds = %exit1.i.i.i.i
@@ -3961,206 +4044,206 @@ rescue.i.loopexit.split-lp.i.i: ; preds = %.noexc.i.i.i, %resc
rescue.i.i.i: ; preds = %rescue.i.loopexit.split-lp.i.i, %rescue.i.loopexit.i.i
%lpad.phi106.i.i = phi %landing_pad [ %lpad.loopexit104.i.i, %rescue.i.loopexit.i.i ], [ %lpad.loopexit.split-lp105.i.i, %rescue.i.loopexit.split-lp.i.i ]
- %1042 = extractvalue %landing_pad %lpad.phi106.i.i, 0
- %1043 = bitcast i8* %1042 to %"struct.LibUnwind::Exception"*
- %sunkaddr312 = getelementptr inbounds i8, i8* %933, i64 256
- %1044 = bitcast i8* %sunkaddr312 to i32*
- store i32 0, i32* %1044, align 4
+ %1084 = extractvalue %landing_pad %lpad.phi106.i.i, 0
+ %1085 = bitcast i8* %1084 to %"struct.LibUnwind::Exception"*
+ %sunkaddr336 = getelementptr inbounds i8, i8* %975, i64 256
+ %1086 = bitcast i8* %sunkaddr336 to i32*
+ store i32 0, i32* %1086, align 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i, i8 0, i64 52, i1 false)
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i, i8 0, i64 48, i1 false)
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1043)
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1085)
to label %.noexc62.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc62.i.i: ; preds = %rescue.i.i.i
unreachable
-else25.i.i: ; preds = %invoke_out30.i.i76
- %sunkaddr313 = getelementptr inbounds i8, i8* %933, i64 240
- %1045 = bitcast i8* %sunkaddr313 to i32*
- %1046 = load atomic volatile i32, i32* %1045 seq_cst, align 4
- %1047 = call i32 @listen(i32 %1046, i32 128)
- %1048 = icmp eq i32 %1047, 0
- br i1 %1048, label %"*TCPServer::new<String, Int32>:TCPServer.exit", label %else42.i.i
+else25.i.i: ; preds = %invoke_out30.i.i101
+ %sunkaddr337 = getelementptr inbounds i8, i8* %975, i64 240
+ %1087 = bitcast i8* %sunkaddr337 to i32*
+ %1088 = load atomic volatile i32, i32* %1087 seq_cst, align 4
+ %1089 = call i32 @listen(i32 %1088, i32 128)
+ %1090 = icmp eq i32 %1089, 0
+ br i1 %1090, label %"*TCPServer::new<String, Int32>:TCPServer.exit", label %else42.i.i
-else29.i.i: ; preds = %invoke_out30.i.i76
- %1049 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Could not bind to '...'" to %String*), %String* %1028, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*))
+else29.i.i: ; preds = %invoke_out30.i.i101
+ %1091 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [20 x i8] }* @"'Could not bind to '...'" to %String*), %String* %1070, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*))
to label %invoke_out32.i.i unwind label %rescue.loopexit.i.i
-invoke_out30.i.i76: ; preds = %exit23.i.i
- %1050 = bitcast %"struct.LibC::SockaddrIn6"* %990 to %"struct.LibC::Sockaddr"*
- %1051 = bitcast %"Socket::Addrinfo"* %8 to i16*
- store i16 %addrinfo6.sroa.2.0.i.i, i16* %1051, align 8
- %1052 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr314 = getelementptr inbounds i8, i8* %1052, i64 4
- %1053 = bitcast i8* %sunkaddr314 to i32*
- store i32 %addrinfo6.sroa.688.0.i.i, i32* %1053, align 4
- %1054 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr315 = getelementptr inbounds i8, i8* %1054, i64 8
- %1055 = bitcast i8* %sunkaddr315 to i32*
- store i32 %addrinfo6.sroa.9.0.i.i, i32* %1055, align 8
- %1056 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr316 = getelementptr inbounds i8, i8* %1056, i64 12
- %1057 = bitcast i8* %sunkaddr316 to i32*
- store i32 %addrinfo6.sroa.13.0.i.i, i32* %1057, align 4
- %1058 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr317 = getelementptr inbounds i8, i8* %1058, i64 16
- %1059 = bitcast i8* %sunkaddr317 to i16*
- store i16 %addrinfo6.sroa.16.0.i.i, i16* %1059, align 8
- %1060 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr318 = getelementptr inbounds i8, i8* %1060, i64 18
- %1061 = bitcast i8* %sunkaddr318 to i16*
- store i16 %addrinfo6.sroa.20.0.i.i, i16* %1061, align 2
- %1062 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr319 = getelementptr inbounds i8, i8* %1062, i64 20
- %1063 = bitcast i8* %sunkaddr319 to i32*
- store i32 %addrinfo6.sroa.23.0.i.i, i32* %1063, align 4
- %1064 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr320 = getelementptr inbounds i8, i8* %1064, i64 24
- %1065 = bitcast i8* %sunkaddr320 to i32*
- store i32 %addrinfo6.sroa.26.0.i.i, i32* %1065, align 8
- %1066 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr321 = getelementptr inbounds i8, i8* %1066, i64 28
- %1067 = bitcast i8* %sunkaddr321 to i32*
- store i32 %addrinfo6.sroa.30.0.i.i, i32* %1067, align 4
- %1068 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr322 = getelementptr inbounds i8, i8* %1068, i64 32
- %1069 = bitcast i8* %sunkaddr322 to i32*
- store i32 %addrinfo6.sroa.33.0.i.i, i32* %1069, align 8
- %1070 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr323 = getelementptr inbounds i8, i8* %1070, i64 36
- %1071 = bitcast i8* %sunkaddr323 to i32*
- store i32 %addrinfo6.sroa.37.0.i.i, i32* %1071, align 4
- %1072 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr324 = getelementptr inbounds i8, i8* %1072, i64 40
- %1073 = bitcast i8* %sunkaddr324 to i32*
- store i32 %addrinfo6.sroa.40.0.i.i, i32* %1073, align 8
- %1074 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr325 = getelementptr inbounds i8, i8* %1074, i64 48
- %1075 = bitcast i8* %sunkaddr325 to %"struct.LibC::Addrinfo"**
- store %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4489.0.in.i.i, %"struct.LibC::Addrinfo"** %1075, align 8
- %1076 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr326 = getelementptr inbounds i8, i8* %1076, i64 56
- %1077 = bitcast i8* %sunkaddr326 to i32*
- store i32 %addrinfo6.sroa.48.0.i.i, i32* %1077, align 8
- %1078 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr327 = getelementptr inbounds i8, i8* %1078, i64 64
- %1079 = bitcast i8* %sunkaddr327 to i64*
- store i64 %addrinfo6.sroa.52.sroa.1.0.i.i, i64* %1079, align 8
- %1080 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr328 = getelementptr inbounds i8, i8* %1080, i64 72
- %1081 = bitcast i8* %sunkaddr328 to i64*
- store i64 %addrinfo6.sroa.56.0.i.i, i64* %1081, align 8
- %1082 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr329 = getelementptr inbounds i8, i8* %1082, i64 80
- %1083 = bitcast i8* %sunkaddr329 to i64*
- store i64 %addrinfo6.sroa.60.0.i.i, i64* %1083, align 8
- %1084 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr330 = getelementptr inbounds i8, i8* %1084, i64 88
- %1085 = bitcast i8* %sunkaddr330 to i64*
- store i64 %addrinfo6.sroa.64.0.i.i, i64* %1085, align 8
- %1086 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr331 = getelementptr inbounds i8, i8* %1086, i64 96
- %1087 = bitcast i8* %sunkaddr331 to i64*
- store i64 %addrinfo6.sroa.68.0.i.i, i64* %1087, align 8
- %1088 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %sunkaddr332 = getelementptr inbounds i8, i8* %1088, i64 104
- %1089 = bitcast i8* %sunkaddr332 to i64*
- store i64 %addrinfo6.sroa.72.0.i.i, i64* %1089, align 8
- %sunkaddr333 = getelementptr inbounds i8, i8* %933, i64 240
- %1090 = bitcast i8* %sunkaddr333 to i32*
- %1091 = load atomic volatile i32, i32* %1090 seq_cst, align 4
- %1092 = load i32, i32* %1057, align 4
- %1093 = call i32 @bind(i32 %1091, %"struct.LibC::Sockaddr"* nonnull %1050, i32 %1092)
- %1094 = icmp eq i32 %1093, 0
- br i1 %1094, label %else25.i.i, label %else29.i.i
+invoke_out30.i.i101: ; preds = %exit23.i.i
+ %1092 = bitcast %"struct.LibC::SockaddrIn6"* %1032 to %"struct.LibC::Sockaddr"*
+ %1093 = bitcast %"Socket::Addrinfo"* %8 to i16*
+ store i16 %addrinfo6.sroa.2.0.i.i, i16* %1093, align 8
+ %1094 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr338 = getelementptr inbounds i8, i8* %1094, i64 4
+ %1095 = bitcast i8* %sunkaddr338 to i32*
+ store i32 %addrinfo6.sroa.688.0.i.i, i32* %1095, align 4
+ %1096 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr339 = getelementptr inbounds i8, i8* %1096, i64 8
+ %1097 = bitcast i8* %sunkaddr339 to i32*
+ store i32 %addrinfo6.sroa.9.0.i.i, i32* %1097, align 8
+ %1098 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr340 = getelementptr inbounds i8, i8* %1098, i64 12
+ %1099 = bitcast i8* %sunkaddr340 to i32*
+ store i32 %addrinfo6.sroa.13.0.i.i, i32* %1099, align 4
+ %1100 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr341 = getelementptr inbounds i8, i8* %1100, i64 16
+ %1101 = bitcast i8* %sunkaddr341 to i16*
+ store i16 %addrinfo6.sroa.16.0.i.i, i16* %1101, align 8
+ %1102 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr342 = getelementptr inbounds i8, i8* %1102, i64 18
+ %1103 = bitcast i8* %sunkaddr342 to i16*
+ store i16 %addrinfo6.sroa.20.0.i.i, i16* %1103, align 2
+ %1104 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr343 = getelementptr inbounds i8, i8* %1104, i64 20
+ %1105 = bitcast i8* %sunkaddr343 to i32*
+ store i32 %addrinfo6.sroa.23.0.i.i, i32* %1105, align 4
+ %1106 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr344 = getelementptr inbounds i8, i8* %1106, i64 24
+ %1107 = bitcast i8* %sunkaddr344 to i32*
+ store i32 %addrinfo6.sroa.26.0.i.i, i32* %1107, align 8
+ %1108 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr345 = getelementptr inbounds i8, i8* %1108, i64 28
+ %1109 = bitcast i8* %sunkaddr345 to i32*
+ store i32 %addrinfo6.sroa.30.0.i.i, i32* %1109, align 4
+ %1110 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr346 = getelementptr inbounds i8, i8* %1110, i64 32
+ %1111 = bitcast i8* %sunkaddr346 to i32*
+ store i32 %addrinfo6.sroa.33.0.i.i, i32* %1111, align 8
+ %1112 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr347 = getelementptr inbounds i8, i8* %1112, i64 36
+ %1113 = bitcast i8* %sunkaddr347 to i32*
+ store i32 %addrinfo6.sroa.37.0.i.i, i32* %1113, align 4
+ %1114 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr348 = getelementptr inbounds i8, i8* %1114, i64 40
+ %1115 = bitcast i8* %sunkaddr348 to i32*
+ store i32 %addrinfo6.sroa.40.0.i.i, i32* %1115, align 8
+ %1116 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr349 = getelementptr inbounds i8, i8* %1116, i64 48
+ %1117 = bitcast i8* %sunkaddr349 to %"struct.LibC::Addrinfo"**
+ store %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4489.0.in.i.i, %"struct.LibC::Addrinfo"** %1117, align 8
+ %1118 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr350 = getelementptr inbounds i8, i8* %1118, i64 56
+ %1119 = bitcast i8* %sunkaddr350 to i32*
+ store i32 %addrinfo6.sroa.48.0.i.i, i32* %1119, align 8
+ %1120 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr351 = getelementptr inbounds i8, i8* %1120, i64 64
+ %1121 = bitcast i8* %sunkaddr351 to i64*
+ store i64 %addrinfo6.sroa.52.sroa.1.0.i.i, i64* %1121, align 8
+ %1122 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr352 = getelementptr inbounds i8, i8* %1122, i64 72
+ %1123 = bitcast i8* %sunkaddr352 to i64*
+ store i64 %addrinfo6.sroa.56.0.i.i, i64* %1123, align 8
+ %1124 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr353 = getelementptr inbounds i8, i8* %1124, i64 80
+ %1125 = bitcast i8* %sunkaddr353 to i64*
+ store i64 %addrinfo6.sroa.60.0.i.i, i64* %1125, align 8
+ %1126 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr354 = getelementptr inbounds i8, i8* %1126, i64 88
+ %1127 = bitcast i8* %sunkaddr354 to i64*
+ store i64 %addrinfo6.sroa.64.0.i.i, i64* %1127, align 8
+ %1128 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr355 = getelementptr inbounds i8, i8* %1128, i64 96
+ %1129 = bitcast i8* %sunkaddr355 to i64*
+ store i64 %addrinfo6.sroa.68.0.i.i, i64* %1129, align 8
+ %1130 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %sunkaddr356 = getelementptr inbounds i8, i8* %1130, i64 104
+ %1131 = bitcast i8* %sunkaddr356 to i64*
+ store i64 %addrinfo6.sroa.72.0.i.i, i64* %1131, align 8
+ %sunkaddr357 = getelementptr inbounds i8, i8* %975, i64 240
+ %1132 = bitcast i8* %sunkaddr357 to i32*
+ %1133 = load atomic volatile i32, i32* %1132 seq_cst, align 4
+ %1134 = load i32, i32* %1099, align 4
+ %1135 = call i32 @bind(i32 %1133, %"struct.LibC::Sockaddr"* nonnull %1092, i32 %1134)
+ %1136 = icmp eq i32 %1135, 0
+ br i1 %1136, label %else25.i.i, label %else29.i.i
invoke_out32.i.i: ; preds = %else29.i.i
- %1095 = invoke i32* @__errno_location()
+ %1137 = invoke i32* @__errno_location()
to label %.noexc64.i.i unwind label %rescue.loopexit.i.i
.noexc64.i.i: ; preds = %invoke_out32.i.i
- %1096 = load i32, i32* %1095, align 4
- %1097 = invoke i8* @strerror(i32 %1096)
+ %1138 = load i32, i32* %1137, align 4
+ %1139 = invoke i8* @strerror(i32 %1138)
to label %.noexc65.i.i unwind label %rescue.loopexit.i.i
.noexc65.i.i: ; preds = %.noexc64.i.i
- %1098 = invoke fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %1097)
+ %1140 = invoke fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %1139)
to label %.noexc66.i.i unwind label %rescue.loopexit.i.i
.noexc66.i.i: ; preds = %.noexc65.i.i
- %1099 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* %1049, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %1098)
+ %1141 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* %1091, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %1140)
to label %.noexc67.i.i unwind label %rescue.loopexit.i.i
.noexc67.i.i: ; preds = %.noexc66.i.i
- switch i32 %1096, label %else2.i.i.i.i.i [
+ switch i32 %1138, label %else2.i.i.i.i.i [
i32 111, label %then.i.i.i63.i.i
- i32 98, label %then1.i.i.i.i.i77
+ i32 98, label %then1.i.i.i.i.i102
]
then.i.i.i63.i.i: ; preds = %.noexc67.i.i
- %1100 = invoke i8* @GC_malloc(i64 64)
+ %1142 = invoke i8* @GC_malloc(i64 64)
to label %.noexc68.i.i unwind label %rescue.loopexit.i.i
.noexc68.i.i: ; preds = %then.i.i.i63.i.i
- %1101 = getelementptr inbounds i8, i8* %1100, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1101, i8 0, i64 60, i1 false)
- %1102 = bitcast i8* %1100 to i32*
- store i32 86, i32* %1102, align 4
+ %1143 = getelementptr inbounds i8, i8* %1142, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1143, i8 0, i64 60, i1 false)
+ %1144 = bitcast i8* %1142 to i32*
+ store i32 86, i32* %1144, align 4
br label %then24.i.i
-then1.i.i.i.i.i77: ; preds = %.noexc67.i.i
- %1103 = invoke i8* @GC_malloc(i64 64)
+then1.i.i.i.i.i102: ; preds = %.noexc67.i.i
+ %1145 = invoke i8* @GC_malloc(i64 64)
to label %.noexc69.i.i unwind label %rescue.loopexit.i.i
-.noexc69.i.i: ; preds = %then1.i.i.i.i.i77
- %1104 = getelementptr inbounds i8, i8* %1103, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1104, i8 0, i64 60, i1 false)
- %1105 = bitcast i8* %1103 to i32*
- store i32 87, i32* %1105, align 4
+.noexc69.i.i: ; preds = %then1.i.i.i.i.i102
+ %1146 = getelementptr inbounds i8, i8* %1145, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1146, i8 0, i64 60, i1 false)
+ %1147 = bitcast i8* %1145 to i32*
+ store i32 87, i32* %1147, align 4
br label %then24.i.i
else2.i.i.i.i.i: ; preds = %.noexc67.i.i
- %1106 = invoke i8* @GC_malloc(i64 64)
+ %1148 = invoke i8* @GC_malloc(i64 64)
to label %.noexc70.i.i unwind label %rescue.loopexit.i.i
.noexc70.i.i: ; preds = %else2.i.i.i.i.i
- %1107 = getelementptr inbounds i8, i8* %1106, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1107, i8 0, i64 60, i1 false)
- %1108 = bitcast i8* %1106 to i32*
- store i32 87, i32* %1108, align 4
+ %1149 = getelementptr inbounds i8, i8* %1148, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1149, i8 0, i64 60, i1 false)
+ %1150 = bitcast i8* %1148 to i32*
+ store i32 87, i32* %1150, align 4
br label %then24.i.i
then36.i.i: ; preds = %exit43.i.i
- %sunkaddr334 = getelementptr inbounds i8, i8* %933, i64 72
- %1109 = bitcast i8* %sunkaddr334 to i32*
- %1110 = load i32, i32* %1109, align 4
- %1111 = icmp sgt i32 %1110, 0
- br i1 %1111, label %then.i.i74.i.i, label %exit1.i.i75.i.i
+ %sunkaddr358 = getelementptr inbounds i8, i8* %975, i64 72
+ %1151 = bitcast i8* %sunkaddr358 to i32*
+ %1152 = load i32, i32* %1151, align 4
+ %1153 = icmp sgt i32 %1152, 0
+ br i1 %1153, label %then.i.i74.i.i, label %exit1.i.i75.i.i
rescue.i.i71.i.i: ; preds = %then.i.i74.i.i
- %1112 = landingpad %landing_pad
+ %1154 = landingpad %landing_pad
cleanup
- %1113 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1113)
+ %1155 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1155)
to label %.noexc.i72.i.i unwind label %rescue.i78.loopexit.split-lp.i.i
.noexc.i72.i.i: ; preds = %rescue.i.i71.i.i
- %1114 = extractvalue %landing_pad %1112, 0
- %1115 = bitcast i8* %1114 to %"struct.LibUnwind::Exception"*
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1115)
+ %1156 = extractvalue %landing_pad %1154, 0
+ %1157 = bitcast i8* %1156 to %"struct.LibUnwind::Exception"*
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1157)
to label %.noexc24.i73.i.i unwind label %rescue.i78.loopexit.split-lp.i.i
.noexc24.i73.i.i: ; preds = %.noexc.i72.i.i
unreachable
then.i.i74.i.i: ; preds = %then36.i.i
- %1116 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1116)
+ %1158 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@IO::Buffered#flush:TCPServer"(%TCPServer* nonnull %1158)
to label %exit1.i.i75.i.i unwind label %rescue.i.i71.i.i
exit1.i.i75.i.i: ; preds = %then.i.i74.i.i, %then36.i.i
- %1117 = bitcast i8* %933 to %TCPServer*
- invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1117)
+ %1159 = bitcast i8* %975 to %TCPServer*
+ invoke fastcc void @"*TCPServer@Socket#unbuffered_close:Nil"(%TCPServer* nonnull %1159)
to label %exit48.i.i unwind label %rescue.i78.loopexit.i.i
rescue.i78.loopexit.i.i: ; preds = %exit1.i.i75.i.i
@@ -4175,118 +4258,118 @@ rescue.i78.loopexit.split-lp.i.i: ; preds = %.noexc.i72.i.i, %re
rescue.i78.i.i: ; preds = %rescue.i78.loopexit.split-lp.i.i, %rescue.i78.loopexit.i.i
%lpad.phi109.i.i = phi %landing_pad [ %lpad.loopexit107.i.i, %rescue.i78.loopexit.i.i ], [ %lpad.loopexit.split-lp108.i.i, %rescue.i78.loopexit.split-lp.i.i ]
- %1118 = extractvalue %landing_pad %lpad.phi109.i.i, 0
- %1119 = bitcast i8* %1118 to %"struct.LibUnwind::Exception"*
- %sunkaddr335 = getelementptr inbounds i8, i8* %933, i64 256
- %1120 = bitcast i8* %sunkaddr335 to i32*
- store i32 0, i32* %1120, align 4
+ %1160 = extractvalue %landing_pad %lpad.phi109.i.i, 0
+ %1161 = bitcast i8* %1160 to %"struct.LibUnwind::Exception"*
+ %sunkaddr359 = getelementptr inbounds i8, i8* %975, i64 256
+ %1162 = bitcast i8* %sunkaddr359 to i32*
+ store i32 0, i32* %1162, align 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i, i8 0, i64 52, i1 false)
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i, i8 0, i64 48, i1 false)
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1119)
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1161)
to label %.noexc81.i.i unwind label %rescue.loopexit.split-lp.i.i
.noexc81.i.i: ; preds = %rescue.i78.i.i
unreachable
else42.i.i: ; preds = %else25.i.i
- %1121 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Listen failed'" to %String*))
+ %1163 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Listen failed'" to %String*))
to label %exit43.i.i unwind label %rescue.loopexit.i.i
exit43.i.i: ; preds = %else42.i.i
- %.not47.i.i = icmp eq i32* %1121, null
+ %.not47.i.i = icmp eq i32* %1163, null
br i1 %.not47.i.i, label %"*TCPServer::new<String, Int32>:TCPServer.exit", label %then36.i.i
then46.i.i: ; preds = %exit48.i.i
- %.not.i.i.i78 = icmp eq %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4489.0.in.i.i, null
- br i1 %.not.i.i.i78, label %else50.i.i80, label %then.i.i.i79
+ %.not.i.i.i103 = icmp eq %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4489.0.in.i.i, null
+ br i1 %.not.i.i.i103, label %else50.i.i105, label %then.i.i.i104
-then.i.i.i79: ; preds = %then46.i.i
- %1122 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* nonnull %addrinfo6.sroa.4489.0.in.i.i)
+then.i.i.i104: ; preds = %then46.i.i
+ %1164 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* nonnull %addrinfo6.sroa.4489.0.in.i.i)
to label %while.i.i unwind label %rescue.loopexit.i.i
exit48.i.i: ; preds = %exit1.i.i75.i.i, %exit1.i.i.i.i
- %.ph.i.i = phi i32* [ %.pre-phi.i.i.i.i.i, %exit1.i.i.i.i ], [ %1121, %exit1.i.i75.i.i ]
- %sunkaddr336 = getelementptr inbounds i8, i8* %933, i64 256
- %1123 = bitcast i8* %sunkaddr336 to i32*
- store i32 0, i32* %1123, align 4
+ %.ph.i.i = phi i32* [ %.pre-phi.i.i.i.i.i, %exit1.i.i.i.i ], [ %1163, %exit1.i.i75.i.i ]
+ %sunkaddr360 = getelementptr inbounds i8, i8* %975, i64 256
+ %1165 = bitcast i8* %sunkaddr360 to i32*
+ store i32 0, i32* %1165, align 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i, i8 0, i64 52, i1 false)
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i, i8 0, i64 48, i1 false)
- %1124 = load i32, i32* %.ph.i.i, align 4
- %1125 = add i32 %1124, -86
- %1126 = icmp ult i32 %1125, 4
- br i1 %1126, label %then46.i.i, label %"*TCPServer::new<String, Int32>:TCPServer.exit"
+ %1166 = load i32, i32* %.ph.i.i, align 4
+ %1167 = add i32 %1166, -86
+ %1168 = icmp ult i32 %1167, 4
+ br i1 %1168, label %then46.i.i, label %"*TCPServer::new<String, Int32>:TCPServer.exit"
-else50.i.i80: ; preds = %then46.i.i
- %1127 = icmp eq i32 %1124, 86
- br i1 %1127, label %then53.i.i, label %else54.i.i
+else50.i.i105: ; preds = %then46.i.i
+ %1169 = icmp eq i32 %1166, 86
+ br i1 %1169, label %then53.i.i, label %else54.i.i
-then53.i.i: ; preds = %else50.i.i80
- %1128 = invoke i8* @GC_malloc(i64 80)
+then53.i.i: ; preds = %else50.i.i105
+ %1170 = invoke i8* @GC_malloc(i64 80)
to label %.noexc.i unwind label %rescue.loopexit.split-lp.i.i
.noexc.i: ; preds = %then53.i.i
- %1129 = getelementptr inbounds i8, i8* %1128, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %1129, i8 0, i64 76, i1 false)
- %1130 = bitcast i8* %1128 to i32*
- store i32 152, i32* %1130, align 4
- %1131 = invoke i8* @GC_malloc_atomic(i64 58)
+ %1171 = getelementptr inbounds i8, i8* %1170, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %1171, i8 0, i64 76, i1 false)
+ %1172 = bitcast i8* %1170 to i32*
+ store i32 152, i32* %1172, align 4
+ %1173 = invoke i8* @GC_malloc_atomic(i64 58)
to label %.noexc21.i unwind label %rescue.loopexit.split-lp.i.i
.noexc21.i: ; preds = %.noexc.i
- %1132 = bitcast i8* %1128 to %"String::Builder"*
- %1133 = getelementptr inbounds i8, i8* %1128, i64 64
- %1134 = bitcast i8* %1133 to i8**
- store i8* %1131, i8** %1134, align 8
- %1135 = getelementptr inbounds i8, i8* %1128, i64 56
- %1136 = bitcast i8* %1135 to i32*
- store i32 0, i32* %1136, align 4
- %1137 = getelementptr inbounds i8, i8* %1128, i64 60
- %1138 = bitcast i8* %1137 to i32*
- store i32 58, i32* %1138, align 4
- %1139 = getelementptr inbounds i8, i8* %1128, i64 72
- %1140 = bitcast i8* %1139 to i1*
- store i1 false, i1* %1140, align 1
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1132, %"Slice(UInt8)" { i32 21, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [22 x i8] }, { i32, i32, i32, [22 x i8] }* @"'Error connecting to...'", i64 0, i32 3, i64 0) })
+ %1174 = bitcast i8* %1170 to %"String::Builder"*
+ %1175 = getelementptr inbounds i8, i8* %1170, i64 64
+ %1176 = bitcast i8* %1175 to i8**
+ store i8* %1173, i8** %1176, align 8
+ %1177 = getelementptr inbounds i8, i8* %1170, i64 56
+ %1178 = bitcast i8* %1177 to i32*
+ store i32 0, i32* %1178, align 4
+ %1179 = getelementptr inbounds i8, i8* %1170, i64 60
+ %1180 = bitcast i8* %1179 to i32*
+ store i32 58, i32* %1180, align 4
+ %1181 = getelementptr inbounds i8, i8* %1170, i64 72
+ %1182 = bitcast i8* %1181 to i1*
+ store i1 false, i1* %1182, align 1
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1174, %"Slice(UInt8)" { i32 21, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [22 x i8] }, { i32, i32, i32, [22 x i8] }* @"'Error connecting to...'", i64 0, i32 3, i64 0) })
to label %.noexc22.i unwind label %rescue.loopexit.split-lp.i.i
.noexc22.i: ; preds = %.noexc21.i
- %1141 = bitcast i8* %1128 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1141, %"Slice(UInt8)" { i32 7, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [8 x i8] }, { i32, i32, i32, [8 x i8] }* @"'0.0.0.0'", i64 0, i32 3, i64 0) })
+ %1183 = bitcast i8* %1170 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1183, %"Slice(UInt8)" { i32 7, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [8 x i8] }, { i32, i32, i32, [8 x i8] }* @"'0.0.0.0'", i64 0, i32 3, i64 0) })
to label %.noexc23.i unwind label %rescue.loopexit.split-lp.i.i
.noexc23.i: ; preds = %.noexc22.i
- %1142 = bitcast i8* %1128 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1142, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"':'", i64 0, i32 3, i64 0) })
+ %1184 = bitcast i8* %1170 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1184, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"':'", i64 0, i32 3, i64 0) })
to label %.noexc24.i unwind label %rescue.loopexit.split-lp.i.i
.noexc24.i: ; preds = %.noexc23.i
- %1143 = bitcast i8* %1128 to %"String::Builder"*
- %1144 = invoke fastcc %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* nonnull %1143, i32 8081)
+ %1185 = bitcast i8* %1170 to %"String::Builder"*
+ invoke fastcc void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 8081, %"String::Builder"* nonnull %1185)
to label %.noexc25.i unwind label %rescue.loopexit.split-lp.i.i
.noexc25.i: ; preds = %.noexc24.i
- %1145 = bitcast i8* %1128 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1145, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'''", i64 0, i32 3, i64 0) })
+ %1186 = bitcast i8* %1170 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1186, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'''", i64 0, i32 3, i64 0) })
to label %.noexc26.i unwind label %rescue.loopexit.split-lp.i.i
.noexc26.i: ; preds = %.noexc25.i
- %1146 = bitcast i8* %1128 to %"String::Builder"*
- %1147 = invoke fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* nonnull %1146)
- to label %invoke_out55.i.i81 unwind label %rescue.loopexit.split-lp.i.i
+ %1187 = bitcast i8* %1170 to %"String::Builder"*
+ %1188 = invoke fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* nonnull %1187)
+ to label %invoke_out55.i.i106 unwind label %rescue.loopexit.split-lp.i.i
-else54.i.i: ; preds = %else50.i.i80
+else54.i.i: ; preds = %else50.i.i105
invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* nonnull %.ph.i.i)
to label %invoke_out58.i.i unwind label %rescue.loopexit.split-lp.i.i
-invoke_out55.i.i81: ; preds = %.noexc26.i
- %1148 = getelementptr inbounds i32, i32* %.ph.i.i, i64 12
- %1149 = bitcast i32* %1148 to %"(Errno | WasiError | WinError | Nil)"*
- %1150 = load %"(Errno | WasiError | WinError | Nil)", %"(Errno | WasiError | WinError | Nil)"* %1149, align 8
- %1151 = invoke fastcc i32* @"*Socket::ConnectError@SystemError::ClassMethods::from_os_error<String, (Errno | WasiError | WinError | Nil)>:Socket::Error+"(%String* %1147, %"(Errno | WasiError | WinError | Nil)" %1150)
+invoke_out55.i.i106: ; preds = %.noexc26.i
+ %1189 = getelementptr inbounds i32, i32* %.ph.i.i, i64 12
+ %1190 = bitcast i32* %1189 to %"(Errno | WasiError | WinError | Nil)"*
+ %1191 = load %"(Errno | WasiError | WinError | Nil)", %"(Errno | WasiError | WinError | Nil)"* %1190, align 8
+ %1192 = invoke fastcc i32* @"*Socket::ConnectError@SystemError::ClassMethods::from_os_error<String, (Errno | WasiError | WinError | Nil)>:Socket::Error+"(%String* %1188, %"(Errno | WasiError | WinError | Nil)" %1191)
to label %invoke_out56.i.i unwind label %rescue.loopexit.split-lp.i.i
-invoke_out56.i.i: ; preds = %invoke_out55.i.i81
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1151)
+invoke_out56.i.i: ; preds = %invoke_out55.i.i106
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1192)
to label %invoke_out57.i.i unwind label %rescue.loopexit.split-lp.i.i
invoke_out57.i.i: ; preds = %invoke_out56.i.i
@@ -4296,192 +4379,192 @@ invoke_out58.i.i: ; preds = %else54.i.i
unreachable
"*TCPServer::new<String, Int32>:TCPServer.exit": ; preds = %else25.i.i, %exit43.i.i, %exit48.i.i
- %1152 = bitcast %"Socket::Addrinfo"* %8 to i8*
- %1153 = bitcast %"struct.LibC::Addrinfo"** %2 to i8*
- %1154 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
- %1155 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
- call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1155)
- call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %1154)
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1153)
- call void @llvm.lifetime.end.p0i8(i64 112, i8* nonnull %1152)
- call void @GC_register_finalizer_ignore_self(i8* %933, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc7Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
- %1156 = bitcast i8* %22 to i8**
- store i8* %933, i8** %1156, align 8
- %.fca.1.insert = insertvalue %"->" { i8* bitcast (void (i8*)* @"~procProc(Nil)@.test/regression-io.cr:5" to i8*), i8* poison }, i8* %22, 1
- %1157 = call fastcc %Fiber* @"*Fiber::new<Nil, &Proc(Nil)>:Fiber"(%"->" %.fca.1.insert)
- call fastcc void @"*Crystal::Scheduler::enqueue<Fiber>:Nil"(%Fiber* %1157)
- %1158 = call i8* @GC_malloc(i64 368)
- %1159 = getelementptr inbounds i8, i8* %1158, i64 77
- %1160 = bitcast i8* %1159 to i1*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(368) %1158, i8 0, i64 368, i1 false)
- store i1 true, i1* %1160, align 1
- %1161 = getelementptr inbounds i8, i8* %1158, i64 80
- %1162 = bitcast i8* %1161 to i32*
- store i32 32768, i32* %1162, align 4
- %1163 = call i8* @GC_malloc(i64 56)
- %1164 = bitcast i8* %1163 to i32*
- %1165 = getelementptr inbounds i8, i8* %1163, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1165, i8 0, i64 36, i1 false)
- store i32 63, i32* %1164, align 4
- %1166 = getelementptr inbounds i8, i8* %1163, i64 8
- %.repack.i.i.i.i82 = getelementptr inbounds i8, i8* %1163, i64 40
- %1167 = getelementptr inbounds i8, i8* %1163, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1166, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i82, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %1167, align 1
- %1168 = call i8* @GC_malloc_atomic(i64 4)
- %1169 = bitcast i8* %1168 to i32*
- store i32 186, i32* %1169, align 4
- %1170 = getelementptr inbounds i8, i8* %1158, i64 176
- %1171 = bitcast i8* %1170 to i8**
- store i8* %1163, i8** %1171, align 8
- %.repack1.i83 = getelementptr inbounds i8, i8* %1158, i64 184
- %1172 = bitcast i8* %.repack1.i83 to i8**
- store i8* %1168, i8** %1172, align 8
- %1173 = call i8* @GC_malloc(i64 56)
- %1174 = bitcast i8* %1173 to i32*
- %1175 = getelementptr inbounds i8, i8* %1173, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1175, i8 0, i64 36, i1 false)
- store i32 63, i32* %1174, align 4
- %1176 = getelementptr inbounds i8, i8* %1173, i64 8
- %.repack.i.i.i12.i84 = getelementptr inbounds i8, i8* %1173, i64 40
- %1177 = getelementptr inbounds i8, i8* %1173, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1176, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i12.i84, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %1177, align 1
- %1178 = call i8* @GC_malloc_atomic(i64 4)
- %1179 = bitcast i8* %1178 to i32*
- store i32 186, i32* %1179, align 4
- %1180 = getelementptr inbounds i8, i8* %1158, i64 192
- %1181 = bitcast i8* %1180 to i8**
- store i8* %1173, i8** %1181, align 8
- %.repack4.i85 = getelementptr inbounds i8, i8* %1158, i64 200
- %1182 = bitcast i8* %.repack4.i85 to i8**
- store i8* %1178, i8** %1182, align 8
- %1183 = call i8* @GC_malloc(i64 56)
- %1184 = bitcast i8* %1183 to i32*
- %1185 = getelementptr inbounds i8, i8* %1183, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1185, i8 0, i64 36, i1 false)
- store i32 64, i32* %1184, align 4
- %1186 = getelementptr inbounds i8, i8* %1183, i64 8
- %.repack.i.i.i15.i86 = getelementptr inbounds i8, i8* %1183, i64 40
- %1187 = getelementptr inbounds i8, i8* %1183, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1186, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i15.i86, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %1187, align 1
- %1188 = call i8* @GC_malloc_atomic(i64 4)
- %1189 = bitcast i8* %1188 to i32*
- store i32 186, i32* %1189, align 4
- %1190 = getelementptr inbounds i8, i8* %1158, i64 208
- %1191 = bitcast i8* %1190 to i8**
- store i8* %1183, i8** %1191, align 8
- %.repack7.i87 = getelementptr inbounds i8, i8* %1158, i64 216
- %1192 = bitcast i8* %.repack7.i87 to i8**
- store i8* %1188, i8** %1192, align 8
- %1193 = call i8* @GC_malloc(i64 56)
- %1194 = bitcast i8* %1193 to i32*
- %1195 = getelementptr inbounds i8, i8* %1193, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1195, i8 0, i64 36, i1 false)
- store i32 64, i32* %1194, align 4
- %1196 = getelementptr inbounds i8, i8* %1193, i64 8
- %.repack.i.i.i18.i88 = getelementptr inbounds i8, i8* %1193, i64 40
- %1197 = getelementptr inbounds i8, i8* %1193, i64 32
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1196, i8 0, i64 24, i1 false) #22
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i18.i88, i8 0, i64 16, i1 false) #22
- store i8 1, i8* %1197, align 1
- %1198 = call i8* @GC_malloc_atomic(i64 4)
- %1199 = bitcast i8* %1198 to i32*
- store i32 186, i32* %1199, align 4
- %1200 = getelementptr inbounds i8, i8* %1158, i64 224
- %1201 = bitcast i8* %1200 to i8**
- store i8* %1193, i8** %1201, align 8
- %.repack10.i89 = getelementptr inbounds i8, i8* %1158, i64 232
- %1202 = bitcast i8* %.repack10.i89 to i8**
- store i8* %1198, i8** %1202, align 8
- %1203 = bitcast i8* %1158 to i32*
- store i32 155, i32* %1203, align 4
- %1204 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %1204)
- %1205 = bitcast %"struct.LibC::Addrinfo"** %3 to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1205)
- %1206 = bitcast %"Socket::Addrinfo"* %10 to i8*
- call void @llvm.lifetime.start.p0i8(i64 112, i8* nonnull %1206)
- %1207 = call fastcc %String* @"*URI::Punycode::to_ascii<String>:String"()
- %.fca.7.insert.fca.0.gep.i.i.i337 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i32*
+ %1193 = bitcast %"Socket::Addrinfo"* %8 to i8*
+ %1194 = bitcast %"struct.LibC::Addrinfo"** %2 to i8*
+ %1195 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
+ %1196 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %2, align 8
+ call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1196)
+ call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %1195)
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1194)
+ call void @llvm.lifetime.end.p0i8(i64 112, i8* nonnull %1193)
+ call void @GC_register_finalizer_ignore_self(i8* %975, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc7Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
+ %1197 = bitcast i8* %20 to i8**
+ store i8* %975, i8** %1197, align 8
+ %.fca.1.insert = insertvalue %"->" { i8* bitcast (void (i8*)* @"~procProc(Nil)@.test/regression-io.cr:5" to i8*), i8* poison }, i8* %20, 1
+ %1198 = call fastcc %Fiber* @"*Fiber::new<Nil, &Proc(Nil)>:Fiber"(%"->" %.fca.1.insert)
+ call fastcc void @"*Crystal::Scheduler::enqueue<Fiber>:Nil"(%Fiber* %1198)
+ %1199 = call i8* @GC_malloc(i64 368)
+ %1200 = getelementptr inbounds i8, i8* %1199, i64 77
+ %1201 = bitcast i8* %1200 to i1*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(368) %1199, i8 0, i64 368, i1 false)
+ store i1 true, i1* %1201, align 1
+ %1202 = getelementptr inbounds i8, i8* %1199, i64 80
+ %1203 = bitcast i8* %1202 to i32*
+ store i32 32768, i32* %1203, align 4
+ %1204 = call i8* @GC_malloc(i64 56)
+ %1205 = bitcast i8* %1204 to i32*
+ %1206 = getelementptr inbounds i8, i8* %1204, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1206, i8 0, i64 36, i1 false)
+ store i32 63, i32* %1205, align 4
+ %1207 = getelementptr inbounds i8, i8* %1204, i64 8
+ %.repack.i.i.i.i107 = getelementptr inbounds i8, i8* %1204, i64 40
+ %1208 = getelementptr inbounds i8, i8* %1204, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1207, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i.i107, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1208, align 1
+ %1209 = call i8* @GC_malloc_atomic(i64 4)
+ %1210 = bitcast i8* %1209 to i32*
+ store i32 186, i32* %1210, align 4
+ %1211 = getelementptr inbounds i8, i8* %1199, i64 176
+ %1212 = bitcast i8* %1211 to i8**
+ store i8* %1204, i8** %1212, align 8
+ %.repack1.i108 = getelementptr inbounds i8, i8* %1199, i64 184
+ %1213 = bitcast i8* %.repack1.i108 to i8**
+ store i8* %1209, i8** %1213, align 8
+ %1214 = call i8* @GC_malloc(i64 56)
+ %1215 = bitcast i8* %1214 to i32*
+ %1216 = getelementptr inbounds i8, i8* %1214, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1216, i8 0, i64 36, i1 false)
+ store i32 63, i32* %1215, align 4
+ %1217 = getelementptr inbounds i8, i8* %1214, i64 8
+ %.repack.i.i.i12.i109 = getelementptr inbounds i8, i8* %1214, i64 40
+ %1218 = getelementptr inbounds i8, i8* %1214, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1217, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i12.i109, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1218, align 1
+ %1219 = call i8* @GC_malloc_atomic(i64 4)
+ %1220 = bitcast i8* %1219 to i32*
+ store i32 186, i32* %1220, align 4
+ %1221 = getelementptr inbounds i8, i8* %1199, i64 192
+ %1222 = bitcast i8* %1221 to i8**
+ store i8* %1214, i8** %1222, align 8
+ %.repack4.i110 = getelementptr inbounds i8, i8* %1199, i64 200
+ %1223 = bitcast i8* %.repack4.i110 to i8**
+ store i8* %1219, i8** %1223, align 8
+ %1224 = call i8* @GC_malloc(i64 56)
+ %1225 = bitcast i8* %1224 to i32*
+ %1226 = getelementptr inbounds i8, i8* %1224, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1226, i8 0, i64 36, i1 false)
+ store i32 64, i32* %1225, align 4
+ %1227 = getelementptr inbounds i8, i8* %1224, i64 8
+ %.repack.i.i.i15.i111 = getelementptr inbounds i8, i8* %1224, i64 40
+ %1228 = getelementptr inbounds i8, i8* %1224, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1227, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i15.i111, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1228, align 1
+ %1229 = call i8* @GC_malloc_atomic(i64 4)
+ %1230 = bitcast i8* %1229 to i32*
+ store i32 186, i32* %1230, align 4
+ %1231 = getelementptr inbounds i8, i8* %1199, i64 208
+ %1232 = bitcast i8* %1231 to i8**
+ store i8* %1224, i8** %1232, align 8
+ %.repack7.i112 = getelementptr inbounds i8, i8* %1199, i64 216
+ %1233 = bitcast i8* %.repack7.i112 to i8**
+ store i8* %1229, i8** %1233, align 8
+ %1234 = call i8* @GC_malloc(i64 56)
+ %1235 = bitcast i8* %1234 to i32*
+ %1236 = getelementptr inbounds i8, i8* %1234, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %1236, i8 0, i64 36, i1 false)
+ store i32 64, i32* %1235, align 4
+ %1237 = getelementptr inbounds i8, i8* %1234, i64 8
+ %.repack.i.i.i18.i113 = getelementptr inbounds i8, i8* %1234, i64 40
+ %1238 = getelementptr inbounds i8, i8* %1234, i64 32
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1237, i8 0, i64 24, i1 false) #21
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %.repack.i.i.i18.i113, i8 0, i64 16, i1 false) #21
+ store i8 1, i8* %1238, align 1
+ %1239 = call i8* @GC_malloc_atomic(i64 4)
+ %1240 = bitcast i8* %1239 to i32*
+ store i32 186, i32* %1240, align 4
+ %1241 = getelementptr inbounds i8, i8* %1199, i64 224
+ %1242 = bitcast i8* %1241 to i8**
+ store i8* %1234, i8** %1242, align 8
+ %.repack10.i114 = getelementptr inbounds i8, i8* %1199, i64 232
+ %1243 = bitcast i8* %.repack10.i114 to i8**
+ store i8* %1239, i8** %1243, align 8
+ %1244 = bitcast i8* %1199 to i32*
+ store i32 155, i32* %1244, align 4
+ %1245 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %1245)
+ %1246 = bitcast %"struct.LibC::Addrinfo"** %3 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1246)
+ %1247 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 112, i8* nonnull %1247)
+ %1248 = call fastcc %String* @"*URI::Punycode::to_ascii<String>:String"()
+ %.fca.7.insert.fca.0.gep.i.i.i361 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i32*
%.fca.7.insert.fca.2.gep.i.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 2
%.fca.7.insert.fca.3.gep.i.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 3
%.fca.7.insert.fca.5.gep.i.i.i = getelementptr inbounds %"struct.LibC::Addrinfo", %"struct.LibC::Addrinfo"* %hints.i.i.i, i64 0, i32 5
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %1204, i8 0, i64 20, i1 false)
- %1208 = bitcast %"struct.LibC::Sockaddr"** %.fca.7.insert.fca.5.gep.i.i.i to i8*
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1208, i8 0, i64 24, i1 false)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %1245, i8 0, i64 20, i1 false)
+ %1249 = bitcast %"struct.LibC::Sockaddr"** %.fca.7.insert.fca.5.gep.i.i.i to i8*
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(24) %1249, i8 0, i64 24, i1 false)
store i32 1, i32* %.fca.7.insert.fca.2.gep.i.i.i, align 8
store i32 6, i32* %.fca.7.insert.fca.3.gep.i.i.i, align 4
- store i32 1024, i32* %.fca.7.insert.fca.0.gep.i.i.i337, align 8
- %1209 = getelementptr inbounds %String, %String* %1207, i64 0, i32 3
- %1210 = call fastcc %String* @"*Int32@Int#to_s:String"(i32 8081)
- %1211 = getelementptr inbounds %String, %String* %1210, i64 0, i32 3
- %1212 = call i32 @getaddrinfo(i8* nonnull %1209, i8* nonnull %1211, %"struct.LibC::Addrinfo"* nonnull %hints.i.i.i, %"struct.LibC::Addrinfo"** nonnull %3)
- switch i32 %1212, label %else17.i.i.i [
+ store i32 1024, i32* %.fca.7.insert.fca.0.gep.i.i.i361, align 8
+ %1250 = getelementptr inbounds %String, %String* %1248, i64 0, i32 3
+ %1251 = call fastcc %String* @"*Int32@Int#to_s:String"(i32 8081)
+ %1252 = getelementptr inbounds %String, %String* %1251, i64 0, i32 3
+ %1253 = call i32 @getaddrinfo(i8* nonnull %1250, i8* nonnull %1252, %"struct.LibC::Addrinfo"* nonnull %hints.i.i.i, %"struct.LibC::Addrinfo"** nonnull %3)
+ switch i32 %1253, label %else17.i.i.i [
i32 0, label %exit15.i.i.i
i32 -11, label %then16.i.i.i
]
exit15.i.i.i: ; preds = %"*TCPServer::new<String, Int32>:TCPServer.exit"
- %1213 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
- %1214 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* %1213)
+ %1254 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
+ %1255 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* %1254)
to label %exit15.invoke_out_crit_edge.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
exit15.invoke_out_crit_edge.i.i.i: ; preds = %exit15.i.i.i
- %1215 = getelementptr inbounds %"Socket::Addrinfo", %"Socket::Addrinfo"* %10, i64 0, i32 4
- %.repack12.i.i.i90 = getelementptr inbounds i8, i8* %1158, i64 264
- %.repack18.i.i.i91 = getelementptr inbounds i8, i8* %1158, i64 320
- br label %while.i.i.i94
+ %1256 = getelementptr inbounds %"Socket::Addrinfo", %"Socket::Addrinfo"* %10, i64 0, i32 4
+ %.repack12.i.i.i115 = getelementptr inbounds i8, i8* %1199, i64 264
+ %.repack18.i.i.i116 = getelementptr inbounds i8, i8* %1199, i64 320
+ br label %while.i.i.i119
then16.i.i.i: ; preds = %"*TCPServer::new<String, Int32>:TCPServer.exit"
- %1216 = call fastcc i32 @"*Errno::value:Errno"()
- %1217 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain<Nil, Errno, String>:Socket::Addrinfo::Error"(i32 %1216, %String* %1207)
- call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1217)
+ %1257 = call fastcc i32 @"*Errno::value:Errno"()
+ %1258 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain<Nil, Errno, String>:Socket::Addrinfo::Error"(i32 %1257, %String* %1248)
+ call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1258)
unreachable
else17.i.i.i: ; preds = %"*TCPServer::new<String, Int32>:TCPServer.exit"
- %1218 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain:type:protocol:service<Nil, Errno, String, Socket::Type, Socket::Protocol, Int32>:Socket::Addrinfo::Error"(i32 %1212, %String* %1207)
- call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1218)
+ %1259 = call fastcc %"Socket::Addrinfo::Error"* @"*Socket::Addrinfo::Error@SystemError::ClassMethods::from_os_error:domain:type:protocol:service<Nil, Errno, String, Socket::Type, Socket::Protocol, Int32>:Socket::Addrinfo::Error"(i32 %1253, %String* %1248)
+ call fastcc void @"*raise<Socket::Addrinfo::Error>:NoReturn"(%"Socket::Addrinfo::Error"* %1259)
unreachable
-rescue.loopexit.i.i.i: ; preds = %then.i56.i.i.i, %"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i", %while.i.i.i94
- %lpad.loopexit100.i.i.i = landingpad %landing_pad
+rescue.loopexit.i.i.i: ; preds = %then.i54.i.i.i, %"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i", %while.i.i.i119
+ %lpad.loopexit87.i.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i.i92
+ br label %rescue.i.i.i117
-rescue.loopexit.split-lp.i.i.i: ; preds = %invoke_out74.i.i.i, %invoke_out73.i.i.i, %else72.i.i.i, %.noexc6.i.i, %.noexc5.i.i, %.noexc4.i.i, %.noexc3.i.i, %.noexc2.i.i, %.noexc1.i.i, %.noexc.i.i102, %then71.i.i.i, %rescue21.i.i.i, %.noexc25.i.i.i, %then.i.i.i.i.i96, %exit15.i.i.i
- %lpad.loopexit.split-lp101.i.i.i = landingpad %landing_pad
+rescue.loopexit.split-lp.i.i.i: ; preds = %invoke_out74.i.i.i, %invoke_out73.i.i.i, %else72.i.i.i, %.noexc6.i.i, %.noexc5.i.i, %.noexc4.i.i, %.noexc3.i.i, %.noexc2.i.i, %.noexc1.i.i, %.noexc.i.i127, %then71.i.i.i, %rescue21.i.i.i, %.noexc25.i.i.i, %then.i.i.i.i.i121, %exit15.i.i.i
+ %lpad.loopexit.split-lp88.i.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i.i92
+ br label %rescue.i.i.i117
-rescue.i.i.i92: ; preds = %rescue.loopexit.split-lp.i.i.i, %rescue.loopexit.i.i.i
- %lpad.phi102.i.i.i = phi %landing_pad [ %lpad.loopexit100.i.i.i, %rescue.loopexit.i.i.i ], [ %lpad.loopexit.split-lp101.i.i.i, %rescue.loopexit.split-lp.i.i.i ]
- %1219 = extractvalue %landing_pad %lpad.phi102.i.i.i, 0
- %1220 = bitcast i8* %1219 to %"struct.LibUnwind::Exception"*
- %1221 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
- call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1221)
- call void @__crystal_raise(%"struct.LibUnwind::Exception"* %1220)
+rescue.i.i.i117: ; preds = %rescue.loopexit.split-lp.i.i.i, %rescue.loopexit.i.i.i
+ %lpad.phi89.i.i.i = phi %landing_pad [ %lpad.loopexit87.i.i.i, %rescue.loopexit.i.i.i ], [ %lpad.loopexit.split-lp88.i.i.i, %rescue.loopexit.split-lp.i.i.i ]
+ %1260 = extractvalue %landing_pad %lpad.phi89.i.i.i, 0
+ %1261 = bitcast i8* %1260 to %"struct.LibUnwind::Exception"*
+ %1262 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
+ call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1262)
+ call void @__crystal_raise(%"struct.LibUnwind::Exception"* %1261)
unreachable
-while.i.i.i94: ; preds = %then.i56.i.i.i, %exit15.invoke_out_crit_edge.i.i.i
- %.pn.i.i.i93 = phi { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } [ %1214, %exit15.invoke_out_crit_edge.i.i.i ], [ %1434, %then.i56.i.i.i ]
- %newret904.pn.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 6
- %newret900.pn.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 4
+while.i.i.i119: ; preds = %then.i54.i.i.i, %exit15.invoke_out_crit_edge.i.i.i
+ %.pn.i.i.i118 = phi { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } [ %1255, %exit15.invoke_out_crit_edge.i.i.i ], [ %1470, %then.i54.i.i.i ]
+ %newret904.pn.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 6
+ %newret900.pn.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 4
%addrinfo6.sroa.33.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 3, 0, 0, 2
%addrinfo6.sroa.26.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 3, 0, 0, 0
%addrinfo6.sroa.20.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 1
%addrinfo6.sroa.16.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 0
- %addrinfo6.sroa.9.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 2
- %addrinfo6.sroa.2.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 0
+ %addrinfo6.sroa.9.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 2
+ %addrinfo6.sroa.2.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 0
%addrinfo6.sroa.37.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 3, 0, 0, 3
%addrinfo6.sroa.30.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 3, 0, 0, 1
%addrinfo6.sroa.23.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 2
- %addrinfo6.sroa.13.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 3
- %addrinfo6.sroa.679.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 1
+ %addrinfo6.sroa.13.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 3
+ %addrinfo6.sroa.666.0.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 1
%addrinfo6.sroa.52.sroa.1.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 1, 0
%addrinfo6.sroa.72.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 1, 5
%addrinfo6.sroa.68.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 1, 4
@@ -4489,565 +4572,531 @@ while.i.i.i94: ; preds = %then.i56.i.i.i, %ex
%addrinfo6.sroa.60.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 1, 2
%addrinfo6.sroa.56.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 1, 1
%addrinfo6.sroa.48.0.i.i.i = extractvalue %"(Socket::IPAddress | Nil)" %newret904.pn.i.i.i, 0
- %addrinfo6.sroa.4480.0.in.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i93, 5
+ %addrinfo6.sroa.4467.0.in.i.i.i = extractvalue { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } %.pn.i.i.i118, 5
%addrinfo6.sroa.40.0.i.i.i = extractvalue %"struct.LibC::SockaddrIn6" %newret900.pn.i.i.i, 4
- %1222 = zext i16 %addrinfo6.sroa.2.0.i.i.i to i32
- %1223 = invoke i32 @socket(i32 %1222, i32 %addrinfo6.sroa.679.0.i.i.i, i32 %addrinfo6.sroa.9.0.i.i.i)
- to label %.noexc.i.i.i95 unwind label %rescue.loopexit.i.i.i
+ %1263 = zext i16 %addrinfo6.sroa.2.0.i.i.i to i32
+ %1264 = invoke i32 @socket(i32 %1263, i32 %addrinfo6.sroa.666.0.i.i.i, i32 %addrinfo6.sroa.9.0.i.i.i)
+ to label %.noexc.i.i.i120 unwind label %rescue.loopexit.i.i.i
-.noexc.i.i.i95: ; preds = %while.i.i.i94
- %1224 = icmp eq i32 %1223, -1
- br i1 %1224, label %then.i.i.i.i.i96, label %"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
+.noexc.i.i.i120: ; preds = %while.i.i.i119
+ %1265 = icmp eq i32 %1264, -1
+ br i1 %1265, label %then.i.i.i.i.i121, label %"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
-then.i.i.i.i.i96: ; preds = %.noexc.i.i.i95
- %1225 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'Failed to create so...'" to %String*))
+then.i.i.i.i.i121: ; preds = %.noexc.i.i.i120
+ %1266 = invoke fastcc i32* @"*Socket::Error@SystemError::ClassMethods::from_errno<String>:Socket::Error+"(%String* bitcast ({ i32, i32, i32, [24 x i8] }* @"'Failed to create so...'" to %String*))
to label %.noexc25.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
-.noexc25.i.i.i: ; preds = %then.i.i.i.i.i96
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1225)
+.noexc25.i.i.i: ; preds = %then.i.i.i.i.i121
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1266)
to label %.noexc26.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc26.i.i.i: ; preds = %.noexc25.i.i.i
unreachable
-"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i": ; preds = %.noexc.i.i.i95
- %1226 = bitcast i8* %1158 to %TCPSocket*
- invoke fastcc void @"*TCPSocket@Socket#initialize<Int32, Socket::Family, Socket::Type, Socket::Protocol, Bool>:(Int32 | Nil)"(%TCPSocket* nonnull %1226, i32 %1223, i16 %addrinfo6.sroa.2.0.i.i.i, i32 %addrinfo6.sroa.679.0.i.i.i, i32 %addrinfo6.sroa.9.0.i.i.i)
+"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i": ; preds = %.noexc.i.i.i120
+ %1267 = bitcast i8* %1199 to %TCPSocket*
+ invoke fastcc void @"*TCPSocket@Socket#initialize<Int32, Socket::Family, Socket::Type, Socket::Protocol, Bool>:(Int32 | Nil)"(%TCPSocket* nonnull %1267, i32 %1264, i16 %addrinfo6.sroa.2.0.i.i.i, i32 %addrinfo6.sroa.666.0.i.i.i, i32 %addrinfo6.sroa.9.0.i.i.i)
to label %invoke_out18.i.i.i unwind label %rescue.loopexit.i.i.i
invoke_out18.i.i.i: ; preds = %"*TCPSocket@Crystal::System::Socket#create_handle<Socket::Family, Socket::Type, Socket::Protocol, Bool>:Int32.exit.i.i.i.i"
- %1227 = bitcast %"Socket::Addrinfo"* %10 to i16*
- store i16 %addrinfo6.sroa.2.0.i.i.i, i16* %1227, align 8
- %1228 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr339 = getelementptr inbounds i8, i8* %1228, i64 4
- %1229 = bitcast i8* %sunkaddr339 to i32*
- store i32 %addrinfo6.sroa.679.0.i.i.i, i32* %1229, align 4
- %1230 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr340 = getelementptr inbounds i8, i8* %1230, i64 8
- %1231 = bitcast i8* %sunkaddr340 to i32*
- store i32 %addrinfo6.sroa.9.0.i.i.i, i32* %1231, align 8
- %1232 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr341 = getelementptr inbounds i8, i8* %1232, i64 12
- %1233 = bitcast i8* %sunkaddr341 to i32*
- store i32 %addrinfo6.sroa.13.0.i.i.i, i32* %1233, align 4
- %1234 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr342 = getelementptr inbounds i8, i8* %1234, i64 16
- %1235 = bitcast i8* %sunkaddr342 to i16*
- store i16 %addrinfo6.sroa.16.0.i.i.i, i16* %1235, align 8
- %1236 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr343 = getelementptr inbounds i8, i8* %1236, i64 18
- %1237 = bitcast i8* %sunkaddr343 to i16*
- store i16 %addrinfo6.sroa.20.0.i.i.i, i16* %1237, align 2
- %1238 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr344 = getelementptr inbounds i8, i8* %1238, i64 20
- %1239 = bitcast i8* %sunkaddr344 to i32*
- store i32 %addrinfo6.sroa.23.0.i.i.i, i32* %1239, align 4
- %1240 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr345 = getelementptr inbounds i8, i8* %1240, i64 24
- %1241 = bitcast i8* %sunkaddr345 to i32*
- store i32 %addrinfo6.sroa.26.0.i.i.i, i32* %1241, align 8
- %1242 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr346 = getelementptr inbounds i8, i8* %1242, i64 28
- %1243 = bitcast i8* %sunkaddr346 to i32*
- store i32 %addrinfo6.sroa.30.0.i.i.i, i32* %1243, align 4
- %1244 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr347 = getelementptr inbounds i8, i8* %1244, i64 32
- %1245 = bitcast i8* %sunkaddr347 to i32*
- store i32 %addrinfo6.sroa.33.0.i.i.i, i32* %1245, align 8
- %1246 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr348 = getelementptr inbounds i8, i8* %1246, i64 36
- %1247 = bitcast i8* %sunkaddr348 to i32*
- store i32 %addrinfo6.sroa.37.0.i.i.i, i32* %1247, align 4
- %1248 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr349 = getelementptr inbounds i8, i8* %1248, i64 40
- %1249 = bitcast i8* %sunkaddr349 to i32*
- store i32 %addrinfo6.sroa.40.0.i.i.i, i32* %1249, align 8
- %1250 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr350 = getelementptr inbounds i8, i8* %1250, i64 48
- %1251 = bitcast i8* %sunkaddr350 to %"struct.LibC::Addrinfo"**
- store %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4480.0.in.i.i.i, %"struct.LibC::Addrinfo"** %1251, align 8
- %1252 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr351 = getelementptr inbounds i8, i8* %1252, i64 56
- %1253 = bitcast i8* %sunkaddr351 to i32*
- store i32 %addrinfo6.sroa.48.0.i.i.i, i32* %1253, align 8
- %1254 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr352 = getelementptr inbounds i8, i8* %1254, i64 64
- %1255 = bitcast i8* %sunkaddr352 to i64*
- store i64 %addrinfo6.sroa.52.sroa.1.0.i.i.i, i64* %1255, align 8
- %1256 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr353 = getelementptr inbounds i8, i8* %1256, i64 72
- %1257 = bitcast i8* %sunkaddr353 to i64*
- store i64 %addrinfo6.sroa.56.0.i.i.i, i64* %1257, align 8
- %1258 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr354 = getelementptr inbounds i8, i8* %1258, i64 80
- %1259 = bitcast i8* %sunkaddr354 to i64*
- store i64 %addrinfo6.sroa.60.0.i.i.i, i64* %1259, align 8
- %1260 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr355 = getelementptr inbounds i8, i8* %1260, i64 88
- %1261 = bitcast i8* %sunkaddr355 to i64*
- store i64 %addrinfo6.sroa.64.0.i.i.i, i64* %1261, align 8
- %1262 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr356 = getelementptr inbounds i8, i8* %1262, i64 96
- %1263 = bitcast i8* %sunkaddr356 to i64*
- store i64 %addrinfo6.sroa.68.0.i.i.i, i64* %1263, align 8
- %1264 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr357 = getelementptr inbounds i8, i8* %1264, i64 104
- %1265 = bitcast i8* %sunkaddr357 to i64*
- store i64 %addrinfo6.sroa.72.0.i.i.i, i64* %1265, align 8
+ %1268 = bitcast %"Socket::Addrinfo"* %10 to i16*
+ store i16 %addrinfo6.sroa.2.0.i.i.i, i16* %1268, align 8
+ %1269 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr363 = getelementptr inbounds i8, i8* %1269, i64 4
+ %1270 = bitcast i8* %sunkaddr363 to i32*
+ store i32 %addrinfo6.sroa.666.0.i.i.i, i32* %1270, align 4
+ %1271 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr364 = getelementptr inbounds i8, i8* %1271, i64 8
+ %1272 = bitcast i8* %sunkaddr364 to i32*
+ store i32 %addrinfo6.sroa.9.0.i.i.i, i32* %1272, align 8
+ %1273 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr365 = getelementptr inbounds i8, i8* %1273, i64 12
+ %1274 = bitcast i8* %sunkaddr365 to i32*
+ store i32 %addrinfo6.sroa.13.0.i.i.i, i32* %1274, align 4
+ %1275 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr366 = getelementptr inbounds i8, i8* %1275, i64 16
+ %1276 = bitcast i8* %sunkaddr366 to i16*
+ store i16 %addrinfo6.sroa.16.0.i.i.i, i16* %1276, align 8
+ %1277 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr367 = getelementptr inbounds i8, i8* %1277, i64 18
+ %1278 = bitcast i8* %sunkaddr367 to i16*
+ store i16 %addrinfo6.sroa.20.0.i.i.i, i16* %1278, align 2
+ %1279 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr368 = getelementptr inbounds i8, i8* %1279, i64 20
+ %1280 = bitcast i8* %sunkaddr368 to i32*
+ store i32 %addrinfo6.sroa.23.0.i.i.i, i32* %1280, align 4
+ %1281 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr369 = getelementptr inbounds i8, i8* %1281, i64 24
+ %1282 = bitcast i8* %sunkaddr369 to i32*
+ store i32 %addrinfo6.sroa.26.0.i.i.i, i32* %1282, align 8
+ %1283 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr370 = getelementptr inbounds i8, i8* %1283, i64 28
+ %1284 = bitcast i8* %sunkaddr370 to i32*
+ store i32 %addrinfo6.sroa.30.0.i.i.i, i32* %1284, align 4
+ %1285 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr371 = getelementptr inbounds i8, i8* %1285, i64 32
+ %1286 = bitcast i8* %sunkaddr371 to i32*
+ store i32 %addrinfo6.sroa.33.0.i.i.i, i32* %1286, align 8
+ %1287 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr372 = getelementptr inbounds i8, i8* %1287, i64 36
+ %1288 = bitcast i8* %sunkaddr372 to i32*
+ store i32 %addrinfo6.sroa.37.0.i.i.i, i32* %1288, align 4
+ %1289 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr373 = getelementptr inbounds i8, i8* %1289, i64 40
+ %1290 = bitcast i8* %sunkaddr373 to i32*
+ store i32 %addrinfo6.sroa.40.0.i.i.i, i32* %1290, align 8
+ %1291 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr374 = getelementptr inbounds i8, i8* %1291, i64 48
+ %1292 = bitcast i8* %sunkaddr374 to %"struct.LibC::Addrinfo"**
+ store %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4467.0.in.i.i.i, %"struct.LibC::Addrinfo"** %1292, align 8
+ %1293 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr375 = getelementptr inbounds i8, i8* %1293, i64 56
+ %1294 = bitcast i8* %sunkaddr375 to i32*
+ store i32 %addrinfo6.sroa.48.0.i.i.i, i32* %1294, align 8
+ %1295 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr376 = getelementptr inbounds i8, i8* %1295, i64 64
+ %1296 = bitcast i8* %sunkaddr376 to i64*
+ store i64 %addrinfo6.sroa.52.sroa.1.0.i.i.i, i64* %1296, align 8
+ %1297 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr377 = getelementptr inbounds i8, i8* %1297, i64 72
+ %1298 = bitcast i8* %sunkaddr377 to i64*
+ store i64 %addrinfo6.sroa.56.0.i.i.i, i64* %1298, align 8
+ %1299 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr378 = getelementptr inbounds i8, i8* %1299, i64 80
+ %1300 = bitcast i8* %sunkaddr378 to i64*
+ store i64 %addrinfo6.sroa.60.0.i.i.i, i64* %1300, align 8
+ %1301 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr379 = getelementptr inbounds i8, i8* %1301, i64 88
+ %1302 = bitcast i8* %sunkaddr379 to i64*
+ store i64 %addrinfo6.sroa.64.0.i.i.i, i64* %1302, align 8
+ %1303 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr380 = getelementptr inbounds i8, i8* %1303, i64 96
+ %1304 = bitcast i8* %sunkaddr380 to i64*
+ store i64 %addrinfo6.sroa.68.0.i.i.i, i64* %1304, align 8
+ %1305 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr381 = getelementptr inbounds i8, i8* %1305, i64 104
+ %1306 = bitcast i8* %sunkaddr381 to i64*
+ store i64 %addrinfo6.sroa.72.0.i.i.i, i64* %1306, align 8
br label %invoke_out31.i.i.i
-rescue21.loopexit.i.i.i: ; preds = %invoke_out53.i.i.i, %exit5.i.i.i.i, %invoke_out52.i.i.i, %invoke_out51.i.i.i, %.noexc66.i.i.i, %.noexc65.i.i.i, %.noexc64.i.i.i, %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i", %exit49.i.i.i, %then35.i.i.i
+rescue21.loopexit.i.i.i: ; preds = %invoke_out53.i.i.i, %exit5.i.i.i.i, %invoke_out52.i.i.i, %invoke_out51.i.i.i, %.noexc39.i.i.i, %.noexc38.i.i.i, %.noexc37.i.i.i, %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i.i", %exit49.i.i.i, %then35.i.i.i
%lpad.loopexit.i.i.i = landingpad %landing_pad
cleanup
br label %rescue21.i.i.i
rescue21.loopexit.split-lp.loopexit.i.i.i: ; preds = %invoke_out60.i.i.i, %then55.i.i.i, %else2.i.i.i.i.i.i, %then1.i.i.i.i.i.i, %then.i.i.i.i.i.i, %.noexc30.i.i.i, %.noexc29.i.i.i, %.noexc28.i.i.i, %else36.i.i.i
- %lpad.loopexit103.i.i.i = landingpad %landing_pad
+ %lpad.loopexit90.i.i.i = landingpad %landing_pad
cleanup
br label %rescue21.i.i.i
-rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i: ; preds = %.noexc52.i.i.i, %then.i50.i.i.i, %rescue.i.i.i.i101, %current_def.i.i.i.i.i.i, %rescue42.i.i.i
- %lpad.loopexit.split-lp104.i.i.i = landingpad %landing_pad
+rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i: ; preds = %.noexc50.i.i.i, %then.i48.i.i.i, %rescue.i.i.i.i124, %current_def.i.i.i.i.i.i.i, %rescue42.i.i.i
+ %lpad.loopexit.split-lp91.i.i.i = landingpad %landing_pad
cleanup
br label %rescue21.i.i.i
rescue21.i.i.i: ; preds = %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i, %rescue21.loopexit.split-lp.loopexit.i.i.i, %rescue21.loopexit.i.i.i
- %lpad.phi.i.i.i = phi %landing_pad [ %lpad.loopexit.i.i.i, %rescue21.loopexit.i.i.i ], [ %lpad.loopexit103.i.i.i, %rescue21.loopexit.split-lp.loopexit.i.i.i ], [ %lpad.loopexit.split-lp104.i.i.i, %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i ]
- %1266 = extractvalue %landing_pad %lpad.phi.i.i.i, 0
- %1267 = bitcast i8* %1266 to %"struct.LibUnwind::Exception"*
- %sunkaddr358 = getelementptr inbounds i8, i8* %1158, i64 256
- %1268 = bitcast i8* %sunkaddr358 to i32*
- store i32 0, i32* %1268, align 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i90, i8 0, i64 52, i1 false)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i91, i8 0, i64 48, i1 false)
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* nonnull %1267)
+ %lpad.phi.i.i.i = phi %landing_pad [ %lpad.loopexit.i.i.i, %rescue21.loopexit.i.i.i ], [ %lpad.loopexit90.i.i.i, %rescue21.loopexit.split-lp.loopexit.i.i.i ], [ %lpad.loopexit.split-lp91.i.i.i, %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i ]
+ %1307 = extractvalue %landing_pad %lpad.phi.i.i.i, 0
+ %1308 = bitcast i8* %1307 to %"struct.LibUnwind::Exception"*
+ %sunkaddr382 = getelementptr inbounds i8, i8* %1199, i64 256
+ %1309 = bitcast i8* %sunkaddr382 to i32*
+ store i32 0, i32* %1309, align 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i115, i8 0, i64 52, i1 false)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i116, i8 0, i64 48, i1 false)
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* nonnull %1308)
to label %invoke_out63.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
else30.i.i.i: ; preds = %invoke_out31.i.i.i
- %1269 = call i32* @__errno_location()
- %1270 = load i32, i32* %1269, align 4
- %1271 = icmp eq i32 %1270, 106
- br i1 %1271, label %exit62.i.thread.i.i, label %else34.i.i.i
+ %1310 = call i32* @__errno_location()
+ %1311 = load i32, i32* %1310, align 4
+ %1312 = icmp eq i32 %1311, 106
+ br i1 %1312, label %exit62.i.thread.i.i, label %else34.i.i.i
invoke_out31.i.i.i: ; preds = %else56.i.i.i, %invoke_out18.i.i.i
- %1272 = bitcast %"struct.LibC::SockaddrIn6"* %1215 to %"struct.LibC::Sockaddr"*
- %sunkaddr359 = getelementptr inbounds i8, i8* %1158, i64 240
- %1273 = bitcast i8* %sunkaddr359 to i32*
- %1274 = load atomic volatile i32, i32* %1273 seq_cst, align 4
- %1275 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %sunkaddr360 = getelementptr inbounds i8, i8* %1275, i64 12
- %1276 = bitcast i8* %sunkaddr360 to i32*
- %1277 = load i32, i32* %1276, align 4
- %1278 = call i32 @connect(i32 %1274, %"struct.LibC::Sockaddr"* nonnull %1272, i32 %1277)
- %1279 = icmp eq i32 %1278, 0
- br i1 %1279, label %exit62.i.thread.i.i, label %else30.i.i.i
+ %1313 = bitcast %"struct.LibC::SockaddrIn6"* %1256 to %"struct.LibC::Sockaddr"*
+ %sunkaddr383 = getelementptr inbounds i8, i8* %1199, i64 240
+ %1314 = bitcast i8* %sunkaddr383 to i32*
+ %1315 = load atomic volatile i32, i32* %1314 seq_cst, align 4
+ %1316 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %sunkaddr384 = getelementptr inbounds i8, i8* %1316, i64 12
+ %1317 = bitcast i8* %sunkaddr384 to i32*
+ %1318 = load i32, i32* %1317, align 4
+ %1319 = call i32 @connect(i32 %1315, %"struct.LibC::Sockaddr"* nonnull %1313, i32 %1318)
+ %1320 = icmp eq i32 %1319, 0
+ br i1 %1320, label %exit62.i.thread.i.i, label %else30.i.i.i
else34.i.i.i: ; preds = %else30.i.i.i
- %1280 = and i32 %1270, -2
- %1281 = icmp eq i32 %1280, 114
- br i1 %1281, label %then35.i.i.i, label %else36.i.i.i
+ %1321 = and i32 %1311, -2
+ %1322 = icmp eq i32 %1321, 114
+ br i1 %1322, label %then35.i.i.i, label %else36.i.i.i
then35.i.i.i: ; preds = %else34.i.i.i
- %1282 = invoke fastcc %Thread* @"*Thread::current:Thread"()
+ %1323 = invoke fastcc %Thread* @"*Thread::current:Thread"()
to label %invoke_out41.i.i.i unwind label %rescue21.loopexit.i.i.i
else36.i.i.i: ; preds = %else34.i.i.i
- %1283 = invoke i32* @__errno_location()
+ %1324 = invoke i32* @__errno_location()
to label %.noexc28.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc28.i.i.i: ; preds = %else36.i.i.i
- %1284 = load i32, i32* %1283, align 4
- %1285 = invoke i8* @strerror(i32 %1284)
+ %1325 = load i32, i32* %1324, align 4
+ %1326 = invoke i8* @strerror(i32 %1325)
to label %.noexc29.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc29.i.i.i: ; preds = %.noexc28.i.i.i
- %1286 = invoke fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %1285)
+ %1327 = invoke fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %1326)
to label %.noexc30.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc30.i.i.i: ; preds = %.noexc29.i.i.i
- %1287 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'connect'" to %String*), %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %1286)
+ %1328 = invoke fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'connect'" to %String*), %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %1327)
to label %.noexc31.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc31.i.i.i: ; preds = %.noexc30.i.i.i
- switch i32 %1284, label %else2.i.i.i.i.i.i [
+ switch i32 %1325, label %else2.i.i.i.i.i.i [
i32 111, label %then.i.i.i.i.i.i
i32 98, label %then1.i.i.i.i.i.i
]
then.i.i.i.i.i.i: ; preds = %.noexc31.i.i.i
- %1288 = invoke i8* @GC_malloc(i64 64)
+ %1329 = invoke i8* @GC_malloc(i64 64)
to label %.noexc32.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc32.i.i.i: ; preds = %then.i.i.i.i.i.i
- %1289 = getelementptr inbounds i8, i8* %1288, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1289, i8 0, i64 60, i1 false)
- %1290 = bitcast i8* %1288 to i32*
- store i32 86, i32* %1290, align 4
+ %1330 = getelementptr inbounds i8, i8* %1329, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1330, i8 0, i64 60, i1 false)
+ %1331 = bitcast i8* %1329 to i32*
+ store i32 86, i32* %1331, align 4
br label %invoke_out60.i.i.i
then1.i.i.i.i.i.i: ; preds = %.noexc31.i.i.i
- %1291 = invoke i8* @GC_malloc(i64 64)
+ %1332 = invoke i8* @GC_malloc(i64 64)
to label %.noexc33.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc33.i.i.i: ; preds = %then1.i.i.i.i.i.i
- %1292 = getelementptr inbounds i8, i8* %1291, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1292, i8 0, i64 60, i1 false)
- %1293 = bitcast i8* %1291 to i32*
- store i32 87, i32* %1293, align 4
+ %1333 = getelementptr inbounds i8, i8* %1332, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1333, i8 0, i64 60, i1 false)
+ %1334 = bitcast i8* %1332 to i32*
+ store i32 87, i32* %1334, align 4
br label %invoke_out60.i.i.i
else2.i.i.i.i.i.i: ; preds = %.noexc31.i.i.i
- %1294 = invoke i8* @GC_malloc(i64 64)
+ %1335 = invoke i8* @GC_malloc(i64 64)
to label %.noexc34.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
.noexc34.i.i.i: ; preds = %else2.i.i.i.i.i.i
- %1295 = getelementptr inbounds i8, i8* %1294, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1295, i8 0, i64 60, i1 false)
- %1296 = bitcast i8* %1294 to i32*
- store i32 86, i32* %1296, align 4
+ %1336 = getelementptr inbounds i8, i8* %1335, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1336, i8 0, i64 60, i1 false)
+ %1337 = bitcast i8* %1335 to i32*
+ store i32 86, i32* %1337, align 4
br label %invoke_out60.i.i.i
invoke_out41.i.i.i: ; preds = %then35.i.i.i
- %sunkaddr361 = getelementptr inbounds i8, i8* %1158, i64 192
- %1297 = bitcast i8* %sunkaddr361 to %"Hash(Thread, Deque(Fiber))"**
- %1298 = load %"Hash(Thread, Deque(Fiber))"*, %"Hash(Thread, Deque(Fiber))"** %1297, align 8
- %1299 = invoke fastcc { i32, [4 x i64] } @"*Hash(Thread, Deque(Fiber))@Hash(K, V)#find_entry_with_index<Thread>:(Tuple(Hash::Entry(Thread, Deque(Fiber)), Int32) | Nil)"(%"Hash(Thread, Deque(Fiber))"* %1298, %Thread* %1282)
+ %sunkaddr385 = getelementptr inbounds i8, i8* %1199, i64 192
+ %1338 = bitcast i8* %sunkaddr385 to %"Hash(Thread, Deque(Fiber))"**
+ %1339 = load %"Hash(Thread, Deque(Fiber))"*, %"Hash(Thread, Deque(Fiber))"** %1338, align 8
+ %1340 = invoke fastcc { i32, [3 x i64] } @"*Hash(Thread, Deque(Fiber))@Hash(K, V)#find_entry<Thread>:(Hash::Entry(Thread, Deque(Fiber)) | Nil)"(%"Hash(Thread, Deque(Fiber))"* %1339, %Thread* %1323)
to label %invoke_out44.i.i.i unwind label %rescue42.i.i.i
rescue42.i.i.i: ; preds = %else46.i.i.i, %invoke_out41.i.i.i
- %1300 = landingpad %landing_pad
+ %1341 = landingpad %landing_pad
cleanup
- %1301 = extractvalue %landing_pad %1300, 0
- %1302 = bitcast i8* %1301 to %"struct.LibUnwind::Exception"*
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* nonnull %1302)
+ %1342 = extractvalue %landing_pad %1341, 0
+ %1343 = bitcast i8* %1342 to %"struct.LibUnwind::Exception"*
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* nonnull %1343)
to label %invoke_out50.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
invoke_out44.i.i.i: ; preds = %invoke_out41.i.i.i
- %newret3.i.i.i.i = extractvalue { i32, [4 x i64] } %1299, 0
- %newret5.i.i.i.i = extractvalue { i32, [4 x i64] } %1299, 1
- %.not.i.i.i.i97 = icmp eq i32 %newret3.i.i.i.i, 0
- %.fca.1.0.extract.i.i.i.i = extractvalue [4 x i64] %newret5.i.i.i.i, 0
- %.fca.1.2.extract.i.i.i.i = extractvalue [4 x i64] %newret5.i.i.i.i, 2
- %.fca.1.1.extract.i.i.i.i = extractvalue [4 x i64] %newret5.i.i.i.i, 1
- %.sroa.28.8.insert.ext.i.i.i.i = and i64 %.fca.1.0.extract.i.i.i.i, 4294967295
- %.fca.1.0.insert4.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" { i32 837, [3 x i64] poison }, i64 %.sroa.28.8.insert.ext.i.i.i.i, 1, 0
- %.fca.1.1.insert5.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" %.fca.1.0.insert4.i.i.i.i, i64 %.fca.1.1.extract.i.i.i.i, 1, 1
- %.fca.1.2.insert6.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" %.fca.1.1.insert5.i.i.i.i, i64 %.fca.1.2.extract.i.i.i.i, 1, 2
- %common.ret.op.i.i.i.i = select i1 %.not.i.i.i.i97, %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" zeroinitializer, %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" %.fca.1.2.insert6.i.i.i.i
- %oldret.i35.i.i.i = extractvalue %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" %common.ret.op.i.i.i.i, 0
- %.not24.i.i.i = icmp eq i32 %oldret.i35.i.i.i, 0
+ %newret.i.i.i122 = extractvalue { i32, [3 x i64] } %1340, 0
+ %.not24.i.i.i = icmp eq i32 %newret.i.i.i122, 0
br i1 %.not24.i.i.i, label %else46.i.i.i, label %then45.i.i.i
then45.i.i.i: ; preds = %invoke_out44.i.i.i
- %oldret1.i37.i.i.i = extractvalue %"(Hash::Entry(Thread, Deque(Fiber)) | Nil)" %common.ret.op.i.i.i.i, 1
- %.fca.1.2.extract100.i.i.i = extractvalue [3 x i64] %oldret1.i37.i.i.i, 2
- %1303 = inttoptr i64 %.fca.1.2.extract100.i.i.i to %"Deque(Fiber)"*
+ %newret874.i.i.i = extractvalue { i32, [3 x i64] } %1340, 1
+ %.fca.1.2.extract100.i.i.i = extractvalue [3 x i64] %newret874.i.i.i, 2
+ %1344 = inttoptr i64 %.fca.1.2.extract100.i.i.i to %"Deque(Fiber)"*
br label %exit49.i.i.i
else46.i.i.i: ; preds = %invoke_out44.i.i.i
- %sunkaddr362 = getelementptr inbounds i8, i8* %1158, i64 192
- %1304 = bitcast i8* %sunkaddr362 to %"Hash(Thread, Deque(Fiber))"**
- %1305 = load %"Hash(Thread, Deque(Fiber))"*, %"Hash(Thread, Deque(Fiber))"** %1304, align 8
- %1306 = call i8* @GC_malloc(i64 24)
- %1307 = bitcast i8* %1306 to %"Deque(Fiber)"*
- %1308 = bitcast i8* %1306 to i32*
- %1309 = getelementptr inbounds i8, i8* %1306, i64 4
- %1310 = bitcast i8* %1309 to i32*
- store i32 0, i32* %1310, align 4
- store i32 206, i32* %1308, align 4
- %1311 = getelementptr inbounds i8, i8* %1306, i64 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1311, i8 0, i64 16, i1 false) #22
- invoke fastcc void @"*Hash(Thread, Deque(Fiber))@Hash(K, V)#upsert<Thread, Deque(Fiber)>:(Hash::Entry(Thread, Deque(Fiber)) | Nil)"(%"Hash(Thread, Deque(Fiber))"* %1305, %Thread* %1282, %"Deque(Fiber)"* nonnull %1307)
+ %sunkaddr386 = getelementptr inbounds i8, i8* %1199, i64 192
+ %1345 = bitcast i8* %sunkaddr386 to %"Hash(Thread, Deque(Fiber))"**
+ %1346 = load %"Hash(Thread, Deque(Fiber))"*, %"Hash(Thread, Deque(Fiber))"** %1345, align 8
+ %1347 = call i8* @GC_malloc(i64 24)
+ %1348 = bitcast i8* %1347 to %"Deque(Fiber)"*
+ %1349 = bitcast i8* %1347 to i32*
+ %1350 = getelementptr inbounds i8, i8* %1347, i64 4
+ %1351 = bitcast i8* %1350 to i32*
+ store i32 0, i32* %1351, align 4
+ store i32 206, i32* %1349, align 4
+ %1352 = getelementptr inbounds i8, i8* %1347, i64 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1352, i8 0, i64 16, i1 false) #21
+ %1353 = invoke fastcc %"Deque(Fiber)"* @"*Hash(Thread, Deque(Fiber))@Hash(K, V)#[]=<Thread, Deque(Fiber)>:Deque(Fiber)"(%"Hash(Thread, Deque(Fiber))"* %1346, %Thread* %1323, %"Deque(Fiber)"* nonnull %1348)
to label %exit49.i.i.i unwind label %rescue42.i.i.i
exit49.i.i.i: ; preds = %else46.i.i.i, %then45.i.i.i
- %1312 = phi %"Deque(Fiber)"* [ %1303, %then45.i.i.i ], [ %1307, %else46.i.i.i ]
- %1313 = invoke fastcc %Thread* @"*Thread::current:Thread"() #29
- to label %.noexc62.i.i.i unwind label %rescue21.loopexit.i.i.i
+ %1354 = phi %"Deque(Fiber)"* [ %1344, %then45.i.i.i ], [ %1348, %else46.i.i.i ]
+ %1355 = invoke fastcc %Thread* @"*Thread::current:Thread"()
+ to label %.noexc35.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc62.i.i.i: ; preds = %exit49.i.i.i
- %1314 = getelementptr inbounds %Thread, %Thread* %1313, i64 0, i32 9
- %1315 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %1314, align 8
- %.not.i.i61.i.i.i = icmp eq %"Crystal::Scheduler"* %1315, null
- br i1 %.not.i.i61.i.i.i, label %else.i.i.i.i.i, label %invoke_out51.i.i.i
+.noexc35.i.i.i: ; preds = %exit49.i.i.i
+ %1356 = getelementptr inbounds %Thread, %Thread* %1355, i64 0, i32 9
+ %1357 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %1356, align 8
+ %.not.i.i.i.i.i.i = icmp eq %"Crystal::Scheduler"* %1357, null
+ br i1 %.not.i.i.i.i.i.i, label %else.i.i.i.i.i.i, label %invoke_out51.i.i.i
-else.i.i.i.i.i: ; preds = %.noexc62.i.i.i
- %1316 = getelementptr inbounds %Thread, %Thread* %1313, i64 0, i32 4
- %1317 = load %Fiber*, %Fiber** %1316, align 8
- %1318 = icmp eq %Fiber* %1317, null
- br i1 %1318, label %current_def.i.i.i.i.i.i, label %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i"
+else.i.i.i.i.i.i: ; preds = %.noexc35.i.i.i
+ %self.idx.i.i.i.i.i.i = getelementptr %Thread, %Thread* %1355, i64 0, i32 4
+ %self.idx.val.i.i.i.i.i.i123 = load %Fiber*, %Fiber** %self.idx.i.i.i.i.i.i, align 8
+ %1358 = icmp eq %Fiber* %self.idx.val.i.i.i.i.i.i123, null
+ br i1 %1358, label %current_def.i.i.i.i.i.i.i, label %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i.i"
-current_def.i.i.i.i.i.i: ; preds = %else.i.i.i.i.i
- invoke fastcc void @"*Nil#not_nil!:NoReturn"() #29
- to label %.noexc63.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
+current_def.i.i.i.i.i.i.i: ; preds = %else.i.i.i.i.i.i
+ invoke fastcc void @"*Nil#not_nil!:NoReturn"()
+ to label %.noexc36.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
-.noexc63.i.i.i: ; preds = %current_def.i.i.i.i.i.i
+.noexc36.i.i.i: ; preds = %current_def.i.i.i.i.i.i.i
unreachable
-"*Thread#main_fiber:Fiber.exit.i.i.i.i.i": ; preds = %else.i.i.i.i.i
- %1319 = invoke i8* @GC_malloc(i64 56)
- to label %.noexc64.i.i.i unwind label %rescue21.loopexit.i.i.i
+"*Thread#main_fiber:Fiber.exit.i.i.i.i.i.i": ; preds = %else.i.i.i.i.i.i
+ %1359 = invoke i8* @GC_malloc(i64 56)
+ to label %.noexc37.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc64.i.i.i: ; preds = %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i"
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1319, i8 0, i64 56, i1 false)
- %1320 = invoke i8* @GC_malloc(i64 24)
- to label %.noexc65.i.i.i unwind label %rescue21.loopexit.i.i.i
+.noexc37.i.i.i: ; preds = %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i.i"
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1359, i8 0, i64 56, i1 false)
+ %1360 = invoke i8* @GC_malloc(i64 24)
+ to label %.noexc38.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc65.i.i.i: ; preds = %.noexc64.i.i.i
- %1321 = getelementptr inbounds i8, i8* %1320, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %1321, i8 0, i64 20, i1 false)
- %1322 = bitcast i8* %1320 to i32*
- store i32 202, i32* %1322, align 4
- %1323 = getelementptr inbounds i8, i8* %1319, i64 8
- %1324 = bitcast i8* %1323 to i8**
- store i8* %1320, i8** %1324, align 8
- %1325 = invoke i8* @GC_malloc_atomic(i64 4)
- to label %.noexc66.i.i.i unwind label %rescue21.loopexit.i.i.i
+.noexc38.i.i.i: ; preds = %.noexc37.i.i.i
+ %1361 = getelementptr inbounds i8, i8* %1360, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %1361, i8 0, i64 20, i1 false)
+ %1362 = bitcast i8* %1360 to i32*
+ store i32 202, i32* %1362, align 4
+ %1363 = getelementptr inbounds i8, i8* %1359, i64 8
+ %1364 = bitcast i8* %1363 to i8**
+ store i8* %1360, i8** %1364, align 8
+ %1365 = invoke i8* @GC_malloc_atomic(i64 4)
+ to label %.noexc39.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc66.i.i.i: ; preds = %.noexc65.i.i.i
- %1326 = bitcast i8* %1325 to i32*
- store i32 186, i32* %1326, align 4
- %1327 = getelementptr inbounds i8, i8* %1319, i64 16
- %1328 = bitcast i8* %1327 to i8**
- store i8* %1325, i8** %1328, align 8
- %1329 = getelementptr inbounds i8, i8* %1319, i64 24
- %1330 = bitcast i8* %1329 to i1*
- store i1 false, i1* %1330, align 1
- %1331 = bitcast i8* %1319 to i32*
- store i32 205, i32* %1331, align 4
- %1332 = getelementptr inbounds i8, i8* %1319, i64 32
- %1333 = bitcast i8* %1332 to %Fiber**
- store %Fiber* %1317, %Fiber** %1333, align 8
- %1334 = getelementptr inbounds i8, i8* %1319, i64 40
- %1335 = bitcast i8* %1334 to %Fiber**
- store %Fiber* %1317, %Fiber** %1335, align 8
- %1336 = invoke i8* @GC_malloc(i64 24)
- to label %.noexc67.i.i.i unwind label %rescue21.loopexit.i.i.i
+.noexc39.i.i.i: ; preds = %.noexc38.i.i.i
+ %1366 = bitcast i8* %1365 to i32*
+ store i32 186, i32* %1366, align 4
+ %1367 = getelementptr inbounds i8, i8* %1359, i64 16
+ %1368 = bitcast i8* %1367 to i8**
+ store i8* %1365, i8** %1368, align 8
+ %1369 = getelementptr inbounds i8, i8* %1359, i64 24
+ %1370 = bitcast i8* %1369 to i1*
+ store i1 false, i1* %1370, align 1
+ %1371 = bitcast i8* %1359 to i32*
+ store i32 205, i32* %1371, align 4
+ %1372 = getelementptr inbounds i8, i8* %1359, i64 32
+ %1373 = bitcast i8* %1372 to %Fiber**
+ store %Fiber* %self.idx.val.i.i.i.i.i.i123, %Fiber** %1373, align 8
+ %1374 = getelementptr inbounds i8, i8* %1359, i64 40
+ %1375 = bitcast i8* %1374 to %Fiber**
+ store %Fiber* %self.idx.val.i.i.i.i.i.i123, %Fiber** %1375, align 8
+ %1376 = invoke i8* @GC_malloc(i64 24)
+ to label %.noexc40.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc67.i.i.i: ; preds = %.noexc66.i.i.i
- %1337 = bitcast i8* %1319 to %"Crystal::Scheduler"*
- %1338 = bitcast i8* %1336 to i32*
- %1339 = getelementptr inbounds i8, i8* %1336, i64 4
- %1340 = bitcast i8* %1339 to i32*
- store i32 0, i32* %1340, align 4
- store i32 206, i32* %1338, align 4
- %1341 = getelementptr inbounds i8, i8* %1336, i64 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1341, i8 0, i64 16, i1 false) #22
- %1342 = getelementptr inbounds i8, i8* %1319, i64 48
- %1343 = bitcast i8* %1342 to i8**
- store i8* %1336, i8** %1343, align 8
- %1344 = bitcast %Thread* %1313 to i8*
- %sunkaddr363 = getelementptr inbounds i8, i8* %1344, i64 80
- %1345 = bitcast i8* %sunkaddr363 to i8**
- store i8* %1319, i8** %1345, align 8
+.noexc40.i.i.i: ; preds = %.noexc39.i.i.i
+ %1377 = bitcast i8* %1359 to %"Crystal::Scheduler"*
+ %1378 = bitcast i8* %1376 to i32*
+ %1379 = getelementptr inbounds i8, i8* %1376, i64 4
+ %1380 = bitcast i8* %1379 to i32*
+ store i32 0, i32* %1380, align 4
+ store i32 206, i32* %1378, align 4
+ %1381 = getelementptr inbounds i8, i8* %1376, i64 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1381, i8 0, i64 16, i1 false) #21
+ %1382 = getelementptr inbounds i8, i8* %1359, i64 48
+ %1383 = bitcast i8* %1382 to i8**
+ store i8* %1376, i8** %1383, align 8
+ %1384 = bitcast %Thread* %1355 to i8*
+ %sunkaddr387 = getelementptr inbounds i8, i8* %1384, i64 80
+ %1385 = bitcast i8* %sunkaddr387 to i8**
+ store i8* %1359, i8** %1385, align 8
br label %invoke_out51.i.i.i
invoke_out50.i.i.i: ; preds = %rescue42.i.i.i
unreachable
-invoke_out51.i.i.i: ; preds = %.noexc67.i.i.i, %.noexc62.i.i.i
- %1346 = phi %"Crystal::Scheduler"* [ %1337, %.noexc67.i.i.i ], [ %1315, %.noexc62.i.i.i ]
- %1347 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %1346, i64 0, i32 5
- %1348 = load %Fiber*, %Fiber** %1347, align 8
- invoke fastcc void @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %1312, %Fiber* %1348)
+invoke_out51.i.i.i: ; preds = %.noexc40.i.i.i, %.noexc35.i.i.i
+ %1386 = phi %"Crystal::Scheduler"* [ %1377, %.noexc40.i.i.i ], [ %1357, %.noexc35.i.i.i ]
+ %1387 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %1386, i64 0, i32 5
+ %1388 = load %Fiber*, %Fiber** %1387, align 8
+ invoke fastcc void @"*Deque(Fiber)@Deque(T)#push<Fiber>:Deque(Fiber)"(%"Deque(Fiber)"* %1354, %Fiber* %1388)
to label %invoke_out52.i.i.i unwind label %rescue21.loopexit.i.i.i
invoke_out52.i.i.i: ; preds = %invoke_out51.i.i.i
- %1349 = invoke fastcc %Thread* @"*Thread::current:Thread"()
- to label %.noexc47.i.i.i unwind label %rescue21.loopexit.i.i.i
+ %1389 = invoke fastcc %Thread* @"*Thread::current:Thread"()
+ to label %.noexc45.i.i.i unwind label %rescue21.loopexit.i.i.i
-.noexc47.i.i.i: ; preds = %invoke_out52.i.i.i
- %sunkaddr364 = getelementptr inbounds i8, i8* %1158, i64 224
- %1350 = bitcast i8* %sunkaddr364 to %"Hash(Thread, Crystal::EventLoop::Event+)"**
- %1351 = load %"Hash(Thread, Crystal::EventLoop::Event+)"*, %"Hash(Thread, Crystal::EventLoop::Event+)"** %1350, align 8
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %13)
- %1352 = invoke fastcc { i32, [5 x i64] } @"*Hash(Thread, Crystal::EventLoop::Event+)@Hash(K, V)#find_entry_with_index<Thread>:(Tuple(Hash::Entry(Thread, Crystal::EventLoop::Event+), Int32) | Nil)"(%"Hash(Thread, Crystal::EventLoop::Event+)"* %1351, %Thread* %1349)
- to label %.noexc.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
+.noexc45.i.i.i: ; preds = %invoke_out52.i.i.i
+ %sunkaddr388 = getelementptr inbounds i8, i8* %1199, i64 224
+ %1390 = bitcast i8* %sunkaddr388 to %"Hash(Thread, Crystal::EventLoop::Event+)"**
+ %1391 = load %"Hash(Thread, Crystal::EventLoop::Event+)"*, %"Hash(Thread, Crystal::EventLoop::Event+)"** %1390, align 8
+ %1392 = invoke fastcc { i32, [4 x i64] } @"*Hash(Thread, Crystal::EventLoop::Event+)@Hash(K, V)#find_entry<Thread>:(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)"(%"Hash(Thread, Crystal::EventLoop::Event+)"* %1391, %Thread* %1389)
+ to label %alloca.invoke_out_crit_edge.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc.i.i.i.i: ; preds = %.noexc47.i.i.i
- %newret3.i.i.i.i.i = extractvalue { i32, [5 x i64] } %1352, 0
- %newret5.i.i.i.i.i = extractvalue { i32, [5 x i64] } %1352, 1
- %.not.i.i.i.i.i98 = icmp eq i32 %newret3.i.i.i.i.i, 0
- br i1 %.not.i.i.i.i.i98, label %alloca.invoke_out_crit_edge.i.i.i.i, label %then.i.i43.i.i.i
+alloca.invoke_out_crit_edge.i.i.i.i: ; preds = %.noexc45.i.i.i
+ %newret31.i.i.i.i = extractvalue { i32, [4 x i64] } %1392, 1
+ %newret.i42.i.i.i = extractvalue { i32, [4 x i64] } %1392, 0
+ %.fca.1.2.extract.i.i.i.i = extractvalue [4 x i64] %newret31.i.i.i.i, 2
+ %.not.i.i.i.i = icmp eq i32 %newret.i42.i.i.i, 0
+ %1393 = inttoptr i64 %.fca.1.2.extract.i.i.i.i to i8*
+ br i1 %.not.i.i.i.i, label %else.i.i.i.i, label %exit5.i.i.i.i
-then.i.i43.i.i.i: ; preds = %.noexc.i.i.i.i
- %1353 = bitcast i8* %13 to i1*
- %.fca.1.3.extract.i.i.i.i.i = extractvalue [5 x i64] %newret5.i.i.i.i.i, 3
- %1354 = and i64 %.fca.1.3.extract.i.i.i.i.i, 1
- %1355 = icmp ne i64 %1354, 0
- %.fca.1.0.extract.i.i.i.i.i = extractvalue [5 x i64] %newret5.i.i.i.i.i, 0
- %.fca.1.2.extract.i.i.i.i.i = extractvalue [5 x i64] %newret5.i.i.i.i.i, 2
- %.fca.1.1.extract.i.i.i.i.i = extractvalue [5 x i64] %newret5.i.i.i.i.i, 1
- store i1 %1355, i1* %1353, align 8
- %.sroa.29.8.insert.ext.i.i.i.i.i = and i64 %.fca.1.0.extract.i.i.i.i.i, 4294967295
- %.fca.1.0.insert4.i.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" { i32 838, [4 x i64] poison }, i64 %.sroa.29.8.insert.ext.i.i.i.i.i, 1, 0
- %.fca.1.1.insert5.i.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" %.fca.1.0.insert4.i.i.i.i.i, i64 %.fca.1.1.extract.i.i.i.i.i, 1, 1
- %.fca.1.2.insert6.i.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" %.fca.1.1.insert5.i.i.i.i.i, i64 %.fca.1.2.extract.i.i.i.i.i, 1, 2
- %.sroa.813.i.i.i.i.i.0..sroa.813.i.i.i.i.i.0..sroa.813.i.i.i.i.0..sroa.813.i.i.i.i.0..sroa.813.i.i.i.0..sroa.813.i.i.i.0..sroa.813.i.i.0..sroa.813.i.i.0..sroa.813.i.0..sroa.813.i.0..sroa.813.0..sroa.813.0..sroa.813.0..sroa.813.32..fca.1.3.load.i.i.i.i.i = load i8, i8* %13, align 8
- %.sroa.813.32.insert.ext.i.i.i.i.i = zext i8 %.sroa.813.i.i.i.i.i.0..sroa.813.i.i.i.i.i.0..sroa.813.i.i.i.i.0..sroa.813.i.i.i.i.0..sroa.813.i.i.i.0..sroa.813.i.i.i.0..sroa.813.i.i.0..sroa.813.i.i.0..sroa.813.i.0..sroa.813.i.0..sroa.813.0..sroa.813.0..sroa.813.0..sroa.813.32..fca.1.3.load.i.i.i.i.i to i64
- %.fca.1.3.insert7.i.i.i.i.i = insertvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" %.fca.1.2.insert6.i.i.i.i.i, i64 %.sroa.813.32.insert.ext.i.i.i.i.i, 1, 3
- br label %alloca.invoke_out_crit_edge.i.i.i.i
-
-alloca.invoke_out_crit_edge.i.i.i.i: ; preds = %then.i.i43.i.i.i, %.noexc.i.i.i.i
- %common.ret.op.i.i.i.i.i99 = phi %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" [ %.fca.1.3.insert7.i.i.i.i.i, %then.i.i43.i.i.i ], [ zeroinitializer, %.noexc.i.i.i.i ]
- %oldret.i.i.i.i.i100 = extractvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" %common.ret.op.i.i.i.i.i99, 0
- %oldret1.i.i.i.i.i = extractvalue %"(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)" %common.ret.op.i.i.i.i.i99, 1
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %13)
- %.fca.1.2.extract.i44.i.i.i = extractvalue [4 x i64] %oldret1.i.i.i.i.i, 2
- %.not.i45.i.i.i = icmp eq i32 %oldret.i.i.i.i.i100, 0
- %1356 = inttoptr i64 %.fca.1.2.extract.i44.i.i.i to i8*
- br i1 %.not.i45.i.i.i, label %else.i.i.i.i, label %exit5.i.i.i.i
-
-rescue.i.loopexit.i.i.i: ; preds = %invoke_out3.i.i.i.i, %"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i", %then.i.i.i46.i.i.i, %.noexc76.i.i.i, %.noexc75.i.i.i, %.noexc74.i.i.i, %"*Thread#main_fiber:Fiber.exit.i.i71.i.i.i", %else.i.i.i.i, %.noexc47.i.i.i
- %lpad.loopexit97.i.i.i = landingpad %landing_pad
+rescue.i.loopexit.i.i.i: ; preds = %invoke_out3.i.i.i.i, %"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i", %then.i.i.i43.i.i.i, %.noexc63.i.i.i, %.noexc62.i.i.i, %.noexc61.i.i.i, %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i", %else.i.i.i.i, %.noexc45.i.i.i
+ %lpad.loopexit84.i.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i.i.i101
+ br label %rescue.i.i.i.i124
-rescue.i.loopexit.split-lp.i.i.i: ; preds = %current_def.i.i.i70.i.i.i
- %lpad.loopexit.split-lp98.i.i.i = landingpad %landing_pad
+rescue.i.loopexit.split-lp.i.i.i: ; preds = %current_def.i.i.i.i.i.i
+ %lpad.loopexit.split-lp85.i.i.i = landingpad %landing_pad
cleanup
- br label %rescue.i.i.i.i101
+ br label %rescue.i.i.i.i124
-rescue.i.i.i.i101: ; preds = %rescue.i.loopexit.split-lp.i.i.i, %rescue.i.loopexit.i.i.i
- %lpad.phi99.i.i.i = phi %landing_pad [ %lpad.loopexit97.i.i.i, %rescue.i.loopexit.i.i.i ], [ %lpad.loopexit.split-lp98.i.i.i, %rescue.i.loopexit.split-lp.i.i.i ]
- %1357 = extractvalue %landing_pad %lpad.phi99.i.i.i, 0
- %1358 = bitcast i8* %1357 to %"struct.LibUnwind::Exception"*
- invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1358)
- to label %.noexc48.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
+rescue.i.i.i.i124: ; preds = %rescue.i.loopexit.split-lp.i.i.i, %rescue.i.loopexit.i.i.i
+ %lpad.phi86.i.i.i = phi %landing_pad [ %lpad.loopexit84.i.i.i, %rescue.i.loopexit.i.i.i ], [ %lpad.loopexit.split-lp85.i.i.i, %rescue.i.loopexit.split-lp.i.i.i ]
+ %1394 = extractvalue %landing_pad %lpad.phi86.i.i.i, 0
+ %1395 = bitcast i8* %1394 to %"struct.LibUnwind::Exception"*
+ invoke void @__crystal_raise(%"struct.LibUnwind::Exception"* %1395)
+ to label %.noexc46.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
-.noexc48.i.i.i: ; preds = %rescue.i.i.i.i101
+.noexc46.i.i.i: ; preds = %rescue.i.i.i.i124
unreachable
else.i.i.i.i: ; preds = %alloca.invoke_out_crit_edge.i.i.i.i
- %sunkaddr365 = getelementptr inbounds i8, i8* %1158, i64 224
- %1359 = bitcast i8* %sunkaddr365 to %"Hash(Thread, Crystal::EventLoop::Event+)"**
- %1360 = load %"Hash(Thread, Crystal::EventLoop::Event+)"*, %"Hash(Thread, Crystal::EventLoop::Event+)"** %1359, align 8
- %1361 = invoke fastcc %Thread* @"*Thread::current:Thread"() #29
- to label %.noexc72.i.i.i unwind label %rescue.i.loopexit.i.i.i
+ %sunkaddr389 = getelementptr inbounds i8, i8* %1199, i64 224
+ %1396 = bitcast i8* %sunkaddr389 to %"Hash(Thread, Crystal::EventLoop::Event+)"**
+ %1397 = load %"Hash(Thread, Crystal::EventLoop::Event+)"*, %"Hash(Thread, Crystal::EventLoop::Event+)"** %1396, align 8
+ %1398 = invoke fastcc %Thread* @"*Thread::current:Thread"()
+ to label %.noexc59.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc72.i.i.i: ; preds = %else.i.i.i.i
- %1362 = getelementptr inbounds %Thread, %Thread* %1361, i64 0, i32 9
- %1363 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %1362, align 8
- %.not.i.i68.i.i.i = icmp eq %"Crystal::Scheduler"* %1363, null
- br i1 %.not.i.i68.i.i.i, label %else.i.i69.i.i.i, label %invoke_out2.i.i.i.i
+.noexc59.i.i.i: ; preds = %else.i.i.i.i
+ %1399 = getelementptr inbounds %Thread, %Thread* %1398, i64 0, i32 9
+ %1400 = load %"Crystal::Scheduler"*, %"Crystal::Scheduler"** %1399, align 8
+ %.not.i.i.i.i.i125 = icmp eq %"Crystal::Scheduler"* %1400, null
+ br i1 %.not.i.i.i.i.i125, label %else.i.i.i.i.i, label %invoke_out2.i.i.i.i
-else.i.i69.i.i.i: ; preds = %.noexc72.i.i.i
- %1364 = getelementptr inbounds %Thread, %Thread* %1361, i64 0, i32 4
- %1365 = load %Fiber*, %Fiber** %1364, align 8
- %1366 = icmp eq %Fiber* %1365, null
- br i1 %1366, label %current_def.i.i.i70.i.i.i, label %"*Thread#main_fiber:Fiber.exit.i.i71.i.i.i"
+else.i.i.i.i.i: ; preds = %.noexc59.i.i.i
+ %self.idx.i.i.i.i.i = getelementptr %Thread, %Thread* %1398, i64 0, i32 4
+ %self.idx.val.i.i.i.i.i126 = load %Fiber*, %Fiber** %self.idx.i.i.i.i.i, align 8
+ %1401 = icmp eq %Fiber* %self.idx.val.i.i.i.i.i126, null
+ br i1 %1401, label %current_def.i.i.i.i.i.i, label %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i"
-current_def.i.i.i70.i.i.i: ; preds = %else.i.i69.i.i.i
- invoke fastcc void @"*Nil#not_nil!:NoReturn"() #29
- to label %.noexc73.i.i.i unwind label %rescue.i.loopexit.split-lp.i.i.i
+current_def.i.i.i.i.i.i: ; preds = %else.i.i.i.i.i
+ invoke fastcc void @"*Nil#not_nil!:NoReturn"()
+ to label %.noexc60.i.i.i unwind label %rescue.i.loopexit.split-lp.i.i.i
-.noexc73.i.i.i: ; preds = %current_def.i.i.i70.i.i.i
+.noexc60.i.i.i: ; preds = %current_def.i.i.i.i.i.i
unreachable
-"*Thread#main_fiber:Fiber.exit.i.i71.i.i.i": ; preds = %else.i.i69.i.i.i
- %1367 = invoke i8* @GC_malloc(i64 56)
- to label %.noexc74.i.i.i unwind label %rescue.i.loopexit.i.i.i
+"*Thread#main_fiber:Fiber.exit.i.i.i.i.i": ; preds = %else.i.i.i.i.i
+ %1402 = invoke i8* @GC_malloc(i64 56)
+ to label %.noexc61.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc74.i.i.i: ; preds = %"*Thread#main_fiber:Fiber.exit.i.i71.i.i.i"
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1367, i8 0, i64 56, i1 false)
- %1368 = invoke i8* @GC_malloc(i64 24)
- to label %.noexc75.i.i.i unwind label %rescue.i.loopexit.i.i.i
+.noexc61.i.i.i: ; preds = %"*Thread#main_fiber:Fiber.exit.i.i.i.i.i"
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1402, i8 0, i64 56, i1 false)
+ %1403 = invoke i8* @GC_malloc(i64 24)
+ to label %.noexc62.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc75.i.i.i: ; preds = %.noexc74.i.i.i
- %1369 = getelementptr inbounds i8, i8* %1368, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %1369, i8 0, i64 20, i1 false)
- %1370 = bitcast i8* %1368 to i32*
- store i32 202, i32* %1370, align 4
- %1371 = getelementptr inbounds i8, i8* %1367, i64 8
- %1372 = bitcast i8* %1371 to i8**
- store i8* %1368, i8** %1372, align 8
- %1373 = invoke i8* @GC_malloc_atomic(i64 4)
- to label %.noexc76.i.i.i unwind label %rescue.i.loopexit.i.i.i
+.noexc62.i.i.i: ; preds = %.noexc61.i.i.i
+ %1404 = getelementptr inbounds i8, i8* %1403, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %1404, i8 0, i64 20, i1 false)
+ %1405 = bitcast i8* %1403 to i32*
+ store i32 202, i32* %1405, align 4
+ %1406 = getelementptr inbounds i8, i8* %1402, i64 8
+ %1407 = bitcast i8* %1406 to i8**
+ store i8* %1403, i8** %1407, align 8
+ %1408 = invoke i8* @GC_malloc_atomic(i64 4)
+ to label %.noexc63.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc76.i.i.i: ; preds = %.noexc75.i.i.i
- %1374 = bitcast i8* %1373 to i32*
- store i32 186, i32* %1374, align 4
- %1375 = getelementptr inbounds i8, i8* %1367, i64 16
- %1376 = bitcast i8* %1375 to i8**
- store i8* %1373, i8** %1376, align 8
- %1377 = getelementptr inbounds i8, i8* %1367, i64 24
- %1378 = bitcast i8* %1377 to i1*
- store i1 false, i1* %1378, align 1
- %1379 = bitcast i8* %1367 to i32*
- store i32 205, i32* %1379, align 4
- %1380 = getelementptr inbounds i8, i8* %1367, i64 32
- %1381 = bitcast i8* %1380 to %Fiber**
- store %Fiber* %1365, %Fiber** %1381, align 8
- %1382 = getelementptr inbounds i8, i8* %1367, i64 40
- %1383 = bitcast i8* %1382 to %Fiber**
- store %Fiber* %1365, %Fiber** %1383, align 8
- %1384 = invoke i8* @GC_malloc(i64 24)
- to label %.noexc77.i.i.i unwind label %rescue.i.loopexit.i.i.i
+.noexc63.i.i.i: ; preds = %.noexc62.i.i.i
+ %1409 = bitcast i8* %1408 to i32*
+ store i32 186, i32* %1409, align 4
+ %1410 = getelementptr inbounds i8, i8* %1402, i64 16
+ %1411 = bitcast i8* %1410 to i8**
+ store i8* %1408, i8** %1411, align 8
+ %1412 = getelementptr inbounds i8, i8* %1402, i64 24
+ %1413 = bitcast i8* %1412 to i1*
+ store i1 false, i1* %1413, align 1
+ %1414 = bitcast i8* %1402 to i32*
+ store i32 205, i32* %1414, align 4
+ %1415 = getelementptr inbounds i8, i8* %1402, i64 32
+ %1416 = bitcast i8* %1415 to %Fiber**
+ store %Fiber* %self.idx.val.i.i.i.i.i126, %Fiber** %1416, align 8
+ %1417 = getelementptr inbounds i8, i8* %1402, i64 40
+ %1418 = bitcast i8* %1417 to %Fiber**
+ store %Fiber* %self.idx.val.i.i.i.i.i126, %Fiber** %1418, align 8
+ %1419 = invoke i8* @GC_malloc(i64 24)
+ to label %.noexc64.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc77.i.i.i: ; preds = %.noexc76.i.i.i
- %1385 = bitcast i8* %1367 to %"Crystal::Scheduler"*
- %1386 = bitcast i8* %1384 to i32*
- %1387 = getelementptr inbounds i8, i8* %1384, i64 4
- %1388 = bitcast i8* %1387 to i32*
- store i32 0, i32* %1388, align 4
- store i32 206, i32* %1386, align 4
- %1389 = getelementptr inbounds i8, i8* %1384, i64 8
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1389, i8 0, i64 16, i1 false) #22
- %1390 = getelementptr inbounds i8, i8* %1367, i64 48
- %1391 = bitcast i8* %1390 to i8**
- store i8* %1384, i8** %1391, align 8
- %1392 = bitcast %Thread* %1361 to i8*
- %sunkaddr366 = getelementptr inbounds i8, i8* %1392, i64 80
- %1393 = bitcast i8* %sunkaddr366 to i8**
- store i8* %1367, i8** %1393, align 8
+.noexc64.i.i.i: ; preds = %.noexc63.i.i.i
+ %1420 = bitcast i8* %1402 to %"Crystal::Scheduler"*
+ %1421 = bitcast i8* %1419 to i32*
+ %1422 = getelementptr inbounds i8, i8* %1419, i64 4
+ %1423 = bitcast i8* %1422 to i32*
+ store i32 0, i32* %1423, align 4
+ store i32 206, i32* %1421, align 4
+ %1424 = getelementptr inbounds i8, i8* %1419, i64 8
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) %1424, i8 0, i64 16, i1 false) #21
+ %1425 = getelementptr inbounds i8, i8* %1402, i64 48
+ %1426 = bitcast i8* %1425 to i8**
+ store i8* %1419, i8** %1426, align 8
+ %1427 = bitcast %Thread* %1398 to i8*
+ %sunkaddr390 = getelementptr inbounds i8, i8* %1427, i64 80
+ %1428 = bitcast i8* %sunkaddr390 to i8**
+ store i8* %1402, i8** %1428, align 8
br label %invoke_out2.i.i.i.i
-invoke_out2.i.i.i.i: ; preds = %.noexc77.i.i.i, %.noexc72.i.i.i
- %1394 = phi %"Crystal::Scheduler"* [ %1385, %.noexc77.i.i.i ], [ %1363, %.noexc72.i.i.i ]
- %1395 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %1394, i64 0, i32 1
- %1396 = load %"Crystal::LibEvent::EventLoop"*, %"Crystal::LibEvent::EventLoop"** %1395, align 8
- %1397 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1396, i64 0, i32 1, i32 0
- %1398 = load i32, i32* %1397, align 4
- %1399 = icmp eq i32 %1398, 0
- br i1 %1399, label %then.i.i.i46.i.i.i, label %else.i.i.i.i.i.i
+invoke_out2.i.i.i.i: ; preds = %.noexc64.i.i.i, %.noexc59.i.i.i
+ %1429 = phi %"Crystal::Scheduler"* [ %1420, %.noexc64.i.i.i ], [ %1400, %.noexc59.i.i.i ]
+ %1430 = getelementptr inbounds %"Crystal::Scheduler", %"Crystal::Scheduler"* %1429, i64 0, i32 1
+ %1431 = load %"Crystal::LibEvent::EventLoop"*, %"Crystal::LibEvent::EventLoop"** %1430, align 8
+ %1432 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1431, i64 0, i32 1, i32 0
+ %1433 = load i32, i32* %1432, align 4
+ %1434 = icmp eq i32 %1433, 0
+ br i1 %1434, label %then.i.i.i43.i.i.i, label %else.i.i.i44.i.i.i
-then.i.i.i46.i.i.i: ; preds = %invoke_out2.i.i.i.i
- %1400 = invoke i8* @event_base_new()
- to label %.noexc1.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
+then.i.i.i43.i.i.i: ; preds = %invoke_out2.i.i.i.i
+ %1435 = invoke i8* @event_base_new()
+ to label %.noexc.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
-.noexc1.i.i.i.i: ; preds = %then.i.i.i46.i.i.i
- %1401 = bitcast %"Crystal::LibEvent::EventLoop"* %1396 to i8*
- %sunkaddr367 = getelementptr inbounds i8, i8* %1401, i64 8
- %1402 = bitcast i8* %sunkaddr367 to i32*
- store i32 790, i32* %1402, align 4
- %1403 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1396, i64 0, i32 1, i32 1
- %1404 = bitcast [1 x i64]* %1403 to i8**
- store i8* %1400, i8** %1404, align 8
+.noexc.i.i.i.i: ; preds = %then.i.i.i43.i.i.i
+ %1436 = bitcast %"Crystal::LibEvent::EventLoop"* %1431 to i8*
+ %sunkaddr391 = getelementptr inbounds i8, i8* %1436, i64 8
+ %1437 = bitcast i8* %sunkaddr391 to i32*
+ store i32 790, i32* %1437, align 4
+ %1438 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1431, i64 0, i32 1, i32 1
+ %1439 = bitcast [1 x i64]* %1438 to i8**
+ store i8* %1435, i8** %1439, align 8
br label %"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i"
-else.i.i.i.i.i.i: ; preds = %invoke_out2.i.i.i.i
- %1405 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1396, i64 0, i32 1, i32 1, i64 0
- %1406 = load i64, i64* %1405, align 8
- %1407 = inttoptr i64 %1406 to i8*
+else.i.i.i44.i.i.i: ; preds = %invoke_out2.i.i.i.i
+ %1440 = getelementptr inbounds %"Crystal::LibEvent::EventLoop", %"Crystal::LibEvent::EventLoop"* %1431, i64 0, i32 1, i32 1, i64 0
+ %1441 = load i64, i64* %1440, align 8
+ %1442 = inttoptr i64 %1441 to i8*
br label %"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i"
-"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i": ; preds = %else.i.i.i.i.i.i, %.noexc1.i.i.i.i
- %.sroa.phi.sroa.speculated.i.i.i.i.i.i = phi i8* [ %1400, %.noexc1.i.i.i.i ], [ %1407, %else.i.i.i.i.i.i ]
- %sunkaddr368 = getelementptr inbounds i8, i8* %1158, i64 240
- %1408 = bitcast i8* %sunkaddr368 to i32*
- %1409 = load atomic volatile i32, i32* %1408 seq_cst, align 4
- %1410 = invoke i8* @event_new(i8* %.sroa.phi.sroa.speculated.i.i.i.i.i.i, i32 %1409, i16 4, %Nil (i32, i16, i8*)* bitcast (void (i32, i16, i8*)* @"~proc6Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/crystal/system/unix/event_loop_libevent.cr:51" to %Nil (i32, i16, i8*)*), i8* nonnull %1158)
+"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i": ; preds = %else.i.i.i44.i.i.i, %.noexc.i.i.i.i
+ %.sroa.phi.sroa.speculated.i.i.i.i.i.i = phi i8* [ %1435, %.noexc.i.i.i.i ], [ %1442, %else.i.i.i44.i.i.i ]
+ %sunkaddr392 = getelementptr inbounds i8, i8* %1199, i64 240
+ %1443 = bitcast i8* %sunkaddr392 to i32*
+ %1444 = load atomic volatile i32, i32* %1443 seq_cst, align 4
+ %1445 = invoke i8* @event_new(i8* %.sroa.phi.sroa.speculated.i.i.i.i.i.i, i32 %1444, i16 4, %Nil (i32, i16, i8*)* bitcast (void (i32, i16, i8*)* @"~proc6Proc(Int32, LibEvent2::EventFlags, Pointer(Void), Nil)@src/crystal/system/unix/event_loop_libevent.cr:51" to %Nil (i32, i16, i8*)*), i8* nonnull %1199)
to label %invoke_out3.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
invoke_out3.i.i.i.i: ; preds = %"*Crystal::LibEvent::EventLoop#event_base:Crystal::LibEvent::Event::Base.exit.i.i.i.i.i"
- %oldret38.i.i.i.i = insertvalue %"Crystal::LibEvent::Event" undef, i8* %1410, 0
+ %oldret38.i.i.i.i = insertvalue %"Crystal::LibEvent::Event" undef, i8* %1445, 0
%oldret40.i.i.i.i = insertvalue %"Crystal::LibEvent::Event" %oldret38.i.i.i.i, i1 false, 1
- invoke fastcc void @"*Hash(Thread, Crystal::EventLoop::Event+)@Hash(K, V)#upsert<Thread, Crystal::LibEvent::Event>:(Hash::Entry(Thread, Crystal::EventLoop::Event+) | Nil)"(%"Hash(Thread, Crystal::EventLoop::Event+)"* %1360, %Thread* %1349, %"Crystal::LibEvent::Event" %oldret40.i.i.i.i)
- to label %exit5.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
+ %1446 = invoke fastcc { i8*, i1 } @"*Hash(Thread, Crystal::EventLoop::Event+)@Hash(K, V)#[]=<Thread, Crystal::LibEvent::Event>:Crystal::LibEvent::Event"(%"Hash(Thread, Crystal::EventLoop::Event+)"* %1397, %Thread* %1389, %"Crystal::LibEvent::Event" %oldret40.i.i.i.i)
+ to label %invoke_out4.i.i.i.i unwind label %rescue.i.loopexit.i.i.i
-exit5.i.i.i.i: ; preds = %invoke_out3.i.i.i.i, %alloca.invoke_out_crit_edge.i.i.i.i
- %.sroa.phi.sroa.speculated.i.i.i = phi i8* [ %1356, %alloca.invoke_out_crit_edge.i.i.i.i ], [ %1410, %invoke_out3.i.i.i.i ]
- %1411 = invoke i32 @event_add(i8* %.sroa.phi.sroa.speculated.i.i.i, %"struct.LibC::Timeval"* null)
+invoke_out4.i.i.i.i: ; preds = %invoke_out3.i.i.i.i
+ %newret33.i.i.i.i = extractvalue { i8*, i1 } %1446, 0
+ br label %exit5.i.i.i.i
+
+exit5.i.i.i.i: ; preds = %invoke_out4.i.i.i.i, %alloca.invoke_out_crit_edge.i.i.i.i
+ %.sroa.phi.sroa.speculated.i.i.i = phi i8* [ %newret33.i.i.i.i, %invoke_out4.i.i.i.i ], [ %1393, %alloca.invoke_out_crit_edge.i.i.i.i ]
+ %1447 = invoke i32 @event_add(i8* %.sroa.phi.sroa.speculated.i.i.i, %"struct.LibC::Timeval"* null)
to label %invoke_out53.i.i.i unwind label %rescue21.loopexit.i.i.i
invoke_out53.i.i.i: ; preds = %exit5.i.i.i.i
@@ -5055,168 +5104,168 @@ invoke_out53.i.i.i: ; preds = %exit5.i.i.i.i
to label %invoke_out54.i.i.i unwind label %rescue21.loopexit.i.i.i
invoke_out54.i.i.i: ; preds = %invoke_out53.i.i.i
- %sunkaddr369 = getelementptr inbounds i8, i8* %1158, i64 169
- %1412 = bitcast i8* %sunkaddr369 to i1*
- %1413 = load i1, i1* %1412, align 1
- br i1 %1413, label %then55.i.i.i, label %else56.i.i.i
+ %sunkaddr393 = getelementptr inbounds i8, i8* %1199, i64 169
+ %1448 = bitcast i8* %sunkaddr393 to i1*
+ %1449 = load i1, i1* %1448, align 1
+ br i1 %1449, label %then55.i.i.i, label %else56.i.i.i
then55.i.i.i: ; preds = %invoke_out54.i.i.i
- %1414 = bitcast i8* %1158 to %TCPSocket*
- %sunkaddr370 = getelementptr inbounds i8, i8* %1158, i64 169
- %1415 = bitcast i8* %sunkaddr370 to i1*
- store i1 false, i1* %1415, align 1
- %1416 = call i8* @GC_malloc(i64 64)
- %1417 = getelementptr inbounds i8, i8* %1416, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1417, i8 0, i64 60, i1 false)
- %1418 = bitcast i8* %1416 to i32*
- store i32 80, i32* %1418, align 4
- %1419 = getelementptr inbounds i8, i8* %1416, i64 8
- %1420 = bitcast i8* %1419 to %String**
- store %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'connect timed out'" to %String*), %String** %1420, align 8
- invoke fastcc void @"*TCPSocket@IPSocket#close:Nil"(%TCPSocket* nonnull %1414)
+ %1450 = bitcast i8* %1199 to %TCPSocket*
+ %sunkaddr394 = getelementptr inbounds i8, i8* %1199, i64 169
+ %1451 = bitcast i8* %sunkaddr394 to i1*
+ store i1 false, i1* %1451, align 1
+ %1452 = call i8* @GC_malloc(i64 64)
+ %1453 = getelementptr inbounds i8, i8* %1452, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1453, i8 0, i64 60, i1 false)
+ %1454 = bitcast i8* %1452 to i32*
+ store i32 80, i32* %1454, align 4
+ %1455 = getelementptr inbounds i8, i8* %1452, i64 8
+ %1456 = bitcast i8* %1455 to %String**
+ store %String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'connect timed out'" to %String*), %String** %1456, align 8
+ invoke fastcc void @"*TCPSocket@IPSocket#close:Nil"(%TCPSocket* nonnull %1450)
to label %exit66.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
else56.i.i.i: ; preds = %invoke_out54.i.i.i
- %sunkaddr371 = getelementptr i8, i8* %1158, i64 244
- %1421 = bitcast i8* %sunkaddr371 to i1*
- %self.idx.val.i.i.i = load i1, i1* %1421, align 1
- br i1 %self.idx.val.i.i.i, label %then.i50.i.i.i, label %invoke_out31.i.i.i
+ %sunkaddr395 = getelementptr i8, i8* %1199, i64 244
+ %1457 = bitcast i8* %sunkaddr395 to i1*
+ %self.idx.val.i.i.i = load i1, i1* %1457, align 1
+ br i1 %self.idx.val.i.i.i, label %then.i48.i.i.i, label %invoke_out31.i.i.i
-then.i50.i.i.i: ; preds = %else56.i.i.i
- %1422 = invoke i8* @GC_malloc(i64 64)
- to label %.noexc52.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
+then.i48.i.i.i: ; preds = %else56.i.i.i
+ %1458 = invoke i8* @GC_malloc(i64 64)
+ to label %.noexc50.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
-.noexc52.i.i.i: ; preds = %then.i50.i.i.i
- %1423 = bitcast i8* %1422 to %"IO::Error"*
- %1424 = getelementptr inbounds i8, i8* %1422, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1424, i8 0, i64 60, i1 false)
- %1425 = bitcast i8* %1422 to i32*
- store i32 90, i32* %1425, align 4
- %1426 = getelementptr inbounds i8, i8* %1422, i64 8
- %1427 = bitcast i8* %1426 to %String**
- store %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Closed stream'" to %String*), %String** %1427, align 8
- invoke fastcc void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* nonnull %1423)
- to label %.noexc53.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
+.noexc50.i.i.i: ; preds = %then.i48.i.i.i
+ %1459 = bitcast i8* %1458 to %"IO::Error"*
+ %1460 = getelementptr inbounds i8, i8* %1458, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(64) %1460, i8 0, i64 60, i1 false)
+ %1461 = bitcast i8* %1458 to i32*
+ store i32 90, i32* %1461, align 4
+ %1462 = getelementptr inbounds i8, i8* %1458, i64 8
+ %1463 = bitcast i8* %1462 to %String**
+ store %String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Closed stream'" to %String*), %String** %1463, align 8
+ invoke fastcc void @"*raise<IO::Error>:NoReturn"(%"IO::Error"* nonnull %1459)
+ to label %.noexc51.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.split-lp.i.i.i
-.noexc53.i.i.i: ; preds = %.noexc52.i.i.i
+.noexc51.i.i.i: ; preds = %.noexc50.i.i.i
unreachable
invoke_out60.i.i.i: ; preds = %.noexc34.i.i.i, %.noexc33.i.i.i, %.noexc32.i.i.i
- %.sink.i.i.i.i.i.i = phi i8* [ %1291, %.noexc33.i.i.i ], [ %1294, %.noexc34.i.i.i ], [ %1288, %.noexc32.i.i.i ]
- %.pre-phi.i.i.i.i.i.i = phi i32* [ %1293, %.noexc33.i.i.i ], [ %1296, %.noexc34.i.i.i ], [ %1290, %.noexc32.i.i.i ]
- %1428 = bitcast i8* %1158 to %TCPSocket*
- %1429 = getelementptr inbounds i8, i8* %.sink.i.i.i.i.i.i, i64 8
- %1430 = bitcast i8* %1429 to %String**
- store %String* %1287, %String** %1430, align 8
- %1431 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i.i, i64 12
- store i32 1941, i32* %1431, align 4
- %1432 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i.i, i64 14
- store i32 %1284, i32* %1432, align 4
- invoke fastcc void @"*TCPSocket@IPSocket#close:Nil"(%TCPSocket* nonnull %1428)
+ %.sink.i.i.i.i.i.i = phi i8* [ %1332, %.noexc33.i.i.i ], [ %1335, %.noexc34.i.i.i ], [ %1329, %.noexc32.i.i.i ]
+ %.pre-phi.i.i.i.i.i.i = phi i32* [ %1334, %.noexc33.i.i.i ], [ %1337, %.noexc34.i.i.i ], [ %1331, %.noexc32.i.i.i ]
+ %1464 = bitcast i8* %1199 to %TCPSocket*
+ %1465 = getelementptr inbounds i8, i8* %.sink.i.i.i.i.i.i, i64 8
+ %1466 = bitcast i8* %1465 to %String**
+ store %String* %1328, %String** %1466, align 8
+ %1467 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i.i, i64 12
+ store i32 1941, i32* %1467, align 4
+ %1468 = getelementptr inbounds i32, i32* %.pre-phi.i.i.i.i.i.i, i64 14
+ store i32 %1325, i32* %1468, align 4
+ invoke fastcc void @"*TCPSocket@IPSocket#close:Nil"(%TCPSocket* nonnull %1464)
to label %exit66.i.i.i unwind label %rescue21.loopexit.split-lp.loopexit.i.i.i
exit62.i.thread.i.i: ; preds = %invoke_out31.i.i.i, %else30.i.i.i
- %sunkaddr372 = getelementptr inbounds i8, i8* %1158, i64 256
- %1433 = bitcast i8* %sunkaddr372 to i32*
- store i32 0, i32* %1433, align 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i90, i8 0, i64 52, i1 false)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i91, i8 0, i64 48, i1 false)
+ %sunkaddr396 = getelementptr inbounds i8, i8* %1199, i64 256
+ %1469 = bitcast i8* %sunkaddr396 to i32*
+ store i32 0, i32* %1469, align 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i115, i8 0, i64 52, i1 false)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i116, i8 0, i64 48, i1 false)
br label %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
invoke_out63.i.i.i: ; preds = %rescue21.i.i.i
unreachable
then64.i.i.i: ; preds = %exit66.i.i.i
- %.not.i54.i.i.i = icmp eq %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4480.0.in.i.i.i, null
- br i1 %.not.i54.i.i.i, label %else68.i.i.i, label %then.i56.i.i.i
+ %.not.i52.i.i.i = icmp eq %"struct.LibC::Addrinfo"* %addrinfo6.sroa.4467.0.in.i.i.i, null
+ br i1 %.not.i52.i.i.i, label %else68.i.i.i, label %then.i54.i.i.i
-then.i56.i.i.i: ; preds = %then64.i.i.i
- %1434 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* nonnull %addrinfo6.sroa.4480.0.in.i.i.i)
- to label %while.i.i.i94 unwind label %rescue.loopexit.i.i.i
+then.i54.i.i.i: ; preds = %then64.i.i.i
+ %1470 = invoke fastcc { i16, i32, i32, i32, %"struct.LibC::SockaddrIn6", %"struct.LibC::Addrinfo"*, %"(Socket::IPAddress | Nil)" } @"*Socket::Addrinfo::new<Pointer(LibC::Addrinfo)>:Socket::Addrinfo"(%"struct.LibC::Addrinfo"* nonnull %addrinfo6.sroa.4467.0.in.i.i.i)
+ to label %while.i.i.i119 unwind label %rescue.loopexit.i.i.i
exit66.i.i.i: ; preds = %invoke_out60.i.i.i, %then55.i.i.i
- %1435 = phi i32* [ %.pre-phi.i.i.i.i.i.i, %invoke_out60.i.i.i ], [ %1418, %then55.i.i.i ]
- %sunkaddr373 = getelementptr inbounds i8, i8* %1158, i64 256
- %1436 = bitcast i8* %sunkaddr373 to i32*
- store i32 0, i32* %1436, align 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i90, i8 0, i64 52, i1 false)
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i91, i8 0, i64 48, i1 false)
- %1437 = load i32, i32* %1435, align 4
- %1438 = add i32 %1437, -80
- %1439 = icmp ult i32 %1438, 11
- br i1 %1439, label %then64.i.i.i, label %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
+ %1471 = phi i32* [ %.pre-phi.i.i.i.i.i.i, %invoke_out60.i.i.i ], [ %1454, %then55.i.i.i ]
+ %sunkaddr397 = getelementptr inbounds i8, i8* %1199, i64 256
+ %1472 = bitcast i8* %sunkaddr397 to i32*
+ store i32 0, i32* %1472, align 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(52) %.repack12.i.i.i115, i8 0, i64 52, i1 false)
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(48) %.repack18.i.i.i116, i8 0, i64 48, i1 false)
+ %1473 = load i32, i32* %1471, align 4
+ %1474 = add i32 %1473, -80
+ %1475 = icmp ult i32 %1474, 11
+ br i1 %1475, label %then64.i.i.i, label %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
else68.i.i.i: ; preds = %then64.i.i.i
- %1440 = icmp eq i32 %1437, 86
- br i1 %1440, label %then71.i.i.i, label %else72.i.i.i
+ %1476 = icmp eq i32 %1473, 86
+ br i1 %1476, label %then71.i.i.i, label %else72.i.i.i
then71.i.i.i: ; preds = %else68.i.i.i
- %1441 = invoke i8* @GC_malloc(i64 80)
- to label %.noexc.i.i102 unwind label %rescue.loopexit.split-lp.i.i.i
+ %1477 = invoke i8* @GC_malloc(i64 80)
+ to label %.noexc.i.i127 unwind label %rescue.loopexit.split-lp.i.i.i
-.noexc.i.i102: ; preds = %then71.i.i.i
- %1442 = getelementptr inbounds i8, i8* %1441, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %1442, i8 0, i64 76, i1 false)
- %1443 = bitcast i8* %1441 to i32*
- store i32 152, i32* %1443, align 4
- %1444 = invoke i8* @GC_malloc_atomic(i64 58)
+.noexc.i.i127: ; preds = %then71.i.i.i
+ %1478 = getelementptr inbounds i8, i8* %1477, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %1478, i8 0, i64 76, i1 false)
+ %1479 = bitcast i8* %1477 to i32*
+ store i32 152, i32* %1479, align 4
+ %1480 = invoke i8* @GC_malloc_atomic(i64 58)
to label %.noexc1.i.i unwind label %rescue.loopexit.split-lp.i.i.i
-.noexc1.i.i: ; preds = %.noexc.i.i102
- %1445 = bitcast i8* %1441 to %"String::Builder"*
- %1446 = getelementptr inbounds i8, i8* %1441, i64 64
- %1447 = bitcast i8* %1446 to i8**
- store i8* %1444, i8** %1447, align 8
- %1448 = getelementptr inbounds i8, i8* %1441, i64 56
- %1449 = bitcast i8* %1448 to i32*
- store i32 0, i32* %1449, align 4
- %1450 = getelementptr inbounds i8, i8* %1441, i64 60
- %1451 = bitcast i8* %1450 to i32*
- store i32 58, i32* %1451, align 4
- %1452 = getelementptr inbounds i8, i8* %1441, i64 72
- %1453 = bitcast i8* %1452 to i1*
- store i1 false, i1* %1453, align 1
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1445, %"Slice(UInt8)" { i32 21, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [22 x i8] }, { i32, i32, i32, [22 x i8] }* @"'Error connecting to...'", i64 0, i32 3, i64 0) })
+.noexc1.i.i: ; preds = %.noexc.i.i127
+ %1481 = bitcast i8* %1477 to %"String::Builder"*
+ %1482 = getelementptr inbounds i8, i8* %1477, i64 64
+ %1483 = bitcast i8* %1482 to i8**
+ store i8* %1480, i8** %1483, align 8
+ %1484 = getelementptr inbounds i8, i8* %1477, i64 56
+ %1485 = bitcast i8* %1484 to i32*
+ store i32 0, i32* %1485, align 4
+ %1486 = getelementptr inbounds i8, i8* %1477, i64 60
+ %1487 = bitcast i8* %1486 to i32*
+ store i32 58, i32* %1487, align 4
+ %1488 = getelementptr inbounds i8, i8* %1477, i64 72
+ %1489 = bitcast i8* %1488 to i1*
+ store i1 false, i1* %1489, align 1
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1481, %"Slice(UInt8)" { i32 21, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [22 x i8] }, { i32, i32, i32, [22 x i8] }* @"'Error connecting to...'", i64 0, i32 3, i64 0) })
to label %.noexc2.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc2.i.i: ; preds = %.noexc1.i.i
- %1454 = bitcast i8* %1441 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1454, %"Slice(UInt8)" { i32 7, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [8 x i8] }, { i32, i32, i32, [8 x i8] }* @"'0.0.0.0'", i64 0, i32 3, i64 0) })
+ %1490 = bitcast i8* %1477 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1490, %"Slice(UInt8)" { i32 7, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [8 x i8] }, { i32, i32, i32, [8 x i8] }* @"'0.0.0.0'", i64 0, i32 3, i64 0) })
to label %.noexc3.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc3.i.i: ; preds = %.noexc2.i.i
- %1455 = bitcast i8* %1441 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1455, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"':'", i64 0, i32 3, i64 0) })
+ %1491 = bitcast i8* %1477 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1491, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"':'", i64 0, i32 3, i64 0) })
to label %.noexc4.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc4.i.i: ; preds = %.noexc3.i.i
- %1456 = bitcast i8* %1441 to %"String::Builder"*
- %1457 = invoke fastcc %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* nonnull %1456, i32 8081)
+ %1492 = bitcast i8* %1477 to %"String::Builder"*
+ invoke fastcc void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 8081, %"String::Builder"* nonnull %1492)
to label %.noexc5.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc5.i.i: ; preds = %.noexc4.i.i
- %1458 = bitcast i8* %1441 to %"String::Builder"*
- invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1458, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'''", i64 0, i32 3, i64 0) })
+ %1493 = bitcast i8* %1477 to %"String::Builder"*
+ invoke fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %1493, %"Slice(UInt8)" { i32 1, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [2 x i8] }, { i32, i32, i32, [2 x i8] }* @"'''", i64 0, i32 3, i64 0) })
to label %.noexc6.i.i unwind label %rescue.loopexit.split-lp.i.i.i
.noexc6.i.i: ; preds = %.noexc5.i.i
- %1459 = bitcast i8* %1441 to %"String::Builder"*
- %1460 = invoke fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* nonnull %1459)
+ %1494 = bitcast i8* %1477 to %"String::Builder"*
+ %1495 = invoke fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* nonnull %1494)
to label %invoke_out73.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
else72.i.i.i: ; preds = %else68.i.i.i
- invoke fastcc void @"*raise<IO::Error+>:NoReturn"(i32* nonnull %1435)
+ invoke fastcc void @"*raise<IO::Error+>:NoReturn"(i32* nonnull %1471)
to label %invoke_out76.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
invoke_out73.i.i.i: ; preds = %.noexc6.i.i
- %1461 = getelementptr inbounds i32, i32* %1435, i64 12
- %1462 = bitcast i32* %1461 to %"(Errno | WasiError | WinError | Nil)"*
- %1463 = load %"(Errno | WasiError | WinError | Nil)", %"(Errno | WasiError | WinError | Nil)"* %1462, align 8
- %1464 = invoke fastcc i32* @"*Socket::ConnectError@SystemError::ClassMethods::from_os_error<String, (Errno | WasiError | WinError | Nil)>:Socket::Error+"(%String* %1460, %"(Errno | WasiError | WinError | Nil)" %1463)
+ %1496 = getelementptr inbounds i32, i32* %1471, i64 12
+ %1497 = bitcast i32* %1496 to %"(Errno | WasiError | WinError | Nil)"*
+ %1498 = load %"(Errno | WasiError | WinError | Nil)", %"(Errno | WasiError | WinError | Nil)"* %1497, align 8
+ %1499 = invoke fastcc i32* @"*Socket::ConnectError@SystemError::ClassMethods::from_os_error<String, (Errno | WasiError | WinError | Nil)>:Socket::Error+"(%String* %1495, %"(Errno | WasiError | WinError | Nil)" %1498)
to label %invoke_out74.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
invoke_out74.i.i.i: ; preds = %invoke_out73.i.i.i
- invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1464)
+ invoke fastcc void @"*raise<Socket::Error+>:NoReturn"(i32* %1499)
to label %invoke_out75.i.i.i unwind label %rescue.loopexit.split-lp.i.i.i
invoke_out75.i.i.i: ; preds = %invoke_out74.i.i.i
@@ -5226,208 +5275,201 @@ invoke_out76.i.i.i: ; preds = %else72.i.i.i
unreachable
"*TCPSocket::new<String, Int32>:TCPSocket.exit": ; preds = %exit66.i.i.i, %exit62.i.thread.i.i
- %1465 = bitcast %"Socket::Addrinfo"* %10 to i8*
- %1466 = bitcast %"struct.LibC::Addrinfo"** %3 to i8*
- %1467 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
- %1468 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
- call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1468)
- call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %1467)
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1466)
- call void @llvm.lifetime.end.p0i8(i64 112, i8* nonnull %1465)
- call void @GC_register_finalizer_ignore_self(i8* nonnull %1158, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc8Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
- %1469 = getelementptr inbounds i8, i8* %1158, i64 8
- %1470 = bitcast i8* %1469 to %"(IO::EncodingOptions | Nil)"*
- %1471 = load %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %1470, align 8
- %.fca.1.0.extract.i.i.i.i103 = extractvalue %"(IO::EncodingOptions | Nil)" %1471, 1, 0
- %.fca.1.1.extract.i.i.i.i104 = extractvalue %"(IO::EncodingOptions | Nil)" %1471, 1, 1
- %encoding.sroa.4.16.extract.trunc.i.i.i.i = trunc i64 %.fca.1.1.extract.i.i.i.i104 to i32
- %.fca.1.2.extract.i.i.i.i105 = extractvalue %"(IO::EncodingOptions | Nil)" %1471, 1, 2
- %1472 = bitcast i8* %1469 to i32*
- %1473 = load i32, i32* %1472, align 4
- %.not.i.i.i.i106 = icmp eq i32 %1473, 0
- br i1 %.not.i.i.i.i106, label %else.i.i.i117, label %then.i.i.i.i107
+ %1500 = bitcast %"Socket::Addrinfo"* %10 to i8*
+ %1501 = bitcast %"struct.LibC::Addrinfo"** %3 to i8*
+ %1502 = bitcast %"struct.LibC::Addrinfo"* %hints.i.i.i to i8*
+ %1503 = load %"struct.LibC::Addrinfo"*, %"struct.LibC::Addrinfo"** %3, align 8
+ call void @freeaddrinfo(%"struct.LibC::Addrinfo"* %1503)
+ call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %1502)
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1501)
+ call void @llvm.lifetime.end.p0i8(i64 112, i8* nonnull %1500)
+ call void @GC_register_finalizer_ignore_self(i8* nonnull %1199, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc8Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
+ %1504 = getelementptr inbounds i8, i8* %1199, i64 8
+ %1505 = bitcast i8* %1504 to %"(IO::EncodingOptions | Nil)"*
+ %1506 = load %"(IO::EncodingOptions | Nil)", %"(IO::EncodingOptions | Nil)"* %1505, align 8
+ %.fca.1.0.extract.i.i.i.i = extractvalue %"(IO::EncodingOptions | Nil)" %1506, 1, 0
+ %.fca.1.1.extract.i.i.i.i = extractvalue %"(IO::EncodingOptions | Nil)" %1506, 1, 1
+ %encoding.sroa.4.16.extract.trunc.i.i.i.i = trunc i64 %.fca.1.1.extract.i.i.i.i to i32
+ %.fca.1.2.extract.i.i.i.i128 = extractvalue %"(IO::EncodingOptions | Nil)" %1506, 1, 2
+ %1507 = bitcast i8* %1504 to i32*
+ %1508 = load i32, i32* %1507, align 4
+ %.not.i.i.i.i129 = icmp eq i32 %1508, 0
+ br i1 %.not.i.i.i.i129, label %else.i.i.i138, label %then.i.i.i.i130
-then.i.i.i.i107: ; preds = %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
- %1474 = getelementptr inbounds i8, i8* %1158, i64 40
- %1475 = bitcast i8* %1474 to %"IO::Encoder"**
- %1476 = load %"IO::Encoder"*, %"IO::Encoder"** %1475, align 8
- %.not8.i.i.i.i = icmp eq %"IO::Encoder"* %1476, null
+then.i.i.i.i130: ; preds = %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
+ %1509 = getelementptr inbounds i8, i8* %1199, i64 40
+ %1510 = bitcast i8* %1509 to %"IO::Encoder"**
+ %1511 = load %"IO::Encoder"*, %"IO::Encoder"** %1510, align 8
+ %.not8.i.i.i.i = icmp eq %"IO::Encoder"* %1511, null
br i1 %.not8.i.i.i.i, label %else2.i.i.i.i, label %body.lr.ph.i.i.i.i
-else2.i.i.i.i: ; preds = %then.i.i.i.i107
- %1477 = inttoptr i64 %.fca.1.0.extract.i.i.i.i103 to %String*
- %1478 = call i8* @GC_malloc(i64 56)
- %1479 = bitcast i8* %1478 to %"IO::Encoder"*
- %1480 = getelementptr inbounds i8, i8* %1478, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1480, i8 0, i64 52, i1 false)
- %1481 = bitcast i8* %1478 to i32*
- store i32 175, i32* %1481, align 4
- %.repack.i.i.i.i.i.i = getelementptr inbounds i8, i8* %1478, i64 8
- %1482 = bitcast i8* %.repack.i.i.i.i.i.i to %String**
- store %String* %1477, %String** %1482, align 8
- %.repack1.i.i.i.i.i.i = getelementptr inbounds i8, i8* %1478, i64 16
- %1483 = bitcast i8* %.repack1.i.i.i.i.i.i to %"(Symbol | Nil)"*
- %1484 = insertvalue %"(Symbol | Nil)" poison, i32 %encoding.sroa.4.16.extract.trunc.i.i.i.i, 0
- %encoding_options.elt2.i.i.i.i.i.i = insertvalue %"(Symbol | Nil)" %1484, i64 %.fca.1.2.extract.i.i.i.i105, 1, 0
- store %"(Symbol | Nil)" %encoding_options.elt2.i.i.i.i.i.i, %"(Symbol | Nil)"* %1483, align 8
- %1485 = bitcast %"Crystal::Iconv"* %5 to i8*
- call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %1485)
- %.fca.1.insert.fca.0.gep.i.i.i.i.i.i.i374 = bitcast %"Crystal::Iconv"* %5 to i1*
- store i1 false, i1* %.fca.1.insert.fca.0.gep.i.i.i.i.i.i.i374, align 8
- %.fca.1.insert.fca.1.gep.i.i.i.i.i.i.i = getelementptr inbounds %"Crystal::Iconv", %"Crystal::Iconv"* %5, i64 0, i32 1
- store i8* null, i8** %.fca.1.insert.fca.1.gep.i.i.i.i.i.i.i, align 8
- call fastcc void @"*Crystal::Iconv#initialize<String, String, (Symbol | Nil)>:Nil"(%"Crystal::Iconv"* nonnull %5, %String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*), %String* %1477, %"(Symbol | Nil)" %encoding_options.elt2.i.i.i.i.i.i)
- %.fca.0.load.i.i.i.i.i.i.i = load i1, i1* %.fca.1.insert.fca.0.gep.i.i.i.i.i.i.i374, align 8
- %.fca.1.load.i.i.i.i.i.i.i = load i8*, i8** %.fca.1.insert.fca.1.gep.i.i.i.i.i.i.i, align 8
- call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %1485)
- %oldret.i.i.i.i.i.i108 = insertvalue %"Crystal::Iconv" undef, i1 %.fca.0.load.i.i.i.i.i.i.i, 0
- %oldret14.i.i.i.i.i.i = insertvalue %"Crystal::Iconv" %oldret.i.i.i.i.i.i108, i8* %.fca.1.load.i.i.i.i.i.i.i, 1
- %1486 = getelementptr inbounds i8, i8* %1478, i64 32
- %1487 = bitcast i8* %1486 to %"Crystal::Iconv"*
- store %"Crystal::Iconv" %oldret14.i.i.i.i.i.i, %"Crystal::Iconv"* %1487, align 8
- %1488 = getelementptr inbounds i8, i8* %1478, i64 48
- %1489 = bitcast i8* %1488 to i1*
- store i1 false, i1* %1489, align 1
- call void @GC_register_finalizer_ignore_self(i8* %1478, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc5Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
- %sunkaddr375 = getelementptr inbounds i8, i8* %1158, i64 40
- %1490 = bitcast i8* %sunkaddr375 to i8**
- store i8* %1478, i8** %1490, align 8
+else2.i.i.i.i: ; preds = %then.i.i.i.i130
+ %1512 = inttoptr i64 %.fca.1.0.extract.i.i.i.i to %String*
+ %1513 = call i8* @GC_malloc(i64 56)
+ %1514 = bitcast i8* %1513 to %"IO::Encoder"*
+ %1515 = getelementptr inbounds i8, i8* %1513, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(56) %1515, i8 0, i64 52, i1 false)
+ %1516 = bitcast i8* %1513 to i32*
+ store i32 175, i32* %1516, align 4
+ %.repack.i.i.i.i.i.i = getelementptr inbounds i8, i8* %1513, i64 8
+ %1517 = bitcast i8* %.repack.i.i.i.i.i.i to %String**
+ store %String* %1512, %String** %1517, align 8
+ %.repack1.i.i.i.i.i.i = getelementptr inbounds i8, i8* %1513, i64 16
+ %1518 = bitcast i8* %.repack1.i.i.i.i.i.i to %"(Symbol | Nil)"*
+ %1519 = insertvalue %"(Symbol | Nil)" poison, i32 %encoding.sroa.4.16.extract.trunc.i.i.i.i, 0
+ %encoding_options.elt2.i.i.i.i.i.i = insertvalue %"(Symbol | Nil)" %1519, i64 %.fca.1.2.extract.i.i.i.i128, 1, 0
+ store %"(Symbol | Nil)" %encoding_options.elt2.i.i.i.i.i.i, %"(Symbol | Nil)"* %1518, align 8
+ %1520 = call fastcc { i1, i8* } @"*Crystal::Iconv::new<String, String, (Symbol | Nil)>:Crystal::Iconv"(%String* bitcast ({ i32, i32, i32, [6 x i8] }* @"'UTF-8'" to %String*), %String* %1512, %"(Symbol | Nil)" %encoding_options.elt2.i.i.i.i.i.i)
+ %newret.i.i.i.i.i.i = extractvalue { i1, i8* } %1520, 0
+ %oldret.i.i.i.i.i.i131 = insertvalue %"Crystal::Iconv" undef, i1 %newret.i.i.i.i.i.i, 0
+ %newret13.i.i.i.i.i.i = extractvalue { i1, i8* } %1520, 1
+ %oldret14.i.i.i.i.i.i = insertvalue %"Crystal::Iconv" %oldret.i.i.i.i.i.i131, i8* %newret13.i.i.i.i.i.i, 1
+ %1521 = getelementptr inbounds i8, i8* %1513, i64 32
+ %1522 = bitcast i8* %1521 to %"Crystal::Iconv"*
+ store %"Crystal::Iconv" %oldret14.i.i.i.i.i.i, %"Crystal::Iconv"* %1522, align 8
+ %1523 = getelementptr inbounds i8, i8* %1513, i64 48
+ %1524 = bitcast i8* %1523 to i1*
+ store i1 false, i1* %1524, align 1
+ call void @GC_register_finalizer_ignore_self(i8* %1513, %Nil (i8*, i8*)* bitcast (void (i8*, i8*)* @"~proc5Proc(Pointer(Void), Pointer(Void), Nil)@src/gc/boehm.cr:196" to %Nil (i8*, i8*)*), i8* null, %"->"* null, i8** null)
+ %sunkaddr398 = getelementptr inbounds i8, i8* %1199, i64 40
+ %1525 = bitcast i8* %sunkaddr398 to i8**
+ store i8* %1513, i8** %1525, align 8
br label %body.lr.ph.i.i.i.i
-body.lr.ph.i.i.i.i: ; preds = %else2.i.i.i.i, %then.i.i.i.i107
- %.ph.i.i.i = phi %"IO::Encoder"* [ %1476, %then.i.i.i.i107 ], [ %1479, %else2.i.i.i.i ]
- %1491 = bitcast i8** %1 to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1491)
- %1492 = bitcast i64* %inbytesleft.i.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1492)
- %1493 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %1493)
- %1494 = bitcast i8** %outbuf_ptr.i.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1494)
- %1495 = bitcast i64* %outbytesleft.i.i.i.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1495)
+body.lr.ph.i.i.i.i: ; preds = %else2.i.i.i.i, %then.i.i.i.i130
+ %.ph.i.i.i = phi %"IO::Encoder"* [ %1511, %then.i.i.i.i130 ], [ %1514, %else2.i.i.i.i ]
+ %1526 = bitcast i8** %1 to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1526)
+ %1527 = bitcast i64* %inbytesleft.i.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1527)
+ %1528 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %1528)
+ %1529 = bitcast i8** %outbuf_ptr.i.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1529)
+ %1530 = bitcast i64* %outbytesleft.i.i.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %1530)
store i8* getelementptr inbounds ({ i32, i32, i32, [9 x i8] }, { i32, i32, i32, [9 x i8] }* @"'message\0A'", i64 0, i32 3, i64 0), i8** %1, align 8
store i64 8, i64* %inbytesleft.i.i.i.i, align 8
br label %body.i.i.i.i
body.i.i.i.i: ; preds = %"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8).exit.i.i.i.i", %body.lr.ph.i.i.i.i
- %1496 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
- store i8* %1496, i8** %outbuf_ptr.i.i.i.i, align 8
+ %1531 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
+ store i8* %1531, i8** %outbuf_ptr.i.i.i.i, align 8
store i64 1024, i64* %outbytesleft.i.i.i.i, align 8
- %1497 = bitcast %"IO::Encoder"* %.ph.i.i.i to i8*
- %sunkaddr376 = getelementptr i8, i8* %1497, i64 40
- %1498 = bitcast i8* %sunkaddr376 to i8**
- %.idx.val.i.i.i.i = load i8*, i8** %1498, align 8
- %1499 = call i64 @iconv(i8* %.idx.val.i.i.i.i, i8** nonnull %1, i64* nonnull %inbytesleft.i.i.i.i, i8** nonnull %outbuf_ptr.i.i.i.i, i64* nonnull %outbytesleft.i.i.i.i)
- %1500 = icmp eq i64 %1499, -1
- br i1 %1500, label %then.i12.i.i.i, label %exit.i.i.i.i112
+ %1532 = bitcast %"IO::Encoder"* %.ph.i.i.i to i8*
+ %sunkaddr399 = getelementptr i8, i8* %1532, i64 40
+ %1533 = bitcast i8* %sunkaddr399 to i8**
+ %.idx.val.i.i.i.i = load i8*, i8** %1533, align 8
+ %1534 = call i64 @iconv(i8* %.idx.val.i.i.i.i, i8** nonnull %1, i64* nonnull %inbytesleft.i.i.i.i, i8** nonnull %outbuf_ptr.i.i.i.i, i64* nonnull %outbytesleft.i.i.i.i)
+ %1535 = icmp eq i64 %1534, -1
+ br i1 %1535, label %then.i12.i.i.i, label %exit.i.i.i.i135
then.i12.i.i.i: ; preds = %body.i.i.i.i
- %1501 = bitcast %"IO::Encoder"* %.ph.i.i.i to i8*
- %sunkaddr377 = getelementptr inbounds i8, i8* %1501, i64 32
- %1502 = bitcast i8* %sunkaddr377 to i1*
- %.idx19.val.i.i.i.i = load i1, i1* %1502, align 1
- br i1 %.idx19.val.i.i.i.i, label %then.i.i.i.i.i110, label %else.i.i.i.i.i111
+ %1536 = bitcast %"IO::Encoder"* %.ph.i.i.i to i8*
+ %sunkaddr400 = getelementptr inbounds i8, i8* %1536, i64 32
+ %1537 = bitcast i8* %sunkaddr400 to i1*
+ %.idx19.val.i.i.i.i = load i1, i1* %1537, align 1
+ br i1 %.idx19.val.i.i.i.i, label %then.i.i.i.i.i133, label %else.i.i.i.i.i134
-then.i.i.i.i.i110: ; preds = %then.i12.i.i.i
- %1503 = load i64, i64* %inbytesleft.i.i.i.i, align 8
- %.not.i.i.i.i.i109 = icmp eq i64 %1503, 0
- br i1 %.not.i.i.i.i.i109, label %exit.i.i.i.i112, label %normal.i.i.i.i.i
+then.i.i.i.i.i133: ; preds = %then.i12.i.i.i
+ %1538 = load i64, i64* %inbytesleft.i.i.i.i, align 8
+ %.not.i.i.i.i.i132 = icmp eq i64 %1538, 0
+ br i1 %.not.i.i.i.i.i132, label %exit.i.i.i.i135, label %normal.i.i.i.i.i
-else.i.i.i.i.i111: ; preds = %then.i12.i.i.i
- %1504 = call i32* @__errno_location()
- %1505 = load i32, i32* %1504, align 4
- switch i32 %1505, label %exit.i.i.i.i112 [
+else.i.i.i.i.i134: ; preds = %then.i12.i.i.i
+ %1539 = call i32* @__errno_location()
+ %1540 = load i32, i32* %1539, align 4
+ switch i32 %1540, label %exit.i.i.i.i135 [
i32 22, label %then4.i.i.i.i.i
i32 84, label %then6.i.i.i.i.i
]
-normal.i.i.i.i.i: ; preds = %then.i.i.i.i.i110
- %1506 = load i8*, i8** %1, align 8
- %1507 = getelementptr inbounds i8, i8* %1506, i64 1
- store i8* %1507, i8** %1, align 8
- %1508 = add i64 %1503, -1
- store i64 %1508, i64* %inbytesleft.i.i.i.i, align 8
- br label %exit.i.i.i.i112
+normal.i.i.i.i.i: ; preds = %then.i.i.i.i.i133
+ %1541 = load i8*, i8** %1, align 8
+ %1542 = getelementptr inbounds i8, i8* %1541, i64 1
+ store i8* %1542, i8** %1, align 8
+ %1543 = add i64 %1538, -1
+ store i64 %1543, i64* %inbytesleft.i.i.i.i, align 8
+ br label %exit.i.i.i.i135
-then4.i.i.i.i.i: ; preds = %else.i.i.i.i.i111
- %1509 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [30 x i8] }* @"'Incomplete multibyt...'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1509)
+then4.i.i.i.i.i: ; preds = %else.i.i.i.i.i134
+ %1544 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [30 x i8] }* @"'Incomplete multibyt...'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1544)
unreachable
-then6.i.i.i.i.i: ; preds = %else.i.i.i.i.i111
- %1510 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [27 x i8] }* @"'Invalid multibyte s...'" to %String*))
- call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1510)
+then6.i.i.i.i.i: ; preds = %else.i.i.i.i.i134
+ %1545 = call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [27 x i8] }* @"'Invalid multibyte s...'" to %String*))
+ call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %1545)
unreachable
-exit.i.i.i.i112: ; preds = %normal.i.i.i.i.i, %else.i.i.i.i.i111, %then.i.i.i.i.i110, %body.i.i.i.i
- %1511 = load i64, i64* %outbytesleft.i.i.i.i, align 8
- %1512 = zext i64 %1511 to i65
- %1513 = sub nsw i65 1024, %1512
- %1514 = trunc i65 %1513 to i32
- %1515 = sext i32 %1514 to i65
- %.not18.i.i.i.i = icmp eq i65 %1513, %1515
- br i1 %.not18.i.i.i.i, label %normal.i.i.i.i, label %overflow.i.i.i.i113, !prof !1
+exit.i.i.i.i135: ; preds = %normal.i.i.i.i.i, %else.i.i.i.i.i134, %then.i.i.i.i.i133, %body.i.i.i.i
+ %1546 = load i64, i64* %outbytesleft.i.i.i.i, align 8
+ %1547 = zext i64 %1546 to i65
+ %1548 = sub nsw i65 1024, %1547
+ %1549 = trunc i65 %1548 to i32
+ %1550 = sext i32 %1549 to i65
+ %.not18.i.i.i.i = icmp eq i65 %1548, %1550
+ br i1 %.not18.i.i.i.i, label %normal.i.i.i.i, label %overflow.i.i.i.i136, !prof !1
-overflow.i.i.i.i113: ; preds = %exit.i.i.i.i112
+overflow.i.i.i.i136: ; preds = %exit.i.i.i.i135
call void @__crystal_raise_overflow()
unreachable
-normal.i.i.i.i: ; preds = %exit.i.i.i.i112
- %1516 = ptrtoint [1024 x i8]* %outbuf.i.i.i.i to i64
- %.not10.i.i.i.i.i = icmp ugt i32 %1514, 1024
- %1517 = trunc i65 %1513 to i64
- %.sroa.2.8.insert.ext.i.i.i.i.i.i = and i64 %1517, 4294967295
+normal.i.i.i.i: ; preds = %exit.i.i.i.i135
+ %1551 = ptrtoint [1024 x i8]* %outbuf.i.i.i.i to i64
+ %.not10.i.i.i.i.i = icmp ugt i32 %1549, 1024
+ %1552 = trunc i65 %1548 to i64
+ %.sroa.2.8.insert.ext.i.i.i.i.i.i = and i64 %1552, 4294967295
%.fca.1.0.insert.i.i.i.i.i.i = insertvalue %"(Slice(UInt8) | Nil)" { i32 850, [2 x i64] poison }, i64 %.sroa.2.8.insert.ext.i.i.i.i.i.i, 1, 0
- %.fca.1.1.insert.i.i.i.i.i.i = insertvalue %"(Slice(UInt8) | Nil)" %.fca.1.0.insert.i.i.i.i.i.i, i64 %1516, 1, 1
- %common.ret.op.i.i.i.i.i.i114 = select i1 %.not10.i.i.i.i.i, %"(Slice(UInt8) | Nil)" zeroinitializer, %"(Slice(UInt8) | Nil)" %.fca.1.1.insert.i.i.i.i.i.i
- %oldret1.i.i.i.i.i.i = extractvalue %"(Slice(UInt8) | Nil)" %common.ret.op.i.i.i.i.i.i114, 0
- %oldret3.i.i.i.i.i.i = extractvalue %"(Slice(UInt8) | Nil)" %common.ret.op.i.i.i.i.i.i114, 1
- %.fca.1.0.extract.i.i.i.i.i115 = extractvalue [2 x i64] %oldret3.i.i.i.i.i.i, 0
+ %.fca.1.1.insert.i.i.i.i.i.i = insertvalue %"(Slice(UInt8) | Nil)" %.fca.1.0.insert.i.i.i.i.i.i, i64 %1551, 1, 1
+ %common.ret.op.i.i.i.i.i.i137 = select i1 %.not10.i.i.i.i.i, %"(Slice(UInt8) | Nil)" zeroinitializer, %"(Slice(UInt8) | Nil)" %.fca.1.1.insert.i.i.i.i.i.i
+ %oldret1.i.i.i.i.i.i = extractvalue %"(Slice(UInt8) | Nil)" %common.ret.op.i.i.i.i.i.i137, 0
+ %oldret3.i.i.i.i.i.i = extractvalue %"(Slice(UInt8) | Nil)" %common.ret.op.i.i.i.i.i.i137, 1
+ %.fca.1.0.extract.i.i.i.i.i = extractvalue [2 x i64] %oldret3.i.i.i.i.i.i, 0
%.not.i21.i.i.i.i = icmp eq i32 %oldret1.i.i.i.i.i.i, 0
br i1 %.not.i21.i.i.i.i, label %else.i23.i.i.i.i, label %"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8).exit.i.i.i.i"
else.i23.i.i.i.i: ; preds = %normal.i.i.i.i
- %1518 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
- call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %1518)
+ %1553 = call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %1553)
unreachable
"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8).exit.i.i.i.i": ; preds = %normal.i.i.i.i
- %1519 = bitcast i8* %1158 to %TCPSocket*
- %1520 = and i64 %.fca.1.0.extract.i.i.i.i.i115, 4294967296
- %1521 = icmp ne i64 %1520, 0
- %__temp_89.sroa.2.8.extract.trunc.i.i.i.i.i = trunc i64 %.fca.1.0.extract.i.i.i.i.i115 to i32
- %.fca.1.1.extract.i.i.i.i.i116 = extractvalue [2 x i64] %oldret3.i.i.i.i.i.i, 1
- %1522 = inttoptr i64 %.fca.1.1.extract.i.i.i.i.i116 to i8*
+ %1554 = bitcast i8* %1199 to %TCPSocket*
+ %1555 = and i64 %.fca.1.0.extract.i.i.i.i.i, 4294967296
+ %1556 = icmp ne i64 %1555, 0
+ %__temp_89.sroa.2.8.extract.trunc.i.i.i.i.i = trunc i64 %.fca.1.0.extract.i.i.i.i.i to i32
+ %.fca.1.1.extract.i.i.i.i.i = extractvalue [2 x i64] %oldret3.i.i.i.i.i.i, 1
+ %1557 = inttoptr i64 %.fca.1.1.extract.i.i.i.i.i to i8*
%oldret.i.i.i.i = insertvalue %"Slice(UInt8)" undef, i32 %__temp_89.sroa.2.8.extract.trunc.i.i.i.i.i, 0
- %oldret9.i.i.i.i = insertvalue %"Slice(UInt8)" %oldret.i.i.i.i, i1 %1521, 1
- %oldret11.i.i.i.i = insertvalue %"Slice(UInt8)" %oldret9.i.i.i.i, i8* %1522, 2
- call fastcc void @"*TCPSocket@IO::Buffered#write<Slice(UInt8)>:Nil"(%TCPSocket* %1519, %"Slice(UInt8)" %oldret11.i.i.i.i)
+ %oldret9.i.i.i.i = insertvalue %"Slice(UInt8)" %oldret.i.i.i.i, i1 %1556, 1
+ %oldret11.i.i.i.i = insertvalue %"Slice(UInt8)" %oldret9.i.i.i.i, i8* %1557, 2
+ call fastcc void @"*TCPSocket@IO::Buffered#write<Slice(UInt8)>:Nil"(%TCPSocket* %1554, %"Slice(UInt8)" %oldret11.i.i.i.i)
%.pr.i.i.i.i = load i64, i64* %inbytesleft.i.i.i.i, align 8
%.not.i13.i.i.i = icmp eq i64 %.pr.i.i.i.i, 0
br i1 %.not.i13.i.i.i, label %"*IO::Encoder#write<TCPSocket, Slice(UInt8)>:Nil.exit.i.i.i", label %body.i.i.i.i
"*IO::Encoder#write<TCPSocket, Slice(UInt8)>:Nil.exit.i.i.i": ; preds = %"*Slice(UInt8)@Slice(T)#[]<Int32, Int32>:Slice(UInt8).exit.i.i.i.i"
- %1523 = bitcast i64* %outbytesleft.i.i.i.i to i8*
- %1524 = bitcast i8** %outbuf_ptr.i.i.i.i to i8*
- %1525 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
- %1526 = bitcast i64* %inbytesleft.i.i.i.i to i8*
- %1527 = bitcast i8** %1 to i8*
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1527)
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1526)
- call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %1525)
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1524)
- call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1523)
+ %1558 = bitcast i64* %outbytesleft.i.i.i.i to i8*
+ %1559 = bitcast i8** %outbuf_ptr.i.i.i.i to i8*
+ %1560 = bitcast [1024 x i8]* %outbuf.i.i.i.i to i8*
+ %1561 = bitcast i64* %inbytesleft.i.i.i.i to i8*
+ %1562 = bitcast i8** %1 to i8*
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1562)
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1561)
+ call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %1560)
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1559)
+ call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %1558)
br label %"*TCPSocket@IO#<<<String>:TCPSocket.exit"
-else.i.i.i117: ; preds = %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
- %1528 = bitcast i8* %1158 to %TCPSocket*
- call fastcc void @"*TCPSocket@IO::Buffered#write<Slice(UInt8)>:Nil"(%TCPSocket* nonnull %1528, %"Slice(UInt8)" { i32 8, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [9 x i8] }, { i32, i32, i32, [9 x i8] }* @"'message\0A'", i64 0, i32 3, i64 0) })
+else.i.i.i138: ; preds = %"*TCPSocket::new<String, Int32>:TCPSocket.exit"
+ %1563 = bitcast i8* %1199 to %TCPSocket*
+ call fastcc void @"*TCPSocket@IO::Buffered#write<Slice(UInt8)>:Nil"(%TCPSocket* nonnull %1563, %"Slice(UInt8)" { i32 8, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [9 x i8] }, { i32, i32, i32, [9 x i8] }* @"'message\0A'", i64 0, i32 3, i64 0) })
br label %"*TCPSocket@IO#<<<String>:TCPSocket.exit"
-"*TCPSocket@IO#<<<String>:TCPSocket.exit": ; preds = %"*IO::Encoder#write<TCPSocket, Slice(UInt8)>:Nil.exit.i.i.i", %else.i.i.i117
- %1529 = bitcast i8* %1158 to %TCPSocket*
- ret %TCPSocket* %1529
+"*TCPSocket@IO#<<<String>:TCPSocket.exit": ; preds = %"*IO::Encoder#write<TCPSocket, Slice(UInt8)>:Nil.exit.i.i.i", %else.i.i.i138
+ %1564 = bitcast i8* %1199 to %TCPSocket*
+ ret %TCPSocket* %1564
}
; Function Attrs: nofree nounwind
@@ -5455,8 +5497,119 @@ entry:
; Function Attrs: uwtable
define void @__crystal_once(i8* nocapture readonly %state, i1* %flag, i8* nocapture readonly %initializer) local_unnamed_addr #1 {
alloca:
- %0 = bitcast i8* %state to %"Crystal::OnceState"*
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %0, i1* %flag, i8* %initializer)
+ %0 = load i1, i1* %flag, align 1
+ br i1 %0, label %"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil).exit", label %else.i
+
+else.i: ; preds = %alloca
+ %1 = getelementptr inbounds i8, i8* %state, i64 8
+ %2 = bitcast i8* %1 to %"Array(Pointer(Bool))"**
+ %3 = load %"Array(Pointer(Bool))"*, %"Array(Pointer(Bool))"** %2, align 8
+ %4 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %3, i64 0, i32 1
+ %5 = load i32, i32* %4, align 4
+ %6 = zext i32 %5 to i64
+ %7 = icmp sgt i32 %5, 0
+ br i1 %7, label %body.lr.ph.i, label %else2.i
+
+body.lr.ph.i: ; preds = %else.i
+ %self.idx.i = getelementptr %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %3, i64 0, i32 4
+ %self.idx.val.i = load i1**, i1*** %self.idx.i, align 8
+ %8 = load i1*, i1** %self.idx.val.i, align 8
+ %9 = icmp eq i1* %8, %flag
+ br i1 %9, label %then1.i, label %while.i.preheader
+
+while.i.preheader: ; preds = %body.lr.ph.i
+ %10 = add nsw i64 %6, -1
+ br label %while.i
+
+while.i: ; preds = %while.i.preheader, %body.i
+ %lsr.iv = phi i64 [ 0, %while.i.preheader ], [ %lsr.iv.next, %body.i ]
+ %exitcond.not.i = icmp eq i64 %10, %lsr.iv
+ br i1 %exitcond.not.i, label %else2.i, label %body.i
+
+body.i: ; preds = %while.i
+ %sunkaddr = mul i64 %lsr.iv, 8
+ %11 = bitcast i1** %self.idx.val.i to i8*
+ %sunkaddr87 = getelementptr i8, i8* %11, i64 %sunkaddr
+ %sunkaddr88 = getelementptr i8, i8* %sunkaddr87, i64 8
+ %12 = bitcast i8* %sunkaddr88 to i1**
+ %13 = load i1*, i1** %12, align 8
+ %14 = icmp eq i1* %13, %flag
+ %lsr.iv.next = add nuw nsw i64 %lsr.iv, 1
+ br i1 %14, label %"*Array(Pointer(Bool))@Enumerable(T)#includes?<Pointer(Bool)>:Bool.exit", label %while.i
+
+"*Array(Pointer(Bool))@Enumerable(T)#includes?<Pointer(Bool)>:Bool.exit": ; preds = %body.i
+ %15 = icmp ult i64 %lsr.iv.next, %6
+ br i1 %15, label %then1.i, label %else2.i
+
+then1.i: ; preds = %body.lr.ph.i, %"*Array(Pointer(Bool))@Enumerable(T)#includes?<Pointer(Bool)>:Bool.exit"
+ tail call fastcc void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [62 x i8] }* @"'Recursion while ini...'" to %String*))
+ unreachable
+
+else2.i: ; preds = %while.i, %else.i, %"*Array(Pointer(Bool))@Enumerable(T)#includes?<Pointer(Bool)>:Bool.exit"
+ tail call fastcc void @"*Array(Pointer(Bool))@Array(T)#<<<Pointer(Bool)>:Array(Pointer(Bool))"(%"Array(Pointer(Bool))"* %3, i1* nonnull %flag)
+ %16 = bitcast i8* %initializer to %Nil ()*
+ %17 = tail call %Nil %16()
+ store i1 true, i1* %flag, align 1
+ %sunkaddr89 = getelementptr inbounds i8, i8* %state, i64 8
+ %18 = bitcast i8* %sunkaddr89 to %"Array(Pointer(Bool))"**
+ %19 = load %"Array(Pointer(Bool))"*, %"Array(Pointer(Bool))"** %18, align 8
+ %20 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %19, i64 0, i32 1
+ %21 = load i32, i32* %20, align 4
+ %22 = icmp eq i32 %21, 0
+ br i1 %22, label %then.i, label %else.i1
+
+then.i: ; preds = %else2.i
+ %23 = tail call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ tail call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %23)
+ unreachable
+
+else.i1: ; preds = %else2.i
+ %24 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %21, i32 -1)
+ %25 = extractvalue { i32, i1 } %24, 0
+ %26 = extractvalue { i32, i1 } %24, 1
+ br i1 %26, label %overflow.i, label %normal.i, !prof !0
+
+overflow.i: ; preds = %else.i1
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+normal.i: ; preds = %else.i1
+ %27 = bitcast %"Array(Pointer(Bool))"* %19 to i8*
+ %sunkaddr90 = getelementptr inbounds i8, i8* %27, i64 4
+ %28 = bitcast i8* %sunkaddr90 to i32*
+ store i32 %25, i32* %28, align 4
+ %29 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %19, i64 0, i32 4
+ %30 = load i1**, i1*** %29, align 8
+ %31 = sext i32 %25 to i64
+ %32 = getelementptr inbounds i1*, i1** %30, i64 %31
+ %33 = bitcast i1** %32 to i64*
+ store i64 0, i64* %33, align 1
+ %self.idx.val.i2 = load i32, i32* %28, align 4
+ %34 = icmp eq i32 %self.idx.val.i2, 0
+ br i1 %34, label %then3.i, label %"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil).exit"
+
+"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i": ; preds = %then3.i
+ %35 = sub nsw i64 0, %44
+ %36 = bitcast %"Array(Pointer(Bool))"* %19 to i8*
+ %sunkaddr91 = getelementptr inbounds i8, i8* %36, i64 16
+ %37 = bitcast i8* %sunkaddr91 to i1***
+ %38 = load i1**, i1*** %37, align 8
+ %39 = getelementptr inbounds i1*, i1** %38, i64 %35
+ store i1** %39, i1*** %37, align 8
+ %40 = bitcast %"Array(Pointer(Bool))"* %19 to i8*
+ %sunkaddr92 = getelementptr inbounds i8, i8* %40, i64 12
+ %41 = bitcast i8* %sunkaddr92 to i32*
+ store i32 0, i32* %41, align 4
+ br label %"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil).exit"
+
+then3.i: ; preds = %normal.i
+ %42 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %19, i64 0, i32 3
+ %43 = load i32, i32* %42, align 4
+ %44 = sext i32 %43 to i64
+ %.not.i = icmp eq i32 %43, 0
+ br i1 %.not.i, label %"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil).exit", label %"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i"
+
+"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil).exit": ; preds = %then3.i, %"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i", %normal.i, %alloca
ret void
}
@@ -6449,8 +6602,8 @@ entry:
}
; Function Attrs: uwtable
-define internal fastcc %"Array(String)"* @"*Array(String)@Array(T)#push<String>:Array(String)"(%"Array(String)"* returned %self, %String* %value) unnamed_addr #1 {
-entry:
+define internal fastcc void @"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil)"(%"Array(String)"* nocapture %self) unnamed_addr #1 {
+alloca:
%0 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i64 0, i32 1
%1 = load i32, i32* %0, align 4
%2 = zext i32 %1 to i64
@@ -6462,35 +6615,38 @@ entry:
%8 = sext i32 %6 to i64
%9 = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %4, i32 %6)
%10 = extractvalue { i32, i1 } %9, 1
- br i1 %10, label %overflow.i.i, label %"*Array(String)@Array(T)#needs_resize?:Bool.exit", !prof !0
+ br i1 %10, label %overflow.i, label %"*Array(String)@Array(T)#remaining_capacity:Int32.exit", !prof !0
-overflow.i.i: ; preds = %entry
+overflow.i: ; preds = %alloca
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(String)@Array(T)#needs_resize?:Bool.exit": ; preds = %entry
+"*Array(String)@Array(T)#remaining_capacity:Int32.exit": ; preds = %alloca
%11 = trunc i64 %2 to i32
%12 = extractvalue { i32, i1 } %9, 0
%13 = icmp eq i32 %11, %12
- br i1 %13, label %exit.i, label %"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit"
+ br i1 %13, label %exit, label %common.ret
-exit.i: ; preds = %"*Array(String)@Array(T)#needs_resize?:Bool.exit"
- %.not.i = icmp eq i32 %4, 0
- br i1 %.not.i, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread", label %then5.i
+common.ret: ; preds = %"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit", %"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String).exit", %"*Array(String)@Array(T)#remaining_capacity:Int32.exit"
+ ret void
-then1.i: ; preds = %then3.i
+exit: ; preds = %"*Array(String)@Array(T)#remaining_capacity:Int32.exit"
+ %.not = icmp eq i32 %4, 0
+ br i1 %.not, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread", label %then5
+
+then1: ; preds = %then3
%14 = trunc i64 %2 to i32
%15 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i64 0, i32 4
%16 = load %String**, %String*** %15, align 8
%17 = icmp slt i32 %14, 0
- br i1 %17, label %then.i, label %"*Pointer(String)@Pointer(T)#copy_from_impl<Pointer(String), Int32>:Pointer(String).exit"
+ br i1 %17, label %then.i.i, label %"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit14"
-then.i: ; preds = %then1.i
+then.i.i: ; preds = %then1
%18 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [15 x i8] }* @"'Negative count'" to %String*))
tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %18)
unreachable
-"*Pointer(String)@Pointer(T)#copy_from_impl<Pointer(String), Int32>:Pointer(String).exit": ; preds = %then1.i
+"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit14": ; preds = %then1
%19 = shl nuw nsw i64 %2, 3
%20 = bitcast %String** %16 to i8*
%21 = sub nsw i64 0, %8
@@ -6504,205 +6660,178 @@ then.i: ; preds = %then1.i
%27 = sext i32 %26 to i64
%28 = sub nsw i64 0, %27
%29 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr27 = getelementptr inbounds i8, i8* %29, i64 16
- %30 = bitcast i8* %sunkaddr27 to %String***
+ %sunkaddr30 = getelementptr inbounds i8, i8* %29, i64 16
+ %30 = bitcast i8* %sunkaddr30 to %String***
%31 = load %String**, %String*** %30, align 8
%32 = getelementptr inbounds %String*, %String** %31, i64 %28
%33 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr28 = getelementptr inbounds i8, i8* %33, i64 4
- %34 = bitcast i8* %sunkaddr28 to i32*
+ %sunkaddr31 = getelementptr inbounds i8, i8* %33, i64 4
+ %34 = bitcast i8* %sunkaddr31 to i32*
%35 = load i32, i32* %34, align 4
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds %String*, %String** %32, i64 %36
%38 = icmp slt i32 %26, 0
- br i1 %38, label %overflow.i.i1, label %normal2.i.i, !prof !0
+ br i1 %38, label %overflow.i4, label %normal2.i, !prof !0
-overflow.i.i1: ; preds = %"*Pointer(String)@Pointer(T)#copy_from_impl<Pointer(String), Int32>:Pointer(String).exit"
+overflow.i4: ; preds = %"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit14"
tail call void @__crystal_raise_overflow()
unreachable
-normal2.i.i: ; preds = %"*Pointer(String)@Pointer(T)#copy_from_impl<Pointer(String), Int32>:Pointer(String).exit"
+normal2.i: ; preds = %"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit14"
%39 = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %27, i64 8)
%40 = extractvalue { i64, i1 } %39, 1
- br i1 %40, label %overflow3.i.i, label %"*Pointer(String)@Pointer(T)#clear<Int32>:Nil.exit", !prof !0
+ br i1 %40, label %overflow3.i, label %"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit", !prof !0
-overflow3.i.i: ; preds = %normal2.i.i
+overflow3.i: ; preds = %normal2.i
tail call void @__crystal_raise_overflow()
unreachable
-"*Pointer(String)@Pointer(T)#clear<Int32>:Nil.exit": ; preds = %normal2.i.i
+"*Pointer(String)@Pointer(T)#bytesize<Int32>:UInt64.exit": ; preds = %normal2.i
%41 = bitcast %String** %37 to i8*
%42 = extractvalue { i64, i1 } %39, 0
tail call void @llvm.memset.p0i8.i64(i8* align 1 %41, i8 0, i64 %42, i1 false)
%43 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr29 = getelementptr inbounds i8, i8* %43, i64 12
- %44 = bitcast i8* %sunkaddr29 to i32*
+ %sunkaddr32 = getelementptr inbounds i8, i8* %43, i64 12
+ %44 = bitcast i8* %sunkaddr32 to i32*
%45 = load i32, i32* %44, align 4
%46 = sext i32 %45 to i64
%47 = sub nsw i64 0, %46
%48 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr30 = getelementptr inbounds i8, i8* %48, i64 16
- %49 = bitcast i8* %sunkaddr30 to %String***
+ %sunkaddr33 = getelementptr inbounds i8, i8* %48, i64 16
+ %49 = bitcast i8* %sunkaddr33 to %String***
%50 = load %String**, %String*** %49, align 8
%51 = getelementptr inbounds %String*, %String** %50, i64 %47
store %String** %51, %String*** %49, align 8
store i32 0, i32* %44, align 4
- br label %"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit"
+ br label %common.ret
-else.i.i: ; preds = %then5.i, %then3.i
+else.i: ; preds = %then5, %then3
%52 = icmp slt i32 %4, 256
- br i1 %52, label %then1.i.i, label %normal4.i.i
+ br i1 %52, label %then1.i, label %normal4.i
-then1.i.i: ; preds = %else.i.i
+then1.i: ; preds = %else.i
%53 = tail call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %4, i32 2)
%54 = extractvalue { i32, i1 } %53, 1
- br i1 %54, label %overflow.i.i2, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i", !prof !0
+ br i1 %54, label %overflow.i5, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit", !prof !0
-overflow.i.i2: ; preds = %then1.i.i
+overflow.i5: ; preds = %then1.i
tail call void @__crystal_raise_overflow()
unreachable
-normal4.i.i: ; preds = %else.i.i
+normal4.i: ; preds = %else.i
%55 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %4, i32 768)
%56 = extractvalue { i32, i1 } %55, 1
- br i1 %56, label %overflow5.i.i, label %normal6.i.i, !prof !0
+ br i1 %56, label %overflow5.i, label %normal6.i, !prof !0
-overflow5.i.i: ; preds = %normal4.i.i
+overflow5.i: ; preds = %normal4.i
tail call void @__crystal_raise_overflow()
unreachable
-normal6.i.i: ; preds = %normal4.i.i
+normal6.i: ; preds = %normal4.i
%57 = extractvalue { i32, i1 } %55, 0
%58 = lshr i32 %57, 2
%59 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %4, i32 %58)
%60 = extractvalue { i32, i1 } %59, 1
- br i1 %60, label %overflow7.i.i, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i", !prof !0
+ br i1 %60, label %overflow7.i, label %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit", !prof !0
-overflow7.i.i: ; preds = %normal6.i.i
+overflow7.i: ; preds = %normal6.i
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i": ; preds = %normal6.i.i, %then1.i.i
- %.pn = phi { i32, i1 } [ %53, %then1.i.i ], [ %59, %normal6.i.i ]
- %common.ret.op.i.i = extractvalue { i32, i1 } %.pn, 0
+"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit": ; preds = %then1.i, %normal6.i
+ %.pn = phi { i32, i1 } [ %53, %then1.i ], [ %59, %normal6.i ]
+ %common.ret.op.i = extractvalue { i32, i1 } %.pn, 0
%61 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr31 = getelementptr inbounds i8, i8* %61, i64 8
- %62 = bitcast i8* %sunkaddr31 to i32*
- store i32 %common.ret.op.i.i, i32* %62, align 4
+ %sunkaddr34 = getelementptr inbounds i8, i8* %61, i64 8
+ %62 = bitcast i8* %sunkaddr34 to i32*
+ store i32 %common.ret.op.i, i32* %62, align 4
%63 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i64 0, i32 4
%64 = load %String**, %String*** %63, align 8
- %.not.i.i = icmp eq %String** %64, null
- br i1 %.not.i.i, label %else.i1.i, label %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit"
+ %.not.i = icmp eq %String** %64, null
+ br i1 %.not.i, label %else.i9, label %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18"
-"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread": ; preds = %exit.i
+"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread": ; preds = %exit
%65 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr32 = getelementptr inbounds i8, i8* %65, i64 8
- %66 = bitcast i8* %sunkaddr32 to i32*
+ %sunkaddr35 = getelementptr inbounds i8, i8* %65, i64 8
+ %66 = bitcast i8* %sunkaddr35 to i32*
store i32 3, i32* %66, align 4
%67 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i64 0, i32 4
%68 = load %String**, %String*** %67, align 8
- %.not.i.i18 = icmp eq %String** %68, null
- br i1 %.not.i.i18, label %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit", label %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread"
+ %.not.i20 = icmp eq %String** %68, null
+ br i1 %.not.i20, label %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i", label %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread"
-"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread"
+"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread"
%69 = trunc i64 %8 to i32
%70 = sext i32 %69 to i64
%71 = sub nsw i64 0, %70
%72 = getelementptr inbounds %String*, %String** %68, i64 %71
- br label %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit"
+ br label %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i"
-"*Array(String)@Array(T)#root_buffer:Pointer(String).exit": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i"
+"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit"
%73 = sub nsw i64 0, %7
%74 = getelementptr inbounds %String*, %String** %64, i64 %73
- %75 = icmp slt i32 %common.ret.op.i.i, 0
- br i1 %75, label %then.i13, label %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit"
+ %75 = icmp slt i32 %common.ret.op.i, 0
+ br i1 %75, label %then.i.i8, label %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i"
-then.i13: ; preds = %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit"
+then.i.i8: ; preds = %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18"
%76 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*))
tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %76)
unreachable
-"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit": ; preds = %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread", %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit"
- %77 = phi %String** [ %72, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread" ], [ %74, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit" ]
- %78 = phi %String*** [ %67, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread" ], [ %63, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit" ]
- %common.ret.op.i.i202426 = phi i32 [ 3, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit.thread" ], [ %common.ret.op.i.i, %"*Array(String)@Array(T)#root_buffer:Pointer(String).exit" ]
- %79 = zext i32 %common.ret.op.i.i202426 to i64
+"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i": ; preds = %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread", %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18"
+ %77 = phi %String** [ %72, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread" ], [ %74, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18" ]
+ %78 = phi %String*** [ %67, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread" ], [ %63, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18" ]
+ %common.ret.op.i222628 = phi i32 [ 3, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18.thread" ], [ %common.ret.op.i, %"*Pointer(String)@Pointer(T)#-<Int32>:Pointer(String).exit18" ]
+ %79 = zext i32 %common.ret.op.i222628 to i64
%80 = bitcast %String** %77 to i8*
%81 = shl nuw nsw i64 %79, 3
%82 = tail call i8* @GC_realloc(i8* %80, i64 %81)
%83 = bitcast i8* %82 to %String**
%84 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr33 = getelementptr inbounds i8, i8* %84, i64 12
- %85 = bitcast i8* %sunkaddr33 to i32*
+ %sunkaddr36 = getelementptr inbounds i8, i8* %84, i64 12
+ %85 = bitcast i8* %sunkaddr36 to i32*
%86 = load i32, i32* %85, align 4
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds %String*, %String** %83, i64 %87
- br label %"*Array(String)@Array(T)#increase_capacity:Pointer(String).exit"
+ br label %"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String).exit"
-else.i1.i: ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i"
- %89 = icmp slt i32 %common.ret.op.i.i, 0
- br i1 %89, label %then.i15, label %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit"
+else.i9: ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit"
+ %89 = icmp slt i32 %common.ret.op.i, 0
+ br i1 %89, label %then.i1.i, label %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i"
-then.i15: ; preds = %else.i1.i
+then.i1.i: ; preds = %else.i9
%90 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [29 x i8] }* @"'Negative Pointer#ma...'" to %String*))
tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %90)
unreachable
-"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread", %else.i1.i
- %common.ret.op.i.i1922 = phi i32 [ %common.ret.op.i.i, %else.i1.i ], [ 3, %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread" ]
- %91 = phi %String*** [ %63, %else.i1.i ], [ %67, %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.i.thread" ]
- %92 = zext i32 %common.ret.op.i.i1922 to i64
+"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i": ; preds = %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread", %else.i9
+ %common.ret.op.i2124 = phi i32 [ %common.ret.op.i, %else.i9 ], [ 3, %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread" ]
+ %91 = phi %String*** [ %63, %else.i9 ], [ %67, %"*Array(String)@Array(T)#calculate_new_capacity:Int32.exit.thread" ]
+ %92 = zext i32 %common.ret.op.i2124 to i64
%93 = shl nuw nsw i64 %92, 3
%94 = tail call i8* @GC_malloc(i64 %93)
tail call void @llvm.memset.p0i8.i64(i8* align 4 %94, i8 0, i64 %93, i1 false)
%95 = bitcast i8* %94 to %String**
- br label %"*Array(String)@Array(T)#increase_capacity:Pointer(String).exit"
+ br label %"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String).exit"
-"*Array(String)@Array(T)#increase_capacity:Pointer(String).exit": ; preds = %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit", %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit"
- %96 = phi %String*** [ %91, %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit" ], [ %78, %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit" ]
- %storemerge.i.i = phi %String** [ %95, %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit" ], [ %88, %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit" ]
- store %String** %storemerge.i.i, %String*** %96, align 8
- br label %"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit"
+"*Array(String)@Array(T)#resize_to_capacity<Int32>:Pointer(String).exit": ; preds = %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i", %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i"
+ %96 = phi %String*** [ %91, %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i" ], [ %78, %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i" ]
+ %storemerge.i = phi %String** [ %95, %"*Pointer(String)@Pointer(T)::malloc<Int32>:Pointer(String).exit.i" ], [ %88, %"*Pointer(String)@Pointer(T)#realloc<Int32>:Pointer(String).exit.i" ]
+ store %String** %storemerge.i, %String*** %96, align 8
+ br label %common.ret
-then3.i: ; preds = %then5.i
+then3: ; preds = %then5
%97 = trunc i64 %7 to i32
%98 = sitofp i32 %4 to double
%99 = fmul double %98, 5.000000e-01
%100 = sitofp i32 %97 to double
%101 = fcmp ugt double %99, %100
- br i1 %101, label %else.i.i, label %then1.i
+ br i1 %101, label %else.i, label %then1
-then5.i: ; preds = %exit.i
+then5: ; preds = %exit
%102 = trunc i64 %7 to i32
- %.not = icmp eq i32 %102, 0
- br i1 %.not, label %else.i.i, label %then3.i
-
-"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit": ; preds = %"*Array(String)@Array(T)#needs_resize?:Bool.exit", %"*Pointer(String)@Pointer(T)#clear<Int32>:Nil.exit", %"*Array(String)@Array(T)#increase_capacity:Pointer(String).exit"
- %103 = getelementptr inbounds %"Array(String)", %"Array(String)"* %self, i64 0, i32 4
- %104 = load %String**, %String*** %103, align 8
- %105 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr34 = getelementptr inbounds i8, i8* %105, i64 4
- %106 = bitcast i8* %sunkaddr34 to i32*
- %107 = load i32, i32* %106, align 4
- %108 = sext i32 %107 to i64
- %109 = getelementptr inbounds %String*, %String** %104, i64 %108
- store %String* %value, %String** %109, align 8
- %110 = load i32, i32* %106, align 4
- %111 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %110, i32 1)
- %112 = extractvalue { i32, i1 } %111, 1
- br i1 %112, label %overflow, label %normal, !prof !0
-
-overflow: ; preds = %"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-normal: ; preds = %"*Array(String)@Array(T)#check_needs_resize:(Int32 | Pointer(String) | Nil).exit"
- %113 = extractvalue { i32, i1 } %111, 0
- %114 = bitcast %"Array(String)"* %self to i8*
- %sunkaddr35 = getelementptr inbounds i8, i8* %114, i64 4
- %115 = bitcast i8* %sunkaddr35 to i32*
- store i32 %113, i32* %115, align 4
- ret %"Array(String)"* %self
+ %.not29 = icmp eq i32 %102, 0
+ br i1 %.not29, label %else.i, label %then3
}
define internal void @"~Process::INITIAL_PWD:init"() personality i32 (i32, i32, i64, %"struct.LibUnwind::Exception"*, i8*)* @__crystal_personality {
@@ -6721,7 +6850,7 @@ entry:
call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %.sroa.3.i.sroa.0.i)
call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %.sroa.3.i.sroa.0.i)
call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %.sroa.2.i.i)
- %0 = invoke fastcc %String* @"*Crystal::System::Env::get<String>:(String | Nil)"(%String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'PWD'" to %String*))
+ %0 = invoke fastcc %String* @"*ENV::[]?<String>:(String | Nil)"(%String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'PWD'" to %String*))
to label %.noexc unwind label %rescue
.noexc: ; preds = %entry
@@ -6866,7 +6995,7 @@ then1.i.i.i.i.i.i: ; preds = %else2.i.i.i.i.i
%37 = getelementptr inbounds i8, i8* %33, i64 8
%38 = bitcast i8* %37 to %String**
store %String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*), %String** %38, align 8
- invoke fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* nonnull %34) #29
+ invoke fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* nonnull %34)
to label %.noexc7 unwind label %rescue
.noexc7: ; preds = %.noexc6
@@ -6879,14 +7008,14 @@ normal.i.i.i.i.i: ; preds = %else2.i.i.i.i.i
.noexc8: ; preds = %normal.i.i.i.i.i
%41 = getelementptr inbounds i8, i8* %40, i64 12
- tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %41, i8* nonnull align 1 %1, i64 %30, i1 false) #22
+ tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %41, i8* nonnull align 1 %1, i64 %30, i1 false) #21
%42 = getelementptr inbounds i8, i8* %41, i64 %30
store i8 0, i8* %42, align 1
%43 = icmp ugt i64 %30, 2147483647
br i1 %43, label %overflow24.i.i.i.i.i, label %normal25.i.i.i.i.i, !prof !0
overflow24.i.i.i.i.i: ; preds = %.noexc8
- invoke void @__crystal_raise_overflow() #29
+ invoke void @__crystal_raise_overflow()
to label %.noexc9 unwind label %rescue
.noexc9: ; preds = %overflow24.i.i.i.i.i
@@ -6942,130 +7071,137 @@ next_rescue: ; preds = %rescue
}
; Function Attrs: uwtable
-define internal fastcc %String* @"*Crystal::System::Env::get<String>:(String | Nil)"(%String* nocapture readonly %key) unnamed_addr #1 {
+define internal fastcc %String* @"*ENV::[]?<String>:(String | Nil)"(%String* nocapture readonly %key) unnamed_addr #1 {
+entry:
+ tail call fastcc void @"*String#check_no_null_byte<String>:String"(%String* %key)
+ %0 = getelementptr inbounds %String, %String* %key, i64 0, i32 3
+ %1 = tail call i8* @getenv(i8* nonnull %0)
+ %.not.i.i = icmp eq i8* %1, null
+ br i1 %.not.i.i, label %"*ENV::fetch<String, Nil>:(String | Nil).exit", label %else.i.i
+
+else.i.i: ; preds = %entry
+ %2 = tail call i64 @strlen(i8* noundef nonnull dereferenceable(1) %1)
+ %3 = icmp eq i64 %2, 0
+ br i1 %3, label %"*ENV::fetch<String, Nil>:(String | Nil).exit", label %else2.i.i.i.i
+
+else2.i.i.i.i: ; preds = %else.i.i
+ %4 = icmp ugt i64 %2, 4294967282
+ br i1 %4, label %then1.i.i.i.i.i, label %normal.i.i.i.i
+
+then1.i.i.i.i.i: ; preds = %else2.i.i.i.i
+ %5 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*))
+ tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %5)
+ unreachable
+
+normal.i.i.i.i: ; preds = %else2.i.i.i.i
+ %6 = add nuw nsw i64 %2, 13
+ %7 = tail call i8* @GC_malloc_atomic(i64 %6)
+ %8 = getelementptr inbounds i8, i8* %7, i64 12
+ tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %8, i8* nonnull align 1 %1, i64 %2, i1 false) #21
+ %9 = getelementptr inbounds i8, i8* %8, i64 %2
+ store i8 0, i8* %9, align 1
+ %10 = icmp ugt i64 %2, 2147483647
+ br i1 %10, label %overflow24.i.i.i.i, label %normal25.i.i.i.i, !prof !0
+
+overflow24.i.i.i.i: ; preds = %normal.i.i.i.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+normal25.i.i.i.i: ; preds = %normal.i.i.i.i
+ %11 = trunc i64 %2 to i32
+ %12 = bitcast i8* %7 to %String*
+ %.repack.i.i.i.i = bitcast i8* %7 to i32*
+ store i32 1, i32* %.repack.i.i.i.i, align 4
+ %.repack1.i.i.i.i = getelementptr inbounds i8, i8* %7, i64 4
+ %13 = bitcast i8* %.repack1.i.i.i.i to i32*
+ store i32 %11, i32* %13, align 4
+ %.repack3.i.i.i.i = getelementptr inbounds i8, i8* %7, i64 8
+ %14 = bitcast i8* %.repack3.i.i.i.i to i32*
+ store i32 0, i32* %14, align 4
+ br label %"*ENV::fetch<String, Nil>:(String | Nil).exit"
+
+"*ENV::fetch<String, Nil>:(String | Nil).exit": ; preds = %entry, %else.i.i, %normal25.i.i.i.i
+ %15 = phi %String* [ null, %entry ], [ %12, %normal25.i.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else.i.i ]
+ ret %String* %15
+}
+
+; Function Attrs: uwtable
+define internal fastcc void @"*String#check_no_null_byte<String>:String"(%String* nocapture readonly %self) unnamed_addr #1 {
alloca:
- %0 = getelementptr inbounds %String, %String* %key, i64 0, i32 1
+ %0 = getelementptr inbounds %String, %String* %self, i64 0, i32 1
%1 = load i32, i32* %0, align 4
%2 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %1, i32 -1)
%3 = extractvalue { i32, i1 } %2, 0
%4 = extractvalue { i32, i1 } %2, 1
- br i1 %4, label %overflow4.i.i.i, label %normal5.i.i.i, !prof !0
+ br i1 %4, label %overflow4.i, label %normal5.i, !prof !0
-overflow4.i.i.i: ; preds = %alloca
+overflow4.i: ; preds = %alloca
tail call void @__crystal_raise_overflow()
unreachable
-normal5.i.i.i: ; preds = %alloca
+normal5.i: ; preds = %alloca
%5 = icmp sgt i32 %3, -1
- br i1 %5, label %while.i.i.i.preheader, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
+ br i1 %5, label %while.i.preheader, label %"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit"
-while.i.i.i.preheader: ; preds = %normal5.i.i.i
- %6 = getelementptr inbounds %String, %String* %key, i64 0, i32 3
+while.i.preheader: ; preds = %normal5.i
+ %6 = getelementptr inbounds %String, %String* %self, i64 0, i32 3
%7 = load i8, i8* %6, align 1
%8 = icmp eq i8 %7, 0
- br i1 %8, label %then10.i.i.i, label %else11.i.i.i.preheader
+ br i1 %8, label %then10.i, label %else11.i.preheader
-else11.i.i.i.preheader: ; preds = %while.i.i.i.preheader
- br label %else11.i.i.i
+else11.i.preheader: ; preds = %while.i.preheader
+ br label %else11.i
-while.i.i.i.then10.i.i.i_crit_edge: ; preds = %normal15.i.i.i
+while.i.then10.i_crit_edge: ; preds = %normal15.i
%9 = extractvalue { i32, i1 } %11, 0
%phi.cast = zext i32 %9 to i64
- br label %then10.i.i.i
+ br label %then10.i
-then10.i.i.i: ; preds = %while.i.i.i.then10.i.i.i_crit_edge, %while.i.i.i.preheader
- %x.0.i.i.i.lcssa = phi i64 [ %phi.cast, %while.i.i.i.then10.i.i.i_crit_edge ], [ 0, %while.i.i.i.preheader ]
- %.fca.1.0.insert18.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.i.i.lcssa, 1, 0
- br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
+then10.i: ; preds = %while.i.then10.i_crit_edge, %while.i.preheader
+ %x.0.i.lcssa = phi i64 [ %phi.cast, %while.i.then10.i_crit_edge ], [ 0, %while.i.preheader ]
+ %.fca.1.0.insert18.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.lcssa, 1, 0
+ br label %"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit"
-else11.i.i.i: ; preds = %else11.i.i.i.preheader, %normal15.i.i.i
- %lsr.iv = phi i32 [ 0, %else11.i.i.i.preheader ], [ %lsr.iv.next, %normal15.i.i.i ]
+else11.i: ; preds = %else11.i.preheader, %normal15.i
+ %lsr.iv = phi i32 [ 0, %else11.i.preheader ], [ %lsr.iv.next, %normal15.i ]
%10 = icmp eq i32 %3, %lsr.iv
- br i1 %10, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i", label %else13.i.i.i
+ br i1 %10, label %"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit", label %else13.i
-else13.i.i.i: ; preds = %else11.i.i.i
+else13.i: ; preds = %else11.i
%11 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %lsr.iv, i32 1)
%12 = extractvalue { i32, i1 } %11, 1
- br i1 %12, label %overflow14.i.i.i, label %normal15.i.i.i, !prof !0
+ br i1 %12, label %overflow14.i, label %normal15.i, !prof !0
-overflow14.i.i.i: ; preds = %else13.i.i.i
+overflow14.i: ; preds = %else13.i
tail call void @__crystal_raise_overflow()
unreachable
-normal15.i.i.i: ; preds = %else13.i.i.i
+normal15.i: ; preds = %else13.i
%13 = extractvalue { i32, i1 } %11, 0
%14 = sext i32 %13 to i64
- %15 = bitcast %String* %key to i8*
+ %15 = bitcast %String* %self to i8*
%sunkaddr = getelementptr inbounds i8, i8* %15, i64 %14
- %sunkaddr26 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
- %16 = load i8, i8* %sunkaddr26, align 1
+ %sunkaddr100 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
+ %16 = load i8, i8* %sunkaddr100, align 1
%17 = icmp eq i8 %16, 0
%lsr.iv.next = add nuw i32 %lsr.iv, 1
- br i1 %17, label %while.i.i.i.then10.i.i.i_crit_edge, label %else11.i.i.i
+ br i1 %17, label %while.i.then10.i_crit_edge, label %else11.i
-"*String#byte_index<Int32>:(Int32 | Nil).exit.i": ; preds = %else11.i.i.i, %then10.i.i.i, %normal5.i.i.i
- %common.ret.op.i.i.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i, %then10.i.i.i ], [ zeroinitializer, %normal5.i.i.i ], [ zeroinitializer, %else11.i.i.i ]
- %oldret.i.i.i = extractvalue %"(Int32 | Nil)" %common.ret.op.i.i.i, 0
- %.not.i = icmp eq i32 %oldret.i.i.i, 0
- br i1 %.not.i, label %"*String#check_no_null_byte<String>:String.exit", label %then.i
+"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit": ; preds = %else11.i, %normal5.i, %then10.i
+ %common.ret.op.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i, %then10.i ], [ zeroinitializer, %normal5.i ], [ zeroinitializer, %else11.i ]
+ %oldret.i = extractvalue %"(Int32 | Nil)" %common.ret.op.i, 0
+ %.not = icmp eq i32 %oldret.i, 0
+ br i1 %.not, label %else, label %then
-then.i: ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
+then: ; preds = %"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit"
%18 = tail call fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'`'" to %String*), %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"'key'" to %String*), %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"'` '" to %String*))
%19 = tail call fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* bitcast ({ i32, i32, i32, [8 x i8] }* @"'String '" to %String*), %String* %18, %String* bitcast ({ i32, i32, i32, [19 x i8] }* @"'contains null byte'" to %String*))
%20 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* %19)
tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %20)
unreachable
-"*String#check_no_null_byte<String>:String.exit": ; preds = %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
- %21 = getelementptr inbounds %String, %String* %key, i64 0, i32 3
- %22 = tail call i8* @getenv(i8* nonnull %21)
- %.not = icmp eq i8* %22, null
- br i1 %.not, label %exit, label %else.i
-
-else.i: ; preds = %"*String#check_no_null_byte<String>:String.exit"
- %23 = tail call i64 @strlen(i8* noundef nonnull dereferenceable(1) %22)
- %24 = icmp eq i64 %23, 0
- br i1 %24, label %exit, label %else2.i.i.i
-
-else2.i.i.i: ; preds = %else.i
- %25 = icmp ugt i64 %23, 4294967282
- br i1 %25, label %then1.i.i.i.i, label %normal.i.i.i
-
-then1.i.i.i.i: ; preds = %else2.i.i.i
- %26 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [17 x i8] }* @"'Capacity too big'" to %String*))
- tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %26)
- unreachable
-
-normal.i.i.i: ; preds = %else2.i.i.i
- %27 = add nuw nsw i64 %23, 13
- %28 = tail call i8* @GC_malloc_atomic(i64 %27)
- %29 = getelementptr inbounds i8, i8* %28, i64 12
- tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %29, i8* nonnull align 1 %22, i64 %23, i1 false) #22
- %30 = getelementptr inbounds i8, i8* %29, i64 %23
- store i8 0, i8* %30, align 1
- %31 = icmp ugt i64 %23, 2147483647
- br i1 %31, label %overflow24.i.i.i, label %normal25.i.i.i, !prof !0
-
-overflow24.i.i.i: ; preds = %normal.i.i.i
- tail call void @__crystal_raise_overflow()
- unreachable
-
-normal25.i.i.i: ; preds = %normal.i.i.i
- %32 = trunc i64 %23 to i32
- %33 = bitcast i8* %28 to %String*
- %.repack.i.i.i = bitcast i8* %28 to i32*
- store i32 1, i32* %.repack.i.i.i, align 4
- %.repack1.i.i.i = getelementptr inbounds i8, i8* %28, i64 4
- %34 = bitcast i8* %.repack1.i.i.i to i32*
- store i32 %32, i32* %34, align 4
- %.repack3.i.i.i = getelementptr inbounds i8, i8* %28, i64 8
- %35 = bitcast i8* %.repack3.i.i.i to i32*
- store i32 0, i32* %35, align 4
- br label %exit
-
-exit: ; preds = %normal25.i.i.i, %else.i, %"*String#check_no_null_byte<String>:String.exit"
- %36 = phi %String* [ null, %"*String#check_no_null_byte<String>:String.exit" ], [ %33, %normal25.i.i.i ], [ bitcast ({ i32, i32, i32, [1 x i8] }* @"''" to %String*), %else.i ]
- ret %String* %36
+else: ; preds = %"*String#byte_index<Int32, Int32>:(Int32 | Nil).exit"
+ ret void
}
; Function Attrs: uwtable
@@ -7184,14 +7320,14 @@ then.i.i.i: ; preds = %normal36
%46 = getelementptr inbounds %String, %String* %__temp_105, i64 0, i32 3
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %39, i8* nonnull align 1 %46, i64 %43, i1 false)
%47 = bitcast %String* %__temp_105 to i8*
- %sunkaddr140 = getelementptr inbounds i8, i8* %47, i64 4
- %48 = bitcast i8* %sunkaddr140 to i32*
+ %sunkaddr150 = getelementptr inbounds i8, i8* %47, i64 4
+ %48 = bitcast i8* %sunkaddr150 to i32*
%49 = load i32, i32* %48, align 4
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %39, i64 %50
%52 = bitcast %String* %__temp_106 to i8*
- %sunkaddr141 = getelementptr inbounds i8, i8* %52, i64 4
- %53 = bitcast i8* %sunkaddr141 to i32*
+ %sunkaddr151 = getelementptr inbounds i8, i8* %52, i64 4
+ %53 = bitcast i8* %sunkaddr151 to i32*
%54 = load i32, i32* %53, align 4
%55 = zext i32 %54 to i64
%56 = icmp slt i32 %54, 0
@@ -7206,8 +7342,8 @@ then.i.i.i125: ; preds = %"*Pointer(UInt8)@Po
%58 = getelementptr inbounds %String, %String* %__temp_106, i64 0, i32 3
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %51, i8* nonnull align 1 %58, i64 %55, i1 false)
%59 = bitcast %String* %__temp_107 to i8*
- %sunkaddr142 = getelementptr inbounds i8, i8* %59, i64 4
- %60 = bitcast i8* %sunkaddr142 to i32*
+ %sunkaddr152 = getelementptr inbounds i8, i8* %59, i64 4
+ %60 = bitcast i8* %sunkaddr152 to i32*
%61 = load i32, i32* %60, align 4
%62 = zext i32 %61 to i64
%63 = icmp slt i32 %61, 0
@@ -7221,28 +7357,124 @@ then.i.i.i129: ; preds = %"*Pointer(UInt8)@Po
exit43: ; preds = %"*Pointer(UInt8)@Pointer(T)#copy_from<Pointer(UInt8), Int32>:Pointer(UInt8).exit128"
%65 = getelementptr inbounds %String, %String* %__temp_107, i64 0, i32 3
%66 = bitcast %String* %__temp_106 to i8*
- %sunkaddr143 = getelementptr inbounds i8, i8* %66, i64 4
- %67 = bitcast i8* %sunkaddr143 to i32*
+ %sunkaddr153 = getelementptr inbounds i8, i8* %66, i64 4
+ %67 = bitcast i8* %sunkaddr153 to i32*
%68 = load i32, i32* %67, align 4
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %51, i64 %69
- %71 = bitcast i8* %38 to %String*
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %70, i8* nonnull align 1 %65, i64 %62, i1 false)
- %72 = zext i32 %10 to i64
- %sunkaddr144 = getelementptr inbounds i8, i8* %38, i64 %72
- %sunkaddr145 = getelementptr inbounds i8, i8* %sunkaddr144, i64 12
- store i8 0, i8* %sunkaddr145, align 1
- %73 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
- tail call fastcc void @"*Crystal::OnceState#once<Pointer(Bool), Pointer(Void)>:(Pointer(Bool) | Nil)"(%"Crystal::OnceState"* %73, i1* nonnull @"String::TYPE_ID:init", i8* bitcast (void ()* @"~String::TYPE_ID:init" to i8*))
+ %71 = zext i32 %10 to i64
+ %72 = getelementptr inbounds i8, i8* %39, i64 %71
+ store i8 0, i8* %72, align 1
+ %73 = load i1, i1* @"String::TYPE_ID:init", align 1
+ br i1 %73, label %__crystal_once.exit, label %else.i.i
+
+else.i.i: ; preds = %exit43
+ %74 = load %"Crystal::OnceState"*, %"Crystal::OnceState"** bitcast (i8** @"~ONCE_STATE" to %"Crystal::OnceState"**), align 8
+ %75 = getelementptr inbounds %"Crystal::OnceState", %"Crystal::OnceState"* %74, i64 0, i32 1
+ %76 = load %"Array(Pointer(Bool))"*, %"Array(Pointer(Bool))"** %75, align 8
+ %77 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %76, i64 0, i32 1
+ %78 = load i32, i32* %77, align 4
+ %wide.trip.count = zext i32 %78 to i64
+ %79 = icmp sgt i32 %78, 0
+ br i1 %79, label %body.i.lr.ph, label %else2.i.i
+
+body.i.lr.ph: ; preds = %else.i.i
+ %self.idx.i135 = getelementptr %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %76, i64 0, i32 4
+ %self.idx.val.i136 = load i1**, i1*** %self.idx.i135, align 8
+ br label %body.i
+
+while.i: ; preds = %body.i
+ %scevgep = getelementptr i1*, i1** %lsr.iv, i64 1
+ %lsr.iv.next = add nsw i64 %lsr.iv149, -1
+ %exitcond.not = icmp eq i64 %lsr.iv.next, 0
+ br i1 %exitcond.not, label %else2.i.i, label %body.i
+
+body.i: ; preds = %body.i.lr.ph, %while.i
+ %lsr.iv149 = phi i64 [ %wide.trip.count, %body.i.lr.ph ], [ %lsr.iv.next, %while.i ]
+ %lsr.iv = phi i1** [ %self.idx.val.i136, %body.i.lr.ph ], [ %scevgep, %while.i ]
+ %80 = load i1*, i1** %lsr.iv, align 8
+ %81 = icmp eq i1* %80, @"String::TYPE_ID:init"
+ br i1 %81, label %then1.i.i, label %while.i
+
+then1.i.i: ; preds = %body.i
+ tail call fastcc void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [62 x i8] }* @"'Recursion while ini...'" to %String*))
+ unreachable
+
+else2.i.i: ; preds = %while.i, %else.i.i
+ tail call fastcc void @"*Array(Pointer(Bool))@Array(T)#<<<Pointer(Bool)>:Array(Pointer(Bool))"(%"Array(Pointer(Bool))"* nonnull %76, i1* nonnull @"String::TYPE_ID:init")
+ store i1 true, i1* @"String::TYPE_ID:init", align 1
+ %82 = bitcast %"Crystal::OnceState"* %74 to i8*
+ %sunkaddr154 = getelementptr inbounds i8, i8* %82, i64 8
+ %83 = bitcast i8* %sunkaddr154 to %"Array(Pointer(Bool))"**
+ %84 = load %"Array(Pointer(Bool))"*, %"Array(Pointer(Bool))"** %83, align 8
+ %85 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %84, i64 0, i32 1
+ %86 = load i32, i32* %85, align 4
+ %87 = icmp eq i32 %86, 0
+ br i1 %87, label %then.i133, label %else.i134
+
+then.i133: ; preds = %else2.i.i
+ %88 = tail call fastcc %IndexError* @"*IndexError::new:IndexError"()
+ tail call fastcc void @"*raise<IndexError>:NoReturn"(%IndexError* %88)
+ unreachable
+
+else.i134: ; preds = %else2.i.i
+ %89 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %86, i32 -1)
+ %90 = extractvalue { i32, i1 } %89, 0
+ %91 = extractvalue { i32, i1 } %89, 1
+ br i1 %91, label %overflow.i, label %normal.i, !prof !0
+
+overflow.i: ; preds = %else.i134
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+normal.i: ; preds = %else.i134
+ %92 = bitcast %"Array(Pointer(Bool))"* %84 to i8*
+ %sunkaddr155 = getelementptr inbounds i8, i8* %92, i64 4
+ %93 = bitcast i8* %sunkaddr155 to i32*
+ store i32 %90, i32* %93, align 4
+ %94 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %84, i64 0, i32 4
+ %95 = load i1**, i1*** %94, align 8
+ %96 = sext i32 %90 to i64
+ %97 = getelementptr inbounds i1*, i1** %95, i64 %96
+ %98 = bitcast i1** %97 to i64*
+ store i64 0, i64* %98, align 1
+ %self.idx.val.i = load i32, i32* %93, align 4
+ %99 = icmp eq i32 %self.idx.val.i, 0
+ br i1 %99, label %then3.i, label %__crystal_once.exit
+
+"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i": ; preds = %then3.i
+ %100 = sub nsw i64 0, %109
+ %101 = bitcast %"Array(Pointer(Bool))"* %84 to i8*
+ %sunkaddr156 = getelementptr inbounds i8, i8* %101, i64 16
+ %102 = bitcast i8* %sunkaddr156 to i1***
+ %103 = load i1**, i1*** %102, align 8
+ %104 = getelementptr inbounds i1*, i1** %103, i64 %100
+ store i1** %104, i1*** %102, align 8
+ %105 = bitcast %"Array(Pointer(Bool))"* %84 to i8*
+ %sunkaddr157 = getelementptr inbounds i8, i8* %105, i64 12
+ %106 = bitcast i8* %sunkaddr157 to i32*
+ store i32 0, i32* %106, align 4
+ br label %__crystal_once.exit
+
+then3.i: ; preds = %normal.i
+ %107 = getelementptr inbounds %"Array(Pointer(Bool))", %"Array(Pointer(Bool))"* %84, i64 0, i32 3
+ %108 = load i32, i32* %107, align 4
+ %109 = sext i32 %108 to i64
+ %.not = icmp eq i32 %108, 0
+ br i1 %.not, label %__crystal_once.exit, label %"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i"
+
+__crystal_once.exit: ; preds = %then3.i, %"*Array(Pointer(Bool))@Array(T)#reset_buffer_to_root_buffer:Int32.exit.i", %normal.i, %exit43
+ %110 = bitcast i8* %38 to %String*
%.repack = bitcast i8* %38 to i32*
store i32 1, i32* %.repack, align 4
%.repack117 = getelementptr inbounds i8, i8* %38, i64 4
- %74 = bitcast i8* %.repack117 to i32*
- store i32 %10, i32* %74, align 4
+ %111 = bitcast i8* %.repack117 to i32*
+ store i32 %10, i32* %111, align 4
%.repack119 = getelementptr inbounds i8, i8* %38, i64 8
- %75 = bitcast i8* %.repack119 to i32*
- store i32 %33, i32* %75, align 4
- ret %String* %71
+ %112 = bitcast i8* %.repack119 to i32*
+ store i32 %33, i32* %112, align 4
+ ret %String* %110
}
; Function Attrs: uwtable
@@ -7276,16 +7508,16 @@ body: ; preds = %body.lr.ph, %normal
%7 = sext i32 %byte_index.012 to i64
%8 = bitcast %String* %self to i8*
%sunkaddr = getelementptr inbounds i8, i8* %8, i64 %7
- %sunkaddr28 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
- %9 = load i8, i8* %sunkaddr28, align 1
+ %sunkaddr109 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
+ %9 = load i8, i8* %sunkaddr109, align 1
%10 = icmp ult i8 %9, -62
br i1 %10, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else2.i.i
else2.i.i: ; preds = %body
%11 = bitcast %String* %self to i8*
- %sunkaddr29 = getelementptr inbounds i8, i8* %11, i64 %7
- %sunkaddr30 = getelementptr inbounds i8, i8* %sunkaddr29, i64 13
- %12 = load i8, i8* %sunkaddr30, align 1
+ %sunkaddr110 = getelementptr inbounds i8, i8* %11, i64 %7
+ %sunkaddr111 = getelementptr inbounds i8, i8* %sunkaddr110, i64 13
+ %12 = load i8, i8* %sunkaddr111, align 1
%13 = and i8 %12, -64
%.not.i.i = icmp eq i8 %13, -128
br i1 %.not.i.i, label %else4.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
@@ -7296,9 +7528,9 @@ else4.i.i: ; preds = %else2.i.i
else6.i.i: ; preds = %else4.i.i
%15 = bitcast %String* %self to i8*
- %sunkaddr31 = getelementptr inbounds i8, i8* %15, i64 %7
- %sunkaddr32 = getelementptr inbounds i8, i8* %sunkaddr31, i64 14
- %16 = load i8, i8* %sunkaddr32, align 1
+ %sunkaddr112 = getelementptr inbounds i8, i8* %15, i64 %7
+ %sunkaddr113 = getelementptr inbounds i8, i8* %sunkaddr112, i64 14
+ %16 = load i8, i8* %sunkaddr113, align 1
%17 = and i8 %16, -64
%.not46.i.i = icmp eq i8 %17, -128
br i1 %.not46.i.i, label %else8.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
@@ -7334,9 +7566,9 @@ else21.i.i: ; preds = %else10.i.i
else26.i.i: ; preds = %else21.i.i
%32 = bitcast %String* %self to i8*
- %sunkaddr33 = getelementptr inbounds i8, i8* %32, i64 %7
- %sunkaddr34 = getelementptr inbounds i8, i8* %sunkaddr33, i64 15
- %33 = load i8, i8* %sunkaddr34, align 1
+ %sunkaddr114 = getelementptr inbounds i8, i8* %32, i64 %7
+ %sunkaddr115 = getelementptr inbounds i8, i8* %sunkaddr114, i64 15
+ %33 = load i8, i8* %sunkaddr115, align 1
%34 = and i8 %33, -64
%.not47.i.i = icmp eq i8 %34, -128
br i1 %.not47.i.i, label %else31.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
@@ -7361,8 +7593,8 @@ fail.loopexit: ; preds = %normal4
fail: ; preds = %fail.loopexit, %while.preheader
%char_index.0.lcssa = phi i32 [ 0, %while.preheader ], [ %40, %fail.loopexit ]
%41 = bitcast %String* %self to i8*
- %sunkaddr35 = getelementptr inbounds i8, i8* %41, i64 8
- %42 = bitcast i8* %sunkaddr35 to i32*
+ %sunkaddr116 = getelementptr inbounds i8, i8* %41, i64 8
+ %42 = bitcast i8* %sunkaddr116 to i32*
store i32 %char_index.0.lcssa, i32* %42, align 4
br label %common.ret
@@ -7395,14 +7627,8 @@ declare i8* @GC_malloc_atomic(i64) local_unnamed_addr
declare i8* @GC_realloc(i8*, i64) local_unnamed_addr
-; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn
-define internal void @"~String::TYPE_ID:init"() #7 {
-entry:
- ret void
-}
-
; Function Attrs: nofree nounwind readonly
-declare noundef i8* @getenv(i8* nocapture noundef) local_unnamed_addr #8
+declare noundef i8* @getenv(i8* nocapture noundef) local_unnamed_addr #7
; Function Attrs: uwtable
define internal fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* readonly %chars) unnamed_addr #1 {
@@ -7433,7 +7659,7 @@ normal.i.i: ; preds = %else2.i.i
%6 = add nuw nsw i64 %2, 13
%7 = tail call i8* @GC_malloc_atomic(i64 %6)
%8 = getelementptr inbounds i8, i8* %7, i64 12
- tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %8, i8* nonnull align 1 %chars, i64 %2, i1 false) #22
+ tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %8, i8* nonnull align 1 %chars, i64 %2, i1 false) #21
%9 = getelementptr inbounds i8, i8* %8, i64 %2
store i8 0, i8* %9, align 1
%10 = icmp ugt i64 %2, 2147483647
@@ -7462,7 +7688,7 @@ normal25.i.i: ; preds = %normal.i.i
}
; Function Attrs: argmemonly mustprogress nofree nounwind readonly willreturn
-declare i64 @strlen(i8* nocapture) local_unnamed_addr #9
+declare i64 @strlen(i8* nocapture) local_unnamed_addr #8
; Function Attrs: uwtable
define internal fastcc %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %capacity) unnamed_addr #1 {
@@ -7732,204 +7958,323 @@ overflow1: ; preds = %alloca
normal2: ; preds = %alloca
%4 = extractvalue { i32, i1 } %2, 0
- %5 = tail call fastcc %"String::Builder"* @"*String::Builder::new<Int32>:String::Builder"(i32 %4)
- %6 = getelementptr inbounds %String, %String* %__temp_82, i64 0, i32 3
- %7 = bitcast %String* %__temp_82 to i8*
- %sunkaddr = getelementptr inbounds i8, i8* %7, i64 4
- %8 = bitcast i8* %sunkaddr to i32*
- %9 = load i32, i32* %8, align 4
- %oldret = insertvalue %"Slice(UInt8)" undef, i32 %9, 0
+ %5 = tail call i8* @GC_malloc(i64 80)
+ %6 = getelementptr inbounds i8, i8* %5, i64 4
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %6, i8 0, i64 76, i1 false)
+ %7 = bitcast i8* %5 to i32*
+ store i32 152, i32* %7, align 4
+ %8 = icmp slt i32 %4, 0
+ br i1 %8, label %then.i.i, label %"*String::check_capacity_in_bounds<Int32>:Nil.exit.i"
+
+then.i.i: ; preds = %normal2
+ %9 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
+ tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %9)
+ unreachable
+
+"*String::check_capacity_in_bounds<Int32>:Nil.exit.i": ; preds = %normal2
+ %10 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %4, i32 13)
+ %11 = extractvalue { i32, i1 } %10, 0
+ %12 = extractvalue { i32, i1 } %10, 1
+ br i1 %12, label %overflow2.i, label %normal3.i, !prof !0
+
+overflow2.i: ; preds = %"*String::check_capacity_in_bounds<Int32>:Nil.exit.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+normal3.i: ; preds = %"*String::check_capacity_in_bounds<Int32>:Nil.exit.i"
+ %13 = icmp slt i32 %11, 0
+ br i1 %13, label %then.i1.i, label %"*String::Builder#initialize<Int32>:Bool.exit"
+
+then.i1.i: ; preds = %normal3.i
+ %14 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [18 x i8] }* @"'Negative capacity'" to %String*))
+ tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %14)
+ unreachable
+
+"*String::Builder#initialize<Int32>:Bool.exit": ; preds = %normal3.i
+ %15 = bitcast i8* %5 to %"String::Builder"*
+ %16 = zext i32 %11 to i64
+ %17 = tail call i8* @GC_malloc_atomic(i64 %16)
+ %18 = getelementptr inbounds i8, i8* %5, i64 64
+ %19 = bitcast i8* %18 to i8**
+ store i8* %17, i8** %19, align 8
+ %20 = getelementptr inbounds i8, i8* %5, i64 56
+ %21 = bitcast i8* %20 to i32*
+ store i32 0, i32* %21, align 4
+ %22 = getelementptr inbounds i8, i8* %5, i64 60
+ %23 = bitcast i8* %22 to i32*
+ store i32 %11, i32* %23, align 4
+ %24 = getelementptr inbounds i8, i8* %5, i64 72
+ %25 = bitcast i8* %24 to i1*
+ store i1 false, i1* %25, align 1
+ %26 = getelementptr inbounds %String, %String* %__temp_82, i64 0, i32 3
+ %27 = bitcast %String* %__temp_82 to i8*
+ %sunkaddr = getelementptr inbounds i8, i8* %27, i64 4
+ %28 = bitcast i8* %sunkaddr to i32*
+ %29 = load i32, i32* %28, align 4
+ %oldret = insertvalue %"Slice(UInt8)" undef, i32 %29, 0
%oldret19 = insertvalue %"Slice(UInt8)" %oldret, i1 true, 1
- %oldret21 = insertvalue %"Slice(UInt8)" %oldret19, i8* %6, 2
- tail call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %5, %"Slice(UInt8)" %oldret21)
- %10 = tail call fastcc %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* %5, i32 %__temp_83)
- %11 = tail call fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* %5)
- ret %String* %11
+ %oldret21 = insertvalue %"Slice(UInt8)" %oldret19, i8* %26, 2
+ tail call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %15, %"Slice(UInt8)" %oldret21)
+ tail call fastcc void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %__temp_83, %"String::Builder"* nonnull %15)
+ %30 = load i1, i1* %25, align 1
+ br i1 %30, label %then.i, label %else.i
+
+then.i: ; preds = %"*String::Builder#initialize<Int32>:Bool.exit"
+ tail call fastcc void @"*raise<String>:NoReturn"(%String* bitcast ({ i32, i32, i32, [47 x i8] }* @"'Can only invoke 'to...'" to %String*))
+ unreachable
+
+else.i: ; preds = %"*String::Builder#initialize<Int32>:Bool.exit"
+ %31 = bitcast i8* %5 to %"String::Builder"*
+ %sunkaddr23 = getelementptr inbounds i8, i8* %5, i64 72
+ %32 = bitcast i8* %sunkaddr23 to i1*
+ store i1 true, i1* %32, align 1
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %31, i8 0)
+ %sunkaddr24 = getelementptr inbounds i8, i8* %5, i64 56
+ %33 = bitcast i8* %sunkaddr24 to i32*
+ %34 = load i32, i32* %33, align 4
+ %35 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %34, i32 12)
+ %36 = extractvalue { i32, i1 } %35, 1
+ br i1 %36, label %overflow.i22, label %"*String::Builder#real_bytesize:Int32.exit", !prof !0
+
+overflow.i22: ; preds = %else.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*String::Builder#real_bytesize:Int32.exit": ; preds = %else.i
+ %37 = extractvalue { i32, i1 } %35, 0
+ %sunkaddr25 = getelementptr inbounds i8, i8* %5, i64 60
+ %38 = bitcast i8* %sunkaddr25 to i32*
+ %39 = load i32, i32* %38, align 4
+ %40 = icmp sgt i32 %39, %37
+ br i1 %40, label %then1.i, label %exit.i
+
+then1.i: ; preds = %"*String::Builder#real_bytesize:Int32.exit"
+ %sunkaddr26 = getelementptr inbounds i8, i8* %5, i64 60
+ %41 = bitcast i8* %sunkaddr26 to i32*
+ store i32 %37, i32* %41, align 4
+ %42 = icmp slt i32 %37, 0
+ br i1 %42, label %overflow.i.i.i, label %"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8).exit", !prof !0
+
+overflow.i.i.i: ; preds = %then1.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8).exit": ; preds = %then1.i
+ %sunkaddr27 = getelementptr inbounds i8, i8* %5, i64 64
+ %43 = bitcast i8* %sunkaddr27 to i8**
+ %44 = load i8*, i8** %43, align 8
+ %45 = zext i32 %37 to i64
+ %46 = tail call i8* @GC_realloc(i8* %44, i64 %45)
+ store i8* %46, i8** %43, align 8
+ %sunkaddr28 = getelementptr inbounds i8, i8* %5, i64 56
+ %47 = bitcast i8* %sunkaddr28 to i32*
+ %.pre = load i32, i32* %47, align 4
+ br label %exit.i
+
+exit.i: ; preds = %"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8).exit", %"*String::Builder#real_bytesize:Int32.exit"
+ %48 = phi i32 [ %.pre, %"*String::Builder#resize_to_capacity<Int32>:Pointer(UInt8).exit" ], [ %34, %"*String::Builder#real_bytesize:Int32.exit" ]
+ %49 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %48, i32 -1)
+ %50 = extractvalue { i32, i1 } %49, 1
+ br i1 %50, label %overflow.i, label %"*String::Builder#to_s:String.exit", !prof !0
+
+overflow.i: ; preds = %exit.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*String::Builder#to_s:String.exit": ; preds = %exit.i
+ %51 = extractvalue { i32, i1 } %49, 0
+ %sunkaddr29 = getelementptr inbounds i8, i8* %5, i64 64
+ %52 = bitcast i8* %sunkaddr29 to %"Tuple(Int32, Int32, Int32)"**
+ %53 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %52, align 8
+ %.repack.i30 = bitcast %"Tuple(Int32, Int32, Int32)"* %53 to i32*
+ store i32 1, i32* %.repack.i30, align 4
+ %.repack4.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %53, i64 0, i32 1
+ store i32 %51, i32* %.repack4.i, align 4
+ %.repack6.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %53, i64 0, i32 2
+ store i32 0, i32* %.repack6.i, align 4
+ %sunkaddr31 = getelementptr inbounds i8, i8* %5, i64 64
+ %54 = bitcast i8* %sunkaddr31 to %String**
+ %55 = load %String*, %String** %54, align 8
+ ret %String* %55
}
; Function Attrs: uwtable
-define internal fastcc %"String::Builder"* @"*String::Builder@IO#<<<Int32>:String::Builder"(%"String::Builder"* returned %self, i32 %obj) unnamed_addr #1 {
-entry:
- %byte.i33 = alloca i8, align 1
- %byte.i19 = alloca i8, align 1
- %chars.i = alloca [129 x i8], align 1
- %0 = bitcast [129 x i8]* %chars.i to i8*
- %1 = bitcast [129 x i8]* %chars.i to i8*
- %byte.i5 = alloca i8, align 1
+define internal fastcc void @"*Int32@Int#to_s<String::Builder>:Nil"(i32 %self, %"String::Builder"* nocapture %io) unnamed_addr #1 {
+alloca:
+ %byte.i117 = alloca i8, align 1
+ %byte.i105 = alloca i8, align 1
+ %byte.i93 = alloca i8, align 1
%byte.i = alloca i8, align 1
- %2 = bitcast [129 x i8]* %chars.i to i8*
- call void @llvm.lifetime.start.p0i8(i64 129, i8* nonnull %2)
- switch i32 %obj, label %else28.i [
- i32 0, label %then23.i
- i32 1, label %then29.i
+ %chars = alloca [129 x i8], align 1
+ switch i32 %self, label %else28 [
+ i32 0, label %then21
+ i32 1, label %then27
]
-then23.i: ; preds = %entry
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %0)
- store i8 48, i8* %0, align 1
- %io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %self, i64 0, i32 1, i32 0
- %io.idx.val.i = load i32, i32* %io.idx.i, align 4
- %.not49 = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not49, label %else2.i, label %then1.i
+exit20: ; preds = %"*Char#to_s<String::Builder>:Nil.exit104", %exit54, %"*Char#to_s<String::Builder>:Nil.exit"
+ ret void
-then1.i: ; preds = %then23.i
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %0, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %self, %"Slice(UInt8)" %oldret127.i)
+then21: ; preds = %alloca
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i117)
+ store i8 48, i8* %byte.i117, align 1
+ %io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i = load i32, i32* %io.idx.i, align 4
+ %.not132 = icmp eq i32 %io.idx.val.i, 0
+ br i1 %.not132, label %else2.i, label %then1.i
+
+then1.i: ; preds = %then21
+ %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i117, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i)
br label %"*Char#to_s<String::Builder>:Nil.exit"
-else2.i: ; preds = %then23.i
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %self, i8 48)
+else2.i: ; preds = %then21
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
br label %"*Char#to_s<String::Builder>:Nil.exit"
"*Char#to_s<String::Builder>:Nil.exit": ; preds = %then1.i, %else2.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %0)
- br label %"*Int32@Int#to_s<String::Builder>:Nil.exit"
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i117)
+ br label %exit20
-else28.i: ; preds = %entry
- br label %body.i
+then27: ; preds = %alloca
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i117)
+ store i8 49, i8* %byte.i117, align 1
+ %io.idx.i94 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i95 = load i32, i32* %io.idx.i94, align 4
+ %.not131 = icmp eq i32 %io.idx.val.i95, 0
+ br i1 %.not131, label %else2.i103, label %then1.i102
-then29.i: ; preds = %entry
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %1)
- store i8 49, i8* %1, align 1
- %io.idx.i7 = getelementptr %"String::Builder", %"String::Builder"* %self, i64 0, i32 1, i32 0
- %io.idx.val.i8 = load i32, i32* %io.idx.i7, align 4
- %.not48 = icmp eq i32 %io.idx.val.i8, 0
- br i1 %.not48, label %else2.i17, label %then1.i16
+then1.i102: ; preds = %then27
+ %oldret127.i101 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i117, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i101)
+ br label %"*Char#to_s<String::Builder>:Nil.exit104"
-then1.i16: ; preds = %then29.i
- %oldret127.i15 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %1, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %self, %"Slice(UInt8)" %oldret127.i15)
- br label %"*Char#to_s<String::Builder>:Nil.exit18"
+else2.i103: ; preds = %then27
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 49)
+ br label %"*Char#to_s<String::Builder>:Nil.exit104"
-else2.i17: ; preds = %then29.i
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %self, i8 49)
- br label %"*Char#to_s<String::Builder>:Nil.exit18"
+"*Char#to_s<String::Builder>:Nil.exit104": ; preds = %then1.i102, %else2.i103
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i117)
+ br label %exit20
-"*Char#to_s<String::Builder>:Nil.exit18": ; preds = %then1.i16, %else2.i17
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %1)
- br label %"*Int32@Int#to_s<String::Builder>:Nil.exit"
+else28: ; preds = %alloca
+ br label %body
-body.i: ; preds = %else28.i, %body.i
- %lsr.iv56 = phi i64 [ 0, %else28.i ], [ %lsr.iv.next57, %body.i ]
- %num.0.i51 = phi i32 [ %obj, %else28.i ], [ %9, %body.i ]
- %3 = srem i32 %num.0.i51, 10
- %4 = tail call i32 @llvm.abs.i32(i32 %3, i1 true)
- %5 = zext i32 %4 to i64
- %6 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789abcdefghi...'.1", i64 0, i32 3, i64 %5
- %7 = load i8, i8* %6, align 1
- %8 = bitcast [129 x i8]* %chars.i to i8*
- %sunkaddr = getelementptr i8, i8* %8, i64 %lsr.iv56
- %sunkaddr64 = getelementptr i8, i8* %sunkaddr, i64 127
- store i8 %7, i8* %sunkaddr64, align 1
- %9 = sdiv i32 %num.0.i51, 10
- %num.0.i51.off = add i32 %num.0.i51, 9
- %10 = icmp ult i32 %num.0.i51.off, 19
- %lsr.iv.next57 = add i64 %lsr.iv56, -1
- br i1 %10, label %fail.i, label %body.i
+body: ; preds = %else28, %body
+ %lsr.iv139 = phi i64 [ 0, %else28 ], [ %lsr.iv.next140, %body ]
+ %num.0134 = phi i32 [ %self, %else28 ], [ %6, %body ]
+ %0 = srem i32 %num.0134, 10
+ %1 = tail call i32 @llvm.abs.i32(i32 %0, i1 true)
+ %2 = zext i32 %1 to i64
+ %3 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789abcdefghi...'.1", i64 0, i32 3, i64 %2
+ %4 = load i8, i8* %3, align 1
+ %5 = bitcast [129 x i8]* %chars to i8*
+ %sunkaddr = getelementptr i8, i8* %5, i64 %lsr.iv139
+ %sunkaddr147 = getelementptr i8, i8* %sunkaddr, i64 127
+ store i8 %4, i8* %sunkaddr147, align 1
+ %6 = sdiv i32 %num.0134, 10
+ %num.0134.off = add i32 %num.0134, 9
+ %7 = icmp ult i32 %num.0134.off, 19
+ %lsr.iv.next140 = add i64 %lsr.iv139, -1
+ br i1 %7, label %fail, label %body
-fail.i: ; preds = %body.i
- %11 = mul i64 %lsr.iv.next57, -1
- %12 = add i64 %11, -2147483648
- %13 = icmp ult i64 %12, -4294967296
- %14 = add i64 %lsr.iv.next57, 1
- %scevgep = getelementptr [129 x i8], [129 x i8]* %chars.i, i64 0, i64 128
- %scevgep61 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next57
- br i1 %13, label %overflow.i, label %normal.i, !prof !0
+fail: ; preds = %body
+ %8 = mul i64 %lsr.iv.next140, -1
+ %9 = add i64 %8, -2147483648
+ %10 = icmp ult i64 %9, -4294967296
+ %11 = add i64 %lsr.iv.next140, 1
+ %scevgep = getelementptr [129 x i8], [129 x i8]* %chars, i64 0, i64 128
+ %scevgep144 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next140
+ br i1 %10, label %overflow, label %normal, !prof !0
-overflow.i: ; preds = %fail.i
+overflow: ; preds = %fail
call void @__crystal_raise_overflow()
unreachable
-normal.i: ; preds = %fail.i
- %15 = icmp slt i32 %obj, 0
- %16 = mul i64 %lsr.iv.next57, -1
- %17 = mul i64 %lsr.iv.next57, -1
- %18 = mul i64 %lsr.iv.next57, -1
- br i1 %15, label %then44.i, label %exit46.i
+normal: ; preds = %fail
+ %12 = icmp slt i32 %self, 0
+ %13 = mul i64 %lsr.iv.next140, -1
+ %14 = mul i64 %lsr.iv.next140, -1
+ %15 = mul i64 %lsr.iv.next140, -1
+ br i1 %12, label %then44, label %exit46
-then44.i: ; preds = %normal.i
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i33)
- store i8 45, i8* %byte.i33, align 1
- %io.idx.i21 = getelementptr %"String::Builder", %"String::Builder"* %self, i64 0, i32 1, i32 0
- %io.idx.val.i22 = load i32, i32* %io.idx.i21, align 4
- %.not47 = icmp eq i32 %io.idx.val.i22, 0
- br i1 %.not47, label %else2.i31, label %then1.i30
+then44: ; preds = %normal
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i117)
+ store i8 45, i8* %byte.i117, align 1
+ %io.idx.i106 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i107 = load i32, i32* %io.idx.i106, align 4
+ %.not130 = icmp eq i32 %io.idx.val.i107, 0
+ br i1 %.not130, label %else2.i115, label %then1.i114
-then1.i30: ; preds = %then44.i
- %oldret127.i29 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i33, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %self, %"Slice(UInt8)" %oldret127.i29)
- br label %"*Char#to_s<String::Builder>:Nil.exit32"
+then1.i114: ; preds = %then44
+ %oldret127.i113 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i117, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i113)
+ br label %"*Char#to_s<String::Builder>:Nil.exit116"
-else2.i31: ; preds = %then44.i
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %self, i8 45)
- br label %"*Char#to_s<String::Builder>:Nil.exit32"
+else2.i115: ; preds = %then44
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 45)
+ br label %"*Char#to_s<String::Builder>:Nil.exit116"
-"*Char#to_s<String::Builder>:Nil.exit32": ; preds = %then1.i30, %else2.i31
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i33)
- br label %exit46.i
+"*Char#to_s<String::Builder>:Nil.exit116": ; preds = %then1.i114, %else2.i115
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i117)
+ br label %exit46
-exit46.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit32", %normal.i
- %tmp60 = trunc i64 %16 to i32
- %19 = icmp slt i32 %tmp60, 1
- br i1 %19, label %then47.i, label %exit54.i
+exit46: ; preds = %normal, %"*Char#to_s<String::Builder>:Nil.exit116"
+ %tmp143 = trunc i64 %13 to i32
+ %16 = icmp slt i32 %tmp143, 1
+ br i1 %16, label %then47, label %exit54
-then47.i: ; preds = %exit46.i
- %tmp58 = trunc i64 %18 to i32
- %20 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp58)
- %21 = extractvalue { i32, i1 } %20, 0
- %22 = extractvalue { i32, i1 } %20, 1
- br i1 %22, label %overflow49.i, label %while51.i.preheader, !prof !0
+then47: ; preds = %exit46
+ %tmp142 = trunc i64 %14 to i32
+ %17 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp142)
+ %18 = extractvalue { i32, i1 } %17, 0
+ %19 = extractvalue { i32, i1 } %17, 1
+ br i1 %19, label %overflow49, label %while51.preheader, !prof !0
-while51.i.preheader: ; preds = %then47.i
- %23 = icmp sgt i32 %21, 0
- br i1 %23, label %body52.i.lr.ph, label %exit54.i
+while51.preheader: ; preds = %then47
+ %20 = icmp sgt i32 %18, 0
+ br i1 %20, label %body52.lr.ph, label %exit54
-body52.i.lr.ph: ; preds = %while51.i.preheader
- %oldret127.i43 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i33, 2
- %tmp = trunc i64 %14 to i32
- br label %body52.i
+body52.lr.ph: ; preds = %while51.preheader
+ %oldret127.i125 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i117, 2
+ %tmp = trunc i64 %11 to i32
+ br label %body52
-overflow49.i: ; preds = %then47.i
+overflow49: ; preds = %then47
call void @__crystal_raise_overflow()
unreachable
-body52.i: ; preds = %body52.i.lr.ph, %"*Char#to_s<String::Builder>:Nil.exit46"
- %lsr.iv54 = phi i32 [ %tmp, %body52.i.lr.ph ], [ %lsr.iv.next55, %"*Char#to_s<String::Builder>:Nil.exit46" ]
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i33)
- store i8 48, i8* %byte.i33, align 1
- %24 = bitcast %"String::Builder"* %self to i8*
- %sunkaddr65 = getelementptr i8, i8* %24, i64 8
- %25 = bitcast i8* %sunkaddr65 to i32*
- %io.idx.val.i36 = load i32, i32* %25, align 4
- %.not = icmp eq i32 %io.idx.val.i36, 0
- br i1 %.not, label %else2.i45, label %then1.i44
+body52: ; preds = %body52.lr.ph, %"*Char#to_s<String::Builder>:Nil.exit128"
+ %lsr.iv137 = phi i32 [ %tmp, %body52.lr.ph ], [ %lsr.iv.next138, %"*Char#to_s<String::Builder>:Nil.exit128" ]
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i117)
+ store i8 48, i8* %byte.i117, align 1
+ %21 = bitcast %"String::Builder"* %io to i8*
+ %sunkaddr148 = getelementptr i8, i8* %21, i64 8
+ %22 = bitcast i8* %sunkaddr148 to i32*
+ %io.idx.val.i119 = load i32, i32* %22, align 4
+ %.not129 = icmp eq i32 %io.idx.val.i119, 0
+ br i1 %.not129, label %else2.i127, label %then1.i126
-then1.i44: ; preds = %body52.i
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %self, %"Slice(UInt8)" %oldret127.i43)
- br label %"*Char#to_s<String::Builder>:Nil.exit46"
+then1.i126: ; preds = %body52
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i125)
+ br label %"*Char#to_s<String::Builder>:Nil.exit128"
-else2.i45: ; preds = %body52.i
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %self, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit46"
+else2.i127: ; preds = %body52
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
+ br label %"*Char#to_s<String::Builder>:Nil.exit128"
-"*Char#to_s<String::Builder>:Nil.exit46": ; preds = %then1.i44, %else2.i45
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i33)
- %lsr.iv.next55 = add i32 %lsr.iv54, -1
- %exitcond.not = icmp eq i32 %lsr.iv.next55, 0
- br i1 %exitcond.not, label %exit54.i, label %body52.i
+"*Char#to_s<String::Builder>:Nil.exit128": ; preds = %then1.i126, %else2.i127
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i117)
+ %lsr.iv.next138 = add i32 %lsr.iv137, -1
+ %exitcond.not = icmp eq i32 %lsr.iv.next138, 0
+ br i1 %exitcond.not, label %exit54, label %body52
-exit54.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit46", %while51.i.preheader, %exit46.i
- %tmp59 = trunc i64 %17 to i32
- %oldret.i = insertvalue %"Slice(UInt8)" undef, i32 %tmp59, 0
- %oldret89.i = insertvalue %"Slice(UInt8)" %oldret.i, i1 false, 1
- %oldret91.i = insertvalue %"Slice(UInt8)" %oldret89.i, i8* %scevgep61, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %self, %"Slice(UInt8)" %oldret91.i)
- br label %"*Int32@Int#to_s<String::Builder>:Nil.exit"
-
-"*Int32@Int#to_s<String::Builder>:Nil.exit": ; preds = %"*Char#to_s<String::Builder>:Nil.exit", %"*Char#to_s<String::Builder>:Nil.exit18", %exit54.i
- %26 = bitcast [129 x i8]* %chars.i to i8*
- call void @llvm.lifetime.end.p0i8(i64 129, i8* nonnull %26)
- ret %"String::Builder"* %self
+exit54: ; preds = %"*Char#to_s<String::Builder>:Nil.exit128", %while51.preheader, %exit46
+ %tmp141 = trunc i64 %15 to i32
+ %oldret = insertvalue %"Slice(UInt8)" undef, i32 %tmp141, 0
+ %oldret89 = insertvalue %"Slice(UInt8)" %oldret, i1 false, 1
+ %oldret91 = insertvalue %"Slice(UInt8)" %oldret89, i8* %scevgep144, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %oldret91)
+ br label %exit20
}
; Function Attrs: uwtable
@@ -8284,25 +8629,25 @@ overflow4.i.i.i: ; preds = %alloca
normal5.i.i.i: ; preds = %alloca
%5 = icmp sgt i32 %3, -1
- br i1 %5, label %while.i.i.preheader.i, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
+ br i1 %5, label %while.i.preheader.i.i, label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
-while.i.i.preheader.i: ; preds = %normal5.i.i.i
+while.i.preheader.i.i: ; preds = %normal5.i.i.i
%6 = getelementptr inbounds %String, %String* %path, i64 0, i32 3
%7 = load i8, i8* %6, align 1
%8 = icmp eq i8 %7, 0
br i1 %8, label %then10.i.i.i, label %else11.i.i.i.preheader
-else11.i.i.i.preheader: ; preds = %while.i.i.preheader.i
+else11.i.i.i.preheader: ; preds = %while.i.preheader.i.i
br label %else11.i.i.i
-while.i.i.then10.i.i_crit_edge.i: ; preds = %normal15.i.i.i
+while.i.then10.i_crit_edge.i.i: ; preds = %normal15.i.i.i
%9 = extractvalue { i32, i1 } %11, 0
- %phi.cast.i = zext i32 %9 to i64
+ %phi.cast.i.i = zext i32 %9 to i64
br label %then10.i.i.i
-then10.i.i.i: ; preds = %while.i.i.then10.i.i_crit_edge.i, %while.i.i.preheader.i
- %x.0.i.i.lcssa.i = phi i64 [ %phi.cast.i, %while.i.i.then10.i.i_crit_edge.i ], [ 0, %while.i.i.preheader.i ]
- %.fca.1.0.insert18.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.i.lcssa.i, 1, 0
+then10.i.i.i: ; preds = %while.i.then10.i_crit_edge.i.i, %while.i.preheader.i.i
+ %x.0.i.lcssa.i.i = phi i64 [ %phi.cast.i.i, %while.i.then10.i_crit_edge.i.i ], [ 0, %while.i.preheader.i.i ]
+ %.fca.1.0.insert18.i.i.i = insertvalue %"(Int32 | Nil)" { i32 289, [1 x i64] poison }, i64 %x.0.i.lcssa.i.i, 1, 0
br label %"*String#byte_index<Int32>:(Int32 | Nil).exit.i"
else11.i.i.i: ; preds = %else11.i.i.i.preheader, %normal15.i.i.i
@@ -8328,7 +8673,7 @@ normal15.i.i.i: ; preds = %else13.i.i.i
%16 = load i8, i8* %sunkaddr11, align 1
%17 = icmp eq i8 %16, 0
%lsr.iv.next = add nuw i32 %lsr.iv, 1
- br i1 %17, label %while.i.i.then10.i.i_crit_edge.i, label %else11.i.i.i
+ br i1 %17, label %while.i.then10.i_crit_edge.i.i, label %else11.i.i.i
"*String#byte_index<Int32>:(Int32 | Nil).exit.i": ; preds = %else11.i.i.i, %then10.i.i.i, %normal5.i.i.i
%common.ret.op.i.i.i = phi %"(Int32 | Nil)" [ %.fca.1.0.insert18.i.i.i, %then10.i.i.i ], [ zeroinitializer, %normal5.i.i.i ], [ zeroinitializer, %else11.i.i.i ]
@@ -8498,10 +8843,9 @@ declare i32* @__errno_location() local_unnamed_addr
; Function Attrs: uwtable
define internal fastcc i32* @"*File::Error@SystemError::ClassMethods::from_errno:file<String, String>:File::Error+"(%String* nocapture %message, %String* %__temp_200) unnamed_addr #1 {
alloca:
- %byte.i118 = alloca i8, align 1
- %byte.i = alloca i8, align 1
- %_.i.i = alloca %"Char::Reader", align 8
- %reader.i = alloca %"Char::Reader", align 8
+ %byte.i.i.i.i = alloca i8, align 1
+ %_.i.i.i.i.i = alloca %"Char::Reader", align 8
+ %reader.i.i.i.i = alloca %"Char::Reader", align 8
%0 = tail call i32* @__errno_location()
%1 = load i32, i32* %0, align 4
%2 = tail call i8* @GC_malloc(i64 80)
@@ -8522,313 +8866,294 @@ alloca:
%12 = getelementptr inbounds i8, i8* %2, i64 72
%13 = bitcast i8* %12 to i1*
store i1 false, i1* %13, align 1
- %14 = bitcast %"Char::Reader"* %_.i.i to i8*
+ %14 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %14)
- %15 = bitcast %"Char::Reader"* %_.i.i to i8*
+ %15 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %15)
- %.fca.5.insert.fca.0.gep.i.i128 = bitcast %"Char::Reader"* %_.i.i to %String**
- %.fca.5.insert.fca.1.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 1
- %.fca.5.insert.fca.2.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 2
- %.fca.5.insert.fca.3.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 3
- %.fca.5.insert.fca.4.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 4, i32 0
- store i32 0, i32* %.fca.5.insert.fca.4.0.gep.i.i, align 8
- %.fca.5.insert.fca.4.1.0.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 4, i32 1, i64 0
- store i64 0, i64* %.fca.5.insert.fca.4.1.0.gep.i.i, align 8
- %.fca.5.insert.fca.5.gep.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 5
- store i1 false, i1* %.fca.5.insert.fca.5.gep.i.i, align 8
+ %.fca.5.insert.fca.0.gep.i.i.i.i.i1 = bitcast %"Char::Reader"* %_.i.i.i.i.i to %String**
+ %.fca.5.insert.fca.1.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 1
+ %.fca.5.insert.fca.2.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 2
+ %.fca.5.insert.fca.3.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 3
+ %.fca.5.insert.fca.4.0.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 4, i32 0
+ store i32 0, i32* %.fca.5.insert.fca.4.0.gep.i.i.i.i.i, align 8
+ %.fca.5.insert.fca.4.1.0.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 4, i32 1, i64 0
+ store i64 0, i64* %.fca.5.insert.fca.4.1.0.gep.i.i.i.i.i, align 8
+ %.fca.5.insert.fca.5.gep.i.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 5
+ store i1 false, i1* %.fca.5.insert.fca.5.gep.i.i.i.i.i, align 8
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(20) %15, i8 0, i64 20, i1 false)
- call fastcc void @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* nonnull %_.i.i, %String* %__temp_200, i32 0)
- %.fca.0.load.i.i = load %String*, %String** %.fca.5.insert.fca.0.gep.i.i128, align 8
- %.fca.1.load.i.i = load i32, i32* %.fca.5.insert.fca.1.gep.i.i, align 8
- %.fca.2.load.i.i = load i32, i32* %.fca.5.insert.fca.2.gep.i.i, align 4
- %.fca.3.load.i.i = load i32, i32* %.fca.5.insert.fca.3.gep.i.i, align 8
- %.fca.4.0.load.i.i = load i32, i32* %.fca.5.insert.fca.4.0.gep.i.i, align 8
- %.fca.4.1.0.load.i.i = load i64, i64* %.fca.5.insert.fca.4.1.0.gep.i.i, align 8
- %.fca.5.load.i.i = load i1, i1* %.fca.5.insert.fca.5.gep.i.i, align 8
+ call fastcc void @"*Char::Reader#initialize<String, Int32>:Char"(%"Char::Reader"* nonnull %_.i.i.i.i.i, %String* %__temp_200, i32 0)
+ %.fca.0.load.i.i.i.i.i = load %String*, %String** %.fca.5.insert.fca.0.gep.i.i.i.i.i1, align 8
+ %.fca.1.load.i.i.i.i.i = load i32, i32* %.fca.5.insert.fca.1.gep.i.i.i.i.i, align 8
+ %.fca.2.load.i.i.i.i.i = load i32, i32* %.fca.5.insert.fca.2.gep.i.i.i.i.i, align 4
+ %.fca.3.load.i.i.i.i.i = load i32, i32* %.fca.5.insert.fca.3.gep.i.i.i.i.i, align 8
+ %.fca.4.0.load.i.i.i.i.i = load i32, i32* %.fca.5.insert.fca.4.0.gep.i.i.i.i.i, align 8
+ %.fca.4.1.0.load.i.i.i.i.i = load i64, i64* %.fca.5.insert.fca.4.1.0.gep.i.i.i.i.i, align 8
+ %.fca.5.load.i.i.i.i.i = load i1, i1* %.fca.5.insert.fca.5.gep.i.i.i.i.i, align 8
call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %15)
- %.fca.5.insert.fca.0.gep.i129 = bitcast %"Char::Reader"* %_.i.i to %String**
- store %String* %.fca.0.load.i.i, %String** %.fca.5.insert.fca.0.gep.i129, align 8
- %.fca.5.insert.fca.1.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 1
- store i32 %.fca.1.load.i.i, i32* %.fca.5.insert.fca.1.gep.i, align 8
- %.fca.5.insert.fca.2.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 2
- store i32 %.fca.2.load.i.i, i32* %.fca.5.insert.fca.2.gep.i, align 4
- %.fca.5.insert.fca.3.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 3
- store i32 %.fca.3.load.i.i, i32* %.fca.5.insert.fca.3.gep.i, align 8
- %.fca.5.insert.fca.4.0.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 4, i32 0
- store i32 %.fca.4.0.load.i.i, i32* %.fca.5.insert.fca.4.0.gep.i, align 8
- %.fca.5.insert.fca.4.1.0.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 4, i32 1, i64 0
- store i64 %.fca.4.1.0.load.i.i, i64* %.fca.5.insert.fca.4.1.0.gep.i, align 8
- %.fca.5.insert.fca.5.gep.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i, i64 0, i32 5
- store i1 %.fca.5.load.i.i, i1* %.fca.5.insert.fca.5.gep.i, align 8
- br i1 %.fca.5.load.i.i, label %"*String#inspect_unquoted<String::Builder>:Nil.exit", label %body.i.lr.ph
+ %.fca.5.insert.fca.0.gep.i.i.i.i2 = bitcast %"Char::Reader"* %_.i.i.i.i.i to %String**
+ store %String* %.fca.0.load.i.i.i.i.i, %String** %.fca.5.insert.fca.0.gep.i.i.i.i2, align 8
+ %.fca.5.insert.fca.1.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 1
+ store i32 %.fca.1.load.i.i.i.i.i, i32* %.fca.5.insert.fca.1.gep.i.i.i.i, align 8
+ %.fca.5.insert.fca.2.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 2
+ store i32 %.fca.2.load.i.i.i.i.i, i32* %.fca.5.insert.fca.2.gep.i.i.i.i, align 4
+ %.fca.5.insert.fca.3.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 3
+ store i32 %.fca.3.load.i.i.i.i.i, i32* %.fca.5.insert.fca.3.gep.i.i.i.i, align 8
+ %.fca.5.insert.fca.4.0.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 4, i32 0
+ store i32 %.fca.4.0.load.i.i.i.i.i, i32* %.fca.5.insert.fca.4.0.gep.i.i.i.i, align 8
+ %.fca.5.insert.fca.4.1.0.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 4, i32 1, i64 0
+ store i64 %.fca.4.1.0.load.i.i.i.i.i, i64* %.fca.5.insert.fca.4.1.0.gep.i.i.i.i, align 8
+ %.fca.5.insert.fca.5.gep.i.i.i.i = getelementptr inbounds %"Char::Reader", %"Char::Reader"* %_.i.i.i.i.i, i64 0, i32 5
+ store i1 %.fca.5.load.i.i.i.i.i, i1* %.fca.5.insert.fca.5.gep.i.i.i.i, align 8
+ br i1 %.fca.5.load.i.i.i.i.i, label %"*File::Error::build_message:file<String, String>:String.exit.i", label %body.lr.ph.i.i.i.i
-body.i.lr.ph: ; preds = %alloca
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i118, 2
- %oldret127.i124 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i118, 2
- br label %body.i
+body.lr.ph.i.i.i.i: ; preds = %alloca
+ %oldret127.i.i.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i.i.i.i, 2
+ br label %body.i.i.i.i
-body.i: ; preds = %while.i.backedge.body.i_crit_edge, %body.i.lr.ph
- %16 = phi i32 [ %.pre, %while.i.backedge.body.i_crit_edge ], [ %.fca.1.load.i.i, %body.i.lr.ph ]
- switch i32 %16, label %else30.i [
- i32 34, label %then.i1
- i32 92, label %then2.i
- i32 7, label %then5.i
- i32 8, label %then8.i
- i32 27, label %then11.i
- i32 12, label %then14.i
- i32 10, label %then17.i
- i32 13, label %then20.i
- i32 9, label %then23.i
- i32 11, label %then26.i
- i32 35, label %then29.i
+body.i.i.i.i: ; preds = %while.backedge.body_crit_edge.i.i.i.i, %body.lr.ph.i.i.i.i
+ %16 = phi i32 [ %.pre.i.i.i.i, %while.backedge.body_crit_edge.i.i.i.i ], [ %.fca.1.load.i.i.i.i.i, %body.lr.ph.i.i.i.i ]
+ switch i32 %16, label %else30.i.i.i.i [
+ i32 34, label %then.i.i.i.i
+ i32 92, label %then2.i.i.i.i
+ i32 7, label %then5.i.i.i.i
+ i32 8, label %then8.i.i.i.i
+ i32 27, label %then11.i.i.i.i
+ i32 12, label %then14.i.i.i.i
+ i32 10, label %then17.i.i.i.i
+ i32 13, label %then20.i.i.i.i
+ i32 9, label %then23.i.i.i.i
+ i32 11, label %then26.i.i.i.i
+ i32 35, label %then29.i.i.i.i
]
-then.i1: ; preds = %body.i
+then.i.i.i.i: ; preds = %body.i.i.i.i
%17 = bitcast i8* %2 to %"String::Builder"*
call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %17, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\\22'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ br label %exit.i.i.i.i
-exit.i: ; preds = %"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i", %then33.i, %else34.i, %then26.i, %then23.i, %then20.i, %then17.i, %then14.i, %then11.i, %then8.i, %then5.i, %then2.i, %then.i1
- %18 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i)
- br label %while.i.backedge
+exit.i.i.i.i: ; preds = %normal.i.i.i.i, %else6.i.i.i.i, %then5.i5.i.i.i, %then33.i.i.i.i, %then26.i.i.i.i, %then23.i.i.i.i, %then20.i.i.i.i, %then17.i.i.i.i, %then14.i.i.i.i, %then11.i.i.i.i, %then8.i.i.i.i, %then5.i.i.i.i, %then2.i.i.i.i, %then.i.i.i.i
+ %18 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i.i.i.i)
+ br label %while.backedge.i.i.i.i
-while.i.backedge: ; preds = %exit.i, %then31.i, %"*Char#to_s<String::Builder>:Nil.exit127"
- %19 = bitcast %"Char::Reader"* %_.i.i to i8*
- %sunkaddr = getelementptr inbounds i8, i8* %19, i64 40
- %20 = bitcast i8* %sunkaddr to i1*
- %reader.idx.val.i = load i1, i1* %20, align 8
- br i1 %reader.idx.val.i, label %"*String#inspect_unquoted<String::Builder>:Nil.exit", label %while.i.backedge.body.i_crit_edge
+then2.i.i.i.i: ; preds = %body.i.i.i.i
+ %19 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %19, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\\\'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-while.i.backedge.body.i_crit_edge: ; preds = %while.i.backedge
- %21 = bitcast %"Char::Reader"* %_.i.i to i8*
- %sunkaddr130 = getelementptr inbounds i8, i8* %21, i64 8
- %22 = bitcast i8* %sunkaddr130 to i32*
- %.pre = load i32, i32* %22, align 8
- br label %body.i
+then5.i.i.i.i: ; preds = %body.i.i.i.i
+ %20 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %20, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\a'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then2.i: ; preds = %body.i
+then8.i.i.i.i: ; preds = %body.i.i.i.i
+ %21 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %21, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\b'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
+
+then11.i.i.i.i: ; preds = %body.i.i.i.i
+ %22 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %22, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\e'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
+
+then14.i.i.i.i: ; preds = %body.i.i.i.i
%23 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %23, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\\\'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %23, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\f'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then5.i: ; preds = %body.i
+then17.i.i.i.i: ; preds = %body.i.i.i.i
%24 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %24, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\a'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %24, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\n'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then8.i: ; preds = %body.i
+then20.i.i.i.i: ; preds = %body.i.i.i.i
%25 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %25, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\b'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %25, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\r'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then11.i: ; preds = %body.i
+then23.i.i.i.i: ; preds = %body.i.i.i.i
%26 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %26, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\e'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %26, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\t'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then14.i: ; preds = %body.i
+then26.i.i.i.i: ; preds = %body.i.i.i.i
%27 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %27, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\f'", i64 0, i32 3, i64 0) })
- br label %exit.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %27, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\v'", i64 0, i32 3, i64 0) })
+ br label %exit.i.i.i.i
-then17.i: ; preds = %body.i
- %28 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %28, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\n'", i64 0, i32 3, i64 0) })
- br label %exit.i
+then29.i.i.i.i: ; preds = %body.i.i.i.i
+ %28 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i.i.i.i)
+ %29 = icmp eq i32 %28, 123
+ br i1 %29, label %then31.i.i.i.i, label %else32.i.i.i.i
-then20.i: ; preds = %body.i
- %29 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %29, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\r'", i64 0, i32 3, i64 0) })
- br label %exit.i
+else30.i.i.i.i: ; preds = %body.i.i.i.i
+ %30 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
+ %sunkaddr = getelementptr inbounds i8, i8* %30, i64 24
+ %31 = bitcast i8* %sunkaddr to i32*
+ %32 = load i32, i32* %31, align 8
+ %.not.i.i.i.i = icmp eq i32 %32, 0
+ br i1 %.not.i.i.i.i, label %else34.i.i.i.i, label %then33.i.i.i.i
-then23.i: ; preds = %body.i
- %30 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %30, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\t'", i64 0, i32 3, i64 0) })
- br label %exit.i
+then31.i.i.i.i: ; preds = %then29.i.i.i.i
+ %33 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %33, %"Slice(UInt8)" { i32 3, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [4 x i8] }, { i32, i32, i32, [4 x i8] }* @"'\\#{'", i64 0, i32 3, i64 0) })
+ %34 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i.i.i.i)
+ br label %while.backedge.i.i.i.i
-then26.i: ; preds = %body.i
- %31 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %31, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\v'", i64 0, i32 3, i64 0) })
- br label %exit.i
+while.backedge.i.i.i.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit.i.i.i", %then31.i.i.i.i, %exit.i.i.i.i
+ %35 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
+ %sunkaddr3 = getelementptr inbounds i8, i8* %35, i64 40
+ %36 = bitcast i8* %sunkaddr3 to i1*
+ %reader.idx.val.i.i.i.i = load i1, i1* %36, align 8
+ br i1 %reader.idx.val.i.i.i.i, label %"*File::Error::build_message:file<String, String>:String.exit.i", label %while.backedge.body_crit_edge.i.i.i.i
-then29.i: ; preds = %body.i
- %32 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i)
- %33 = icmp eq i32 %32, 123
- br i1 %33, label %then31.i, label %else32.i
+while.backedge.body_crit_edge.i.i.i.i: ; preds = %while.backedge.i.i.i.i
+ %37 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
+ %sunkaddr4 = getelementptr inbounds i8, i8* %37, i64 8
+ %38 = bitcast i8* %sunkaddr4 to i32*
+ %.pre.i.i.i.i = load i32, i32* %38, align 8
+ br label %body.i.i.i.i
-else30.i: ; preds = %body.i
- %34 = bitcast %"Char::Reader"* %_.i.i to i8*
- %sunkaddr131 = getelementptr inbounds i8, i8* %34, i64 24
- %35 = bitcast i8* %sunkaddr131 to i32*
- %36 = load i32, i32* %35, align 8
- %.not.i = icmp eq i32 %36, 0
- br i1 %.not.i, label %else34.i, label %then33.i
+else32.i.i.i.i: ; preds = %then29.i.i.i.i
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i.i.i.i)
+ store i8 35, i8* %byte.i.i.i.i, align 1
+ %sunkaddr5 = getelementptr i8, i8* %2, i64 8
+ %39 = bitcast i8* %sunkaddr5 to i32*
+ %io.idx.val.i.i.i.i = load i32, i32* %39, align 4
+ %.not.i7.i.i.i = icmp eq i32 %io.idx.val.i.i.i.i, 0
+ br i1 %.not.i7.i.i.i, label %else2.i.i.i.i, label %then1.i.i.i.i
-then31.i: ; preds = %then29.i
- %37 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %37, %"Slice(UInt8)" { i32 3, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [4 x i8] }, { i32, i32, i32, [4 x i8] }* @"'\\#{'", i64 0, i32 3, i64 0) })
- %38 = call fastcc i32 @"*Char::Reader#next_char:Char"(%"Char::Reader"* nonnull %_.i.i)
- br label %while.i.backedge
-
-else32.i: ; preds = %then29.i
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i118)
- store i8 35, i8* %byte.i118, align 1
- %sunkaddr132 = getelementptr i8, i8* %2, i64 8
- %39 = bitcast i8* %sunkaddr132 to i32*
- %io.idx.val.i121 = load i32, i32* %39, align 4
- %.not.i122 = icmp eq i32 %io.idx.val.i121, 0
- br i1 %.not.i122, label %else2.i126, label %then1.i125
-
-then1.i125: ; preds = %else32.i
+then1.i.i.i.i: ; preds = %else32.i.i.i.i
%40 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %40, %"Slice(UInt8)" %oldret127.i124)
- br label %"*Char#to_s<String::Builder>:Nil.exit127"
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %40, %"Slice(UInt8)" %oldret127.i.i.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i.i.i"
-else2.i126: ; preds = %else32.i
+else2.i.i.i.i: ; preds = %else32.i.i.i.i
%41 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %41, i8 35)
- br label %"*Char#to_s<String::Builder>:Nil.exit127"
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %41, i8 35) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i.i.i"
-"*Char#to_s<String::Builder>:Nil.exit127": ; preds = %then1.i125, %else2.i126
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i118)
- br label %while.i.backedge
+"*Char#to_s<String::Builder>:Nil.exit.i.i.i": ; preds = %else2.i.i.i.i, %then1.i.i.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i.i.i.i)
+ br label %while.backedge.i.i.i.i
-then33.i: ; preds = %else30.i
- %42 = bitcast %"Char::Reader"* %_.i.i to i8*
- %sunkaddr133 = getelementptr inbounds i8, i8* %42, i64 12
- %43 = bitcast i8* %sunkaddr133 to i32*
+then33.i.i.i.i: ; preds = %else30.i.i.i.i
+ %42 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
+ %sunkaddr6 = getelementptr inbounds i8, i8* %42, i64 12
+ %43 = bitcast i8* %sunkaddr6 to i32*
%44 = load i32, i32* %43, align 4
%45 = icmp sgt i32 %44, 0
- br i1 %45, label %body37.i.preheader, label %exit.i
+ br i1 %45, label %body37.i.i.i.i.preheader, label %exit.i.i.i.i
-body37.i.preheader: ; preds = %then33.i
- br label %body37.i
+body37.i.i.i.i.preheader: ; preds = %then33.i.i.i.i
+ br label %body37.i.i.i.i
-else34.i: ; preds = %else30.i
- %46 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String#inspect_char<Char, (UInt8 | Nil), String::Builder>:(String::Builder | Nil)"(i32 %16, %"(UInt8 | Nil)" zeroinitializer, %"String::Builder"* %46)
- br label %exit.i
+else34.i.i.i.i: ; preds = %else30.i.i.i.i
+ %46 = call fastcc i1 @"*Char#printable?:Bool"(i32 %16)
+ br i1 %46, label %else6.i.i.i.i, label %then5.i5.i.i.i
-body37.i: ; preds = %body37.i.preheader, %"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i"
- %i35.0.i116 = phi i32 [ %62, %"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i" ], [ 0, %body37.i.preheader ]
- %47 = bitcast %"Char::Reader"* %_.i.i to i8*
- %sunkaddr134 = getelementptr inbounds i8, i8* %47, i64 16
- %48 = bitcast i8* %sunkaddr134 to i32*
- %49 = load i32, i32* %48, align 8
- %50 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %49, i32 %i35.0.i116)
- %51 = extractvalue { i32, i1 } %50, 1
- br i1 %51, label %overflow.i, label %normal.i, !prof !0
+then5.i5.i.i.i: ; preds = %else34.i.i.i.i
+ %47 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*Char#unicode_escape<String::Builder>:Nil"(i32 %16, %"String::Builder"* %47)
+ br label %exit.i.i.i.i
-overflow.i: ; preds = %body37.i
+else6.i.i.i.i: ; preds = %else34.i.i.i.i
+ %48 = bitcast i8* %2 to %"String::Builder"*
+ call fastcc void @"*Char#to_s<String::Builder>:Nil"(i32 %16, %"String::Builder"* %48)
+ br label %exit.i.i.i.i
+
+body37.i.i.i.i: ; preds = %body37.i.i.i.i.preheader, %normal.i.i.i.i
+ %i35.0102.i.i.i.i = phi i32 [ %59, %normal.i.i.i.i ], [ 0, %body37.i.i.i.i.preheader ]
+ %49 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
+ %sunkaddr7 = getelementptr inbounds i8, i8* %49, i64 16
+ %50 = bitcast i8* %sunkaddr7 to i32*
+ %51 = load i32, i32* %50, align 8
+ %52 = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %51, i32 %i35.0102.i.i.i.i)
+ %53 = extractvalue { i32, i1 } %52, 1
+ br i1 %53, label %overflow.i.i.i.i, label %normal.i.i.i.i, !prof !0
+
+overflow.i.i.i.i: ; preds = %body37.i.i.i.i
call void @__crystal_raise_overflow()
unreachable
-normal.i: ; preds = %body37.i
- %52 = bitcast i8* %2 to %"String::Builder"*
- %53 = extractvalue { i32, i1 } %50, 0
- %54 = sext i32 %53 to i64
- %55 = bitcast %String* %__temp_200 to i8*
- %sunkaddr135 = getelementptr inbounds i8, i8* %55, i64 %54
- %sunkaddr136 = getelementptr inbounds i8, i8* %sunkaddr135, i64 12
- %56 = load i8, i8* %sunkaddr136, align 1
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %52, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\x'", i64 0, i32 3, i64 0) })
- %57 = icmp ult i8 %56, 15
- br i1 %57, label %then.i160.i, label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i"
+normal.i.i.i.i: ; preds = %body37.i.i.i.i
+ %54 = bitcast i8* %2 to %"String::Builder"*
+ %55 = extractvalue { i32, i1 } %52, 0
+ %56 = sext i32 %55 to i64
+ %57 = bitcast %String* %__temp_200 to i8*
+ %sunkaddr8 = getelementptr inbounds i8, i8* %57, i64 %56
+ %sunkaddr9 = getelementptr inbounds i8, i8* %sunkaddr8, i64 12
+ %58 = load i8, i8* %sunkaddr9, align 1
+ %error.sroa.4.8.insert.ext.i.i.i.i = zext i8 %58 to i64
+ %.fca.1.0.insert.i.i.i.i = insertvalue %"(UInt8 | Nil)" { i32 286, [1 x i64] poison }, i64 %error.sroa.4.8.insert.ext.i.i.i.i, 1, 0
+ call fastcc void @"*String#inspect_char<Char, (UInt8 | Nil), String::Builder>:(String::Builder | Nil)"(i32 0, %"(UInt8 | Nil)" %.fca.1.0.insert.i.i.i.i, %"String::Builder"* %54)
+ %59 = add nuw nsw i32 %i35.0102.i.i.i.i, 1
+ %exitcond.not.i.i.i.i = icmp eq i32 %44, %59
+ br i1 %exitcond.not.i.i.i.i, label %exit.i.i.i.i, label %body37.i.i.i.i
-then.i160.i: ; preds = %normal.i
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i118)
- store i8 48, i8* %byte.i118, align 1
- %sunkaddr137 = getelementptr i8, i8* %2, i64 8
- %58 = bitcast i8* %sunkaddr137 to i32*
- %io.idx.val.i = load i32, i32* %58, align 4
- %.not = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not, label %else2.i, label %then1.i
-
-then1.i: ; preds = %then.i160.i
- %59 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %59, %"Slice(UInt8)" %oldret127.i)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
-
-else2.i: ; preds = %then.i160.i
- %60 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %60, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
-
-"*Char#to_s<String::Builder>:Nil.exit": ; preds = %then1.i, %else2.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i118)
- br label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i"
-
-"*String#dump_hex<UInt8, String::Builder>:Nil.exit.i": ; preds = %"*Char#to_s<String::Builder>:Nil.exit", %normal.i
+"*File::Error::build_message:file<String, String>:String.exit.i": ; preds = %while.backedge.i.i.i.i, %alloca
+ %60 = bitcast %"Char::Reader"* %_.i.i.i.i.i to i8*
%61 = bitcast i8* %2 to %"String::Builder"*
- call fastcc void @"*UInt8@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i8 %56, %"String::Builder"* %61)
- %62 = add nuw nsw i32 %i35.0.i116, 1
- %exitcond.not = icmp eq i32 %44, %62
- br i1 %exitcond.not, label %exit.i, label %body37.i
-
-"*String#inspect_unquoted<String::Builder>:Nil.exit": ; preds = %while.i.backedge, %alloca
- %63 = bitcast %"Char::Reader"* %_.i.i to i8*
- %64 = bitcast i8* %2 to %"String::Builder"*
- call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %63)
- %65 = call fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* %64)
- %66 = call fastcc %String* @"*String::interpolation<String, String, String, String>:String"(%String* %message, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"': ''" to %String*), %String* %65, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*))
- %67 = call i8* @strerror(i32 %1)
- %68 = call fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %67)
- %69 = call fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* %66, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %68)
- switch i32 %1, label %else14.i [
- i32 2, label %then.i
- i32 17, label %then7.i
- i32 13, label %then13.i
+ call void @llvm.lifetime.end.p0i8(i64 48, i8* nonnull %60)
+ %62 = call fastcc %String* @"*String::Builder#to_s:String"(%"String::Builder"* %61)
+ %63 = call fastcc %String* @"*String::interpolation<String, String, String, String>:String"(%String* %message, %String* bitcast ({ i32, i32, i32, [4 x i8] }* @"': ''" to %String*), %String* %62, %String* bitcast ({ i32, i32, i32, [2 x i8] }* @"'''" to %String*))
+ %64 = call i8* @strerror(i32 %1)
+ %65 = call fastcc %String* @"*String::new<Pointer(UInt8)>:String"(i8* %64)
+ %66 = call fastcc %String* @"*String::interpolation<String, String, String>:String"(%String* %63, %String* bitcast ({ i32, i32, i32, [3 x i8] }* @"': '" to %String*), %String* %65)
+ switch i32 %1, label %else14.i.i [
+ i32 2, label %then.i.i
+ i32 17, label %then7.i.i
+ i32 13, label %then13.i.i
]
-then.i: ; preds = %"*String#inspect_unquoted<String::Builder>:Nil.exit"
+then.i.i: ; preds = %"*File::Error::build_message:file<String, String>:String.exit.i"
+ %67 = call i8* @GC_malloc(i64 80)
+ %68 = getelementptr inbounds i8, i8* %67, i64 4
+ call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %68, i8 0, i64 60, i1 false)
+ %69 = bitcast i8* %67 to i32*
+ store i32 82, i32* %69, align 4
+ br label %"*File::Error@SystemError::ClassMethods::from_os_error:file<String, Errno, String>:File::Error+.exit"
+
+then7.i.i: ; preds = %"*File::Error::build_message:file<String, String>:String.exit.i"
%70 = call i8* @GC_malloc(i64 80)
%71 = getelementptr inbounds i8, i8* %70, i64 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %71, i8 0, i64 60, i1 false)
%72 = bitcast i8* %70 to i32*
- store i32 82, i32* %72, align 4
- br label %"*File::Error::new_from_os_error:file<String, Errno, String>:File::Error+.exit"
+ store i32 83, i32* %72, align 4
+ br label %"*File::Error@SystemError::ClassMethods::from_os_error:file<String, Errno, String>:File::Error+.exit"
-then7.i: ; preds = %"*String#inspect_unquoted<String::Builder>:Nil.exit"
+then13.i.i: ; preds = %"*File::Error::build_message:file<String, String>:String.exit.i"
%73 = call i8* @GC_malloc(i64 80)
%74 = getelementptr inbounds i8, i8* %73, i64 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %74, i8 0, i64 60, i1 false)
%75 = bitcast i8* %73 to i32*
- store i32 83, i32* %75, align 4
- br label %"*File::Error::new_from_os_error:file<String, Errno, String>:File::Error+.exit"
+ store i32 84, i32* %75, align 4
+ br label %"*File::Error@SystemError::ClassMethods::from_os_error:file<String, Errno, String>:File::Error+.exit"
-then13.i: ; preds = %"*String#inspect_unquoted<String::Builder>:Nil.exit"
+else14.i.i: ; preds = %"*File::Error::build_message:file<String, String>:String.exit.i"
%76 = call i8* @GC_malloc(i64 80)
%77 = getelementptr inbounds i8, i8* %76, i64 4
call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %77, i8 0, i64 60, i1 false)
%78 = bitcast i8* %76 to i32*
- store i32 84, i32* %78, align 4
- br label %"*File::Error::new_from_os_error:file<String, Errno, String>:File::Error+.exit"
+ store i32 85, i32* %78, align 4
+ br label %"*File::Error@SystemError::ClassMethods::from_os_error:file<String, Errno, String>:File::Error+.exit"
-else14.i: ; preds = %"*String#inspect_unquoted<String::Builder>:Nil.exit"
- %79 = call i8* @GC_malloc(i64 80)
- %80 = getelementptr inbounds i8, i8* %79, i64 4
- call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(80) %80, i8 0, i64 60, i1 false)
- %81 = bitcast i8* %79 to i32*
- store i32 85, i32* %81, align 4
- br label %"*File::Error::new_from_os_error:file<String, Errno, String>:File::Error+.exit"
-
-"*File::Error::new_from_os_error:file<String, Errno, String>:File::Error+.exit": ; preds = %then.i, %then7.i, %then13.i, %else14.i
- %.sink28.i = phi i8* [ %76, %then13.i ], [ %79, %else14.i ], [ %73, %then7.i ], [ %70, %then.i ]
- %.pre-phi.i = phi i32* [ %78, %then13.i ], [ %81, %else14.i ], [ %75, %then7.i ], [ %72, %then.i ]
- %82 = getelementptr inbounds i8, i8* %.sink28.i, i64 72
- %83 = bitcast i8* %82 to %String**
- store %String* null, %String** %83, align 8
- %84 = getelementptr inbounds i8, i8* %.sink28.i, i64 64
- %85 = bitcast i8* %84 to %String**
- store %String* %__temp_200, %String** %85, align 8
- %86 = getelementptr inbounds i8, i8* %.sink28.i, i64 8
- %87 = bitcast i8* %86 to %String**
- store %String* %69, %String** %87, align 8
- %88 = getelementptr inbounds i32, i32* %.pre-phi.i, i64 12
- store i32 1941, i32* %88, align 4
- %89 = getelementptr inbounds i32, i32* %.pre-phi.i, i64 14
- store i32 %1, i32* %89, align 4
- ret i32* %.pre-phi.i
+"*File::Error@SystemError::ClassMethods::from_os_error:file<String, Errno, String>:File::Error+.exit": ; preds = %then.i.i, %then7.i.i, %then13.i.i, %else14.i.i
+ %.sink28.i.i = phi i8* [ %73, %then13.i.i ], [ %76, %else14.i.i ], [ %70, %then7.i.i ], [ %67, %then.i.i ]
+ %.pre-phi.i.i = phi i32* [ %75, %then13.i.i ], [ %78, %else14.i.i ], [ %72, %then7.i.i ], [ %69, %then.i.i ]
+ %79 = getelementptr inbounds i8, i8* %.sink28.i.i, i64 72
+ %80 = bitcast i8* %79 to %String**
+ store %String* null, %String** %80, align 8
+ %81 = getelementptr inbounds i8, i8* %.sink28.i.i, i64 64
+ %82 = bitcast i8* %81 to %String**
+ store %String* %__temp_200, %String** %82, align 8
+ %83 = getelementptr inbounds i8, i8* %.sink28.i.i, i64 8
+ %84 = bitcast i8* %83 to %String**
+ store %String* %66, %String** %84, align 8
+ %85 = getelementptr inbounds i32, i32* %.pre-phi.i.i, i64 12
+ store i32 1941, i32* %85, align 4
+ %86 = getelementptr inbounds i32, i32* %.pre-phi.i.i, i64 14
+ store i32 %1, i32* %86, align 4
+ ret i32* %.pre-phi.i.i
}
; Function Attrs: uwtable
@@ -9619,9 +9944,16 @@ normal80.i: ; preds = %else70.i
}
; Function Attrs: uwtable
-define internal fastcc void @"*String#inspect_char<Char, (UInt8 | Nil), String::Builder>:(String::Builder | Nil)"(i32 %char, %"(UInt8 | Nil)" %error, %"String::Builder"* nocapture %io) unnamed_addr #1 {
+define internal fastcc void @"*String#inspect_char<Char, (UInt8 | Nil), String::Builder>:(String::Builder | Nil)"(i32 %char, %"(UInt8 | Nil)" %error, %"String::Builder"* %io) unnamed_addr #1 {
alloca:
- %byte.i = alloca i8, align 1
+ %chars.i.i = alloca [129 x i8], align 1
+ %0 = bitcast [129 x i8]* %chars.i.i to i8*
+ %1 = bitcast [129 x i8]* %chars.i.i to i8*
+ %2 = bitcast [129 x i8]* %chars.i.i to i8*
+ %byte.i.i = alloca i8, align 1
+ %byte.i9.i.i = alloca i8, align 1
+ %byte.i1.i.i = alloca i8, align 1
+ %byte.i.i.i = alloca i8, align 1
%error.fca.0.extract = extractvalue %"(UInt8 | Nil)" %error, 0
%.not = icmp eq i32 %error.fca.0.extract, 0
br i1 %.not, label %else, label %then
@@ -9630,655 +9962,191 @@ then: ; preds = %alloca
%error.fca.1.0.extract = extractvalue %"(UInt8 | Nil)" %error, 1, 0
%error3.sroa.3.8.extract.trunc = trunc i64 %error.fca.1.0.extract to i8
tail call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\x'", i64 0, i32 3, i64 0) })
- %0 = icmp ult i8 %error3.sroa.3.8.extract.trunc, 15
- br i1 %0, label %then.i, label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit"
+ %3 = icmp ult i8 %error3.sroa.3.8.extract.trunc, 15
+ br i1 %3, label %then.i, label %exit.i
then.i: ; preds = %then
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i)
- store i8 48, i8* %byte.i, align 1
- %io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i = load i32, i32* %io.idx.i, align 4
- %.not56 = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not56, label %else2.i, label %then1.i
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %2)
+ store i8 48, i8* %2, align 1
+ %io.idx.i.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i.i = load i32, i32* %io.idx.i.i, align 4
+ %.not.i2.i = icmp eq i32 %io.idx.val.i.i, 0
+ br i1 %.not.i2.i, label %else2.i.i, label %then1.i.i
-then1.i: ; preds = %then.i
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
+then1.i.i: ; preds = %then.i
+ %oldret127.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %2, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i"
-else2.i: ; preds = %then.i
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
+else2.i.i: ; preds = %then.i
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i"
-"*Char#to_s<String::Builder>:Nil.exit": ; preds = %then1.i, %else2.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i)
+"*Char#to_s<String::Builder>:Nil.exit.i": ; preds = %else2.i.i, %then1.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %2)
+ br label %exit.i
+
+exit.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit.i", %then
+ %4 = bitcast [129 x i8]* %chars.i.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 129, i8* nonnull %4)
+ switch i8 %error3.sroa.3.8.extract.trunc, label %else28.i.i [
+ i8 0, label %then21.i.i
+ i8 1, label %then27.i.i
+ ]
+
+then21.i.i: ; preds = %exit.i
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %0)
+ store i8 48, i8* %0, align 1
+ %io.idx.i.i.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i.i.i = load i32, i32* %io.idx.i.i.i, align 4
+ %.not.i.i.i = icmp eq i32 %io.idx.val.i.i.i, 0
+ br i1 %.not.i.i.i, label %else2.i.i.i, label %then1.i.i.i
+
+then1.i.i.i: ; preds = %then21.i.i
+ %oldret127.i.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %0, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i.i"
+
+else2.i.i.i: ; preds = %then21.i.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i.i"
+
+"*Char#to_s<String::Builder>:Nil.exit.i.i": ; preds = %else2.i.i.i, %then1.i.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %0)
br label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit"
-"*String#dump_hex<UInt8, String::Builder>:Nil.exit": ; preds = %then, %"*Char#to_s<String::Builder>:Nil.exit"
- call fastcc void @"*UInt8@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i8 %error3.sroa.3.8.extract.trunc, %"String::Builder"* %io)
+then27.i.i: ; preds = %exit.i
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %1)
+ store i8 49, i8* %1, align 1
+ %io.idx.i2.i.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i3.i.i = load i32, i32* %io.idx.i2.i.i, align 4
+ %.not.i4.i.i = icmp eq i32 %io.idx.val.i3.i.i, 0
+ br i1 %.not.i4.i.i, label %else2.i7.i.i, label %then1.i6.i.i
+
+then1.i6.i.i: ; preds = %then27.i.i
+ %oldret127.i5.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %1, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i5.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit8.i.i"
+
+else2.i7.i.i: ; preds = %then27.i.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 49) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit8.i.i"
+
+"*Char#to_s<String::Builder>:Nil.exit8.i.i": ; preds = %else2.i7.i.i, %then1.i6.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %1)
+ br label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit"
+
+else28.i.i: ; preds = %exit.i
+ br label %body.i.i
+
+body.i.i: ; preds = %body.i.i, %else28.i.i
+ %lsr.iv3 = phi i64 [ %lsr.iv.next4, %body.i.i ], [ 0, %else28.i.i ]
+ %num.020.i.i = phi i8 [ %error3.sroa.3.8.extract.trunc, %else28.i.i ], [ %10, %body.i.i ]
+ %5 = zext i8 %num.020.i.i to i64
+ %6 = and i64 %5, 15
+ %7 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789ABCDEFGHI...'", i64 0, i32 3, i64 %6
+ %8 = load i8, i8* %7, align 1
+ %9 = bitcast [129 x i8]* %chars.i.i to i8*
+ %sunkaddr = getelementptr i8, i8* %9, i64 %lsr.iv3
+ %sunkaddr11 = getelementptr i8, i8* %sunkaddr, i64 127
+ store i8 %8, i8* %sunkaddr11, align 1
+ %10 = lshr i8 %num.020.i.i, 4
+ %.not.i.i = icmp ult i8 %num.020.i.i, 16
+ %lsr.iv.next4 = add nsw i64 %lsr.iv3, -1
+ br i1 %.not.i.i, label %fail.i.i, label %body.i.i
+
+fail.i.i: ; preds = %body.i.i
+ %11 = mul i64 %lsr.iv.next4, -1
+ %12 = add i64 %11, -2147483648
+ %13 = icmp ult i64 %12, -4294967296
+ %14 = add i64 %lsr.iv.next4, 1
+ %scevgep = getelementptr [129 x i8], [129 x i8]* %chars.i.i, i64 0, i64 128
+ %scevgep5 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next4
+ br i1 %13, label %overflow.i.i, label %normal.i.i, !prof !0
+
+overflow.i.i: ; preds = %fail.i.i
+ call void @__crystal_raise_overflow()
+ unreachable
+
+normal.i.i: ; preds = %fail.i.i
+ %15 = mul i64 %lsr.iv.next4, -1
+ %16 = mul i64 %lsr.iv.next4, -1
+ %17 = mul i64 %lsr.iv.next4, -1
+ %tmp8 = trunc i64 %15 to i32
+ %18 = icmp slt i32 %tmp8, 1
+ br i1 %18, label %then47.i.i, label %exit54.i.i
+
+then47.i.i: ; preds = %normal.i.i
+ %tmp6 = trunc i64 %17 to i32
+ %19 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp6)
+ %20 = extractvalue { i32, i1 } %19, 0
+ %21 = extractvalue { i32, i1 } %19, 1
+ br i1 %21, label %overflow49.i.i, label %while51.preheader.i.i, !prof !0
+
+while51.preheader.i.i: ; preds = %then47.i.i
+ %22 = icmp sgt i32 %20, 0
+ br i1 %22, label %body52.lr.ph.i.i, label %exit54.i.i
+
+body52.lr.ph.i.i: ; preds = %while51.preheader.i.i
+ %oldret127.i13.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i9.i.i, 2
+ %tmp = trunc i64 %14 to i32
+ br label %body52.i.i
+
+overflow49.i.i: ; preds = %then47.i.i
+ call void @__crystal_raise_overflow()
+ unreachable
+
+body52.i.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit16.i.i", %body52.lr.ph.i.i
+ %lsr.iv1 = phi i32 [ %lsr.iv.next2, %"*Char#to_s<String::Builder>:Nil.exit16.i.i" ], [ %tmp, %body52.lr.ph.i.i ]
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i9.i.i)
+ store i8 48, i8* %byte.i9.i.i, align 1
+ %23 = bitcast %"String::Builder"* %io to i8*
+ %sunkaddr12 = getelementptr i8, i8* %23, i64 8
+ %24 = bitcast i8* %sunkaddr12 to i32*
+ %io.idx.val.i11.i.i = load i32, i32* %24, align 4
+ %.not.i12.i.i = icmp eq i32 %io.idx.val.i11.i.i, 0
+ br i1 %.not.i12.i.i, label %else2.i15.i.i, label %then1.i14.i.i
+
+then1.i14.i.i: ; preds = %body52.i.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i13.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit16.i.i"
+
+else2.i15.i.i: ; preds = %body52.i.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit16.i.i"
+
+"*Char#to_s<String::Builder>:Nil.exit16.i.i": ; preds = %else2.i15.i.i, %then1.i14.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i9.i.i)
+ %lsr.iv.next2 = add i32 %lsr.iv1, -1
+ %exitcond.not.i.i = icmp eq i32 %lsr.iv.next2, 0
+ br i1 %exitcond.not.i.i, label %exit54.i.i, label %body52.i.i
+
+exit54.i.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit16.i.i", %while51.preheader.i.i, %normal.i.i
+ %tmp7 = trunc i64 %16 to i32
+ %oldret.i.i = insertvalue %"Slice(UInt8)" undef, i32 %tmp7, 0
+ %oldret82.i.i = insertvalue %"Slice(UInt8)" %oldret.i.i, i1 false, 1
+ %oldret84.i.i = insertvalue %"Slice(UInt8)" %oldret82.i.i, i8* %scevgep5, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %oldret84.i.i)
+ br label %"*String#dump_hex<UInt8, String::Builder>:Nil.exit"
+
+"*String#dump_hex<UInt8, String::Builder>:Nil.exit": ; preds = %"*Char#to_s<String::Builder>:Nil.exit.i.i", %"*Char#to_s<String::Builder>:Nil.exit8.i.i", %exit54.i.i
+ %25 = bitcast [129 x i8]* %chars.i.i to i8*
+ call void @llvm.lifetime.end.p0i8(i64 129, i8* nonnull %25)
ret void
else: ; preds = %alloca
- %1 = icmp slt i32 %char, 128
- br i1 %1, label %then.i2, label %else.i
+ %26 = tail call fastcc i1 @"*Char#printable?:Bool"(i32 %char)
+ br i1 %26, label %else6, label %then5
-then.i2: ; preds = %else
- %2 = icmp slt i32 %char, 32
- %3 = icmp eq i32 %char, 127
- %4 = or i1 %2, %3
- br i1 %4, label %then5, label %else6
-
-else.i: ; preds = %else
- %5 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cs", align 8
- %6 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %5, null
- br i1 %6, label %then.i8, label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i8: ; preds = %else.i
- %7 = tail call i8* @GC_malloc(i64 24)
- %8 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
- %9 = bitcast i8* %7 to i32*
- %10 = getelementptr inbounds i8, i8* %7, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %10, i8 0, i64 12, i1 false)
- store i32 17, i32* %9, align 4
- %11 = getelementptr inbounds i8, i8* %7, i64 4
- %12 = bitcast i8* %11 to i32*
- store i32 0, i32* %12, align 4
- %13 = getelementptr inbounds i8, i8* %7, i64 8
- %14 = bitcast i8* %13 to i32*
- store i32 3, i32* %14, align 4
- %15 = tail call i8* @GC_malloc_atomic(i64 36)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %15, i8 0, i64 36, i1 false)
- %16 = getelementptr inbounds i8, i8* %7, i64 16
- %17 = bitcast i8* %16 to %"Tuple(Int32, Int32, Int32)"**
- %18 = bitcast i8* %16 to i8**
- store i8* %15, i8** %18, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %8)
- %19 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %17, align 8
- %20 = load i32, i32* %12, align 4
- %21 = sext i32 %20 to i64
- %.repack.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 0
- store i32 55296, i32* %.repack.i, align 4
- %.repack1.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 1
- store i32 56191, i32* %.repack1.i, align 4
- %.repack3.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 2
- store i32 1, i32* %.repack3.i, align 4
- %22 = load i32, i32* %12, align 4
- %23 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %22, i32 1)
- %24 = extractvalue { i32, i1 } %23, 1
- br i1 %24, label %overflow.i.i.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i", !prof !0
-
-overflow.i.i.i: ; preds = %then.i8
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %then.i8
- %25 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
- %26 = extractvalue { i32, i1 } %23, 0
- %sunkaddr = getelementptr inbounds i8, i8* %7, i64 4
- %27 = bitcast i8* %sunkaddr to i32*
- store i32 %26, i32* %27, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %25)
- %sunkaddr57 = getelementptr inbounds i8, i8* %7, i64 16
- %28 = bitcast i8* %sunkaddr57 to %"Tuple(Int32, Int32, Int32)"**
- %29 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %28, align 8
- %30 = load i32, i32* %27, align 4
- %31 = sext i32 %30 to i64
- %.repack.i24 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 0
- store i32 56192, i32* %.repack.i24, align 4
- %.repack1.i25 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 1
- store i32 56319, i32* %.repack1.i25, align 4
- %.repack3.i26 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 2
- store i32 1, i32* %.repack3.i26, align 4
- %32 = load i32, i32* %27, align 4
- %33 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %32, i32 1)
- %34 = extractvalue { i32, i1 } %33, 1
- br i1 %34, label %overflow.i.i4.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit5.i", !prof !0
-
-overflow.i.i4.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit5.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %35 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
- %36 = extractvalue { i32, i1 } %33, 0
- %sunkaddr58 = getelementptr inbounds i8, i8* %7, i64 4
- %37 = bitcast i8* %sunkaddr58 to i32*
- store i32 %36, i32* %37, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %35)
- %sunkaddr59 = getelementptr inbounds i8, i8* %7, i64 16
- %38 = bitcast i8* %sunkaddr59 to %"Tuple(Int32, Int32, Int32)"**
- %39 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %38, align 8
- %40 = load i32, i32* %37, align 4
- %41 = sext i32 %40 to i64
- %.repack.i27 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 0
- store i32 56320, i32* %.repack.i27, align 4
- %.repack1.i28 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 1
- store i32 57343, i32* %.repack1.i28, align 4
- %.repack3.i29 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 2
- store i32 1, i32* %.repack3.i29, align 4
- %42 = load i32, i32* %37, align 4
- %43 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %42, i32 1)
- %44 = extractvalue { i32, i1 } %43, 1
- br i1 %44, label %overflow.i.i6.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7.i", !prof !0
-
-overflow.i.i6.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit5.i"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit5.i"
- %45 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
- %46 = extractvalue { i32, i1 } %43, 0
- %sunkaddr60 = getelementptr inbounds i8, i8* %7, i64 4
- %47 = bitcast i8* %sunkaddr60 to i32*
- store i32 %46, i32* %47, align 4
- store i8* %7, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cs" to i8**), align 8
- br label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %else.i, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7.i"
- %48 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %45, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7.i" ], [ %5, %else.i ]
- %49 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Co", align 8
- %50 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %49, null
- br i1 %50, label %then.i9, label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i9: ; preds = %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit"
- %51 = tail call i8* @GC_malloc(i64 24)
- %52 = bitcast i8* %51 to %"Array(Tuple(Int32, Int32, Int32))"*
- %53 = bitcast i8* %51 to i32*
- %54 = getelementptr inbounds i8, i8* %51, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %54, i8 0, i64 12, i1 false)
- store i32 17, i32* %53, align 4
- %55 = getelementptr inbounds i8, i8* %51, i64 4
- %56 = bitcast i8* %55 to i32*
- store i32 0, i32* %56, align 4
- %57 = getelementptr inbounds i8, i8* %51, i64 8
- %58 = bitcast i8* %57 to i32*
- store i32 3, i32* %58, align 4
- %59 = tail call i8* @GC_malloc_atomic(i64 36)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %59, i8 0, i64 36, i1 false)
- %60 = getelementptr inbounds i8, i8* %51, i64 16
- %61 = bitcast i8* %60 to %"Tuple(Int32, Int32, Int32)"**
- %62 = bitcast i8* %60 to i8**
- store i8* %59, i8** %62, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %52)
- %63 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %61, align 8
- %64 = load i32, i32* %56, align 4
- %65 = sext i32 %64 to i64
- %.repack.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %63, i64 %65, i32 0
- store i32 57344, i32* %.repack.i.i, align 4
- %.repack1.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %63, i64 %65, i32 1
- store i32 63743, i32* %.repack1.i.i, align 4
- %.repack3.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %63, i64 %65, i32 2
- store i32 1, i32* %.repack3.i.i, align 4
- %66 = load i32, i32* %56, align 4
- %67 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %66, i32 1)
- %68 = extractvalue { i32, i1 } %67, 1
- br i1 %68, label %overflow.i.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit", !prof !0
-
-overflow.i.i: ; preds = %then.i9
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %then.i9
- %69 = bitcast i8* %51 to %"Array(Tuple(Int32, Int32, Int32))"*
- %70 = extractvalue { i32, i1 } %67, 0
- %sunkaddr61 = getelementptr inbounds i8, i8* %51, i64 4
- %71 = bitcast i8* %sunkaddr61 to i32*
- store i32 %70, i32* %71, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %69)
- %sunkaddr62 = getelementptr inbounds i8, i8* %51, i64 16
- %72 = bitcast i8* %sunkaddr62 to %"Tuple(Int32, Int32, Int32)"**
- %73 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %72, align 8
- %74 = load i32, i32* %71, align 4
- %75 = sext i32 %74 to i64
- %.repack.i.i31 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %73, i64 %75, i32 0
- store i32 983040, i32* %.repack.i.i31, align 4
- %.repack1.i.i32 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %73, i64 %75, i32 1
- store i32 1048573, i32* %.repack1.i.i32, align 4
- %.repack3.i.i33 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %73, i64 %75, i32 2
- store i32 1, i32* %.repack3.i.i33, align 4
- %76 = load i32, i32* %71, align 4
- %77 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %76, i32 1)
- %78 = extractvalue { i32, i1 } %77, 1
- br i1 %78, label %overflow.i.i34, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit35", !prof !0
-
-overflow.i.i34: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit35": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- %79 = bitcast i8* %51 to %"Array(Tuple(Int32, Int32, Int32))"*
- %80 = extractvalue { i32, i1 } %77, 0
- %sunkaddr63 = getelementptr inbounds i8, i8* %51, i64 4
- %81 = bitcast i8* %sunkaddr63 to i32*
- store i32 %80, i32* %81, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %79)
- %sunkaddr64 = getelementptr inbounds i8, i8* %51, i64 16
- %82 = bitcast i8* %sunkaddr64 to %"Tuple(Int32, Int32, Int32)"**
- %83 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %82, align 8
- %84 = load i32, i32* %81, align 4
- %85 = sext i32 %84 to i64
- %.repack.i.i36 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 0
- store i32 1048576, i32* %.repack.i.i36, align 4
- %.repack1.i.i37 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 1
- store i32 1114109, i32* %.repack1.i.i37, align 4
- %.repack3.i.i38 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 2
- store i32 1, i32* %.repack3.i.i38, align 4
- %86 = load i32, i32* %81, align 4
- %87 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %86, i32 1)
- %88 = extractvalue { i32, i1 } %87, 1
- br i1 %88, label %overflow.i.i39, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40", !prof !0
-
-overflow.i.i39: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit35"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit35"
- %89 = bitcast i8* %51 to %"Array(Tuple(Int32, Int32, Int32))"*
- %90 = extractvalue { i32, i1 } %87, 0
- %sunkaddr65 = getelementptr inbounds i8, i8* %51, i64 4
- %91 = bitcast i8* %sunkaddr65 to i32*
- store i32 %90, i32* %91, align 4
- store i8* %51, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Co" to i8**), align 8
- br label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit", %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40"
- %92 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %89, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40" ], [ %49, %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit" ]
- %93 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cn", align 8
- %94 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %93, null
- br i1 %94, label %then.i10, label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i10: ; preds = %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit"
- %95 = tail call i8* @GC_malloc(i64 24)
- %96 = bitcast i8* %95 to %"Array(Tuple(Int32, Int32, Int32))"*
- %97 = bitcast i8* %95 to <4 x i32>*
- store <4 x i32> <i32 17, i32 0, i32 0, i32 0>, <4 x i32>* %97, align 4
- %98 = getelementptr inbounds i8, i8* %95, i64 16
- %99 = bitcast i8* %98 to %"Tuple(Int32, Int32, Int32)"**
- store %"Tuple(Int32, Int32, Int32)"* null, %"Tuple(Int32, Int32, Int32)"** %99, align 8
- store i8* %95, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cn" to i8**), align 8
- br label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit", %then.i10
- %100 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %96, %then.i10 ], [ %93, %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit" ]
- %101 = tail call fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32))"()
- %102 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc", align 8
- %103 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %102, null
- br i1 %103, label %then.i11, label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i11: ; preds = %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit"
- %104 = tail call i8* @GC_malloc(i64 24)
- %105 = bitcast i8* %104 to %"Array(Tuple(Int32, Int32, Int32))"*
- %106 = bitcast i8* %104 to i32*
- %107 = getelementptr inbounds i8, i8* %104, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %107, i8 0, i64 12, i1 false)
- store i32 17, i32* %106, align 4
- %108 = getelementptr inbounds i8, i8* %104, i64 4
- %109 = bitcast i8* %108 to i32*
- store i32 0, i32* %109, align 4
- %110 = getelementptr inbounds i8, i8* %104, i64 8
- %111 = bitcast i8* %110 to i32*
- store i32 2, i32* %111, align 4
- %112 = tail call i8* @GC_malloc_atomic(i64 24)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %112, i8 0, i64 24, i1 false)
- %113 = getelementptr inbounds i8, i8* %104, i64 16
- %114 = bitcast i8* %113 to %"Tuple(Int32, Int32, Int32)"**
- %115 = bitcast i8* %113 to i8**
- store i8* %112, i8** %115, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %105)
- %116 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %114, align 8
- %117 = load i32, i32* %109, align 4
- %118 = sext i32 %117 to i64
- %.repack.i41 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %116, i64 %118, i32 0
- store i32 0, i32* %.repack.i41, align 4
- %.repack1.i42 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %116, i64 %118, i32 1
- store i32 31, i32* %.repack1.i42, align 4
- %.repack3.i43 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %116, i64 %118, i32 2
- store i32 1, i32* %.repack3.i43, align 4
- %119 = load i32, i32* %109, align 4
- %120 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %119, i32 1)
- %121 = extractvalue { i32, i1 } %120, 1
- br i1 %121, label %overflow.i.i.i12, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i13", !prof !0
-
-overflow.i.i.i12: ; preds = %then.i11
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i13": ; preds = %then.i11
- %122 = bitcast i8* %104 to %"Array(Tuple(Int32, Int32, Int32))"*
- %123 = extractvalue { i32, i1 } %120, 0
- %sunkaddr66 = getelementptr inbounds i8, i8* %104, i64 4
- %124 = bitcast i8* %sunkaddr66 to i32*
- store i32 %123, i32* %124, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %122)
- %sunkaddr67 = getelementptr inbounds i8, i8* %104, i64 16
- %125 = bitcast i8* %sunkaddr67 to %"Tuple(Int32, Int32, Int32)"**
- %126 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %125, align 8
- %127 = load i32, i32* %124, align 4
- %128 = sext i32 %127 to i64
- %.repack.i44 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %126, i64 %128, i32 0
- store i32 127, i32* %.repack.i44, align 4
- %.repack1.i45 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %126, i64 %128, i32 1
- store i32 159, i32* %.repack1.i45, align 4
- %.repack3.i46 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %126, i64 %128, i32 2
- store i32 1, i32* %.repack3.i46, align 4
- %129 = load i32, i32* %124, align 4
- %130 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %129, i32 1)
- %131 = extractvalue { i32, i1 } %130, 1
- br i1 %131, label %overflow.i.i3.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit4.i", !prof !0
-
-overflow.i.i3.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i13"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit4.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i13"
- %132 = bitcast i8* %104 to %"Array(Tuple(Int32, Int32, Int32))"*
- %133 = extractvalue { i32, i1 } %130, 0
- %sunkaddr68 = getelementptr inbounds i8, i8* %104, i64 4
- %134 = bitcast i8* %sunkaddr68 to i32*
- store i32 %133, i32* %134, align 4
- store i8* %104, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc" to i8**), align 8
- br label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit", %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit4.i"
- %135 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %132, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit4.i" ], [ %102, %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit" ]
- %136 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %48)
- br i1 %136, label %then5, label %else.i14
-
-else.i14: ; preds = %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit"
- %137 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %92)
- br i1 %137, label %then5, label %else2.i15
-
-else2.i15: ; preds = %else.i14
- %138 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %100)
- br i1 %138, label %then5, label %else4.i
-
-else4.i: ; preds = %else2.i15
- %139 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* %101)
- br i1 %139, label %then5, label %"*Char#control?:Bool.exit"
-
-"*Char#control?:Bool.exit": ; preds = %else4.i
- %140 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %135)
- br i1 %140, label %then5, label %else.i4
-
-else.i4: ; preds = %"*Char#control?:Bool.exit"
- %141 = tail call fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32))"()
- %142 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl", align 8
- %143 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %142, null
- br i1 %143, label %then.i16, label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i16: ; preds = %else.i4
- %144 = tail call i8* @GC_malloc(i64 24)
- %145 = bitcast i8* %144 to %"Array(Tuple(Int32, Int32, Int32))"*
- %146 = bitcast i8* %144 to i32*
- %147 = getelementptr inbounds i8, i8* %144, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %147, i8 0, i64 12, i1 false)
- store i32 17, i32* %146, align 4
- %148 = getelementptr inbounds i8, i8* %144, i64 4
- %149 = bitcast i8* %148 to i32*
- store i32 0, i32* %149, align 4
- %150 = getelementptr inbounds i8, i8* %144, i64 8
- %151 = bitcast i8* %150 to i32*
- store i32 1, i32* %151, align 4
- %152 = tail call i8* @GC_malloc_atomic(i64 12)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %152, i8 0, i64 12, i1 false)
- %153 = getelementptr inbounds i8, i8* %144, i64 16
- %154 = bitcast i8* %153 to %"Tuple(Int32, Int32, Int32)"**
- %155 = bitcast i8* %153 to i8**
- store i8* %152, i8** %155, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %145)
- %156 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %154, align 8
- %157 = load i32, i32* %149, align 4
- %158 = sext i32 %157 to i64
- %.repack.i47 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 0
- store i32 8232, i32* %.repack.i47, align 4
- %.repack1.i48 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 1
- store i32 8232, i32* %.repack1.i48, align 4
- %.repack3.i49 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 2
- store i32 1, i32* %.repack3.i49, align 4
- %159 = load i32, i32* %149, align 4
- %160 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %159, i32 1)
- %161 = extractvalue { i32, i1 } %160, 1
- br i1 %161, label %overflow.i.i.i17, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i18", !prof !0
-
-overflow.i.i.i17: ; preds = %then.i16
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i18": ; preds = %then.i16
- %162 = bitcast i8* %144 to %"Array(Tuple(Int32, Int32, Int32))"*
- %163 = extractvalue { i32, i1 } %160, 0
- %sunkaddr69 = getelementptr inbounds i8, i8* %144, i64 4
- %164 = bitcast i8* %sunkaddr69 to i32*
- store i32 %163, i32* %164, align 4
- store i8* %144, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl" to i8**), align 8
- br label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %else.i4, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i18"
- %165 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %162, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i18" ], [ %142, %else.i4 ]
- %166 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp", align 8
- %167 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %166, null
- br i1 %167, label %then.i19, label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit"
-
-then.i19: ; preds = %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit"
- %168 = tail call i8* @GC_malloc(i64 24)
- %169 = bitcast i8* %168 to %"Array(Tuple(Int32, Int32, Int32))"*
- %170 = bitcast i8* %168 to i32*
- %171 = getelementptr inbounds i8, i8* %168, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %171, i8 0, i64 12, i1 false)
- store i32 17, i32* %170, align 4
- %172 = getelementptr inbounds i8, i8* %168, i64 4
- %173 = bitcast i8* %172 to i32*
- store i32 0, i32* %173, align 4
- %174 = getelementptr inbounds i8, i8* %168, i64 8
- %175 = bitcast i8* %174 to i32*
- store i32 1, i32* %175, align 4
- %176 = tail call i8* @GC_malloc_atomic(i64 12)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %176, i8 0, i64 12, i1 false)
- %177 = getelementptr inbounds i8, i8* %168, i64 16
- %178 = bitcast i8* %177 to %"Tuple(Int32, Int32, Int32)"**
- %179 = bitcast i8* %177 to i8**
- store i8* %176, i8** %179, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %169)
- %180 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %178, align 8
- %181 = load i32, i32* %173, align 4
- %182 = sext i32 %181 to i64
- %.repack.i50 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 0
- store i32 8233, i32* %.repack.i50, align 4
- %.repack1.i51 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 1
- store i32 8233, i32* %.repack1.i51, align 4
- %.repack3.i52 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 2
- store i32 1, i32* %.repack3.i52, align 4
- %183 = load i32, i32* %173, align 4
- %184 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %183, i32 1)
- %185 = extractvalue { i32, i1 } %184, 1
- br i1 %185, label %overflow.i.i.i20, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i21", !prof !0
-
-overflow.i.i.i20: ; preds = %then.i19
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i21": ; preds = %then.i19
- %186 = bitcast i8* %168 to %"Array(Tuple(Int32, Int32, Int32))"*
- %187 = extractvalue { i32, i1 } %184, 0
- %sunkaddr70 = getelementptr inbounds i8, i8* %168, i64 4
- %188 = bitcast i8* %sunkaddr70 to i32*
- store i32 %187, i32* %188, align 4
- store i8* %168, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp" to i8**), align 8
- br label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit"
-
-"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit", %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i21"
- %189 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %186, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i21" ], [ %166, %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit" ]
- %190 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* %141)
- br i1 %190, label %then5, label %else.i22
-
-else.i22: ; preds = %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit"
- %191 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %165)
- br i1 %191, label %then5, label %"*Char#whitespace?:Bool.exit"
-
-"*Char#whitespace?:Bool.exit": ; preds = %else.i22
- %192 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %char, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %189)
- br i1 %192, label %then5, label %else6
-
-then5: ; preds = %"*Char#whitespace?:Bool.exit", %else4.i, %else2.i15, %else.i14, %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit", %then.i2, %"*Char#control?:Bool.exit", %else.i22, %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit"
+then5: ; preds = %else
tail call fastcc void @"*Char#unicode_escape<String::Builder>:Nil"(i32 %char, %"String::Builder"* %io)
ret void
-else6: ; preds = %then.i2, %"*Char#whitespace?:Bool.exit"
+else6: ; preds = %else
tail call fastcc void @"*Char#to_s<String::Builder>:Nil"(i32 %char, %"String::Builder"* %io)
ret void
}
-; Function Attrs: uwtable
-define internal fastcc void @"*UInt8@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i8 %self, %"String::Builder"* nocapture %io) unnamed_addr #1 {
-alloca:
- %byte.i14 = alloca i8, align 1
- %byte.i2 = alloca i8, align 1
- %byte.i = alloca i8, align 1
- %chars = alloca [129 x i8], align 1
- switch i8 %self, label %else28 [
- i8 0, label %then21
- i8 1, label %then27
- ]
-
-exit20: ; preds = %"*Char#to_s<String::Builder>:Nil.exit13", %exit54, %"*Char#to_s<String::Builder>:Nil.exit"
- ret void
-
-then21: ; preds = %alloca
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i14)
- store i8 48, i8* %byte.i14, align 1
- %io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i = load i32, i32* %io.idx.i, align 4
- %.not29 = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not29, label %else2.i, label %then1.i
-
-then1.i: ; preds = %then21
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i14, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
-
-else2.i: ; preds = %then21
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
-
-"*Char#to_s<String::Builder>:Nil.exit": ; preds = %then1.i, %else2.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i14)
- br label %exit20
-
-then27: ; preds = %alloca
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i14)
- store i8 49, i8* %byte.i14, align 1
- %io.idx.i3 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i4 = load i32, i32* %io.idx.i3, align 4
- %.not28 = icmp eq i32 %io.idx.val.i4, 0
- br i1 %.not28, label %else2.i12, label %then1.i11
-
-then1.i11: ; preds = %then27
- %oldret127.i10 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i14, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i10)
- br label %"*Char#to_s<String::Builder>:Nil.exit13"
-
-else2.i12: ; preds = %then27
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 49)
- br label %"*Char#to_s<String::Builder>:Nil.exit13"
-
-"*Char#to_s<String::Builder>:Nil.exit13": ; preds = %then1.i11, %else2.i12
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i14)
- br label %exit20
-
-else28: ; preds = %alloca
- br label %body
-
-body: ; preds = %else28, %body
- %lsr.iv37 = phi i64 [ 0, %else28 ], [ %lsr.iv.next38, %body ]
- %num.032 = phi i8 [ %self, %else28 ], [ %5, %body ]
- %0 = zext i8 %num.032 to i64
- %1 = and i64 %0, 15
- %2 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789ABCDEFGHI...'", i64 0, i32 3, i64 %1
- %3 = load i8, i8* %2, align 1
- %4 = bitcast [129 x i8]* %chars to i8*
- %sunkaddr = getelementptr i8, i8* %4, i64 %lsr.iv37
- %sunkaddr45 = getelementptr i8, i8* %sunkaddr, i64 127
- store i8 %3, i8* %sunkaddr45, align 1
- %5 = lshr i8 %num.032, 4
- %.not = icmp ult i8 %num.032, 16
- %lsr.iv.next38 = add nsw i64 %lsr.iv37, -1
- br i1 %.not, label %fail, label %body
-
-fail: ; preds = %body
- %6 = mul i64 %lsr.iv.next38, -1
- %7 = add i64 %6, -2147483648
- %8 = icmp ult i64 %7, -4294967296
- %9 = add i64 %lsr.iv.next38, 1
- %scevgep = getelementptr [129 x i8], [129 x i8]* %chars, i64 0, i64 128
- %scevgep42 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next38
- br i1 %8, label %overflow, label %normal, !prof !0
-
-overflow: ; preds = %fail
- call void @__crystal_raise_overflow()
- unreachable
-
-normal: ; preds = %fail
- %10 = mul i64 %lsr.iv.next38, -1
- %11 = mul i64 %lsr.iv.next38, -1
- %12 = mul i64 %lsr.iv.next38, -1
- %tmp41 = trunc i64 %10 to i32
- %13 = icmp slt i32 %tmp41, 1
- br i1 %13, label %then47, label %exit54
-
-then47: ; preds = %normal
- %tmp40 = trunc i64 %11 to i32
- %14 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp40)
- %15 = extractvalue { i32, i1 } %14, 0
- %16 = extractvalue { i32, i1 } %14, 1
- br i1 %16, label %overflow49, label %while51.preheader, !prof !0
-
-while51.preheader: ; preds = %then47
- %17 = icmp sgt i32 %15, 0
- br i1 %17, label %body52.lr.ph, label %exit54
-
-body52.lr.ph: ; preds = %while51.preheader
- %oldret127.i22 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i14, 2
- %tmp = trunc i64 %9 to i32
- br label %body52
-
-overflow49: ; preds = %then47
- call void @__crystal_raise_overflow()
- unreachable
-
-body52: ; preds = %body52.lr.ph, %"*Char#to_s<String::Builder>:Nil.exit25"
- %lsr.iv35 = phi i32 [ %tmp, %body52.lr.ph ], [ %lsr.iv.next36, %"*Char#to_s<String::Builder>:Nil.exit25" ]
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i14)
- store i8 48, i8* %byte.i14, align 1
- %18 = bitcast %"String::Builder"* %io to i8*
- %sunkaddr46 = getelementptr i8, i8* %18, i64 8
- %19 = bitcast i8* %sunkaddr46 to i32*
- %io.idx.val.i16 = load i32, i32* %19, align 4
- %.not30 = icmp eq i32 %io.idx.val.i16, 0
- br i1 %.not30, label %else2.i24, label %then1.i23
-
-then1.i23: ; preds = %body52
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i22)
- br label %"*Char#to_s<String::Builder>:Nil.exit25"
-
-else2.i24: ; preds = %body52
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit25"
-
-"*Char#to_s<String::Builder>:Nil.exit25": ; preds = %then1.i23, %else2.i24
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i14)
- %lsr.iv.next36 = add i32 %lsr.iv35, -1
- %exitcond.not = icmp eq i32 %lsr.iv.next36, 0
- br i1 %exitcond.not, label %exit54, label %body52
-
-exit54: ; preds = %"*Char#to_s<String::Builder>:Nil.exit25", %while51.preheader, %normal
- %tmp39 = trunc i64 %12 to i32
- %oldret = insertvalue %"Slice(UInt8)" undef, i32 %tmp39, 0
- %oldret82 = insertvalue %"Slice(UInt8)" %oldret, i1 false, 1
- %oldret84 = insertvalue %"Slice(UInt8)" %oldret82, i8* %scevgep42, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %oldret84)
- br label %exit20
-}
-
; Function Attrs: uwtable
define internal fastcc i1 @"*Char#printable?:Bool"(i32 %self) unnamed_addr #1 {
alloca:
@@ -10289,470 +10157,866 @@ then.i: ; preds = %alloca
%1 = icmp slt i32 %self, 32
%2 = icmp eq i32 %self, 127
%3 = or i1 %1, %2
- br i1 %3, label %exit3, label %then.i4
+ br i1 %3, label %exit3, label %then
else.i: ; preds = %alloca
%4 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cs", align 8
%5 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %4, null
- br i1 %5, label %then.i.i, label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br i1 %5, label %then.i.i.i, label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-then.i.i: ; preds = %else.i
+then.i.i.i: ; preds = %else.i
%6 = tail call i8* @GC_malloc(i64 24)
- %7 = bitcast i8* %6 to %"Array(Tuple(Int32, Int32, Int32))"*
- %8 = bitcast i8* %6 to i32*
- %9 = getelementptr inbounds i8, i8* %6, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %9, i8 0, i64 12, i1 false)
- store i32 17, i32* %8, align 4
- %10 = getelementptr inbounds i8, i8* %6, i64 4
- %11 = bitcast i8* %10 to i32*
- store i32 0, i32* %11, align 4
- %12 = getelementptr inbounds i8, i8* %6, i64 8
- %13 = bitcast i8* %12 to i32*
- store i32 3, i32* %13, align 4
- %14 = tail call i8* @GC_malloc_atomic(i64 36)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %14, i8 0, i64 36, i1 false)
- %15 = getelementptr inbounds i8, i8* %6, i64 16
- %16 = bitcast i8* %15 to %"Tuple(Int32, Int32, Int32)"**
- %17 = bitcast i8* %15 to i8**
- store i8* %14, i8** %17, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %7)
- %18 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %16, align 8
- %19 = load i32, i32* %11, align 4
+ %7 = bitcast i8* %6 to i32*
+ %8 = getelementptr inbounds i8, i8* %6, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %8, i8 0, i64 12, i1 false)
+ store i32 17, i32* %7, align 4
+ %9 = getelementptr inbounds i8, i8* %6, i64 4
+ %10 = bitcast i8* %9 to i32*
+ store i32 0, i32* %10, align 4
+ %11 = getelementptr inbounds i8, i8* %6, i64 8
+ %12 = bitcast i8* %11 to i32*
+ store i32 3, i32* %12, align 4
+ %13 = tail call i8* @GC_malloc_atomic(i64 36)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %13, i8 0, i64 36, i1 false)
+ %14 = getelementptr inbounds i8, i8* %6, i64 16
+ %15 = bitcast i8* %14 to i8**
+ store i8* %13, i8** %15, align 8
+ %16 = bitcast i8* %6 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %16)
+ %17 = bitcast i8* %14 to %"Tuple(Int32, Int32, Int32)"**
+ %18 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %17, align 8
+ %19 = load i32, i32* %10, align 4
%20 = sext i32 %19 to i64
- %.repack.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 0
- store i32 55296, i32* %.repack.i.i.i, align 4
- %.repack1.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 1
- store i32 56191, i32* %.repack1.i.i.i, align 4
- %.repack3.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 2
- store i32 1, i32* %.repack3.i.i.i, align 4
- %21 = load i32, i32* %11, align 4
+ %.repack.i.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 0
+ store i32 55296, i32* %.repack.i.i.i.i.i.i, align 4
+ %.repack1.i.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 1
+ store i32 56191, i32* %.repack1.i.i.i.i.i.i, align 4
+ %.repack3.i.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %18, i64 %20, i32 2
+ store i32 1, i32* %.repack3.i.i.i.i.i.i, align 4
+ %21 = load i32, i32* %10, align 4
%22 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %21, i32 1)
%23 = extractvalue { i32, i1 } %22, 1
- br i1 %23, label %overflow.i.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i", !prof !0
+ br i1 %23, label %overflow.i.i.i.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i.i", !prof !0
-overflow.i.i: ; preds = %then.i.i
+overflow.i.i.i.i.i.i: ; preds = %then.i.i.i
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %then.i.i
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i.i": ; preds = %then.i.i.i
%24 = bitcast i8* %6 to %"Array(Tuple(Int32, Int32, Int32))"*
%25 = extractvalue { i32, i1 } %22, 0
%sunkaddr = getelementptr inbounds i8, i8* %6, i64 4
%26 = bitcast i8* %sunkaddr to i32*
store i32 %25, i32* %26, align 4
tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %24)
- %sunkaddr15 = getelementptr inbounds i8, i8* %6, i64 16
- %27 = bitcast i8* %sunkaddr15 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr4 = getelementptr inbounds i8, i8* %6, i64 16
+ %27 = bitcast i8* %sunkaddr4 to %"Tuple(Int32, Int32, Int32)"**
%28 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %27, align 8
%29 = load i32, i32* %26, align 4
%30 = sext i32 %29 to i64
- %.repack.i.i4.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 0
- store i32 56192, i32* %.repack.i.i4.i, align 4
- %.repack1.i.i5.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 1
- store i32 56319, i32* %.repack1.i.i5.i, align 4
- %.repack3.i.i6.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 2
- store i32 1, i32* %.repack3.i.i6.i, align 4
+ %.repack.i.i.i4.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 0
+ store i32 56192, i32* %.repack.i.i.i4.i.i.i, align 4
+ %.repack1.i.i.i5.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 1
+ store i32 56319, i32* %.repack1.i.i.i5.i.i.i, align 4
+ %.repack3.i.i.i6.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %28, i64 %30, i32 2
+ store i32 1, i32* %.repack3.i.i.i6.i.i.i, align 4
%31 = load i32, i32* %26, align 4
%32 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %31, i32 1)
%33 = extractvalue { i32, i1 } %32, 1
- br i1 %33, label %overflow.i7.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit8.i", !prof !0
+ br i1 %33, label %overflow.i.i.i7.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i.i.i", !prof !0
-overflow.i7.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i"
+overflow.i.i.i7.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit8.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i.i"
%34 = bitcast i8* %6 to %"Array(Tuple(Int32, Int32, Int32))"*
%35 = extractvalue { i32, i1 } %32, 0
- %sunkaddr16 = getelementptr inbounds i8, i8* %6, i64 4
- %36 = bitcast i8* %sunkaddr16 to i32*
+ %sunkaddr5 = getelementptr inbounds i8, i8* %6, i64 4
+ %36 = bitcast i8* %sunkaddr5 to i32*
store i32 %35, i32* %36, align 4
tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %34)
- %sunkaddr17 = getelementptr inbounds i8, i8* %6, i64 16
- %37 = bitcast i8* %sunkaddr17 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr6 = getelementptr inbounds i8, i8* %6, i64 16
+ %37 = bitcast i8* %sunkaddr6 to %"Tuple(Int32, Int32, Int32)"**
%38 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %37, align 8
%39 = load i32, i32* %36, align 4
%40 = sext i32 %39 to i64
- %.repack.i.i9.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 0
- store i32 56320, i32* %.repack.i.i9.i, align 4
- %.repack1.i.i10.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 1
- store i32 57343, i32* %.repack1.i.i10.i, align 4
- %.repack3.i.i11.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 2
- store i32 1, i32* %.repack3.i.i11.i, align 4
+ %.repack.i.i.i9.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 0
+ store i32 56320, i32* %.repack.i.i.i9.i.i.i, align 4
+ %.repack1.i.i.i10.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 1
+ store i32 57343, i32* %.repack1.i.i.i10.i.i.i, align 4
+ %.repack3.i.i.i11.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %38, i64 %40, i32 2
+ store i32 1, i32* %.repack3.i.i.i11.i.i.i, align 4
%41 = load i32, i32* %36, align 4
%42 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %41, i32 1)
%43 = extractvalue { i32, i1 } %42, 1
- br i1 %43, label %overflow.i12.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13.i", !prof !0
+ br i1 %43, label %overflow.i.i.i12.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i.i.i", !prof !0
-overflow.i12.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit8.i"
+overflow.i.i.i12.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit8.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i.i.i"
%44 = bitcast i8* %6 to %"Array(Tuple(Int32, Int32, Int32))"*
%45 = extractvalue { i32, i1 } %42, 0
- %sunkaddr18 = getelementptr inbounds i8, i8* %6, i64 4
- %46 = bitcast i8* %sunkaddr18 to i32*
+ %sunkaddr7 = getelementptr inbounds i8, i8* %6, i64 4
+ %46 = bitcast i8* %sunkaddr7 to i32*
store i32 %45, i32* %46, align 4
store i8* %6, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cs" to i8**), align 8
- br label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br label %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13.i", %else.i
- %47 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %44, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13.i" ], [ %4, %else.i ]
+"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i.i.i", %else.i
+ %47 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %44, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i.i.i" ], [ %4, %else.i ]
%48 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Co", align 8
%49 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %48, null
- br i1 %49, label %then.i1.i, label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br i1 %49, label %then.i4.i.i, label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-then.i1.i: ; preds = %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i"
+then.i4.i.i: ; preds = %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
%50 = tail call i8* @GC_malloc(i64 24)
- %51 = bitcast i8* %50 to %"Array(Tuple(Int32, Int32, Int32))"*
- %52 = bitcast i8* %50 to i32*
- %53 = getelementptr inbounds i8, i8* %50, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %53, i8 0, i64 12, i1 false)
- store i32 17, i32* %52, align 4
- %54 = getelementptr inbounds i8, i8* %50, i64 4
- %55 = bitcast i8* %54 to i32*
- store i32 0, i32* %55, align 4
- %56 = getelementptr inbounds i8, i8* %50, i64 8
- %57 = bitcast i8* %56 to i32*
- store i32 3, i32* %57, align 4
- %58 = tail call i8* @GC_malloc_atomic(i64 36)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %58, i8 0, i64 36, i1 false)
- %59 = getelementptr inbounds i8, i8* %50, i64 16
- %60 = bitcast i8* %59 to %"Tuple(Int32, Int32, Int32)"**
- %61 = bitcast i8* %59 to i8**
- store i8* %58, i8** %61, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %51)
- %62 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %60, align 8
- %63 = load i32, i32* %55, align 4
+ %51 = bitcast i8* %50 to i32*
+ %52 = getelementptr inbounds i8, i8* %50, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %52, i8 0, i64 12, i1 false)
+ store i32 17, i32* %51, align 4
+ %53 = getelementptr inbounds i8, i8* %50, i64 4
+ %54 = bitcast i8* %53 to i32*
+ store i32 0, i32* %54, align 4
+ %55 = getelementptr inbounds i8, i8* %50, i64 8
+ %56 = bitcast i8* %55 to i32*
+ store i32 3, i32* %56, align 4
+ %57 = tail call i8* @GC_malloc_atomic(i64 36)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(36) %57, i8 0, i64 36, i1 false)
+ %58 = getelementptr inbounds i8, i8* %50, i64 16
+ %59 = bitcast i8* %58 to i8**
+ store i8* %57, i8** %59, align 8
+ %60 = bitcast i8* %50 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %60)
+ %61 = bitcast i8* %58 to %"Tuple(Int32, Int32, Int32)"**
+ %62 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %61, align 8
+ %63 = load i32, i32* %54, align 4
%64 = sext i32 %63 to i64
- %.repack.i.i14.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 0
- store i32 57344, i32* %.repack.i.i14.i, align 4
- %.repack1.i.i15.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 1
- store i32 63743, i32* %.repack1.i.i15.i, align 4
- %.repack3.i.i16.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 2
- store i32 1, i32* %.repack3.i.i16.i, align 4
- %65 = load i32, i32* %55, align 4
+ %.repack.i.i.i.i1.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 0
+ store i32 57344, i32* %.repack.i.i.i.i1.i.i, align 4
+ %.repack1.i.i.i.i2.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 1
+ store i32 63743, i32* %.repack1.i.i.i.i2.i.i, align 4
+ %.repack3.i.i.i.i3.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %62, i64 %64, i32 2
+ store i32 1, i32* %.repack3.i.i.i.i3.i.i, align 4
+ %65 = load i32, i32* %54, align 4
%66 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %65, i32 1)
%67 = extractvalue { i32, i1 } %66, 1
- br i1 %67, label %overflow.i17.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit18.i", !prof !0
+ br i1 %67, label %overflow.i.i.i.i5.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i9.i.i", !prof !0
-overflow.i17.i: ; preds = %then.i1.i
+overflow.i.i.i.i5.i.i: ; preds = %then.i4.i.i
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit18.i": ; preds = %then.i1.i
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i9.i.i": ; preds = %then.i4.i.i
%68 = bitcast i8* %50 to %"Array(Tuple(Int32, Int32, Int32))"*
%69 = extractvalue { i32, i1 } %66, 0
- %sunkaddr19 = getelementptr inbounds i8, i8* %50, i64 4
- %70 = bitcast i8* %sunkaddr19 to i32*
+ %sunkaddr8 = getelementptr inbounds i8, i8* %50, i64 4
+ %70 = bitcast i8* %sunkaddr8 to i32*
store i32 %69, i32* %70, align 4
tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %68)
- %sunkaddr20 = getelementptr inbounds i8, i8* %50, i64 16
- %71 = bitcast i8* %sunkaddr20 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr9 = getelementptr inbounds i8, i8* %50, i64 16
+ %71 = bitcast i8* %sunkaddr9 to %"Tuple(Int32, Int32, Int32)"**
%72 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %71, align 8
%73 = load i32, i32* %70, align 4
%74 = sext i32 %73 to i64
- %.repack.i.i19.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 0
- store i32 983040, i32* %.repack.i.i19.i, align 4
- %.repack1.i.i20.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 1
- store i32 1048573, i32* %.repack1.i.i20.i, align 4
- %.repack3.i.i21.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 2
- store i32 1, i32* %.repack3.i.i21.i, align 4
+ %.repack.i.i.i4.i6.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 0
+ store i32 983040, i32* %.repack.i.i.i4.i6.i.i, align 4
+ %.repack1.i.i.i5.i7.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 1
+ store i32 1048573, i32* %.repack1.i.i.i5.i7.i.i, align 4
+ %.repack3.i.i.i6.i8.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %72, i64 %74, i32 2
+ store i32 1, i32* %.repack3.i.i.i6.i8.i.i, align 4
%75 = load i32, i32* %70, align 4
%76 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %75, i32 1)
%77 = extractvalue { i32, i1 } %76, 1
- br i1 %77, label %overflow.i22.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit23.i", !prof !0
+ br i1 %77, label %overflow.i.i.i7.i10.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i14.i.i", !prof !0
-overflow.i22.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit18.i"
+overflow.i.i.i7.i10.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i9.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit23.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit18.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i14.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i9.i.i"
%78 = bitcast i8* %50 to %"Array(Tuple(Int32, Int32, Int32))"*
%79 = extractvalue { i32, i1 } %76, 0
- %sunkaddr21 = getelementptr inbounds i8, i8* %50, i64 4
- %80 = bitcast i8* %sunkaddr21 to i32*
+ %sunkaddr10 = getelementptr inbounds i8, i8* %50, i64 4
+ %80 = bitcast i8* %sunkaddr10 to i32*
store i32 %79, i32* %80, align 4
tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %78)
- %sunkaddr22 = getelementptr inbounds i8, i8* %50, i64 16
- %81 = bitcast i8* %sunkaddr22 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr11 = getelementptr inbounds i8, i8* %50, i64 16
+ %81 = bitcast i8* %sunkaddr11 to %"Tuple(Int32, Int32, Int32)"**
%82 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %81, align 8
%83 = load i32, i32* %80, align 4
%84 = sext i32 %83 to i64
- %.repack.i.i24.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 0
- store i32 1048576, i32* %.repack.i.i24.i, align 4
- %.repack1.i.i25.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 1
- store i32 1114109, i32* %.repack1.i.i25.i, align 4
- %.repack3.i.i26.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 2
- store i32 1, i32* %.repack3.i.i26.i, align 4
+ %.repack.i.i.i9.i11.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 0
+ store i32 1048576, i32* %.repack.i.i.i9.i11.i.i, align 4
+ %.repack1.i.i.i10.i12.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 1
+ store i32 1114109, i32* %.repack1.i.i.i10.i12.i.i, align 4
+ %.repack3.i.i.i11.i13.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %82, i64 %84, i32 2
+ store i32 1, i32* %.repack3.i.i.i11.i13.i.i, align 4
%85 = load i32, i32* %80, align 4
%86 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %85, i32 1)
%87 = extractvalue { i32, i1 } %86, 1
- br i1 %87, label %overflow.i27.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28.i", !prof !0
+ br i1 %87, label %overflow.i.i.i12.i15.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i16.i.i", !prof !0
-overflow.i27.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit23.i"
+overflow.i.i.i12.i15.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i14.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit23.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i16.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit8.i14.i.i"
%88 = bitcast i8* %50 to %"Array(Tuple(Int32, Int32, Int32))"*
%89 = extractvalue { i32, i1 } %86, 0
- %sunkaddr23 = getelementptr inbounds i8, i8* %50, i64 4
- %90 = bitcast i8* %sunkaddr23 to i32*
+ %sunkaddr12 = getelementptr inbounds i8, i8* %50, i64 4
+ %90 = bitcast i8* %sunkaddr12 to i32*
store i32 %89, i32* %90, align 4
store i8* %50, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Co" to i8**), align 8
- br label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br label %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28.i", %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %91 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %88, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28.i" ], [ %48, %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
+"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i16.i.i", %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %91 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %88, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit13.i16.i.i" ], [ %48, %"*Unicode::category_Cs:Array(Tuple(Int32, Int32, Int32)).exit.i.i" ]
%92 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cn", align 8
%93 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %92, null
- br i1 %93, label %then.i2.i, label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br i1 %93, label %then.i17.i.i, label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-then.i2.i: ; preds = %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i"
+then.i17.i.i: ; preds = %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
%94 = tail call i8* @GC_malloc(i64 24)
- %95 = bitcast i8* %94 to %"Array(Tuple(Int32, Int32, Int32))"*
- %96 = bitcast i8* %94 to <4 x i32>*
- store <4 x i32> <i32 17, i32 0, i32 0, i32 0>, <4 x i32>* %96, align 4
- %97 = getelementptr inbounds i8, i8* %94, i64 16
- %98 = bitcast i8* %97 to %"Tuple(Int32, Int32, Int32)"**
- store %"Tuple(Int32, Int32, Int32)"* null, %"Tuple(Int32, Int32, Int32)"** %98, align 8
+ %95 = bitcast i8* %94 to i32*
+ %96 = getelementptr inbounds i8, i8* %94, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %96, i8 0, i64 12, i1 false)
+ store i32 17, i32* %95, align 4
+ %97 = getelementptr inbounds i8, i8* %94, i64 4
+ %98 = bitcast i8* %97 to i32*
+ store i32 0, i32* %98, align 4
+ %99 = getelementptr inbounds i8, i8* %94, i64 8
+ %100 = bitcast i8* %99 to i32*
+ store i32 0, i32* %100, align 4
+ %101 = bitcast i8* %94 to %"Array(Tuple(Int32, Int32, Int32))"*
store i8* %94, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cn" to i8**), align 8
- br label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ br label %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %then.i2.i, %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %99 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %95, %then.i2.i ], [ %92, %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
- %100 = tail call fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32))"()
- %101 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc", align 8
- %102 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %101, null
- br i1 %102, label %then.i3.i, label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i"
+"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i": ; preds = %then.i17.i.i, %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %102 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %101, %then.i17.i.i ], [ %92, %"*Unicode::category_Co:Array(Tuple(Int32, Int32, Int32)).exit.i.i" ]
+ %103 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cf", align 8
+ %104 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %103, null
+ br i1 %104, label %then.i21.i.i, label %"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
-then.i3.i: ; preds = %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %103 = tail call i8* @GC_malloc(i64 24)
- %104 = bitcast i8* %103 to %"Array(Tuple(Int32, Int32, Int32))"*
- %105 = bitcast i8* %103 to i32*
- %106 = getelementptr inbounds i8, i8* %103, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %106, i8 0, i64 12, i1 false)
- store i32 17, i32* %105, align 4
- %107 = getelementptr inbounds i8, i8* %103, i64 4
- %108 = bitcast i8* %107 to i32*
- store i32 0, i32* %108, align 4
- %109 = getelementptr inbounds i8, i8* %103, i64 8
- %110 = bitcast i8* %109 to i32*
- store i32 2, i32* %110, align 4
- %111 = tail call i8* @GC_malloc_atomic(i64 24)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %111, i8 0, i64 24, i1 false)
- %112 = getelementptr inbounds i8, i8* %103, i64 16
- %113 = bitcast i8* %112 to %"Tuple(Int32, Int32, Int32)"**
- %114 = bitcast i8* %112 to i8**
- store i8* %111, i8** %114, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %104)
- %115 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %113, align 8
- %116 = load i32, i32* %108, align 4
- %117 = sext i32 %116 to i64
- %.repack.i.i29.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %115, i64 %117, i32 0
- store i32 0, i32* %.repack.i.i29.i, align 4
- %.repack1.i.i30.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %115, i64 %117, i32 1
- store i32 31, i32* %.repack1.i.i30.i, align 4
- %.repack3.i.i31.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %115, i64 %117, i32 2
- store i32 1, i32* %.repack3.i.i31.i, align 4
- %118 = load i32, i32* %108, align 4
- %119 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %118, i32 1)
- %120 = extractvalue { i32, i1 } %119, 1
- br i1 %120, label %overflow.i32.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit33.i", !prof !0
+then.i21.i.i: ; preds = %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %105 = tail call i8* @GC_malloc(i64 24)
+ %106 = bitcast i8* %105 to i32*
+ %107 = getelementptr inbounds i8, i8* %105, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %107, i8 0, i64 12, i1 false)
+ store i32 17, i32* %106, align 4
+ %108 = getelementptr inbounds i8, i8* %105, i64 4
+ %109 = bitcast i8* %108 to i32*
+ store i32 0, i32* %109, align 4
+ %110 = getelementptr inbounds i8, i8* %105, i64 8
+ %111 = bitcast i8* %110 to i32*
+ store i32 18, i32* %111, align 4
+ %112 = tail call i8* @GC_malloc_atomic(i64 216)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(216) %112, i8 0, i64 216, i1 false)
+ %113 = getelementptr inbounds i8, i8* %105, i64 16
+ %114 = bitcast i8* %113 to i8**
+ store i8* %112, i8** %114, align 8
+ %115 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %115)
+ %116 = bitcast i8* %113 to %"Tuple(Int32, Int32, Int32)"**
+ %117 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %116, align 8
+ %118 = load i32, i32* %109, align 4
+ %119 = sext i32 %118 to i64
+ %.repack.i.i.i.i18.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %117, i64 %119, i32 0
+ store i32 173, i32* %.repack.i.i.i.i18.i.i, align 4
+ %.repack1.i.i.i.i19.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %117, i64 %119, i32 1
+ store i32 1536, i32* %.repack1.i.i.i.i19.i.i, align 4
+ %.repack3.i.i.i.i20.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %117, i64 %119, i32 2
+ store i32 1363, i32* %.repack3.i.i.i.i20.i.i, align 4
+ %120 = load i32, i32* %109, align 4
+ %121 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %120, i32 1)
+ %122 = extractvalue { i32, i1 } %121, 1
+ br i1 %122, label %overflow.i.i.i.i22.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i23.i.i", !prof !0
-overflow.i32.i: ; preds = %then.i3.i
+overflow.i.i.i.i22.i.i: ; preds = %then.i21.i.i
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit33.i": ; preds = %then.i3.i
- %121 = bitcast i8* %103 to %"Array(Tuple(Int32, Int32, Int32))"*
- %122 = extractvalue { i32, i1 } %119, 0
- %sunkaddr24 = getelementptr inbounds i8, i8* %103, i64 4
- %123 = bitcast i8* %sunkaddr24 to i32*
- store i32 %122, i32* %123, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %121)
- %sunkaddr25 = getelementptr inbounds i8, i8* %103, i64 16
- %124 = bitcast i8* %sunkaddr25 to %"Tuple(Int32, Int32, Int32)"**
- %125 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %124, align 8
- %126 = load i32, i32* %123, align 4
- %127 = sext i32 %126 to i64
- %.repack.i.i34.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %125, i64 %127, i32 0
- store i32 127, i32* %.repack.i.i34.i, align 4
- %.repack1.i.i35.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %125, i64 %127, i32 1
- store i32 159, i32* %.repack1.i.i35.i, align 4
- %.repack3.i.i36.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %125, i64 %127, i32 2
- store i32 1, i32* %.repack3.i.i36.i, align 4
- %128 = load i32, i32* %123, align 4
- %129 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %128, i32 1)
- %130 = extractvalue { i32, i1 } %129, 1
- br i1 %130, label %overflow.i37.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38.i", !prof !0
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i23.i.i": ; preds = %then.i21.i.i
+ %123 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %124 = extractvalue { i32, i1 } %121, 0
+ %sunkaddr13 = getelementptr inbounds i8, i8* %105, i64 4
+ %125 = bitcast i8* %sunkaddr13 to i32*
+ store i32 %124, i32* %125, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %123)
+ %sunkaddr14 = getelementptr inbounds i8, i8* %105, i64 16
+ %126 = bitcast i8* %sunkaddr14 to %"Tuple(Int32, Int32, Int32)"**
+ %127 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %126, align 8
+ %128 = load i32, i32* %125, align 4
+ %129 = sext i32 %128 to i64
+ %.repack.i.i.i19.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %127, i64 %129, i32 0
+ store i32 1537, i32* %.repack.i.i.i19.i.i.i, align 4
+ %.repack1.i.i.i20.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %127, i64 %129, i32 1
+ store i32 1541, i32* %.repack1.i.i.i20.i.i.i, align 4
+ %.repack3.i.i.i21.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %127, i64 %129, i32 2
+ store i32 1, i32* %.repack3.i.i.i21.i.i.i, align 4
+ %130 = load i32, i32* %125, align 4
+ %131 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %130, i32 1)
+ %132 = extractvalue { i32, i1 } %131, 1
+ br i1 %132, label %overflow.i.i.i22.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit23.i.i.i", !prof !0
-overflow.i37.i: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit33.i"
+overflow.i.i.i22.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i23.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit33.i"
- %131 = bitcast i8* %103 to %"Array(Tuple(Int32, Int32, Int32))"*
- %132 = extractvalue { i32, i1 } %129, 0
- %sunkaddr26 = getelementptr inbounds i8, i8* %103, i64 4
- %133 = bitcast i8* %sunkaddr26 to i32*
- store i32 %132, i32* %133, align 4
- store i8* %103, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc" to i8**), align 8
- br label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit23.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i23.i.i"
+ %133 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %134 = extractvalue { i32, i1 } %131, 0
+ %sunkaddr15 = getelementptr inbounds i8, i8* %105, i64 4
+ %135 = bitcast i8* %sunkaddr15 to i32*
+ store i32 %134, i32* %135, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %133)
+ %sunkaddr16 = getelementptr inbounds i8, i8* %105, i64 16
+ %136 = bitcast i8* %sunkaddr16 to %"Tuple(Int32, Int32, Int32)"**
+ %137 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %136, align 8
+ %138 = load i32, i32* %135, align 4
+ %139 = sext i32 %138 to i64
+ %.repack.i.i.i24.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %137, i64 %139, i32 0
+ store i32 1564, i32* %.repack.i.i.i24.i.i.i, align 4
+ %.repack1.i.i.i25.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %137, i64 %139, i32 1
+ store i32 1757, i32* %.repack1.i.i.i25.i.i.i, align 4
+ %.repack3.i.i.i26.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %137, i64 %139, i32 2
+ store i32 193, i32* %.repack3.i.i.i26.i.i.i, align 4
+ %140 = load i32, i32* %135, align 4
+ %141 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %140, i32 1)
+ %142 = extractvalue { i32, i1 } %141, 1
+ br i1 %142, label %overflow.i.i.i27.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit28.i.i.i", !prof !0
-"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38.i", %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %134 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %131, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38.i" ], [ %101, %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
- %135 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %47)
- br i1 %135, label %exit3, label %else.i.i
-
-else.i.i: ; preds = %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %136 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %91)
- br i1 %136, label %exit3, label %else2.i.i
-
-else2.i.i: ; preds = %else.i.i
- %137 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %99)
- br i1 %137, label %exit3, label %else4.i.i
-
-else4.i.i: ; preds = %else2.i.i
- %138 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* %100)
- br i1 %138, label %exit3, label %"*Char#control?:Bool.exit"
-
-"*Char#control?:Bool.exit": ; preds = %else4.i.i
- %139 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %134)
- br i1 %139, label %exit3, label %else.i5
-
-then.i4: ; preds = %then.i
- %140 = icmp eq i32 %self, 32
- br i1 %140, label %"*Char#whitespace?:Bool.exit.thread", label %exit3
-
-else.i5: ; preds = %"*Char#control?:Bool.exit"
- %141 = tail call fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32))"()
- %142 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl", align 8
- %143 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %142, null
- br i1 %143, label %then.i.i9, label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
-
-then.i.i9: ; preds = %else.i5
- %144 = tail call i8* @GC_malloc(i64 24)
- %145 = bitcast i8* %144 to %"Array(Tuple(Int32, Int32, Int32))"*
- %146 = bitcast i8* %144 to i32*
- %147 = getelementptr inbounds i8, i8* %144, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %147, i8 0, i64 12, i1 false)
- store i32 17, i32* %146, align 4
- %148 = getelementptr inbounds i8, i8* %144, i64 4
- %149 = bitcast i8* %148 to i32*
- store i32 0, i32* %149, align 4
- %150 = getelementptr inbounds i8, i8* %144, i64 8
- %151 = bitcast i8* %150 to i32*
- store i32 1, i32* %151, align 4
- %152 = tail call i8* @GC_malloc_atomic(i64 12)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %152, i8 0, i64 12, i1 false)
- %153 = getelementptr inbounds i8, i8* %144, i64 16
- %154 = bitcast i8* %153 to %"Tuple(Int32, Int32, Int32)"**
- %155 = bitcast i8* %153 to i8**
- store i8* %152, i8** %155, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %145)
- %156 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %154, align 8
- %157 = load i32, i32* %149, align 4
- %158 = sext i32 %157 to i64
- %.repack.i.i.i6 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 0
- store i32 8232, i32* %.repack.i.i.i6, align 4
- %.repack1.i.i.i7 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 1
- store i32 8232, i32* %.repack1.i.i.i7, align 4
- %.repack3.i.i.i8 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %156, i64 %158, i32 2
- store i32 1, i32* %.repack3.i.i.i8, align 4
- %159 = load i32, i32* %149, align 4
- %160 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %159, i32 1)
- %161 = extractvalue { i32, i1 } %160, 1
- br i1 %161, label %overflow.i.i10, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i11", !prof !0
-
-overflow.i.i10: ; preds = %then.i.i9
+overflow.i.i.i27.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit23.i.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i11": ; preds = %then.i.i9
- %162 = bitcast i8* %144 to %"Array(Tuple(Int32, Int32, Int32))"*
- %163 = extractvalue { i32, i1 } %160, 0
- %sunkaddr27 = getelementptr inbounds i8, i8* %144, i64 4
- %164 = bitcast i8* %sunkaddr27 to i32*
- store i32 %163, i32* %164, align 4
- store i8* %144, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl" to i8**), align 8
- br label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit28.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit23.i.i.i"
+ %143 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %144 = extractvalue { i32, i1 } %141, 0
+ %sunkaddr17 = getelementptr inbounds i8, i8* %105, i64 4
+ %145 = bitcast i8* %sunkaddr17 to i32*
+ store i32 %144, i32* %145, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %143)
+ %sunkaddr18 = getelementptr inbounds i8, i8* %105, i64 16
+ %146 = bitcast i8* %sunkaddr18 to %"Tuple(Int32, Int32, Int32)"**
+ %147 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %146, align 8
+ %148 = load i32, i32* %145, align 4
+ %149 = sext i32 %148 to i64
+ %.repack.i.i.i29.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %147, i64 %149, i32 0
+ store i32 1807, i32* %.repack.i.i.i29.i.i.i, align 4
+ %.repack1.i.i.i30.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %147, i64 %149, i32 1
+ store i32 2192, i32* %.repack1.i.i.i30.i.i.i, align 4
+ %.repack3.i.i.i31.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %147, i64 %149, i32 2
+ store i32 385, i32* %.repack3.i.i.i31.i.i.i, align 4
+ %150 = load i32, i32* %145, align 4
+ %151 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %150, i32 1)
+ %152 = extractvalue { i32, i1 } %151, 1
+ br i1 %152, label %overflow.i.i.i32.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit33.i.i.i", !prof !0
-"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i11", %else.i5
- %165 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %162, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit.i11" ], [ %142, %else.i5 ]
- %166 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp", align 8
- %167 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %166, null
- br i1 %167, label %then.i1.i12, label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
-
-then.i1.i12: ; preds = %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %168 = tail call i8* @GC_malloc(i64 24)
- %169 = bitcast i8* %168 to %"Array(Tuple(Int32, Int32, Int32))"*
- %170 = bitcast i8* %168 to i32*
- %171 = getelementptr inbounds i8, i8* %168, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %171, i8 0, i64 12, i1 false)
- store i32 17, i32* %170, align 4
- %172 = getelementptr inbounds i8, i8* %168, i64 4
- %173 = bitcast i8* %172 to i32*
- store i32 0, i32* %173, align 4
- %174 = getelementptr inbounds i8, i8* %168, i64 8
- %175 = bitcast i8* %174 to i32*
- store i32 1, i32* %175, align 4
- %176 = tail call i8* @GC_malloc_atomic(i64 12)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %176, i8 0, i64 12, i1 false)
- %177 = getelementptr inbounds i8, i8* %168, i64 16
- %178 = bitcast i8* %177 to %"Tuple(Int32, Int32, Int32)"**
- %179 = bitcast i8* %177 to i8**
- store i8* %176, i8** %179, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %169)
- %180 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %178, align 8
- %181 = load i32, i32* %173, align 4
- %182 = sext i32 %181 to i64
- %.repack.i.i2.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 0
- store i32 8233, i32* %.repack.i.i2.i, align 4
- %.repack1.i.i3.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 1
- store i32 8233, i32* %.repack1.i.i3.i, align 4
- %.repack3.i.i4.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %180, i64 %182, i32 2
- store i32 1, i32* %.repack3.i.i4.i, align 4
- %183 = load i32, i32* %173, align 4
- %184 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %183, i32 1)
- %185 = extractvalue { i32, i1 } %184, 1
- br i1 %185, label %overflow.i5.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit6.i", !prof !0
-
-overflow.i5.i: ; preds = %then.i1.i12
+overflow.i.i.i32.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit28.i.i.i"
tail call void @__crystal_raise_overflow()
unreachable
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit6.i": ; preds = %then.i1.i12
- %186 = bitcast i8* %168 to %"Array(Tuple(Int32, Int32, Int32))"*
- %187 = extractvalue { i32, i1 } %184, 0
- %sunkaddr28 = getelementptr inbounds i8, i8* %168, i64 4
- %188 = bitcast i8* %sunkaddr28 to i32*
- store i32 %187, i32* %188, align 4
- store i8* %168, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp" to i8**), align 8
- br label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit33.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit28.i.i.i"
+ %153 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %154 = extractvalue { i32, i1 } %151, 0
+ %sunkaddr19 = getelementptr inbounds i8, i8* %105, i64 4
+ %155 = bitcast i8* %sunkaddr19 to i32*
+ store i32 %154, i32* %155, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %153)
+ %sunkaddr20 = getelementptr inbounds i8, i8* %105, i64 16
+ %156 = bitcast i8* %sunkaddr20 to %"Tuple(Int32, Int32, Int32)"**
+ %157 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %156, align 8
+ %158 = load i32, i32* %155, align 4
+ %159 = sext i32 %158 to i64
+ %.repack.i.i.i34.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %157, i64 %159, i32 0
+ store i32 2193, i32* %.repack.i.i.i34.i.i.i, align 4
+ %.repack1.i.i.i35.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %157, i64 %159, i32 1
+ store i32 2274, i32* %.repack1.i.i.i35.i.i.i, align 4
+ %.repack3.i.i.i36.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %157, i64 %159, i32 2
+ store i32 81, i32* %.repack3.i.i.i36.i.i.i, align 4
+ %160 = load i32, i32* %155, align 4
+ %161 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %160, i32 1)
+ %162 = extractvalue { i32, i1 } %161, 1
+ br i1 %162, label %overflow.i.i.i37.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit38.i.i.i", !prof !0
-"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit6.i", %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %189 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %186, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#push<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit6.i" ], [ %166, %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
- %190 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* %141)
- br i1 %190, label %"*Char#whitespace?:Bool.exit.thread", label %else.i.i13
+overflow.i.i.i37.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit33.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-else.i.i13: ; preds = %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
- %191 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %165)
- br i1 %191, label %"*Char#whitespace?:Bool.exit.thread", label %"*Char#whitespace?:Bool.exit"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit38.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit33.i.i.i"
+ %163 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %164 = extractvalue { i32, i1 } %161, 0
+ %sunkaddr21 = getelementptr inbounds i8, i8* %105, i64 4
+ %165 = bitcast i8* %sunkaddr21 to i32*
+ store i32 %164, i32* %165, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %163)
+ %sunkaddr22 = getelementptr inbounds i8, i8* %105, i64 16
+ %166 = bitcast i8* %sunkaddr22 to %"Tuple(Int32, Int32, Int32)"**
+ %167 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %166, align 8
+ %168 = load i32, i32* %165, align 4
+ %169 = sext i32 %168 to i64
+ %.repack.i.i.i39.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %167, i64 %169, i32 0
+ store i32 6158, i32* %.repack.i.i.i39.i.i.i, align 4
+ %.repack1.i.i.i40.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %167, i64 %169, i32 1
+ store i32 8203, i32* %.repack1.i.i.i40.i.i.i, align 4
+ %.repack3.i.i.i41.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %167, i64 %169, i32 2
+ store i32 2045, i32* %.repack3.i.i.i41.i.i.i, align 4
+ %170 = load i32, i32* %165, align 4
+ %171 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %170, i32 1)
+ %172 = extractvalue { i32, i1 } %171, 1
+ br i1 %172, label %overflow.i.i.i42.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit43.i.i.i", !prof !0
-"*Char#whitespace?:Bool.exit": ; preds = %else.i.i13
- %192 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %189)
- br i1 %192, label %"*Char#whitespace?:Bool.exit.thread", label %exit3
+overflow.i.i.i42.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit38.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-"*Char#whitespace?:Bool.exit.thread": ; preds = %else.i.i13, %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i", %then.i4, %"*Char#whitespace?:Bool.exit"
- %193 = phi i1 [ false, %"*Char#whitespace?:Bool.exit" ], [ true, %then.i4 ], [ false, %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i" ], [ false, %else.i.i13 ]
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit43.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit38.i.i.i"
+ %173 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %174 = extractvalue { i32, i1 } %171, 0
+ %sunkaddr23 = getelementptr inbounds i8, i8* %105, i64 4
+ %175 = bitcast i8* %sunkaddr23 to i32*
+ store i32 %174, i32* %175, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %173)
+ %sunkaddr24 = getelementptr inbounds i8, i8* %105, i64 16
+ %176 = bitcast i8* %sunkaddr24 to %"Tuple(Int32, Int32, Int32)"**
+ %177 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %176, align 8
+ %178 = load i32, i32* %175, align 4
+ %179 = sext i32 %178 to i64
+ %.repack.i.i.i44.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %177, i64 %179, i32 0
+ store i32 8204, i32* %.repack.i.i.i44.i.i.i, align 4
+ %.repack1.i.i.i45.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %177, i64 %179, i32 1
+ store i32 8207, i32* %.repack1.i.i.i45.i.i.i, align 4
+ %.repack3.i.i.i46.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %177, i64 %179, i32 2
+ store i32 1, i32* %.repack3.i.i.i46.i.i.i, align 4
+ %180 = load i32, i32* %175, align 4
+ %181 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %180, i32 1)
+ %182 = extractvalue { i32, i1 } %181, 1
+ br i1 %182, label %overflow.i.i.i47.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit48.i.i.i", !prof !0
+
+overflow.i.i.i47.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit43.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit48.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit43.i.i.i"
+ %183 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %184 = extractvalue { i32, i1 } %181, 0
+ %sunkaddr25 = getelementptr inbounds i8, i8* %105, i64 4
+ %185 = bitcast i8* %sunkaddr25 to i32*
+ store i32 %184, i32* %185, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %183)
+ %sunkaddr26 = getelementptr inbounds i8, i8* %105, i64 16
+ %186 = bitcast i8* %sunkaddr26 to %"Tuple(Int32, Int32, Int32)"**
+ %187 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %186, align 8
+ %188 = load i32, i32* %185, align 4
+ %189 = sext i32 %188 to i64
+ %.repack.i.i.i49.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %187, i64 %189, i32 0
+ store i32 8234, i32* %.repack.i.i.i49.i.i.i, align 4
+ %.repack1.i.i.i50.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %187, i64 %189, i32 1
+ store i32 8238, i32* %.repack1.i.i.i50.i.i.i, align 4
+ %.repack3.i.i.i51.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %187, i64 %189, i32 2
+ store i32 1, i32* %.repack3.i.i.i51.i.i.i, align 4
+ %190 = load i32, i32* %185, align 4
+ %191 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %190, i32 1)
+ %192 = extractvalue { i32, i1 } %191, 1
+ br i1 %192, label %overflow.i.i.i52.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit53.i.i.i", !prof !0
+
+overflow.i.i.i52.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit48.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit53.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit48.i.i.i"
+ %193 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %194 = extractvalue { i32, i1 } %191, 0
+ %sunkaddr27 = getelementptr inbounds i8, i8* %105, i64 4
+ %195 = bitcast i8* %sunkaddr27 to i32*
+ store i32 %194, i32* %195, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %193)
+ %sunkaddr28 = getelementptr inbounds i8, i8* %105, i64 16
+ %196 = bitcast i8* %sunkaddr28 to %"Tuple(Int32, Int32, Int32)"**
+ %197 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %196, align 8
+ %198 = load i32, i32* %195, align 4
+ %199 = sext i32 %198 to i64
+ %.repack.i.i.i54.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %197, i64 %199, i32 0
+ store i32 8288, i32* %.repack.i.i.i54.i.i.i, align 4
+ %.repack1.i.i.i55.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %197, i64 %199, i32 1
+ store i32 8292, i32* %.repack1.i.i.i55.i.i.i, align 4
+ %.repack3.i.i.i56.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %197, i64 %199, i32 2
+ store i32 1, i32* %.repack3.i.i.i56.i.i.i, align 4
+ %200 = load i32, i32* %195, align 4
+ %201 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %200, i32 1)
+ %202 = extractvalue { i32, i1 } %201, 1
+ br i1 %202, label %overflow.i.i.i57.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit58.i.i.i", !prof !0
+
+overflow.i.i.i57.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit53.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit58.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit53.i.i.i"
+ %203 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %204 = extractvalue { i32, i1 } %201, 0
+ %sunkaddr29 = getelementptr inbounds i8, i8* %105, i64 4
+ %205 = bitcast i8* %sunkaddr29 to i32*
+ store i32 %204, i32* %205, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %203)
+ %sunkaddr30 = getelementptr inbounds i8, i8* %105, i64 16
+ %206 = bitcast i8* %sunkaddr30 to %"Tuple(Int32, Int32, Int32)"**
+ %207 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %206, align 8
+ %208 = load i32, i32* %205, align 4
+ %209 = sext i32 %208 to i64
+ %.repack.i.i.i59.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %207, i64 %209, i32 0
+ store i32 8294, i32* %.repack.i.i.i59.i.i.i, align 4
+ %.repack1.i.i.i60.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %207, i64 %209, i32 1
+ store i32 8303, i32* %.repack1.i.i.i60.i.i.i, align 4
+ %.repack3.i.i.i61.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %207, i64 %209, i32 2
+ store i32 1, i32* %.repack3.i.i.i61.i.i.i, align 4
+ %210 = load i32, i32* %205, align 4
+ %211 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %210, i32 1)
+ %212 = extractvalue { i32, i1 } %211, 1
+ br i1 %212, label %overflow.i.i.i62.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit63.i.i.i", !prof !0
+
+overflow.i.i.i62.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit58.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit63.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit58.i.i.i"
+ %213 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %214 = extractvalue { i32, i1 } %211, 0
+ %sunkaddr31 = getelementptr inbounds i8, i8* %105, i64 4
+ %215 = bitcast i8* %sunkaddr31 to i32*
+ store i32 %214, i32* %215, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %213)
+ %sunkaddr32 = getelementptr inbounds i8, i8* %105, i64 16
+ %216 = bitcast i8* %sunkaddr32 to %"Tuple(Int32, Int32, Int32)"**
+ %217 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %216, align 8
+ %218 = load i32, i32* %215, align 4
+ %219 = sext i32 %218 to i64
+ %.repack.i.i.i64.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %217, i64 %219, i32 0
+ store i32 65279, i32* %.repack.i.i.i64.i.i.i, align 4
+ %.repack1.i.i.i65.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %217, i64 %219, i32 1
+ store i32 65529, i32* %.repack1.i.i.i65.i.i.i, align 4
+ %.repack3.i.i.i66.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %217, i64 %219, i32 2
+ store i32 250, i32* %.repack3.i.i.i66.i.i.i, align 4
+ %220 = load i32, i32* %215, align 4
+ %221 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %220, i32 1)
+ %222 = extractvalue { i32, i1 } %221, 1
+ br i1 %222, label %overflow.i.i.i67.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit68.i.i.i", !prof !0
+
+overflow.i.i.i67.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit63.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit68.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit63.i.i.i"
+ %223 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %224 = extractvalue { i32, i1 } %221, 0
+ %sunkaddr33 = getelementptr inbounds i8, i8* %105, i64 4
+ %225 = bitcast i8* %sunkaddr33 to i32*
+ store i32 %224, i32* %225, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %223)
+ %sunkaddr34 = getelementptr inbounds i8, i8* %105, i64 16
+ %226 = bitcast i8* %sunkaddr34 to %"Tuple(Int32, Int32, Int32)"**
+ %227 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %226, align 8
+ %228 = load i32, i32* %225, align 4
+ %229 = sext i32 %228 to i64
+ %.repack.i.i.i69.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %227, i64 %229, i32 0
+ store i32 65530, i32* %.repack.i.i.i69.i.i.i, align 4
+ %.repack1.i.i.i70.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %227, i64 %229, i32 1
+ store i32 65531, i32* %.repack1.i.i.i70.i.i.i, align 4
+ %.repack3.i.i.i71.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %227, i64 %229, i32 2
+ store i32 1, i32* %.repack3.i.i.i71.i.i.i, align 4
+ %230 = load i32, i32* %225, align 4
+ %231 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %230, i32 1)
+ %232 = extractvalue { i32, i1 } %231, 1
+ br i1 %232, label %overflow.i.i.i72.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit73.i.i.i", !prof !0
+
+overflow.i.i.i72.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit68.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit73.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit68.i.i.i"
+ %233 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %234 = extractvalue { i32, i1 } %231, 0
+ %sunkaddr35 = getelementptr inbounds i8, i8* %105, i64 4
+ %235 = bitcast i8* %sunkaddr35 to i32*
+ store i32 %234, i32* %235, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %233)
+ %sunkaddr36 = getelementptr inbounds i8, i8* %105, i64 16
+ %236 = bitcast i8* %sunkaddr36 to %"Tuple(Int32, Int32, Int32)"**
+ %237 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %236, align 8
+ %238 = load i32, i32* %235, align 4
+ %239 = sext i32 %238 to i64
+ %.repack.i.i.i74.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %237, i64 %239, i32 0
+ store i32 69821, i32* %.repack.i.i.i74.i.i.i, align 4
+ %.repack1.i.i.i75.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %237, i64 %239, i32 1
+ store i32 69837, i32* %.repack1.i.i.i75.i.i.i, align 4
+ %.repack3.i.i.i76.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %237, i64 %239, i32 2
+ store i32 16, i32* %.repack3.i.i.i76.i.i.i, align 4
+ %240 = load i32, i32* %235, align 4
+ %241 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %240, i32 1)
+ %242 = extractvalue { i32, i1 } %241, 1
+ br i1 %242, label %overflow.i.i.i77.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit78.i.i.i", !prof !0
+
+overflow.i.i.i77.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit73.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit78.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit73.i.i.i"
+ %243 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %244 = extractvalue { i32, i1 } %241, 0
+ %sunkaddr37 = getelementptr inbounds i8, i8* %105, i64 4
+ %245 = bitcast i8* %sunkaddr37 to i32*
+ store i32 %244, i32* %245, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %243)
+ %sunkaddr38 = getelementptr inbounds i8, i8* %105, i64 16
+ %246 = bitcast i8* %sunkaddr38 to %"Tuple(Int32, Int32, Int32)"**
+ %247 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %246, align 8
+ %248 = load i32, i32* %245, align 4
+ %249 = sext i32 %248 to i64
+ %.repack.i.i.i79.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %247, i64 %249, i32 0
+ store i32 78896, i32* %.repack.i.i.i79.i.i.i, align 4
+ %.repack1.i.i.i80.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %247, i64 %249, i32 1
+ store i32 78911, i32* %.repack1.i.i.i80.i.i.i, align 4
+ %.repack3.i.i.i81.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %247, i64 %249, i32 2
+ store i32 1, i32* %.repack3.i.i.i81.i.i.i, align 4
+ %250 = load i32, i32* %245, align 4
+ %251 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %250, i32 1)
+ %252 = extractvalue { i32, i1 } %251, 1
+ br i1 %252, label %overflow.i.i.i82.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit83.i.i.i", !prof !0
+
+overflow.i.i.i82.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit78.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit83.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit78.i.i.i"
+ %253 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %254 = extractvalue { i32, i1 } %251, 0
+ %sunkaddr39 = getelementptr inbounds i8, i8* %105, i64 4
+ %255 = bitcast i8* %sunkaddr39 to i32*
+ store i32 %254, i32* %255, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %253)
+ %sunkaddr40 = getelementptr inbounds i8, i8* %105, i64 16
+ %256 = bitcast i8* %sunkaddr40 to %"Tuple(Int32, Int32, Int32)"**
+ %257 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %256, align 8
+ %258 = load i32, i32* %255, align 4
+ %259 = sext i32 %258 to i64
+ %.repack.i.i.i84.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %257, i64 %259, i32 0
+ store i32 113824, i32* %.repack.i.i.i84.i.i.i, align 4
+ %.repack1.i.i.i85.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %257, i64 %259, i32 1
+ store i32 113827, i32* %.repack1.i.i.i85.i.i.i, align 4
+ %.repack3.i.i.i86.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %257, i64 %259, i32 2
+ store i32 1, i32* %.repack3.i.i.i86.i.i.i, align 4
+ %260 = load i32, i32* %255, align 4
+ %261 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %260, i32 1)
+ %262 = extractvalue { i32, i1 } %261, 1
+ br i1 %262, label %overflow.i.i.i87.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit88.i.i.i", !prof !0
+
+overflow.i.i.i87.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit83.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit88.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit83.i.i.i"
+ %263 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %264 = extractvalue { i32, i1 } %261, 0
+ %sunkaddr41 = getelementptr inbounds i8, i8* %105, i64 4
+ %265 = bitcast i8* %sunkaddr41 to i32*
+ store i32 %264, i32* %265, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %263)
+ %sunkaddr42 = getelementptr inbounds i8, i8* %105, i64 16
+ %266 = bitcast i8* %sunkaddr42 to %"Tuple(Int32, Int32, Int32)"**
+ %267 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %266, align 8
+ %268 = load i32, i32* %265, align 4
+ %269 = sext i32 %268 to i64
+ %.repack.i.i.i89.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %267, i64 %269, i32 0
+ store i32 119155, i32* %.repack.i.i.i89.i.i.i, align 4
+ %.repack1.i.i.i90.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %267, i64 %269, i32 1
+ store i32 119162, i32* %.repack1.i.i.i90.i.i.i, align 4
+ %.repack3.i.i.i91.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %267, i64 %269, i32 2
+ store i32 1, i32* %.repack3.i.i.i91.i.i.i, align 4
+ %270 = load i32, i32* %265, align 4
+ %271 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %270, i32 1)
+ %272 = extractvalue { i32, i1 } %271, 1
+ br i1 %272, label %overflow.i.i.i92.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit93.i.i.i", !prof !0
+
+overflow.i.i.i92.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit88.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit93.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit88.i.i.i"
+ %273 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %274 = extractvalue { i32, i1 } %271, 0
+ %sunkaddr43 = getelementptr inbounds i8, i8* %105, i64 4
+ %275 = bitcast i8* %sunkaddr43 to i32*
+ store i32 %274, i32* %275, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %273)
+ %sunkaddr44 = getelementptr inbounds i8, i8* %105, i64 16
+ %276 = bitcast i8* %sunkaddr44 to %"Tuple(Int32, Int32, Int32)"**
+ %277 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %276, align 8
+ %278 = load i32, i32* %275, align 4
+ %279 = sext i32 %278 to i64
+ %.repack.i.i.i94.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %277, i64 %279, i32 0
+ store i32 917505, i32* %.repack.i.i.i94.i.i.i, align 4
+ %.repack1.i.i.i95.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %277, i64 %279, i32 1
+ store i32 917536, i32* %.repack1.i.i.i95.i.i.i, align 4
+ %.repack3.i.i.i96.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %277, i64 %279, i32 2
+ store i32 31, i32* %.repack3.i.i.i96.i.i.i, align 4
+ %280 = load i32, i32* %275, align 4
+ %281 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %280, i32 1)
+ %282 = extractvalue { i32, i1 } %281, 1
+ br i1 %282, label %overflow.i.i.i97.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit98.i.i.i", !prof !0
+
+overflow.i.i.i97.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit93.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit98.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit93.i.i.i"
+ %283 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %284 = extractvalue { i32, i1 } %281, 0
+ %sunkaddr45 = getelementptr inbounds i8, i8* %105, i64 4
+ %285 = bitcast i8* %sunkaddr45 to i32*
+ store i32 %284, i32* %285, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %283)
+ %sunkaddr46 = getelementptr inbounds i8, i8* %105, i64 16
+ %286 = bitcast i8* %sunkaddr46 to %"Tuple(Int32, Int32, Int32)"**
+ %287 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %286, align 8
+ %288 = load i32, i32* %285, align 4
+ %289 = sext i32 %288 to i64
+ %.repack.i.i.i99.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %287, i64 %289, i32 0
+ store i32 917537, i32* %.repack.i.i.i99.i.i.i, align 4
+ %.repack1.i.i.i100.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %287, i64 %289, i32 1
+ store i32 917631, i32* %.repack1.i.i.i100.i.i.i, align 4
+ %.repack3.i.i.i101.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %287, i64 %289, i32 2
+ store i32 1, i32* %.repack3.i.i.i101.i.i.i, align 4
+ %290 = load i32, i32* %285, align 4
+ %291 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %290, i32 1)
+ %292 = extractvalue { i32, i1 } %291, 1
+ br i1 %292, label %overflow.i.i.i102.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit103.i.i.i", !prof !0
+
+overflow.i.i.i102.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit98.i.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit103.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit98.i.i.i"
+ %293 = bitcast i8* %105 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %294 = extractvalue { i32, i1 } %291, 0
+ %sunkaddr47 = getelementptr inbounds i8, i8* %105, i64 4
+ %295 = bitcast i8* %sunkaddr47 to i32*
+ store i32 %294, i32* %295, align 4
+ store i8* %105, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cf" to i8**), align 8
+ br label %"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+
+"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit103.i.i.i", %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %296 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %293, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit103.i.i.i" ], [ %103, %"*Unicode::category_Cn:Array(Tuple(Int32, Int32, Int32)).exit.i.i" ]
+ %297 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc", align 8
+ %298 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %297, null
+ br i1 %298, label %then.i27.i.i, label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+
+then.i27.i.i: ; preds = %"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %299 = tail call i8* @GC_malloc(i64 24)
+ %300 = bitcast i8* %299 to i32*
+ %301 = getelementptr inbounds i8, i8* %299, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %301, i8 0, i64 12, i1 false)
+ store i32 17, i32* %300, align 4
+ %302 = getelementptr inbounds i8, i8* %299, i64 4
+ %303 = bitcast i8* %302 to i32*
+ store i32 0, i32* %303, align 4
+ %304 = getelementptr inbounds i8, i8* %299, i64 8
+ %305 = bitcast i8* %304 to i32*
+ store i32 2, i32* %305, align 4
+ %306 = tail call i8* @GC_malloc_atomic(i64 24)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(24) %306, i8 0, i64 24, i1 false)
+ %307 = getelementptr inbounds i8, i8* %299, i64 16
+ %308 = bitcast i8* %307 to i8**
+ store i8* %306, i8** %308, align 8
+ %309 = bitcast i8* %299 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %309)
+ %310 = bitcast i8* %307 to %"Tuple(Int32, Int32, Int32)"**
+ %311 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %310, align 8
+ %312 = load i32, i32* %303, align 4
+ %313 = sext i32 %312 to i64
+ %.repack.i.i.i.i24.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %311, i64 %313, i32 0
+ store i32 0, i32* %.repack.i.i.i.i24.i.i, align 4
+ %.repack1.i.i.i.i25.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %311, i64 %313, i32 1
+ store i32 31, i32* %.repack1.i.i.i.i25.i.i, align 4
+ %.repack3.i.i.i.i26.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %311, i64 %313, i32 2
+ store i32 1, i32* %.repack3.i.i.i.i26.i.i, align 4
+ %314 = load i32, i32* %303, align 4
+ %315 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %314, i32 1)
+ %316 = extractvalue { i32, i1 } %315, 1
+ br i1 %316, label %overflow.i.i.i.i28.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i29.i.i", !prof !0
+
+overflow.i.i.i.i28.i.i: ; preds = %then.i27.i.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i29.i.i": ; preds = %then.i27.i.i
+ %317 = bitcast i8* %299 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %318 = extractvalue { i32, i1 } %315, 0
+ %sunkaddr48 = getelementptr inbounds i8, i8* %299, i64 4
+ %319 = bitcast i8* %sunkaddr48 to i32*
+ store i32 %318, i32* %319, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %317)
+ %sunkaddr49 = getelementptr inbounds i8, i8* %299, i64 16
+ %320 = bitcast i8* %sunkaddr49 to %"Tuple(Int32, Int32, Int32)"**
+ %321 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %320, align 8
+ %322 = load i32, i32* %319, align 4
+ %323 = sext i32 %322 to i64
+ %.repack.i.i.i3.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %321, i64 %323, i32 0
+ store i32 127, i32* %.repack.i.i.i3.i.i.i, align 4
+ %.repack1.i.i.i4.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %321, i64 %323, i32 1
+ store i32 159, i32* %.repack1.i.i.i4.i.i.i, align 4
+ %.repack3.i.i.i5.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %321, i64 %323, i32 2
+ store i32 1, i32* %.repack3.i.i.i5.i.i.i, align 4
+ %324 = load i32, i32* %319, align 4
+ %325 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %324, i32 1)
+ %326 = extractvalue { i32, i1 } %325, 1
+ br i1 %326, label %overflow.i.i.i6.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit7.i.i.i", !prof !0
+
+overflow.i.i.i6.i.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i29.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
+
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit7.i.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i29.i.i"
+ %327 = bitcast i8* %299 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %328 = extractvalue { i32, i1 } %325, 0
+ %sunkaddr50 = getelementptr inbounds i8, i8* %299, i64 4
+ %329 = bitcast i8* %sunkaddr50 to i32*
+ store i32 %328, i32* %329, align 4
+ store i8* %299, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cc" to i8**), align 8
+ br label %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+
+"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit7.i.i.i", %"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %330 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %327, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit7.i.i.i" ], [ %297, %"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32)).exit.i.i" ]
+ %331 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %47)
+ br i1 %331, label %exit3, label %else.i.i.i
+
+else.i.i.i: ; preds = %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i"
+ %332 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %91)
+ br i1 %332, label %exit3, label %else2.i.i.i
+
+else2.i.i.i: ; preds = %else.i.i.i
+ %333 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %102)
+ br i1 %333, label %exit3, label %else4.i.i.i
+
+else4.i.i.i: ; preds = %else2.i.i.i
+ %334 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %296)
+ br i1 %334, label %exit3, label %"*Char#control?:Bool.exit"
+
+"*Char#control?:Bool.exit": ; preds = %else4.i.i.i
+ %335 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %330)
+ br i1 %335, label %exit3, label %then
+
+then: ; preds = %then.i, %"*Char#control?:Bool.exit"
+ %336 = tail call fastcc i1 @"*Char#whitespace?:Bool"(i32 %self)
+ %337 = icmp eq i32 %self, 32
+ %not. = xor i1 %336, true
+ %spec.select = select i1 %not., i1 true, i1 %337
br label %exit3
-exit3: ; preds = %else4.i.i, %else2.i.i, %else.i.i, %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i", %"*Char#whitespace?:Bool.exit.thread", %"*Char#whitespace?:Bool.exit", %then.i4, %then.i, %"*Char#control?:Bool.exit"
- %194 = phi i1 [ false, %"*Char#control?:Bool.exit" ], [ false, %then.i ], [ %193, %"*Char#whitespace?:Bool.exit.thread" ], [ true, %"*Char#whitespace?:Bool.exit" ], [ true, %then.i4 ], [ false, %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i" ], [ false, %else.i.i ], [ false, %else2.i.i ], [ false, %else4.i.i ]
- ret i1 %194
+exit3: ; preds = %else4.i.i.i, %else2.i.i.i, %else.i.i.i, %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i", %then.i, %then, %"*Char#control?:Bool.exit"
+ %338 = phi i1 [ false, %"*Char#control?:Bool.exit" ], [ %spec.select, %then ], [ false, %then.i ], [ false, %"*Unicode::category_Cc:Array(Tuple(Int32, Int32, Int32)).exit.i.i" ], [ false, %else.i.i.i ], [ false, %else2.i.i.i ], [ false, %else4.i.i.i ]
+ ret i1 %338
}
; Function Attrs: uwtable
@@ -10814,13 +11078,13 @@ then.i.i: ; preds = %then1
%27 = sext i32 %26 to i64
%28 = sub nsw i64 0, %27
%29 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr29 = getelementptr inbounds i8, i8* %29, i64 16
- %30 = bitcast i8* %sunkaddr29 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr30 = getelementptr inbounds i8, i8* %29, i64 16
+ %30 = bitcast i8* %sunkaddr30 to %"Tuple(Int32, Int32, Int32)"**
%31 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %30, align 8
%32 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %31, i64 %28
%33 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr30 = getelementptr inbounds i8, i8* %33, i64 4
- %34 = bitcast i8* %sunkaddr30 to i32*
+ %sunkaddr31 = getelementptr inbounds i8, i8* %33, i64 4
+ %34 = bitcast i8* %sunkaddr31 to i32*
%35 = load i32, i32* %34, align 4
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %32, i64 %36
@@ -10845,14 +11109,14 @@ overflow3.i: ; preds = %normal2.i
%42 = extractvalue { i64, i1 } %39, 0
tail call void @llvm.memset.p0i8.i64(i8* align 1 %41, i8 0, i64 %42, i1 false)
%43 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr31 = getelementptr inbounds i8, i8* %43, i64 12
- %44 = bitcast i8* %sunkaddr31 to i32*
+ %sunkaddr32 = getelementptr inbounds i8, i8* %43, i64 12
+ %44 = bitcast i8* %sunkaddr32 to i32*
%45 = load i32, i32* %44, align 4
%46 = sext i32 %45 to i64
%47 = sub nsw i64 0, %46
%48 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr32 = getelementptr inbounds i8, i8* %48, i64 16
- %49 = bitcast i8* %sunkaddr32 to %"Tuple(Int32, Int32, Int32)"**
+ %sunkaddr33 = getelementptr inbounds i8, i8* %48, i64 16
+ %49 = bitcast i8* %sunkaddr33 to %"Tuple(Int32, Int32, Int32)"**
%50 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %49, align 8
%51 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %50, i64 %47
store %"Tuple(Int32, Int32, Int32)"* %51, %"Tuple(Int32, Int32, Int32)"** %49, align 8
@@ -10896,54 +11160,54 @@ overflow7.i: ; preds = %normal6.i
%.pn = phi { i32, i1 } [ %53, %then1.i ], [ %59, %normal6.i ]
%common.ret.op.i = extractvalue { i32, i1 } %.pn, 0
%61 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr33 = getelementptr inbounds i8, i8* %61, i64 8
- %62 = bitcast i8* %sunkaddr33 to i32*
+ %sunkaddr34 = getelementptr inbounds i8, i8* %61, i64 8
+ %62 = bitcast i8* %sunkaddr34 to i32*
store i32 %common.ret.op.i, i32* %62, align 4
%63 = getelementptr inbounds %"Array(Tuple(Int32, Int32, Int32))", %"Array(Tuple(Int32, Int32, Int32))"* %self, i64 0, i32 4
%64 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %63, align 8
%.not.i = icmp eq %"Tuple(Int32, Int32, Int32)"* %64, null
- br i1 %.not.i, label %else.i9, label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17"
+ br i1 %.not.i, label %else.i9, label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18"
"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread": ; preds = %exit
%65 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr34 = getelementptr inbounds i8, i8* %65, i64 8
- %66 = bitcast i8* %sunkaddr34 to i32*
+ %sunkaddr35 = getelementptr inbounds i8, i8* %65, i64 8
+ %66 = bitcast i8* %sunkaddr35 to i32*
store i32 3, i32* %66, align 4
%67 = getelementptr inbounds %"Array(Tuple(Int32, Int32, Int32))", %"Array(Tuple(Int32, Int32, Int32))"* %self, i64 0, i32 4
%68 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %67, align 8
- %.not.i19 = icmp eq %"Tuple(Int32, Int32, Int32)"* %68, null
- br i1 %.not.i19, label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)::malloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i", label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread"
+ %.not.i20 = icmp eq %"Tuple(Int32, Int32, Int32)"* %68, null
+ br i1 %.not.i20, label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)::malloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i", label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread"
-"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread"
+"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread"
%69 = trunc i64 %8 to i32
%70 = sext i32 %69 to i64
%71 = sub nsw i64 0, %70
%72 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %68, i64 %71
br label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#realloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i"
-"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit"
+"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit"
%73 = sub nsw i64 0, %7
%74 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %64, i64 %73
%75 = icmp slt i32 %common.ret.op.i, 0
br i1 %75, label %then.i.i8, label %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#realloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i"
-then.i.i8: ; preds = %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17"
+then.i.i8: ; preds = %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18"
%76 = tail call fastcc %ArgumentError* @"*ArgumentError::new<String>:ArgumentError"(%String* bitcast ({ i32, i32, i32, [14 x i8] }* @"'Negative size'" to %String*))
tail call fastcc void @"*raise<ArgumentError>:NoReturn"(%ArgumentError* %76)
unreachable
-"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#realloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread", %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17"
- %77 = phi %"Tuple(Int32, Int32, Int32)"* [ %72, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread" ], [ %74, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17" ]
- %78 = phi %"Tuple(Int32, Int32, Int32)"** [ %67, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread" ], [ %63, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17" ]
- %common.ret.op.i212527 = phi i32 [ 3, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17.thread" ], [ %common.ret.op.i, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit17" ]
- %79 = zext i32 %common.ret.op.i212527 to i64
+"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#realloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread", %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18"
+ %77 = phi %"Tuple(Int32, Int32, Int32)"* [ %72, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread" ], [ %74, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18" ]
+ %78 = phi %"Tuple(Int32, Int32, Int32)"** [ %67, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread" ], [ %63, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18" ]
+ %common.ret.op.i222628 = phi i32 [ 3, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18.thread" ], [ %common.ret.op.i, %"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)#-<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit18" ]
+ %79 = zext i32 %common.ret.op.i222628 to i64
%80 = bitcast %"Tuple(Int32, Int32, Int32)"* %77 to i8*
%81 = mul nuw nsw i64 %79, 12
%82 = tail call i8* @GC_realloc(i8* %80, i64 %81)
%83 = bitcast i8* %82 to %"Tuple(Int32, Int32, Int32)"*
%84 = bitcast %"Array(Tuple(Int32, Int32, Int32))"* %self to i8*
- %sunkaddr35 = getelementptr inbounds i8, i8* %84, i64 12
- %85 = bitcast i8* %sunkaddr35 to i32*
+ %sunkaddr36 = getelementptr inbounds i8, i8* %84, i64 12
+ %85 = bitcast i8* %sunkaddr36 to i32*
%86 = load i32, i32* %85, align 4
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %87
@@ -10959,9 +11223,9 @@ then.i1.i: ; preds = %else.i9
unreachable
"*Pointer(Tuple(Int32, Int32, Int32))@Pointer(T)::malloc<Int32>:Pointer(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread", %else.i9
- %common.ret.op.i2023 = phi i32 [ %common.ret.op.i, %else.i9 ], [ 3, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread" ]
+ %common.ret.op.i2124 = phi i32 [ %common.ret.op.i, %else.i9 ], [ 3, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread" ]
%91 = phi %"Tuple(Int32, Int32, Int32)"** [ %63, %else.i9 ], [ %67, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#calculate_new_capacity:Int32.exit.thread" ]
- %92 = zext i32 %common.ret.op.i2023 to i64
+ %92 = zext i32 %common.ret.op.i2124 to i64
%93 = mul nuw nsw i64 %92, 12
%94 = tail call i8* @GC_malloc_atomic(i64 %93)
tail call void @llvm.memset.p0i8.i64(i8* align 4 %94, i8 0, i64 %93, i1 false)
@@ -10984,526 +11248,8 @@ then3: ; preds = %then5
then5: ; preds = %exit
%102 = trunc i64 %7 to i32
- %.not28 = icmp eq i32 %102, 0
- br i1 %.not28, label %else.i, label %then3
-}
-
-; Function Attrs: uwtable
-define internal fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Cf:Array(Tuple(Int32, Int32, Int32))"() unnamed_addr #1 {
-alloca:
- %0 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cf", align 8
- %1 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %0, null
- br i1 %1, label %then, label %exit
-
-then: ; preds = %alloca
- %2 = tail call i8* @GC_malloc(i64 24)
- %3 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %4 = bitcast i8* %2 to i32*
- %5 = getelementptr inbounds i8, i8* %2, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %5, i8 0, i64 12, i1 false)
- store i32 17, i32* %4, align 4
- %6 = getelementptr inbounds i8, i8* %2, i64 4
- %7 = bitcast i8* %6 to i32*
- store i32 0, i32* %7, align 4
- %8 = getelementptr inbounds i8, i8* %2, i64 8
- %9 = bitcast i8* %8 to i32*
- store i32 18, i32* %9, align 4
- %10 = tail call i8* @GC_malloc_atomic(i64 216)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(216) %10, i8 0, i64 216, i1 false)
- %11 = getelementptr inbounds i8, i8* %2, i64 16
- %12 = bitcast i8* %11 to %"Tuple(Int32, Int32, Int32)"**
- %13 = bitcast i8* %11 to i8**
- store i8* %10, i8** %13, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %3)
- %14 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %12, align 8
- %15 = load i32, i32* %7, align 4
- %16 = sext i32 %15 to i64
- %.repack.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 0
- store i32 173, i32* %.repack.i, align 4
- %.repack1.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 1
- store i32 1536, i32* %.repack1.i, align 4
- %.repack3.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 2
- store i32 1363, i32* %.repack3.i, align 4
- %17 = load i32, i32* %7, align 4
- %18 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %17, i32 1)
- %19 = extractvalue { i32, i1 } %18, 1
- br i1 %19, label %overflow.i.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit", !prof !0
-
-overflow.i.i: ; preds = %then
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %then
- %20 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %21 = extractvalue { i32, i1 } %18, 0
- %sunkaddr = getelementptr inbounds i8, i8* %2, i64 4
- %22 = bitcast i8* %sunkaddr to i32*
- store i32 %21, i32* %22, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %20)
- %sunkaddr104 = getelementptr inbounds i8, i8* %2, i64 16
- %23 = bitcast i8* %sunkaddr104 to %"Tuple(Int32, Int32, Int32)"**
- %24 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %23, align 8
- %25 = load i32, i32* %22, align 4
- %26 = sext i32 %25 to i64
- %.repack.i53 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 0
- store i32 1537, i32* %.repack.i53, align 4
- %.repack1.i54 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 1
- store i32 1541, i32* %.repack1.i54, align 4
- %.repack3.i55 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 2
- store i32 1, i32* %.repack3.i55, align 4
- %27 = load i32, i32* %22, align 4
- %28 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %27, i32 1)
- %29 = extractvalue { i32, i1 } %28, 1
- br i1 %29, label %overflow.i.i19, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit20", !prof !0
-
-overflow.i.i19: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit20": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- %30 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %31 = extractvalue { i32, i1 } %28, 0
- %sunkaddr105 = getelementptr inbounds i8, i8* %2, i64 4
- %32 = bitcast i8* %sunkaddr105 to i32*
- store i32 %31, i32* %32, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %30)
- %sunkaddr106 = getelementptr inbounds i8, i8* %2, i64 16
- %33 = bitcast i8* %sunkaddr106 to %"Tuple(Int32, Int32, Int32)"**
- %34 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %33, align 8
- %35 = load i32, i32* %32, align 4
- %36 = sext i32 %35 to i64
- %.repack.i56 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 0
- store i32 1564, i32* %.repack.i56, align 4
- %.repack1.i57 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 1
- store i32 1757, i32* %.repack1.i57, align 4
- %.repack3.i58 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 2
- store i32 193, i32* %.repack3.i58, align 4
- %37 = load i32, i32* %32, align 4
- %38 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %37, i32 1)
- %39 = extractvalue { i32, i1 } %38, 1
- br i1 %39, label %overflow.i.i21, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit22", !prof !0
-
-overflow.i.i21: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit20"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit22": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit20"
- %40 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %41 = extractvalue { i32, i1 } %38, 0
- %sunkaddr107 = getelementptr inbounds i8, i8* %2, i64 4
- %42 = bitcast i8* %sunkaddr107 to i32*
- store i32 %41, i32* %42, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %40)
- %sunkaddr108 = getelementptr inbounds i8, i8* %2, i64 16
- %43 = bitcast i8* %sunkaddr108 to %"Tuple(Int32, Int32, Int32)"**
- %44 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %43, align 8
- %45 = load i32, i32* %42, align 4
- %46 = sext i32 %45 to i64
- %.repack.i59 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 0
- store i32 1807, i32* %.repack.i59, align 4
- %.repack1.i60 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 1
- store i32 2192, i32* %.repack1.i60, align 4
- %.repack3.i61 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 2
- store i32 385, i32* %.repack3.i61, align 4
- %47 = load i32, i32* %42, align 4
- %48 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %47, i32 1)
- %49 = extractvalue { i32, i1 } %48, 1
- br i1 %49, label %overflow.i.i23, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit24", !prof !0
-
-overflow.i.i23: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit22"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit24": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit22"
- %50 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %51 = extractvalue { i32, i1 } %48, 0
- %sunkaddr109 = getelementptr inbounds i8, i8* %2, i64 4
- %52 = bitcast i8* %sunkaddr109 to i32*
- store i32 %51, i32* %52, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %50)
- %sunkaddr110 = getelementptr inbounds i8, i8* %2, i64 16
- %53 = bitcast i8* %sunkaddr110 to %"Tuple(Int32, Int32, Int32)"**
- %54 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %53, align 8
- %55 = load i32, i32* %52, align 4
- %56 = sext i32 %55 to i64
- %.repack.i62 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 0
- store i32 2193, i32* %.repack.i62, align 4
- %.repack1.i63 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 1
- store i32 2274, i32* %.repack1.i63, align 4
- %.repack3.i64 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 2
- store i32 81, i32* %.repack3.i64, align 4
- %57 = load i32, i32* %52, align 4
- %58 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %57, i32 1)
- %59 = extractvalue { i32, i1 } %58, 1
- br i1 %59, label %overflow.i.i25, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit26", !prof !0
-
-overflow.i.i25: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit24"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit26": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit24"
- %60 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %61 = extractvalue { i32, i1 } %58, 0
- %sunkaddr111 = getelementptr inbounds i8, i8* %2, i64 4
- %62 = bitcast i8* %sunkaddr111 to i32*
- store i32 %61, i32* %62, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %60)
- %sunkaddr112 = getelementptr inbounds i8, i8* %2, i64 16
- %63 = bitcast i8* %sunkaddr112 to %"Tuple(Int32, Int32, Int32)"**
- %64 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %63, align 8
- %65 = load i32, i32* %62, align 4
- %66 = sext i32 %65 to i64
- %.repack.i65 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %64, i64 %66, i32 0
- store i32 6158, i32* %.repack.i65, align 4
- %.repack1.i66 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %64, i64 %66, i32 1
- store i32 8203, i32* %.repack1.i66, align 4
- %.repack3.i67 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %64, i64 %66, i32 2
- store i32 2045, i32* %.repack3.i67, align 4
- %67 = load i32, i32* %62, align 4
- %68 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %67, i32 1)
- %69 = extractvalue { i32, i1 } %68, 1
- br i1 %69, label %overflow.i.i27, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28", !prof !0
-
-overflow.i.i27: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit26"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit26"
- %70 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %71 = extractvalue { i32, i1 } %68, 0
- %sunkaddr113 = getelementptr inbounds i8, i8* %2, i64 4
- %72 = bitcast i8* %sunkaddr113 to i32*
- store i32 %71, i32* %72, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %70)
- %sunkaddr114 = getelementptr inbounds i8, i8* %2, i64 16
- %73 = bitcast i8* %sunkaddr114 to %"Tuple(Int32, Int32, Int32)"**
- %74 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %73, align 8
- %75 = load i32, i32* %72, align 4
- %76 = sext i32 %75 to i64
- %.repack.i68 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %74, i64 %76, i32 0
- store i32 8204, i32* %.repack.i68, align 4
- %.repack1.i69 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %74, i64 %76, i32 1
- store i32 8207, i32* %.repack1.i69, align 4
- %.repack3.i70 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %74, i64 %76, i32 2
- store i32 1, i32* %.repack3.i70, align 4
- %77 = load i32, i32* %72, align 4
- %78 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %77, i32 1)
- %79 = extractvalue { i32, i1 } %78, 1
- br i1 %79, label %overflow.i.i29, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit30", !prof !0
-
-overflow.i.i29: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit30": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit28"
- %80 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %81 = extractvalue { i32, i1 } %78, 0
- %sunkaddr115 = getelementptr inbounds i8, i8* %2, i64 4
- %82 = bitcast i8* %sunkaddr115 to i32*
- store i32 %81, i32* %82, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %80)
- %sunkaddr116 = getelementptr inbounds i8, i8* %2, i64 16
- %83 = bitcast i8* %sunkaddr116 to %"Tuple(Int32, Int32, Int32)"**
- %84 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %83, align 8
- %85 = load i32, i32* %82, align 4
- %86 = sext i32 %85 to i64
- %.repack.i71 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %84, i64 %86, i32 0
- store i32 8234, i32* %.repack.i71, align 4
- %.repack1.i72 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %84, i64 %86, i32 1
- store i32 8238, i32* %.repack1.i72, align 4
- %.repack3.i73 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %84, i64 %86, i32 2
- store i32 1, i32* %.repack3.i73, align 4
- %87 = load i32, i32* %82, align 4
- %88 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %87, i32 1)
- %89 = extractvalue { i32, i1 } %88, 1
- br i1 %89, label %overflow.i.i31, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit32", !prof !0
-
-overflow.i.i31: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit30"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit32": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit30"
- %90 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %91 = extractvalue { i32, i1 } %88, 0
- %sunkaddr117 = getelementptr inbounds i8, i8* %2, i64 4
- %92 = bitcast i8* %sunkaddr117 to i32*
- store i32 %91, i32* %92, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %90)
- %sunkaddr118 = getelementptr inbounds i8, i8* %2, i64 16
- %93 = bitcast i8* %sunkaddr118 to %"Tuple(Int32, Int32, Int32)"**
- %94 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %93, align 8
- %95 = load i32, i32* %92, align 4
- %96 = sext i32 %95 to i64
- %.repack.i74 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %94, i64 %96, i32 0
- store i32 8288, i32* %.repack.i74, align 4
- %.repack1.i75 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %94, i64 %96, i32 1
- store i32 8292, i32* %.repack1.i75, align 4
- %.repack3.i76 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %94, i64 %96, i32 2
- store i32 1, i32* %.repack3.i76, align 4
- %97 = load i32, i32* %92, align 4
- %98 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %97, i32 1)
- %99 = extractvalue { i32, i1 } %98, 1
- br i1 %99, label %overflow.i.i33, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit34", !prof !0
-
-overflow.i.i33: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit32"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit34": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit32"
- %100 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %101 = extractvalue { i32, i1 } %98, 0
- %sunkaddr119 = getelementptr inbounds i8, i8* %2, i64 4
- %102 = bitcast i8* %sunkaddr119 to i32*
- store i32 %101, i32* %102, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %100)
- %sunkaddr120 = getelementptr inbounds i8, i8* %2, i64 16
- %103 = bitcast i8* %sunkaddr120 to %"Tuple(Int32, Int32, Int32)"**
- %104 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %103, align 8
- %105 = load i32, i32* %102, align 4
- %106 = sext i32 %105 to i64
- %.repack.i77 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %104, i64 %106, i32 0
- store i32 8294, i32* %.repack.i77, align 4
- %.repack1.i78 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %104, i64 %106, i32 1
- store i32 8303, i32* %.repack1.i78, align 4
- %.repack3.i79 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %104, i64 %106, i32 2
- store i32 1, i32* %.repack3.i79, align 4
- %107 = load i32, i32* %102, align 4
- %108 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %107, i32 1)
- %109 = extractvalue { i32, i1 } %108, 1
- br i1 %109, label %overflow.i.i35, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit36", !prof !0
-
-overflow.i.i35: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit34"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit36": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit34"
- %110 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %111 = extractvalue { i32, i1 } %108, 0
- %sunkaddr121 = getelementptr inbounds i8, i8* %2, i64 4
- %112 = bitcast i8* %sunkaddr121 to i32*
- store i32 %111, i32* %112, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %110)
- %sunkaddr122 = getelementptr inbounds i8, i8* %2, i64 16
- %113 = bitcast i8* %sunkaddr122 to %"Tuple(Int32, Int32, Int32)"**
- %114 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %113, align 8
- %115 = load i32, i32* %112, align 4
- %116 = sext i32 %115 to i64
- %.repack.i80 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %114, i64 %116, i32 0
- store i32 65279, i32* %.repack.i80, align 4
- %.repack1.i81 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %114, i64 %116, i32 1
- store i32 65529, i32* %.repack1.i81, align 4
- %.repack3.i82 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %114, i64 %116, i32 2
- store i32 250, i32* %.repack3.i82, align 4
- %117 = load i32, i32* %112, align 4
- %118 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %117, i32 1)
- %119 = extractvalue { i32, i1 } %118, 1
- br i1 %119, label %overflow.i.i37, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38", !prof !0
-
-overflow.i.i37: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit36"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit36"
- %120 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %121 = extractvalue { i32, i1 } %118, 0
- %sunkaddr123 = getelementptr inbounds i8, i8* %2, i64 4
- %122 = bitcast i8* %sunkaddr123 to i32*
- store i32 %121, i32* %122, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %120)
- %sunkaddr124 = getelementptr inbounds i8, i8* %2, i64 16
- %123 = bitcast i8* %sunkaddr124 to %"Tuple(Int32, Int32, Int32)"**
- %124 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %123, align 8
- %125 = load i32, i32* %122, align 4
- %126 = sext i32 %125 to i64
- %.repack.i83 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %124, i64 %126, i32 0
- store i32 65530, i32* %.repack.i83, align 4
- %.repack1.i84 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %124, i64 %126, i32 1
- store i32 65531, i32* %.repack1.i84, align 4
- %.repack3.i85 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %124, i64 %126, i32 2
- store i32 1, i32* %.repack3.i85, align 4
- %127 = load i32, i32* %122, align 4
- %128 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %127, i32 1)
- %129 = extractvalue { i32, i1 } %128, 1
- br i1 %129, label %overflow.i.i39, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40", !prof !0
-
-overflow.i.i39: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit38"
- %130 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %131 = extractvalue { i32, i1 } %128, 0
- %sunkaddr125 = getelementptr inbounds i8, i8* %2, i64 4
- %132 = bitcast i8* %sunkaddr125 to i32*
- store i32 %131, i32* %132, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %130)
- %sunkaddr126 = getelementptr inbounds i8, i8* %2, i64 16
- %133 = bitcast i8* %sunkaddr126 to %"Tuple(Int32, Int32, Int32)"**
- %134 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %133, align 8
- %135 = load i32, i32* %132, align 4
- %136 = sext i32 %135 to i64
- %.repack.i86 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %134, i64 %136, i32 0
- store i32 69821, i32* %.repack.i86, align 4
- %.repack1.i87 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %134, i64 %136, i32 1
- store i32 69837, i32* %.repack1.i87, align 4
- %.repack3.i88 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %134, i64 %136, i32 2
- store i32 16, i32* %.repack3.i88, align 4
- %137 = load i32, i32* %132, align 4
- %138 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %137, i32 1)
- %139 = extractvalue { i32, i1 } %138, 1
- br i1 %139, label %overflow.i.i41, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit42", !prof !0
-
-overflow.i.i41: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit42": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit40"
- %140 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %141 = extractvalue { i32, i1 } %138, 0
- %sunkaddr127 = getelementptr inbounds i8, i8* %2, i64 4
- %142 = bitcast i8* %sunkaddr127 to i32*
- store i32 %141, i32* %142, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %140)
- %sunkaddr128 = getelementptr inbounds i8, i8* %2, i64 16
- %143 = bitcast i8* %sunkaddr128 to %"Tuple(Int32, Int32, Int32)"**
- %144 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %143, align 8
- %145 = load i32, i32* %142, align 4
- %146 = sext i32 %145 to i64
- %.repack.i89 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %144, i64 %146, i32 0
- store i32 78896, i32* %.repack.i89, align 4
- %.repack1.i90 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %144, i64 %146, i32 1
- store i32 78911, i32* %.repack1.i90, align 4
- %.repack3.i91 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %144, i64 %146, i32 2
- store i32 1, i32* %.repack3.i91, align 4
- %147 = load i32, i32* %142, align 4
- %148 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %147, i32 1)
- %149 = extractvalue { i32, i1 } %148, 1
- br i1 %149, label %overflow.i.i43, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit44", !prof !0
-
-overflow.i.i43: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit42"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit44": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit42"
- %150 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %151 = extractvalue { i32, i1 } %148, 0
- %sunkaddr129 = getelementptr inbounds i8, i8* %2, i64 4
- %152 = bitcast i8* %sunkaddr129 to i32*
- store i32 %151, i32* %152, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %150)
- %sunkaddr130 = getelementptr inbounds i8, i8* %2, i64 16
- %153 = bitcast i8* %sunkaddr130 to %"Tuple(Int32, Int32, Int32)"**
- %154 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %153, align 8
- %155 = load i32, i32* %152, align 4
- %156 = sext i32 %155 to i64
- %.repack.i92 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %154, i64 %156, i32 0
- store i32 113824, i32* %.repack.i92, align 4
- %.repack1.i93 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %154, i64 %156, i32 1
- store i32 113827, i32* %.repack1.i93, align 4
- %.repack3.i94 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %154, i64 %156, i32 2
- store i32 1, i32* %.repack3.i94, align 4
- %157 = load i32, i32* %152, align 4
- %158 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %157, i32 1)
- %159 = extractvalue { i32, i1 } %158, 1
- br i1 %159, label %overflow.i.i45, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit46", !prof !0
-
-overflow.i.i45: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit44"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit46": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit44"
- %160 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %161 = extractvalue { i32, i1 } %158, 0
- %sunkaddr131 = getelementptr inbounds i8, i8* %2, i64 4
- %162 = bitcast i8* %sunkaddr131 to i32*
- store i32 %161, i32* %162, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %160)
- %sunkaddr132 = getelementptr inbounds i8, i8* %2, i64 16
- %163 = bitcast i8* %sunkaddr132 to %"Tuple(Int32, Int32, Int32)"**
- %164 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %163, align 8
- %165 = load i32, i32* %162, align 4
- %166 = sext i32 %165 to i64
- %.repack.i95 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %164, i64 %166, i32 0
- store i32 119155, i32* %.repack.i95, align 4
- %.repack1.i96 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %164, i64 %166, i32 1
- store i32 119162, i32* %.repack1.i96, align 4
- %.repack3.i97 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %164, i64 %166, i32 2
- store i32 1, i32* %.repack3.i97, align 4
- %167 = load i32, i32* %162, align 4
- %168 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %167, i32 1)
- %169 = extractvalue { i32, i1 } %168, 1
- br i1 %169, label %overflow.i.i47, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit48", !prof !0
-
-overflow.i.i47: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit46"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit48": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit46"
- %170 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %171 = extractvalue { i32, i1 } %168, 0
- %sunkaddr133 = getelementptr inbounds i8, i8* %2, i64 4
- %172 = bitcast i8* %sunkaddr133 to i32*
- store i32 %171, i32* %172, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %170)
- %sunkaddr134 = getelementptr inbounds i8, i8* %2, i64 16
- %173 = bitcast i8* %sunkaddr134 to %"Tuple(Int32, Int32, Int32)"**
- %174 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %173, align 8
- %175 = load i32, i32* %172, align 4
- %176 = sext i32 %175 to i64
- %.repack.i98 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %174, i64 %176, i32 0
- store i32 917505, i32* %.repack.i98, align 4
- %.repack1.i99 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %174, i64 %176, i32 1
- store i32 917536, i32* %.repack1.i99, align 4
- %.repack3.i100 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %174, i64 %176, i32 2
- store i32 31, i32* %.repack3.i100, align 4
- %177 = load i32, i32* %172, align 4
- %178 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %177, i32 1)
- %179 = extractvalue { i32, i1 } %178, 1
- br i1 %179, label %overflow.i.i49, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit50", !prof !0
-
-overflow.i.i49: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit48"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit50": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit48"
- %180 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %181 = extractvalue { i32, i1 } %178, 0
- %sunkaddr135 = getelementptr inbounds i8, i8* %2, i64 4
- %182 = bitcast i8* %sunkaddr135 to i32*
- store i32 %181, i32* %182, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %180)
- %sunkaddr136 = getelementptr inbounds i8, i8* %2, i64 16
- %183 = bitcast i8* %sunkaddr136 to %"Tuple(Int32, Int32, Int32)"**
- %184 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %183, align 8
- %185 = load i32, i32* %182, align 4
- %186 = sext i32 %185 to i64
- %.repack.i101 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %184, i64 %186, i32 0
- store i32 917537, i32* %.repack.i101, align 4
- %.repack1.i102 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %184, i64 %186, i32 1
- store i32 917631, i32* %.repack1.i102, align 4
- %.repack3.i103 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %184, i64 %186, i32 2
- store i32 1, i32* %.repack3.i103, align 4
- %187 = load i32, i32* %182, align 4
- %188 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %187, i32 1)
- %189 = extractvalue { i32, i1 } %188, 1
- br i1 %189, label %overflow.i.i51, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit52", !prof !0
-
-overflow.i.i51: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit50"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit52": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit50"
- %190 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %191 = extractvalue { i32, i1 } %188, 0
- %sunkaddr137 = getelementptr inbounds i8, i8* %2, i64 4
- %192 = bitcast i8* %sunkaddr137 to i32*
- store i32 %191, i32* %192, align 4
- store i8* %2, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Cf" to i8**), align 8
- br label %exit
-
-exit: ; preds = %alloca, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit52"
- %193 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %190, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit52" ], [ %0, %alloca ]
- ret %"Array(Tuple(Int32, Int32, Int32))"* %193
+ %.not29 = icmp eq i32 %102, 0
+ br i1 %.not29, label %else.i, label %then3
}
; Function Attrs: uwtable
@@ -11618,33 +11364,33 @@ overflow31: ; preds = %then23
normal32: ; preds = %then23
%23 = extractvalue { i32, i1 } %20, 0
%24 = icmp eq i32 %.unpack8.i.i198, 0
- br i1 %24, label %then.i, label %else.i
+ br i1 %24, label %then.i.i, label %else.i.i
-then.i: ; preds = %normal32
+then.i.i: ; preds = %normal32
%25 = tail call fastcc %DivisionByZeroError* @"*DivisionByZeroError::new:DivisionByZeroError"()
tail call fastcc void @"*raise<DivisionByZeroError>:NoReturn"(%DivisionByZeroError* %25)
unreachable
-else.i: ; preds = %normal32
+else.i.i: ; preds = %normal32
%26 = icmp eq i32 %23, -2147483648
%27 = icmp eq i32 %.unpack8.i.i198, -1
%28 = select i1 %26, i1 %27, i1 false
- br i1 %28, label %"*Int32@Int#remainder<Int32>:Int32.exit", label %else2.i
+ br i1 %28, label %"*Int32@Int#divisible_by?<Int32>:Bool.exit", label %else2.i.i
-else2.i: ; preds = %else.i
+else2.i.i: ; preds = %else.i.i
%29 = srem i32 %23, %.unpack8.i.i198
- %phi.cmp = icmp eq i32 %29, 0
- %phi.cast = zext i1 %phi.cmp to i8
- br label %"*Int32@Int#remainder<Int32>:Int32.exit"
+ %phi.cmp.i = icmp eq i32 %29, 0
+ %phi.cast = zext i1 %phi.cmp.i to i8
+ br label %"*Int32@Int#divisible_by?<Int32>:Bool.exit"
-"*Int32@Int#remainder<Int32>:Int32.exit": ; preds = %else.i, %else2.i
- %30 = phi i8 [ %phi.cast, %else2.i ], [ 1, %else.i ]
+"*Int32@Int#divisible_by?<Int32>:Bool.exit": ; preds = %else.i.i, %else2.i.i
+ %30 = phi i8 [ %phi.cast, %else2.i.i ], [ 1, %else.i.i ]
store i8 %30, i8* %.sroa.239, align 8
br label %exit33
-exit33: ; preds = %else24, %"*Int32@Int#remainder<Int32>:Int32.exit"
- %31 = phi i1 [ true, %"*Int32@Int#remainder<Int32>:Int32.exit" ], [ false, %else24 ]
- %.sroa.phi35.in = phi i8* [ %.sroa.239, %"*Int32@Int#remainder<Int32>:Int32.exit" ], [ %.sroa.2, %else24 ]
+exit33: ; preds = %else24, %"*Int32@Int#divisible_by?<Int32>:Bool.exit"
+ %31 = phi i1 [ true, %"*Int32@Int#divisible_by?<Int32>:Bool.exit" ], [ false, %else24 ]
+ %.sroa.phi35.in = phi i8* [ %.sroa.239, %"*Int32@Int#divisible_by?<Int32>:Bool.exit" ], [ %.sroa.2, %else24 ]
%32 = bitcast i8* %.sroa.phi35.in to i1*
%33 = load i1, i1* %32, align 8
%34 = and i1 %31, %33
@@ -11652,492 +11398,619 @@ exit33: ; preds = %else24, %"*Int32@In
}
; Function Attrs: uwtable
-define internal fastcc %"Array(Tuple(Int32, Int32, Int32))"* @"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32))"() unnamed_addr #1 {
-alloca:
- %0 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zs", align 8
- %1 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %0, null
- br i1 %1, label %then, label %exit
-
-then: ; preds = %alloca
- %2 = tail call i8* @GC_malloc(i64 24)
- %3 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %4 = bitcast i8* %2 to i32*
- %5 = getelementptr inbounds i8, i8* %2, i64 12
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %5, i8 0, i64 12, i1 false)
- store i32 17, i32* %4, align 4
- %6 = getelementptr inbounds i8, i8* %2, i64 4
- %7 = bitcast i8* %6 to i32*
- store i32 0, i32* %7, align 4
- %8 = getelementptr inbounds i8, i8* %2, i64 8
- %9 = bitcast i8* %8 to i32*
- store i32 5, i32* %9, align 4
- %10 = tail call i8* @GC_malloc_atomic(i64 60)
- tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(60) %10, i8 0, i64 60, i1 false)
- %11 = getelementptr inbounds i8, i8* %2, i64 16
- %12 = bitcast i8* %11 to %"Tuple(Int32, Int32, Int32)"**
- %13 = bitcast i8* %11 to i8**
- store i8* %10, i8** %13, align 8
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %3)
- %14 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %12, align 8
- %15 = load i32, i32* %7, align 4
- %16 = sext i32 %15 to i64
- %.repack.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 0
- store i32 32, i32* %.repack.i, align 4
- %.repack1.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 1
- store i32 160, i32* %.repack1.i, align 4
- %.repack3.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %14, i64 %16, i32 2
- store i32 128, i32* %.repack3.i, align 4
- %17 = load i32, i32* %7, align 4
- %18 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %17, i32 1)
- %19 = extractvalue { i32, i1 } %18, 1
- br i1 %19, label %overflow.i.i, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit", !prof !0
-
-overflow.i.i: ; preds = %then
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit": ; preds = %then
- %20 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %21 = extractvalue { i32, i1 } %18, 0
- %sunkaddr = getelementptr inbounds i8, i8* %2, i64 4
- %22 = bitcast i8* %sunkaddr to i32*
- store i32 %21, i32* %22, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %20)
- %sunkaddr26 = getelementptr inbounds i8, i8* %2, i64 16
- %23 = bitcast i8* %sunkaddr26 to %"Tuple(Int32, Int32, Int32)"**
- %24 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %23, align 8
- %25 = load i32, i32* %22, align 4
- %26 = sext i32 %25 to i64
- %.repack.i14 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 0
- store i32 5760, i32* %.repack.i14, align 4
- %.repack1.i15 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 1
- store i32 8192, i32* %.repack1.i15, align 4
- %.repack3.i16 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %24, i64 %26, i32 2
- store i32 2432, i32* %.repack3.i16, align 4
- %27 = load i32, i32* %22, align 4
- %28 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %27, i32 1)
- %29 = extractvalue { i32, i1 } %28, 1
- br i1 %29, label %overflow.i.i6, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7", !prof !0
-
-overflow.i.i6: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit"
- %30 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %31 = extractvalue { i32, i1 } %28, 0
- %sunkaddr27 = getelementptr inbounds i8, i8* %2, i64 4
- %32 = bitcast i8* %sunkaddr27 to i32*
- store i32 %31, i32* %32, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %30)
- %sunkaddr28 = getelementptr inbounds i8, i8* %2, i64 16
- %33 = bitcast i8* %sunkaddr28 to %"Tuple(Int32, Int32, Int32)"**
- %34 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %33, align 8
- %35 = load i32, i32* %32, align 4
- %36 = sext i32 %35 to i64
- %.repack.i17 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 0
- store i32 8193, i32* %.repack.i17, align 4
- %.repack1.i18 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 1
- store i32 8202, i32* %.repack1.i18, align 4
- %.repack3.i19 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %34, i64 %36, i32 2
- store i32 1, i32* %.repack3.i19, align 4
- %37 = load i32, i32* %32, align 4
- %38 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %37, i32 1)
- %39 = extractvalue { i32, i1 } %38, 1
- br i1 %39, label %overflow.i.i8, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit9", !prof !0
-
-overflow.i.i8: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit9": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit7"
- %40 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %41 = extractvalue { i32, i1 } %38, 0
- %sunkaddr29 = getelementptr inbounds i8, i8* %2, i64 4
- %42 = bitcast i8* %sunkaddr29 to i32*
- store i32 %41, i32* %42, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %40)
- %sunkaddr30 = getelementptr inbounds i8, i8* %2, i64 16
- %43 = bitcast i8* %sunkaddr30 to %"Tuple(Int32, Int32, Int32)"**
- %44 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %43, align 8
- %45 = load i32, i32* %42, align 4
- %46 = sext i32 %45 to i64
- %.repack.i20 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 0
- store i32 8239, i32* %.repack.i20, align 4
- %.repack1.i21 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 1
- store i32 8287, i32* %.repack1.i21, align 4
- %.repack3.i22 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %44, i64 %46, i32 2
- store i32 48, i32* %.repack3.i22, align 4
- %47 = load i32, i32* %42, align 4
- %48 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %47, i32 1)
- %49 = extractvalue { i32, i1 } %48, 1
- br i1 %49, label %overflow.i.i10, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit11", !prof !0
-
-overflow.i.i10: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit9"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit11": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit9"
- %50 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %51 = extractvalue { i32, i1 } %48, 0
- %sunkaddr31 = getelementptr inbounds i8, i8* %2, i64 4
- %52 = bitcast i8* %sunkaddr31 to i32*
- store i32 %51, i32* %52, align 4
- tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %50)
- %sunkaddr32 = getelementptr inbounds i8, i8* %2, i64 16
- %53 = bitcast i8* %sunkaddr32 to %"Tuple(Int32, Int32, Int32)"**
- %54 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %53, align 8
- %55 = load i32, i32* %52, align 4
- %56 = sext i32 %55 to i64
- %.repack.i23 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 0
- store i32 12288, i32* %.repack.i23, align 4
- %.repack1.i24 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 1
- store i32 12288, i32* %.repack1.i24, align 4
- %.repack3.i25 = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %54, i64 %56, i32 2
- store i32 1, i32* %.repack3.i25, align 4
- %57 = load i32, i32* %52, align 4
- %58 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %57, i32 1)
- %59 = extractvalue { i32, i1 } %58, 1
- br i1 %59, label %overflow.i.i12, label %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13", !prof !0
-
-overflow.i.i12: ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit11"
- tail call void @__crystal_raise_overflow()
- unreachable
-
-"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13": ; preds = %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit11"
- %60 = bitcast i8* %2 to %"Array(Tuple(Int32, Int32, Int32))"*
- %61 = extractvalue { i32, i1 } %58, 0
- %sunkaddr33 = getelementptr inbounds i8, i8* %2, i64 4
- %62 = bitcast i8* %sunkaddr33 to i32*
- store i32 %61, i32* %62, align 4
- store i8* %2, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zs" to i8**), align 8
- br label %exit
-
-exit: ; preds = %alloca, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13"
- %63 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %60, %"*Array(Tuple(Int32, Int32, Int32))@Array(T)#<<<Tuple(Int32, Int32, Int32)>:Array(Tuple(Int32, Int32, Int32)).exit13" ], [ %0, %alloca ]
- ret %"Array(Tuple(Int32, Int32, Int32))"* %63
-}
-
-; Function Attrs: uwtable
-define internal fastcc void @"*Char#unicode_escape<String::Builder>:Nil"(i32 %self, %"String::Builder"* nocapture %io) unnamed_addr #1 {
+define internal fastcc i1 @"*Char#whitespace?:Bool"(i32 %self) unnamed_addr #1 {
entry:
- %byte.i51 = alloca i8, align 1
- %byte.i39 = alloca i8, align 1
- %byte.i27 = alloca i8, align 1
- %byte.i15 = alloca i8, align 1
- %byte.i = alloca i8, align 1
- tail call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\u'", i64 0, i32 3, i64 0) })
- %0 = icmp sgt i32 %self, 65535
- br i1 %0, label %then, label %exit
+ %0 = icmp slt i32 %self, 128
+ br i1 %0, label %then, label %else
then: ; preds = %entry
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i)
- store i8 123, i8* %byte.i, align 1
- %io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i = load i32, i32* %io.idx.i, align 4
- %.not67 = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not67, label %else2.i, label %then1.i
+ %1 = icmp eq i32 %self, 32
+ %2 = add i32 %self, -9
+ %3 = icmp ult i32 %2, 5
+ %4 = or i1 %1, %3
+ br label %exit
-then1.i: ; preds = %then
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i)
- br label %then10
+else: ; preds = %entry
+ %5 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zs", align 8
+ %6 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %5, null
+ br i1 %6, label %then.i.i, label %"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i"
-else2.i: ; preds = %then
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 123)
- br label %then10
+then.i.i: ; preds = %else
+ %7 = tail call i8* @GC_malloc(i64 24)
+ %8 = bitcast i8* %7 to i32*
+ %9 = getelementptr inbounds i8, i8* %7, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %9, i8 0, i64 12, i1 false)
+ store i32 17, i32* %8, align 4
+ %10 = getelementptr inbounds i8, i8* %7, i64 4
+ %11 = bitcast i8* %10 to i32*
+ store i32 0, i32* %11, align 4
+ %12 = getelementptr inbounds i8, i8* %7, i64 8
+ %13 = bitcast i8* %12 to i32*
+ store i32 5, i32* %13, align 4
+ %14 = tail call i8* @GC_malloc_atomic(i64 60)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(60) %14, i8 0, i64 60, i1 false)
+ %15 = getelementptr inbounds i8, i8* %7, i64 16
+ %16 = bitcast i8* %15 to i8**
+ store i8* %14, i8** %16, align 8
+ %17 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %17)
+ %18 = bitcast i8* %15 to %"Tuple(Int32, Int32, Int32)"**
+ %19 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %18, align 8
+ %20 = load i32, i32* %11, align 4
+ %21 = sext i32 %20 to i64
+ %.repack.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 0
+ store i32 32, i32* %.repack.i.i.i.i.i, align 4
+ %.repack1.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 1
+ store i32 160, i32* %.repack1.i.i.i.i.i, align 4
+ %.repack3.i.i.i.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %19, i64 %21, i32 2
+ store i32 128, i32* %.repack3.i.i.i.i.i, align 4
+ %22 = load i32, i32* %11, align 4
+ %23 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %22, i32 1)
+ %24 = extractvalue { i32, i1 } %23, 1
+ br i1 %24, label %overflow.i.i.i.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i", !prof !0
-exit: ; preds = %entry
- %1 = icmp slt i32 %self, 4096
- br i1 %1, label %then1, label %exit9
+overflow.i.i.i.i.i: ; preds = %then.i.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
-then1: ; preds = %exit
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i15)
- store i8 48, i8* %byte.i15, align 1
- %io.idx.i16 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i17 = load i32, i32* %io.idx.i16, align 4
- %.not = icmp eq i32 %io.idx.val.i17, 0
- br i1 %.not, label %else2.i25, label %then1.i24
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i": ; preds = %then.i.i
+ %25 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %26 = extractvalue { i32, i1 } %23, 0
+ %sunkaddr = getelementptr inbounds i8, i8* %7, i64 4
+ %27 = bitcast i8* %sunkaddr to i32*
+ store i32 %26, i32* %27, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %25)
+ %sunkaddr1 = getelementptr inbounds i8, i8* %7, i64 16
+ %28 = bitcast i8* %sunkaddr1 to %"Tuple(Int32, Int32, Int32)"**
+ %29 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %28, align 8
+ %30 = load i32, i32* %27, align 4
+ %31 = sext i32 %30 to i64
+ %.repack.i.i.i6.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 0
+ store i32 5760, i32* %.repack.i.i.i6.i.i, align 4
+ %.repack1.i.i.i7.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 1
+ store i32 8192, i32* %.repack1.i.i.i7.i.i, align 4
+ %.repack3.i.i.i8.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %29, i64 %31, i32 2
+ store i32 2432, i32* %.repack3.i.i.i8.i.i, align 4
+ %32 = load i32, i32* %27, align 4
+ %33 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %32, i32 1)
+ %34 = extractvalue { i32, i1 } %33, 1
+ br i1 %34, label %overflow.i.i.i9.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit10.i.i", !prof !0
-then1.i24: ; preds = %then1
- %oldret127.i23 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i15, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i23)
- br label %exit3
+overflow.i.i.i9.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-else2.i25: ; preds = %then1
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %exit3
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit10.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i.i"
+ %35 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %36 = extractvalue { i32, i1 } %33, 0
+ %sunkaddr2 = getelementptr inbounds i8, i8* %7, i64 4
+ %37 = bitcast i8* %sunkaddr2 to i32*
+ store i32 %36, i32* %37, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %35)
+ %sunkaddr3 = getelementptr inbounds i8, i8* %7, i64 16
+ %38 = bitcast i8* %sunkaddr3 to %"Tuple(Int32, Int32, Int32)"**
+ %39 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %38, align 8
+ %40 = load i32, i32* %37, align 4
+ %41 = sext i32 %40 to i64
+ %.repack.i.i.i11.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 0
+ store i32 8193, i32* %.repack.i.i.i11.i.i, align 4
+ %.repack1.i.i.i12.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 1
+ store i32 8202, i32* %.repack1.i.i.i12.i.i, align 4
+ %.repack3.i.i.i13.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %39, i64 %41, i32 2
+ store i32 1, i32* %.repack3.i.i.i13.i.i, align 4
+ %42 = load i32, i32* %37, align 4
+ %43 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %42, i32 1)
+ %44 = extractvalue { i32, i1 } %43, 1
+ br i1 %44, label %overflow.i.i.i14.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit15.i.i", !prof !0
-exit3: ; preds = %else2.i25, %then1.i24
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i15)
- %2 = icmp slt i32 %self, 256
- br i1 %2, label %then4, label %exit9.thread63
+overflow.i.i.i14.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit10.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-exit9.thread63: ; preds = %exit3
- call fastcc void @"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i32 %self, %"String::Builder"* nonnull %io)
- br label %exit12
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit15.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit10.i.i"
+ %45 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %46 = extractvalue { i32, i1 } %43, 0
+ %sunkaddr4 = getelementptr inbounds i8, i8* %7, i64 4
+ %47 = bitcast i8* %sunkaddr4 to i32*
+ store i32 %46, i32* %47, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %45)
+ %sunkaddr5 = getelementptr inbounds i8, i8* %7, i64 16
+ %48 = bitcast i8* %sunkaddr5 to %"Tuple(Int32, Int32, Int32)"**
+ %49 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %48, align 8
+ %50 = load i32, i32* %47, align 4
+ %51 = sext i32 %50 to i64
+ %.repack.i.i.i16.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %49, i64 %51, i32 0
+ store i32 8239, i32* %.repack.i.i.i16.i.i, align 4
+ %.repack1.i.i.i17.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %49, i64 %51, i32 1
+ store i32 8287, i32* %.repack1.i.i.i17.i.i, align 4
+ %.repack3.i.i.i18.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %49, i64 %51, i32 2
+ store i32 48, i32* %.repack3.i.i.i18.i.i, align 4
+ %52 = load i32, i32* %47, align 4
+ %53 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %52, i32 1)
+ %54 = extractvalue { i32, i1 } %53, 1
+ br i1 %54, label %overflow.i.i.i19.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit20.i.i", !prof !0
-then4: ; preds = %exit3
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i27)
- store i8 48, i8* %byte.i27, align 1
- %3 = bitcast %"String::Builder"* %io to i8*
- %sunkaddr = getelementptr i8, i8* %3, i64 8
- %4 = bitcast i8* %sunkaddr to i32*
- %io.idx.val.i29 = load i32, i32* %4, align 4
- %.not65 = icmp eq i32 %io.idx.val.i29, 0
- br i1 %.not65, label %else2.i37, label %then1.i36
+overflow.i.i.i19.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit15.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-then1.i36: ; preds = %then4
- %oldret127.i35 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i27, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i35)
- br label %exit6
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit20.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit15.i.i"
+ %55 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %56 = extractvalue { i32, i1 } %53, 0
+ %sunkaddr6 = getelementptr inbounds i8, i8* %7, i64 4
+ %57 = bitcast i8* %sunkaddr6 to i32*
+ store i32 %56, i32* %57, align 4
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* nonnull %55)
+ %sunkaddr7 = getelementptr inbounds i8, i8* %7, i64 16
+ %58 = bitcast i8* %sunkaddr7 to %"Tuple(Int32, Int32, Int32)"**
+ %59 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %58, align 8
+ %60 = load i32, i32* %57, align 4
+ %61 = sext i32 %60 to i64
+ %.repack.i.i.i21.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %59, i64 %61, i32 0
+ store i32 12288, i32* %.repack.i.i.i21.i.i, align 4
+ %.repack1.i.i.i22.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %59, i64 %61, i32 1
+ store i32 12288, i32* %.repack1.i.i.i22.i.i, align 4
+ %.repack3.i.i.i23.i.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %59, i64 %61, i32 2
+ store i32 1, i32* %.repack3.i.i.i23.i.i, align 4
+ %62 = load i32, i32* %57, align 4
+ %63 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %62, i32 1)
+ %64 = extractvalue { i32, i1 } %63, 1
+ br i1 %64, label %overflow.i.i.i24.i.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit25.i.i", !prof !0
-else2.i37: ; preds = %then4
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %exit6
+overflow.i.i.i24.i.i: ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit20.i.i"
+ tail call void @__crystal_raise_overflow()
+ unreachable
-exit6: ; preds = %else2.i37, %then1.i36
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i27)
- %5 = icmp slt i32 %self, 16
- br i1 %5, label %then7, label %exit9.thread
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit25.i.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit20.i.i"
+ %65 = bitcast i8* %7 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %66 = extractvalue { i32, i1 } %63, 0
+ %sunkaddr8 = getelementptr inbounds i8, i8* %7, i64 4
+ %67 = bitcast i8* %sunkaddr8 to i32*
+ store i32 %66, i32* %67, align 4
+ store i8* %7, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zs" to i8**), align 8
+ br label %"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i"
-then7: ; preds = %exit6
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i39)
- store i8 48, i8* %byte.i39, align 1
- %6 = bitcast %"String::Builder"* %io to i8*
- %sunkaddr69 = getelementptr i8, i8* %6, i64 8
- %7 = bitcast i8* %sunkaddr69 to i32*
- %io.idx.val.i41 = load i32, i32* %7, align 4
- %.not66 = icmp eq i32 %io.idx.val.i41, 0
- br i1 %.not66, label %else2.i49, label %then1.i48
+"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit25.i.i", %else
+ %68 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %65, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit25.i.i" ], [ %5, %else ]
+ %69 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl", align 8
+ %70 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %69, null
+ br i1 %70, label %then.i4.i, label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
-then1.i48: ; preds = %then7
- %oldret127.i47 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i39, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i47)
- br label %"*Char#to_s<String::Builder>:Nil.exit50"
+then.i4.i: ; preds = %"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ %71 = tail call i8* @GC_malloc(i64 24)
+ %72 = bitcast i8* %71 to i32*
+ %73 = getelementptr inbounds i8, i8* %71, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %73, i8 0, i64 12, i1 false)
+ store i32 17, i32* %72, align 4
+ %74 = getelementptr inbounds i8, i8* %71, i64 4
+ %75 = bitcast i8* %74 to i32*
+ store i32 0, i32* %75, align 4
+ %76 = getelementptr inbounds i8, i8* %71, i64 8
+ %77 = bitcast i8* %76 to i32*
+ store i32 1, i32* %77, align 4
+ %78 = tail call i8* @GC_malloc_atomic(i64 12)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %78, i8 0, i64 12, i1 false)
+ %79 = getelementptr inbounds i8, i8* %71, i64 16
+ %80 = bitcast i8* %79 to i8**
+ store i8* %78, i8** %80, align 8
+ %81 = bitcast i8* %71 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %81)
+ %82 = bitcast i8* %79 to %"Tuple(Int32, Int32, Int32)"**
+ %83 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %82, align 8
+ %84 = load i32, i32* %75, align 4
+ %85 = sext i32 %84 to i64
+ %.repack.i.i.i.i1.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 0
+ store i32 8232, i32* %.repack.i.i.i.i1.i, align 4
+ %.repack1.i.i.i.i2.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 1
+ store i32 8232, i32* %.repack1.i.i.i.i2.i, align 4
+ %.repack3.i.i.i.i3.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %83, i64 %85, i32 2
+ store i32 1, i32* %.repack3.i.i.i.i3.i, align 4
+ %86 = load i32, i32* %75, align 4
+ %87 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %86, i32 1)
+ %88 = extractvalue { i32, i1 } %87, 1
+ br i1 %88, label %overflow.i.i.i.i5.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i6.i", !prof !0
-else2.i49: ; preds = %then7
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit50"
+overflow.i.i.i.i5.i: ; preds = %then.i4.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
-"*Char#to_s<String::Builder>:Nil.exit50": ; preds = %then1.i48, %else2.i49
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i39)
- br label %exit9.thread
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i6.i": ; preds = %then.i4.i
+ %89 = bitcast i8* %71 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %90 = extractvalue { i32, i1 } %87, 0
+ %sunkaddr9 = getelementptr inbounds i8, i8* %71, i64 4
+ %91 = bitcast i8* %sunkaddr9 to i32*
+ store i32 %90, i32* %91, align 4
+ store i8* %71, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zl" to i8**), align 8
+ br label %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
-exit9.thread: ; preds = %exit6, %"*Char#to_s<String::Builder>:Nil.exit50"
- call fastcc void @"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i32 %self, %"String::Builder"* nonnull %io)
- br label %exit12
+"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i6.i", %"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ %92 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %89, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i6.i" ], [ %69, %"*Unicode::category_Zs:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
+ %93 = load %"Array(Tuple(Int32, Int32, Int32))"*, %"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp", align 8
+ %94 = icmp eq %"Array(Tuple(Int32, Int32, Int32))"* %93, null
+ br i1 %94, label %then.i10.i, label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
-exit9: ; preds = %exit
- tail call fastcc void @"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i32 %self, %"String::Builder"* %io)
- ret void
+then.i10.i: ; preds = %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ %95 = tail call i8* @GC_malloc(i64 24)
+ %96 = bitcast i8* %95 to i32*
+ %97 = getelementptr inbounds i8, i8* %95, i64 12
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %97, i8 0, i64 12, i1 false)
+ store i32 17, i32* %96, align 4
+ %98 = getelementptr inbounds i8, i8* %95, i64 4
+ %99 = bitcast i8* %98 to i32*
+ store i32 0, i32* %99, align 4
+ %100 = getelementptr inbounds i8, i8* %95, i64 8
+ %101 = bitcast i8* %100 to i32*
+ store i32 1, i32* %101, align 4
+ %102 = tail call i8* @GC_malloc_atomic(i64 12)
+ tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(12) %102, i8 0, i64 12, i1 false)
+ %103 = getelementptr inbounds i8, i8* %95, i64 16
+ %104 = bitcast i8* %103 to i8**
+ store i8* %102, i8** %104, align 8
+ %105 = bitcast i8* %95 to %"Array(Tuple(Int32, Int32, Int32))"*
+ tail call fastcc void @"*Array(Tuple(Int32, Int32, Int32))@Array(T)#check_needs_resize:(Int32 | Pointer(Tuple(Int32, Int32, Int32)) | Nil)"(%"Array(Tuple(Int32, Int32, Int32))"* %105)
+ %106 = bitcast i8* %103 to %"Tuple(Int32, Int32, Int32)"**
+ %107 = load %"Tuple(Int32, Int32, Int32)"*, %"Tuple(Int32, Int32, Int32)"** %106, align 8
+ %108 = load i32, i32* %99, align 4
+ %109 = sext i32 %108 to i64
+ %.repack.i.i.i.i7.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %107, i64 %109, i32 0
+ store i32 8233, i32* %.repack.i.i.i.i7.i, align 4
+ %.repack1.i.i.i.i8.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %107, i64 %109, i32 1
+ store i32 8233, i32* %.repack1.i.i.i.i8.i, align 4
+ %.repack3.i.i.i.i9.i = getelementptr inbounds %"Tuple(Int32, Int32, Int32)", %"Tuple(Int32, Int32, Int32)"* %107, i64 %109, i32 2
+ store i32 1, i32* %.repack3.i.i.i.i9.i, align 4
+ %110 = load i32, i32* %99, align 4
+ %111 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %110, i32 1)
+ %112 = extractvalue { i32, i1 } %111, 1
+ br i1 %112, label %overflow.i.i.i.i11.i, label %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i12.i", !prof !0
-then10: ; preds = %else2.i, %then1.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i)
- call fastcc void @"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i32 %self, %"String::Builder"* nonnull %io)
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i51)
- store i8 125, i8* %byte.i51, align 1
- %8 = bitcast %"String::Builder"* %io to i8*
- %sunkaddr70 = getelementptr i8, i8* %8, i64 8
- %9 = bitcast i8* %sunkaddr70 to i32*
- %io.idx.val.i53 = load i32, i32* %9, align 4
- %.not68 = icmp eq i32 %io.idx.val.i53, 0
- br i1 %.not68, label %else2.i61, label %then1.i60
+overflow.i.i.i.i11.i: ; preds = %then.i10.i
+ tail call void @__crystal_raise_overflow()
+ unreachable
-then1.i60: ; preds = %then10
- %oldret127.i59 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i51, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i59)
- br label %"*Char#to_s<String::Builder>:Nil.exit62"
+"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i12.i": ; preds = %then.i10.i
+ %113 = bitcast i8* %95 to %"Array(Tuple(Int32, Int32, Int32))"*
+ %114 = extractvalue { i32, i1 } %111, 0
+ %sunkaddr10 = getelementptr inbounds i8, i8* %95, i64 4
+ %115 = bitcast i8* %sunkaddr10 to i32*
+ store i32 %114, i32* %115, align 4
+ store i8* %95, i8** bitcast (%"Array(Tuple(Int32, Int32, Int32))"** @"Unicode::category_Zp" to i8**), align 8
+ br label %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
-else2.i61: ; preds = %then10
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 125)
- br label %"*Char#to_s<String::Builder>:Nil.exit62"
+"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i": ; preds = %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i12.i", %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ %116 = phi %"Array(Tuple(Int32, Int32, Int32))"* [ %113, %"*Unicode::put<Array(Tuple(Int32, Int32, Int32)), Int32, Int32, Int32>:Nil.exit.i12.i" ], [ %93, %"*Unicode::category_Zl:Array(Tuple(Int32, Int32, Int32)).exit.i" ]
+ %117 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %68)
+ br i1 %117, label %exit, label %else.i.i
-"*Char#to_s<String::Builder>:Nil.exit62": ; preds = %then1.i60, %else2.i61
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i51)
- br label %exit12
+else.i.i: ; preds = %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i"
+ %118 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %92)
+ br i1 %118, label %exit, label %else2.i.i
-exit12: ; preds = %exit9.thread63, %exit9.thread, %"*Char#to_s<String::Builder>:Nil.exit62"
- ret void
+else2.i.i: ; preds = %else.i.i
+ %119 = tail call fastcc i1 @"*Unicode::in_category?<Int32, Array(Tuple(Int32, Int32, Int32))>:Bool"(i32 %self, %"Array(Tuple(Int32, Int32, Int32))"* nonnull %116)
+ ret i1 %119
+
+exit: ; preds = %else.i.i, %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i", %then
+ %120 = phi i1 [ %4, %then ], [ true, %"*Unicode::category_Zp:Array(Tuple(Int32, Int32, Int32)).exit.i" ], [ true, %else.i.i ]
+ ret i1 %120
}
; Function Attrs: uwtable
-define internal fastcc void @"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil"(i32 %self, %"String::Builder"* nocapture %io) unnamed_addr #1 {
-alloca:
- %byte.i26 = alloca i8, align 1
- %byte.i14 = alloca i8, align 1
- %byte.i2 = alloca i8, align 1
+define internal fastcc void @"*Char#unicode_escape<String::Builder>:Nil"(i32 %self, %"String::Builder"* %io) unnamed_addr #1 {
+entry:
+ %chars.i = alloca [129 x i8], align 1
+ %0 = bitcast [129 x i8]* %chars.i to i8*
+ %1 = bitcast [129 x i8]* %chars.i to i8*
+ %2 = bitcast [129 x i8]* %chars.i to i8*
+ %3 = bitcast [129 x i8]* %chars.i to i8*
+ %4 = bitcast [129 x i8]* %chars.i to i8*
+ %5 = bitcast [129 x i8]* %chars.i to i8*
+ %6 = bitcast [129 x i8]* %chars.i to i8*
+ %byte.i45 = alloca i8, align 1
+ %byte.i35 = alloca i8, align 1
+ %byte.i25 = alloca i8, align 1
+ %byte.i15 = alloca i8, align 1
%byte.i = alloca i8, align 1
- %chars = alloca [129 x i8], align 1
- switch i32 %self, label %else28 [
- i32 0, label %then21
- i32 1, label %then27
- ]
+ %byte.i17.i = alloca i8, align 1
+ %byte.i9.i = alloca i8, align 1
+ %byte.i1.i = alloca i8, align 1
+ %byte.i.i = alloca i8, align 1
+ tail call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" { i32 2, i1 true, i8* getelementptr inbounds ({ i32, i32, i32, [3 x i8] }, { i32, i32, i32, [3 x i8] }* @"'\\u'", i64 0, i32 3, i64 0) })
+ %7 = icmp sgt i32 %self, 65535
+ br i1 %7, label %then, label %exit
-exit20: ; preds = %"*Char#to_s<String::Builder>:Nil.exit13", %exit54, %"*Char#to_s<String::Builder>:Nil.exit"
- ret void
-
-then21: ; preds = %alloca
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i26)
- store i8 48, i8* %byte.i26, align 1
+then: ; preds = %entry
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %3)
+ store i8 123, i8* %3, align 1
%io.idx.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
%io.idx.val.i = load i32, i32* %io.idx.i, align 4
- %.not41 = icmp eq i32 %io.idx.val.i, 0
- br i1 %.not41, label %else2.i, label %then1.i
+ %.not.i = icmp eq i32 %io.idx.val.i, 0
+ br i1 %.not.i, label %else2.i, label %then1.i
-then1.i: ; preds = %then21
- %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i26, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
+then1.i: ; preds = %then
+ %oldret127.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %3, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i) #28
+ br label %exit.thread
-else2.i: ; preds = %then21
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit"
+else2.i: ; preds = %then
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 123) #28
+ br label %exit.thread
-"*Char#to_s<String::Builder>:Nil.exit": ; preds = %then1.i, %else2.i
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i26)
- br label %exit20
+exit.thread: ; preds = %else2.i, %then1.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %3)
+ br label %exit9
-then27: ; preds = %alloca
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i26)
- store i8 49, i8* %byte.i26, align 1
- %io.idx.i3 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i4 = load i32, i32* %io.idx.i3, align 4
- %.not40 = icmp eq i32 %io.idx.val.i4, 0
- br i1 %.not40, label %else2.i12, label %then1.i11
+exit: ; preds = %entry
+ %8 = icmp slt i32 %self, 4096
+ br i1 %8, label %then1, label %exit9
-then1.i11: ; preds = %then27
- %oldret127.i10 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i26, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i10)
- br label %"*Char#to_s<String::Builder>:Nil.exit13"
+then1: ; preds = %exit
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %0)
+ store i8 48, i8* %0, align 1
+ %io.idx.i17 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i18 = load i32, i32* %io.idx.i17, align 4
+ %.not.i19 = icmp eq i32 %io.idx.val.i18, 0
+ br i1 %.not.i19, label %else2.i23, label %then1.i22
-else2.i12: ; preds = %then27
- tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 49)
- br label %"*Char#to_s<String::Builder>:Nil.exit13"
+then1.i22: ; preds = %then1
+ %oldret127.i21 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %0, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i21) #28
+ br label %exit3
-"*Char#to_s<String::Builder>:Nil.exit13": ; preds = %then1.i11, %else2.i12
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i26)
- br label %exit20
+else2.i23: ; preds = %then1
+ tail call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %exit3
-else28: ; preds = %alloca
- br label %body
+exit3: ; preds = %else2.i23, %then1.i22
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %0)
+ %9 = icmp slt i32 %self, 256
+ br i1 %9, label %then4, label %exit9
-body: ; preds = %else28, %body
- %lsr.iv48 = phi i64 [ 0, %else28 ], [ %lsr.iv.next49, %body ]
- %num.043 = phi i32 [ %self, %else28 ], [ %6, %body ]
- %0 = srem i32 %num.043, 16
- %1 = tail call i32 @llvm.abs.i32(i32 %0, i1 true)
- %2 = zext i32 %1 to i64
- %3 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789ABCDEFGHI...'", i64 0, i32 3, i64 %2
- %4 = load i8, i8* %3, align 1
- %5 = bitcast [129 x i8]* %chars to i8*
- %sunkaddr = getelementptr i8, i8* %5, i64 %lsr.iv48
- %sunkaddr56 = getelementptr i8, i8* %sunkaddr, i64 127
- store i8 %4, i8* %sunkaddr56, align 1
- %6 = sdiv i32 %num.043, 16
- %num.043.off = add i32 %num.043, 15
- %7 = icmp ult i32 %num.043.off, 31
- %lsr.iv.next49 = add i64 %lsr.iv48, -1
- br i1 %7, label %fail, label %body
+then4: ; preds = %exit3
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %4)
+ store i8 48, i8* %4, align 1
+ %10 = bitcast %"String::Builder"* %io to i8*
+ %sunkaddr = getelementptr i8, i8* %10, i64 8
+ %11 = bitcast i8* %sunkaddr to i32*
+ %io.idx.val.i28 = load i32, i32* %11, align 4
+ %.not.i29 = icmp eq i32 %io.idx.val.i28, 0
+ br i1 %.not.i29, label %else2.i33, label %then1.i32
-fail: ; preds = %body
- %8 = mul i64 %lsr.iv.next49, -1
- %9 = add i64 %8, -2147483648
- %10 = icmp ult i64 %9, -4294967296
- %11 = add i64 %lsr.iv.next49, 1
- %scevgep = getelementptr [129 x i8], [129 x i8]* %chars, i64 0, i64 128
- %scevgep53 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next49
- br i1 %10, label %overflow, label %normal, !prof !0
+then1.i32: ; preds = %then4
+ %oldret127.i31 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %4, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i31) #28
+ br label %exit6
-overflow: ; preds = %fail
+else2.i33: ; preds = %then4
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %exit6
+
+exit6: ; preds = %else2.i33, %then1.i32
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %4)
+ %12 = icmp slt i32 %self, 16
+ br i1 %12, label %then7, label %exit9
+
+then7: ; preds = %exit6
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %2)
+ store i8 48, i8* %2, align 1
+ %13 = bitcast %"String::Builder"* %io to i8*
+ %sunkaddr65 = getelementptr i8, i8* %13, i64 8
+ %14 = bitcast i8* %sunkaddr65 to i32*
+ %io.idx.val.i38 = load i32, i32* %14, align 4
+ %.not.i39 = icmp eq i32 %io.idx.val.i38, 0
+ br i1 %.not.i39, label %else2.i43, label %then1.i42
+
+then1.i42: ; preds = %then7
+ %oldret127.i41 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %2, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i41) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit44"
+
+else2.i43: ; preds = %then7
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit44"
+
+"*Char#to_s<String::Builder>:Nil.exit44": ; preds = %then1.i42, %else2.i43
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %2)
+ br label %exit9
+
+exit9: ; preds = %exit, %exit.thread, %exit3, %exit6, %"*Char#to_s<String::Builder>:Nil.exit44"
+ %15 = bitcast [129 x i8]* %chars.i to i8*
+ call void @llvm.lifetime.start.p0i8(i64 129, i8* nonnull %15)
+ switch i32 %self, label %else28.i [
+ i32 0, label %then21.i
+ i32 1, label %then27.i
+ ]
+
+then21.i: ; preds = %exit9
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %1)
+ store i8 48, i8* %1, align 1
+ %io.idx.i.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i.i = load i32, i32* %io.idx.i.i, align 4
+ %.not.i.i = icmp eq i32 %io.idx.val.i.i, 0
+ br i1 %.not.i.i, label %else2.i.i, label %then1.i.i
+
+then1.i.i: ; preds = %then21.i
+ %oldret127.i.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %1, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i"
+
+else2.i.i: ; preds = %then21.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit.i"
+
+"*Char#to_s<String::Builder>:Nil.exit.i": ; preds = %else2.i.i, %then1.i.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %1)
+ br label %"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit"
+
+then27.i: ; preds = %exit9
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %5)
+ store i8 49, i8* %5, align 1
+ %io.idx.i2.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i3.i = load i32, i32* %io.idx.i2.i, align 4
+ %.not.i4.i = icmp eq i32 %io.idx.val.i3.i, 0
+ br i1 %.not.i4.i, label %else2.i7.i, label %then1.i6.i
+
+then1.i6.i: ; preds = %then27.i
+ %oldret127.i5.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %5, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i5.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit8.i"
+
+else2.i7.i: ; preds = %then27.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 49) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit8.i"
+
+"*Char#to_s<String::Builder>:Nil.exit8.i": ; preds = %else2.i7.i, %then1.i6.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %5)
+ br label %"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit"
+
+else28.i: ; preds = %exit9
+ br label %body.i
+
+body.i: ; preds = %body.i, %else28.i
+ %lsr.iv57 = phi i64 [ %lsr.iv.next58, %body.i ], [ 0, %else28.i ]
+ %num.026.i = phi i32 [ %self, %else28.i ], [ %22, %body.i ]
+ %16 = srem i32 %num.026.i, 16
+ %17 = call i32 @llvm.abs.i32(i32 %16, i1 true)
+ %18 = zext i32 %17 to i64
+ %19 = getelementptr inbounds { i32, i32, i32, [37 x i8] }, { i32, i32, i32, [37 x i8] }* @"'0123456789ABCDEFGHI...'", i64 0, i32 3, i64 %18
+ %20 = load i8, i8* %19, align 1
+ %21 = bitcast [129 x i8]* %chars.i to i8*
+ %sunkaddr66 = getelementptr i8, i8* %21, i64 %lsr.iv57
+ %sunkaddr67 = getelementptr i8, i8* %sunkaddr66, i64 127
+ store i8 %20, i8* %sunkaddr67, align 1
+ %22 = sdiv i32 %num.026.i, 16
+ %num.026.off.i = add i32 %num.026.i, 15
+ %23 = icmp ult i32 %num.026.off.i, 31
+ %lsr.iv.next58 = add i64 %lsr.iv57, -1
+ br i1 %23, label %fail.i, label %body.i
+
+fail.i: ; preds = %body.i
+ %24 = mul i64 %lsr.iv.next58, -1
+ %25 = add i64 %24, -2147483648
+ %26 = icmp ult i64 %25, -4294967296
+ %27 = add i64 %lsr.iv.next58, 1
+ %scevgep = getelementptr [129 x i8], [129 x i8]* %chars.i, i64 0, i64 128
+ %scevgep59 = getelementptr i8, i8* %scevgep, i64 %lsr.iv.next58
+ br i1 %26, label %overflow.i, label %normal.i, !prof !0
+
+overflow.i: ; preds = %fail.i
call void @__crystal_raise_overflow()
unreachable
-normal: ; preds = %fail
- %12 = icmp slt i32 %self, 0
- %13 = mul i64 %lsr.iv.next49, -1
- %14 = mul i64 %lsr.iv.next49, -1
- %15 = mul i64 %lsr.iv.next49, -1
- br i1 %12, label %then44, label %exit46
+normal.i: ; preds = %fail.i
+ %28 = icmp slt i32 %self, 0
+ %29 = mul i64 %lsr.iv.next58, -1
+ %30 = mul i64 %lsr.iv.next58, -1
+ %31 = mul i64 %lsr.iv.next58, -1
+ br i1 %28, label %then44.i, label %exit46.i
-then44: ; preds = %normal
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i26)
- store i8 45, i8* %byte.i26, align 1
- %io.idx.i15 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
- %io.idx.val.i16 = load i32, i32* %io.idx.i15, align 4
- %.not39 = icmp eq i32 %io.idx.val.i16, 0
- br i1 %.not39, label %else2.i24, label %then1.i23
+then44.i: ; preds = %normal.i
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i17.i)
+ store i8 45, i8* %byte.i17.i, align 1
+ %io.idx.i10.i = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i11.i = load i32, i32* %io.idx.i10.i, align 4
+ %.not.i12.i = icmp eq i32 %io.idx.val.i11.i, 0
+ br i1 %.not.i12.i, label %else2.i15.i, label %then1.i14.i
-then1.i23: ; preds = %then44
- %oldret127.i22 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i26, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i22)
- br label %"*Char#to_s<String::Builder>:Nil.exit25"
+then1.i14.i: ; preds = %then44.i
+ %oldret127.i13.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i17.i, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i13.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit16.i"
-else2.i24: ; preds = %then44
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 45)
- br label %"*Char#to_s<String::Builder>:Nil.exit25"
+else2.i15.i: ; preds = %then44.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 45) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit16.i"
-"*Char#to_s<String::Builder>:Nil.exit25": ; preds = %then1.i23, %else2.i24
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i26)
- br label %exit46
+"*Char#to_s<String::Builder>:Nil.exit16.i": ; preds = %else2.i15.i, %then1.i14.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i17.i)
+ br label %exit46.i
-exit46: ; preds = %normal, %"*Char#to_s<String::Builder>:Nil.exit25"
- %tmp52 = trunc i64 %13 to i32
- %16 = icmp slt i32 %tmp52, 1
- br i1 %16, label %then47, label %exit54
+exit46.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit16.i", %normal.i
+ %tmp62 = trunc i64 %29 to i32
+ %32 = icmp slt i32 %tmp62, 1
+ br i1 %32, label %then47.i, label %exit54.i
-then47: ; preds = %exit46
- %tmp51 = trunc i64 %14 to i32
- %17 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp51)
- %18 = extractvalue { i32, i1 } %17, 0
- %19 = extractvalue { i32, i1 } %17, 1
- br i1 %19, label %overflow49, label %while51.preheader, !prof !0
+then47.i: ; preds = %exit46.i
+ %tmp60 = trunc i64 %31 to i32
+ %33 = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 1, i32 %tmp60)
+ %34 = extractvalue { i32, i1 } %33, 0
+ %35 = extractvalue { i32, i1 } %33, 1
+ br i1 %35, label %overflow49.i, label %while51.preheader.i, !prof !0
-while51.preheader: ; preds = %then47
- %20 = icmp sgt i32 %18, 0
- br i1 %20, label %body52.lr.ph, label %exit54
+while51.preheader.i: ; preds = %then47.i
+ %36 = icmp sgt i32 %34, 0
+ br i1 %36, label %body52.lr.ph.i, label %exit54.i
-body52.lr.ph: ; preds = %while51.preheader
- %oldret127.i34 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i26, 2
- %tmp = trunc i64 %11 to i32
- br label %body52
+body52.lr.ph.i: ; preds = %while51.preheader.i
+ %oldret127.i21.i = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %byte.i17.i, 2
+ %tmp = trunc i64 %27 to i32
+ br label %body52.i
-overflow49: ; preds = %then47
+overflow49.i: ; preds = %then47.i
call void @__crystal_raise_overflow()
unreachable
-body52: ; preds = %body52.lr.ph, %"*Char#to_s<String::Builder>:Nil.exit37"
- %lsr.iv46 = phi i32 [ %tmp, %body52.lr.ph ], [ %lsr.iv.next47, %"*Char#to_s<String::Builder>:Nil.exit37" ]
- call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i26)
- store i8 48, i8* %byte.i26, align 1
- %21 = bitcast %"String::Builder"* %io to i8*
- %sunkaddr57 = getelementptr i8, i8* %21, i64 8
- %22 = bitcast i8* %sunkaddr57 to i32*
- %io.idx.val.i28 = load i32, i32* %22, align 4
- %.not38 = icmp eq i32 %io.idx.val.i28, 0
- br i1 %.not38, label %else2.i36, label %then1.i35
+body52.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit24.i", %body52.lr.ph.i
+ %lsr.iv55 = phi i32 [ %lsr.iv.next56, %"*Char#to_s<String::Builder>:Nil.exit24.i" ], [ %tmp, %body52.lr.ph.i ]
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %byte.i17.i)
+ store i8 48, i8* %byte.i17.i, align 1
+ %37 = bitcast %"String::Builder"* %io to i8*
+ %sunkaddr68 = getelementptr i8, i8* %37, i64 8
+ %38 = bitcast i8* %sunkaddr68 to i32*
+ %io.idx.val.i19.i = load i32, i32* %38, align 4
+ %.not.i20.i = icmp eq i32 %io.idx.val.i19.i, 0
+ br i1 %.not.i20.i, label %else2.i23.i, label %then1.i22.i
-then1.i35: ; preds = %body52
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i34)
- br label %"*Char#to_s<String::Builder>:Nil.exit37"
+then1.i22.i: ; preds = %body52.i
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i21.i) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit24.i"
-else2.i36: ; preds = %body52
- call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48)
- br label %"*Char#to_s<String::Builder>:Nil.exit37"
+else2.i23.i: ; preds = %body52.i
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 48) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit24.i"
-"*Char#to_s<String::Builder>:Nil.exit37": ; preds = %then1.i35, %else2.i36
- call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i26)
- %lsr.iv.next47 = add i32 %lsr.iv46, -1
- %exitcond.not = icmp eq i32 %lsr.iv.next47, 0
- br i1 %exitcond.not, label %exit54, label %body52
+"*Char#to_s<String::Builder>:Nil.exit24.i": ; preds = %else2.i23.i, %then1.i22.i
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %byte.i17.i)
+ %lsr.iv.next56 = add i32 %lsr.iv55, -1
+ %exitcond.not.i = icmp eq i32 %lsr.iv.next56, 0
+ br i1 %exitcond.not.i, label %exit54.i, label %body52.i
-exit54: ; preds = %"*Char#to_s<String::Builder>:Nil.exit37", %while51.preheader, %exit46
- %tmp50 = trunc i64 %15 to i32
- %oldret = insertvalue %"Slice(UInt8)" undef, i32 %tmp50, 0
- %oldret82 = insertvalue %"Slice(UInt8)" %oldret, i1 false, 1
- %oldret84 = insertvalue %"Slice(UInt8)" %oldret82, i8* %scevgep53, 2
- call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %oldret84)
- br label %exit20
+exit54.i: ; preds = %"*Char#to_s<String::Builder>:Nil.exit24.i", %while51.preheader.i, %exit46.i
+ %tmp61 = trunc i64 %30 to i32
+ %oldret.i = insertvalue %"Slice(UInt8)" undef, i32 %tmp61, 0
+ %oldret82.i = insertvalue %"Slice(UInt8)" %oldret.i, i1 false, 1
+ %oldret84.i = insertvalue %"Slice(UInt8)" %oldret82.i, i8* %scevgep59, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* %io, %"Slice(UInt8)" %oldret84.i)
+ br label %"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit"
+
+"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit": ; preds = %"*Char#to_s<String::Builder>:Nil.exit.i", %"*Char#to_s<String::Builder>:Nil.exit8.i", %exit54.i
+ %39 = bitcast [129 x i8]* %chars.i to i8*
+ %40 = icmp sgt i32 %self, 65535
+ call void @llvm.lifetime.end.p0i8(i64 129, i8* nonnull %39)
+ br i1 %40, label %then10, label %exit12
+
+then10: ; preds = %"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit"
+ call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull %6)
+ store i8 125, i8* %6, align 1
+ %io.idx.i47 = getelementptr %"String::Builder", %"String::Builder"* %io, i64 0, i32 1, i32 0
+ %io.idx.val.i48 = load i32, i32* %io.idx.i47, align 4
+ %.not.i49 = icmp eq i32 %io.idx.val.i48, 0
+ br i1 %.not.i49, label %else2.i53, label %then1.i52
+
+then1.i52: ; preds = %then10
+ %oldret127.i51 = insertvalue %"Slice(UInt8)" { i32 1, i1 false, i8* undef }, i8* %6, 2
+ call fastcc void @"*String::Builder#write<Slice(UInt8)>:Nil"(%"String::Builder"* nonnull %io, %"Slice(UInt8)" %oldret127.i51) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit54"
+
+else2.i53: ; preds = %then10
+ call fastcc void @"*String::Builder#write_byte<UInt8>:Nil"(%"String::Builder"* nonnull %io, i8 125) #28
+ br label %"*Char#to_s<String::Builder>:Nil.exit54"
+
+"*Char#to_s<String::Builder>:Nil.exit54": ; preds = %then1.i52, %else2.i53
+ call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull %6)
+ br label %exit12
+
+exit12: ; preds = %"*Int32@Int#to_s:upcase<String::Builder, Int32, Bool>:Nil.exit", %"*Char#to_s<String::Builder>:Nil.exit54"
+ ret void
}
; Function Attrs: uwtable
@@ -12190,184 +12063,718 @@ normal7: ; preds = %normal5
%20 = icmp sgt i32 %19, 0
br i1 %20, label %exit, label %exit34
-then: ; preds = %exit17, %"*String#size_known?:Bool.exit151"
- %21 = tail call fastcc i32 @"*String#size:Int32"(%String* nonnull %__temp_244)
- %22 = tail call fastcc i32 @"*String#size:Int32"(%String* nonnull %__temp_245)
- %23 = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %21, i32 %22)
- %24 = extractvalue { i32, i1 } %23, 1
- br i1 %24, label %overflow28, label %normal29, !prof !0
+then: ; preds = %exit17, %"*String#size_known?:Bool.exit164"
+ %21 = icmp eq i32 %1, 0
+ %22 = getelementptr inbounds %String, %String* %__temp_244, i64 0, i32 2
+ %23 = load i32, i32* %22, align 4
+ %24 = icmp sgt i32 %23, 0
+ %brmerge = select i1 %24, i1 true, i1 %21
+ br i1 %brmerge, label %"*String#size:Int32.exit", label %while.i.preheader
+
+while.i.preheader: ; preds = %then
+ %25 = icmp sgt i32 %1, 0
+ br i1 %25, label %body.i.lr.ph, label %fail.i
+
+body.i.lr.ph: ; preds = %while.i.preheader
+ br label %body.i
+
+body.i: ; preds = %body.i.lr.ph, %normal4.i
+ %lsr.iv851 = phi i32 [ 0, %body.i.lr.ph ], [ %lsr.iv.next852, %normal4.i ]
+ %byte_index.0.i273 = phi i32 [ 0, %body.i.lr.ph ], [ %57, %normal4.i ]
+ %26 = sext i32 %byte_index.0.i273 to i64
+ %27 = bitcast %String* %__temp_244 to i8*
+ %sunkaddr = getelementptr inbounds i8, i8* %27, i64 %26
+ %sunkaddr853 = getelementptr inbounds i8, i8* %sunkaddr, i64 12
+ %28 = load i8, i8* %sunkaddr853, align 1
+ %29 = icmp ult i8 %28, -62
+ br i1 %29, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else2.i.i
+
+else2.i.i: ; preds = %body.i
+ %30 = bitcast %String* %__temp_244 to i8*
+ %sunkaddr854 = getelementptr inbounds i8, i8* %30, i64 %26
+ %sunkaddr855 = getelementptr inbounds i8, i8* %sunkaddr854, i64 13
+ %31 = load i8, i8* %sunkaddr855, align 1
+ %32 = and i8 %31, -64
+ %.not.i.i = icmp eq i8 %32, -128
+ br i1 %.not.i.i, label %else4.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
+
+else4.i.i: ; preds = %else2.i.i
+ %33 = icmp ult i8 %28, -32
+ br i1 %33, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else6.i.i
+
+else6.i.i: ; preds = %else4.i.i
+ %34 = bitcast %String* %__temp_244 to i8*
+ %sunkaddr856 = getelementptr inbounds i8, i8* %34, i64 %26
+ %sunkaddr857 = getelementptr inbounds i8, i8* %sunkaddr856, i64 14
+ %35 = load i8, i8* %sunkaddr857, align 1
+ %36 = and i8 %35, -64
+ %.not46.i.i = icmp eq i8 %36, -128
+ br i1 %.not46.i.i, label %else8.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
+
+else8.i.i: ; preds = %else6.i.i
+ %37 = icmp ult i8 %28, -16
+ br i1 %37, label %then9.i.i, label %else10.i.i
+
+then9.i.i: ; preds = %else8.i.i
+ %38 = icmp eq i8 %28, -32
+ %39 = icmp ult i8 %31, -96
+ %40 = select i1 %38, i1 %39, i1 false
+ br i1 %40, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else12.i.i
+
+else10.i.i: ; preds = %else8.i.i
+ %41 = icmp eq i8 %28, -16
+ %42 = icmp ult i8 %31, -112
+ %43 = select i1 %41, i1 %42, i1 false
+ br i1 %43, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else21.i.i
+
+else12.i.i: ; preds = %then9.i.i
+ %44 = icmp eq i8 %28, -19
+ %45 = icmp ugt i8 %31, -97
+ %46 = select i1 %44, i1 %45, i1 false
+ %47 = select i1 %46, i32 1, i32 3
+ br label %"*String#char_bytesize_at<Int32>:Int32.exit"
+
+else21.i.i: ; preds = %else10.i.i
+ %48 = icmp eq i8 %28, -12
+ %49 = icmp ugt i8 %31, -113
+ %50 = select i1 %48, i1 %49, i1 false
+ br i1 %50, label %"*String#char_bytesize_at<Int32>:Int32.exit", label %else26.i.i
+
+else26.i.i: ; preds = %else21.i.i
+ %51 = bitcast %String* %__temp_244 to i8*
+ %sunkaddr858 = getelementptr inbounds i8, i8* %51, i64 %26
+ %sunkaddr859 = getelementptr inbounds i8, i8* %sunkaddr858, i64 15
+ %52 = load i8, i8* %sunkaddr859, align 1
+ %53 = and i8 %52, -64
+ %.not47.i.i = icmp eq i8 %53, -128
+ br i1 %.not47.i.i, label %else31.i.i, label %"*String#char_bytesize_at<Int32>:Int32.exit"
+
+else31.i.i:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment