import std.stdio;
import std.ascii;
import std.algorithm;
static import core.stdc.stdio;

long[300_000+2] a;
long[300_000+2] c;

int main()
{
    int[][] parent = new int[][](300_000+2, 20);
    int q = readInt!int;
    a[0] = readInt!long;
    c[0] = readInt!long;
    parent[0][] = -1;
    int getNthParent(int v, int n)
    {
        int i = 0;
        while (n)
        {
            if (n & 1)
                v = parent[v][i];
            n >>= 1;
            i++;
        }
        return v;
    }
    foreach(i; 1 .. q + 1)
    {
        int type = readInt!int;
        if (type == 1)
        {
            int pi = readInt!int;
            long ai = readInt!long;
            long ci = readInt!long;
            parent[i][0] = pi;
            foreach(j; 1 .. 20)
            {
                if (parent[i][j - 1] > 0)
                    parent[i][j] = parent[parent[i][j - 1]][j - 1];
                else parent[i][j] = -1;
            }
            a[i] = ai;
            c[i] = ci;
        }
        else
        {
            int vi = readInt!int;
            long wi = readInt!long;
            int root = vi;
            int no = 0;
            long spent = 0;
            long bought = 0;
            foreach_reverse(j; 0 .. 20)
            {
                int possibleParent = parent[root][j];
                if (possibleParent < 0) continue;
                if (a[possibleParent] > 0)
                {
                    root = possibleParent;
                    no += (long(1) << j);
                }
            }
            debug writeln("for node ", vi, " root is ", root, " depth = ", no);
            while (wi > 0 && no >= 0)
            {
                int p = getNthParent(vi, no);
                debug writeln("Now is ", no, " ", p, " ap = ", a[p], " wi = ", wi);
                long taken = min(wi, a[p]);
                wi -= taken;
                bought += taken;
                spent += taken * c[p];
                a[p] -= taken;
                no--;
            }
            writeln(bought, " ", spent);
            stdout.flush;
        }
    }
    return 0;
}


/* INPUT ROUTINES */
int currChar;
static this()
{
    currChar = core.stdc.stdio.getchar();
}
char topChar()
{
    return cast(char) currChar;
}
void popChar()
{
    currChar = core.stdc.stdio.getchar();
}
auto readInt(T)()
{
    T num = 0;
    int sgn = 0;
    while (topChar.isWhite) popChar;
    while (topChar == '-' || topChar == '+') { sgn ^= (topChar == '-'); popChar; }
    while (topChar.isDigit) { num *= 10; num += (topChar - '0'); popChar; }
    if (sgn) return -num; return num;
}
string readString()
{
    string res = "";
    while (topChar.isWhite) popChar;
    while (!topChar.isWhite) { res ~= topChar; popChar; }
    return res;
}
/**MODULAR SYSTEM*/
struct Z(immutable long m)
{
    long rep;
    this(long num)
    {
        rep = num;
    }
    Z!m opBinary(string operator)(Z!m rhs)
    {
        static if (operator == "+")
        {
            long result = rhs.rep + this.rep;
            if (result >= m) result -= m;
            return Z!m(result);
        }
        else static if (operator == "-")
        {
            long result = this.rep - rhs.rep;
            if (result < 0) result += m;
            return Z!m(result);
        }
        else static if (operator == "*")
        {
            long result = this.rep * rhs.rep;
            if (result >= m) result %= m;
            return Z!m(result);
        } else static assert(text("Operator ", operator, " not supported"));
    }
    Z!m opBinary(string operator)(long exponent) if (operator == "^^")
    {
        assert(exponent >= 0);
        Z!m base = this;
        Z!m result = 1;
        while (exponent)
        {
            if (exponent & 1)
                result = result * base;
            base = base * base;
            exponent >>= 1;
        }
        return result;
    }
    invariant
    {
        assert(rep >= 0 && rep < m);
    }
}

; ModuleID = '/data/TheStack_IR/OJ_Samples/Collated/D/Source_2198/source.d'
source_filename = "/data/TheStack_IR/OJ_Samples/Collated/D/Source_2198/source.d"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

%0 = type { i32, i32, void ()*, [7 x i8] }
%object.TypeInfo_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* }
%object.TypeInfo = type { [19 x i8*]*, i8* }
%object.TypeInfo_Class = type { [20 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, { i64, i8** }, { i64, %object.Interface* }, %object.TypeInfo_Class*, i8*, void (%object.Object*)*, i32, [4 x i8], i8*, { i64, %object.OffsetTypeInfo* }, void (%object.Object*)*, i8* }
%object.Interface = type { %object.TypeInfo_Class*, { i64, i8** }, i64 }
%object.OffsetTypeInfo = type { i64, %object.TypeInfo* }
%object.Object = type { [5 x i8*]*, i8* }
%std.utf.UTFException = type <{ [11 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable*, i32, [4 x i8], i64, [4 x i32], i64 }>
%object.Throwable.TraceInfo = type { [4 x i8*]* }
%object.Throwable = type <{ [10 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable*, i32 }>
%std.exception.ErrnoException = type <{ [10 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable*, i32, i32 }>
%core.stdc.stdio._IO_FILE = type { i32, [4 x i8], i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %core.stdc.stdio._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], [4 x i8], i8*, i64, i8*, i8*, %core.stdc.stdio._IO_FILE*, i8*, i64, i32, [20 x i8] }
%object.ModuleInfo = type { i32, i32 }
%std.stdio.File = type { %std.stdio.File.Impl*, { i64, i8* } }
%std.stdio.File.Impl = type { %core.stdc.stdio._IO_FILE*, i32, i8, [3 x i8], i32, [4 x i8] }
%std.stdio.File.LockingTextWriter = type { %std.stdio.File, i32, i16, [4 x i8], [6 x i8], i64 }
%nest.decodeImpl = type { i8*, i64 }

@_D6source1aG300002l = thread_local local_unnamed_addr global [300002 x i64] zeroinitializer, align 8 ; [#uses = 4]
@_D6source1cG300002l = thread_local local_unnamed_addr global [300002 x i64] zeroinitializer, align 8 ; [#uses = 3]
@_D12TypeInfo_AAi6__initZ = linkonce_odr global %object.TypeInfo_Array { [19 x i8*]* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D11TypeInfo_Ai6__initZ to %object.TypeInfo*) } ; [#uses = 1]
@_D14TypeInfo_Array6__vtblZ = external constant [19 x i8*] ; [#uses = 1]
@_D11TypeInfo_Ai6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@.dimsarray = internal constant [2 x i64] [i64 300002, i64 20] ; [#uses = 1]
@.str = private unnamed_addr constant [61 x i8] c"/data/TheStack_IR/OJ_Samples/Collated/D/Source_2198/source.d\00" ; [#uses = 1]
@.str.1 = private unnamed_addr constant [2 x i8] c" \00" ; [#uses = 1]
@_D6source8currChari = thread_local local_unnamed_addr global i32 0, align 4 ; [#uses = 20]
@.str.2 = private unnamed_addr constant [1 x i8] zeroinitializer ; [#uses = 1]
@_D12TypeInfo_Aya6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@_D3std3utf12UTFException7__ClassZ = external global %object.TypeInfo_Class ; [#uses = 11]
@.str.3 = private unnamed_addr constant [52 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/stdio.d\00" ; [#uses = 1]
@.str.4 = private unnamed_addr constant [50 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/utf.d\00" ; [#uses = 1]
@.str.5 = private unnamed_addr constant [23 x i8] c"Invalid UTF-8 sequence\00" ; [#uses = 1]
@.str.6 = private unnamed_addr constant [45 x i8] c"Attempted to decode past the end of a string\00" ; [#uses = 1]
@_D3std3utf12UTFException6__vtblZ = external constant [11 x i8*] ; [#uses = 5]
@_D3std3utf12UTFException6__initZ = external local_unnamed_addr constant %std.utf.UTFException, align 8 ; [#uses = 1]
@.str.7 = private unnamed_addr constant [41 x i8] c"Encoding an invalid code point in UTF-32\00" ; [#uses = 1]
@.str.8 = private unnamed_addr constant [63 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/core/internal/string.d\00" ; [#uses = 1]
@_D3std9exception14ErrnoException7__ClassZ = external global %object.TypeInfo_Class ; [#uses = 1]
@_D3std9exception14ErrnoException6__vtblZ = external constant [10 x i8*] ; [#uses = 1]
@_D3std9exception14ErrnoException6__initZ = external local_unnamed_addr constant %std.exception.ErrnoException, align 8 ; [#uses = 1]
@.str.9 = private unnamed_addr constant [19 x i8] c"Enforcement failed\00" ; [#uses = 1]
@_D12TypeInfo_Axa6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@stdin = external local_unnamed_addr global %core.stdc.stdio._IO_FILE*, align 8 ; [#uses = 11]
@_D6source12__ModuleInfoZ = global %0 { i32 -2147483640, i32 0, void ()* @_D6source18_staticCtor_L86_C1FZv, [7 x i8] c"source\00" } ; [#uses = 1]
@_D6source11__moduleRefZ = linkonce_odr hidden global %object.ModuleInfo* bitcast (%0* @_D6source12__ModuleInfoZ to %object.ModuleInfo*), section "__minfo" ; [#uses = 1]
@__start___minfo = external hidden global %object.ModuleInfo* ; [#uses = 1]
@__stop___minfo = external hidden global %object.ModuleInfo* ; [#uses = 1]
@ldc.dso_slot = linkonce_odr hidden global i8* null ; [#uses = 1]
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ldc.register_dso, i8* bitcast (void ()* @ldc.register_dso to i8*) }] ; [#uses = 0]
@llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @ldc.register_dso, i8* bitcast (void ()* @ldc.register_dso to i8*) }] ; [#uses = 0]
@llvm.used = appending global [1 x i8*] [i8* bitcast (%object.ModuleInfo** @_D6source11__moduleRefZ to i8*)], section "llvm.metadata" ; [#uses = 0]

; [#uses = 1]
; Function Attrs: uwtable
define i32 @_Dmain({ i64, { i64, i8* }* } %unnamed) #0 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
  %__tmpfordtor143.i = alloca %std.stdio.File, align 8 ; [#uses = 5, size/byte = 24]
  %.gc_mem = tail call { i64, i8* } @_d_newarraymTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAi6__initZ to %object.TypeInfo*), { i64, i64* } { i64 2, i64* getelementptr inbounds ([2 x i64], [2 x i64]* @.dimsarray, i32 0, i32 0) }) #1 ; [#uses = 2]
  %.len1 = extractvalue { i64, i8* } %.gc_mem, 0  ; [#uses = 9]
  %.ptr2 = extractvalue { i64, i8* } %.gc_mem, 1  ; [#uses = 3]
  %1 = bitcast i8* %.ptr2 to { i64, i32* }*       ; [#uses = 8]
  %2 = tail call i32 @_D6source__T7readIntTiZQlFZi() #4 ; [#uses = 1]
  %3 = tail call i64 @_D6source__T7readIntTlZQlFZl() #4 ; [#uses = 1]
  store i64 %3, i64* getelementptr inbounds ([300002 x i64], [300002 x i64]* @_D6source1aG300002l, i64 0, i64 0), align 8
  %4 = tail call i64 @_D6source__T7readIntTlZQlFZl() #4 ; [#uses = 1]
  store i64 %4, i64* getelementptr inbounds ([300002 x i64], [300002 x i64]* @_D6source1cG300002l, i64 0, i64 0), align 8
  %bounds.cmp.not = icmp eq i64 %.len1, 0         ; [#uses = 1]
  br i1 %bounds.cmp.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %0
  %5 = bitcast i8* %.ptr2 to i64*                 ; [#uses = 1]
  %.len6 = load i64, i64* %5, align 8             ; [#uses = 2]
  %arrayinit.condition.not220 = icmp eq i64 %.len6, 0 ; [#uses = 1]
  br i1 %arrayinit.condition.not220, label %arrayinit.end, label %arrayinit.body.preheader

arrayinit.body.preheader:                         ; preds = %bounds.ok
  %6 = getelementptr inbounds i8, i8* %.ptr2, i64 8 ; [#uses = 1, type = i8*]
  %7 = bitcast i8* %6 to i8**                     ; [#uses = 1]
  %.ptr5275 = load i8*, i8** %7, align 8          ; [#uses = 1]
  %8 = shl nuw i64 %.len6, 2                      ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* align 4 %.ptr5275, i8 -1, i64 %8, i1 false)
  br label %arrayinit.end

arrayinit.end:                                    ; preds = %arrayinit.body.preheader, %bounds.ok
  %9 = add i32 %2, 1                              ; [#uses = 2]
  %10 = icmp sgt i32 %9, 1                        ; [#uses = 1]
  br i1 %10, label %forbody.lr.ph, label %endfor

forbody.lr.ph:                                    ; preds = %arrayinit.end
  %11 = bitcast %std.stdio.File* %__tmpfordtor143.i to i8* ; [#uses = 2]
  %wide.trip.count = zext i32 %9 to i64           ; [#uses = 1]
  br label %forbody

forbody:                                          ; preds = %forinc, %forbody.lr.ph
  %indvars.iv271 = phi i64 [ 1, %forbody.lr.ph ], [ %indvars.iv.next272, %forinc ] ; [#uses = 9, type = i64]
  %12 = call i32 @_D6source__T7readIntTiZQlFZi() #4 ; [#uses = 1]
  %13 = icmp eq i32 %12, 1                        ; [#uses = 1]
  %14 = call i32 @_D6source__T7readIntTiZQlFZi() #4 ; [#uses = 4]
  %15 = call i64 @_D6source__T7readIntTlZQlFZl() #4 ; [#uses = 3]
  br i1 %13, label %if, label %forbody81

if:                                               ; preds = %forbody
  %16 = call i64 @_D6source__T7readIntTlZQlFZl() #4 ; [#uses = 1]
  %bounds.cmp8 = icmp ugt i64 %.len1, %indvars.iv271 ; [#uses = 1]
  br i1 %bounds.cmp8, label %bounds.ok9, label %bounds.fail10

bounds.ok9:                                       ; preds = %if
  %17 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %indvars.iv271, i32 0 ; [#uses = 2, type = i64*]
  %.len12 = load i64, i64* %17, align 8           ; [#uses = 1]
  %bounds.cmp13.not = icmp eq i64 %.len12, 0      ; [#uses = 1]
  br i1 %bounds.cmp13.not, label %bounds.fail15, label %bounds.ok14

bounds.ok14:                                      ; preds = %bounds.ok9
  %18 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %indvars.iv271, i32 1 ; [#uses = 2, type = i32**]
  %.ptr16 = load i32*, i32** %18, align 8         ; [#uses = 1]
  store i32 %14, i32* %.ptr16, align 4
  br label %bounds.ok23

bounds.ok23:                                      ; preds = %forinc19, %bounds.ok14
  %indvars.iv = phi i64 [ 1, %bounds.ok14 ], [ %indvars.iv.next, %forinc19 ] ; [#uses = 7, type = i64]
  %19 = add nsw i64 %indvars.iv, -1               ; [#uses = 6]
  %.len26 = load i64, i64* %17, align 8           ; [#uses = 5]
  %bounds.cmp27 = icmp ugt i64 %.len26, %19       ; [#uses = 1]
  br i1 %bounds.cmp27, label %bounds.ok28, label %bounds.fail29

bounds.ok28:                                      ; preds = %bounds.ok23
  %.ptr30 = load i32*, i32** %18, align 8         ; [#uses = 3]
  %20 = getelementptr inbounds i32, i32* %.ptr30, i64 %19 ; [#uses = 1, type = i32*]
  %21 = load i32, i32* %20, align 4               ; [#uses = 3]
  %22 = icmp sgt i32 %21, 0                       ; [#uses = 1]
  %bounds.cmp40 = icmp ugt i64 %.len26, %indvars.iv ; [#uses = 2]
  br i1 %22, label %bounds.ok36, label %bounds.ok66

bounds.ok36:                                      ; preds = %bounds.ok28
  br i1 %bounds.cmp40, label %bounds.ok41, label %bounds.fail42

bounds.ok41:                                      ; preds = %bounds.ok36
  %23 = getelementptr inbounds i32, i32* %.ptr30, i64 %indvars.iv ; [#uses = 1, type = i32*]
  %24 = zext i32 %21 to i64                       ; [#uses = 3]
  %bounds.cmp55 = icmp ugt i64 %.len1, %24        ; [#uses = 1]
  br i1 %bounds.cmp55, label %bounds.ok56, label %bounds.fail57

bounds.ok56:                                      ; preds = %bounds.ok41
  %25 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %24, i32 0 ; [#uses = 1, type = i64*]
  %.len59 = load i64, i64* %25, align 8           ; [#uses = 2]
  %bounds.cmp60 = icmp ugt i64 %.len59, %19       ; [#uses = 1]
  br i1 %bounds.cmp60, label %bounds.ok61, label %bounds.fail62

bounds.ok61:                                      ; preds = %bounds.ok56
  %26 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %24, i32 1 ; [#uses = 1, type = i32**]
  %.ptr63 = load i32*, i32** %26, align 8         ; [#uses = 1]
  %27 = getelementptr inbounds i32, i32* %.ptr63, i64 %19 ; [#uses = 1, type = i32*]
  %28 = load i32, i32* %27, align 4               ; [#uses = 1]
  store i32 %28, i32* %23, align 4
  br label %forinc19

bounds.fail62:                                    ; preds = %bounds.ok56
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 40, i64 %19, i64 %.len59) #3
  unreachable

bounds.fail57:                                    ; preds = %bounds.ok41
  %29 = zext i32 %21 to i64                       ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 40, i64 %29, i64 %.len1) #3
  unreachable

bounds.fail42:                                    ; preds = %bounds.ok36
  %30 = and i64 %indvars.iv, 4294967295           ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 40, i64 %30, i64 %.len26) #3
  unreachable

bounds.ok66:                                      ; preds = %bounds.ok28
  br i1 %bounds.cmp40, label %bounds.ok71, label %bounds.fail72

bounds.ok71:                                      ; preds = %bounds.ok66
  %31 = getelementptr inbounds i32, i32* %.ptr30, i64 %indvars.iv ; [#uses = 1, type = i32*]
  store i32 -1, i32* %31, align 4
  br label %forinc19

bounds.fail72:                                    ; preds = %bounds.ok66
  %32 = and i64 %indvars.iv, 4294967295           ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 41, i64 %32, i64 %.len26) #3
  unreachable

bounds.fail29:                                    ; preds = %bounds.ok23
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 39, i64 %19, i64 %.len26) #3
  unreachable

forinc19:                                         ; preds = %bounds.ok61, %bounds.ok71
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 ; [#uses = 2]
  %exitcond.not = icmp eq i64 %indvars.iv.next, 20 ; [#uses = 1]
  br i1 %exitcond.not, label %endfor20, label %bounds.ok23

endfor20:                                         ; preds = %forinc19
  %bounds.cmp74 = icmp ult i64 %indvars.iv271, 300002 ; [#uses = 1]
  br i1 %bounds.cmp74, label %bounds.ok75, label %bounds.fail76

bounds.ok75:                                      ; preds = %endfor20
  %33 = getelementptr inbounds [300002 x i64], [300002 x i64]* @_D6source1aG300002l, i64 0, i64 %indvars.iv271 ; [#uses = 1, type = i64*]
  store i64 %15, i64* %33, align 8
  %34 = getelementptr inbounds [300002 x i64], [300002 x i64]* @_D6source1cG300002l, i64 0, i64 %indvars.iv271 ; [#uses = 1, type = i64*]
  store i64 %16, i64* %34, align 8
  br label %forinc

bounds.fail76:                                    ; preds = %endfor20
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 43, i64 %indvars.iv271, i64 300002) #3
  unreachable

bounds.fail15:                                    ; preds = %bounds.ok9
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 36, i64 0, i64 0) #3
  unreachable

bounds.fail10:                                    ; preds = %if
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 36, i64 %indvars.iv271, i64 %.len1) #3
  unreachable

forcond102.preheader:                             ; preds = %forinc82
  %35 = icmp sgt i64 %15, 0                       ; [#uses = 1]
  %36 = icmp sgt i32 %no.1, -1                    ; [#uses = 1]
  %andandval210 = and i1 %36, %35                 ; [#uses = 1]
  br i1 %andandval210, label %forbody103, label %endfor105

forbody81:                                        ; preds = %forbody, %forinc82
  %37 = phi i32 [ %53, %forinc82 ], [ 19, %forbody ] ; [#uses = 3, type = i32]
  %root.0209 = phi i32 [ %root.1, %forinc82 ], [ %14, %forbody ] ; [#uses = 3, type = i32]
  %no.0208 = phi i32 [ %no.1, %forinc82 ], [ 0, %forbody ] ; [#uses = 3, type = i32]
  %38 = sext i32 %root.0209 to i64                ; [#uses = 4]
  %bounds.cmp86 = icmp ugt i64 %.len1, %38        ; [#uses = 1]
  br i1 %bounds.cmp86, label %bounds.ok87, label %bounds.fail88

bounds.ok87:                                      ; preds = %forbody81
  %39 = sext i32 %37 to i64                       ; [#uses = 4]
  %40 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %38, i32 0 ; [#uses = 1, type = i64*]
  %.len90 = load i64, i64* %40, align 8           ; [#uses = 2]
  %bounds.cmp91 = icmp ugt i64 %.len90, %39       ; [#uses = 1]
  br i1 %bounds.cmp91, label %bounds.ok92, label %bounds.fail93

bounds.ok92:                                      ; preds = %bounds.ok87
  %41 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %38, i32 1 ; [#uses = 1, type = i32**]
  %.ptr94 = load i32*, i32** %41, align 8         ; [#uses = 1]
  %42 = getelementptr inbounds i32, i32* %.ptr94, i64 %39 ; [#uses = 1, type = i32*]
  %43 = load i32, i32* %42, align 4               ; [#uses = 5]
  %44 = icmp slt i32 %43, 0                       ; [#uses = 1]
  br i1 %44, label %forinc82, label %endif96

endif96:                                          ; preds = %bounds.ok92
  %bounds.cmp97 = icmp ult i32 %43, 300002        ; [#uses = 1]
  %45 = zext i32 %43 to i64                       ; [#uses = 1]
  br i1 %bounds.cmp97, label %bounds.ok98, label %bounds.fail99

bounds.ok98:                                      ; preds = %endif96
  %46 = getelementptr inbounds [300002 x i64], [300002 x i64]* @_D6source1aG300002l, i64 0, i64 %45 ; [#uses = 1, type = i64*]
  %47 = load i64, i64* %46, align 8               ; [#uses = 1]
  %48 = icmp sgt i64 %47, 0                       ; [#uses = 1]
  br i1 %48, label %if100, label %forinc82

if100:                                            ; preds = %bounds.ok98
  %49 = shl nuw i64 1, %39                        ; [#uses = 1]
  %50 = trunc i64 %49 to i32                      ; [#uses = 1]
  %51 = add i32 %no.0208, %50                     ; [#uses = 1]
  br label %forinc82

bounds.fail99:                                    ; preds = %endif96
  %52 = zext i32 %43 to i64                       ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 58, i64 %52, i64 300002) #3
  unreachable

bounds.fail93:                                    ; preds = %bounds.ok87
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 56, i64 %39, i64 %.len90) #3
  unreachable

bounds.fail88:                                    ; preds = %forbody81
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 56, i64 %38, i64 %.len1) #3
  unreachable

forinc82:                                         ; preds = %bounds.ok98, %if100, %bounds.ok92
  %no.1 = phi i32 [ %no.0208, %bounds.ok92 ], [ %51, %if100 ], [ %no.0208, %bounds.ok98 ] ; [#uses = 3, type = i32]
  %root.1 = phi i32 [ %root.0209, %bounds.ok92 ], [ %43, %if100 ], [ %root.0209, %bounds.ok98 ] ; [#uses = 1, type = i32]
  %53 = add i32 %37, -1                           ; [#uses = 1]
  %.not = icmp eq i32 %37, 0                      ; [#uses = 1]
  br i1 %.not, label %forcond102.preheader, label %forbody81

forbody103:                                       ; preds = %forcond102.preheader, %bounds.ok107
  %wi.0215 = phi i64 [ %67, %bounds.ok107 ], [ %15, %forcond102.preheader ] ; [#uses = 3, type = i64]
  %bought.0214 = phi i64 [ %68, %bounds.ok107 ], [ 0, %forcond102.preheader ] ; [#uses = 1, type = i64]
  %spent.0213 = phi i64 [ %72, %bounds.ok107 ], [ 0, %forcond102.preheader ] ; [#uses = 1, type = i64]
  %no.2211 = phi i32 [ %74, %bounds.ok107 ], [ %no.1, %forcond102.preheader ] ; [#uses = 4, type = i32]
  %.not19.i = icmp eq i32 %no.2211, 0             ; [#uses = 1]
  br i1 %.not19.i, label %_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi.exit, label %forbody.i

forbody.i:                                        ; preds = %forbody103, %endif.i
  %i.022.i = phi i32 [ %62, %endif.i ], [ 0, %forbody103 ] ; [#uses = 2, type = i32]
  %n.021.i = phi i32 [ %61, %endif.i ], [ %no.2211, %forbody103 ] ; [#uses = 2, type = i32]
  %v.020.i = phi i32 [ %v.1.i, %endif.i ], [ %14, %forbody103 ] ; [#uses = 2, type = i32]
  %54 = and i32 %n.021.i, 1                       ; [#uses = 1]
  %.not13.i = icmp eq i32 %54, 0                  ; [#uses = 1]
  br i1 %.not13.i, label %endif.i, label %if.i

if.i:                                             ; preds = %forbody.i
  %55 = sext i32 %v.020.i to i64                  ; [#uses = 4]
  %bounds.cmp.i = icmp ugt i64 %.len1, %55        ; [#uses = 1]
  br i1 %bounds.cmp.i, label %bounds.ok.i, label %bounds.fail.i

bounds.ok.i:                                      ; preds = %if.i
  %56 = sext i32 %i.022.i to i64                  ; [#uses = 3]
  %57 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %55, i32 0 ; [#uses = 1, type = i64*]
  %.len1.i = load i64, i64* %57, align 8          ; [#uses = 2]
  %bounds.cmp2.i = icmp ugt i64 %.len1.i, %56     ; [#uses = 1]
  br i1 %bounds.cmp2.i, label %bounds.ok3.i, label %bounds.fail4.i

bounds.ok3.i:                                     ; preds = %bounds.ok.i
  %58 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i64 %55, i32 1 ; [#uses = 1, type = i32**]
  %.ptr5.i = load i32*, i32** %58, align 8        ; [#uses = 1]
  %59 = getelementptr inbounds i32, i32* %.ptr5.i, i64 %56 ; [#uses = 1, type = i32*]
  %60 = load i32, i32* %59, align 4               ; [#uses = 1]
  br label %endif.i

bounds.fail4.i:                                   ; preds = %bounds.ok.i
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 22, i64 %56, i64 %.len1.i) #3
  unreachable

bounds.fail.i:                                    ; preds = %if.i
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 22, i64 %55, i64 %.len1) #3
  unreachable

endif.i:                                          ; preds = %bounds.ok3.i, %forbody.i
  %v.1.i = phi i32 [ %60, %bounds.ok3.i ], [ %v.020.i, %forbody.i ] ; [#uses = 2, type = i32]
  %61 = ashr i32 %n.021.i, 1                      ; [#uses = 2]
  %62 = add i32 %i.022.i, 1                       ; [#uses = 1]
  %.not.i = icmp eq i32 %61, 0                    ; [#uses = 1]
  br i1 %.not.i, label %_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi.exit, label %forbody.i

_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi.exit: ; preds = %endif.i, %forbody103
  %v.0.lcssa.i = phi i32 [ %14, %forbody103 ], [ %v.1.i, %endif.i ] ; [#uses = 2, type = i32]
  %63 = sext i32 %v.0.lcssa.i to i64              ; [#uses = 3]
  %bounds.cmp106 = icmp ult i32 %v.0.lcssa.i, 300002 ; [#uses = 1]
  br i1 %bounds.cmp106, label %bounds.ok107, label %bounds.fail108

bounds.ok107:                                     ; preds = %_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi.exit
  %64 = getelementptr inbounds [300002 x i64], [300002 x i64]* @_D6source1aG300002l, i64 0, i64 %63 ; [#uses = 2, type = i64*]
  %65 = load i64, i64* %64, align 8               ; [#uses = 3]
  %66 = icmp slt i64 %65, %wi.0215                ; [#uses = 1]
  %b_arg.a_arg.i = select i1 %66, i64 %65, i64 %wi.0215 ; [#uses = 4]
  %67 = sub i64 %wi.0215, %b_arg.a_arg.i          ; [#uses = 2]
  %68 = add i64 %b_arg.a_arg.i, %bought.0214      ; [#uses = 2]
  %69 = getelementptr inbounds [300002 x i64], [300002 x i64]* @_D6source1cG300002l, i64 0, i64 %63 ; [#uses = 1, type = i64*]
  %70 = load i64, i64* %69, align 8               ; [#uses = 1]
  %71 = mul i64 %b_arg.a_arg.i, %70               ; [#uses = 1]
  %72 = add i64 %71, %spent.0213                  ; [#uses = 2]
  %73 = sub i64 %65, %b_arg.a_arg.i               ; [#uses = 1]
  store i64 %73, i64* %64, align 8
  %74 = add nsw i32 %no.2211, -1                  ; [#uses = 1]
  %75 = icmp sgt i64 %67, 0                       ; [#uses = 1]
  %76 = icmp sgt i32 %no.2211, 0                  ; [#uses = 1]
  %andandval = and i1 %76, %75                    ; [#uses = 1]
  br i1 %andandval, label %forbody103, label %endfor105

bounds.fail108:                                   ; preds = %_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi.exit
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 69, i64 %63, i64 300002) #3
  unreachable

endfor105:                                        ; preds = %bounds.ok107, %forcond102.preheader
  %spent.0.lcssa = phi i64 [ 0, %forcond102.preheader ], [ %72, %bounds.ok107 ] ; [#uses = 1, type = i64]
  %bought.0.lcssa = phi i64 [ 0, %forcond102.preheader ], [ %68, %bounds.ok107 ] ; [#uses = 1, type = i64]
  call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %11)
  call void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias nonnull sret align 8 %__tmpfordtor143.i) #4
  invoke void @_D3std5stdio4File__T5writeTlTAyaTlTaZQrMFNflQplaZv(%std.stdio.File* nonnull %__tmpfordtor143.i, i8 zeroext 10, i64 %spent.0.lcssa, { i64, i8* } { i64 1, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i32 0, i32 0) }, i64 %bought.0.lcssa) #4
          to label %_D3std5stdio__T7writelnTlTAyaTlZQrFNflQmlZv.exit unwind label %eh.resume.i

eh.resume.i:                                      ; preds = %endfor105
  %77 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  %78 = extractvalue { i8*, i32 } %77, 0          ; [#uses = 1]
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor143.i) #4
  call void @_Unwind_Resume(i8* %78)
  unreachable

_D3std5stdio__T7writelnTlTAyaTlZQrFNflQmlZv.exit: ; preds = %endfor105
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor143.i) #4
  call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %11)
  %79 = call %std.stdio.File* @_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea22_636f72652e737464632e737464696f2e7374646f7574ZQDgFNbNcNdNiZSQEhQEg4File() #4 ; [#uses = 1]
  call void @_D3std5stdio4File5flushMFNeZv(%std.stdio.File* nonnull %79) #4
  br label %forinc

forinc:                                           ; preds = %bounds.ok75, %_D3std5stdio__T7writelnTlTAyaTlZQrFNflQmlZv.exit
  %indvars.iv.next272 = add nuw nsw i64 %indvars.iv271, 1 ; [#uses = 2]
  %exitcond273.not = icmp eq i64 %indvars.iv.next272, %wide.trip.count ; [#uses = 1]
  br i1 %exitcond273.not, label %endfor, label %forbody

endfor:                                           ; preds = %forinc, %arrayinit.end
  ret i32 0

bounds.fail:                                      ; preds = %0
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 15, i64 0, i64 0) #3
  unreachable
}

; [#uses = 1]
; Function Attrs: uwtable
declare { i64, i8* } @_d_newarraymTX(%object.TypeInfo*, { i64, i64* }) local_unnamed_addr #1

; [#uses = 3]
; Function Attrs: uwtable
define weak_odr i32 @_D6source__T7readIntTiZQlFZi() local_unnamed_addr #2 {
  %1 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %2 = and i32 %1, 255                            ; [#uses = 1]
  %3 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %2) #4 ; [#uses = 1]
  br i1 %3, label %forbody, label %forcond1.preheader

forcond1.preheader:                               ; preds = %forbody, %0
  %.pre = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  br label %forcond1

forbody:                                          ; preds = %0, %forbody
  %4 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %5 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %4) #13 ; [#uses = 2]
  store i32 %5, i32* @_D6source8currChari, align 4
  %6 = and i32 %5, 255                            ; [#uses = 1]
  %7 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %6) #4 ; [#uses = 1]
  br i1 %7, label %forbody, label %forcond1.preheader

forcond1:                                         ; preds = %forcond1.preheader, %forbody2
  %8 = phi i32 [ %16, %forbody2 ], [ %.pre, %forcond1.preheader ] ; [#uses = 2, type = i32]
  %sgn.0 = phi i32 [ %14, %forbody2 ], [ 0, %forcond1.preheader ] ; [#uses = 2, type = i32]
  %9 = trunc i32 %8 to i8                         ; [#uses = 2]
  switch i8 %9, label %forcond5.preheader [
    i8 45, label %forbody2
    i8 43, label %forbody2
  ]

forcond5.preheader:                               ; preds = %forcond1
  %10 = and i32 %8, 255                           ; [#uses = 1]
  %11 = tail call zeroext i1 @_D3std5ascii7isDigitFNaNbNiNfwZb(i32 %10) #4 ; [#uses = 1]
  br i1 %11, label %forbody6, label %endfor8

forbody2:                                         ; preds = %forcond1, %forcond1
  %12 = icmp eq i8 %9, 45                         ; [#uses = 1]
  %13 = zext i1 %12 to i32                        ; [#uses = 1]
  %14 = xor i32 %sgn.0, %13                       ; [#uses = 1]
  %15 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %16 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %15) #13 ; [#uses = 2]
  store i32 %16, i32* @_D6source8currChari, align 4
  br label %forcond1

forbody6:                                         ; preds = %forcond5.preheader, %forbody6
  %num.015 = phi i32 [ %21, %forbody6 ], [ 0, %forcond5.preheader ] ; [#uses = 1, type = i32]
  %17 = mul i32 %num.015, 10                      ; [#uses = 1]
  %18 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %19 = and i32 %18, 255                          ; [#uses = 1]
  %20 = add i32 %17, -48                          ; [#uses = 1]
  %21 = add i32 %20, %19                          ; [#uses = 2]
  %22 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %23 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %22) #13 ; [#uses = 2]
  store i32 %23, i32* @_D6source8currChari, align 4
  %24 = and i32 %23, 255                          ; [#uses = 1]
  %25 = tail call zeroext i1 @_D3std5ascii7isDigitFNaNbNiNfwZb(i32 %24) #4 ; [#uses = 1]
  br i1 %25, label %forbody6, label %endfor8

endfor8:                                          ; preds = %forbody6, %forcond5.preheader
  %num.0.lcssa = phi i32 [ 0, %forcond5.preheader ], [ %21, %forbody6 ] ; [#uses = 2, type = i32]
  %.not = icmp eq i32 %sgn.0, 0                   ; [#uses = 1]
  br i1 %.not, label %endif, label %if

if:                                               ; preds = %endfor8
  %negval = sub i32 0, %num.0.lcssa               ; [#uses = 1]
  ret i32 %negval

endif:                                            ; preds = %endfor8
  ret i32 %num.0.lcssa
}

; [#uses = 4]
; Function Attrs: uwtable
define weak_odr i64 @_D6source__T7readIntTlZQlFZl() local_unnamed_addr #2 {
  %1 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %2 = and i32 %1, 255                            ; [#uses = 1]
  %3 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %2) #4 ; [#uses = 1]
  br i1 %3, label %forbody, label %forcond1.preheader

forcond1.preheader:                               ; preds = %forbody, %0
  %.pre = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  br label %forcond1

forbody:                                          ; preds = %0, %forbody
  %4 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %5 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %4) #13 ; [#uses = 2]
  store i32 %5, i32* @_D6source8currChari, align 4
  %6 = and i32 %5, 255                            ; [#uses = 1]
  %7 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %6) #4 ; [#uses = 1]
  br i1 %7, label %forbody, label %forcond1.preheader

forcond1:                                         ; preds = %forcond1.preheader, %forbody2
  %8 = phi i32 [ %16, %forbody2 ], [ %.pre, %forcond1.preheader ] ; [#uses = 2, type = i32]
  %sgn.0 = phi i32 [ %14, %forbody2 ], [ 0, %forcond1.preheader ] ; [#uses = 2, type = i32]
  %9 = trunc i32 %8 to i8                         ; [#uses = 2]
  switch i8 %9, label %forcond5.preheader [
    i8 45, label %forbody2
    i8 43, label %forbody2
  ]

forcond5.preheader:                               ; preds = %forcond1
  %10 = and i32 %8, 255                           ; [#uses = 1]
  %11 = tail call zeroext i1 @_D3std5ascii7isDigitFNaNbNiNfwZb(i32 %10) #4 ; [#uses = 1]
  br i1 %11, label %forbody6, label %endfor8

forbody2:                                         ; preds = %forcond1, %forcond1
  %12 = icmp eq i8 %9, 45                         ; [#uses = 1]
  %13 = zext i1 %12 to i32                        ; [#uses = 1]
  %14 = xor i32 %sgn.0, %13                       ; [#uses = 1]
  %15 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %16 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %15) #13 ; [#uses = 2]
  store i32 %16, i32* @_D6source8currChari, align 4
  br label %forcond1

forbody6:                                         ; preds = %forcond5.preheader, %forbody6
  %num.015 = phi i64 [ %22, %forbody6 ], [ 0, %forcond5.preheader ] ; [#uses = 1, type = i64]
  %17 = mul i64 %num.015, 10                      ; [#uses = 1]
  %18 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %19 = and i32 %18, 255                          ; [#uses = 1]
  %20 = zext i32 %19 to i64                       ; [#uses = 1]
  %21 = add i64 %17, -48                          ; [#uses = 1]
  %22 = add i64 %21, %20                          ; [#uses = 2]
  %23 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %24 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %23) #13 ; [#uses = 2]
  store i32 %24, i32* @_D6source8currChari, align 4
  %25 = and i32 %24, 255                          ; [#uses = 1]
  %26 = tail call zeroext i1 @_D3std5ascii7isDigitFNaNbNiNfwZb(i32 %25) #4 ; [#uses = 1]
  br i1 %26, label %forbody6, label %endfor8

endfor8:                                          ; preds = %forbody6, %forcond5.preheader
  %num.0.lcssa = phi i64 [ 0, %forcond5.preheader ], [ %22, %forbody6 ] ; [#uses = 2, type = i64]
  %.not = icmp eq i32 %sgn.0, 0                   ; [#uses = 1]
  br i1 %.not, label %endif, label %if

if:                                               ; preds = %endfor8
  %negval = sub i64 0, %num.0.lcssa               ; [#uses = 1]
  ret i64 %negval

endif:                                            ; preds = %endfor8
  ret i64 %num.0.lcssa
}

; [#uses = 32]
; Function Attrs: cold noreturn uwtable
declare void @_d_arraybounds_index({ i64, i8* }, i32, i64, i64) local_unnamed_addr #3

; [#uses = 0]
; Function Attrs: uwtable
define i32 @_D6source4mainFZ12getNthParentMFNaNbNiNfiiZi(i8* nocapture nonnull readonly %.nest_arg, i32 %n_arg, i32 %v_arg) local_unnamed_addr #2 {
  %.not19 = icmp eq i32 %n_arg, 0                 ; [#uses = 1]
  br i1 %.not19, label %endfor, label %forbody.lr.ph

forbody.lr.ph:                                    ; preds = %0
  %1 = bitcast i8* %.nest_arg to i64*             ; [#uses = 1]
  %2 = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %3 = bitcast i8* %2 to { i64, i32* }**          ; [#uses = 1]
  br label %forbody

forbody:                                          ; preds = %forbody.lr.ph, %endif
  %i.022 = phi i32 [ 0, %forbody.lr.ph ], [ %12, %endif ] ; [#uses = 2, type = i32]
  %n.021 = phi i32 [ %n_arg, %forbody.lr.ph ], [ %11, %endif ] ; [#uses = 2, type = i32]
  %v.020 = phi i32 [ %v_arg, %forbody.lr.ph ], [ %v.1, %endif ] ; [#uses = 2, type = i32]
  %4 = and i32 %n.021, 1                          ; [#uses = 1]
  %.not13 = icmp eq i32 %4, 0                     ; [#uses = 1]
  br i1 %.not13, label %endif, label %if

if:                                               ; preds = %forbody
  %5 = sext i32 %v.020 to i64                     ; [#uses = 4]
  %.len = load i64, i64* %1, align 8              ; [#uses = 2]
  %bounds.cmp = icmp ugt i64 %.len, %5            ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %if
  %.ptr = load { i64, i32* }*, { i64, i32* }** %3, align 8 ; [#uses = 2]
  %6 = sext i32 %i.022 to i64                     ; [#uses = 3]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.ptr, i64 %5, i32 0 ; [#uses = 1, type = i64*]
  %.len1 = load i64, i64* %7, align 8             ; [#uses = 2]
  %bounds.cmp2 = icmp ugt i64 %.len1, %6          ; [#uses = 1]
  br i1 %bounds.cmp2, label %bounds.ok3, label %bounds.fail4

bounds.ok3:                                       ; preds = %bounds.ok
  %8 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.ptr, i64 %5, i32 1 ; [#uses = 1, type = i32**]
  %.ptr5 = load i32*, i32** %8, align 8           ; [#uses = 1]
  %9 = getelementptr inbounds i32, i32* %.ptr5, i64 %6 ; [#uses = 1, type = i32*]
  %10 = load i32, i32* %9, align 4                ; [#uses = 1]
  br label %endif

bounds.fail4:                                     ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 22, i64 %6, i64 %.len1) #3
  unreachable

bounds.fail:                                      ; preds = %if
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 22, i64 %5, i64 %.len) #3
  unreachable

endif:                                            ; preds = %forbody, %bounds.ok3
  %v.1 = phi i32 [ %10, %bounds.ok3 ], [ %v.020, %forbody ] ; [#uses = 2, type = i32]
  %11 = ashr i32 %n.021, 1                        ; [#uses = 2]
  %12 = add i32 %i.022, 1                         ; [#uses = 1]
  %.not = icmp eq i32 %11, 0                      ; [#uses = 1]
  br i1 %.not, label %endfor, label %forbody

endfor:                                           ; preds = %endif, %0
  %v.0.lcssa = phi i32 [ %v_arg, %0 ], [ %v.1, %endif ] ; [#uses = 1, type = i32]
  ret i32 %v.0.lcssa
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std9algorithm10comparison__T3minTlTlZQjFNaNbNiNfllZl(i64 %b_arg, i64 %a_arg) local_unnamed_addr #2 {
condend:
  %0 = icmp slt i64 %b_arg, %a_arg                ; [#uses = 1]
  %b_arg.a_arg = select i1 %0, i64 %b_arg, i64 %a_arg ; [#uses = 1]
  ret i64 %b_arg.a_arg
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio__T7writelnTlTAyaTlZQrFNflQmlZv(i64 %_param_2_arg, { i64, i8* } %_param_1_arg, i64 %_param_0_arg) local_unnamed_addr #2 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
  %__tmpfordtor143 = alloca %std.stdio.File, align 8 ; [#uses = 4, size/byte = 24]
  call void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias nonnull sret align 8 %__tmpfordtor143) #4
  invoke void @_D3std5stdio4File__T5writeTlTAyaTlTaZQrMFNflQplaZv(%std.stdio.File* nonnull %__tmpfordtor143, i8 zeroext 10, i64 %_param_2_arg, { i64, i8* } %_param_1_arg, i64 %_param_0_arg) #4
          to label %toElem.success unwind label %eh.resume

toElem.success:                                   ; preds = %0
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor143) #4
  ret void

eh.resume:                                        ; preds = %0
  %1 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  %2 = extractvalue { i8*, i32 } %1, 0            ; [#uses = 1]
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor143) #4
  call void @_Unwind_Resume(i8* %2)
  unreachable
}

; [#uses = 1]
declare %std.stdio.File* @_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea22_636f72652e737464632e737464696f2e7374646f7574ZQDgFNbNcNdNiZSQEhQEg4File() local_unnamed_addr #4

; [#uses = 1]
declare void @_D3std5stdio4File5flushMFNeZv(%std.stdio.File* nonnull) local_unnamed_addr #4

; [#uses = 1]
; Function Attrs: nofree nounwind uwtable
define void @_D6source18_staticCtor_L86_C1FZv() #5 {
  %1 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %2 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %1) #4 ; [#uses = 1]
  store i32 %2, i32* @_D6source8currChari, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D4core4stdc5stdio__T7getcharZQjFNbNiNeZi() local_unnamed_addr #2 {
  %1 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %2 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %1) #4 ; [#uses = 1]
  ret i32 %2
}

; [#uses = 0]
; Function Attrs: norecurse nounwind readonly uwtable
define zeroext i8 @_D6source7topCharFZa() local_unnamed_addr #6 {
  %1 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %2 = trunc i32 %1 to i8                         ; [#uses = 1]
  ret i8 %2
}

; [#uses = 0]
; Function Attrs: nofree nounwind uwtable
define void @_D6source7popCharFZv() local_unnamed_addr #5 {
  %1 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %2 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %1) #4 ; [#uses = 1]
  store i32 %2, i32* @_D6source8currChari, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define { i64, i8* } @_D6source10readStringFZAya() local_unnamed_addr #2 {
  %res = alloca { i64, i8* }, align 8             ; [#uses = 3, size/byte = 16]
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %res, i64 0, i32 0 ; [#uses = 3, type = i64*]
  store i64 0, i64* %1, align 8
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %res, i64 0, i32 1 ; [#uses = 3, type = i8**]
  store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), i8** %2, align 8
  %3 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %4 = and i32 %3, 255                            ; [#uses = 1]
  %5 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %4) #4 ; [#uses = 1]
  br i1 %5, label %forbody, label %forcond1.preheader

forcond1.preheader:                               ; preds = %forbody, %0
  %6 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %7 = and i32 %6, 255                            ; [#uses = 1]
  %8 = call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %7) #4 ; [#uses = 1]
  br i1 %8, label %endfor4, label %forbody2

forbody:                                          ; preds = %0, %forbody
  %9 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %10 = tail call i32 @fgetc(%core.stdc.stdio._IO_FILE* %9) #13 ; [#uses = 2]
  store i32 %10, i32* @_D6source8currChari, align 4
  %11 = and i32 %10, 255                          ; [#uses = 1]
  %12 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %11) #4 ; [#uses = 1]
  br i1 %12, label %forbody, label %forcond1.preheader

forbody2:                                         ; preds = %forcond1.preheader, %forbody2
  %13 = load i32, i32* @_D6source8currChari, align 4 ; [#uses = 1]
  %14 = trunc i32 %13 to i8                       ; [#uses = 1]
  %.appendedArray = call { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Aya6__initZ to %object.TypeInfo*), { i64, i8* }* nonnull dereferenceable(16) %res, i64 1) #1 ; [#uses = 0]
  %.len = load i64, i64* %1, align 8              ; [#uses = 1]
  %.ptr = load i8*, i8** %2, align 8              ; [#uses = 1]
  %.lastIndex = add i64 %.len, -1                 ; [#uses = 1]
  %.lastElem = getelementptr inbounds i8, i8* %.ptr, i64 %.lastIndex ; [#uses = 1, type = i8*]
  store i8 %14, i8* %.lastElem, align 1
  %15 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %16 = call i32 @fgetc(%core.stdc.stdio._IO_FILE* %15) #13 ; [#uses = 2]
  store i32 %16, i32* @_D6source8currChari, align 4
  %17 = and i32 %16, 255                          ; [#uses = 1]
  %18 = call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %17) #4 ; [#uses = 1]
  br i1 %18, label %endfor4.loopexit, label %forbody2

endfor4.loopexit:                                 ; preds = %forbody2
  %.fca.0.load.pre = load i64, i64* %1, align 8   ; [#uses = 1]
  %.fca.1.load.pre = load i8*, i8** %2, align 8   ; [#uses = 1]
  br label %endfor4

endfor4:                                          ; preds = %endfor4.loopexit, %forcond1.preheader
  %.fca.1.load = phi i8* [ %.fca.1.load.pre, %endfor4.loopexit ], [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str.2, i64 0, i64 0), %forcond1.preheader ] ; [#uses = 1, type = i8*]
  %.fca.0.load = phi i64 [ %.fca.0.load.pre, %endfor4.loopexit ], [ 0, %forcond1.preheader ] ; [#uses = 1, type = i64]
  %.fca.0.insert = insertvalue { i64, i8* } undef, i64 %.fca.0.load, 0 ; [#uses = 1]
  %.fca.1.insert10 = insertvalue { i64, i8* } %.fca.0.insert, i8* %.fca.1.load, 1 ; [#uses = 1]
  ret { i64, i8* } %.fca.1.insert10
}

; [#uses = 8]
declare zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32) local_unnamed_addr #4

; [#uses = 2]
; Function Attrs: uwtable
declare { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo*, { i64, i8* }* dereferenceable(16), i64) local_unnamed_addr #1

; [#uses = 1]
declare i32 @_d_run_main(i32, i8**, i8*) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define i32 @main(i32 %argc_arg, i8** %argv_arg) local_unnamed_addr #2 {
  %1 = tail call i32 @_d_run_main(i32 %argc_arg, i8** %argv_arg, i8* bitcast (i32 ({ i64, { i64, i8* }* })* @_Dmain to i8*)) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 4]
declare zeroext i1 @_D3std5ascii7isDigitFNaNbNiNfwZb(i32) local_unnamed_addr #4

; [#uses = 2]
declare void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias sret align 8) local_unnamed_addr #4

; [#uses = 4]
declare void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull) local_unnamed_addr #4

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File__T5writeTlTAyaTlTaZQrMFNflQplaZv(%std.stdio.File* nonnull %.this_arg, i8 zeroext %_param_3_arg, i64 %_param_2_arg, { i64, i8* } %_param_1_arg, i64 %_param_0_arg) local_unnamed_addr #2 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
unrolledstmt:
  %w = alloca %std.stdio.File.LockingTextWriter, align 8 ; [#uses = 12, size/byte = 48]
  %__copytmp133 = alloca %std.stdio.File.LockingTextWriter, align 8 ; [#uses = 3, size/byte = 48]
  %__copytmp141 = alloca %std.stdio.File.LockingTextWriter, align 8 ; [#uses = 3, size/byte = 48]
  call void @_D3std5stdio4File17lockingTextWriterMFNfZSQBoQBnQBk17LockingTextWriter(%std.stdio.File.LockingTextWriter* noalias nonnull sret align 8 %w, %std.stdio.File* nonnull %.this_arg) #4
  %0 = bitcast %std.stdio.File.LockingTextWriter* %__copytmp133 to i8* ; [#uses = 1]
  %1 = bitcast %std.stdio.File.LockingTextWriter* %w to i8* ; [#uses = 2]
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 dereferenceable(48) %0, i8* nonnull align 8 dereferenceable(48) %1, i64 48, i1 false)
  invoke void @_D3std5stdio4File17LockingTextWriter14__aggrPostblitMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %__copytmp133) #4
          to label %postinvoke5 unwind label %landingPad4

postinvoke5:                                      ; preds = %unrolledstmt
  invoke void @_D3std4conv__T11toTextRangeTlTSQBd5stdio4File17LockingTextWriterZQBzFNflQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture nonnull align 8 %__copytmp133, i64 %_param_0_arg) #4
          to label %unrolledstmt1 unwind label %landingPad4

catch.std.utf.UTFException:                       ; preds = %landingPad4
  %2 = call %object.Throwable* @_d_eh_enter_catch(i8* %25) ; [#uses = 1]
  %3 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 2 ; [#uses = 1, type = i16*]
  store i16 0, i16* %3, align 4
  invoke void @_d_throw_exception(%object.Throwable* %2) #3
          to label %postinvoke unwind label %landingPad

postinvoke:                                       ; preds = %catch.std.utf.UTFException
  unreachable

unrolledstmt1:                                    ; preds = %postinvoke5
  %e_arg.fca.0.extract.i = extractvalue { i64, i8* } %_param_1_arg, 0 ; [#uses = 4]
  %e_arg.fca.1.extract.i = extractvalue { i64, i8* } %_param_1_arg, 1 ; [#uses = 2]
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %5 = load i32, i32* %4, align 8                 ; [#uses = 1]
  %6 = icmp slt i32 %5, 1                         ; [#uses = 1]
  br i1 %6, label %if.i.i.i, label %forcond.preheader.i.i.i

forcond.preheader.i.i.i:                          ; preds = %unrolledstmt1
  %.not11.i.i.i = icmp eq i64 %e_arg.fca.0.extract.i, 0 ; [#uses = 1]
  br i1 %.not11.i.i.i, label %unrolledstmt2, label %forbody.i.i.i

if.i.i.i:                                         ; preds = %unrolledstmt1
  %7 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %8 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %7, align 8 ; [#uses = 1]
  %9 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %8, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %10 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %9, align 8 ; [#uses = 1]
  %11 = call i64 @fwrite(i8* %e_arg.fca.1.extract.i, i64 1, i64 %e_arg.fca.0.extract.i, %core.stdc.stdio._IO_FILE* %10) #4 ; [#uses = 1]
  %.not.i.i.i = icmp eq i64 %11, %e_arg.fca.0.extract.i ; [#uses = 1]
  br i1 %.not.i.i.i, label %unrolledstmt2, label %if1.i.i.i

if1.i.i.i:                                        ; preds = %if.i.i.i
  invoke void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
          to label %.noexc unwind label %landingPad13.loopexit.split-lp

.noexc:                                           ; preds = %if1.i.i.i
  unreachable

forbody.i.i.i:                                    ; preds = %forcond.preheader.i.i.i, %.noexc39
  %__key138.010.i.i.i = phi i64 [ %14, %.noexc39 ], [ 0, %forcond.preheader.i.i.i ] ; [#uses = 2, type = i64]
  %12 = getelementptr inbounds i8, i8* %e_arg.fca.1.extract.i, i64 %__key138.010.i.i.i ; [#uses = 1, type = i8*]
  %13 = load i8, i8* %12, align 1                 ; [#uses = 1]
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZv(%std.stdio.File.LockingTextWriter* nonnull %w, i8 zeroext %13) #4
          to label %.noexc39 unwind label %landingPad13.loopexit

.noexc39:                                         ; preds = %forbody.i.i.i
  %14 = add nuw i64 %__key138.010.i.i.i, 1        ; [#uses = 2]
  %exitcond.not.i.i.i = icmp eq i64 %14, %e_arg.fca.0.extract.i ; [#uses = 1]
  br i1 %exitcond.not.i.i.i, label %unrolledstmt2, label %forbody.i.i.i

catch.std.utf.UTFException9:                      ; preds = %landingPad13
  %15 = call %object.Throwable* @_d_eh_enter_catch(i8* %29) ; [#uses = 1]
  %16 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 2 ; [#uses = 1, type = i16*]
  store i16 0, i16* %16, align 4
  invoke void @_d_throw_exception(%object.Throwable* %15) #3
          to label %postinvoke11 unwind label %landingPad

postinvoke11:                                     ; preds = %catch.std.utf.UTFException9
  unreachable

unrolledstmt2:                                    ; preds = %.noexc39, %if.i.i.i, %forcond.preheader.i.i.i
  %17 = bitcast %std.stdio.File.LockingTextWriter* %__copytmp141 to i8* ; [#uses = 1]
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 dereferenceable(48) %17, i8* nonnull align 8 dereferenceable(48) %1, i64 48, i1 false)
  invoke void @_D3std5stdio4File17LockingTextWriter14__aggrPostblitMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %__copytmp141) #4
          to label %postinvoke22 unwind label %landingPad21

postinvoke22:                                     ; preds = %unrolledstmt2
  invoke void @_D3std4conv__T11toTextRangeTlTSQBd5stdio4File17LockingTextWriterZQBzFNflQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture nonnull align 8 %__copytmp141, i64 %_param_2_arg) #4
          to label %unrolledstmt3 unwind label %landingPad21

catch.std.utf.UTFException17:                     ; preds = %landingPad21
  %18 = call %object.Throwable* @_d_eh_enter_catch(i8* %34) ; [#uses = 1]
  %19 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 2 ; [#uses = 1, type = i16*]
  store i16 0, i16* %19, align 4
  invoke void @_d_throw_exception(%object.Throwable* %18) #3
          to label %postinvoke19 unwind label %landingPad

postinvoke19:                                     ; preds = %catch.std.utf.UTFException17
  unreachable

unrolledstmt3:                                    ; preds = %postinvoke22
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %w, i8 zeroext %_param_3_arg) #4
          to label %try.success unwind label %landingPad30

catch.std.utf.UTFException26:                     ; preds = %landingPad30
  %20 = call %object.Throwable* @_d_eh_enter_catch(i8* %39) ; [#uses = 1]
  %21 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %w, i64 0, i32 2 ; [#uses = 1, type = i16*]
  store i16 0, i16* %21, align 4
  invoke void @_d_throw_exception(%object.Throwable* %20) #3
          to label %postinvoke28 unwind label %landingPad

postinvoke28:                                     ; preds = %catch.std.utf.UTFException26
  unreachable

try.success:                                      ; preds = %unrolledstmt3
  call void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %w) #4
  ret void

landingPad:                                       ; preds = %catch.std.utf.UTFException26, %catch.std.utf.UTFException17, %catch.std.utf.UTFException9, %catch.std.utf.UTFException
  %22 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  %23 = extractvalue { i8*, i32 } %22, 0          ; [#uses = 1]
  br label %eh.resume

eh.resume:                                        ; preds = %landingPad, %landingPad4, %landingPad13, %landingPad21, %landingPad30
  %eh.ptr.0.ph = phi i8* [ %39, %landingPad30 ], [ %34, %landingPad21 ], [ %29, %landingPad13 ], [ %25, %landingPad4 ], [ %23, %landingPad ] ; [#uses = 1, type = i8*]
  call void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %w) #4
  call void @_Unwind_Resume(i8* %eh.ptr.0.ph)
  unreachable

landingPad4:                                      ; preds = %postinvoke5, %unrolledstmt
  %24 = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 2]
  %25 = extractvalue { i8*, i32 } %24, 0          ; [#uses = 2]
  %26 = extractvalue { i8*, i32 } %24, 1          ; [#uses = 1]
  %27 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %28 = icmp eq i32 %26, %27                      ; [#uses = 1]
  br i1 %28, label %catch.std.utf.UTFException, label %eh.resume

landingPad13.loopexit:                            ; preds = %forbody.i.i.i
  %lpad.loopexit = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 1]
  br label %landingPad13

landingPad13.loopexit.split-lp:                   ; preds = %if1.i.i.i
  %lpad.loopexit.split-lp = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 1]
  br label %landingPad13

landingPad13:                                     ; preds = %landingPad13.loopexit.split-lp, %landingPad13.loopexit
  %lpad.phi = phi { i8*, i32 } [ %lpad.loopexit, %landingPad13.loopexit ], [ %lpad.loopexit.split-lp, %landingPad13.loopexit.split-lp ] ; [#uses = 2, type = { i8*, i32 }]
  %29 = extractvalue { i8*, i32 } %lpad.phi, 0    ; [#uses = 2]
  %30 = extractvalue { i8*, i32 } %lpad.phi, 1    ; [#uses = 1]
  %31 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %32 = icmp eq i32 %30, %31                      ; [#uses = 1]
  br i1 %32, label %catch.std.utf.UTFException9, label %eh.resume

landingPad21:                                     ; preds = %postinvoke22, %unrolledstmt2
  %33 = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 2]
  %34 = extractvalue { i8*, i32 } %33, 0          ; [#uses = 2]
  %35 = extractvalue { i8*, i32 } %33, 1          ; [#uses = 1]
  %36 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %37 = icmp eq i32 %35, %36                      ; [#uses = 1]
  br i1 %37, label %catch.std.utf.UTFException17, label %eh.resume

landingPad30:                                     ; preds = %unrolledstmt3
  %38 = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 2]
  %39 = extractvalue { i8*, i32 } %38, 0          ; [#uses = 2]
  %40 = extractvalue { i8*, i32 } %38, 1          ; [#uses = 1]
  %41 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %42 = icmp eq i32 %40, %41                      ; [#uses = 1]
  br i1 %42, label %catch.std.utf.UTFException26, label %eh.resume
}

; [#uses = 4]
; Function Attrs: uwtable
declare i32 @_d_eh_personality(i32, i32, i64, i8*, i8*) #1

; [#uses = 4]
; Function Attrs: cold noreturn uwtable
declare void @_Unwind_Resume(i8*) local_unnamed_addr #3

; [#uses = 1]
declare void @_D3std5stdio4File17lockingTextWriterMFNfZSQBoQBnQBk17LockingTextWriter(%std.stdio.File.LockingTextWriter* noalias sret align 8, %std.stdio.File* nonnull) local_unnamed_addr #4

; [#uses = 4]
declare void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull) local_unnamed_addr #4

; [#uses = 4]
; Function Attrs: nounwind uwtable
declare %object.Throwable* @_d_eh_enter_catch(i8*) local_unnamed_addr #7

; [#uses = 20]
; Function Attrs: cold noreturn uwtable
declare void @_d_throw_exception(%object.Throwable*) local_unnamed_addr #3

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std4conv__T11toTextRangeTlTSQBd5stdio4File17LockingTextWriterZQBzFNflQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture align 8 %writer, i64 %value_arg) local_unnamed_addr #2 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
  %buf5 = alloca [20 x i8], align 1               ; [#uses = 2, size/byte = 20]
  %buf14 = alloca [20 x i8], align 1              ; [#uses = 2, size/byte = 20]
  %1 = icmp slt i64 %value_arg, 0                 ; [#uses = 1]
  br i1 %1, label %if, label %dowhile.i

if:                                               ; preds = %0
  %negval.i = sub i64 0, %value_arg               ; [#uses = 1]
  br label %dowhile.i.i

dowhile.i.i:                                      ; preds = %bounds.ok.i.i, %if
  %value.0.i.i = phi i64 [ %negval.i, %if ], [ %value.1.i.i, %bounds.ok.i.i ] ; [#uses = 4, type = i64]
  %i.0.i.i = phi i64 [ 20, %if ], [ %5, %bounds.ok.i.i ] ; [#uses = 3, type = i64]
  %2 = icmp ult i64 %value.0.i.i, 10              ; [#uses = 1]
  br i1 %2, label %endif.i.i, label %else.i.i

else.i.i:                                         ; preds = %dowhile.i.i
  %3 = urem i64 %value.0.i.i, 10                  ; [#uses = 1]
  %4 = udiv i64 %value.0.i.i, 10                  ; [#uses = 1]
  br label %endif.i.i

endif.i.i:                                        ; preds = %else.i.i, %dowhile.i.i
  %value.1.i.i = phi i64 [ %4, %else.i.i ], [ 0, %dowhile.i.i ] ; [#uses = 2, type = i64]
  %x.0.in.i.i = phi i64 [ %3, %else.i.i ], [ %value.0.i.i, %dowhile.i.i ] ; [#uses = 1, type = i64]
  %5 = add nsw i64 %i.0.i.i, -1                   ; [#uses = 4]
  %bounds.cmp.i.i = icmp ult i64 %5, 20           ; [#uses = 1]
  br i1 %bounds.cmp.i.i, label %bounds.ok.i.i, label %bounds.fail.i.i

bounds.ok.i.i:                                    ; preds = %endif.i.i
  %x.0.i.i = trunc i64 %x.0.in.i.i to i8          ; [#uses = 1]
  %6 = getelementptr inbounds [20 x i8], [20 x i8]* %buf5, i64 0, i64 %5 ; [#uses = 1, type = i8*]
  %7 = add nuw nsw i8 %x.0.i.i, 48                ; [#uses = 1]
  store i8 %7, i8* %6, align 1
  %.not.i.i = icmp eq i64 %value.1.i.i, 0         ; [#uses = 1]
  br i1 %.not.i.i, label %if2.i, label %dowhile.i.i

bounds.fail.i.i:                                  ; preds = %endif.i.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 48, i64 -1, i64 20) #3
  unreachable

if2.i:                                            ; preds = %bounds.ok.i.i
  %8 = getelementptr inbounds [20 x i8], [20 x i8]* %buf5, i64 0, i64 %5 ; [#uses = 2, type = i8*]
  %9 = icmp sgt i64 %i.0.i.i, 1                   ; [#uses = 1]
  br i1 %9, label %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit.i, label %assertFailed.i.i

assertFailed.i.i:                                 ; preds = %if2.i
  tail call void @_d_assert({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 122) #3
  unreachable

_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit.i: ; preds = %if2.i
  %10 = getelementptr inbounds i8, i8* %8, i64 -1 ; [#uses = 2, type = i8*]
  %11 = sub nuw nsw i64 22, %i.0.i.i              ; [#uses = 4]
  %bounds.cmp.not.i = icmp eq i64 %11, 0          ; [#uses = 1]
  br i1 %bounds.cmp.not.i, label %bounds.fail.i, label %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit

bounds.fail.i:                                    ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 124, i64 0, i64 0) #3
  unreachable

_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit: ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit.i
  store i8 45, i8* %10, align 1
  %12 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %13 = load i32, i32* %12, align 8               ; [#uses = 1]
  %14 = icmp slt i32 %13, 1                       ; [#uses = 1]
  br i1 %14, label %if.i.i.i, label %forbody.i.i.i

if.i.i.i:                                         ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit
  %15 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %16 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %15, align 8 ; [#uses = 1]
  %17 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %16, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %18 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %17, align 8 ; [#uses = 1]
  %19 = call i64 @fwrite(i8* nonnull %10, i64 1, i64 %11, %core.stdc.stdio._IO_FILE* %18) #4 ; [#uses = 1]
  %.not.i.i.i = icmp eq i64 %19, %11              ; [#uses = 1]
  br i1 %.not.i.i.i, label %try.success, label %if1.i.i.i

if1.i.i.i:                                        ; preds = %if.i.i.i
  invoke void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
          to label %.noexc unwind label %eh.resume.loopexit.split-lp.loopexit.split-lp

.noexc:                                           ; preds = %if1.i.i.i
  unreachable

forbody.i.i.i:                                    ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit, %.noexc6.forbody.i.i.i_crit_edge
  %20 = phi i8 [ %.pre43, %.noexc6.forbody.i.i.i_crit_edge ], [ 45, %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit ] ; [#uses = 1, type = i8]
  %__key132.010.i.i.i = phi i64 [ %21, %.noexc6.forbody.i.i.i_crit_edge ], [ 0, %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd.exit ] ; [#uses = 2, type = i64]
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %writer, i8 zeroext %20) #2
          to label %.noexc6 unwind label %eh.resume.loopexit

.noexc6:                                          ; preds = %forbody.i.i.i
  %21 = add nuw nsw i64 %__key132.010.i.i.i, 1    ; [#uses = 2]
  %exitcond.not.i.i.i = icmp eq i64 %21, %11      ; [#uses = 1]
  br i1 %exitcond.not.i.i.i, label %try.success, label %.noexc6.forbody.i.i.i_crit_edge

.noexc6.forbody.i.i.i_crit_edge:                  ; preds = %.noexc6
  %.phi.trans.insert42 = getelementptr inbounds i8, i8* %8, i64 %__key132.010.i.i.i ; [#uses = 1, type = i8*]
  %.pre43 = load i8, i8* %.phi.trans.insert42, align 1 ; [#uses = 1]
  br label %forbody.i.i.i

dowhile.i:                                        ; preds = %0, %bounds.ok.i8
  %value.0.i = phi i64 [ %value.1.i, %bounds.ok.i8 ], [ %value_arg, %0 ] ; [#uses = 4, type = i64]
  %i.0.i = phi i64 [ %25, %bounds.ok.i8 ], [ 20, %0 ] ; [#uses = 2, type = i64]
  %22 = icmp ult i64 %value.0.i, 10               ; [#uses = 1]
  br i1 %22, label %endif.i, label %else.i

else.i:                                           ; preds = %dowhile.i
  %23 = urem i64 %value.0.i, 10                   ; [#uses = 1]
  %24 = udiv i64 %value.0.i, 10                   ; [#uses = 1]
  br label %endif.i

endif.i:                                          ; preds = %else.i, %dowhile.i
  %value.1.i = phi i64 [ %24, %else.i ], [ 0, %dowhile.i ] ; [#uses = 2, type = i64]
  %x.0.in.i = phi i64 [ %23, %else.i ], [ %value.0.i, %dowhile.i ] ; [#uses = 1, type = i64]
  %25 = add nsw i64 %i.0.i, -1                    ; [#uses = 4]
  %bounds.cmp.i = icmp ult i64 %25, 20            ; [#uses = 1]
  br i1 %bounds.cmp.i, label %bounds.ok.i8, label %bounds.fail.i9

bounds.ok.i8:                                     ; preds = %endif.i
  %x.0.i = trunc i64 %x.0.in.i to i8              ; [#uses = 1]
  %26 = getelementptr inbounds [20 x i8], [20 x i8]* %buf14, i64 0, i64 %25 ; [#uses = 1, type = i8*]
  %27 = add nuw nsw i8 %x.0.i, 48                 ; [#uses = 2]
  store i8 %27, i8* %26, align 1
  %.not.i = icmp eq i64 %value.1.i, 0             ; [#uses = 1]
  br i1 %.not.i, label %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit, label %dowhile.i

bounds.fail.i9:                                   ; preds = %endif.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 48, i64 -1, i64 20) #3
  unreachable

_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit: ; preds = %bounds.ok.i8
  %28 = getelementptr inbounds [20 x i8], [20 x i8]* %buf14, i64 0, i64 %25 ; [#uses = 2, type = i8*]
  %29 = sub nuw nsw i64 21, %i.0.i                ; [#uses = 3]
  %30 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %31 = load i32, i32* %30, align 8               ; [#uses = 1]
  %32 = icmp slt i32 %31, 1                       ; [#uses = 1]
  br i1 %32, label %if.i.i.i13, label %forbody.i.i.i17

if.i.i.i13:                                       ; preds = %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit
  %33 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %34 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %33, align 8 ; [#uses = 1]
  %35 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %34, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %36 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %35, align 8 ; [#uses = 1]
  %37 = call i64 @fwrite(i8* nonnull %28, i64 1, i64 %29, %core.stdc.stdio._IO_FILE* %36) #4 ; [#uses = 1]
  %.not.i.i.i12 = icmp eq i64 %37, %29            ; [#uses = 1]
  br i1 %.not.i.i.i12, label %try.success, label %if1.i.i.i14

if1.i.i.i14:                                      ; preds = %if.i.i.i13
  invoke void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
          to label %.noexc18 unwind label %eh.resume.loopexit.split-lp.loopexit.split-lp

.noexc18:                                         ; preds = %if1.i.i.i14
  unreachable

forbody.i.i.i17:                                  ; preds = %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit, %.noexc19.forbody.i.i.i17_crit_edge
  %38 = phi i8 [ %.pre, %.noexc19.forbody.i.i.i17_crit_edge ], [ %27, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit ] ; [#uses = 1, type = i8]
  %__key132.010.i.i.i15 = phi i64 [ %39, %.noexc19.forbody.i.i.i17_crit_edge ], [ 0, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit ] ; [#uses = 1, type = i64]
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %writer, i8 zeroext %38) #2
          to label %.noexc19 unwind label %eh.resume.loopexit.split-lp.loopexit

.noexc19:                                         ; preds = %forbody.i.i.i17
  %39 = add nuw nsw i64 %__key132.010.i.i.i15, 1  ; [#uses = 3]
  %exitcond.not.i.i.i16 = icmp eq i64 %39, %29    ; [#uses = 1]
  br i1 %exitcond.not.i.i.i16, label %try.success, label %.noexc19.forbody.i.i.i17_crit_edge

.noexc19.forbody.i.i.i17_crit_edge:               ; preds = %.noexc19
  %.phi.trans.insert = getelementptr inbounds i8, i8* %28, i64 %39 ; [#uses = 1, type = i8*]
  %.pre = load i8, i8* %.phi.trans.insert, align 1 ; [#uses = 1]
  br label %forbody.i.i.i17

try.success:                                      ; preds = %.noexc19, %.noexc6, %if.i.i.i, %if.i.i.i13
  tail call void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %writer) #4
  ret void

eh.resume.loopexit:                               ; preds = %forbody.i.i.i
  %lpad.loopexit = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  br label %eh.resume

eh.resume.loopexit.split-lp.loopexit:             ; preds = %forbody.i.i.i17
  %lpad.loopexit23 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  br label %eh.resume

eh.resume.loopexit.split-lp.loopexit.split-lp:    ; preds = %if1.i.i.i14, %if1.i.i.i
  %lpad.loopexit.split-lp24 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  br label %eh.resume

eh.resume:                                        ; preds = %eh.resume.loopexit.split-lp.loopexit, %eh.resume.loopexit.split-lp.loopexit.split-lp, %eh.resume.loopexit
  %lpad.phi = phi { i8*, i32 } [ %lpad.loopexit, %eh.resume.loopexit ], [ %lpad.loopexit23, %eh.resume.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp24, %eh.resume.loopexit.split-lp.loopexit.split-lp ] ; [#uses = 1, type = { i8*, i32 }]
  %40 = extractvalue { i8*, i32 } %lpad.phi, 0    ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %writer) #4
  tail call void @_Unwind_Resume(i8* %40)
  unreachable
}

; [#uses = 11]
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #8

; [#uses = 2]
declare void @_D3std5stdio4File17LockingTextWriter14__aggrPostblitMFNeZv(%std.stdio.File.LockingTextWriter* nonnull) local_unnamed_addr #4

; [#uses = 4]
; Function Attrs: nounwind readnone
declare i32 @llvm.eh.typeid.for(i8*) #9

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T3putTSQBf5stdio4File17LockingTextWriterTAyaZQBsFNfKQBuQoZv({ i64, i8* } %e_arg, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  %e_arg.fca.0.extract = extractvalue { i64, i8* } %e_arg, 0 ; [#uses = 4]
  %e_arg.fca.1.extract = extractvalue { i64, i8* } %e_arg, 1 ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if.i.i, label %forcond.preheader.i.i

forcond.preheader.i.i:                            ; preds = %0
  %.not11.i.i = icmp eq i64 %e_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not11.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAyaZQBuFNfKQBuKQpZv.exit, label %forbody.i.i

if.i.i:                                           ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %e_arg.fca.1.extract, i64 1, i64 %e_arg.fca.0.extract, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not.i.i = icmp eq i64 %8, %e_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAyaZQBuFNfKQBuKQpZv.exit, label %if1.i.i

if1.i.i:                                          ; preds = %if.i.i
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

forbody.i.i:                                      ; preds = %forcond.preheader.i.i, %forbody.i.i
  %__key138.010.i.i = phi i64 [ %11, %forbody.i.i ], [ 0, %forcond.preheader.i.i ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %e_arg.fca.1.extract, i64 %__key138.010.i.i ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %10) #4
  %11 = add nuw i64 %__key138.010.i.i, 1          ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %11, %e_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAyaZQBuFNfKQBuKQpZv.exit, label %forbody.i.i

_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAyaZQBuFNfKQBuKQpZv.exit: ; preds = %forbody.i.i, %forcond.preheader.i.i, %if.i.i
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T3putTSQBf5stdio4File17LockingTextWriterTaZQBqFNfKQBsaZv(i8 zeroext %e_arg, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %e_arg) #4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTaZQBsFNfKQBsKaZv(i8* dereferenceable(1) %e, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  %1 = load i8, i8* %e, align 1                   ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %1) #4
  ret void
}

; [#uses = 8]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, i8 zeroext %c_arg) local_unnamed_addr #2 {
  %numCodeUnits.i = alloca i64, align 8           ; [#uses = 3, size/byte = 8]
  %str = alloca { i64, i8* }, align 8             ; [#uses = 3, size/byte = 16]
  %wbuf = alloca [1 x i32], align 4               ; [#uses = 2, size/byte = 4]
  tail call void @_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  %4 = zext i8 %c_arg to i32                      ; [#uses = 2]
  br i1 %3, label %if, label %else

if:                                               ; preds = %0
  %5 = tail call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %6 = tail call i32 @fputc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %5) #4 ; [#uses = 0]
  br label %endif

else:                                             ; preds = %0
  %7 = icmp sgt i8 %c_arg, -1                     ; [#uses = 1]
  br i1 %7, label %if1, label %else3

if1:                                              ; preds = %else
  %8 = tail call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %9 = tail call i32 @fputwc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %8) #4 ; [#uses = 0]
  br label %endif

else3:                                            ; preds = %else
  %10 = icmp ugt i8 %c_arg, -65                   ; [#uses = 1]
  %11 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 3 ; [#uses = 2, type = [4 x i8]*]
  br i1 %10, label %if4, label %else6

if4:                                              ; preds = %else3
  %12 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0 ; [#uses = 1, type = i8*]
  store i8 %c_arg, i8* %12, align 1
  %13 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 5 ; [#uses = 1, type = i64*]
  store i64 1, i64* %13, align 8
  br label %endif

else6:                                            ; preds = %else3
  %14 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 5 ; [#uses = 5, type = i64*]
  %15 = load i64, i64* %14, align 8               ; [#uses = 3]
  %bounds.cmp = icmp ult i64 %15, 4               ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %else6
  %16 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 3, i64 %15 ; [#uses = 1, type = i8*]
  store i8 %c_arg, i8* %16, align 1
  %17 = load i64, i64* %14, align 8               ; [#uses = 1]
  %18 = add i64 %17, 1                            ; [#uses = 2]
  store i64 %18, i64* %14, align 8
  %19 = getelementptr [4 x i8], [4 x i8]* %11, i64 0, i64 0 ; [#uses = 2, type = i8*]
  %20 = load i8, i8* %19, align 1                 ; [#uses = 2]
  %21 = icmp sgt i8 %20, -1                       ; [#uses = 1]
  br i1 %21, label %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit, label %else.i

else.i:                                           ; preds = %bounds.ok
  %22 = tail call i32 @_D3std3utf10strideImplFNaNeamZk(i64 0, i8 zeroext %20) #4 ; [#uses = 1]
  %phi.cast = zext i32 %22 to i64                 ; [#uses = 1]
  %.pre = load i64, i64* %14, align 8             ; [#uses = 1]
  br label %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit

_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit:         ; preds = %bounds.ok, %else.i
  %23 = phi i64 [ %.pre, %else.i ], [ %18, %bounds.ok ] ; [#uses = 4, type = i64]
  %24 = phi i64 [ %phi.cast, %else.i ], [ 1, %bounds.ok ] ; [#uses = 1, type = i64]
  %25 = icmp eq i64 %23, %24                      ; [#uses = 1]
  br i1 %25, label %if7, label %endif

if7:                                              ; preds = %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit
  %bounds.cmp.up = icmp ult i64 %23, 5            ; [#uses = 1]
  br i1 %bounds.cmp.up, label %bounds.ok9, label %bounds.fail10

bounds.ok9:                                       ; preds = %if7
  %26 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %23, i64* %26, align 8
  %27 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* %19, i8** %27, align 8
  %28 = bitcast i64* %numCodeUnits.i to i8*       ; [#uses = 2]
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %28)
  store i64 0, i64* %numCodeUnits.i, align 8
  %29 = call i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNeKQmJmZw(i64* nonnull dereferenceable(8) %numCodeUnits.i, { i64, i8* }* nonnull dereferenceable(16) %str) #4 ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %28)
  %30 = getelementptr inbounds [1 x i32], [1 x i32]* %wbuf, i64 0, i64 0 ; [#uses = 2, type = i32*]
  store i32 65535, i32* %30, align 4
  %31 = call i64 @_D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG1wwZm(i32 %29, [1 x i32]* nonnull dereferenceable(4) %wbuf) #4 ; [#uses = 2]
  %.not = icmp eq i64 %31, 0                      ; [#uses = 1]
  br i1 %.not, label %endfor, label %forbody.lr.ph

forbody.lr.ph:                                    ; preds = %bounds.ok9
  %.not25 = icmp eq i64 %31, 1                    ; [#uses = 1]
  %32 = load i32, i32* %30, align 4               ; [#uses = 1]
  %33 = call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %34 = call i32 @fputwc_unlocked(i32 %32, %core.stdc.stdio._IO_FILE* %33) #4 ; [#uses = 0]
  br i1 %.not25, label %endfor, label %bounds.ok12.us

bounds.ok12.us:                                   ; preds = %forbody.lr.ph
  call void @_d_arraybounds_index({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3310, i64 1, i64 1) #3
  unreachable

endfor:                                           ; preds = %forbody.lr.ph, %bounds.ok9
  store i64 0, i64* %14, align 8
  br label %endif

bounds.fail10:                                    ; preds = %if7
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3305, i64 0, i64 %23, i64 4) #3
  unreachable

bounds.fail:                                      ; preds = %else6
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3301, i64 %15, i64 4) #3
  unreachable

endif:                                            ; preds = %if1, %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit, %endfor, %if4, %if
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZ12trustedFPUTCFNbNiNeiPS4core4stdcQDe8_IO_FILEZi(%core.stdc.stdio._IO_FILE* %h_arg, i32 %ch_arg) local_unnamed_addr #2 {
  %1 = tail call i32 @fputc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 4]
; Function Attrs: nofree nounwind
declare i32 @fputc_unlocked(i32, %core.stdc.stdio._IO_FILE* nocapture) local_unnamed_addr #10

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZ13trustedFPUTWCFNbNiNewPS4core4stdcQDf8_IO_FILEZw(%core.stdc.stdio._IO_FILE* %h_arg, i32 %ch_arg) local_unnamed_addr #2 {
  %1 = tail call i32 @fputwc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 6]
declare i32 @fputwc_unlocked(i32, %core.stdc.stdio._IO_FILE*) local_unnamed_addr #4

; [#uses = 2]
declare void @_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv(%std.stdio.File.LockingTextWriter* nonnull) local_unnamed_addr #4

; [#uses = 6]
declare %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T6strideTAaZQlFNaNfQkZk({ i64, i8* } %str_arg) local_unnamed_addr #2 {
  %str_arg.fca.0.extract = extractvalue { i64, i8* } %str_arg, 0 ; [#uses = 1]
  %bounds.cmp.not = icmp eq i64 %str_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %bounds.cmp.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %0
  %str_arg.fca.1.extract = extractvalue { i64, i8* } %str_arg, 1 ; [#uses = 1]
  %1 = load i8, i8* %str_arg.fca.1.extract, align 1 ; [#uses = 2]
  %2 = icmp sgt i8 %1, -1                         ; [#uses = 1]
  br i1 %2, label %if, label %else

if:                                               ; preds = %bounds.ok
  ret i32 1

else:                                             ; preds = %bounds.ok
  %3 = tail call i32 @_D3std3utf10strideImplFNaNeamZk(i64 0, i8 zeroext %1) #4 ; [#uses = 1]
  ret i32 %3

bounds.fail:                                      ; preds = %0
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 403, i64 0, i64 0) #3
  unreachable
}

; [#uses = 3]
; Function Attrs: cold noreturn uwtable
declare void @_d_arraybounds_slice({ i64, i8* }, i32, i64, i64, i64) local_unnamed_addr #3

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNfKQmZw({ i64, i8* }* dereferenceable(16) %str) local_unnamed_addr #2 {
  %numCodeUnits = alloca i64, align 8             ; [#uses = 2, size/byte = 8]
  store i64 0, i64* %numCodeUnits, align 8
  %1 = call i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNeKQmJmZw(i64* nonnull dereferenceable(8) %numCodeUnits, { i64, i8* }* nonnull dereferenceable(16) %str) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr i64 @_D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG1wwZm(i32 %c_arg, [1 x i32]* dereferenceable(4) %buf) local_unnamed_addr #2 {
arrayinit.cond:
  %.lval_copy_for_ImplicitByvalRewrite.i = alloca { i64, i8* }, align 8 ; [#uses = 4, size/byte = 16]
  %arrayliteral.i = alloca [1 x i32], align 4     ; [#uses = 2, size/byte = 4]
  %0 = getelementptr inbounds [1 x i32], [1 x i32]* %buf, i64 0, i64 0 ; [#uses = 2, type = i32*]
  store i32 65535, i32* %0, align 4
  %1 = and i32 %c_arg, -2048                      ; [#uses = 1]
  %2 = icmp eq i32 %1, 55296                      ; [#uses = 1]
  %3 = icmp ugt i32 %c_arg, 1114111               ; [#uses = 1]
  %ororval = or i1 %3, %2                         ; [#uses = 1]
  br i1 %ororval, label %if, label %else

if:                                               ; preds = %arrayinit.cond
  %4 = bitcast { i64, i8* }* %.lval_copy_for_ImplicitByvalRewrite.i to i8* ; [#uses = 1]
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %4)
  %5 = bitcast [1 x i32]* %arrayliteral.i to i8*  ; [#uses = 1]
  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %5)
  %.newclass_gc_alloc.i = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std3utf12UTFException7__ClassZ) #1 ; [#uses = 4]
  %.newclass_gc.i = bitcast %object.Object* %.newclass_gc_alloc.i to %std.utf.UTFException* ; [#uses = 2]
  %vtbl.i = bitcast %object.Object* %.newclass_gc_alloc.i to [11 x i8*]** ; [#uses = 2]
  store [11 x i8*]* @_D3std3utf12UTFException6__vtblZ, [11 x i8*]** %vtbl.i, align 8
  %6 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %6, align 8
  %7 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 1 ; [#uses = 1, type = %object.Object*]
  %8 = bitcast %object.Object* %7 to i8*          ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(96) %8, i8* nonnull align 8 dereferenceable(96) bitcast ({ i64, i8* }* getelementptr inbounds (%std.utf.UTFException, %std.utf.UTFException* @_D3std3utf12UTFException6__initZ, i64 0, i32 2) to i8*), i64 96, i1 false)
  %msg.sroa.0.0..sroa_idx.i = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.lval_copy_for_ImplicitByvalRewrite.i, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 40, i64* %msg.sroa.0.0..sroa_idx.i, align 8
  %msg.sroa.2.0..sroa_idx1.i = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.lval_copy_for_ImplicitByvalRewrite.i, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.7, i64 0, i64 0), i8** %msg.sroa.2.0..sroa_idx1.i, align 8
  %9 = tail call %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCnQCmQCl(%std.utf.UTFException* nonnull returned %.newclass_gc.i, %object.Throwable* null, i64 2301, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, { i64, i8* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite.i) #4 ; [#uses = 0]
  %10 = load [11 x i8*]*, [11 x i8*]** %vtbl.i, align 8 ; [#uses = 1]
  %"setSequence@vtbl.i" = getelementptr inbounds [11 x i8*], [11 x i8*]* %10, i64 0, i64 10 ; [#uses = 1, type = i8**]
  %11 = bitcast i8** %"setSequence@vtbl.i" to %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** ; [#uses = 1]
  %12 = load %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })*, %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** %11, align 8 ; [#uses = 1]
  %13 = getelementptr inbounds [1 x i32], [1 x i32]* %arrayliteral.i, i64 0, i64 0 ; [#uses = 2, type = i32*]
  store i32 %c_arg, i32* %13, align 4
  %14 = insertvalue { i64, i32* } { i64 1, i32* undef }, i32* %13, 1 ; [#uses = 1]
  %15 = call %std.utf.UTFException* %12(%std.utf.UTFException* nonnull %.newclass_gc.i, { i64, i32* } %14) ; [#uses = 1]
  %16 = bitcast %std.utf.UTFException* %15 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %16) #3
  unreachable

else:                                             ; preds = %arrayinit.cond
  %17 = tail call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %c_arg) #4 ; [#uses = 1]
  br i1 %17, label %endif, label %assertFailed

assertFailed:                                     ; preds = %else
  tail call void @_d_assert({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 2506) #3
  unreachable

endif:                                            ; preds = %else
  store i32 %c_arg, i32* %0, align 4
  ret i64 1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std5range10primitives__T5emptyTAaZQkFNaNbNdNiNfMKQsZb({ i64, i8* }* dereferenceable(16) %a) local_unnamed_addr #2 {
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %a, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 1]
  %.not = icmp eq i64 %.len, 0                    ; [#uses = 1]
  ret i1 %.not
}

; [#uses = 3]
declare i32 @_D3std3utf10strideImplFNaNeamZk(i64, i8 zeroext) local_unnamed_addr #4

; [#uses = 3]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNeKQmJmZw(i64* dereferenceable(8) %numCodeUnits, { i64, i8* }* dereferenceable(16) %str) local_unnamed_addr #2 {
  store i64 0, i64* %numCodeUnits, align 8
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 0 ; [#uses = 5, type = i64*]
  %.len.i = load i64, i64* %1, align 8            ; [#uses = 2]
  %.not.i = icmp eq i64 %.len.i, 0                ; [#uses = 1]
  br i1 %.not.i, label %assertFailed, label %bounds.ok

bounds.ok:                                        ; preds = %0
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 1 ; [#uses = 5, type = i8**]
  %.ptr = load i8*, i8** %2, align 8              ; [#uses = 2]
  %3 = load i8, i8* %.ptr, align 1                ; [#uses = 1]
  %4 = icmp sgt i8 %3, -1                         ; [#uses = 1]
  br i1 %4, label %if, label %else

if:                                               ; preds = %bounds.ok
  store i64 1, i64* %numCodeUnits, align 8
  %.len1 = load i64, i64* %1, align 8             ; [#uses = 2]
  %bounds.cmp2.not = icmp eq i64 %.len1, 0        ; [#uses = 1]
  br i1 %bounds.cmp2.not, label %bounds.fail4, label %bounds.ok3

bounds.ok3:                                       ; preds = %if
  %.ptr5 = load i8*, i8** %2, align 8             ; [#uses = 2]
  %5 = load i8, i8* %.ptr5, align 1               ; [#uses = 1]
  %lowerbound = getelementptr inbounds i8, i8* %.ptr5, i64 1 ; [#uses = 1, type = i8*]
  %6 = add i64 %.len1, -1                         ; [#uses = 1]
  store i64 %6, i64* %1, align 8
  store i8* %lowerbound, i8** %2, align 8
  %7 = zext i8 %5 to i32                          ; [#uses = 1]
  br label %label.__returnLabel

bounds.fail4:                                     ; preds = %if
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1292, i64 0, i64 0) #3
  unreachable

else:                                             ; preds = %bounds.ok
  %8 = insertvalue { i64, i8* } undef, i64 %.len.i, 0 ; [#uses = 1]
  %9 = insertvalue { i64, i8* } %8, i8* %.ptr, 1  ; [#uses = 1]
  %10 = tail call i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFNaQkKmZw(i64* nonnull dereferenceable(8) %numCodeUnits, { i64, i8* } %9) #4 ; [#uses = 1]
  %11 = load i64, i64* %numCodeUnits, align 8     ; [#uses = 4]
  %.len14 = load i64, i64* %1, align 8            ; [#uses = 4]
  %bounds.cmp.lo18.not = icmp ult i64 %.len14, %11 ; [#uses = 1]
  br i1 %bounds.cmp.lo18.not, label %bounds.fail16, label %bounds.ok15

bounds.ok15:                                      ; preds = %else
  %.ptr19 = load i8*, i8** %2, align 8            ; [#uses = 1]
  %lowerbound20 = getelementptr inbounds i8, i8* %.ptr19, i64 %11 ; [#uses = 1, type = i8*]
  %12 = sub i64 %.len14, %11                      ; [#uses = 1]
  store i64 %12, i64* %1, align 8
  store i8* %lowerbound20, i8** %2, align 8
  br label %label.__returnLabel

bounds.fail16:                                    ; preds = %else
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1299, i64 %11, i64 %.len14, i64 %.len14) #3
  unreachable

label.__returnLabel:                              ; preds = %bounds.ok15, %bounds.ok3
  %__result.0 = phi i32 [ %7, %bounds.ok3 ], [ %10, %bounds.ok15 ] ; [#uses = 2, type = i32]
  %13 = tail call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %__result.0) #4 ; [#uses = 1]
  br i1 %13, label %assertPassed23, label %assertFailed24

assertPassed23:                                   ; preds = %label.__returnLabel
  ret i32 %__result.0

assertFailed24:                                   ; preds = %label.__returnLabel
  tail call void @_d_assert({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1285) #3
  unreachable

assertFailed:                                     ; preds = %0
  tail call void @_d_assert({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1281) #3
  unreachable
}

; [#uses = 6]
; Function Attrs: cold noreturn uwtable
declare void @_d_assert({ i64, i8* }, i32) local_unnamed_addr #3

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFNaQkKmZw(i64* dereferenceable(8) %index, { i64, i8* } %str_arg) local_unnamed_addr #2 {
  %.frame = alloca %nest.decodeImpl, align 8      ; [#uses = 15, size/byte = 16]
  %str_arg.fca.0.extract = extractvalue { i64, i8* } %str_arg, 0 ; [#uses = 1]
  %str_arg.fca.1.extract = extractvalue { i64, i8* } %str_arg, 1 ; [#uses = 1]
  %pstr = getelementptr inbounds %nest.decodeImpl, %nest.decodeImpl* %.frame, i64 0, i32 0 ; [#uses = 1, type = i8**]
  %length = getelementptr inbounds %nest.decodeImpl, %nest.decodeImpl* %.frame, i64 0, i32 1 ; [#uses = 1, type = i64*]
  %1 = load i64, i64* %index, align 8             ; [#uses = 4]
  %2 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %1 ; [#uses = 5, type = i8*]
  store i8* %2, i8** %pstr, align 8
  %3 = sub i64 %str_arg.fca.0.extract, %1         ; [#uses = 4]
  store i64 %3, i64* %length, align 8
  %4 = load i8, i8* %2, align 1                   ; [#uses = 4]
  %5 = zext i8 %4 to i32                          ; [#uses = 3]
  %6 = and i32 %5, 192                            ; [#uses = 1]
  %.not = icmp eq i32 %6, 192                     ; [#uses = 1]
  br i1 %.not, label %endif, label %if

if:                                               ; preds = %0
  %7 = bitcast %nest.decodeImpl* %.frame to i8*   ; [#uses = 1]
  %8 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %7) #2 ; [#uses = 1]
  %9 = bitcast %std.utf.UTFException* %8 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %9) #3
  unreachable

endif:                                            ; preds = %0
  %10 = icmp eq i64 %3, 1                         ; [#uses = 1]
  br i1 %10, label %if3, label %endif4

if3:                                              ; preds = %endif
  %11 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %12 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ11outOfBoundsMFNaNbZCQFgQFf12UTFException(i8* nonnull %11) #2 ; [#uses = 1]
  %13 = bitcast %std.utf.UTFException* %12 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %13) #3
  unreachable

endif4:                                           ; preds = %endif
  %14 = getelementptr inbounds i8, i8* %2, i64 1  ; [#uses = 1, type = i8*]
  %15 = load i8, i8* %14, align 1                 ; [#uses = 1]
  %16 = zext i8 %15 to i32                        ; [#uses = 2]
  %17 = and i32 %16, 192                          ; [#uses = 1]
  %.not75 = icmp eq i32 %17, 128                  ; [#uses = 1]
  br i1 %.not75, label %endif7, label %if6

if6:                                              ; preds = %endif4
  %18 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %19 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %18) #2 ; [#uses = 1]
  %20 = bitcast %std.utf.UTFException* %19 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %20) #3
  unreachable

endif7:                                           ; preds = %endif4
  %21 = shl nuw nsw i32 %5, 6                     ; [#uses = 1]
  %22 = and i32 %16, 63                           ; [#uses = 1]
  %23 = or i32 %22, %21                           ; [#uses = 4]
  %.mask79 = and i8 %4, 32                        ; [#uses = 1]
  %24 = icmp eq i8 %.mask79, 0                    ; [#uses = 1]
  br i1 %24, label %if9, label %unrolledstmt1

if9:                                              ; preds = %endif7
  %25 = and i32 %5, 30                            ; [#uses = 1]
  %26 = icmp eq i32 %25, 0                        ; [#uses = 1]
  br i1 %26, label %if11, label %endif12

if11:                                             ; preds = %if9
  %27 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %28 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %27) #2 ; [#uses = 1]
  %29 = bitcast %std.utf.UTFException* %28 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %29) #3
  unreachable

endif12:                                          ; preds = %if9
  %30 = and i32 %23, 2047                         ; [#uses = 1]
  %31 = add i64 %1, 2                             ; [#uses = 1]
  store i64 %31, i64* %index, align 8
  ret i32 %30

unrolledstmt1:                                    ; preds = %endif7
  %32 = icmp eq i64 %3, 2                         ; [#uses = 1]
  br i1 %32, label %if14, label %endif15

if14:                                             ; preds = %unrolledstmt1
  %33 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %34 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ11outOfBoundsMFNaNbZCQFgQFf12UTFException(i8* nonnull %33) #2 ; [#uses = 1]
  %35 = bitcast %std.utf.UTFException* %34 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %35) #3
  unreachable

endif15:                                          ; preds = %unrolledstmt1
  %36 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %37 = load i8, i8* %36, align 1                 ; [#uses = 1]
  %38 = zext i8 %37 to i32                        ; [#uses = 2]
  %39 = and i32 %38, 192                          ; [#uses = 1]
  %.not76 = icmp eq i32 %39, 128                  ; [#uses = 1]
  br i1 %.not76, label %endif18, label %if17

if17:                                             ; preds = %endif15
  %40 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %41 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %40) #2 ; [#uses = 1]
  %42 = bitcast %std.utf.UTFException* %41 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %42) #3
  unreachable

endif18:                                          ; preds = %endif15
  %43 = shl nuw nsw i32 %23, 6                    ; [#uses = 1]
  %44 = and i32 %38, 63                           ; [#uses = 1]
  %45 = or i32 %44, %43                           ; [#uses = 2]
  %.mask80 = and i8 %4, 16                        ; [#uses = 1]
  %46 = icmp eq i8 %.mask80, 0                    ; [#uses = 1]
  br i1 %46, label %if20, label %unrolledstmt2

if20:                                             ; preds = %endif18
  %47 = and i32 %45, 65535                        ; [#uses = 2]
  %48 = and i32 %23, 992                          ; [#uses = 1]
  %49 = icmp eq i32 %48, 0                        ; [#uses = 1]
  br i1 %49, label %if22, label %endif23

if22:                                             ; preds = %if20
  %50 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %51 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %50) #2 ; [#uses = 1]
  %52 = bitcast %std.utf.UTFException* %51 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %52) #3
  unreachable

endif23:                                          ; preds = %if20
  %53 = tail call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %47) #4 ; [#uses = 1]
  br i1 %53, label %endif26, label %if25

if25:                                             ; preds = %endif23
  %54 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %55 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %54) #2 ; [#uses = 1]
  %56 = bitcast %std.utf.UTFException* %55 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %56) #3
  unreachable

endif26:                                          ; preds = %endif23
  %57 = load i64, i64* %index, align 8            ; [#uses = 1]
  %58 = add i64 %57, 3                            ; [#uses = 1]
  store i64 %58, i64* %index, align 8
  ret i32 %47

unrolledstmt2:                                    ; preds = %endif18
  %59 = icmp eq i64 %3, 3                         ; [#uses = 1]
  br i1 %59, label %if29, label %endif30

if29:                                             ; preds = %unrolledstmt2
  %60 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %61 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ11outOfBoundsMFNaNbZCQFgQFf12UTFException(i8* nonnull %60) #2 ; [#uses = 1]
  %62 = bitcast %std.utf.UTFException* %61 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %62) #3
  unreachable

endif30:                                          ; preds = %unrolledstmt2
  %63 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %64 = load i8, i8* %63, align 1                 ; [#uses = 1]
  %65 = zext i8 %64 to i32                        ; [#uses = 2]
  %66 = and i32 %65, 192                          ; [#uses = 1]
  %.not77 = icmp eq i32 %66, 128                  ; [#uses = 1]
  br i1 %.not77, label %endif33, label %if32

if32:                                             ; preds = %endif30
  %67 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %68 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %67) #2 ; [#uses = 1]
  %69 = bitcast %std.utf.UTFException* %68 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %69) #3
  unreachable

endif33:                                          ; preds = %endif30
  %.mask = and i8 %4, 8                           ; [#uses = 1]
  %.not78 = icmp eq i8 %.mask, 0                  ; [#uses = 1]
  br i1 %.not78, label %if35, label %unrolledend

if35:                                             ; preds = %endif33
  %70 = shl nuw nsw i32 %45, 6                    ; [#uses = 1]
  %71 = and i32 %65, 63                           ; [#uses = 1]
  %.masked = and i32 %70, 2097088                 ; [#uses = 1]
  %72 = or i32 %71, %.masked                      ; [#uses = 2]
  %73 = and i32 %23, 496                          ; [#uses = 1]
  %74 = icmp eq i32 %73, 0                        ; [#uses = 1]
  br i1 %74, label %if37, label %endif38

if37:                                             ; preds = %if35
  %75 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %76 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %75) #2 ; [#uses = 1]
  %77 = bitcast %std.utf.UTFException* %76 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %77) #3
  unreachable

endif38:                                          ; preds = %if35
  %78 = add i64 %1, 4                             ; [#uses = 1]
  store i64 %78, i64* %index, align 8
  %79 = icmp ugt i32 %72, 1114111                 ; [#uses = 1]
  br i1 %79, label %if40, label %endif41

if40:                                             ; preds = %endif38
  %80 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %81 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %80) #2 ; [#uses = 1]
  %82 = bitcast %std.utf.UTFException* %81 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %82) #3
  unreachable

endif41:                                          ; preds = %endif38
  ret i32 %72

unrolledend:                                      ; preds = %endif33
  %83 = bitcast %nest.decodeImpl* %.frame to i8*  ; [#uses = 1]
  %84 = call %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %83) #2 ; [#uses = 1]
  %85 = bitcast %std.utf.UTFException* %84 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %85) #3
  unreachable
}

; [#uses = 3]
declare zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32) local_unnamed_addr #4

; [#uses = 10]
; Function Attrs: uwtable
define weak_odr %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %.nest_arg) local_unnamed_addr #2 {
bounds.ok.i:
  %sequence.i = alloca [4 x i32], align 4         ; [#uses = 6, size/byte = 16]
  %pstr = bitcast i8* %.nest_arg to i8**          ; [#uses = 1]
  %length = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %0 = bitcast i8* %length to i64*                ; [#uses = 1]
  %1 = load i64, i64* %0, align 8                 ; [#uses = 9]
  %2 = load i8*, i8** %pstr, align 8              ; [#uses = 7]
  %3 = bitcast [4 x i32]* %sequence.i to i8*      ; [#uses = 2]
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %3)
  %exitcond.not.i = icmp eq i64 %1, 0             ; [#uses = 1]
  br i1 %exitcond.not.i, label %bounds.fail3.i, label %bounds.ok2.i

bounds.ok2.i:                                     ; preds = %bounds.ok.i
  %4 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %5 = load i8, i8* %2, align 1                   ; [#uses = 1]
  %6 = zext i8 %5 to i32                          ; [#uses = 1]
  store i32 %6, i32* %4, align 4
  %.not = icmp eq i64 %1, 1                       ; [#uses = 1]
  br i1 %.not, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit, label %bounds.ok9.i

bounds.fail3.i:                                   ; preds = %bounds.ok.i.3, %bounds.ok.i.2, %bounds.ok.i.1, %bounds.ok.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1544, i64 %1, i64 %1) #3
  unreachable

bounds.ok9.i:                                     ; preds = %bounds.ok2.i
  %7 = getelementptr inbounds i8, i8* %2, i64 1   ; [#uses = 1, type = i8*]
  %8 = load i8, i8* %7, align 1                   ; [#uses = 1]
  %9 = and i8 %8, -64                             ; [#uses = 1]
  %10 = icmp eq i8 %9, -128                       ; [#uses = 1]
  br i1 %10, label %bounds.ok.i.1, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit: ; preds = %bounds.ok2.i.3, %bounds.ok2.i, %bounds.ok9.i.2, %bounds.ok2.i.2, %bounds.ok9.i.1, %bounds.ok2.i.1, %bounds.ok9.i
  %.lcssa = phi i64 [ 1, %bounds.ok2.i ], [ 1, %bounds.ok9.i ], [ 2, %bounds.ok2.i.1 ], [ 2, %bounds.ok9.i.1 ], [ 3, %bounds.ok2.i.2 ], [ 3, %bounds.ok9.i.2 ], [ 4, %bounds.ok2.i.3 ] ; [#uses = 2, type = i64]
  %.newclass_gc_alloc.i = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std3utf12UTFException7__ClassZ) #1 ; [#uses = 4]
  %.newclass_gc.i = bitcast %object.Object* %.newclass_gc_alloc.i to %std.utf.UTFException* ; [#uses = 2]
  %vtbl.i = bitcast %object.Object* %.newclass_gc_alloc.i to [11 x i8*]** ; [#uses = 2]
  store [11 x i8*]* @_D3std3utf12UTFException6__vtblZ, [11 x i8*]** %vtbl.i, align 8
  %11 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %11, align 8
  %12 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 1 ; [#uses = 1, type = %object.Object*]
  %13 = bitcast %object.Object* %12 to i8*        ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(96) %13, i8* nonnull align 8 dereferenceable(96) bitcast ({ i64, i8* }* getelementptr inbounds (%std.utf.UTFException, %std.utf.UTFException* @_D3std3utf12UTFException6__initZ, i64 0, i32 2) to i8*), i64 96, i1 false)
  %14 = tail call %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk(%std.utf.UTFException* nonnull returned %.newclass_gc.i, %object.Throwable* null, i64 1547, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 22, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.5, i32 0, i32 0) }) #4 ; [#uses = 0]
  %15 = load [11 x i8*]*, [11 x i8*]** %vtbl.i, align 8 ; [#uses = 1]
  %"setSequence@vtbl.i" = getelementptr inbounds [11 x i8*], [11 x i8*]* %15, i64 0, i64 10 ; [#uses = 1, type = i8**]
  %16 = bitcast i8** %"setSequence@vtbl.i" to %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** ; [#uses = 1]
  %17 = load %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })*, %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** %16, align 8 ; [#uses = 1]
  %18 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %19 = insertvalue { i64, i32* } undef, i64 %.lcssa, 0 ; [#uses = 1]
  %20 = insertvalue { i64, i32* } %19, i32* %18, 1 ; [#uses = 1]
  %21 = call %std.utf.UTFException* %17(%std.utf.UTFException* nonnull %.newclass_gc.i, { i64, i32* } %20) ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3)
  ret %std.utf.UTFException* %21

bounds.ok.i.1:                                    ; preds = %bounds.ok9.i
  %exitcond.not.i.1 = icmp eq i64 %1, 1           ; [#uses = 1]
  br i1 %exitcond.not.i.1, label %bounds.fail3.i, label %bounds.ok2.i.1

bounds.ok2.i.1:                                   ; preds = %bounds.ok.i.1
  %22 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 1 ; [#uses = 1, type = i32*]
  %23 = getelementptr inbounds i8, i8* %2, i64 1  ; [#uses = 1, type = i8*]
  %24 = load i8, i8* %23, align 1                 ; [#uses = 1]
  %25 = zext i8 %24 to i32                        ; [#uses = 1]
  store i32 %25, i32* %22, align 4
  %26 = icmp ugt i64 %1, 2                        ; [#uses = 1]
  br i1 %26, label %bounds.ok9.i.1, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok9.i.1:                                   ; preds = %bounds.ok2.i.1
  %27 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %28 = load i8, i8* %27, align 1                 ; [#uses = 1]
  %29 = and i8 %28, -64                           ; [#uses = 1]
  %30 = icmp eq i8 %29, -128                      ; [#uses = 1]
  br i1 %30, label %bounds.ok.i.2, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok.i.2:                                    ; preds = %bounds.ok9.i.1
  %exitcond.not.i.2 = icmp eq i64 %1, 2           ; [#uses = 1]
  br i1 %exitcond.not.i.2, label %bounds.fail3.i, label %bounds.ok2.i.2

bounds.ok2.i.2:                                   ; preds = %bounds.ok.i.2
  %31 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 2 ; [#uses = 1, type = i32*]
  %32 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %33 = load i8, i8* %32, align 1                 ; [#uses = 1]
  %34 = zext i8 %33 to i32                        ; [#uses = 1]
  store i32 %34, i32* %31, align 4
  %35 = icmp ugt i64 %1, 3                        ; [#uses = 1]
  br i1 %35, label %bounds.ok9.i.2, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok9.i.2:                                   ; preds = %bounds.ok2.i.2
  %36 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %37 = load i8, i8* %36, align 1                 ; [#uses = 1]
  %38 = and i8 %37, -64                           ; [#uses = 1]
  %39 = icmp eq i8 %38, -128                      ; [#uses = 1]
  br i1 %39, label %bounds.ok.i.3, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok.i.3:                                    ; preds = %bounds.ok9.i.2
  %exitcond.not.i.3 = icmp eq i64 %1, 3           ; [#uses = 1]
  br i1 %exitcond.not.i.3, label %bounds.fail3.i, label %bounds.ok2.i.3

bounds.ok2.i.3:                                   ; preds = %bounds.ok.i.3
  %40 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 3 ; [#uses = 1, type = i32*]
  %41 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %42 = load i8, i8* %41, align 1                 ; [#uses = 1]
  %43 = zext i8 %42 to i32                        ; [#uses = 1]
  store i32 %43, i32* %40, align 4
  br label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException({ i64, i8* } %msg_arg, { i64, i8* } %str_arg) local_unnamed_addr #2 {
bounds.ok:
  %sequence = alloca [4 x i32], align 4           ; [#uses = 5, size/byte = 16]
  %str_arg.fca.0.extract = extractvalue { i64, i8* } %str_arg, 0 ; [#uses = 9]
  %str_arg.fca.1.extract = extractvalue { i64, i8* } %str_arg, 1 ; [#uses = 7]
  %exitcond.not = icmp eq i64 %str_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %exitcond.not, label %bounds.fail3, label %bounds.ok2

bounds.ok2:                                       ; preds = %bounds.ok
  %0 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %1 = load i8, i8* %str_arg.fca.1.extract, align 1 ; [#uses = 1]
  %2 = zext i8 %1 to i32                          ; [#uses = 1]
  store i32 %2, i32* %0, align 4
  %.not = icmp eq i64 %str_arg.fca.0.extract, 1   ; [#uses = 1]
  br i1 %.not, label %enddowhile, label %bounds.ok9

bounds.fail3:                                     ; preds = %bounds.ok.3, %bounds.ok.2, %bounds.ok.1, %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1544, i64 %str_arg.fca.0.extract, i64 %str_arg.fca.0.extract) #3
  unreachable

bounds.ok9:                                       ; preds = %bounds.ok2
  %3 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 1 ; [#uses = 1, type = i8*]
  %4 = load i8, i8* %3, align 1                   ; [#uses = 1]
  %5 = and i8 %4, -64                             ; [#uses = 1]
  %6 = icmp eq i8 %5, -128                        ; [#uses = 1]
  br i1 %6, label %bounds.ok.1, label %enddowhile

enddowhile:                                       ; preds = %bounds.ok2.3, %bounds.ok2, %bounds.ok9.2, %bounds.ok2.2, %bounds.ok9.1, %bounds.ok2.1, %bounds.ok9
  %.lcssa = phi i64 [ 1, %bounds.ok2 ], [ 1, %bounds.ok9 ], [ 2, %bounds.ok2.1 ], [ 2, %bounds.ok9.1 ], [ 3, %bounds.ok2.2 ], [ 3, %bounds.ok9.2 ], [ 4, %bounds.ok2.3 ] ; [#uses = 2, type = i64]
  %.newclass_gc_alloc = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std3utf12UTFException7__ClassZ) #1 ; [#uses = 4]
  %.newclass_gc = bitcast %object.Object* %.newclass_gc_alloc to %std.utf.UTFException* ; [#uses = 2]
  %vtbl = bitcast %object.Object* %.newclass_gc_alloc to [11 x i8*]** ; [#uses = 2]
  store [11 x i8*]* @_D3std3utf12UTFException6__vtblZ, [11 x i8*]** %vtbl, align 8
  %7 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %7, align 8
  %8 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 1 ; [#uses = 1, type = %object.Object*]
  %9 = bitcast %object.Object* %8 to i8*          ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(96) %9, i8* nonnull align 8 dereferenceable(96) bitcast ({ i64, i8* }* getelementptr inbounds (%std.utf.UTFException, %std.utf.UTFException* @_D3std3utf12UTFException6__initZ, i64 0, i32 2) to i8*), i64 96, i1 false)
  %10 = tail call %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk(%std.utf.UTFException* nonnull returned %.newclass_gc, %object.Throwable* null, i64 1547, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } %msg_arg) #4 ; [#uses = 0]
  %11 = load [11 x i8*]*, [11 x i8*]** %vtbl, align 8 ; [#uses = 1]
  %"setSequence@vtbl" = getelementptr inbounds [11 x i8*], [11 x i8*]* %11, i64 0, i64 10 ; [#uses = 1, type = i8**]
  %12 = bitcast i8** %"setSequence@vtbl" to %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** ; [#uses = 1]
  %13 = load %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })*, %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** %12, align 8 ; [#uses = 1]
  %14 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %15 = insertvalue { i64, i32* } undef, i64 %.lcssa, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i32* } %15, i32* %14, 1 ; [#uses = 1]
  %17 = call %std.utf.UTFException* %13(%std.utf.UTFException* nonnull %.newclass_gc, { i64, i32* } %16) ; [#uses = 1]
  ret %std.utf.UTFException* %17

bounds.ok.1:                                      ; preds = %bounds.ok9
  %exitcond.not.1 = icmp eq i64 %str_arg.fca.0.extract, 1 ; [#uses = 1]
  br i1 %exitcond.not.1, label %bounds.fail3, label %bounds.ok2.1

bounds.ok2.1:                                     ; preds = %bounds.ok.1
  %18 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence, i64 0, i64 1 ; [#uses = 1, type = i32*]
  %19 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 1 ; [#uses = 1, type = i8*]
  %20 = load i8, i8* %19, align 1                 ; [#uses = 1]
  %21 = zext i8 %20 to i32                        ; [#uses = 1]
  store i32 %21, i32* %18, align 4
  %22 = icmp ugt i64 %str_arg.fca.0.extract, 2    ; [#uses = 1]
  br i1 %22, label %bounds.ok9.1, label %enddowhile

bounds.ok9.1:                                     ; preds = %bounds.ok2.1
  %23 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 2 ; [#uses = 1, type = i8*]
  %24 = load i8, i8* %23, align 1                 ; [#uses = 1]
  %25 = and i8 %24, -64                           ; [#uses = 1]
  %26 = icmp eq i8 %25, -128                      ; [#uses = 1]
  br i1 %26, label %bounds.ok.2, label %enddowhile

bounds.ok.2:                                      ; preds = %bounds.ok9.1
  %exitcond.not.2 = icmp eq i64 %str_arg.fca.0.extract, 2 ; [#uses = 1]
  br i1 %exitcond.not.2, label %bounds.fail3, label %bounds.ok2.2

bounds.ok2.2:                                     ; preds = %bounds.ok.2
  %27 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence, i64 0, i64 2 ; [#uses = 1, type = i32*]
  %28 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 2 ; [#uses = 1, type = i8*]
  %29 = load i8, i8* %28, align 1                 ; [#uses = 1]
  %30 = zext i8 %29 to i32                        ; [#uses = 1]
  store i32 %30, i32* %27, align 4
  %31 = icmp ugt i64 %str_arg.fca.0.extract, 3    ; [#uses = 1]
  br i1 %31, label %bounds.ok9.2, label %enddowhile

bounds.ok9.2:                                     ; preds = %bounds.ok2.2
  %32 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 3 ; [#uses = 1, type = i8*]
  %33 = load i8, i8* %32, align 1                 ; [#uses = 1]
  %34 = and i8 %33, -64                           ; [#uses = 1]
  %35 = icmp eq i8 %34, -128                      ; [#uses = 1]
  br i1 %35, label %bounds.ok.3, label %enddowhile

bounds.ok.3:                                      ; preds = %bounds.ok9.2
  %exitcond.not.3 = icmp eq i64 %str_arg.fca.0.extract, 3 ; [#uses = 1]
  br i1 %exitcond.not.3, label %bounds.fail3, label %bounds.ok2.3

bounds.ok2.3:                                     ; preds = %bounds.ok.3
  %36 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence, i64 0, i64 3 ; [#uses = 1, type = i32*]
  %37 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 3 ; [#uses = 1, type = i8*]
  %38 = load i8, i8* %37, align 1                 ; [#uses = 1]
  %39 = zext i8 %38 to i32                        ; [#uses = 1]
  store i32 %39, i32* %36, align 4
  br label %enddowhile
}

; [#uses = 3]
; Function Attrs: uwtable
define weak_odr %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ11outOfBoundsMFNaNbZCQFgQFf12UTFException(i8* nonnull %.nest_arg) local_unnamed_addr #2 {
bounds.ok.i:
  %sequence.i = alloca [4 x i32], align 4         ; [#uses = 6, size/byte = 16]
  %pstr = bitcast i8* %.nest_arg to i8**          ; [#uses = 1]
  %length = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %0 = bitcast i8* %length to i64*                ; [#uses = 1]
  %1 = load i64, i64* %0, align 8                 ; [#uses = 9]
  %2 = load i8*, i8** %pstr, align 8              ; [#uses = 7]
  %3 = bitcast [4 x i32]* %sequence.i to i8*      ; [#uses = 2]
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %3)
  %exitcond.not.i = icmp eq i64 %1, 0             ; [#uses = 1]
  br i1 %exitcond.not.i, label %bounds.fail3.i, label %bounds.ok2.i

bounds.ok2.i:                                     ; preds = %bounds.ok.i
  %4 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %5 = load i8, i8* %2, align 1                   ; [#uses = 1]
  %6 = zext i8 %5 to i32                          ; [#uses = 1]
  store i32 %6, i32* %4, align 4
  %.not = icmp eq i64 %1, 1                       ; [#uses = 1]
  br i1 %.not, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit, label %bounds.ok9.i

bounds.fail3.i:                                   ; preds = %bounds.ok.i.3, %bounds.ok.i.2, %bounds.ok.i.1, %bounds.ok.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i32 1544, i64 %1, i64 %1) #3
  unreachable

bounds.ok9.i:                                     ; preds = %bounds.ok2.i
  %7 = getelementptr inbounds i8, i8* %2, i64 1   ; [#uses = 1, type = i8*]
  %8 = load i8, i8* %7, align 1                   ; [#uses = 1]
  %9 = and i8 %8, -64                             ; [#uses = 1]
  %10 = icmp eq i8 %9, -128                       ; [#uses = 1]
  br i1 %10, label %bounds.ok.i.1, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit: ; preds = %bounds.ok2.i.3, %bounds.ok2.i, %bounds.ok9.i.2, %bounds.ok2.i.2, %bounds.ok9.i.1, %bounds.ok2.i.1, %bounds.ok9.i
  %.lcssa = phi i64 [ 1, %bounds.ok2.i ], [ 1, %bounds.ok9.i ], [ 2, %bounds.ok2.i.1 ], [ 2, %bounds.ok9.i.1 ], [ 3, %bounds.ok2.i.2 ], [ 3, %bounds.ok9.i.2 ], [ 4, %bounds.ok2.i.3 ] ; [#uses = 2, type = i64]
  %.newclass_gc_alloc.i = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std3utf12UTFException7__ClassZ) #1 ; [#uses = 4]
  %.newclass_gc.i = bitcast %object.Object* %.newclass_gc_alloc.i to %std.utf.UTFException* ; [#uses = 2]
  %vtbl.i = bitcast %object.Object* %.newclass_gc_alloc.i to [11 x i8*]** ; [#uses = 2]
  store [11 x i8*]* @_D3std3utf12UTFException6__vtblZ, [11 x i8*]** %vtbl.i, align 8
  %11 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %11, align 8
  %12 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc.i, i64 1 ; [#uses = 1, type = %object.Object*]
  %13 = bitcast %object.Object* %12 to i8*        ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(96) %13, i8* nonnull align 8 dereferenceable(96) bitcast ({ i64, i8* }* getelementptr inbounds (%std.utf.UTFException, %std.utf.UTFException* @_D3std3utf12UTFException6__initZ, i64 0, i32 2) to i8*), i64 96, i1 false)
  %14 = tail call %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk(%std.utf.UTFException* nonnull returned %.newclass_gc.i, %object.Throwable* null, i64 1547, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 44, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.6, i32 0, i32 0) }) #4 ; [#uses = 0]
  %15 = load [11 x i8*]*, [11 x i8*]** %vtbl.i, align 8 ; [#uses = 1]
  %"setSequence@vtbl.i" = getelementptr inbounds [11 x i8*], [11 x i8*]* %15, i64 0, i64 10 ; [#uses = 1, type = i8**]
  %16 = bitcast i8** %"setSequence@vtbl.i" to %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** ; [#uses = 1]
  %17 = load %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })*, %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** %16, align 8 ; [#uses = 1]
  %18 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 0 ; [#uses = 1, type = i32*]
  %19 = insertvalue { i64, i32* } undef, i64 %.lcssa, 0 ; [#uses = 1]
  %20 = insertvalue { i64, i32* } %19, i32* %18, 1 ; [#uses = 1]
  %21 = call %std.utf.UTFException* %17(%std.utf.UTFException* nonnull %.newclass_gc.i, { i64, i32* } %20) ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3)
  ret %std.utf.UTFException* %21

bounds.ok.i.1:                                    ; preds = %bounds.ok9.i
  %exitcond.not.i.1 = icmp eq i64 %1, 1           ; [#uses = 1]
  br i1 %exitcond.not.i.1, label %bounds.fail3.i, label %bounds.ok2.i.1

bounds.ok2.i.1:                                   ; preds = %bounds.ok.i.1
  %22 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 1 ; [#uses = 1, type = i32*]
  %23 = getelementptr inbounds i8, i8* %2, i64 1  ; [#uses = 1, type = i8*]
  %24 = load i8, i8* %23, align 1                 ; [#uses = 1]
  %25 = zext i8 %24 to i32                        ; [#uses = 1]
  store i32 %25, i32* %22, align 4
  %26 = icmp ugt i64 %1, 2                        ; [#uses = 1]
  br i1 %26, label %bounds.ok9.i.1, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok9.i.1:                                   ; preds = %bounds.ok2.i.1
  %27 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %28 = load i8, i8* %27, align 1                 ; [#uses = 1]
  %29 = and i8 %28, -64                           ; [#uses = 1]
  %30 = icmp eq i8 %29, -128                      ; [#uses = 1]
  br i1 %30, label %bounds.ok.i.2, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok.i.2:                                    ; preds = %bounds.ok9.i.1
  %exitcond.not.i.2 = icmp eq i64 %1, 2           ; [#uses = 1]
  br i1 %exitcond.not.i.2, label %bounds.fail3.i, label %bounds.ok2.i.2

bounds.ok2.i.2:                                   ; preds = %bounds.ok.i.2
  %31 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 2 ; [#uses = 1, type = i32*]
  %32 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %33 = load i8, i8* %32, align 1                 ; [#uses = 1]
  %34 = zext i8 %33 to i32                        ; [#uses = 1]
  store i32 %34, i32* %31, align 4
  %35 = icmp ugt i64 %1, 3                        ; [#uses = 1]
  br i1 %35, label %bounds.ok9.i.2, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok9.i.2:                                   ; preds = %bounds.ok2.i.2
  %36 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %37 = load i8, i8* %36, align 1                 ; [#uses = 1]
  %38 = and i8 %37, -64                           ; [#uses = 1]
  %39 = icmp eq i8 %38, -128                      ; [#uses = 1]
  br i1 %39, label %bounds.ok.i.3, label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit

bounds.ok.i.3:                                    ; preds = %bounds.ok9.i.2
  %exitcond.not.i.3 = icmp eq i64 %1, 3           ; [#uses = 1]
  br i1 %exitcond.not.i.3, label %bounds.fail3.i, label %bounds.ok2.i.3

bounds.ok2.i.3:                                   ; preds = %bounds.ok.i.3
  %40 = getelementptr inbounds [4 x i32], [4 x i32]* %sequence.i, i64 0, i64 3 ; [#uses = 1, type = i32*]
  %41 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %42 = load i8, i8* %41, align 1                 ; [#uses = 1]
  %43 = zext i8 %42 to i32                        ; [#uses = 1]
  store i32 %43, i32* %40, align 4
  br label %_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ__T9exceptionTQBbZQpFNaNbNfQBoQDrZCQFuQFt12UTFException.exit
}

; [#uses = 6]
; Function Attrs: uwtable
declare noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class*) local_unnamed_addr #1

; [#uses = 3]
declare %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk(%std.utf.UTFException* nonnull returned, %object.Throwable*, i64, { i64, i8* }, i64, { i64, i8* }) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T13_utfExceptionVEQBc8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDmFNaNfQCiwZw(i32 %c_arg, { i64, i8* } %msg_arg) local_unnamed_addr #2 {
  %.lval_copy_for_ImplicitByvalRewrite = alloca { i64, i8* }, align 8 ; [#uses = 3, size/byte = 16]
  %arrayliteral = alloca [1 x i32], align 4       ; [#uses = 1, size/byte = 4]
  %msg_arg.fca.0.extract = extractvalue { i64, i8* } %msg_arg, 0 ; [#uses = 1]
  %msg_arg.fca.1.extract = extractvalue { i64, i8* } %msg_arg, 1 ; [#uses = 1]
  %.newclass_gc_alloc = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std3utf12UTFException7__ClassZ) #1 ; [#uses = 4]
  %.newclass_gc = bitcast %object.Object* %.newclass_gc_alloc to %std.utf.UTFException* ; [#uses = 2]
  %vtbl = bitcast %object.Object* %.newclass_gc_alloc to [11 x i8*]** ; [#uses = 2]
  store [11 x i8*]* @_D3std3utf12UTFException6__vtblZ, [11 x i8*]** %vtbl, align 8
  %1 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %1, align 8
  %2 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 1 ; [#uses = 1, type = %object.Object*]
  %3 = bitcast %object.Object* %2 to i8*          ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(96) %3, i8* nonnull align 8 dereferenceable(96) bitcast ({ i64, i8* }* getelementptr inbounds (%std.utf.UTFException, %std.utf.UTFException* @_D3std3utf12UTFException6__initZ, i64 0, i32 2) to i8*), i64 96, i1 false)
  %msg.sroa.0.0..sroa_idx = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.lval_copy_for_ImplicitByvalRewrite, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %msg_arg.fca.0.extract, i64* %msg.sroa.0.0..sroa_idx, align 8
  %msg.sroa.2.0..sroa_idx1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.lval_copy_for_ImplicitByvalRewrite, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* %msg_arg.fca.1.extract, i8** %msg.sroa.2.0..sroa_idx1, align 8
  %4 = tail call %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCnQCmQCl(%std.utf.UTFException* nonnull returned %.newclass_gc, %object.Throwable* null, i64 2301, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.4, i32 0, i32 0) }, { i64, i8* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite) #4 ; [#uses = 0]
  %5 = load [11 x i8*]*, [11 x i8*]** %vtbl, align 8 ; [#uses = 1]
  %"setSequence@vtbl" = getelementptr inbounds [11 x i8*], [11 x i8*]* %5, i64 0, i64 10 ; [#uses = 1, type = i8**]
  %6 = bitcast i8** %"setSequence@vtbl" to %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** ; [#uses = 1]
  %7 = load %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })*, %std.utf.UTFException* (%std.utf.UTFException*, { i64, i32* })** %6, align 8 ; [#uses = 1]
  %8 = getelementptr inbounds [1 x i32], [1 x i32]* %arrayliteral, i64 0, i64 0 ; [#uses = 2, type = i32*]
  store i32 %c_arg, i32* %8, align 4
  %9 = insertvalue { i64, i32* } { i64 1, i32* undef }, i32* %8, 1 ; [#uses = 1]
  %10 = call %std.utf.UTFException* %7(%std.utf.UTFException* nonnull %.newclass_gc, { i64, i32* } %9) ; [#uses = 1]
  %11 = bitcast %std.utf.UTFException* %10 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %11) #3
  unreachable
}

; [#uses = 2]
declare %std.utf.UTFException* @_D3std3utf12UTFException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCnQCmQCl(%std.utf.UTFException* nonnull returned, %object.Throwable*, i64, { i64, i8* }, { i64, i8* }* byval align 8) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T3putTSQBf5stdio4File17LockingTextWriterTAaZQBrFNfKQBtQnZv({ i64, i8* } %e_arg, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  %e_arg.fca.0.extract = extractvalue { i64, i8* } %e_arg, 0 ; [#uses = 4]
  %e_arg.fca.1.extract = extractvalue { i64, i8* } %e_arg, 1 ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if.i.i, label %forcond.preheader.i.i

forcond.preheader.i.i:                            ; preds = %0
  %.not11.i.i = icmp eq i64 %e_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not11.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAaZQBtFNfKQBtKQoZv.exit, label %forbody.i.i

if.i.i:                                           ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %e_arg.fca.1.extract, i64 1, i64 %e_arg.fca.0.extract, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not.i.i = icmp eq i64 %8, %e_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAaZQBtFNfKQBtKQoZv.exit, label %if1.i.i

if1.i.i:                                          ; preds = %if.i.i
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

forbody.i.i:                                      ; preds = %forcond.preheader.i.i, %forbody.i.i
  %__key132.010.i.i = phi i64 [ %11, %forbody.i.i ], [ 0, %forcond.preheader.i.i ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %e_arg.fca.1.extract, i64 %__key132.010.i.i ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %10) #2
  %11 = add nuw i64 %__key132.010.i.i, 1          ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %11, %e_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAaZQBtFNfKQBtKQoZv.exit, label %forbody.i.i

_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAaZQBtFNfKQBtKQoZv.exit: ; preds = %forbody.i.i, %forcond.preheader.i.i, %if.i.i
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZQd({ i64, i8* } %buf_arg, i64 %value_arg) local_unnamed_addr #2 {
endif:
  %buf_arg.fca.0.extract = extractvalue { i64, i8* } %buf_arg, 0 ; [#uses = 4]
  %buf_arg.fca.1.extract = extractvalue { i64, i8* } %buf_arg, 1 ; [#uses = 2]
  %0 = icmp slt i64 %value_arg, 0                 ; [#uses = 2]
  %negval = sub i64 0, %value_arg                 ; [#uses = 1]
  %spec.select = select i1 %0, i64 %negval, i64 %value_arg ; [#uses = 1]
  br label %dowhile.i

dowhile.i:                                        ; preds = %bounds.ok.i, %endif
  %value.0.i = phi i64 [ %spec.select, %endif ], [ %value.1.i, %bounds.ok.i ] ; [#uses = 4, type = i64]
  %i.0.i = phi i64 [ %buf_arg.fca.0.extract, %endif ], [ %4, %bounds.ok.i ] ; [#uses = 1, type = i64]
  %1 = icmp ult i64 %value.0.i, 10                ; [#uses = 1]
  br i1 %1, label %endif.i, label %else.i

else.i:                                           ; preds = %dowhile.i
  %2 = urem i64 %value.0.i, 10                    ; [#uses = 1]
  %3 = udiv i64 %value.0.i, 10                    ; [#uses = 1]
  br label %endif.i

endif.i:                                          ; preds = %else.i, %dowhile.i
  %value.1.i = phi i64 [ %3, %else.i ], [ 0, %dowhile.i ] ; [#uses = 2, type = i64]
  %x.0.in.i = phi i64 [ %2, %else.i ], [ %value.0.i, %dowhile.i ] ; [#uses = 1, type = i64]
  %4 = add i64 %i.0.i, -1                         ; [#uses = 7]
  %bounds.cmp.i = icmp ugt i64 %buf_arg.fca.0.extract, %4 ; [#uses = 1]
  br i1 %bounds.cmp.i, label %bounds.ok.i, label %bounds.fail.i

bounds.ok.i:                                      ; preds = %endif.i
  %x.0.i = trunc i64 %x.0.in.i to i8              ; [#uses = 1]
  %5 = getelementptr inbounds i8, i8* %buf_arg.fca.1.extract, i64 %4 ; [#uses = 1, type = i8*]
  %6 = add nuw nsw i8 %x.0.i, 48                  ; [#uses = 1]
  store i8 %6, i8* %5, align 1
  %.not.i = icmp eq i64 %value.1.i, 0             ; [#uses = 1]
  br i1 %.not.i, label %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit, label %dowhile.i

bounds.fail.i:                                    ; preds = %endif.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 48, i64 %4, i64 %buf_arg.fca.0.extract) #3
  unreachable

_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit: ; preds = %bounds.ok.i
  %7 = getelementptr inbounds i8, i8* %buf_arg.fca.1.extract, i64 %4 ; [#uses = 2, type = i8*]
  %8 = sub i64 %buf_arg.fca.0.extract, %4         ; [#uses = 2]
  br i1 %0, label %if2, label %endif3

if2:                                              ; preds = %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit
  %9 = icmp sgt i64 %4, 0                         ; [#uses = 1]
  br i1 %9, label %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit, label %assertFailed.i

assertFailed.i:                                   ; preds = %if2
  tail call void @_d_assert({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 122) #3
  unreachable

_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit: ; preds = %if2
  %10 = getelementptr inbounds i8, i8* %7, i64 -1 ; [#uses = 2, type = i8*]
  %11 = add i64 %8, 1                             ; [#uses = 2]
  %bounds.cmp.not = icmp eq i64 %11, 0            ; [#uses = 1]
  br i1 %bounds.cmp.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit
  store i8 45, i8* %10, align 1
  br label %endif3

bounds.fail:                                      ; preds = %_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh.exit
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 124, i64 0, i64 0) #3
  unreachable

endif3:                                           ; preds = %bounds.ok, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit
  %r.sroa.6.0 = phi i8* [ %10, %bounds.ok ], [ %7, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit ] ; [#uses = 1, type = i8*]
  %r.sroa.0.0 = phi i64 [ %11, %bounds.ok ], [ %8, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit ] ; [#uses = 1, type = i64]
  %.fca.0.insert10 = insertvalue { i64, i8* } undef, i64 %r.sroa.0.0, 0 ; [#uses = 1]
  %.fca.1.insert19 = insertvalue { i64, i8* } %.fca.0.insert10, i8* %r.sroa.6.0, 1 ; [#uses = 1]
  ret { i64, i8* } %.fca.1.insert19
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd({ i64, i8* } %buf_arg, i64 %value_arg) local_unnamed_addr #2 {
  %buf_arg.fca.0.extract = extractvalue { i64, i8* } %buf_arg, 0 ; [#uses = 4]
  %buf_arg.fca.1.extract = extractvalue { i64, i8* } %buf_arg, 1 ; [#uses = 2]
  br label %dowhile

dowhile:                                          ; preds = %bounds.ok, %0
  %value.0 = phi i64 [ %value_arg, %0 ], [ %value.1, %bounds.ok ] ; [#uses = 4, type = i64]
  %i.0 = phi i64 [ %buf_arg.fca.0.extract, %0 ], [ %4, %bounds.ok ] ; [#uses = 1, type = i64]
  %1 = icmp ult i64 %value.0, 10                  ; [#uses = 1]
  br i1 %1, label %endif, label %else

else:                                             ; preds = %dowhile
  %2 = urem i64 %value.0, 10                      ; [#uses = 1]
  %3 = udiv i64 %value.0, 10                      ; [#uses = 1]
  br label %endif

endif:                                            ; preds = %dowhile, %else
  %value.1 = phi i64 [ %3, %else ], [ 0, %dowhile ] ; [#uses = 2, type = i64]
  %x.0.in = phi i64 [ %2, %else ], [ %value.0, %dowhile ] ; [#uses = 1, type = i64]
  %4 = add i64 %i.0, -1                           ; [#uses = 6]
  %bounds.cmp = icmp ugt i64 %buf_arg.fca.0.extract, %4 ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %endif
  %x.0 = trunc i64 %x.0.in to i8                  ; [#uses = 1]
  %5 = getelementptr inbounds i8, i8* %buf_arg.fca.1.extract, i64 %4 ; [#uses = 1, type = i8*]
  %6 = add nuw nsw i8 %x.0, 48                    ; [#uses = 1]
  store i8 %6, i8* %5, align 1
  %.not = icmp eq i64 %value.1, 0                 ; [#uses = 1]
  br i1 %.not, label %bounds.ok3, label %dowhile

bounds.fail:                                      ; preds = %endif
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 48, i64 %4, i64 %buf_arg.fca.0.extract) #3
  unreachable

bounds.ok3:                                       ; preds = %bounds.ok
  %7 = getelementptr inbounds i8, i8* %buf_arg.fca.1.extract, i64 %4 ; [#uses = 1, type = i8*]
  %8 = sub i64 %buf_arg.fca.0.extract, %4         ; [#uses = 1]
  %9 = insertvalue { i64, i8* } undef, i64 %8, 0  ; [#uses = 1]
  %10 = insertvalue { i64, i8* } %9, i8* %7, 1    ; [#uses = 1]
  ret { i64, i8* } %10
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D4core8internal6string__T18signedToTempStringVki10ZQBaFNaNbNiNflMNkAaZ12trustedSliceMFNaNbNiNeNkQBdZQBh(i8* nonnull %.nest_arg, { i64, i8* } %r_arg) local_unnamed_addr #2 {
  %r_arg.fca.1.extract = extractvalue { i64, i8* } %r_arg, 1 ; [#uses = 2]
  %1 = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %2 = bitcast i8* %1 to i8**                     ; [#uses = 1]
  %.ptr1 = load i8*, i8** %2, align 8             ; [#uses = 1]
  %3 = icmp ugt i8* %r_arg.fca.1.extract, %.ptr1  ; [#uses = 1]
  br i1 %3, label %assertPassed, label %assertFailed

assertPassed:                                     ; preds = %0
  %r_arg.fca.0.extract = extractvalue { i64, i8* } %r_arg, 0 ; [#uses = 1]
  %4 = getelementptr inbounds i8, i8* %r_arg.fca.1.extract, i64 -1 ; [#uses = 1, type = i8*]
  %5 = add i64 %r_arg.fca.0.extract, 1            ; [#uses = 1]
  %6 = insertvalue { i64, i8* } undef, i64 %5, 0  ; [#uses = 1]
  %7 = insertvalue { i64, i8* } %6, i8* %4, 1     ; [#uses = 1]
  ret { i64, i8* } %7

assertFailed:                                     ; preds = %0
  tail call void @_d_assert({ i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.8, i32 0, i32 0) }, i32 122) #3
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAaZQBtFNfKQBtKQoZv({ i64, i8* }* dereferenceable(16) %e, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  %.elt = getelementptr inbounds { i64, i8* }, { i64, i8* }* %e, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 4]
  %.elt1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %e, i64 0, i32 1 ; [#uses = 1, type = i8**]
  %.unpack2 = load i8*, i8** %.elt1, align 8      ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if.i, label %forcond.preheader.i

forcond.preheader.i:                              ; preds = %0
  %.not11.i = icmp eq i64 %.unpack, 0             ; [#uses = 1]
  br i1 %.not11.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAaZQiMFNfMQkZv.exit, label %forbody.i

if.i:                                             ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %.unpack2, i64 1, i64 %.unpack, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not.i = icmp eq i64 %8, %.unpack              ; [#uses = 1]
  br i1 %.not.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAaZQiMFNfMQkZv.exit, label %if1.i

if1.i:                                            ; preds = %if.i
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

forbody.i:                                        ; preds = %forcond.preheader.i, %forbody.i
  %__key132.010.i = phi i64 [ %11, %forbody.i ], [ 0, %forcond.preheader.i ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %.unpack2, i64 %__key132.010.i ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %10) #2
  %11 = add nuw i64 %__key132.010.i, 1            ; [#uses = 2]
  %exitcond.not.i = icmp eq i64 %11, %.unpack     ; [#uses = 1]
  br i1 %exitcond.not.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAaZQiMFNfMQkZv.exit, label %forbody.i

_D3std5stdio4File17LockingTextWriter__T3putTAaZQiMFNfMQkZv.exit: ; preds = %forbody.i, %forcond.preheader.i, %if.i
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File17LockingTextWriter__T3putTAaZQiMFNfMQkZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, { i64, i8* } %writeme_arg) local_unnamed_addr #2 {
  %writeme_arg.fca.0.extract = extractvalue { i64, i8* } %writeme_arg, 0 ; [#uses = 4]
  %writeme_arg.fca.1.extract = extractvalue { i64, i8* } %writeme_arg, 1 ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if, label %forcond.preheader

forcond.preheader:                                ; preds = %0
  %.not11 = icmp eq i64 %writeme_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not11, label %endif2, label %forbody

if:                                               ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %writeme_arg.fca.1.extract, i64 1, i64 %writeme_arg.fca.0.extract, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not = icmp eq i64 %8, %writeme_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not, label %endif2, label %if1

if1:                                              ; preds = %if
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

endif2:                                           ; preds = %forbody, %forcond.preheader, %if
  ret void

forbody:                                          ; preds = %forcond.preheader, %forbody
  %__key132.010 = phi i64 [ %11, %forbody ], [ 0, %forcond.preheader ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %writeme_arg.fca.1.extract, i64 %__key132.010 ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, i8 zeroext %10) #2
  %11 = add nuw i64 %__key132.010, 1              ; [#uses = 2]
  %exitcond.not = icmp eq i64 %11, %writeme_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %endif2, label %forbody
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std5stdio__T13trustedFwriteTaZQsFNbNiNePOS4core4stdcQBx8_IO_FILExAaZm({ i64, i8* } %obj_arg, %core.stdc.stdio._IO_FILE* %f_arg) local_unnamed_addr #2 {
  %obj_arg.fca.0.extract = extractvalue { i64, i8* } %obj_arg, 0 ; [#uses = 1]
  %obj_arg.fca.1.extract = extractvalue { i64, i8* } %obj_arg, 1 ; [#uses = 1]
  %1 = tail call i64 @fwrite(i8* %obj_arg.fca.1.extract, i64 1, i64 %obj_arg.fca.0.extract, %core.stdc.stdio._IO_FILE* %f_arg) #4 ; [#uses = 1]
  ret i64 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9exception__T7enforceHTCQBcQBb14ErrnoExceptionZ__TQBlTiZQBrFNfiLAxaAyamZi(i64 %line_arg, { i64, i8* } %file_arg, { i8*, { i64, i8* } (i8*)* } %msg_arg, i32 %value_arg) local_unnamed_addr #2 {
  %.not = icmp eq i32 %value_arg, 0               ; [#uses = 1]
  br i1 %.not, label %if, label %endif

if:                                               ; preds = %0
  %msg_arg.fca.1.extract = extractvalue { i8*, { i64, i8* } (i8*)* } %msg_arg, 1 ; [#uses = 1]
  %msg_arg.fca.0.extract = extractvalue { i8*, { i64, i8* } (i8*)* } %msg_arg, 0 ; [#uses = 1]
  %1 = tail call { i64, i8* } %msg_arg.fca.1.extract(i8* nonnull %msg_arg.fca.0.extract) ; [#uses = 1]
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } %1, i64 %line_arg, { i64, i8* } %file_arg) #14
  unreachable

endif:                                            ; preds = %0
  ret i32 %value_arg
}

; [#uses = 10]
; Function Attrs: nofree nounwind
declare i64 @fwrite(i8* nocapture, i64, i64, %core.stdc.stdio._IO_FILE* nocapture) local_unnamed_addr #10

; [#uses = 10]
; Function Attrs: noreturn uwtable
define weak_odr void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } %msg_arg, i64 %line_arg, { i64, i8* } %file_arg) local_unnamed_addr #11 {
  %msg_arg.fca.1.extract = extractvalue { i64, i8* } %msg_arg, 1 ; [#uses = 2]
  %.newclass_gc_alloc = tail call noalias %object.Object* @_d_allocclass(%object.TypeInfo_Class* nonnull @_D3std9exception14ErrnoException7__ClassZ) #1 ; [#uses = 5]
  %vtbl = bitcast %object.Object* %.newclass_gc_alloc to [10 x i8*]** ; [#uses = 1]
  store [10 x i8*]* @_D3std9exception14ErrnoException6__vtblZ, [10 x i8*]** %vtbl, align 8
  %1 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* null, i8** %1, align 8
  %2 = getelementptr inbounds %object.Object, %object.Object* %.newclass_gc_alloc, i64 1 ; [#uses = 1, type = %object.Object*]
  %3 = bitcast %object.Object* %2 to i8*          ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 dereferenceable(64) %3, i8* nonnull align 8 dereferenceable(64) bitcast ({ i64, i8* }* getelementptr inbounds (%std.exception.ErrnoException, %std.exception.ErrnoException* @_D3std9exception14ErrnoException6__initZ, i64 0, i32 2) to i8*), i64 64, i1 false)
  %.not = icmp eq i8* %msg_arg.fca.1.extract, null ; [#uses = 1]
  br i1 %.not, label %condend, label %condtrue

condtrue:                                         ; preds = %0
  %a_arg.fca.0.extract.i.i = extractvalue { i64, i8* } %msg_arg, 0 ; [#uses = 2]
  %4 = tail call { i64, i8* } @_d_newarrayU(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Axa6__initZ to %object.TypeInfo*), i64 %a_arg.fca.0.extract.i.i) #4 ; [#uses = 2]
  %.ptr.i.i = extractvalue { i64, i8* } %4, 1     ; [#uses = 2]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %.ptr.i.i, i8* nonnull align 1 %msg_arg.fca.1.extract, i64 %a_arg.fca.0.extract.i.i, i1 false) #4
  %.len = extractvalue { i64, i8* } %4, 0         ; [#uses = 1]
  br label %condend

condend:                                          ; preds = %0, %condtrue
  %condtmp.0.sroa.phi.sroa.speculated = phi i64 [ %.len, %condtrue ], [ 18, %0 ] ; [#uses = 1, type = i64]
  %condtmp.0.sroa.phi7.sroa.speculated = phi i8* [ %.ptr.i.i, %condtrue ], [ getelementptr inbounds ([19 x i8], [19 x i8]* @.str.9, i64 0, i64 0), %0 ] ; [#uses = 1, type = i8*]
  %.newclass_gc = bitcast %object.Object* %.newclass_gc_alloc to %std.exception.ErrnoException* ; [#uses = 1]
  %.fca.0.insert5 = insertvalue { i64, i8* } undef, i64 %condtmp.0.sroa.phi.sroa.speculated, 0 ; [#uses = 1]
  %.fca.1.insert6 = insertvalue { i64, i8* } %.fca.0.insert5, i8* %condtmp.0.sroa.phi7.sroa.speculated, 1 ; [#uses = 1]
  %5 = tail call %std.exception.ErrnoException* @_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp(%std.exception.ErrnoException* nonnull returned %.newclass_gc, i64 %line_arg, { i64, i8* } %file_arg, { i64, i8* } %.fca.1.insert6) #4 ; [#uses = 0]
  %6 = bitcast %object.Object* %.newclass_gc_alloc to %object.Throwable* ; [#uses = 1]
  tail call void @_d_throw_exception(%object.Throwable* %6) #3
  unreachable
}

; [#uses = 1]
declare %std.exception.ErrnoException* @_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp(%std.exception.ErrnoException* nonnull returned, i64, { i64, i8* }, { i64, i8* }) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T4idupTxaZQjFNaNbNdNfAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #2 {
  %a_arg.fca.0.extract.i = extractvalue { i64, i8* } %a_arg, 0 ; [#uses = 2]
  %a_arg.fca.1.extract.i = extractvalue { i64, i8* } %a_arg, 1 ; [#uses = 1]
  %1 = tail call { i64, i8* } @_d_newarrayU(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Axa6__initZ to %object.TypeInfo*), i64 %a_arg.fca.0.extract.i) #4 ; [#uses = 2]
  %.ptr.i = extractvalue { i64, i8* } %1, 1       ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %.ptr.i, i8* align 1 %a_arg.fca.1.extract.i, i64 %a_arg.fca.0.extract.i, i1 false) #4
  ret { i64, i8* } %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T4_dupTxaTyaZQmFNaNbNeMAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #2 {
  %a_arg.fca.0.extract = extractvalue { i64, i8* } %a_arg, 0 ; [#uses = 2]
  %a_arg.fca.1.extract = extractvalue { i64, i8* } %a_arg, 1 ; [#uses = 1]
  %1 = tail call { i64, i8* } @_d_newarrayU(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Axa6__initZ to %object.TypeInfo*), i64 %a_arg.fca.0.extract) #4 ; [#uses = 2]
  %.ptr = extractvalue { i64, i8* } %1, 1         ; [#uses = 1]
  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %.ptr, i8* align 1 %a_arg.fca.1.extract, i64 %a_arg.fca.0.extract, i1 false) #4
  ret { i64, i8* } %1
}

; [#uses = 3]
declare { i64, i8* } @_d_newarrayU(%object.TypeInfo*, i64) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T8_dupCtfeTxaTyaZQqFNaNbNfMAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #2 {
  %res = alloca { i64, i8* }, align 8             ; [#uses = 4, size/byte = 16]
  %a_arg.fca.0.extract = extractvalue { i64, i8* } %a_arg, 0 ; [#uses = 2]
  %a_arg.fca.1.extract = extractvalue { i64, i8* } %a_arg, 1 ; [#uses = 1]
  %.fca.0.gep = getelementptr inbounds { i64, i8* }, { i64, i8* }* %res, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %.fca.1.gep = getelementptr inbounds { i64, i8* }, { i64, i8* }* %res, i64 0, i32 1 ; [#uses = 2, type = i8**]
  %.not = icmp eq i64 %a_arg.fca.0.extract, 0     ; [#uses = 1]
  %1 = bitcast { i64, i8* }* %res to i8*          ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %1, i8 0, i64 16, i1 false)
  br i1 %.not, label %endfor, label %forbody

forbody:                                          ; preds = %0, %forbody
  %__key130.015 = phi i64 [ %4, %forbody ], [ 0, %0 ] ; [#uses = 2, type = i64]
  %2 = getelementptr inbounds i8, i8* %a_arg.fca.1.extract, i64 %__key130.015 ; [#uses = 1, type = i8*]
  %.appendedArray = call { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Aya6__initZ to %object.TypeInfo*), { i64, i8* }* nonnull dereferenceable(16) %res, i64 1) #1 ; [#uses = 0]
  %.len3 = load i64, i64* %.fca.0.gep, align 8    ; [#uses = 1]
  %.ptr4 = load i8*, i8** %.fca.1.gep, align 8    ; [#uses = 1]
  %.lastIndex = add i64 %.len3, -1                ; [#uses = 1]
  %.lastElem = getelementptr inbounds i8, i8* %.ptr4, i64 %.lastIndex ; [#uses = 1, type = i8*]
  %3 = load i8, i8* %2, align 1                   ; [#uses = 1]
  store i8 %3, i8* %.lastElem, align 1
  %4 = add nuw i64 %__key130.015, 1               ; [#uses = 2]
  %exitcond.not = icmp eq i64 %4, %a_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %endfor.loopexit, label %forbody

endfor.loopexit:                                  ; preds = %forbody
  %.fca.0.load.pre = load i64, i64* %.fca.0.gep, align 8 ; [#uses = 1]
  %.fca.1.load.pre = load i8*, i8** %.fca.1.gep, align 8 ; [#uses = 1]
  br label %endfor

endfor:                                           ; preds = %endfor.loopexit, %0
  %.fca.1.load = phi i8* [ %.fca.1.load.pre, %endfor.loopexit ], [ null, %0 ] ; [#uses = 1, type = i8*]
  %.fca.0.load = phi i64 [ %.fca.0.load.pre, %endfor.loopexit ], [ 0, %0 ] ; [#uses = 1, type = i64]
  %.fca.0.insert = insertvalue { i64, i8* } undef, i64 %.fca.0.load, 0 ; [#uses = 1]
  %.fca.1.insert14 = insertvalue { i64, i8* } %.fca.0.insert, i8* %.fca.1.load, 1 ; [#uses = 1]
  ret { i64, i8* } %.fca.1.insert14
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T5doPutTSQBh5stdio4File17LockingTextWriterTAyaZQBuFNfKQBuKQpZv({ i64, i8* }* dereferenceable(16) %e, %std.stdio.File.LockingTextWriter* dereferenceable(48) %r) local_unnamed_addr #2 {
  %.elt = getelementptr inbounds { i64, i8* }, { i64, i8* }* %e, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 4]
  %.elt1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %e, i64 0, i32 1 ; [#uses = 1, type = i8**]
  %.unpack2 = load i8*, i8** %.elt1, align 8      ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if.i, label %forcond.preheader.i

forcond.preheader.i:                              ; preds = %0
  %.not11.i = icmp eq i64 %.unpack, 0             ; [#uses = 1]
  br i1 %.not11.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv.exit, label %forbody.i

if.i:                                             ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %r, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %.unpack2, i64 1, i64 %.unpack, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not.i = icmp eq i64 %8, %.unpack              ; [#uses = 1]
  br i1 %.not.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv.exit, label %if1.i

if1.i:                                            ; preds = %if.i
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

forbody.i:                                        ; preds = %forcond.preheader.i, %forbody.i
  %__key138.010.i = phi i64 [ %11, %forbody.i ], [ 0, %forcond.preheader.i ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %.unpack2, i64 %__key138.010.i ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %10) #4
  %11 = add nuw i64 %__key138.010.i, 1            ; [#uses = 2]
  %exitcond.not.i = icmp eq i64 %11, %.unpack     ; [#uses = 1]
  br i1 %exitcond.not.i, label %_D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv.exit, label %forbody.i

_D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv.exit: ; preds = %forbody.i, %forcond.preheader.i, %if.i
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, { i64, i8* } %writeme_arg) local_unnamed_addr #2 {
  %writeme_arg.fca.0.extract = extractvalue { i64, i8* } %writeme_arg, 0 ; [#uses = 4]
  %writeme_arg.fca.1.extract = extractvalue { i64, i8* } %writeme_arg, 1 ; [#uses = 2]
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  br i1 %3, label %if, label %forcond.preheader

forcond.preheader:                                ; preds = %0
  %.not11 = icmp eq i64 %writeme_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not11, label %endif2, label %forbody

if:                                               ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %5 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %4, align 8 ; [#uses = 1]
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %5, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %7 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %6, align 8 ; [#uses = 1]
  %8 = tail call i64 @fwrite(i8* %writeme_arg.fca.1.extract, i64 1, i64 %writeme_arg.fca.0.extract, %core.stdc.stdio._IO_FILE* %7) #4 ; [#uses = 1]
  %.not = icmp eq i64 %8, %writeme_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not, label %endif2, label %if1

if1:                                              ; preds = %if
  tail call void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } zeroinitializer, i64 3263, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }) #14
  unreachable

endif2:                                           ; preds = %forbody, %forcond.preheader, %if
  ret void

forbody:                                          ; preds = %forcond.preheader, %forbody
  %__key138.010 = phi i64 [ %11, %forbody ], [ 0, %forcond.preheader ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %writeme_arg.fca.1.extract, i64 %__key138.010 ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, i8 zeroext %10) #4
  %11 = add nuw i64 %__key138.010, 1              ; [#uses = 2]
  %exitcond.not = icmp eq i64 %11, %writeme_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %endif2, label %forbody
}

; [#uses = 4]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg, i8 zeroext %c_arg) local_unnamed_addr #2 {
  %numCodeUnits.i = alloca i64, align 8           ; [#uses = 3, size/byte = 8]
  %str = alloca { i64, i8* }, align 8             ; [#uses = 3, size/byte = 16]
  %wbuf = alloca [1 x i32], align 4               ; [#uses = 2, size/byte = 4]
  tail call void @_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4
  %1 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 1 ; [#uses = 1, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 1]
  %3 = icmp slt i32 %2, 1                         ; [#uses = 1]
  %4 = zext i8 %c_arg to i32                      ; [#uses = 2]
  br i1 %3, label %if, label %else

if:                                               ; preds = %0
  %5 = tail call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %6 = tail call i32 @fputc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %5) #4 ; [#uses = 0]
  br label %endif

else:                                             ; preds = %0
  %7 = icmp sgt i8 %c_arg, -1                     ; [#uses = 1]
  br i1 %7, label %if1, label %else3

if1:                                              ; preds = %else
  %8 = tail call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %9 = tail call i32 @fputwc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %8) #4 ; [#uses = 0]
  br label %endif

else3:                                            ; preds = %else
  %10 = icmp ugt i8 %c_arg, -65                   ; [#uses = 1]
  %11 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 3 ; [#uses = 2, type = [4 x i8]*]
  br i1 %10, label %if4, label %else6

if4:                                              ; preds = %else3
  %12 = getelementptr inbounds [4 x i8], [4 x i8]* %11, i64 0, i64 0 ; [#uses = 1, type = i8*]
  store i8 %c_arg, i8* %12, align 1
  %13 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 5 ; [#uses = 1, type = i64*]
  store i64 1, i64* %13, align 8
  br label %endif

else6:                                            ; preds = %else3
  %14 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 5 ; [#uses = 5, type = i64*]
  %15 = load i64, i64* %14, align 8               ; [#uses = 3]
  %bounds.cmp = icmp ult i64 %15, 4               ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %else6
  %16 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %.this_arg, i64 0, i32 3, i64 %15 ; [#uses = 1, type = i8*]
  store i8 %c_arg, i8* %16, align 1
  %17 = load i64, i64* %14, align 8               ; [#uses = 1]
  %18 = add i64 %17, 1                            ; [#uses = 2]
  store i64 %18, i64* %14, align 8
  %19 = getelementptr [4 x i8], [4 x i8]* %11, i64 0, i64 0 ; [#uses = 2, type = i8*]
  %20 = load i8, i8* %19, align 1                 ; [#uses = 2]
  %21 = icmp sgt i8 %20, -1                       ; [#uses = 1]
  br i1 %21, label %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit, label %else.i

else.i:                                           ; preds = %bounds.ok
  %22 = tail call i32 @_D3std3utf10strideImplFNaNeamZk(i64 0, i8 zeroext %20) #4 ; [#uses = 1]
  %phi.cast = zext i32 %22 to i64                 ; [#uses = 1]
  %.pre = load i64, i64* %14, align 8             ; [#uses = 1]
  br label %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit

_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit:         ; preds = %bounds.ok, %else.i
  %23 = phi i64 [ %.pre, %else.i ], [ %18, %bounds.ok ] ; [#uses = 4, type = i64]
  %24 = phi i64 [ %phi.cast, %else.i ], [ 1, %bounds.ok ] ; [#uses = 1, type = i64]
  %25 = icmp eq i64 %23, %24                      ; [#uses = 1]
  br i1 %25, label %if7, label %endif

if7:                                              ; preds = %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit
  %bounds.cmp.up = icmp ult i64 %23, 5            ; [#uses = 1]
  br i1 %bounds.cmp.up, label %bounds.ok9, label %bounds.fail10

bounds.ok9:                                       ; preds = %if7
  %26 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %23, i64* %26, align 8
  %27 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %str, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* %19, i8** %27, align 8
  %28 = bitcast i64* %numCodeUnits.i to i8*       ; [#uses = 2]
  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull %28)
  store i64 0, i64* %numCodeUnits.i, align 8
  %29 = call i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNeKQmJmZw(i64* nonnull dereferenceable(8) %numCodeUnits.i, { i64, i8* }* nonnull dereferenceable(16) %str) #4 ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 8, i8* nonnull %28)
  %30 = getelementptr inbounds [1 x i32], [1 x i32]* %wbuf, i64 0, i64 0 ; [#uses = 2, type = i32*]
  store i32 65535, i32* %30, align 4
  %31 = call i64 @_D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG1wwZm(i32 %29, [1 x i32]* nonnull dereferenceable(4) %wbuf) #2 ; [#uses = 2]
  %.not = icmp eq i64 %31, 0                      ; [#uses = 1]
  br i1 %.not, label %endfor, label %forbody.lr.ph

forbody.lr.ph:                                    ; preds = %bounds.ok9
  %.not25 = icmp eq i64 %31, 1                    ; [#uses = 1]
  %32 = load i32, i32* %30, align 4               ; [#uses = 1]
  %33 = call %core.stdc.stdio._IO_FILE* @_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE(%std.stdio.File.LockingTextWriter* nonnull %.this_arg) #4 ; [#uses = 1]
  %34 = call i32 @fputwc_unlocked(i32 %32, %core.stdc.stdio._IO_FILE* %33) #4 ; [#uses = 0]
  br i1 %.not25, label %endfor, label %bounds.ok12.us

bounds.ok12.us:                                   ; preds = %forbody.lr.ph
  call void @_d_arraybounds_index({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3310, i64 1, i64 1) #3
  unreachable

endfor:                                           ; preds = %forbody.lr.ph, %bounds.ok9
  store i64 0, i64* %14, align 8
  br label %endif

bounds.fail10:                                    ; preds = %if7
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3305, i64 0, i64 %23, i64 4) #3
  unreachable

bounds.fail:                                      ; preds = %else6
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.3, i32 0, i32 0) }, i32 3301, i64 %15, i64 4) #3
  unreachable

endif:                                            ; preds = %if1, %_D3std3utf__T6strideTAaZQlFNaNfQkZk.exit, %endfor, %if4, %if
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZ12trustedFPUTCFNbNiNeiPS4core4stdcQDg8_IO_FILEZi(%core.stdc.stdio._IO_FILE* %h_arg, i32 %ch_arg) local_unnamed_addr #2 {
  %1 = tail call i32 @fputc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std5stdio4File17LockingTextWriter__T3putTyaZQiMFNfyaZ13trustedFPUTWCFNbNiNewPS4core4stdcQDh8_IO_FILEZw(%core.stdc.stdio._IO_FILE* %h_arg, i32 %ch_arg) local_unnamed_addr #2 {
  %1 = tail call i32 @fputwc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 11]
; Function Attrs: nofree nounwind
declare i32 @fgetc(%core.stdc.stdio._IO_FILE* nocapture) local_unnamed_addr #10

; [#uses = 2]
define linkonce_odr hidden void @ldc.register_dso() {
  %1 = alloca { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }, align 8 ; [#uses = 5, size/byte = 32]
  %2 = getelementptr inbounds { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }, { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }* %1, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 1, i64* %2, align 8
  %3 = getelementptr inbounds { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }, { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }* %1, i64 0, i32 1 ; [#uses = 1, type = i8***]
  store i8** @ldc.dso_slot, i8*** %3, align 8
  %4 = getelementptr inbounds { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }, { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }* %1, i64 0, i32 2 ; [#uses = 1, type = %object.ModuleInfo***]
  store %object.ModuleInfo** @__start___minfo, %object.ModuleInfo*** %4, align 8
  %5 = getelementptr inbounds { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }, { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }* %1, i64 0, i32 3 ; [#uses = 1, type = %object.ModuleInfo***]
  store %object.ModuleInfo** @__stop___minfo, %object.ModuleInfo*** %5, align 8
  %6 = bitcast { i64, i8**, %object.ModuleInfo**, %object.ModuleInfo** }* %1 to i8* ; [#uses = 1]
  call void @_d_dso_registry(i8* nonnull %6)
  ret void
}

; [#uses = 1]
; Function Attrs: uwtable
declare void @_d_dso_registry(i8*) local_unnamed_addr #1

; [#uses = 7]
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #8

; [#uses = 5]
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #8

; [#uses = 2]
; Function Attrs: argmemonly nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #12

attributes #0 = { uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16,+cx16" }
attributes #1 = { uwtable }
attributes #2 = { uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #3 = { cold noreturn uwtable }
attributes #4 = { "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #5 = { nofree nounwind uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #6 = { norecurse nounwind readonly uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #7 = { nounwind uwtable }
attributes #8 = { argmemonly nounwind willreturn }
attributes #9 = { nounwind readnone }
attributes #10 = { nofree nounwind "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #11 = { noreturn uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #12 = { argmemonly nounwind willreturn writeonly }
attributes #13 = { nounwind "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #14 = { noreturn "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }

!llvm.ldc.typeinfo._D12TypeInfo_AAi6__initZ = !{!0}
!llvm.ldc.typeinfo._D11TypeInfo_Ai6__initZ = !{!1}
!llvm.ldc.typeinfo._D12TypeInfo_Aya6__initZ = !{!2}
!llvm.ldc.typeinfo._D3std3utf12UTFException7__ClassZ = !{!3}
!llvm.ldc.classinfo._D3std3utf12UTFException7__ClassZ = !{!4}
!llvm.ldc.typeinfo._D3std9exception14ErrnoException7__ClassZ = !{!5}
!llvm.ldc.classinfo._D3std9exception14ErrnoException7__ClassZ = !{!6}
!llvm.ldc.typeinfo._D12TypeInfo_Axa6__initZ = !{!2}
!llvm.ident = !{!7}

!0 = !{{ i64, { i64, i32* }* } undef}
!1 = !{{ i64, i32* } undef}
!2 = !{{ i64, i8* } undef}
!3 = !{%std.utf.UTFException* undef}
!4 = !{%std.utf.UTFException undef, i1 false}
!5 = !{%std.exception.ErrnoException* undef}
!6 = !{%std.exception.ErrnoException undef, i1 false}
!7 = !{!"ldc version 1.28.0"}
