import std.algorithm;
import std.array;
import std.bitmanip;
import std.container;
import std.conv;
import std.functional;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
    auto n = readln.chomp;
    
    int[10] cnt;
    
    foreach (i, ref e; cnt) {
        e = cast(int) n.count!(c => c - '0' == i);
    }
    
    debug { writeln(cnt); }
    
    long[20][20] binom;
    binom[0][0] = 1;
    foreach (i; 1..20) {
        foreach (j; 0..20) {
            binom[i][j] = binom[i-1][j] + (j > 0 ? binom[i-1][j-1] : 0);
        }
    }
    
    debug { binom.each!writeln; }
    
    bool next_variant(ref int[10] lim) {
        foreach_reverse (i; 0..10) {
            if (cnt[i] == 0) continue;
            
            if (lim[i] < cnt[i]) {
                ++lim[i];
                return true;
            } else {
                lim[i] = 1;
            }
        }
        return false;
    }
    
    int[10] lim;
    foreach (i; 0..10) if (cnt[i] > 0) lim[i] = 1;
    
    long ans = 0;
    do {    
        int left = sum(lim[0..$]);
        
        long cur = binom[left - 1][lim[0]];
        left -= lim[0];
        foreach (e; lim[1..10]) {
            cur *= binom[left][e];
            left -= e;
        }
        ans += cur;
    } while (next_variant(lim));
    
    ans.writeln;
}
; ModuleID = '/data/TheStack_IR/OJ_Samples/Collated/D/Source_1375/source.d'
source_filename = "/data/TheStack_IR/OJ_Samples/Collated/D/Source_1375/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, [7 x 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.TypeInfo = type { [19 x i8*]*, i8* }
%object.Object = type { [5 x i8*]*, i8* }
%object.Exception = type <{ [10 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable*, i32 }>
%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 }>
%object.TypeInfo_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* }
%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 }>
%std.exception.ErrnoException = type <{ [10 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable*, i32, i32 }>
%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] }
%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] }
%nest.count = type { %nest.main*, i64 }
%nest.main = type { i64, [10 x i32] }
%std.stdio.File.LockingTextWriter = type { %std.stdio.File, i32, i16, [4 x i8], [6 x i8], i64 }
%nest.decodeImpl = type { i8*, i64 }

@.str = private unnamed_addr constant [61 x i8] c"/data/TheStack_IR/OJ_Samples/Collated/D/Source_1375/source.d\00" ; [#uses = 1]
@.str.1 = private unnamed_addr constant [39 x i8] c"Attempt to read from an unopened file.\00" ; [#uses = 1]
@.str.2 = private unnamed_addr constant [52 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/stdio.d\00" ; [#uses = 1]
@_D9Exception7__ClassZ = external global %object.TypeInfo_Class ; [#uses = 1]
@_D9Exception6__vtblZ = external constant [10 x i8*] ; [#uses = 1]
@_D9Exception6__initZ = external local_unnamed_addr constant %object.Exception, align 8 ; [#uses = 1]
@.str.3 = private unnamed_addr constant [19 x i8] c"Enforcement failed\00" ; [#uses = 1]
@_D12TypeInfo_Axa6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@_D12TypeInfo_Aya6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@.str.5 = private unnamed_addr constant [55 x i8] c"Attempting to fetch the front of an empty array of int\00" ; [#uses = 1]
@.str.6 = private unnamed_addr constant [63 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/range/primitives.d\00" ; [#uses = 1]
@_D3std3utf12UTFException7__ClassZ = external global %object.TypeInfo_Class ; [#uses = 8]
@.str.7 = private unnamed_addr constant [50 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/utf.d\00" ; [#uses = 1]
@.str.8 = private unnamed_addr constant [23 x i8] c"Invalid UTF-8 sequence\00" ; [#uses = 1]
@.str.9 = 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.10 = private unnamed_addr constant [41 x i8] c"Encoding an invalid code point in UTF-32\00" ; [#uses = 1]
@.str.11 = 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]
@_D6source12__ModuleInfoZ = global %0 { i32 -2147483644, i32 0, [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 {
forbody:
  %__tmpfordtor218.i = alloca %std.stdio.File, align 8 ; [#uses = 5, size/byte = 24]
  %.frame.i = alloca %nest.count, align 8         ; [#uses = 3, size/byte = 16]
  %.frame = alloca %nest.main, align 8            ; [#uses = 22, size/byte = 48]
  %binom = alloca [20 x [20 x i64]], align 8      ; [#uses = 62, size/byte = 3200]
  %lim = alloca [10 x i32], align 4               ; [#uses = 21, size/byte = 40]
  %i = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 0 ; [#uses = 9, type = i64*]
  %0 = tail call { i64, i8* } @_D3std5stdio__T6readlnTAyaZQmFwZQj(i32 10) #4 ; [#uses = 1]
  %1 = tail call { i64, i8* } @_D3std6string__T5chompTAyaZQlFNaNbNiNfQpZQs({ i64, i8* } %0) #4 ; [#uses = 10]
  %2 = bitcast %nest.count* %.frame.i to i8*      ; [#uses = 21]
  %3 = getelementptr inbounds %nest.count, %nest.count* %.frame.i, i64 0, i32 0 ; [#uses = 10, type = %nest.main**]
  %result.i = getelementptr inbounds %nest.count, %nest.count* %.frame.i, i64 0, i32 1 ; [#uses = 20, type = i64*]
  %4 = insertvalue { i8*, i32 (i8*, i8*)* } undef, i8* %2, 0 ; [#uses = 1]
  %.func.i = insertvalue { i8*, i32 (i8*, i8*)* } %4, i32 (i8*, i8*)* bitcast (i32 (i8*, i32*)* @_D3std9algorithm9searching__T5countS6source4mainFZ9__lambda7TAyaZQBkMFQjZ14__foreachbody3MFNaNbNiNfKwZi to i32 (i8*, i8*)*), 1 ; [#uses = 10]
  %5 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 0 ; [#uses = 2, type = i32*]
  %6 = bitcast %nest.main* %.frame to i8*         ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(48) %6, i8 0, i64 48, i1 false)
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %7 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %8 = load i64, i64* %result.i, align 8          ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %9 = trunc i64 %8 to i32                        ; [#uses = 1]
  store i32 %9, i32* %5, align 8
  %10 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 1 ; [#uses = 2, type = i32*]
  store i64 1, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %11 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %12 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %13 = trunc i64 %12 to i32                      ; [#uses = 1]
  store i32 %13, i32* %10, align 4
  %14 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 2 ; [#uses = 2, type = i32*]
  store i64 2, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %15 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %16 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %17 = trunc i64 %16 to i32                      ; [#uses = 1]
  store i32 %17, i32* %14, align 8
  %18 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 3 ; [#uses = 2, type = i32*]
  store i64 3, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %19 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %20 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %21 = trunc i64 %20 to i32                      ; [#uses = 1]
  store i32 %21, i32* %18, align 4
  %22 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 4 ; [#uses = 2, type = i32*]
  store i64 4, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %23 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %24 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %25 = trunc i64 %24 to i32                      ; [#uses = 1]
  store i32 %25, i32* %22, align 8
  %26 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 5 ; [#uses = 2, type = i32*]
  store i64 5, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %27 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %28 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %29 = trunc i64 %28 to i32                      ; [#uses = 1]
  store i32 %29, i32* %26, align 4
  %30 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 6 ; [#uses = 2, type = i32*]
  store i64 6, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %31 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %32 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %33 = trunc i64 %32 to i32                      ; [#uses = 1]
  store i32 %33, i32* %30, align 8
  %34 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 7 ; [#uses = 2, type = i32*]
  store i64 7, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %35 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %36 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %37 = trunc i64 %36 to i32                      ; [#uses = 1]
  store i32 %37, i32* %34, align 4
  %38 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 8 ; [#uses = 2, type = i32*]
  store i64 8, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %39 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %40 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %41 = trunc i64 %40 to i32                      ; [#uses = 1]
  store i32 %41, i32* %38, align 8
  %42 = getelementptr inbounds %nest.main, %nest.main* %.frame, i64 0, i32 1, i64 9 ; [#uses = 1, type = i32*]
  store i64 9, i64* %i, align 8
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  store %nest.main* %.frame, %nest.main** %3, align 8
  store i64 0, i64* %result.i, align 8
  %43 = call i32 @_aApplycd1({ i64, i8* } %1, { i8*, i32 (i8*, i8*)* } %.func.i) #4 ; [#uses = 0]
  %44 = load i64, i64* %result.i, align 8         ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  %45 = trunc i64 %44 to i32                      ; [#uses = 4]
  store i32 %45, i32* %42, align 4
  %46 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 0, i64 1 ; [#uses = 1, type = i64*]
  %47 = bitcast i64* %46 to i8*                   ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(3200) %47, i8 0, i64 3192, i1 false)
  %48 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 0, i64 0 ; [#uses = 1, type = i64*]
  store i64 1, i64* %48, align 8
  br label %condend.us.us.19

endfor6:                                          ; preds = %condend.us.us.19
  %49 = bitcast [10 x i32]* %lim to i8*           ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 4 dereferenceable(40) %49, i8 0, i64 40, i1 false)
  %50 = load i32, i32* %5, align 8                ; [#uses = 4]
  %51 = icmp sgt i32 %50, 0                       ; [#uses = 1]
  br i1 %51, label %bounds.ok36, label %forinc29

dowhile.us.preheader:                             ; preds = %forinc29.9
  %52 = zext i32 %287 to i64                      ; [#uses = 1]
  %53 = add nuw nsw i32 %256, %108                ; [#uses = 1]
  %54 = add nuw nsw i32 %260, %53                 ; [#uses = 1]
  %55 = add nuw nsw i32 %264, %54                 ; [#uses = 1]
  %56 = add nuw nsw i32 %268, %55                 ; [#uses = 1]
  %57 = add nuw nsw i32 %272, %56                 ; [#uses = 1]
  %58 = add i32 %276, %57                         ; [#uses = 1]
  %59 = add i32 %280, %58                         ; [#uses = 1]
  %60 = add i32 %284, %59                         ; [#uses = 1]
  %61 = add i32 %287, %60                         ; [#uses = 2]
  %62 = add i32 %61, -1                           ; [#uses = 2]
  %63 = sext i32 %62 to i64                       ; [#uses = 2]
  %bounds.cmp38.us277 = icmp ult i32 %62, 20      ; [#uses = 1]
  br i1 %bounds.cmp38.us277, label %bounds.ok39.us, label %bounds.fail40

bounds.ok39.us:                                   ; preds = %dowhile.us.preheader, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us
  %64 = phi i64 [ %100, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %63, %dowhile.us.preheader ] ; [#uses = 1, type = i64]
  %65 = phi i32 [ %98, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %61, %dowhile.us.preheader ] ; [#uses = 1, type = i32]
  %ans.0.us278 = phi i64 [ %206, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ 0, %dowhile.us.preheader ] ; [#uses = 1, type = i64]
  %66 = phi i32 [ %.pre198, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %108, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %67 = phi i32 [ %.pre199, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %256, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %68 = phi i32 [ %.pre200, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %260, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %69 = phi i32 [ %.pre201, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %264, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %70 = phi i32 [ %.pre202, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %268, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %71 = phi i32 [ %.pre203, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %272, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %72 = phi i32 [ %.pre204, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %276, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %73 = phi i32 [ %.pre205, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %280, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %74 = phi i32 [ %.pre206, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %284, %dowhile.us.preheader ] ; [#uses = 6, type = i32]
  %bounds.cmp41.us = icmp ult i32 %66, 20         ; [#uses = 1]
  br i1 %bounds.cmp41.us, label %bounds.ok42.us, label %bounds.fail43

bounds.ok42.us:                                   ; preds = %bounds.ok39.us
  %75 = zext i32 %66 to i64                       ; [#uses = 1]
  %76 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %64, i64 %75 ; [#uses = 1, type = i64*]
  %77 = load i64, i64* %76, align 8               ; [#uses = 1]
  %78 = sub nsw i32 %65, %66                      ; [#uses = 3]
  %79 = sext i32 %78 to i64                       ; [#uses = 2]
  %bounds.cmp52.us = icmp ult i32 %78, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.us, label %bounds.ok53.us, label %bounds.fail54

bounds.ok2.1.i.us:                                ; preds = %bounds.ok56.us.8
  %80 = icmp slt i32 %74, %281                    ; [#uses = 1]
  br i1 %80, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.1.i.us

bounds.ok14.1.i.us:                               ; preds = %bounds.ok2.1.i.us
  store i32 1, i32* %292, align 4
  br label %bounds.ok.2.i.us

bounds.ok.2.i.us:                                 ; preds = %bounds.ok14.1.i.us, %bounds.ok56.us.8
  br i1 %293, label %bounds.ok.3.i.us, label %bounds.ok2.2.i.us

bounds.ok2.2.i.us:                                ; preds = %bounds.ok.2.i.us
  %81 = icmp slt i32 %73, %277                    ; [#uses = 1]
  br i1 %81, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.2.i.us

bounds.ok14.2.i.us:                               ; preds = %bounds.ok2.2.i.us
  store i32 1, i32* %294, align 4
  br label %bounds.ok.3.i.us

bounds.ok.3.i.us:                                 ; preds = %bounds.ok14.2.i.us, %bounds.ok.2.i.us
  br i1 %295, label %bounds.ok.4.i.us, label %bounds.ok2.3.i.us

bounds.ok2.3.i.us:                                ; preds = %bounds.ok.3.i.us
  %82 = icmp slt i32 %72, %273                    ; [#uses = 1]
  br i1 %82, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.3.i.us

bounds.ok14.3.i.us:                               ; preds = %bounds.ok2.3.i.us
  store i32 1, i32* %296, align 4
  br label %bounds.ok.4.i.us

bounds.ok.4.i.us:                                 ; preds = %bounds.ok14.3.i.us, %bounds.ok.3.i.us
  br i1 %297, label %bounds.ok.5.i.us, label %bounds.ok2.4.i.us

bounds.ok2.4.i.us:                                ; preds = %bounds.ok.4.i.us
  %83 = icmp slt i32 %71, %269                    ; [#uses = 1]
  br i1 %83, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.4.i.us

bounds.ok14.4.i.us:                               ; preds = %bounds.ok2.4.i.us
  store i32 1, i32* %298, align 4
  br label %bounds.ok.5.i.us

bounds.ok.5.i.us:                                 ; preds = %bounds.ok14.4.i.us, %bounds.ok.4.i.us
  br i1 %299, label %bounds.ok.6.i.us, label %bounds.ok2.5.i.us

bounds.ok2.5.i.us:                                ; preds = %bounds.ok.5.i.us
  %84 = icmp slt i32 %70, %265                    ; [#uses = 1]
  br i1 %84, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.5.i.us

bounds.ok14.5.i.us:                               ; preds = %bounds.ok2.5.i.us
  store i32 1, i32* %300, align 4
  br label %bounds.ok.6.i.us

bounds.ok.6.i.us:                                 ; preds = %bounds.ok14.5.i.us, %bounds.ok.5.i.us
  br i1 %301, label %bounds.ok.7.i.us, label %bounds.ok2.6.i.us

bounds.ok2.6.i.us:                                ; preds = %bounds.ok.6.i.us
  %85 = icmp slt i32 %69, %261                    ; [#uses = 1]
  br i1 %85, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.6.i.us

bounds.ok14.6.i.us:                               ; preds = %bounds.ok2.6.i.us
  store i32 1, i32* %302, align 4
  br label %bounds.ok.7.i.us

bounds.ok.7.i.us:                                 ; preds = %bounds.ok14.6.i.us, %bounds.ok.6.i.us
  br i1 %303, label %bounds.ok.8.i.us, label %bounds.ok2.7.i.us

bounds.ok2.7.i.us:                                ; preds = %bounds.ok.7.i.us
  %86 = icmp slt i32 %68, %257                    ; [#uses = 1]
  br i1 %86, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.7.i.us

bounds.ok14.7.i.us:                               ; preds = %bounds.ok2.7.i.us
  store i32 1, i32* %304, align 4
  br label %bounds.ok.8.i.us

bounds.ok.8.i.us:                                 ; preds = %bounds.ok14.7.i.us, %bounds.ok.7.i.us
  br i1 %305, label %bounds.ok.9.i.us, label %bounds.ok2.8.i.us

bounds.ok2.8.i.us:                                ; preds = %bounds.ok.8.i.us
  %87 = icmp slt i32 %67, %109                    ; [#uses = 1]
  br i1 %87, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.8.i.us

bounds.ok14.8.i.us:                               ; preds = %bounds.ok2.8.i.us
  store i32 1, i32* %lowerbound44, align 4
  br label %bounds.ok.9.i.us

bounds.ok.9.i.us:                                 ; preds = %bounds.ok14.8.i.us, %bounds.ok.8.i.us
  br i1 %306, label %enddowhile, label %bounds.ok2.9.i.us

bounds.ok2.9.i.us:                                ; preds = %bounds.ok.9.i.us
  %88 = icmp slt i32 %66, %50                     ; [#uses = 1]
  br i1 %88, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, label %bounds.ok14.9.i

_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us: ; preds = %bounds.ok2.9.i.us, %bounds.ok2.8.i.us, %bounds.ok2.7.i.us, %bounds.ok2.6.i.us, %bounds.ok2.5.i.us, %bounds.ok2.4.i.us, %bounds.ok2.3.i.us, %bounds.ok2.2.i.us, %bounds.ok2.1.i.us
  %.lcssa26.i.us = phi i32* [ %292, %bounds.ok2.1.i.us ], [ %294, %bounds.ok2.2.i.us ], [ %296, %bounds.ok2.3.i.us ], [ %298, %bounds.ok2.4.i.us ], [ %300, %bounds.ok2.5.i.us ], [ %302, %bounds.ok2.6.i.us ], [ %304, %bounds.ok2.7.i.us ], [ %lowerbound44, %bounds.ok2.8.i.us ], [ %288, %bounds.ok2.9.i.us ] ; [#uses = 1, type = i32*]
  %.lcssa.i.us = phi i32 [ %74, %bounds.ok2.1.i.us ], [ %73, %bounds.ok2.2.i.us ], [ %72, %bounds.ok2.3.i.us ], [ %71, %bounds.ok2.4.i.us ], [ %70, %bounds.ok2.5.i.us ], [ %69, %bounds.ok2.6.i.us ], [ %68, %bounds.ok2.7.i.us ], [ %67, %bounds.ok2.8.i.us ], [ %66, %bounds.ok2.9.i.us ] ; [#uses = 1, type = i32]
  %89 = add nuw nsw i32 %.lcssa.i.us, 1           ; [#uses = 1]
  store i32 %89, i32* %.lcssa26.i.us, align 4
  %.pre198 = load i32, i32* %288, align 4         ; [#uses = 2]
  %.pre199 = load i32, i32* %lowerbound44, align 4 ; [#uses = 2]
  %.pre200 = load i32, i32* %304, align 4         ; [#uses = 2]
  %.pre201 = load i32, i32* %302, align 4         ; [#uses = 2]
  %.pre202 = load i32, i32* %300, align 4         ; [#uses = 2]
  %.pre203 = load i32, i32* %298, align 4         ; [#uses = 2]
  %.pre204 = load i32, i32* %296, align 4         ; [#uses = 2]
  %.pre205 = load i32, i32* %294, align 4         ; [#uses = 2]
  %.pre206 = load i32, i32* %292, align 4         ; [#uses = 2]
  %90 = add i32 %.pre199, %.pre198                ; [#uses = 1]
  %91 = add i32 %.pre200, %90                     ; [#uses = 1]
  %92 = add i32 %.pre201, %91                     ; [#uses = 1]
  %93 = add i32 %.pre202, %92                     ; [#uses = 1]
  %94 = add i32 %.pre203, %93                     ; [#uses = 1]
  %95 = add i32 %.pre204, %94                     ; [#uses = 1]
  %96 = add i32 %.pre205, %95                     ; [#uses = 1]
  %97 = add i32 %.pre206, %96                     ; [#uses = 1]
  %98 = add i32 %287, %97                         ; [#uses = 2]
  %99 = add i32 %98, -1                           ; [#uses = 2]
  %100 = sext i32 %99 to i64                      ; [#uses = 2]
  %bounds.cmp38.us = icmp ult i32 %99, 20         ; [#uses = 1]
  br i1 %bounds.cmp38.us, label %bounds.ok39.us, label %bounds.fail40

bounds.ok53.us:                                   ; preds = %bounds.ok42.us
  %bounds.cmp55.us = icmp ult i32 %67, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.us, label %bounds.ok56.us, label %bounds.fail57

bounds.ok56.us:                                   ; preds = %bounds.ok53.us
  %101 = zext i32 %67 to i64                      ; [#uses = 1]
  %102 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %79, i64 %101 ; [#uses = 1, type = i64*]
  %103 = load i64, i64* %102, align 8             ; [#uses = 1]
  %104 = mul i64 %103, %77                        ; [#uses = 1]
  %105 = sub nsw i32 %78, %67                     ; [#uses = 3]
  %106 = sext i32 %105 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.1 = icmp ult i32 %105, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.1, label %bounds.ok53.us.1, label %bounds.fail54

bounds.ok36:                                      ; preds = %endfor6
  %107 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 0 ; [#uses = 1, type = i32*]
  store i32 1, i32* %107, align 4
  br label %forinc29

forinc29:                                         ; preds = %endfor6, %bounds.ok36
  %108 = phi i32 [ 0, %endfor6 ], [ 1, %bounds.ok36 ] ; [#uses = 4, type = i32]
  %109 = load i32, i32* %10, align 4              ; [#uses = 4]
  %110 = icmp sgt i32 %109, 0                     ; [#uses = 1]
  br i1 %110, label %bounds.ok36.1, label %forinc29.1

bounds.ok39:                                      ; preds = %dowhile.preheader, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit
  %111 = phi i64 [ %155, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %317, %dowhile.preheader ] ; [#uses = 1, type = i64]
  %112 = phi i32 [ %153, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %315, %dowhile.preheader ] ; [#uses = 1, type = i32]
  %ans.0280 = phi i64 [ %253, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ 0, %dowhile.preheader ] ; [#uses = 1, type = i64]
  %113 = phi i32 [ %.pre, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %108, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %114 = phi i32 [ %.pre189, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %256, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %115 = phi i32 [ %.pre190, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %260, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %116 = phi i32 [ %.pre191, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %264, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %117 = phi i32 [ %.pre192, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %268, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %118 = phi i32 [ %.pre193, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %272, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %119 = phi i32 [ %.pre194, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %276, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %120 = phi i32 [ %.pre195, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %280, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %121 = phi i32 [ %.pre196, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %284, %dowhile.preheader ] ; [#uses = 6, type = i32]
  %122 = phi i32 [ %.pre197, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ], [ %287, %dowhile.preheader ] ; [#uses = 5, type = i32]
  %bounds.cmp41 = icmp ult i32 %113, 20           ; [#uses = 1]
  br i1 %bounds.cmp41, label %bounds.ok42, label %bounds.fail43

bounds.ok42:                                      ; preds = %bounds.ok39
  %123 = zext i32 %113 to i64                     ; [#uses = 1]
  %124 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %111, i64 %123 ; [#uses = 1, type = i64*]
  %125 = load i64, i64* %124, align 8             ; [#uses = 1]
  %126 = sub nsw i32 %112, %113                   ; [#uses = 3]
  %127 = sext i32 %126 to i64                     ; [#uses = 2]
  %bounds.cmp52 = icmp ult i32 %126, 20           ; [#uses = 1]
  br i1 %bounds.cmp52, label %bounds.ok53, label %bounds.fail54

bounds.ok53:                                      ; preds = %bounds.ok42
  %bounds.cmp55 = icmp ult i32 %114, 20           ; [#uses = 1]
  br i1 %bounds.cmp55, label %bounds.ok56, label %bounds.fail57

bounds.ok56:                                      ; preds = %bounds.ok53
  %128 = zext i32 %114 to i64                     ; [#uses = 1]
  %129 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %127, i64 %128 ; [#uses = 1, type = i64*]
  %130 = load i64, i64* %129, align 8             ; [#uses = 1]
  %131 = mul i64 %130, %125                       ; [#uses = 1]
  %132 = sub nsw i32 %126, %114                   ; [#uses = 3]
  %133 = sext i32 %132 to i64                     ; [#uses = 2]
  %bounds.cmp52.1 = icmp ult i32 %132, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.1, label %bounds.ok53.1, label %bounds.fail54

bounds.fail57:                                    ; preds = %bounds.ok53, %bounds.ok53.1, %bounds.ok53.2, %bounds.ok53.3, %bounds.ok53.4, %bounds.ok53.5, %bounds.ok53.6, %bounds.ok53.7, %bounds.ok53.8, %bounds.ok53.us, %bounds.ok53.us.1, %bounds.ok53.us.2, %bounds.ok53.us.3, %bounds.ok53.us.4, %bounds.ok53.us.5, %bounds.ok53.us.6, %bounds.ok53.us.7
  %.lcssa130 = phi i32 [ %67, %bounds.ok53.us ], [ %68, %bounds.ok53.us.1 ], [ %69, %bounds.ok53.us.2 ], [ %70, %bounds.ok53.us.3 ], [ %71, %bounds.ok53.us.4 ], [ %72, %bounds.ok53.us.5 ], [ %73, %bounds.ok53.us.6 ], [ %74, %bounds.ok53.us.7 ], [ %122, %bounds.ok53.8 ], [ %121, %bounds.ok53.7 ], [ %120, %bounds.ok53.6 ], [ %119, %bounds.ok53.5 ], [ %118, %bounds.ok53.4 ], [ %117, %bounds.ok53.3 ], [ %116, %bounds.ok53.2 ], [ %115, %bounds.ok53.1 ], [ %114, %bounds.ok53 ] ; [#uses = 1, type = i32]
  %134 = sext i32 %.lcssa130 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 59, i64 %134, i64 20) #3
  unreachable

bounds.fail54:                                    ; preds = %bounds.ok42, %bounds.ok56, %bounds.ok56.1, %bounds.ok56.2, %bounds.ok56.3, %bounds.ok56.4, %bounds.ok56.5, %bounds.ok56.6, %bounds.ok56.7, %bounds.ok42.us, %bounds.ok56.us, %bounds.ok56.us.1, %bounds.ok56.us.2, %bounds.ok56.us.3, %bounds.ok56.us.4, %bounds.ok56.us.5, %bounds.ok56.us.6, %bounds.ok56.us.7
  %.lcssa100 = phi i64 [ %198, %bounds.ok56.us.7 ], [ %196, %bounds.ok56.us.6 ], [ %190, %bounds.ok56.us.5 ], [ %184, %bounds.ok56.us.4 ], [ %178, %bounds.ok56.us.3 ], [ %172, %bounds.ok56.us.2 ], [ %166, %bounds.ok56.us.1 ], [ %106, %bounds.ok56.us ], [ %79, %bounds.ok42.us ], [ %248, %bounds.ok56.7 ], [ %242, %bounds.ok56.6 ], [ %236, %bounds.ok56.5 ], [ %230, %bounds.ok56.4 ], [ %224, %bounds.ok56.3 ], [ %218, %bounds.ok56.2 ], [ %212, %bounds.ok56.1 ], [ %133, %bounds.ok56 ], [ %127, %bounds.ok42 ] ; [#uses = 1, type = i64]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i32 0, i32 0) }, i32 59, i64 %.lcssa100, i64 20) #3
  unreachable

bounds.ok14.i:                                    ; preds = %bounds.ok56.8
  store i32 1, i32* %290, align 4
  br i1 %291, label %bounds.ok.2.i, label %bounds.ok2.1.i

bounds.ok2.1.i:                                   ; preds = %bounds.ok14.i
  %135 = icmp slt i32 %121, %281                  ; [#uses = 1]
  br i1 %135, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.1.i

bounds.ok14.1.i:                                  ; preds = %bounds.ok2.1.i
  store i32 1, i32* %292, align 4
  br label %bounds.ok.2.i

bounds.ok.2.i:                                    ; preds = %bounds.ok14.1.i, %bounds.ok14.i
  br i1 %293, label %bounds.ok.3.i, label %bounds.ok2.2.i

bounds.ok2.2.i:                                   ; preds = %bounds.ok.2.i
  %136 = icmp slt i32 %120, %277                  ; [#uses = 1]
  br i1 %136, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.2.i

bounds.ok14.2.i:                                  ; preds = %bounds.ok2.2.i
  store i32 1, i32* %294, align 4
  br label %bounds.ok.3.i

bounds.ok.3.i:                                    ; preds = %bounds.ok14.2.i, %bounds.ok.2.i
  br i1 %295, label %bounds.ok.4.i, label %bounds.ok2.3.i

bounds.ok2.3.i:                                   ; preds = %bounds.ok.3.i
  %137 = icmp slt i32 %119, %273                  ; [#uses = 1]
  br i1 %137, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.3.i

bounds.ok14.3.i:                                  ; preds = %bounds.ok2.3.i
  store i32 1, i32* %296, align 4
  br label %bounds.ok.4.i

bounds.ok.4.i:                                    ; preds = %bounds.ok14.3.i, %bounds.ok.3.i
  br i1 %297, label %bounds.ok.5.i, label %bounds.ok2.4.i

bounds.ok2.4.i:                                   ; preds = %bounds.ok.4.i
  %138 = icmp slt i32 %118, %269                  ; [#uses = 1]
  br i1 %138, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.4.i

bounds.ok14.4.i:                                  ; preds = %bounds.ok2.4.i
  store i32 1, i32* %298, align 4
  br label %bounds.ok.5.i

bounds.ok.5.i:                                    ; preds = %bounds.ok14.4.i, %bounds.ok.4.i
  br i1 %299, label %bounds.ok.6.i, label %bounds.ok2.5.i

bounds.ok2.5.i:                                   ; preds = %bounds.ok.5.i
  %139 = icmp slt i32 %117, %265                  ; [#uses = 1]
  br i1 %139, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.5.i

bounds.ok14.5.i:                                  ; preds = %bounds.ok2.5.i
  store i32 1, i32* %300, align 4
  br label %bounds.ok.6.i

bounds.ok.6.i:                                    ; preds = %bounds.ok14.5.i, %bounds.ok.5.i
  br i1 %301, label %bounds.ok.7.i, label %bounds.ok2.6.i

bounds.ok2.6.i:                                   ; preds = %bounds.ok.6.i
  %140 = icmp slt i32 %116, %261                  ; [#uses = 1]
  br i1 %140, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.6.i

bounds.ok14.6.i:                                  ; preds = %bounds.ok2.6.i
  store i32 1, i32* %302, align 4
  br label %bounds.ok.7.i

bounds.ok.7.i:                                    ; preds = %bounds.ok14.6.i, %bounds.ok.6.i
  br i1 %303, label %bounds.ok.8.i, label %bounds.ok2.7.i

bounds.ok2.7.i:                                   ; preds = %bounds.ok.7.i
  %141 = icmp slt i32 %115, %257                  ; [#uses = 1]
  br i1 %141, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.7.i

bounds.ok14.7.i:                                  ; preds = %bounds.ok2.7.i
  store i32 1, i32* %304, align 4
  br label %bounds.ok.8.i

bounds.ok.8.i:                                    ; preds = %bounds.ok14.7.i, %bounds.ok.7.i
  br i1 %305, label %bounds.ok.9.i, label %bounds.ok2.8.i

bounds.ok2.8.i:                                   ; preds = %bounds.ok.8.i
  %142 = icmp slt i32 %114, %109                  ; [#uses = 1]
  br i1 %142, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.8.i

bounds.ok14.8.i:                                  ; preds = %bounds.ok2.8.i
  store i32 1, i32* %lowerbound44, align 4
  br label %bounds.ok.9.i

bounds.ok.9.i:                                    ; preds = %bounds.ok14.8.i, %bounds.ok.8.i
  br i1 %306, label %enddowhile, label %bounds.ok2.9.i

bounds.ok2.9.i:                                   ; preds = %bounds.ok.9.i
  %143 = icmp slt i32 %113, %50                   ; [#uses = 1]
  br i1 %143, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.9.i

bounds.ok14.9.i:                                  ; preds = %bounds.ok2.9.i, %bounds.ok2.9.i.us
  %.lcssa104 = phi i64 [ %206, %bounds.ok2.9.i.us ], [ %253, %bounds.ok2.9.i ] ; [#uses = 1, type = i64]
  store i32 1, i32* %288, align 4
  br label %enddowhile

_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit: ; preds = %bounds.ok56.8, %bounds.ok2.1.i, %bounds.ok2.2.i, %bounds.ok2.3.i, %bounds.ok2.4.i, %bounds.ok2.5.i, %bounds.ok2.6.i, %bounds.ok2.7.i, %bounds.ok2.8.i, %bounds.ok2.9.i
  %.lcssa26.i = phi i32* [ %290, %bounds.ok56.8 ], [ %292, %bounds.ok2.1.i ], [ %294, %bounds.ok2.2.i ], [ %296, %bounds.ok2.3.i ], [ %298, %bounds.ok2.4.i ], [ %300, %bounds.ok2.5.i ], [ %302, %bounds.ok2.6.i ], [ %304, %bounds.ok2.7.i ], [ %lowerbound44, %bounds.ok2.8.i ], [ %288, %bounds.ok2.9.i ] ; [#uses = 1, type = i32*]
  %.lcssa.i = phi i32 [ %122, %bounds.ok56.8 ], [ %121, %bounds.ok2.1.i ], [ %120, %bounds.ok2.2.i ], [ %119, %bounds.ok2.3.i ], [ %118, %bounds.ok2.4.i ], [ %117, %bounds.ok2.5.i ], [ %116, %bounds.ok2.6.i ], [ %115, %bounds.ok2.7.i ], [ %114, %bounds.ok2.8.i ], [ %113, %bounds.ok2.9.i ] ; [#uses = 1, type = i32]
  %144 = add nuw nsw i32 %.lcssa.i, 1             ; [#uses = 1]
  store i32 %144, i32* %.lcssa26.i, align 4
  %.pre = load i32, i32* %288, align 4            ; [#uses = 2]
  %.pre189 = load i32, i32* %lowerbound44, align 4 ; [#uses = 2]
  %.pre190 = load i32, i32* %304, align 4         ; [#uses = 2]
  %.pre191 = load i32, i32* %302, align 4         ; [#uses = 2]
  %.pre192 = load i32, i32* %300, align 4         ; [#uses = 2]
  %.pre193 = load i32, i32* %298, align 4         ; [#uses = 2]
  %.pre194 = load i32, i32* %296, align 4         ; [#uses = 2]
  %.pre195 = load i32, i32* %294, align 4         ; [#uses = 2]
  %.pre196 = load i32, i32* %292, align 4         ; [#uses = 2]
  %.pre197 = load i32, i32* %290, align 4         ; [#uses = 2]
  %145 = add i32 %.pre189, %.pre                  ; [#uses = 1]
  %146 = add i32 %.pre190, %145                   ; [#uses = 1]
  %147 = add i32 %.pre191, %146                   ; [#uses = 1]
  %148 = add i32 %.pre192, %147                   ; [#uses = 1]
  %149 = add i32 %.pre193, %148                   ; [#uses = 1]
  %150 = add i32 %.pre194, %149                   ; [#uses = 1]
  %151 = add i32 %.pre195, %150                   ; [#uses = 1]
  %152 = add i32 %.pre196, %151                   ; [#uses = 1]
  %153 = add i32 %.pre197, %152                   ; [#uses = 2]
  %154 = add i32 %153, -1                         ; [#uses = 2]
  %155 = sext i32 %154 to i64                     ; [#uses = 2]
  %bounds.cmp38 = icmp ult i32 %154, 20           ; [#uses = 1]
  br i1 %bounds.cmp38, label %bounds.ok39, label %bounds.fail40

bounds.fail43:                                    ; preds = %bounds.ok39, %bounds.ok39.us
  %.lcssa131 = phi i32 [ %66, %bounds.ok39.us ], [ %113, %bounds.ok39 ] ; [#uses = 1, type = i32]
  %156 = sext i32 %.lcssa131 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 56, i64 %156, i64 20) #3
  unreachable

bounds.fail40:                                    ; preds = %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us, %dowhile.preheader, %dowhile.us.preheader
  %.lcssa105 = phi i64 [ %63, %dowhile.us.preheader ], [ %317, %dowhile.preheader ], [ %100, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit.us ], [ %155, %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit ] ; [#uses = 1, type = i64]
  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 %.lcssa105, i64 20) #3
  unreachable

enddowhile:                                       ; preds = %bounds.ok.9.i, %bounds.ok.9.i.us, %bounds.ok14.9.i
  %157 = phi i64 [ %.lcssa104, %bounds.ok14.9.i ], [ %206, %bounds.ok.9.i.us ], [ %253, %bounds.ok.9.i ] ; [#uses = 1, type = i64]
  %158 = bitcast %std.stdio.File* %__tmpfordtor218.i to i8* ; [#uses = 2]
  call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %158)
  call void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias nonnull sret align 8 %__tmpfordtor218.i) #4
  invoke void @_D3std5stdio4File__T5writeTlTaZQlMFNflaZv(%std.stdio.File* nonnull %__tmpfordtor218.i, i8 zeroext 10, i64 %157) #4
          to label %_D3std5stdio__T7writelnTlZQlFNflZv.exit unwind label %eh.resume.i

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

_D3std5stdio__T7writelnTlZQlFNflZv.exit:          ; preds = %enddowhile
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor218.i) #4
  call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %158)
  ret i32 0

bounds.ok53.us.1:                                 ; preds = %bounds.ok56.us
  %bounds.cmp55.us.1 = icmp ult i32 %68, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.1, label %bounds.ok56.us.1, label %bounds.fail57

bounds.ok56.us.1:                                 ; preds = %bounds.ok53.us.1
  %161 = zext i32 %68 to i64                      ; [#uses = 1]
  %162 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %106, i64 %161 ; [#uses = 1, type = i64*]
  %163 = load i64, i64* %162, align 8             ; [#uses = 1]
  %164 = mul i64 %163, %104                       ; [#uses = 1]
  %165 = sub nsw i32 %105, %68                    ; [#uses = 3]
  %166 = sext i32 %165 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.2 = icmp ult i32 %165, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.2, label %bounds.ok53.us.2, label %bounds.fail54

bounds.ok53.us.2:                                 ; preds = %bounds.ok56.us.1
  %bounds.cmp55.us.2 = icmp ult i32 %69, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.2, label %bounds.ok56.us.2, label %bounds.fail57

bounds.ok56.us.2:                                 ; preds = %bounds.ok53.us.2
  %167 = zext i32 %69 to i64                      ; [#uses = 1]
  %168 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %166, i64 %167 ; [#uses = 1, type = i64*]
  %169 = load i64, i64* %168, align 8             ; [#uses = 1]
  %170 = mul i64 %169, %164                       ; [#uses = 1]
  %171 = sub nsw i32 %165, %69                    ; [#uses = 3]
  %172 = sext i32 %171 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.3 = icmp ult i32 %171, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.3, label %bounds.ok53.us.3, label %bounds.fail54

bounds.ok53.us.3:                                 ; preds = %bounds.ok56.us.2
  %bounds.cmp55.us.3 = icmp ult i32 %70, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.3, label %bounds.ok56.us.3, label %bounds.fail57

bounds.ok56.us.3:                                 ; preds = %bounds.ok53.us.3
  %173 = zext i32 %70 to i64                      ; [#uses = 1]
  %174 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %172, i64 %173 ; [#uses = 1, type = i64*]
  %175 = load i64, i64* %174, align 8             ; [#uses = 1]
  %176 = mul i64 %175, %170                       ; [#uses = 1]
  %177 = sub nsw i32 %171, %70                    ; [#uses = 3]
  %178 = sext i32 %177 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.4 = icmp ult i32 %177, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.4, label %bounds.ok53.us.4, label %bounds.fail54

bounds.ok53.us.4:                                 ; preds = %bounds.ok56.us.3
  %bounds.cmp55.us.4 = icmp ult i32 %71, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.4, label %bounds.ok56.us.4, label %bounds.fail57

bounds.ok56.us.4:                                 ; preds = %bounds.ok53.us.4
  %179 = zext i32 %71 to i64                      ; [#uses = 1]
  %180 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %178, i64 %179 ; [#uses = 1, type = i64*]
  %181 = load i64, i64* %180, align 8             ; [#uses = 1]
  %182 = mul i64 %181, %176                       ; [#uses = 1]
  %183 = sub nsw i32 %177, %71                    ; [#uses = 3]
  %184 = sext i32 %183 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.5 = icmp ult i32 %183, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.5, label %bounds.ok53.us.5, label %bounds.fail54

bounds.ok53.us.5:                                 ; preds = %bounds.ok56.us.4
  %bounds.cmp55.us.5 = icmp ult i32 %72, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.5, label %bounds.ok56.us.5, label %bounds.fail57

bounds.ok56.us.5:                                 ; preds = %bounds.ok53.us.5
  %185 = zext i32 %72 to i64                      ; [#uses = 1]
  %186 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %184, i64 %185 ; [#uses = 1, type = i64*]
  %187 = load i64, i64* %186, align 8             ; [#uses = 1]
  %188 = mul i64 %187, %182                       ; [#uses = 1]
  %189 = sub nsw i32 %183, %72                    ; [#uses = 3]
  %190 = sext i32 %189 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.6 = icmp ult i32 %189, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.6, label %bounds.ok53.us.6, label %bounds.fail54

bounds.ok53.us.6:                                 ; preds = %bounds.ok56.us.5
  %bounds.cmp55.us.6 = icmp ult i32 %73, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.6, label %bounds.ok56.us.6, label %bounds.fail57

bounds.ok56.us.6:                                 ; preds = %bounds.ok53.us.6
  %191 = zext i32 %73 to i64                      ; [#uses = 1]
  %192 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %190, i64 %191 ; [#uses = 1, type = i64*]
  %193 = load i64, i64* %192, align 8             ; [#uses = 1]
  %194 = mul i64 %193, %188                       ; [#uses = 1]
  %195 = sub nsw i32 %189, %73                    ; [#uses = 3]
  %196 = sext i32 %195 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.7 = icmp ult i32 %195, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.7, label %bounds.ok53.us.7, label %bounds.fail54

bounds.ok53.us.7:                                 ; preds = %bounds.ok56.us.6
  %bounds.cmp55.us.7 = icmp ult i32 %74, 20       ; [#uses = 1]
  br i1 %bounds.cmp55.us.7, label %bounds.ok56.us.7, label %bounds.fail57

bounds.ok56.us.7:                                 ; preds = %bounds.ok53.us.7
  %197 = sub nsw i32 %195, %74                    ; [#uses = 2]
  %198 = sext i32 %197 to i64                     ; [#uses = 2]
  %bounds.cmp52.us.8 = icmp ult i32 %197, 20      ; [#uses = 1]
  br i1 %bounds.cmp52.us.8, label %bounds.ok56.us.8, label %bounds.fail54

bounds.ok56.us.8:                                 ; preds = %bounds.ok56.us.7
  %199 = zext i32 %74 to i64                      ; [#uses = 1]
  %200 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %196, i64 %199 ; [#uses = 1, type = i64*]
  %201 = load i64, i64* %200, align 8             ; [#uses = 1]
  %202 = mul i64 %201, %194                       ; [#uses = 1]
  %203 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %198, i64 %52 ; [#uses = 1, type = i64*]
  %204 = load i64, i64* %203, align 8             ; [#uses = 1]
  %205 = mul i64 %204, %202                       ; [#uses = 1]
  %206 = add i64 %205, %ans.0.us278               ; [#uses = 3]
  br i1 %291, label %bounds.ok.2.i.us, label %bounds.ok2.1.i.us

bounds.ok53.1:                                    ; preds = %bounds.ok56
  %bounds.cmp55.1 = icmp ult i32 %115, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.1, label %bounds.ok56.1, label %bounds.fail57

bounds.ok56.1:                                    ; preds = %bounds.ok53.1
  %207 = zext i32 %115 to i64                     ; [#uses = 1]
  %208 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %133, i64 %207 ; [#uses = 1, type = i64*]
  %209 = load i64, i64* %208, align 8             ; [#uses = 1]
  %210 = mul i64 %209, %131                       ; [#uses = 1]
  %211 = sub nsw i32 %132, %115                   ; [#uses = 3]
  %212 = sext i32 %211 to i64                     ; [#uses = 2]
  %bounds.cmp52.2 = icmp ult i32 %211, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.2, label %bounds.ok53.2, label %bounds.fail54

bounds.ok53.2:                                    ; preds = %bounds.ok56.1
  %bounds.cmp55.2 = icmp ult i32 %116, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.2, label %bounds.ok56.2, label %bounds.fail57

bounds.ok56.2:                                    ; preds = %bounds.ok53.2
  %213 = zext i32 %116 to i64                     ; [#uses = 1]
  %214 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %212, i64 %213 ; [#uses = 1, type = i64*]
  %215 = load i64, i64* %214, align 8             ; [#uses = 1]
  %216 = mul i64 %215, %210                       ; [#uses = 1]
  %217 = sub nsw i32 %211, %116                   ; [#uses = 3]
  %218 = sext i32 %217 to i64                     ; [#uses = 2]
  %bounds.cmp52.3 = icmp ult i32 %217, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.3, label %bounds.ok53.3, label %bounds.fail54

bounds.ok53.3:                                    ; preds = %bounds.ok56.2
  %bounds.cmp55.3 = icmp ult i32 %117, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.3, label %bounds.ok56.3, label %bounds.fail57

bounds.ok56.3:                                    ; preds = %bounds.ok53.3
  %219 = zext i32 %117 to i64                     ; [#uses = 1]
  %220 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %218, i64 %219 ; [#uses = 1, type = i64*]
  %221 = load i64, i64* %220, align 8             ; [#uses = 1]
  %222 = mul i64 %221, %216                       ; [#uses = 1]
  %223 = sub nsw i32 %217, %117                   ; [#uses = 3]
  %224 = sext i32 %223 to i64                     ; [#uses = 2]
  %bounds.cmp52.4 = icmp ult i32 %223, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.4, label %bounds.ok53.4, label %bounds.fail54

bounds.ok53.4:                                    ; preds = %bounds.ok56.3
  %bounds.cmp55.4 = icmp ult i32 %118, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.4, label %bounds.ok56.4, label %bounds.fail57

bounds.ok56.4:                                    ; preds = %bounds.ok53.4
  %225 = zext i32 %118 to i64                     ; [#uses = 1]
  %226 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %224, i64 %225 ; [#uses = 1, type = i64*]
  %227 = load i64, i64* %226, align 8             ; [#uses = 1]
  %228 = mul i64 %227, %222                       ; [#uses = 1]
  %229 = sub nsw i32 %223, %118                   ; [#uses = 3]
  %230 = sext i32 %229 to i64                     ; [#uses = 2]
  %bounds.cmp52.5 = icmp ult i32 %229, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.5, label %bounds.ok53.5, label %bounds.fail54

bounds.ok53.5:                                    ; preds = %bounds.ok56.4
  %bounds.cmp55.5 = icmp ult i32 %119, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.5, label %bounds.ok56.5, label %bounds.fail57

bounds.ok56.5:                                    ; preds = %bounds.ok53.5
  %231 = zext i32 %119 to i64                     ; [#uses = 1]
  %232 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %230, i64 %231 ; [#uses = 1, type = i64*]
  %233 = load i64, i64* %232, align 8             ; [#uses = 1]
  %234 = mul i64 %233, %228                       ; [#uses = 1]
  %235 = sub nsw i32 %229, %119                   ; [#uses = 3]
  %236 = sext i32 %235 to i64                     ; [#uses = 2]
  %bounds.cmp52.6 = icmp ult i32 %235, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.6, label %bounds.ok53.6, label %bounds.fail54

bounds.ok53.6:                                    ; preds = %bounds.ok56.5
  %bounds.cmp55.6 = icmp ult i32 %120, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.6, label %bounds.ok56.6, label %bounds.fail57

bounds.ok56.6:                                    ; preds = %bounds.ok53.6
  %237 = zext i32 %120 to i64                     ; [#uses = 1]
  %238 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %236, i64 %237 ; [#uses = 1, type = i64*]
  %239 = load i64, i64* %238, align 8             ; [#uses = 1]
  %240 = mul i64 %239, %234                       ; [#uses = 1]
  %241 = sub nsw i32 %235, %120                   ; [#uses = 3]
  %242 = sext i32 %241 to i64                     ; [#uses = 2]
  %bounds.cmp52.7 = icmp ult i32 %241, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.7, label %bounds.ok53.7, label %bounds.fail54

bounds.ok53.7:                                    ; preds = %bounds.ok56.6
  %bounds.cmp55.7 = icmp ult i32 %121, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.7, label %bounds.ok56.7, label %bounds.fail57

bounds.ok56.7:                                    ; preds = %bounds.ok53.7
  %243 = zext i32 %121 to i64                     ; [#uses = 1]
  %244 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %242, i64 %243 ; [#uses = 1, type = i64*]
  %245 = load i64, i64* %244, align 8             ; [#uses = 1]
  %246 = mul i64 %245, %240                       ; [#uses = 1]
  %247 = sub nsw i32 %241, %121                   ; [#uses = 2]
  %248 = sext i32 %247 to i64                     ; [#uses = 2]
  %bounds.cmp52.8 = icmp ult i32 %247, 20         ; [#uses = 1]
  br i1 %bounds.cmp52.8, label %bounds.ok53.8, label %bounds.fail54

bounds.ok53.8:                                    ; preds = %bounds.ok56.7
  %bounds.cmp55.8 = icmp ult i32 %122, 20         ; [#uses = 1]
  br i1 %bounds.cmp55.8, label %bounds.ok56.8, label %bounds.fail57

bounds.ok56.8:                                    ; preds = %bounds.ok53.8
  %249 = zext i32 %122 to i64                     ; [#uses = 1]
  %250 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %248, i64 %249 ; [#uses = 1, type = i64*]
  %251 = load i64, i64* %250, align 8             ; [#uses = 1]
  %252 = mul i64 %251, %246                       ; [#uses = 1]
  %253 = add i64 %252, %ans.0280                  ; [#uses = 3]
  %254 = icmp slt i32 %122, %45                   ; [#uses = 1]
  br i1 %254, label %_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb.exit, label %bounds.ok14.i

bounds.ok36.1:                                    ; preds = %forinc29
  %255 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 1 ; [#uses = 1, type = i32*]
  store i32 1, i32* %255, align 4
  br label %forinc29.1

forinc29.1:                                       ; preds = %bounds.ok36.1, %forinc29
  %256 = phi i32 [ 1, %bounds.ok36.1 ], [ 0, %forinc29 ] ; [#uses = 4, type = i32]
  %257 = load i32, i32* %14, align 8              ; [#uses = 4]
  %258 = icmp sgt i32 %257, 0                     ; [#uses = 1]
  br i1 %258, label %bounds.ok36.2, label %forinc29.2

bounds.ok36.2:                                    ; preds = %forinc29.1
  %259 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 2 ; [#uses = 1, type = i32*]
  store i32 1, i32* %259, align 4
  br label %forinc29.2

forinc29.2:                                       ; preds = %bounds.ok36.2, %forinc29.1
  %260 = phi i32 [ 1, %bounds.ok36.2 ], [ 0, %forinc29.1 ] ; [#uses = 4, type = i32]
  %261 = load i32, i32* %18, align 4              ; [#uses = 4]
  %262 = icmp sgt i32 %261, 0                     ; [#uses = 1]
  br i1 %262, label %bounds.ok36.3, label %forinc29.3

bounds.ok36.3:                                    ; preds = %forinc29.2
  %263 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 3 ; [#uses = 1, type = i32*]
  store i32 1, i32* %263, align 4
  br label %forinc29.3

forinc29.3:                                       ; preds = %bounds.ok36.3, %forinc29.2
  %264 = phi i32 [ 1, %bounds.ok36.3 ], [ 0, %forinc29.2 ] ; [#uses = 4, type = i32]
  %265 = load i32, i32* %22, align 8              ; [#uses = 4]
  %266 = icmp sgt i32 %265, 0                     ; [#uses = 1]
  br i1 %266, label %bounds.ok36.4, label %forinc29.4

bounds.ok36.4:                                    ; preds = %forinc29.3
  %267 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 4 ; [#uses = 1, type = i32*]
  store i32 1, i32* %267, align 4
  br label %forinc29.4

forinc29.4:                                       ; preds = %bounds.ok36.4, %forinc29.3
  %268 = phi i32 [ 1, %bounds.ok36.4 ], [ 0, %forinc29.3 ] ; [#uses = 4, type = i32]
  %269 = load i32, i32* %26, align 4              ; [#uses = 4]
  %270 = icmp sgt i32 %269, 0                     ; [#uses = 1]
  br i1 %270, label %bounds.ok36.5, label %forinc29.5

bounds.ok36.5:                                    ; preds = %forinc29.4
  %271 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 5 ; [#uses = 1, type = i32*]
  store i32 1, i32* %271, align 4
  br label %forinc29.5

forinc29.5:                                       ; preds = %bounds.ok36.5, %forinc29.4
  %272 = phi i32 [ 1, %bounds.ok36.5 ], [ 0, %forinc29.4 ] ; [#uses = 4, type = i32]
  %273 = load i32, i32* %30, align 8              ; [#uses = 4]
  %274 = icmp sgt i32 %273, 0                     ; [#uses = 1]
  br i1 %274, label %bounds.ok36.6, label %forinc29.6

bounds.ok36.6:                                    ; preds = %forinc29.5
  %275 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 6 ; [#uses = 1, type = i32*]
  store i32 1, i32* %275, align 4
  br label %forinc29.6

forinc29.6:                                       ; preds = %bounds.ok36.6, %forinc29.5
  %276 = phi i32 [ 1, %bounds.ok36.6 ], [ 0, %forinc29.5 ] ; [#uses = 4, type = i32]
  %277 = load i32, i32* %34, align 4              ; [#uses = 4]
  %278 = icmp sgt i32 %277, 0                     ; [#uses = 1]
  br i1 %278, label %bounds.ok36.7, label %forinc29.7

bounds.ok36.7:                                    ; preds = %forinc29.6
  %279 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 7 ; [#uses = 1, type = i32*]
  store i32 1, i32* %279, align 4
  br label %forinc29.7

forinc29.7:                                       ; preds = %bounds.ok36.7, %forinc29.6
  %280 = phi i32 [ 1, %bounds.ok36.7 ], [ 0, %forinc29.6 ] ; [#uses = 4, type = i32]
  %281 = load i32, i32* %38, align 8              ; [#uses = 4]
  %282 = icmp sgt i32 %281, 0                     ; [#uses = 1]
  br i1 %282, label %bounds.ok36.8, label %forinc29.8

bounds.ok36.8:                                    ; preds = %forinc29.7
  %283 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 8 ; [#uses = 1, type = i32*]
  store i32 1, i32* %283, align 4
  br label %forinc29.8

forinc29.8:                                       ; preds = %bounds.ok36.8, %forinc29.7
  %284 = phi i32 [ 1, %bounds.ok36.8 ], [ 0, %forinc29.7 ] ; [#uses = 4, type = i32]
  %285 = icmp sgt i32 %45, 0                      ; [#uses = 1]
  br i1 %285, label %bounds.ok36.9, label %forinc29.9

bounds.ok36.9:                                    ; preds = %forinc29.8
  %286 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 9 ; [#uses = 1, type = i32*]
  store i32 1, i32* %286, align 4
  br label %forinc29.9

forinc29.9:                                       ; preds = %bounds.ok36.9, %forinc29.8
  %287 = phi i32 [ 1, %bounds.ok36.9 ], [ 0, %forinc29.8 ] ; [#uses = 5, type = i32]
  %288 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 0 ; [#uses = 5, type = i32*]
  %lowerbound44 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 1 ; [#uses = 6, type = i32*]
  %289 = icmp eq i32 %45, 0                       ; [#uses = 1]
  %290 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 9 ; [#uses = 3, type = i32*]
  %291 = icmp eq i32 %281, 0                      ; [#uses = 2]
  %292 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 8 ; [#uses = 6, type = i32*]
  %293 = icmp eq i32 %277, 0                      ; [#uses = 2]
  %294 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 7 ; [#uses = 6, type = i32*]
  %295 = icmp eq i32 %273, 0                      ; [#uses = 2]
  %296 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 6 ; [#uses = 6, type = i32*]
  %297 = icmp eq i32 %269, 0                      ; [#uses = 2]
  %298 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 5 ; [#uses = 6, type = i32*]
  %299 = icmp eq i32 %265, 0                      ; [#uses = 2]
  %300 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 4 ; [#uses = 6, type = i32*]
  %301 = icmp eq i32 %261, 0                      ; [#uses = 2]
  %302 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 3 ; [#uses = 6, type = i32*]
  %303 = icmp eq i32 %257, 0                      ; [#uses = 2]
  %304 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 2 ; [#uses = 6, type = i32*]
  %305 = icmp eq i32 %109, 0                      ; [#uses = 2]
  %306 = icmp eq i32 %50, 0                       ; [#uses = 2]
  br i1 %289, label %dowhile.us.preheader, label %dowhile.preheader

dowhile.preheader:                                ; preds = %forinc29.9
  %307 = add nuw nsw i32 %256, %108               ; [#uses = 1]
  %308 = add nuw nsw i32 %260, %307               ; [#uses = 1]
  %309 = add nuw nsw i32 %264, %308               ; [#uses = 1]
  %310 = add nuw nsw i32 %268, %309               ; [#uses = 1]
  %311 = add nuw nsw i32 %272, %310               ; [#uses = 1]
  %312 = add i32 %276, %311                       ; [#uses = 1]
  %313 = add i32 %280, %312                       ; [#uses = 1]
  %314 = add i32 %284, %313                       ; [#uses = 1]
  %315 = add i32 %287, %314                       ; [#uses = 2]
  %316 = add i32 %315, -1                         ; [#uses = 2]
  %317 = sext i32 %316 to i64                     ; [#uses = 2]
  %bounds.cmp38279 = icmp ult i32 %316, 20        ; [#uses = 1]
  br i1 %bounds.cmp38279, label %bounds.ok39, label %bounds.fail40

condend.us.us.19:                                 ; preds = %forbody, %condend.us.us.19
  %indvars.iv = phi i64 [ 1, %forbody ], [ %indvars.iv.next, %condend.us.us.19 ] ; [#uses = 22, type = i64]
  %318 = add nsw i64 %indvars.iv, -1              ; [#uses = 20]
  %319 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 0 ; [#uses = 1, type = i64*]
  %320 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 0 ; [#uses = 1, type = i64*]
  store i64 1, i64* %319, align 8
  %321 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 1 ; [#uses = 1, type = i64*]
  %322 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 1 ; [#uses = 1, type = i64*]
  %323 = load i64, i64* %322, align 8             ; [#uses = 2]
  %condtmp.0.sroa.speculate.load.bounds.ok25.us.us.1 = load i64, i64* %320, align 8 ; [#uses = 1]
  %324 = add i64 %condtmp.0.sroa.speculate.load.bounds.ok25.us.us.1, %323 ; [#uses = 1]
  store i64 %324, i64* %321, align 8
  %325 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 2 ; [#uses = 1, type = i64*]
  %326 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 2 ; [#uses = 1, type = i64*]
  %327 = load i64, i64* %326, align 8             ; [#uses = 2]
  %328 = add i64 %323, %327                       ; [#uses = 1]
  store i64 %328, i64* %325, align 8
  %329 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 3 ; [#uses = 1, type = i64*]
  %330 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 3 ; [#uses = 1, type = i64*]
  %331 = load i64, i64* %330, align 8             ; [#uses = 2]
  %332 = add i64 %327, %331                       ; [#uses = 1]
  store i64 %332, i64* %329, align 8
  %333 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 4 ; [#uses = 1, type = i64*]
  %334 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 4 ; [#uses = 1, type = i64*]
  %335 = load i64, i64* %334, align 8             ; [#uses = 2]
  %336 = add i64 %331, %335                       ; [#uses = 1]
  store i64 %336, i64* %333, align 8
  %337 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 5 ; [#uses = 1, type = i64*]
  %338 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 5 ; [#uses = 1, type = i64*]
  %339 = load i64, i64* %338, align 8             ; [#uses = 2]
  %340 = add i64 %335, %339                       ; [#uses = 1]
  store i64 %340, i64* %337, align 8
  %341 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 6 ; [#uses = 1, type = i64*]
  %342 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 6 ; [#uses = 1, type = i64*]
  %343 = load i64, i64* %342, align 8             ; [#uses = 2]
  %344 = add i64 %339, %343                       ; [#uses = 1]
  store i64 %344, i64* %341, align 8
  %345 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 7 ; [#uses = 1, type = i64*]
  %346 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 7 ; [#uses = 1, type = i64*]
  %347 = load i64, i64* %346, align 8             ; [#uses = 2]
  %348 = add i64 %343, %347                       ; [#uses = 1]
  store i64 %348, i64* %345, align 8
  %349 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 8 ; [#uses = 1, type = i64*]
  %350 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 8 ; [#uses = 1, type = i64*]
  %351 = load i64, i64* %350, align 8             ; [#uses = 2]
  %352 = add i64 %347, %351                       ; [#uses = 1]
  store i64 %352, i64* %349, align 8
  %353 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 9 ; [#uses = 1, type = i64*]
  %354 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 9 ; [#uses = 1, type = i64*]
  %355 = load i64, i64* %354, align 8             ; [#uses = 2]
  %356 = add i64 %351, %355                       ; [#uses = 1]
  store i64 %356, i64* %353, align 8
  %357 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 10 ; [#uses = 1, type = i64*]
  %358 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 10 ; [#uses = 1, type = i64*]
  %359 = load i64, i64* %358, align 8             ; [#uses = 2]
  %360 = add i64 %355, %359                       ; [#uses = 1]
  store i64 %360, i64* %357, align 8
  %361 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 11 ; [#uses = 1, type = i64*]
  %362 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 11 ; [#uses = 1, type = i64*]
  %363 = load i64, i64* %362, align 8             ; [#uses = 2]
  %364 = add i64 %359, %363                       ; [#uses = 1]
  store i64 %364, i64* %361, align 8
  %365 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 12 ; [#uses = 1, type = i64*]
  %366 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 12 ; [#uses = 1, type = i64*]
  %367 = load i64, i64* %366, align 8             ; [#uses = 2]
  %368 = add i64 %363, %367                       ; [#uses = 1]
  store i64 %368, i64* %365, align 8
  %369 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 13 ; [#uses = 1, type = i64*]
  %370 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 13 ; [#uses = 1, type = i64*]
  %371 = load i64, i64* %370, align 8             ; [#uses = 2]
  %372 = add i64 %367, %371                       ; [#uses = 1]
  store i64 %372, i64* %369, align 8
  %373 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 14 ; [#uses = 1, type = i64*]
  %374 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 14 ; [#uses = 1, type = i64*]
  %375 = load i64, i64* %374, align 8             ; [#uses = 2]
  %376 = add i64 %371, %375                       ; [#uses = 1]
  store i64 %376, i64* %373, align 8
  %377 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 15 ; [#uses = 1, type = i64*]
  %378 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 15 ; [#uses = 1, type = i64*]
  %379 = load i64, i64* %378, align 8             ; [#uses = 2]
  %380 = add i64 %375, %379                       ; [#uses = 1]
  store i64 %380, i64* %377, align 8
  %381 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 16 ; [#uses = 1, type = i64*]
  %382 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 16 ; [#uses = 1, type = i64*]
  %383 = load i64, i64* %382, align 8             ; [#uses = 2]
  %384 = add i64 %379, %383                       ; [#uses = 1]
  store i64 %384, i64* %381, align 8
  %385 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 17 ; [#uses = 1, type = i64*]
  %386 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 17 ; [#uses = 1, type = i64*]
  %387 = load i64, i64* %386, align 8             ; [#uses = 2]
  %388 = add i64 %383, %387                       ; [#uses = 1]
  store i64 %388, i64* %385, align 8
  %389 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 18 ; [#uses = 1, type = i64*]
  %390 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 18 ; [#uses = 1, type = i64*]
  %391 = load i64, i64* %390, align 8             ; [#uses = 2]
  %392 = add i64 %387, %391                       ; [#uses = 1]
  store i64 %392, i64* %389, align 8
  %393 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %indvars.iv, i64 19 ; [#uses = 1, type = i64*]
  %394 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %binom, i64 0, i64 %318, i64 19 ; [#uses = 1, type = i64*]
  %395 = load i64, i64* %394, align 8             ; [#uses = 1]
  %396 = add i64 %391, %395                       ; [#uses = 1]
  store i64 %396, i64* %393, align 8
  %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 %endfor6, label %condend.us.us.19
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std6string__T5chompTAyaZQlFNaNbNiNfQpZQs({ i64, i8* } %str_arg) local_unnamed_addr #1 {
  %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 = 9]
  %.not.i = icmp eq i64 %str_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not.i, label %if, label %bounds.ok78

if:                                               ; preds = %case22, %bounds.ok29, %bounds.ok38, %case52, %andand54, %bounds.ok78, %0
  ret { i64, i8* } %str_arg

bounds.ok78:                                      ; preds = %0
  %1 = add i64 %str_arg.fca.0.extract, -1         ; [#uses = 2]
  %2 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %1 ; [#uses = 1, type = i8*]
  %3 = load i8, i8* %2, align 1                   ; [#uses = 1]
  switch i8 %3, label %if [
    i8 10, label %case
    i8 13, label %bounds.ok14
    i8 11, label %bounds.ok14
    i8 12, label %bounds.ok14
    i8 -88, label %case22
    i8 -87, label %case22
    i8 -123, label %case52
  ]

case:                                             ; preds = %bounds.ok78
  %4 = icmp ugt i64 %str_arg.fca.0.extract, 1     ; [#uses = 1]
  br i1 %4, label %andand, label %bounds.ok14

andand:                                           ; preds = %case
  %5 = add i64 %str_arg.fca.0.extract, -2         ; [#uses = 2]
  %6 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %5 ; [#uses = 1, type = i8*]
  %7 = load i8, i8* %6, align 1                   ; [#uses = 1]
  %8 = icmp eq i8 %7, 13                          ; [#uses = 1]
  br i1 %8, label %bounds.ok6, label %bounds.ok14

bounds.ok6:                                       ; preds = %andand
  %9 = insertvalue { i64, i8* } undef, i64 %5, 0  ; [#uses = 1]
  %10 = insertvalue { i64, i8* } %9, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %10

bounds.ok14:                                      ; preds = %bounds.ok78, %case, %andand, %bounds.ok78, %bounds.ok78
  %11 = insertvalue { i64, i8* } undef, i64 %1, 0 ; [#uses = 1]
  %12 = insertvalue { i64, i8* } %11, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %12

case22:                                           ; preds = %bounds.ok78, %bounds.ok78
  %13 = icmp ugt i64 %str_arg.fca.0.extract, 2    ; [#uses = 1]
  br i1 %13, label %bounds.ok29, label %if

bounds.ok29:                                      ; preds = %case22
  %14 = add i64 %str_arg.fca.0.extract, -2        ; [#uses = 1]
  %15 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %14 ; [#uses = 1, type = i8*]
  %16 = load i8, i8* %15, align 1                 ; [#uses = 1]
  %17 = icmp eq i8 %16, -128                      ; [#uses = 1]
  br i1 %17, label %bounds.ok38, label %if

bounds.ok38:                                      ; preds = %bounds.ok29
  %18 = add i64 %str_arg.fca.0.extract, -3        ; [#uses = 2]
  %19 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %18 ; [#uses = 1, type = i8*]
  %20 = load i8, i8* %19, align 1                 ; [#uses = 1]
  %21 = icmp eq i8 %20, -30                       ; [#uses = 1]
  br i1 %21, label %bounds.ok45, label %if

bounds.ok45:                                      ; preds = %bounds.ok38
  %22 = insertvalue { i64, i8* } undef, i64 %18, 0 ; [#uses = 1]
  %23 = insertvalue { i64, i8* } %22, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %23

case52:                                           ; preds = %bounds.ok78
  %24 = icmp ugt i64 %str_arg.fca.0.extract, 1    ; [#uses = 1]
  br i1 %24, label %andand54, label %if

andand54:                                         ; preds = %case52
  %25 = add i64 %str_arg.fca.0.extract, -2        ; [#uses = 2]
  %26 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %25 ; [#uses = 1, type = i8*]
  %27 = load i8, i8* %26, align 1                 ; [#uses = 1]
  %28 = icmp eq i8 %27, -62                       ; [#uses = 1]
  br i1 %28, label %bounds.ok66, label %if

bounds.ok66:                                      ; preds = %andand54
  %29 = insertvalue { i64, i8* } undef, i64 %25, 0 ; [#uses = 1]
  %30 = insertvalue { i64, i8* } %29, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %30
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std5stdio__T6readlnTAyaZQmFwZQj(i32 %terminator_arg) local_unnamed_addr #1 {
  %buf.i = alloca { i64, i8* }, align 8           ; [#uses = 4, size/byte = 16]
  %1 = tail call %std.stdio.File* @_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea21_636f72652e737464632e737464696f2e737464696eZQDeFNbNcNdNiZSQEfQEe4File() #4 ; [#uses = 1]
  %2 = bitcast { i64, i8* }* %buf.i to i8*        ; [#uses = 3]
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  %3 = getelementptr inbounds %std.stdio.File, %std.stdio.File* %1, i64 0, i32 0 ; [#uses = 4, type = %std.stdio.File.Impl**]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %2, i8 0, i64 16, i1 false)
  %4 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %3, align 8 ; [#uses = 3]
  %.not.i.i = icmp eq %std.stdio.File.Impl* %4, null ; [#uses = 1]
  br i1 %.not.i.i, label %if.i.i.i, label %andandend.i.i

andandend.i.i:                                    ; preds = %0
  %5 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %4, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %6 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %5, align 8 ; [#uses = 2]
  %.not9.i.i = icmp eq %core.stdc.stdio._IO_FILE* %6, null ; [#uses = 1]
  br i1 %.not9.i.i, label %if.i.i.i, label %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i.i

if.i.i.i:                                         ; preds = %andandend.i.i, %0
  tail call void @_D3std9exception__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZNn({ i64, i8* } { i64 38, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.2, i32 0, i32 0) }) #12
  unreachable

_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i.i: ; preds = %andandend.i.i
  %7 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %4, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %8 = load i32, i32* %7, align 4                 ; [#uses = 1]
  %9 = icmp eq i32 %8, 0                          ; [#uses = 1]
  br i1 %9, label %if.i.i, label %_D3std5stdio4File__T6readlnTAyaZQmMFwZQk.exit

if.i.i:                                           ; preds = %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i.i
  %10 = tail call i32 @fwide(%core.stdc.stdio._IO_FILE* nonnull %6, i32 0) #4 ; [#uses = 2]
  %11 = icmp slt i32 %10, 0                       ; [#uses = 1]
  br i1 %11, label %if1.i.i, label %else.i.i

if1.i.i:                                          ; preds = %if.i.i
  %12 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %3, align 8 ; [#uses = 1]
  %13 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %12, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 1, i32* %13, align 4
  br label %_D3std5stdio4File__T6readlnTAyaZQmMFwZQk.exit

else.i.i:                                         ; preds = %if.i.i
  %.not7.i.i = icmp eq i32 %10, 0                 ; [#uses = 1]
  br i1 %.not7.i.i, label %_D3std5stdio4File__T6readlnTAyaZQmMFwZQk.exit, label %if3.i.i

if3.i.i:                                          ; preds = %else.i.i
  %14 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %3, align 8 ; [#uses = 1]
  %15 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %14, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 2, i32* %15, align 4
  br label %_D3std5stdio4File__T6readlnTAyaZQmMFwZQk.exit

_D3std5stdio4File__T6readlnTAyaZQmMFwZQk.exit:    ; preds = %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i.i, %if1.i.i, %else.i.i, %if3.i.i
  %.fca.0.gep.i = getelementptr inbounds { i64, i8* }, { i64, i8* }* %buf.i, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.fca.1.gep.i = getelementptr inbounds { i64, i8* }, { i64, i8* }* %buf.i, i64 0, i32 1 ; [#uses = 1, type = i8**]
  %16 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %3, align 8 ; [#uses = 2]
  %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 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %16, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %20 = load i32, i32* %19, align 4               ; [#uses = 1]
  %21 = call i64 @_D3std5stdio10readlnImplFPOS4core4stdcQBg8_IO_FILEKAawEQCbQCa4File11OrientationZm(i32 %20, i32 %terminator_arg, { i64, i8* }* nonnull dereferenceable(16) %buf.i, %core.stdc.stdio._IO_FILE* %18) #4 ; [#uses = 0]
  %.len.i = load i64, i64* %.fca.0.gep.i, align 8 ; [#uses = 1]
  %.ptr.i = load i8*, i8** %.fca.1.gep.i, align 8 ; [#uses = 1]
  %22 = insertvalue { i64, i8* } undef, i64 %.len.i, 0 ; [#uses = 1]
  %23 = insertvalue { i64, i8* } %22, i8* %.ptr.i, 1 ; [#uses = 1]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  ret { i64, i8* } %23
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std9algorithm9searching__T5countS6source4mainFZ9__lambda7TAyaZQBkMFNaNiNfQpZm(i8* nonnull %.nest_arg, { i64, i8* } %haystack_arg) local_unnamed_addr #1 {
  %.frame = alloca %nest.count, align 8           ; [#uses = 3, size/byte = 16]
  %1 = bitcast %nest.count* %.frame to i8**       ; [#uses = 1]
  store i8* %.nest_arg, i8** %1, align 8
  %result = getelementptr inbounds %nest.count, %nest.count* %.frame, i64 0, i32 1 ; [#uses = 2, type = i64*]
  store i64 0, i64* %result, align 8
  %2 = bitcast %nest.count* %.frame to i8*        ; [#uses = 1]
  %3 = insertvalue { i8*, i32 (i8*, i8*)* } undef, i8* %2, 0 ; [#uses = 1]
  %.func = insertvalue { i8*, i32 (i8*, i8*)* } %3, i32 (i8*, i8*)* bitcast (i32 (i8*, i32*)* @_D3std9algorithm9searching__T5countS6source4mainFZ9__lambda7TAyaZQBkMFQjZ14__foreachbody3MFNaNbNiNfKwZi to i32 (i8*, i8*)*), 1 ; [#uses = 1]
  %4 = call i32 @_aApplycd1({ i64, i8* } %haystack_arg, { i8*, i32 (i8*, i8*)* } %.func) #4 ; [#uses = 0]
  %5 = load i64, i64* %result, align 8            ; [#uses = 1]
  ret i64 %5
}

; [#uses = 17]
; 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 zeroext i1 @_D6source4mainFZ12next_variantMFNaNbNiNfKG10iZb(i8* nocapture nonnull readonly %.nest_arg, [10 x i32]* nocapture dereferenceable(40) %lim) local_unnamed_addr #1 {
bounds.ok:
  %cnt = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %0 = getelementptr inbounds i8, i8* %.nest_arg, i64 44 ; [#uses = 1, type = i8*]
  %1 = bitcast i8* %0 to i32*                     ; [#uses = 1]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 2]
  %3 = icmp eq i32 %2, 0                          ; [#uses = 1]
  br i1 %3, label %bounds.ok.1, label %bounds.ok2

bounds.ok2:                                       ; preds = %bounds.ok
  %4 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 9 ; [#uses = 3, type = i32*]
  %5 = load i32, i32* %4, align 4                 ; [#uses = 2]
  %6 = icmp slt i32 %5, %2                        ; [#uses = 1]
  br i1 %6, label %bounds.ok11, label %bounds.ok14

bounds.ok11:                                      ; preds = %bounds.ok2.9, %bounds.ok2.8, %bounds.ok2.7, %bounds.ok2.6, %bounds.ok2.5, %bounds.ok2.4, %bounds.ok2.3, %bounds.ok2.2, %bounds.ok2.1, %bounds.ok2
  %.lcssa26 = phi i32* [ %4, %bounds.ok2 ], [ %12, %bounds.ok2.1 ], [ %19, %bounds.ok2.2 ], [ %26, %bounds.ok2.3 ], [ %33, %bounds.ok2.4 ], [ %40, %bounds.ok2.5 ], [ %47, %bounds.ok2.6 ], [ %54, %bounds.ok2.7 ], [ %61, %bounds.ok2.8 ], [ %67, %bounds.ok2.9 ] ; [#uses = 1, type = i32*]
  %.lcssa = phi i32 [ %5, %bounds.ok2 ], [ %13, %bounds.ok2.1 ], [ %20, %bounds.ok2.2 ], [ %27, %bounds.ok2.3 ], [ %34, %bounds.ok2.4 ], [ %41, %bounds.ok2.5 ], [ %48, %bounds.ok2.6 ], [ %55, %bounds.ok2.7 ], [ %62, %bounds.ok2.8 ], [ %68, %bounds.ok2.9 ] ; [#uses = 1, type = i32]
  %7 = add nsw i32 %.lcssa, 1                     ; [#uses = 1]
  store i32 %7, i32* %.lcssa26, align 4
  ret i1 true

bounds.ok14:                                      ; preds = %bounds.ok2
  store i32 1, i32* %4, align 4
  br label %bounds.ok.1

bounds.ok.1:                                      ; preds = %bounds.ok14, %bounds.ok
  %8 = getelementptr inbounds i8, i8* %.nest_arg, i64 40 ; [#uses = 1, type = i8*]
  %9 = bitcast i8* %8 to i32*                     ; [#uses = 1]
  %10 = load i32, i32* %9, align 4                ; [#uses = 2]
  %11 = icmp eq i32 %10, 0                        ; [#uses = 1]
  br i1 %11, label %bounds.ok.2, label %bounds.ok2.1

bounds.ok2.1:                                     ; preds = %bounds.ok.1
  %12 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 8 ; [#uses = 3, type = i32*]
  %13 = load i32, i32* %12, align 4               ; [#uses = 2]
  %14 = icmp slt i32 %13, %10                     ; [#uses = 1]
  br i1 %14, label %bounds.ok11, label %bounds.ok14.1

bounds.ok14.1:                                    ; preds = %bounds.ok2.1
  store i32 1, i32* %12, align 4
  br label %bounds.ok.2

bounds.ok.2:                                      ; preds = %bounds.ok.1, %bounds.ok14.1
  %15 = getelementptr inbounds i8, i8* %.nest_arg, i64 36 ; [#uses = 1, type = i8*]
  %16 = bitcast i8* %15 to i32*                   ; [#uses = 1]
  %17 = load i32, i32* %16, align 4               ; [#uses = 2]
  %18 = icmp eq i32 %17, 0                        ; [#uses = 1]
  br i1 %18, label %bounds.ok.3, label %bounds.ok2.2

bounds.ok2.2:                                     ; preds = %bounds.ok.2
  %19 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 7 ; [#uses = 3, type = i32*]
  %20 = load i32, i32* %19, align 4               ; [#uses = 2]
  %21 = icmp slt i32 %20, %17                     ; [#uses = 1]
  br i1 %21, label %bounds.ok11, label %bounds.ok14.2

bounds.ok14.2:                                    ; preds = %bounds.ok2.2
  store i32 1, i32* %19, align 4
  br label %bounds.ok.3

bounds.ok.3:                                      ; preds = %bounds.ok.2, %bounds.ok14.2
  %22 = getelementptr inbounds i8, i8* %.nest_arg, i64 32 ; [#uses = 1, type = i8*]
  %23 = bitcast i8* %22 to i32*                   ; [#uses = 1]
  %24 = load i32, i32* %23, align 4               ; [#uses = 2]
  %25 = icmp eq i32 %24, 0                        ; [#uses = 1]
  br i1 %25, label %bounds.ok.4, label %bounds.ok2.3

bounds.ok2.3:                                     ; preds = %bounds.ok.3
  %26 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 6 ; [#uses = 3, type = i32*]
  %27 = load i32, i32* %26, align 4               ; [#uses = 2]
  %28 = icmp slt i32 %27, %24                     ; [#uses = 1]
  br i1 %28, label %bounds.ok11, label %bounds.ok14.3

bounds.ok14.3:                                    ; preds = %bounds.ok2.3
  store i32 1, i32* %26, align 4
  br label %bounds.ok.4

bounds.ok.4:                                      ; preds = %bounds.ok.3, %bounds.ok14.3
  %29 = getelementptr inbounds i8, i8* %.nest_arg, i64 28 ; [#uses = 1, type = i8*]
  %30 = bitcast i8* %29 to i32*                   ; [#uses = 1]
  %31 = load i32, i32* %30, align 4               ; [#uses = 2]
  %32 = icmp eq i32 %31, 0                        ; [#uses = 1]
  br i1 %32, label %bounds.ok.5, label %bounds.ok2.4

bounds.ok2.4:                                     ; preds = %bounds.ok.4
  %33 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 5 ; [#uses = 3, type = i32*]
  %34 = load i32, i32* %33, align 4               ; [#uses = 2]
  %35 = icmp slt i32 %34, %31                     ; [#uses = 1]
  br i1 %35, label %bounds.ok11, label %bounds.ok14.4

bounds.ok14.4:                                    ; preds = %bounds.ok2.4
  store i32 1, i32* %33, align 4
  br label %bounds.ok.5

bounds.ok.5:                                      ; preds = %bounds.ok.4, %bounds.ok14.4
  %36 = getelementptr inbounds i8, i8* %.nest_arg, i64 24 ; [#uses = 1, type = i8*]
  %37 = bitcast i8* %36 to i32*                   ; [#uses = 1]
  %38 = load i32, i32* %37, align 4               ; [#uses = 2]
  %39 = icmp eq i32 %38, 0                        ; [#uses = 1]
  br i1 %39, label %bounds.ok.6, label %bounds.ok2.5

bounds.ok2.5:                                     ; preds = %bounds.ok.5
  %40 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 4 ; [#uses = 3, type = i32*]
  %41 = load i32, i32* %40, align 4               ; [#uses = 2]
  %42 = icmp slt i32 %41, %38                     ; [#uses = 1]
  br i1 %42, label %bounds.ok11, label %bounds.ok14.5

bounds.ok14.5:                                    ; preds = %bounds.ok2.5
  store i32 1, i32* %40, align 4
  br label %bounds.ok.6

bounds.ok.6:                                      ; preds = %bounds.ok.5, %bounds.ok14.5
  %43 = getelementptr inbounds i8, i8* %.nest_arg, i64 20 ; [#uses = 1, type = i8*]
  %44 = bitcast i8* %43 to i32*                   ; [#uses = 1]
  %45 = load i32, i32* %44, align 4               ; [#uses = 2]
  %46 = icmp eq i32 %45, 0                        ; [#uses = 1]
  br i1 %46, label %bounds.ok.7, label %bounds.ok2.6

bounds.ok2.6:                                     ; preds = %bounds.ok.6
  %47 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 3 ; [#uses = 3, type = i32*]
  %48 = load i32, i32* %47, align 4               ; [#uses = 2]
  %49 = icmp slt i32 %48, %45                     ; [#uses = 1]
  br i1 %49, label %bounds.ok11, label %bounds.ok14.6

bounds.ok14.6:                                    ; preds = %bounds.ok2.6
  store i32 1, i32* %47, align 4
  br label %bounds.ok.7

bounds.ok.7:                                      ; preds = %bounds.ok.6, %bounds.ok14.6
  %50 = getelementptr inbounds i8, i8* %.nest_arg, i64 16 ; [#uses = 1, type = i8*]
  %51 = bitcast i8* %50 to i32*                   ; [#uses = 1]
  %52 = load i32, i32* %51, align 4               ; [#uses = 2]
  %53 = icmp eq i32 %52, 0                        ; [#uses = 1]
  br i1 %53, label %bounds.ok.8, label %bounds.ok2.7

bounds.ok2.7:                                     ; preds = %bounds.ok.7
  %54 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 2 ; [#uses = 3, type = i32*]
  %55 = load i32, i32* %54, align 4               ; [#uses = 2]
  %56 = icmp slt i32 %55, %52                     ; [#uses = 1]
  br i1 %56, label %bounds.ok11, label %bounds.ok14.7

bounds.ok14.7:                                    ; preds = %bounds.ok2.7
  store i32 1, i32* %54, align 4
  br label %bounds.ok.8

bounds.ok.8:                                      ; preds = %bounds.ok.7, %bounds.ok14.7
  %57 = getelementptr inbounds i8, i8* %.nest_arg, i64 12 ; [#uses = 1, type = i8*]
  %58 = bitcast i8* %57 to i32*                   ; [#uses = 1]
  %59 = load i32, i32* %58, align 4               ; [#uses = 2]
  %60 = icmp eq i32 %59, 0                        ; [#uses = 1]
  br i1 %60, label %bounds.ok.9, label %bounds.ok2.8

bounds.ok2.8:                                     ; preds = %bounds.ok.8
  %61 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 1 ; [#uses = 3, type = i32*]
  %62 = load i32, i32* %61, align 4               ; [#uses = 2]
  %63 = icmp slt i32 %62, %59                     ; [#uses = 1]
  br i1 %63, label %bounds.ok11, label %bounds.ok14.8

bounds.ok14.8:                                    ; preds = %bounds.ok2.8
  store i32 1, i32* %61, align 4
  br label %bounds.ok.9

bounds.ok.9:                                      ; preds = %bounds.ok.8, %bounds.ok14.8
  %64 = bitcast i8* %cnt to i32*                  ; [#uses = 1]
  %65 = load i32, i32* %64, align 4               ; [#uses = 2]
  %66 = icmp eq i32 %65, 0                        ; [#uses = 1]
  br i1 %66, label %forinc.9, label %bounds.ok2.9

bounds.ok2.9:                                     ; preds = %bounds.ok.9
  %67 = getelementptr inbounds [10 x i32], [10 x i32]* %lim, i64 0, i64 0 ; [#uses = 3, type = i32*]
  %68 = load i32, i32* %67, align 4               ; [#uses = 2]
  %69 = icmp slt i32 %68, %65                     ; [#uses = 1]
  br i1 %69, label %bounds.ok11, label %bounds.ok14.9

bounds.ok14.9:                                    ; preds = %bounds.ok2.9
  store i32 1, i32* %67, align 4
  br label %forinc.9

forinc.9:                                         ; preds = %bounds.ok14.9, %bounds.ok.9
  ret i1 false
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi({ i64, i32* } %r_arg) local_unnamed_addr #1 {
  %r_arg.fca.0.extract.i.i.i.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 5]
  %r_arg.fca.1.extract.i.i.i.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 6]
  %.not.i.i.i.i = icmp eq i64 %r_arg.fca.0.extract.i.i.i.i, 0 ; [#uses = 1]
  br i1 %.not.i.i.i.i, label %_D3std9algorithm9iteration__T3sumTAiTiZQkFNaNbNiNfQqiZi.exit, label %forbody.i.i.i.i.preheader

forbody.i.i.i.i.preheader:                        ; preds = %0
  %min.iters.check = icmp ult i64 %r_arg.fca.0.extract.i.i.i.i, 8 ; [#uses = 1]
  br i1 %min.iters.check, label %forbody.i.i.i.i.preheader3, label %vector.ph

vector.ph:                                        ; preds = %forbody.i.i.i.i.preheader
  %n.vec = and i64 %r_arg.fca.0.extract.i.i.i.i, -8 ; [#uses = 3]
  %1 = add i64 %n.vec, -8                         ; [#uses = 2]
  %2 = lshr exact i64 %1, 3                       ; [#uses = 1]
  %3 = add nuw nsw i64 %2, 1                      ; [#uses = 2]
  %xtraiter = and i64 %3, 3                       ; [#uses = 2]
  %4 = icmp ult i64 %1, 24                        ; [#uses = 1]
  br i1 %4, label %middle.block.unr-lcssa, label %vector.ph.new

vector.ph.new:                                    ; preds = %vector.ph
  %unroll_iter = and i64 %3, 4611686018427387900  ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.3, %vector.body ] ; [#uses = 5, type = i64]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph.new ], [ %27, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1 = phi <4 x i32> [ zeroinitializer, %vector.ph.new ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.3, %vector.body ] ; [#uses = 1, type = i64]
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %index ; [#uses = 2, type = i32*]
  %6 = bitcast i32* %5 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %6, align 4 ; [#uses = 1]
  %7 = getelementptr inbounds i32, i32* %5, i64 4 ; [#uses = 1, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load2 = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 1]
  %9 = add <4 x i32> %wide.load, %vec.phi         ; [#uses = 1]
  %10 = add <4 x i32> %wide.load2, %vec.phi1      ; [#uses = 1]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %11 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %index.next ; [#uses = 2, type = i32*]
  %12 = bitcast i32* %11 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %12, align 4 ; [#uses = 1]
  %13 = getelementptr inbounds i32, i32* %11, i64 4 ; [#uses = 1, type = i32*]
  %14 = bitcast i32* %13 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.1 = load <4 x i32>, <4 x i32>* %14, align 4 ; [#uses = 1]
  %15 = add <4 x i32> %wide.load.1, %9            ; [#uses = 1]
  %16 = add <4 x i32> %wide.load2.1, %10          ; [#uses = 1]
  %index.next.1 = or i64 %index, 16               ; [#uses = 1]
  %17 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %index.next.1 ; [#uses = 2, type = i32*]
  %18 = bitcast i32* %17 to <4 x i32>*            ; [#uses = 1]
  %wide.load.2 = load <4 x i32>, <4 x i32>* %18, align 4 ; [#uses = 1]
  %19 = getelementptr inbounds i32, i32* %17, i64 4 ; [#uses = 1, type = i32*]
  %20 = bitcast i32* %19 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.2 = load <4 x i32>, <4 x i32>* %20, align 4 ; [#uses = 1]
  %21 = add <4 x i32> %wide.load.2, %15           ; [#uses = 1]
  %22 = add <4 x i32> %wide.load2.2, %16          ; [#uses = 1]
  %index.next.2 = or i64 %index, 24               ; [#uses = 1]
  %23 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %index.next.2 ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.3 = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 1]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.3 = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 1]
  %27 = add <4 x i32> %wide.load.3, %21           ; [#uses = 3]
  %28 = add <4 x i32> %wide.load2.3, %22          ; [#uses = 3]
  %index.next.3 = add i64 %index, 32              ; [#uses = 2]
  %niter.nsub.3 = add i64 %niter, -4              ; [#uses = 2]
  %niter.ncmp.3 = icmp eq i64 %niter.nsub.3, 0    ; [#uses = 1]
  br i1 %niter.ncmp.3, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !8

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa5.ph = phi <4 x i32> [ undef, %vector.ph ], [ %27, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4.ph = phi <4 x i32> [ undef, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.3, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %27, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %middle.block, label %vector.body.epil

vector.body.epil:                                 ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %index.epil = phi i64 [ %index.next.epil, %vector.body.epil ], [ %index.unr, %middle.block.unr-lcssa ] ; [#uses = 2, type = i64]
  %vec.phi.epil = phi <4 x i32> [ %33, %vector.body.epil ], [ %vec.phi.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.epil = phi <4 x i32> [ %34, %vector.body.epil ], [ %vec.phi1.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %epil.iter = phi i64 [ %epil.iter.sub, %vector.body.epil ], [ %xtraiter, %middle.block.unr-lcssa ] ; [#uses = 1, type = i64]
  %29 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %index.epil ; [#uses = 2, type = i32*]
  %30 = bitcast i32* %29 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %30, align 4 ; [#uses = 1]
  %31 = getelementptr inbounds i32, i32* %29, i64 4 ; [#uses = 1, type = i32*]
  %32 = bitcast i32* %31 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.epil = load <4 x i32>, <4 x i32>* %32, align 4 ; [#uses = 1]
  %33 = add <4 x i32> %wide.load.epil, %vec.phi.epil ; [#uses = 2]
  %34 = add <4 x i32> %wide.load2.epil, %vec.phi1.epil ; [#uses = 2]
  %index.next.epil = add i64 %index.epil, 8       ; [#uses = 1]
  %epil.iter.sub = add i64 %epil.iter, -1         ; [#uses = 2]
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.sub, 0 ; [#uses = 1]
  br i1 %epil.iter.cmp.not, label %middle.block, label %vector.body.epil, !llvm.loop !10

middle.block:                                     ; preds = %vector.body.epil, %middle.block.unr-lcssa
  %.lcssa5 = phi <4 x i32> [ %.lcssa5.ph, %middle.block.unr-lcssa ], [ %33, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4 = phi <4 x i32> [ %.lcssa4.ph, %middle.block.unr-lcssa ], [ %34, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %bin.rdx = add <4 x i32> %.lcssa4, %.lcssa5     ; [#uses = 1]
  %35 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> %bin.rdx) ; [#uses = 2]
  %cmp.n = icmp eq i64 %r_arg.fca.0.extract.i.i.i.i, %n.vec ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9iteration__T3sumTAiTiZQkFNaNbNiNfQqiZi.exit, label %forbody.i.i.i.i.preheader3

forbody.i.i.i.i.preheader3:                       ; preds = %middle.block, %forbody.i.i.i.i.preheader
  %.ph = phi i32 [ 0, %forbody.i.i.i.i.preheader ], [ %35, %middle.block ] ; [#uses = 1, type = i32]
  %__key203.07.i.i.i.i.ph = phi i64 [ 0, %forbody.i.i.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  br label %forbody.i.i.i.i

forbody.i.i.i.i:                                  ; preds = %forbody.i.i.i.i.preheader3, %forbody.i.i.i.i
  %36 = phi i32 [ %39, %forbody.i.i.i.i ], [ %.ph, %forbody.i.i.i.i.preheader3 ] ; [#uses = 1, type = i32]
  %__key203.07.i.i.i.i = phi i64 [ %40, %forbody.i.i.i.i ], [ %__key203.07.i.i.i.i.ph, %forbody.i.i.i.i.preheader3 ] ; [#uses = 2, type = i64]
  %37 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i.i, i64 %__key203.07.i.i.i.i ; [#uses = 1, type = i32*]
  %38 = load i32, i32* %37, align 4               ; [#uses = 1]
  %39 = add i32 %38, %36                          ; [#uses = 2]
  %40 = add nuw i64 %__key203.07.i.i.i.i, 1       ; [#uses = 2]
  %exitcond.not.i.i.i.i = icmp eq i64 %40, %r_arg.fca.0.extract.i.i.i.i ; [#uses = 1]
  br i1 %exitcond.not.i.i.i.i, label %_D3std9algorithm9iteration__T3sumTAiTiZQkFNaNbNiNfQqiZi.exit, label %forbody.i.i.i.i, !llvm.loop !12

_D3std9algorithm9iteration__T3sumTAiTiZQkFNaNbNiNfQqiZi.exit: ; preds = %forbody.i.i.i.i, %middle.block, %0
  %41 = phi i32 [ 0, %0 ], [ %35, %middle.block ], [ %39, %forbody.i.i.i.i ] ; [#uses = 1, type = i32]
  ret i32 %41
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio__T7writelnTlZQlFNflZv(i64 %_param_0_arg) local_unnamed_addr #1 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
  %__tmpfordtor218 = alloca %std.stdio.File, align 8 ; [#uses = 4, size/byte = 24]
  call void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias nonnull sret align 8 %__tmpfordtor218) #4
  invoke void @_D3std5stdio4File__T5writeTlTaZQlMFNflaZv(%std.stdio.File* nonnull %__tmpfordtor218, i8 zeroext 10, 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 %__tmpfordtor218) #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 %__tmpfordtor218) #4
  call void @_Unwind_Resume(i8* %2)
  unreachable
}

; [#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 #1 {
  %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 = 1]
declare %std.stdio.File* @_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea21_636f72652e737464632e737464696f2e737464696eZQDeFNbNcNdNiZSQEfQEe4File() local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std5stdio4File__T6readlnTAyaZQmMFwZQk(%std.stdio.File* nonnull %.this_arg, i32 %terminator_arg) local_unnamed_addr #1 {
  %buf = alloca { i64, i8* }, align 8             ; [#uses = 4, size/byte = 16]
  %1 = getelementptr inbounds %std.stdio.File, %std.stdio.File* %.this_arg, i64 0, i32 0 ; [#uses = 4, type = %std.stdio.File.Impl**]
  %2 = bitcast { i64, i8* }* %buf to i8*          ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %2, i8 0, i64 16, i1 false)
  %3 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 3]
  %.not.i = icmp eq %std.stdio.File.Impl* %3, null ; [#uses = 1]
  br i1 %.not.i, label %if.i.i, label %andandend.i

andandend.i:                                      ; preds = %0
  %4 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %3, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %5 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %4, align 8 ; [#uses = 2]
  %.not9.i = icmp eq %core.stdc.stdio._IO_FILE* %5, null ; [#uses = 1]
  br i1 %.not9.i, label %if.i.i, label %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i

if.i.i:                                           ; preds = %andandend.i, %0
  tail call void @_D3std9exception__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZNn({ i64, i8* } { i64 38, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.2, i32 0, i32 0) }) #12
  unreachable

_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i: ; preds = %andandend.i
  %6 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %3, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %7 = load i32, i32* %6, align 4                 ; [#uses = 1]
  %8 = icmp eq i32 %7, 0                          ; [#uses = 1]
  br i1 %8, label %if.i, label %_D3std5stdio4File__T6readlnTaZQkMFKAawZm.exit

if.i:                                             ; preds = %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i
  %9 = tail call i32 @fwide(%core.stdc.stdio._IO_FILE* nonnull %5, i32 0) #4 ; [#uses = 2]
  %10 = icmp slt i32 %9, 0                        ; [#uses = 1]
  br i1 %10, label %if1.i, label %else.i

if1.i:                                            ; preds = %if.i
  %11 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 1]
  %12 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %11, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 1, i32* %12, align 4
  br label %_D3std5stdio4File__T6readlnTaZQkMFKAawZm.exit

else.i:                                           ; preds = %if.i
  %.not7.i = icmp eq i32 %9, 0                    ; [#uses = 1]
  br i1 %.not7.i, label %_D3std5stdio4File__T6readlnTaZQkMFKAawZm.exit, label %if3.i

if3.i:                                            ; preds = %else.i
  %13 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 1]
  %14 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %13, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 2, i32* %14, align 4
  br label %_D3std5stdio4File__T6readlnTaZQkMFKAawZm.exit

_D3std5stdio4File__T6readlnTaZQkMFKAawZm.exit:    ; preds = %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit.i, %if1.i, %else.i, %if3.i
  %.fca.0.gep = getelementptr inbounds { i64, i8* }, { i64, i8* }* %buf, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.fca.1.gep = getelementptr inbounds { i64, i8* }, { i64, i8* }* %buf, i64 0, i32 1 ; [#uses = 1, type = i8**]
  %15 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 2]
  %16 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %15, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %17 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %16, align 8 ; [#uses = 1]
  %18 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %15, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %19 = load i32, i32* %18, align 4               ; [#uses = 1]
  %20 = call i64 @_D3std5stdio10readlnImplFPOS4core4stdcQBg8_IO_FILEKAawEQCbQCa4File11OrientationZm(i32 %19, i32 %terminator_arg, { i64, i8* }* nonnull dereferenceable(16) %buf, %core.stdc.stdio._IO_FILE* %17) #4 ; [#uses = 0]
  %.len = load i64, i64* %.fca.0.gep, align 8     ; [#uses = 1]
  %.ptr = load i8*, i8** %.fca.1.gep, align 8     ; [#uses = 1]
  %21 = insertvalue { i64, i8* } undef, i64 %.len, 0 ; [#uses = 1]
  %22 = insertvalue { i64, i8* } %21, i8* %.ptr, 1 ; [#uses = 1]
  ret { i64, i8* } %22
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std5stdio4File__T6readlnTaZQkMFKAawZm(%std.stdio.File* nonnull %.this_arg, i32 %terminator_arg, { i64, i8* }* dereferenceable(16) %buf) local_unnamed_addr #1 {
  %1 = getelementptr inbounds %std.stdio.File, %std.stdio.File* %.this_arg, i64 0, i32 0 ; [#uses = 4, type = %std.stdio.File.Impl**]
  %2 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 3]
  %.not = icmp eq %std.stdio.File.Impl* %2, null  ; [#uses = 1]
  br i1 %.not, label %if.i, label %andandend

andandend:                                        ; preds = %0
  %3 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %2, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %4 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %3, align 8 ; [#uses = 2]
  %.not9 = icmp eq %core.stdc.stdio._IO_FILE* %4, null ; [#uses = 1]
  br i1 %.not9, label %if.i, label %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit

if.i:                                             ; preds = %andandend, %0
  tail call void @_D3std9exception__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZNn({ i64, i8* } { i64 38, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.2, i32 0, i32 0) }) #12
  unreachable

_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit: ; preds = %andandend
  %5 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %2, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %6 = load i32, i32* %5, align 4                 ; [#uses = 1]
  %7 = icmp eq i32 %6, 0                          ; [#uses = 1]
  br i1 %7, label %if, label %endif

if:                                               ; preds = %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit
  %8 = tail call i32 @fwide(%core.stdc.stdio._IO_FILE* nonnull %4, i32 0) #4 ; [#uses = 2]
  %9 = icmp slt i32 %8, 0                         ; [#uses = 1]
  br i1 %9, label %if1, label %else

if1:                                              ; preds = %if
  %10 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 1]
  %11 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %10, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 1, i32* %11, align 4
  br label %endif

else:                                             ; preds = %if
  %.not7 = icmp eq i32 %8, 0                      ; [#uses = 1]
  br i1 %.not7, label %endif, label %if3

if3:                                              ; preds = %else
  %12 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 1]
  %13 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %12, i64 0, i32 4 ; [#uses = 1, type = i32*]
  store i32 2, i32* %13, align 4
  br label %endif

endif:                                            ; preds = %else, %if1, %if3, %_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb.exit
  %14 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %1, align 8 ; [#uses = 2]
  %15 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %14, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %16 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %15, align 8 ; [#uses = 1]
  %17 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %14, i64 0, i32 4 ; [#uses = 1, type = i32*]
  %18 = load i32, i32* %17, align 4               ; [#uses = 1]
  %19 = tail call i64 @_D3std5stdio10readlnImplFPOS4core4stdcQBg8_IO_FILEKAawEQCbQCa4File11OrientationZm(i32 %18, i32 %terminator_arg, { i64, i8* }* nonnull dereferenceable(16) %buf, %core.stdc.stdio._IO_FILE* %16) #4 ; [#uses = 1]
  ret i64 %19
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb(i64 %line_arg, { i64, i8* } %file_arg, { i8*, { i64, i8* } (i8*)* } %msg_arg, i1 zeroext %value_arg) local_unnamed_addr #1 {
  br i1 %value_arg, label %endif, label %if

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__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZNn({ i64, i8* } %1, i64 %line_arg, { i64, i8* } %file_arg) #12
  unreachable

endif:                                            ; preds = %0
  ret i1 true
}

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

; [#uses = 3]
declare i64 @_D3std5stdio10readlnImplFPOS4core4stdcQBg8_IO_FILEKAawEQCbQCa4File11OrientationZm(i32, i32, { i64, i8* }* dereferenceable(16), %core.stdc.stdio._IO_FILE*) local_unnamed_addr #4

; [#uses = 4]
; Function Attrs: noreturn uwtable
define weak_odr void @_D3std9exception__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZNn({ i64, i8* } %msg_arg, i64 %line_arg, { i64, i8* } %file_arg) local_unnamed_addr #5 {
  %.makelvaluetmp = alloca { i64, i8* }, align 8  ; [#uses = 2, size/byte = 16]
  %.makelvaluetmp2 = alloca { i64, i8* }, align 8 ; [#uses = 2, size/byte = 16]
  %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 @_D9Exception7__ClassZ) #6 ; [#uses = 5]
  %vtbl = bitcast %object.Object* %.newclass_gc_alloc to [10 x i8*]** ; [#uses = 1]
  store [10 x i8*]* @_D9Exception6__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(60) %3, i8* nonnull align 8 dereferenceable(60) bitcast ({ i64, i8* }* getelementptr inbounds (%object.Exception, %object.Exception* @_D9Exception6__initZ, i64 0, i32 2) to i8*), i64 60, i1 false)
  %.not = icmp eq i8* %msg_arg.fca.1.extract, null ; [#uses = 1]
  br i1 %.not, label %condfalse, 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]
  %5 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.makelvaluetmp, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %.len, i64* %5, align 8
  br label %condend

condfalse:                                        ; preds = %0
  %6 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.makelvaluetmp2, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 18, i64* %6, align 8
  br label %condend

condend:                                          ; preds = %condfalse, %condtrue
  %.makelvaluetmp2.sink = phi { i64, i8* }* [ %.makelvaluetmp2, %condfalse ], [ %.makelvaluetmp, %condtrue ] ; [#uses = 2, type = { i64, i8* }*]
  %.sink = phi i8* [ getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), %condfalse ], [ %.ptr.i.i, %condtrue ] ; [#uses = 1, type = i8*]
  %7 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %.makelvaluetmp2.sink, i64 0, i32 1 ; [#uses = 1, type = i8**]
  store i8* %.sink, i8** %7, align 8
  %.newclass_gc = bitcast %object.Object* %.newclass_gc_alloc to %object.Exception* ; [#uses = 1]
  %8 = tail call %object.Exception* @_D6object9Exception6__ctorMFNaNbNiNfAyaQdmCQBp9ThrowableZCQBx(%object.Exception* nonnull returned %.newclass_gc, %object.Throwable* null, i64 %line_arg, { i64, i8* } %file_arg, { i64, i8* }* nonnull byval align 8 %.makelvaluetmp2.sink) #4 ; [#uses = 0]
  %9 = bitcast %object.Object* %.newclass_gc_alloc to %object.Throwable* ; [#uses = 1]
  tail call void @_d_throw_exception(%object.Throwable* %9) #3
  unreachable
}

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

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

; [#uses = 1]
declare %object.Exception* @_D6object9Exception6__ctorMFNaNbNiNfAyaQdmCQBp9ThrowableZCQBx(%object.Exception* nonnull returned, %object.Throwable*, i64, { i64, i8* }, { i64, i8* }* byval align 8) local_unnamed_addr #4

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T4idupTxaZQjFNaNbNdNfAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #1 {
  %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 = 19]
; Function Attrs: cold noreturn uwtable
declare void @_d_throw_exception(%object.Throwable*) local_unnamed_addr #3

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T4_dupTxaTyaZQmFNaNbNeMAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #1 {
  %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 = 4]
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 #1 {
  %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
  %__key160.015 = phi i64 [ %4, %forbody ], [ 0, %0 ] ; [#uses = 2, type = i64]
  %2 = getelementptr inbounds i8, i8* %a_arg.fca.1.extract, i64 %__key160.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) #6 ; [#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 %__key160.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 = 1]
; Function Attrs: uwtable
declare { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo*, { i64, i8* }* dereferenceable(16), i64) local_unnamed_addr #6

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std5range10primitives__T5emptyTAyaZQlFNaNbNdNiNfMKQtZb({ i64, i8* }* dereferenceable(16) %a) local_unnamed_addr #1 {
  %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 = 2]
; Function Attrs: cold noreturn uwtable
declare void @_d_arraybounds_slice({ i64, i8* }, i32, i64, i64, i64) local_unnamed_addr #3

; [#uses = 11]
declare i32 @_aApplycd1({ i64, i8* }, { i8*, i32 (i8*, i8*)* }) local_unnamed_addr #4

; [#uses = 1]
; Function Attrs: uwtable
define linkonce_odr i32 @_D3std9algorithm9searching__T5countS6source4mainFZ9__lambda7TAyaZQBkMFQjZ14__foreachbody3MFNaNbNiNfKwZi(i8* nonnull %.nest_arg, i32* dereferenceable(4) %__applyArg0) #1 {
  %1 = load i32, i32* %__applyArg0, align 4       ; [#uses = 1]
  %2 = bitcast i8* %.nest_arg to i64**            ; [#uses = 1]
  %.frame.main12 = load i64*, i64** %2, align 8   ; [#uses = 1]
  %3 = add i32 %1, -48                            ; [#uses = 1]
  %4 = zext i32 %3 to i64                         ; [#uses = 1]
  %5 = load i64, i64* %.frame.main12, align 8     ; [#uses = 1]
  %6 = icmp eq i64 %5, %4                         ; [#uses = 1]
  br i1 %6, label %if, label %endif

if:                                               ; preds = %0
  %result = getelementptr inbounds i8, i8* %.nest_arg, i64 8 ; [#uses = 1, type = i8*]
  %7 = bitcast i8* %result to i64*                ; [#uses = 2]
  %8 = load i64, i64* %7, align 8                 ; [#uses = 1]
  %9 = add i64 %8, 1                              ; [#uses = 1]
  store i64 %9, i64* %7, align 8
  br label %endif

endif:                                            ; preds = %if, %0
  ret i32 0
}

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

bounds.ok:                                        ; preds = %0
  %a_arg.fca.1.extract = extractvalue { i64, i32* } %a_arg, 1 ; [#uses = 1]
  ret i32* %a_arg.fca.1.extract

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 54, i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.6, i32 0, i32 0) }, i32 2472) #3
  unreachable
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T3sumTAiTiZQkFNaNbNiNfQqiZi(i32 %seed_arg, { i64, i32* } %r_arg) local_unnamed_addr #1 {
  %r_arg.fca.0.extract.i.i.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 5]
  %r_arg.fca.1.extract.i.i.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 6]
  %.not.i.i.i = icmp eq i64 %r_arg.fca.0.extract.i.i.i, 0 ; [#uses = 1]
  br i1 %.not.i.i.i, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__TQBcTiTAiZQBlFNaNbNiNfiQqZi.exit, label %forbody.i.i.i.preheader

forbody.i.i.i.preheader:                          ; preds = %0
  %min.iters.check = icmp ult i64 %r_arg.fca.0.extract.i.i.i, 8 ; [#uses = 1]
  br i1 %min.iters.check, label %forbody.i.i.i.preheader3, label %vector.ph

vector.ph:                                        ; preds = %forbody.i.i.i.preheader
  %n.vec = and i64 %r_arg.fca.0.extract.i.i.i, -8 ; [#uses = 3]
  %1 = insertelement <4 x i32> <i32 undef, i32 0, i32 0, i32 0>, i32 %seed_arg, i32 0 ; [#uses = 2]
  %2 = add i64 %n.vec, -8                         ; [#uses = 2]
  %3 = lshr exact i64 %2, 3                       ; [#uses = 1]
  %4 = add nuw nsw i64 %3, 1                      ; [#uses = 2]
  %xtraiter = and i64 %4, 3                       ; [#uses = 2]
  %5 = icmp ult i64 %2, 24                        ; [#uses = 1]
  br i1 %5, label %middle.block.unr-lcssa, label %vector.ph.new

vector.ph.new:                                    ; preds = %vector.ph
  %unroll_iter = and i64 %4, 4611686018427387900  ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.3, %vector.body ] ; [#uses = 5, type = i64]
  %vec.phi = phi <4 x i32> [ %1, %vector.ph.new ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1 = phi <4 x i32> [ zeroinitializer, %vector.ph.new ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.3, %vector.body ] ; [#uses = 1, type = i64]
  %6 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %index ; [#uses = 2, type = i32*]
  %7 = bitcast i32* %6 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %7, align 4 ; [#uses = 1]
  %8 = getelementptr inbounds i32, i32* %6, i64 4 ; [#uses = 1, type = i32*]
  %9 = bitcast i32* %8 to <4 x i32>*              ; [#uses = 1]
  %wide.load2 = load <4 x i32>, <4 x i32>* %9, align 4 ; [#uses = 1]
  %10 = add <4 x i32> %wide.load, %vec.phi        ; [#uses = 1]
  %11 = add <4 x i32> %wide.load2, %vec.phi1      ; [#uses = 1]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %12 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %index.next ; [#uses = 2, type = i32*]
  %13 = bitcast i32* %12 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %13, align 4 ; [#uses = 1]
  %14 = getelementptr inbounds i32, i32* %12, i64 4 ; [#uses = 1, type = i32*]
  %15 = bitcast i32* %14 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.1 = load <4 x i32>, <4 x i32>* %15, align 4 ; [#uses = 1]
  %16 = add <4 x i32> %wide.load.1, %10           ; [#uses = 1]
  %17 = add <4 x i32> %wide.load2.1, %11          ; [#uses = 1]
  %index.next.1 = or i64 %index, 16               ; [#uses = 1]
  %18 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %index.next.1 ; [#uses = 2, type = i32*]
  %19 = bitcast i32* %18 to <4 x i32>*            ; [#uses = 1]
  %wide.load.2 = load <4 x i32>, <4 x i32>* %19, align 4 ; [#uses = 1]
  %20 = getelementptr inbounds i32, i32* %18, i64 4 ; [#uses = 1, type = i32*]
  %21 = bitcast i32* %20 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.2 = load <4 x i32>, <4 x i32>* %21, align 4 ; [#uses = 1]
  %22 = add <4 x i32> %wide.load.2, %16           ; [#uses = 1]
  %23 = add <4 x i32> %wide.load2.2, %17          ; [#uses = 1]
  %index.next.2 = or i64 %index, 24               ; [#uses = 1]
  %24 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %index.next.2 ; [#uses = 2, type = i32*]
  %25 = bitcast i32* %24 to <4 x i32>*            ; [#uses = 1]
  %wide.load.3 = load <4 x i32>, <4 x i32>* %25, align 4 ; [#uses = 1]
  %26 = getelementptr inbounds i32, i32* %24, i64 4 ; [#uses = 1, type = i32*]
  %27 = bitcast i32* %26 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.3 = load <4 x i32>, <4 x i32>* %27, align 4 ; [#uses = 1]
  %28 = add <4 x i32> %wide.load.3, %22           ; [#uses = 3]
  %29 = add <4 x i32> %wide.load2.3, %23          ; [#uses = 3]
  %index.next.3 = add i64 %index, 32              ; [#uses = 2]
  %niter.nsub.3 = add i64 %niter, -4              ; [#uses = 2]
  %niter.ncmp.3 = icmp eq i64 %niter.nsub.3, 0    ; [#uses = 1]
  br i1 %niter.ncmp.3, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !14

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa5.ph = phi <4 x i32> [ undef, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4.ph = phi <4 x i32> [ undef, %vector.ph ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.3, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %1, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %middle.block, label %vector.body.epil

vector.body.epil:                                 ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %index.epil = phi i64 [ %index.next.epil, %vector.body.epil ], [ %index.unr, %middle.block.unr-lcssa ] ; [#uses = 2, type = i64]
  %vec.phi.epil = phi <4 x i32> [ %34, %vector.body.epil ], [ %vec.phi.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.epil = phi <4 x i32> [ %35, %vector.body.epil ], [ %vec.phi1.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %epil.iter = phi i64 [ %epil.iter.sub, %vector.body.epil ], [ %xtraiter, %middle.block.unr-lcssa ] ; [#uses = 1, type = i64]
  %30 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %index.epil ; [#uses = 2, type = i32*]
  %31 = bitcast i32* %30 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %31, align 4 ; [#uses = 1]
  %32 = getelementptr inbounds i32, i32* %30, i64 4 ; [#uses = 1, type = i32*]
  %33 = bitcast i32* %32 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.epil = load <4 x i32>, <4 x i32>* %33, align 4 ; [#uses = 1]
  %34 = add <4 x i32> %wide.load.epil, %vec.phi.epil ; [#uses = 2]
  %35 = add <4 x i32> %wide.load2.epil, %vec.phi1.epil ; [#uses = 2]
  %index.next.epil = add i64 %index.epil, 8       ; [#uses = 1]
  %epil.iter.sub = add i64 %epil.iter, -1         ; [#uses = 2]
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.sub, 0 ; [#uses = 1]
  br i1 %epil.iter.cmp.not, label %middle.block, label %vector.body.epil, !llvm.loop !15

middle.block:                                     ; preds = %vector.body.epil, %middle.block.unr-lcssa
  %.lcssa5 = phi <4 x i32> [ %.lcssa5.ph, %middle.block.unr-lcssa ], [ %34, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4 = phi <4 x i32> [ %.lcssa4.ph, %middle.block.unr-lcssa ], [ %35, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %bin.rdx = add <4 x i32> %.lcssa4, %.lcssa5     ; [#uses = 1]
  %36 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> %bin.rdx) ; [#uses = 2]
  %cmp.n = icmp eq i64 %r_arg.fca.0.extract.i.i.i, %n.vec ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__TQBcTiTAiZQBlFNaNbNiNfiQqZi.exit, label %forbody.i.i.i.preheader3

forbody.i.i.i.preheader3:                         ; preds = %middle.block, %forbody.i.i.i.preheader
  %.ph = phi i32 [ %seed_arg, %forbody.i.i.i.preheader ], [ %36, %middle.block ] ; [#uses = 1, type = i32]
  %__key203.07.i.i.i.ph = phi i64 [ 0, %forbody.i.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  br label %forbody.i.i.i

forbody.i.i.i:                                    ; preds = %forbody.i.i.i.preheader3, %forbody.i.i.i
  %37 = phi i32 [ %40, %forbody.i.i.i ], [ %.ph, %forbody.i.i.i.preheader3 ] ; [#uses = 1, type = i32]
  %__key203.07.i.i.i = phi i64 [ %41, %forbody.i.i.i ], [ %__key203.07.i.i.i.ph, %forbody.i.i.i.preheader3 ] ; [#uses = 2, type = i64]
  %38 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i.i, i64 %__key203.07.i.i.i ; [#uses = 1, type = i32*]
  %39 = load i32, i32* %38, align 4               ; [#uses = 1]
  %40 = add i32 %39, %37                          ; [#uses = 2]
  %41 = add nuw i64 %__key203.07.i.i.i, 1         ; [#uses = 2]
  %exitcond.not.i.i.i = icmp eq i64 %41, %r_arg.fca.0.extract.i.i.i ; [#uses = 1]
  br i1 %exitcond.not.i.i.i, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__TQBcTiTAiZQBlFNaNbNiNfiQqZi.exit, label %forbody.i.i.i, !llvm.loop !16

_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__TQBcTiTAiZQBlFNaNbNiNfiQqZi.exit: ; preds = %forbody.i.i.i, %middle.block, %0
  %42 = phi i32 [ %seed_arg, %0 ], [ %36, %middle.block ], [ %40, %forbody.i.i.i ] ; [#uses = 1, type = i32]
  ret i32 %42
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__TQBcTiTAiZQBlFNaNbNiNfiQqZi({ i64, i32* } %r_arg, i32 %seed_arg) local_unnamed_addr #1 {
  %r_arg.fca.0.extract.i.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 5]
  %r_arg.fca.1.extract.i.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 6]
  %.not.i.i = icmp eq i64 %r_arg.fca.0.extract.i.i, 0 ; [#uses = 1]
  br i1 %.not.i.i, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T13reducePreImplTAiTiZQvFNaNbNiNfQqKiZi.exit, label %forbody.i.i.preheader

forbody.i.i.preheader:                            ; preds = %0
  %min.iters.check = icmp ult i64 %r_arg.fca.0.extract.i.i, 8 ; [#uses = 1]
  br i1 %min.iters.check, label %forbody.i.i.preheader3, label %vector.ph

vector.ph:                                        ; preds = %forbody.i.i.preheader
  %n.vec = and i64 %r_arg.fca.0.extract.i.i, -8   ; [#uses = 3]
  %1 = insertelement <4 x i32> <i32 undef, i32 0, i32 0, i32 0>, i32 %seed_arg, i32 0 ; [#uses = 2]
  %2 = add i64 %n.vec, -8                         ; [#uses = 2]
  %3 = lshr exact i64 %2, 3                       ; [#uses = 1]
  %4 = add nuw nsw i64 %3, 1                      ; [#uses = 2]
  %xtraiter = and i64 %4, 3                       ; [#uses = 2]
  %5 = icmp ult i64 %2, 24                        ; [#uses = 1]
  br i1 %5, label %middle.block.unr-lcssa, label %vector.ph.new

vector.ph.new:                                    ; preds = %vector.ph
  %unroll_iter = and i64 %4, 4611686018427387900  ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.3, %vector.body ] ; [#uses = 5, type = i64]
  %vec.phi = phi <4 x i32> [ %1, %vector.ph.new ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1 = phi <4 x i32> [ zeroinitializer, %vector.ph.new ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.3, %vector.body ] ; [#uses = 1, type = i64]
  %6 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %index ; [#uses = 2, type = i32*]
  %7 = bitcast i32* %6 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %7, align 4 ; [#uses = 1]
  %8 = getelementptr inbounds i32, i32* %6, i64 4 ; [#uses = 1, type = i32*]
  %9 = bitcast i32* %8 to <4 x i32>*              ; [#uses = 1]
  %wide.load2 = load <4 x i32>, <4 x i32>* %9, align 4 ; [#uses = 1]
  %10 = add <4 x i32> %wide.load, %vec.phi        ; [#uses = 1]
  %11 = add <4 x i32> %wide.load2, %vec.phi1      ; [#uses = 1]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %12 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %index.next ; [#uses = 2, type = i32*]
  %13 = bitcast i32* %12 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %13, align 4 ; [#uses = 1]
  %14 = getelementptr inbounds i32, i32* %12, i64 4 ; [#uses = 1, type = i32*]
  %15 = bitcast i32* %14 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.1 = load <4 x i32>, <4 x i32>* %15, align 4 ; [#uses = 1]
  %16 = add <4 x i32> %wide.load.1, %10           ; [#uses = 1]
  %17 = add <4 x i32> %wide.load2.1, %11          ; [#uses = 1]
  %index.next.1 = or i64 %index, 16               ; [#uses = 1]
  %18 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %index.next.1 ; [#uses = 2, type = i32*]
  %19 = bitcast i32* %18 to <4 x i32>*            ; [#uses = 1]
  %wide.load.2 = load <4 x i32>, <4 x i32>* %19, align 4 ; [#uses = 1]
  %20 = getelementptr inbounds i32, i32* %18, i64 4 ; [#uses = 1, type = i32*]
  %21 = bitcast i32* %20 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.2 = load <4 x i32>, <4 x i32>* %21, align 4 ; [#uses = 1]
  %22 = add <4 x i32> %wide.load.2, %16           ; [#uses = 1]
  %23 = add <4 x i32> %wide.load2.2, %17          ; [#uses = 1]
  %index.next.2 = or i64 %index, 24               ; [#uses = 1]
  %24 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %index.next.2 ; [#uses = 2, type = i32*]
  %25 = bitcast i32* %24 to <4 x i32>*            ; [#uses = 1]
  %wide.load.3 = load <4 x i32>, <4 x i32>* %25, align 4 ; [#uses = 1]
  %26 = getelementptr inbounds i32, i32* %24, i64 4 ; [#uses = 1, type = i32*]
  %27 = bitcast i32* %26 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.3 = load <4 x i32>, <4 x i32>* %27, align 4 ; [#uses = 1]
  %28 = add <4 x i32> %wide.load.3, %22           ; [#uses = 3]
  %29 = add <4 x i32> %wide.load2.3, %23          ; [#uses = 3]
  %index.next.3 = add i64 %index, 32              ; [#uses = 2]
  %niter.nsub.3 = add i64 %niter, -4              ; [#uses = 2]
  %niter.ncmp.3 = icmp eq i64 %niter.nsub.3, 0    ; [#uses = 1]
  br i1 %niter.ncmp.3, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !17

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa5.ph = phi <4 x i32> [ undef, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4.ph = phi <4 x i32> [ undef, %vector.ph ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.3, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %1, %vector.ph ], [ %28, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %29, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %middle.block, label %vector.body.epil

vector.body.epil:                                 ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %index.epil = phi i64 [ %index.next.epil, %vector.body.epil ], [ %index.unr, %middle.block.unr-lcssa ] ; [#uses = 2, type = i64]
  %vec.phi.epil = phi <4 x i32> [ %34, %vector.body.epil ], [ %vec.phi.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi1.epil = phi <4 x i32> [ %35, %vector.body.epil ], [ %vec.phi1.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %epil.iter = phi i64 [ %epil.iter.sub, %vector.body.epil ], [ %xtraiter, %middle.block.unr-lcssa ] ; [#uses = 1, type = i64]
  %30 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %index.epil ; [#uses = 2, type = i32*]
  %31 = bitcast i32* %30 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %31, align 4 ; [#uses = 1]
  %32 = getelementptr inbounds i32, i32* %30, i64 4 ; [#uses = 1, type = i32*]
  %33 = bitcast i32* %32 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.epil = load <4 x i32>, <4 x i32>* %33, align 4 ; [#uses = 1]
  %34 = add <4 x i32> %wide.load.epil, %vec.phi.epil ; [#uses = 2]
  %35 = add <4 x i32> %wide.load2.epil, %vec.phi1.epil ; [#uses = 2]
  %index.next.epil = add i64 %index.epil, 8       ; [#uses = 1]
  %epil.iter.sub = add i64 %epil.iter, -1         ; [#uses = 2]
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.sub, 0 ; [#uses = 1]
  br i1 %epil.iter.cmp.not, label %middle.block, label %vector.body.epil, !llvm.loop !18

middle.block:                                     ; preds = %vector.body.epil, %middle.block.unr-lcssa
  %.lcssa5 = phi <4 x i32> [ %.lcssa5.ph, %middle.block.unr-lcssa ], [ %34, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa4 = phi <4 x i32> [ %.lcssa4.ph, %middle.block.unr-lcssa ], [ %35, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %bin.rdx = add <4 x i32> %.lcssa4, %.lcssa5     ; [#uses = 1]
  %36 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> %bin.rdx) ; [#uses = 2]
  %cmp.n = icmp eq i64 %r_arg.fca.0.extract.i.i, %n.vec ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T13reducePreImplTAiTiZQvFNaNbNiNfQqKiZi.exit, label %forbody.i.i.preheader3

forbody.i.i.preheader3:                           ; preds = %middle.block, %forbody.i.i.preheader
  %.ph = phi i32 [ %seed_arg, %forbody.i.i.preheader ], [ %36, %middle.block ] ; [#uses = 1, type = i32]
  %__key203.07.i.i.ph = phi i64 [ 0, %forbody.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  br label %forbody.i.i

forbody.i.i:                                      ; preds = %forbody.i.i.preheader3, %forbody.i.i
  %37 = phi i32 [ %40, %forbody.i.i ], [ %.ph, %forbody.i.i.preheader3 ] ; [#uses = 1, type = i32]
  %__key203.07.i.i = phi i64 [ %41, %forbody.i.i ], [ %__key203.07.i.i.ph, %forbody.i.i.preheader3 ] ; [#uses = 2, type = i64]
  %38 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 %__key203.07.i.i ; [#uses = 1, type = i32*]
  %39 = load i32, i32* %38, align 4               ; [#uses = 1]
  %40 = add i32 %39, %37                          ; [#uses = 2]
  %41 = add nuw i64 %__key203.07.i.i, 1           ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %41, %r_arg.fca.0.extract.i.i ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T13reducePreImplTAiTiZQvFNaNbNiNfQqKiZi.exit, label %forbody.i.i, !llvm.loop !19

_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T13reducePreImplTAiTiZQvFNaNbNiNfQqKiZi.exit: ; preds = %forbody.i.i, %middle.block, %0
  %42 = phi i32 [ %seed_arg, %0 ], [ %36, %middle.block ], [ %40, %forbody.i.i ] ; [#uses = 1, type = i32]
  ret i32 %42
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T13reducePreImplTAiTiZQvFNaNbNiNfQqKiZi(i32* dereferenceable(4) %_param_1, { i64, i32* } %r_arg) local_unnamed_addr #1 {
  %r_arg.fca.0.extract.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 4]
  %r_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 5]
  %.not.i = icmp eq i64 %r_arg.fca.0.extract.i, 0 ; [#uses = 1]
  %.pre8.i = load i32, i32* %_param_1, align 4    ; [#uses = 3]
  br i1 %.not.i, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit, label %forbody.i.preheader

forbody.i.preheader:                              ; preds = %0
  %1 = add i64 %r_arg.fca.0.extract.i, -1         ; [#uses = 1]
  %xtraiter = and i64 %r_arg.fca.0.extract.i, 3   ; [#uses = 2]
  %2 = icmp ult i64 %1, 3                         ; [#uses = 1]
  br i1 %2, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa, label %forbody.i.preheader.new

forbody.i.preheader.new:                          ; preds = %forbody.i.preheader
  %unroll_iter = and i64 %r_arg.fca.0.extract.i, -4 ; [#uses = 1]
  br label %forbody.i

forbody.i:                                        ; preds = %forbody.i, %forbody.i.preheader.new
  %3 = phi i32 [ %.pre8.i, %forbody.i.preheader.new ], [ %18, %forbody.i ] ; [#uses = 1, type = i32]
  %__key203.07.i = phi i64 [ 0, %forbody.i.preheader.new ], [ %19, %forbody.i ] ; [#uses = 5, type = i64]
  %niter = phi i64 [ %unroll_iter, %forbody.i.preheader.new ], [ %niter.nsub.3, %forbody.i ] ; [#uses = 1, type = i64]
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %__key203.07.i ; [#uses = 1, type = i32*]
  %5 = load i32, i32* %4, align 4                 ; [#uses = 1]
  %6 = add i32 %5, %3                             ; [#uses = 2]
  store i32 %6, i32* %_param_1, align 4
  %7 = or i64 %__key203.07.i, 1                   ; [#uses = 1]
  %8 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %7 ; [#uses = 1, type = i32*]
  %9 = load i32, i32* %8, align 4                 ; [#uses = 1]
  %10 = add i32 %9, %6                            ; [#uses = 2]
  store i32 %10, i32* %_param_1, align 4
  %11 = or i64 %__key203.07.i, 2                  ; [#uses = 1]
  %12 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %11 ; [#uses = 1, type = i32*]
  %13 = load i32, i32* %12, align 4               ; [#uses = 1]
  %14 = add i32 %13, %10                          ; [#uses = 2]
  store i32 %14, i32* %_param_1, align 4
  %15 = or i64 %__key203.07.i, 3                  ; [#uses = 1]
  %16 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %15 ; [#uses = 1, type = i32*]
  %17 = load i32, i32* %16, align 4               ; [#uses = 1]
  %18 = add i32 %17, %14                          ; [#uses = 4]
  store i32 %18, i32* %_param_1, align 4
  %19 = add nuw i64 %__key203.07.i, 4             ; [#uses = 2]
  %niter.nsub.3 = add i64 %niter, -4              ; [#uses = 2]
  %niter.ncmp.3 = icmp eq i64 %niter.nsub.3, 0    ; [#uses = 1]
  br i1 %niter.ncmp.3, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa, label %forbody.i

_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa: ; preds = %forbody.i, %forbody.i.preheader
  %.lcssa.ph = phi i32 [ undef, %forbody.i.preheader ], [ %18, %forbody.i ] ; [#uses = 1, type = i32]
  %.unr = phi i32 [ %.pre8.i, %forbody.i.preheader ], [ %18, %forbody.i ] ; [#uses = 1, type = i32]
  %__key203.07.i.unr = phi i64 [ 0, %forbody.i.preheader ], [ %19, %forbody.i ] ; [#uses = 1, type = i64]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit, label %forbody.i.epil

forbody.i.epil:                                   ; preds = %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa, %forbody.i.epil
  %20 = phi i32 [ %23, %forbody.i.epil ], [ %.unr, %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa ] ; [#uses = 1, type = i32]
  %__key203.07.i.epil = phi i64 [ %24, %forbody.i.epil ], [ %__key203.07.i.unr, %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa ] ; [#uses = 2, type = i64]
  %epil.iter = phi i64 [ %epil.iter.sub, %forbody.i.epil ], [ %xtraiter, %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa ] ; [#uses = 1, type = i64]
  %21 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %__key203.07.i.epil ; [#uses = 1, type = i32*]
  %22 = load i32, i32* %21, align 4               ; [#uses = 1]
  %23 = add i32 %22, %20                          ; [#uses = 3]
  store i32 %23, i32* %_param_1, align 4
  %24 = add nuw i64 %__key203.07.i.epil, 1        ; [#uses = 1]
  %epil.iter.sub = add i64 %epil.iter, -1         ; [#uses = 2]
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.sub, 0 ; [#uses = 1]
  br i1 %epil.iter.cmp.not, label %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit, label %forbody.i.epil, !llvm.loop !20

_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit: ; preds = %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa, %forbody.i.epil, %0
  %25 = phi i32 [ %.pre8.i, %0 ], [ %.lcssa.ph, %_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi.exit.loopexit.unr-lcssa ], [ %23, %forbody.i.epil ] ; [#uses = 1, type = i32]
  ret i32 %25
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T6reduceVAyaa5_61202b2062Z__T10reduceImplVbi0TAiTiZQwFNaNbNiNfQqKiZi(i32* dereferenceable(4) %_param_1, { i64, i32* } %r_arg) local_unnamed_addr #1 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 4]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 5]
  %.not = icmp eq i64 %r_arg.fca.0.extract, 0     ; [#uses = 1]
  %.pre8 = load i32, i32* %_param_1, align 4      ; [#uses = 3]
  br i1 %.not, label %endfor, label %forbody.preheader

forbody.preheader:                                ; preds = %0
  %1 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 1]
  %xtraiter = and i64 %r_arg.fca.0.extract, 3     ; [#uses = 2]
  %2 = icmp ult i64 %1, 3                         ; [#uses = 1]
  br i1 %2, label %endfor.loopexit.unr-lcssa, label %forbody.preheader.new

forbody.preheader.new:                            ; preds = %forbody.preheader
  %unroll_iter = and i64 %r_arg.fca.0.extract, -4 ; [#uses = 1]
  br label %forbody

forbody:                                          ; preds = %forbody, %forbody.preheader.new
  %3 = phi i32 [ %.pre8, %forbody.preheader.new ], [ %18, %forbody ] ; [#uses = 1, type = i32]
  %__key203.07 = phi i64 [ 0, %forbody.preheader.new ], [ %19, %forbody ] ; [#uses = 5, type = i64]
  %niter = phi i64 [ %unroll_iter, %forbody.preheader.new ], [ %niter.nsub.3, %forbody ] ; [#uses = 1, type = i64]
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key203.07 ; [#uses = 1, type = i32*]
  %5 = load i32, i32* %4, align 4                 ; [#uses = 1]
  %6 = add i32 %3, %5                             ; [#uses = 2]
  store i32 %6, i32* %_param_1, align 4
  %7 = or i64 %__key203.07, 1                     ; [#uses = 1]
  %8 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %7 ; [#uses = 1, type = i32*]
  %9 = load i32, i32* %8, align 4                 ; [#uses = 1]
  %10 = add i32 %6, %9                            ; [#uses = 2]
  store i32 %10, i32* %_param_1, align 4
  %11 = or i64 %__key203.07, 2                    ; [#uses = 1]
  %12 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %11 ; [#uses = 1, type = i32*]
  %13 = load i32, i32* %12, align 4               ; [#uses = 1]
  %14 = add i32 %10, %13                          ; [#uses = 2]
  store i32 %14, i32* %_param_1, align 4
  %15 = or i64 %__key203.07, 3                    ; [#uses = 1]
  %16 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %15 ; [#uses = 1, type = i32*]
  %17 = load i32, i32* %16, align 4               ; [#uses = 1]
  %18 = add i32 %14, %17                          ; [#uses = 4]
  store i32 %18, i32* %_param_1, align 4
  %19 = add nuw i64 %__key203.07, 4               ; [#uses = 2]
  %niter.nsub.3 = add i64 %niter, -4              ; [#uses = 2]
  %niter.ncmp.3 = icmp eq i64 %niter.nsub.3, 0    ; [#uses = 1]
  br i1 %niter.ncmp.3, label %endfor.loopexit.unr-lcssa, label %forbody

endfor.loopexit.unr-lcssa:                        ; preds = %forbody, %forbody.preheader
  %.lcssa.ph = phi i32 [ undef, %forbody.preheader ], [ %18, %forbody ] ; [#uses = 1, type = i32]
  %.unr = phi i32 [ %.pre8, %forbody.preheader ], [ %18, %forbody ] ; [#uses = 1, type = i32]
  %__key203.07.unr = phi i64 [ 0, %forbody.preheader ], [ %19, %forbody ] ; [#uses = 1, type = i64]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %endfor, label %forbody.epil

forbody.epil:                                     ; preds = %endfor.loopexit.unr-lcssa, %forbody.epil
  %20 = phi i32 [ %23, %forbody.epil ], [ %.unr, %endfor.loopexit.unr-lcssa ] ; [#uses = 1, type = i32]
  %__key203.07.epil = phi i64 [ %24, %forbody.epil ], [ %__key203.07.unr, %endfor.loopexit.unr-lcssa ] ; [#uses = 2, type = i64]
  %epil.iter = phi i64 [ %epil.iter.sub, %forbody.epil ], [ %xtraiter, %endfor.loopexit.unr-lcssa ] ; [#uses = 1, type = i64]
  %21 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key203.07.epil ; [#uses = 1, type = i32*]
  %22 = load i32, i32* %21, align 4               ; [#uses = 1]
  %23 = add i32 %20, %22                          ; [#uses = 3]
  store i32 %23, i32* %_param_1, align 4
  %24 = add nuw i64 %__key203.07.epil, 1          ; [#uses = 1]
  %epil.iter.sub = add i64 %epil.iter, -1         ; [#uses = 2]
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.sub, 0 ; [#uses = 1]
  br i1 %epil.iter.cmp.not, label %endfor, label %forbody.epil, !llvm.loop !21

endfor:                                           ; preds = %endfor.loopexit.unr-lcssa, %forbody.epil, %0
  %25 = phi i32 [ %.pre8, %0 ], [ %.lcssa.ph, %endfor.loopexit.unr-lcssa ], [ %23, %forbody.epil ] ; [#uses = 1, type = i32]
  ret i32 %25
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std10functional__T9binaryFunVAyaa5_61202b2062VQra1_61VQza1_62Z__TQBvTiTiZQCdFNaNbNiNfKiKiZi(i32* dereferenceable(4) %__b, i32* dereferenceable(4) %__a) local_unnamed_addr #1 {
  %1 = load i32, i32* %__a, align 4               ; [#uses = 1]
  %2 = load i32, i32* %__b, align 4               ; [#uses = 1]
  %3 = add i32 %2, %1                             ; [#uses = 1]
  ret i32 %3
}

; [#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__T5writeTlTaZQlMFNflaZv(%std.stdio.File* nonnull %.this_arg, i8 zeroext %_param_1_arg, i64 %_param_0_arg) local_unnamed_addr #1 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
unrolledstmt:
  %w = alloca %std.stdio.File.LockingTextWriter, align 8 ; [#uses = 7, size/byte = 48]
  %__copytmp216 = 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* %__copytmp216 to i8* ; [#uses = 1]
  %1 = bitcast %std.stdio.File.LockingTextWriter* %w to i8* ; [#uses = 1]
  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 %__copytmp216) #4
          to label %postinvoke3 unwind label %landingPad2

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

catch.std.utf.UTFException:                       ; preds = %landingPad2
  %2 = call %object.Throwable* @_d_eh_enter_catch(i8* %9) ; [#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 = %postinvoke3
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %w, i8 zeroext %_param_1_arg) #4
          to label %try.success unwind label %landingPad11

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

postinvoke9:                                      ; preds = %catch.std.utf.UTFException7
  unreachable

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

landingPad:                                       ; preds = %catch.std.utf.UTFException7, %catch.std.utf.UTFException
  %6 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  %7 = extractvalue { i8*, i32 } %6, 0            ; [#uses = 1]
  br label %eh.resume

eh.resume:                                        ; preds = %landingPad, %landingPad2, %landingPad11
  %eh.ptr.0.ph = phi i8* [ %14, %landingPad11 ], [ %9, %landingPad2 ], [ %7, %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

landingPad2:                                      ; preds = %postinvoke3, %unrolledstmt
  %8 = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 2]
  %9 = extractvalue { i8*, i32 } %8, 0            ; [#uses = 2]
  %10 = extractvalue { i8*, i32 } %8, 1           ; [#uses = 1]
  %11 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %12 = icmp eq i32 %10, %11                      ; [#uses = 1]
  br i1 %12, label %catch.std.utf.UTFException, label %eh.resume

landingPad11:                                     ; preds = %unrolledstmt1
  %13 = landingpad { i8*, i32 }
          cleanup
          catch %object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ ; [#uses = 2]
  %14 = extractvalue { i8*, i32 } %13, 0          ; [#uses = 2]
  %15 = extractvalue { i8*, i32 } %13, 1          ; [#uses = 1]
  %16 = call i32 @llvm.eh.typeid.for(i8* bitcast (%object.TypeInfo_Class* @_D3std3utf12UTFException7__ClassZ to i8*)) ; [#uses = 1]
  %17 = icmp eq i32 %15, %16                      ; [#uses = 1]
  br i1 %17, label %catch.std.utf.UTFException7, label %eh.resume
}

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

; [#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 = 2]
; Function Attrs: nounwind uwtable
declare %object.Throwable* @_d_eh_enter_catch(i8*) local_unnamed_addr #8

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std4conv__T11toTextRangeTlTSQBd5stdio4File17LockingTextWriterZQBzFNflQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture align 8 %writer, i64 %value_arg) local_unnamed_addr #1 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.11, 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.11, 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.11, 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.2, i32 0, i32 0) }) #12
          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]
  %__key215.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) #1
          to label %.noexc6 unwind label %eh.resume.loopexit

.noexc6:                                          ; preds = %forbody.i.i.i
  %21 = add nuw nsw i64 %__key215.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 %__key215.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.11, 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.2, i32 0, i32 0) }) #12
          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]
  %__key215.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) #1
          to label %.noexc19 unwind label %eh.resume.loopexit.split-lp.loopexit

.noexc19:                                         ; preds = %forbody.i.i.i17
  %39 = add nuw nsw i64 %__key215.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 = 1]
declare void @_D3std5stdio4File17LockingTextWriter14__aggrPostblitMFNeZv(%std.stdio.File.LockingTextWriter* nonnull) local_unnamed_addr #4

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

; [#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 #1 {
  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 #1 {
  %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 #1 {
  %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.2, 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.2, 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.2, 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 #1 {
  %1 = tail call i32 @fputc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

; [#uses = 2]
; 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 #1 {
  %1 = tail call i32 @fputwc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #4 ; [#uses = 1]
  ret i32 %1
}

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

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

; [#uses = 3]
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 #1 {
  %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.7, i32 0, i32 0) }, i32 403, i64 0, i64 0) #3
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNfKQmZw({ i64, i8* }* dereferenceable(16) %str) local_unnamed_addr #1 {
  %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 = 1]
; Function Attrs: uwtable
define weak_odr i64 @_D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG1wwZm(i32 %c_arg, [1 x i32]* dereferenceable(4) %buf) local_unnamed_addr #1 {
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) #6 ; [#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.10, 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.7, 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.7, 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 #1 {
  %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 = 2]
declare i32 @_D3std3utf10strideImplFNaNeamZk(i64, i8 zeroext) local_unnamed_addr #4

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T11decodeFrontVEQBa8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAaZQDnFNaNeKQmJmZw(i64* dereferenceable(8) %numCodeUnits, { i64, i8* }* dereferenceable(16) %str) local_unnamed_addr #1 {
  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.7, 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.7, 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.7, 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.7, 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 #1 {
  %.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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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) #1 ; [#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 #1 {
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.7, 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) #6 ; [#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.7, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 22, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, 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 #1 {
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.7, 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) #6 ; [#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.7, 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 #1 {
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.7, 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) #6 ; [#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.7, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 44, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.9, 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 = 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 #1 {
  %.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) #6 ; [#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.7, 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 #1 {
  %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.2, i32 0, i32 0) }) #12
  unreachable

forbody.i.i:                                      ; preds = %forcond.preheader.i.i, %forbody.i.i
  %__key215.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 %__key215.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) #1
  %11 = add nuw i64 %__key215.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 #1 {
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.11, 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.11, 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.11, 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 #1 {
  %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.11, 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 #1 {
  %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.11, 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 #1 {
  %.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.2, i32 0, i32 0) }) #12
  unreachable

forbody.i:                                        ; preds = %forcond.preheader.i, %forbody.i
  %__key215.010.i = phi i64 [ %11, %forbody.i ], [ 0, %forcond.preheader.i ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %.unpack2, i64 %__key215.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) #1
  %11 = add nuw i64 %__key215.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 #1 {
  %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.2, i32 0, i32 0) }) #12
  unreachable

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

forbody:                                          ; preds = %forcond.preheader, %forbody
  %__key215.010 = phi i64 [ %11, %forbody ], [ 0, %forcond.preheader ] ; [#uses = 2, type = i64]
  %9 = getelementptr inbounds i8, i8* %writeme_arg.fca.1.extract, i64 %__key215.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) #1
  %11 = add nuw i64 %__key215.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 #1 {
  %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 #1 {
  %.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) #12
  unreachable

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

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

; [#uses = 6]
; Function Attrs: noreturn uwtable
define weak_odr void @_D3std9exception__T7bailOutHTCQBcQBb14ErrnoExceptionZQBiFNfAyamMAxaZNn({ i64, i8* } %msg_arg, i64 %line_arg, { i64, i8* } %file_arg) local_unnamed_addr #5 {
  %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) #6 ; [#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.3, 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 = 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 #6

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

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

; [#uses = 3]
; Function Attrs: nounwind readnone willreturn
declare i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32>) #11

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

!llvm.ldc.typeinfo._D9Exception7__ClassZ = !{!0}
!llvm.ldc.classinfo._D9Exception7__ClassZ = !{!1}
!llvm.ldc.typeinfo._D12TypeInfo_Axa6__initZ = !{!2}
!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.ident = !{!7}

!0 = !{%object.Exception* undef}
!1 = !{%object.Exception undef, i1 false}
!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"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.isvectorized", i32 1}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.unroll.disable"}
!12 = distinct !{!12, !13, !9}
!13 = !{!"llvm.loop.unroll.runtime.disable"}
!14 = distinct !{!14, !9}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !13, !9}
!17 = distinct !{!17, !9}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !13, !9}
!20 = distinct !{!20, !11}
!21 = distinct !{!21, !11}
