import std.stdio, std.string, std.algorithm, std.array, std.conv;

int mex(int[] arr)
{
	if (arr.maxElement == 2)
		return 2;
	else if (arr.minElement == arr.maxElement)
		return 1 - arr.minElement;
	else
		return 2;
}

void main()
{
    int t;
    scanf("%d", &t);
    getchar();
    foreach(j; 0..t){
	int str_l;
	scanf("%d", &str_l);
	getchar();
	auto str1 = readln.strip();
	auto str2 = readln.strip();
	int[] result;
	for (int i = 0; i < str_l; i++)
	{
		if (str1[i] == str2[i])
		{
			result ~= cast(int)(str1[i] - '0');
		}
		else
			result ~= 2;
	}
	int[] mex_res;
	debug{writeln(result);}
	for (int i = 0; i < str_l; i++)
	{
		mex_res ~= mex(result[i..i+1]);
	}
	debug{writeln(mex_res);}
	for (int i = 0; i < str_l; i++)
	{
		if (mex_res[i] == 0)
		{
			if (i == 0)
			{
				if (mex_res[i+1] == 1)
				{
					if (mex(result[i..i+2]) == 2)
						mex_res[i+1]++;
				}
			}
			else if (i == str_l - 1)
			{
				if (mex_res[i-1] == 1)
				{
					if (mex(result[i-1..i+1]) == 2)
						mex_res[i-1]++;
				}
			}
			else
			{
				if (mex_res[i-1] == 1)
				{
					if (mex(result[i-1..i+1]) == 2)
						mex_res[i-1]++;
				}
				else if (mex_res[i+1] == 1)
				{
					if (mex(result[i..i+2]) == 2)
						mex_res[i+1]++;
				}
			}
		}
	}
	writeln(mex_res.sum);
    }
}

; ModuleID = '/data/TheStack_IR/OJ_Samples/Collated/D/Source_1774/source.d'
source_filename = "/data/TheStack_IR/OJ_Samples/Collated/D/Source_1774/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_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* }
%object.TypeInfo = type { [19 x i8*]*, 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] }
%object.TypeInfo_Class = type { [20 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, { i64, i8** }, { i64, %object.Interface* }, %object.TypeInfo_Class*, i8*, void (%object.Object*)*, i32, [4 x i8], i8*, { i64, %object.OffsetTypeInfo* }, void (%object.Object*)*, i8* }
%object.Interface = type { %object.TypeInfo_Class*, { i64, i8** }, i64 }
%object.OffsetTypeInfo = type { i64, %object.TypeInfo* }
%object.Object = type { [5 x i8*]*, i8* }
%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 }>
%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] }
%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 [3 x i8] c"%d\00" ; [#uses = 1]
@.str.1 = private unnamed_addr constant [61 x i8] c"/data/TheStack_IR/OJ_Samples/Collated/D/Source_1774/source.d\00" ; [#uses = 1]
@_D11TypeInfo_Ai6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@.str.2 = private unnamed_addr constant [55 x i8] c"Attempting to fetch the front of an empty array of int\00" ; [#uses = 1]
@.str.3 = private unnamed_addr constant [63 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/range/primitives.d\00" ; [#uses = 1]
@.str.4 = private unnamed_addr constant [57 x i8] c"Attempting to popFront() past the end of an array of int\00" ; [#uses = 1]
@.str.5 = private unnamed_addr constant [20 x i8] c"r is an empty range\00" ; [#uses = 1]
@.str.6 = private unnamed_addr constant [66 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/algorithm/searching.d\00" ; [#uses = 1]
@stdin = external local_unnamed_addr global %core.stdc.stdio._IO_FILE*, align 8 ; [#uses = 3]
@.str.7 = private unnamed_addr constant [39 x i8] c"Attempt to read from an unopened file.\00" ; [#uses = 1]
@.str.8 = 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.9 = 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.10 = private unnamed_addr constant [53 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/string.d\00" ; [#uses = 1]
@.str.11 = private unnamed_addr constant [45 x i8] c"Attempted to decode past the end of a string\00" ; [#uses = 1]
@.str.12 = private unnamed_addr constant [50 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/utf.d\00" ; [#uses = 1]
@_D3std3utf12UTFException7__ClassZ = external global %object.TypeInfo_Class ; [#uses = 8]
@.str.13 = private unnamed_addr constant [23 x i8] c"Invalid UTF-8 sequence\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.14 = private unnamed_addr constant [41 x i8] c"Encoding an invalid code point in UTF-32\00" ; [#uses = 1]
@.str.15 = 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 = 0]
; Function Attrs: uwtable
define i32 @_D6source3mexFAiZi({ i64, i32* } %arr_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract.i.i = extractvalue { i64, i32* } %arr_arg, 0 ; [#uses = 2]
  %r_arg.fca.1.extract.i.i = extractvalue { i64, i32* } %arr_arg, 1 ; [#uses = 2]
  %.not.i.i.i = icmp eq i64 %r_arg.fca.0.extract.i.i, 0 ; [#uses = 1]
  br i1 %.not.i.i.i, label %assertFailed.i.i, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i: ; preds = %0
  %1 = load i32, i32* %r_arg.fca.1.extract.i.i, align 4 ; [#uses = 10]
  %lowerbound.i.i.i = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i.i, i64 1 ; [#uses = 16, type = i32*]
  %2 = add i64 %r_arg.fca.0.extract.i.i, -1       ; [#uses = 17]
  %.not.i7.i.i = icmp eq i64 %2, 0                ; [#uses = 1]
  br i1 %.not.i7.i.i, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread, label %bounds.ok.i.i.i.preheader

bounds.ok.i.i.i.preheader:                        ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i
  %min.iters.check = icmp ult i64 %2, 8           ; [#uses = 1]
  br i1 %min.iters.check, label %bounds.ok.i.i.i.preheader141, label %vector.ph

vector.ph:                                        ; preds = %bounds.ok.i.i.i.preheader
  %n.vec = and i64 %2, -8                         ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %3 = add i64 %n.vec, -8                         ; [#uses = 2]
  %4 = lshr exact i64 %3, 3                       ; [#uses = 1]
  %5 = add nuw nsw i64 %4, 1                      ; [#uses = 2]
  %xtraiter160 = and i64 %5, 1                    ; [#uses = 1]
  %6 = icmp eq i64 %3, 0                          ; [#uses = 1]
  br i1 %6, label %middle.block.unr-lcssa, label %vector.ph.new

vector.ph.new:                                    ; preds = %vector.ph
  %unroll_iter162 = and i64 %5, 4611686018427387902 ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.1, %vector.body ] ; [#uses = 3, type = i64]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi76 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %22, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %niter163 = phi i64 [ %unroll_iter162, %vector.ph.new ], [ %niter163.nsub.1, %vector.body ] ; [#uses = 1, type = i64]
  %7 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index ; [#uses = 2, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 2]
  %9 = getelementptr inbounds i32, i32* %7, i64 4 ; [#uses = 1, type = i32*]
  %10 = bitcast i32* %9 to <4 x i32>*             ; [#uses = 1]
  %wide.load77 = load <4 x i32>, <4 x i32>* %10, align 4 ; [#uses = 2]
  %11 = icmp sgt <4 x i32> %wide.load, %vec.phi   ; [#uses = 1]
  %12 = icmp sgt <4 x i32> %wide.load77, %vec.phi76 ; [#uses = 1]
  %13 = select <4 x i1> %11, <4 x i32> %wide.load, <4 x i32> %vec.phi ; [#uses = 2]
  %14 = select <4 x i1> %12, <4 x i32> %wide.load77, <4 x i32> %vec.phi76 ; [#uses = 2]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %15 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index.next ; [#uses = 2, type = i32*]
  %16 = bitcast i32* %15 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %16, align 4 ; [#uses = 2]
  %17 = getelementptr inbounds i32, i32* %15, i64 4 ; [#uses = 1, type = i32*]
  %18 = bitcast i32* %17 to <4 x i32>*            ; [#uses = 1]
  %wide.load77.1 = load <4 x i32>, <4 x i32>* %18, align 4 ; [#uses = 2]
  %19 = icmp sgt <4 x i32> %wide.load.1, %13      ; [#uses = 1]
  %20 = icmp sgt <4 x i32> %wide.load77.1, %14    ; [#uses = 1]
  %21 = select <4 x i1> %19, <4 x i32> %wide.load.1, <4 x i32> %13 ; [#uses = 3]
  %22 = select <4 x i1> %20, <4 x i32> %wide.load77.1, <4 x i32> %14 ; [#uses = 3]
  %index.next.1 = add i64 %index, 16              ; [#uses = 2]
  %niter163.nsub.1 = add i64 %niter163, -2        ; [#uses = 2]
  %niter163.ncmp.1 = icmp eq i64 %niter163.nsub.1, 0 ; [#uses = 1]
  br i1 %niter163.ncmp.1, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !9

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa151.ph = phi <4 x i32> [ undef, %vector.ph ], [ %21, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa150.ph = phi <4 x i32> [ undef, %vector.ph ], [ %22, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi76.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %22, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod161.not = icmp eq i64 %xtraiter160, 0  ; [#uses = 1]
  br i1 %lcmp.mod161.not, label %middle.block, label %vector.body.epil

vector.body.epil:                                 ; preds = %middle.block.unr-lcssa
  %23 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index.unr ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load77.epil = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 2]
  %27 = icmp sgt <4 x i32> %wide.load77.epil, %vec.phi76.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load77.epil, <4 x i32> %vec.phi76.unr ; [#uses = 1]
  %29 = icmp sgt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %30 = select <4 x i1> %29, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa151 = phi <4 x i32> [ %.lcssa151.ph, %middle.block.unr-lcssa ], [ %30, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa150 = phi <4 x i32> [ %.lcssa150.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp sgt <4 x i32> %.lcssa151, %.lcssa150 ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa151, <4 x i32> %.lcssa150 ; [#uses = 1]
  %31 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %2, %n.vec                 ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.i.preheader141

bounds.ok.i.i.i.preheader141:                     ; preds = %middle.block, %bounds.ok.i.i.i.preheader
  %__key142.016.i.i.i.ph = phi i64 [ 0, %bounds.ok.i.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i.ph = phi i32 [ %1, %bounds.ok.i.i.i.preheader ], [ %31, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i

bounds.ok.i.i.i:                                  ; preds = %bounds.ok.i.i.i.preheader141, %bounds.ok.i.i.i
  %__key142.016.i.i.i = phi i64 [ %35, %bounds.ok.i.i.i ], [ %__key142.016.i.i.i.ph, %bounds.ok.i.i.i.preheader141 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i = phi i32 [ %spec.select.i.i.i, %bounds.ok.i.i.i ], [ %extremeElement.015.i.i.i.ph, %bounds.ok.i.i.i.preheader141 ] ; [#uses = 2, type = i32]
  %32 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %__key142.016.i.i.i ; [#uses = 1, type = i32*]
  %33 = load i32, i32* %32, align 4               ; [#uses = 2]
  %34 = icmp sgt i32 %33, %extremeElement.015.i.i.i ; [#uses = 1]
  %spec.select.i.i.i = select i1 %34, i32 %33, i32 %extremeElement.015.i.i.i ; [#uses = 2]
  %35 = add nuw i64 %__key142.016.i.i.i, 1        ; [#uses = 2]
  %exitcond.not.i.i.i = icmp eq i64 %35, %2       ; [#uses = 1]
  br i1 %exitcond.not.i.i.i, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.i, !llvm.loop !11

assertFailed.i.i:                                 ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit: ; preds = %bounds.ok.i.i.i, %middle.block
  %spec.select.i.i.i.lcssa = phi i32 [ %31, %middle.block ], [ %spec.select.i.i.i, %bounds.ok.i.i.i ] ; [#uses = 1, type = i32]
  %36 = icmp eq i32 %spec.select.i.i.i.lcssa, 2   ; [#uses = 1]
  br i1 %36, label %if, label %bounds.ok.i.i.i36.preheader

bounds.ok.i.i.i36.preheader:                      ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit
  %min.iters.check81 = icmp ult i64 %2, 8         ; [#uses = 1]
  br i1 %min.iters.check81, label %bounds.ok.i.i.i36.preheader140, label %vector.ph82

bounds.ok.i.i.i36.preheader140:                   ; preds = %middle.block78, %bounds.ok.i.i.i36.preheader
  %__key144.016.i.i.i.ph = phi i64 [ 0, %bounds.ok.i.i.i36.preheader ], [ %n.vec84, %middle.block78 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i33.ph = phi i32 [ %1, %bounds.ok.i.i.i36.preheader ], [ %65, %middle.block78 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i36

vector.ph82:                                      ; preds = %bounds.ok.i.i.i36.preheader
  %n.vec84 = and i64 %2, -8                       ; [#uses = 3]
  %minmax.ident.splatinsert93 = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat94 = shufflevector <4 x i32> %minmax.ident.splatinsert93, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %37 = add i64 %n.vec84, -8                      ; [#uses = 2]
  %38 = lshr exact i64 %37, 3                     ; [#uses = 1]
  %39 = add nuw nsw i64 %38, 1                    ; [#uses = 2]
  %xtraiter156 = and i64 %39, 1                   ; [#uses = 1]
  %40 = icmp eq i64 %37, 0                        ; [#uses = 1]
  br i1 %40, label %middle.block78.unr-lcssa, label %vector.ph82.new

vector.ph82.new:                                  ; preds = %vector.ph82
  %unroll_iter158 = and i64 %39, 4611686018427387902 ; [#uses = 1]
  br label %vector.body80

vector.body80:                                    ; preds = %vector.body80, %vector.ph82.new
  %index85 = phi i64 [ 0, %vector.ph82.new ], [ %index.next86.1, %vector.body80 ] ; [#uses = 3, type = i64]
  %vec.phi89 = phi <4 x i32> [ %minmax.ident.splat94, %vector.ph82.new ], [ %55, %vector.body80 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi90 = phi <4 x i32> [ %minmax.ident.splat94, %vector.ph82.new ], [ %56, %vector.body80 ] ; [#uses = 2, type = <4 x i32>]
  %niter159 = phi i64 [ %unroll_iter158, %vector.ph82.new ], [ %niter159.nsub.1, %vector.body80 ] ; [#uses = 1, type = i64]
  %41 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index85 ; [#uses = 2, type = i32*]
  %42 = bitcast i32* %41 to <4 x i32>*            ; [#uses = 1]
  %wide.load91 = load <4 x i32>, <4 x i32>* %42, align 4 ; [#uses = 2]
  %43 = getelementptr inbounds i32, i32* %41, i64 4 ; [#uses = 1, type = i32*]
  %44 = bitcast i32* %43 to <4 x i32>*            ; [#uses = 1]
  %wide.load92 = load <4 x i32>, <4 x i32>* %44, align 4 ; [#uses = 2]
  %45 = icmp slt <4 x i32> %wide.load91, %vec.phi89 ; [#uses = 1]
  %46 = icmp slt <4 x i32> %wide.load92, %vec.phi90 ; [#uses = 1]
  %47 = select <4 x i1> %45, <4 x i32> %wide.load91, <4 x i32> %vec.phi89 ; [#uses = 2]
  %48 = select <4 x i1> %46, <4 x i32> %wide.load92, <4 x i32> %vec.phi90 ; [#uses = 2]
  %index.next86 = or i64 %index85, 8              ; [#uses = 1]
  %49 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index.next86 ; [#uses = 2, type = i32*]
  %50 = bitcast i32* %49 to <4 x i32>*            ; [#uses = 1]
  %wide.load91.1 = load <4 x i32>, <4 x i32>* %50, align 4 ; [#uses = 2]
  %51 = getelementptr inbounds i32, i32* %49, i64 4 ; [#uses = 1, type = i32*]
  %52 = bitcast i32* %51 to <4 x i32>*            ; [#uses = 1]
  %wide.load92.1 = load <4 x i32>, <4 x i32>* %52, align 4 ; [#uses = 2]
  %53 = icmp slt <4 x i32> %wide.load91.1, %47    ; [#uses = 1]
  %54 = icmp slt <4 x i32> %wide.load92.1, %48    ; [#uses = 1]
  %55 = select <4 x i1> %53, <4 x i32> %wide.load91.1, <4 x i32> %47 ; [#uses = 3]
  %56 = select <4 x i1> %54, <4 x i32> %wide.load92.1, <4 x i32> %48 ; [#uses = 3]
  %index.next86.1 = add i64 %index85, 16          ; [#uses = 2]
  %niter159.nsub.1 = add i64 %niter159, -2        ; [#uses = 2]
  %niter159.ncmp.1 = icmp eq i64 %niter159.nsub.1, 0 ; [#uses = 1]
  br i1 %niter159.ncmp.1, label %middle.block78.unr-lcssa, label %vector.body80, !llvm.loop !13

middle.block78.unr-lcssa:                         ; preds = %vector.body80, %vector.ph82
  %.lcssa148.ph = phi <4 x i32> [ undef, %vector.ph82 ], [ %55, %vector.body80 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa147.ph = phi <4 x i32> [ undef, %vector.ph82 ], [ %56, %vector.body80 ] ; [#uses = 1, type = <4 x i32>]
  %index85.unr = phi i64 [ 0, %vector.ph82 ], [ %index.next86.1, %vector.body80 ] ; [#uses = 1, type = i64]
  %vec.phi89.unr = phi <4 x i32> [ %minmax.ident.splat94, %vector.ph82 ], [ %55, %vector.body80 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi90.unr = phi <4 x i32> [ %minmax.ident.splat94, %vector.ph82 ], [ %56, %vector.body80 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod157.not = icmp eq i64 %xtraiter156, 0  ; [#uses = 1]
  br i1 %lcmp.mod157.not, label %middle.block78, label %vector.body80.epil

vector.body80.epil:                               ; preds = %middle.block78.unr-lcssa
  %57 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index85.unr ; [#uses = 2, type = i32*]
  %58 = bitcast i32* %57 to <4 x i32>*            ; [#uses = 1]
  %wide.load91.epil = load <4 x i32>, <4 x i32>* %58, align 4 ; [#uses = 2]
  %59 = getelementptr inbounds i32, i32* %57, i64 4 ; [#uses = 1, type = i32*]
  %60 = bitcast i32* %59 to <4 x i32>*            ; [#uses = 1]
  %wide.load92.epil = load <4 x i32>, <4 x i32>* %60, align 4 ; [#uses = 2]
  %61 = icmp slt <4 x i32> %wide.load92.epil, %vec.phi90.unr ; [#uses = 1]
  %62 = select <4 x i1> %61, <4 x i32> %wide.load92.epil, <4 x i32> %vec.phi90.unr ; [#uses = 1]
  %63 = icmp slt <4 x i32> %wide.load91.epil, %vec.phi89.unr ; [#uses = 1]
  %64 = select <4 x i1> %63, <4 x i32> %wide.load91.epil, <4 x i32> %vec.phi89.unr ; [#uses = 1]
  br label %middle.block78

middle.block78:                                   ; preds = %middle.block78.unr-lcssa, %vector.body80.epil
  %.lcssa148 = phi <4 x i32> [ %.lcssa148.ph, %middle.block78.unr-lcssa ], [ %64, %vector.body80.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa147 = phi <4 x i32> [ %.lcssa147.ph, %middle.block78.unr-lcssa ], [ %62, %vector.body80.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp95 = icmp slt <4 x i32> %.lcssa148, %.lcssa147 ; [#uses = 1]
  %rdx.minmax.select96 = select <4 x i1> %rdx.minmax.cmp95, <4 x i32> %.lcssa148, <4 x i32> %.lcssa147 ; [#uses = 1]
  %65 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select96) ; [#uses = 2]
  %cmp.n88 = icmp eq i64 %2, %n.vec84             ; [#uses = 1]
  br i1 %cmp.n88, label %bounds.ok.i.i.i49.preheader, label %bounds.ok.i.i.i36.preheader140

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread: ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i
  %66 = icmp eq i32 %1, 2                         ; [#uses = 1]
  br i1 %66, label %if, label %_D3std9algorithm9searching__T10minElementSQBoQBnQBg11__lambda171TAiZQBnFNaNbNiNfQpZi.exit66

if:                                               ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit
  ret i32 2

bounds.ok.i.i.i36:                                ; preds = %bounds.ok.i.i.i36.preheader140, %bounds.ok.i.i.i36
  %__key144.016.i.i.i = phi i64 [ %70, %bounds.ok.i.i.i36 ], [ %__key144.016.i.i.i.ph, %bounds.ok.i.i.i36.preheader140 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i33 = phi i32 [ %spec.select.i.i.i34, %bounds.ok.i.i.i36 ], [ %extremeElement.015.i.i.i33.ph, %bounds.ok.i.i.i36.preheader140 ] ; [#uses = 2, type = i32]
  %67 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %__key144.016.i.i.i ; [#uses = 1, type = i32*]
  %68 = load i32, i32* %67, align 4               ; [#uses = 2]
  %69 = icmp slt i32 %68, %extremeElement.015.i.i.i33 ; [#uses = 1]
  %spec.select.i.i.i34 = select i1 %69, i32 %68, i32 %extremeElement.015.i.i.i33 ; [#uses = 2]
  %70 = add nuw i64 %__key144.016.i.i.i, 1        ; [#uses = 2]
  %exitcond.not.i.i.i35 = icmp eq i64 %70, %2     ; [#uses = 1]
  br i1 %exitcond.not.i.i.i35, label %bounds.ok.i.i.i49.preheader, label %bounds.ok.i.i.i36, !llvm.loop !14

bounds.ok.i.i.i49.preheader:                      ; preds = %bounds.ok.i.i.i36, %middle.block78
  %spec.select.i.i.i34.lcssa = phi i32 [ %65, %middle.block78 ], [ %spec.select.i.i.i34, %bounds.ok.i.i.i36 ] ; [#uses = 1, type = i32]
  %min.iters.check101 = icmp ult i64 %2, 8        ; [#uses = 1]
  br i1 %min.iters.check101, label %bounds.ok.i.i.i49.preheader139, label %vector.ph102

vector.ph102:                                     ; preds = %bounds.ok.i.i.i49.preheader
  %n.vec104 = and i64 %2, -8                      ; [#uses = 3]
  %minmax.ident.splatinsert113 = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat114 = shufflevector <4 x i32> %minmax.ident.splatinsert113, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %71 = add i64 %n.vec104, -8                     ; [#uses = 2]
  %72 = lshr exact i64 %71, 3                     ; [#uses = 1]
  %73 = add nuw nsw i64 %72, 1                    ; [#uses = 2]
  %xtraiter152 = and i64 %73, 1                   ; [#uses = 1]
  %74 = icmp eq i64 %71, 0                        ; [#uses = 1]
  br i1 %74, label %middle.block98.unr-lcssa, label %vector.ph102.new

vector.ph102.new:                                 ; preds = %vector.ph102
  %unroll_iter154 = and i64 %73, 4611686018427387902 ; [#uses = 1]
  br label %vector.body100

vector.body100:                                   ; preds = %vector.body100, %vector.ph102.new
  %index105 = phi i64 [ 0, %vector.ph102.new ], [ %index.next106.1, %vector.body100 ] ; [#uses = 3, type = i64]
  %vec.phi109 = phi <4 x i32> [ %minmax.ident.splat114, %vector.ph102.new ], [ %89, %vector.body100 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi110 = phi <4 x i32> [ %minmax.ident.splat114, %vector.ph102.new ], [ %90, %vector.body100 ] ; [#uses = 2, type = <4 x i32>]
  %niter155 = phi i64 [ %unroll_iter154, %vector.ph102.new ], [ %niter155.nsub.1, %vector.body100 ] ; [#uses = 1, type = i64]
  %75 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index105 ; [#uses = 2, type = i32*]
  %76 = bitcast i32* %75 to <4 x i32>*            ; [#uses = 1]
  %wide.load111 = load <4 x i32>, <4 x i32>* %76, align 4 ; [#uses = 2]
  %77 = getelementptr inbounds i32, i32* %75, i64 4 ; [#uses = 1, type = i32*]
  %78 = bitcast i32* %77 to <4 x i32>*            ; [#uses = 1]
  %wide.load112 = load <4 x i32>, <4 x i32>* %78, align 4 ; [#uses = 2]
  %79 = icmp sgt <4 x i32> %wide.load111, %vec.phi109 ; [#uses = 1]
  %80 = icmp sgt <4 x i32> %wide.load112, %vec.phi110 ; [#uses = 1]
  %81 = select <4 x i1> %79, <4 x i32> %wide.load111, <4 x i32> %vec.phi109 ; [#uses = 2]
  %82 = select <4 x i1> %80, <4 x i32> %wide.load112, <4 x i32> %vec.phi110 ; [#uses = 2]
  %index.next106 = or i64 %index105, 8            ; [#uses = 1]
  %83 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index.next106 ; [#uses = 2, type = i32*]
  %84 = bitcast i32* %83 to <4 x i32>*            ; [#uses = 1]
  %wide.load111.1 = load <4 x i32>, <4 x i32>* %84, align 4 ; [#uses = 2]
  %85 = getelementptr inbounds i32, i32* %83, i64 4 ; [#uses = 1, type = i32*]
  %86 = bitcast i32* %85 to <4 x i32>*            ; [#uses = 1]
  %wide.load112.1 = load <4 x i32>, <4 x i32>* %86, align 4 ; [#uses = 2]
  %87 = icmp sgt <4 x i32> %wide.load111.1, %81   ; [#uses = 1]
  %88 = icmp sgt <4 x i32> %wide.load112.1, %82   ; [#uses = 1]
  %89 = select <4 x i1> %87, <4 x i32> %wide.load111.1, <4 x i32> %81 ; [#uses = 3]
  %90 = select <4 x i1> %88, <4 x i32> %wide.load112.1, <4 x i32> %82 ; [#uses = 3]
  %index.next106.1 = add i64 %index105, 16        ; [#uses = 2]
  %niter155.nsub.1 = add i64 %niter155, -2        ; [#uses = 2]
  %niter155.ncmp.1 = icmp eq i64 %niter155.nsub.1, 0 ; [#uses = 1]
  br i1 %niter155.ncmp.1, label %middle.block98.unr-lcssa, label %vector.body100, !llvm.loop !15

middle.block98.unr-lcssa:                         ; preds = %vector.body100, %vector.ph102
  %.lcssa145.ph = phi <4 x i32> [ undef, %vector.ph102 ], [ %89, %vector.body100 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa144.ph = phi <4 x i32> [ undef, %vector.ph102 ], [ %90, %vector.body100 ] ; [#uses = 1, type = <4 x i32>]
  %index105.unr = phi i64 [ 0, %vector.ph102 ], [ %index.next106.1, %vector.body100 ] ; [#uses = 1, type = i64]
  %vec.phi109.unr = phi <4 x i32> [ %minmax.ident.splat114, %vector.ph102 ], [ %89, %vector.body100 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi110.unr = phi <4 x i32> [ %minmax.ident.splat114, %vector.ph102 ], [ %90, %vector.body100 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod153.not = icmp eq i64 %xtraiter152, 0  ; [#uses = 1]
  br i1 %lcmp.mod153.not, label %middle.block98, label %vector.body100.epil

vector.body100.epil:                              ; preds = %middle.block98.unr-lcssa
  %91 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index105.unr ; [#uses = 2, type = i32*]
  %92 = bitcast i32* %91 to <4 x i32>*            ; [#uses = 1]
  %wide.load111.epil = load <4 x i32>, <4 x i32>* %92, align 4 ; [#uses = 2]
  %93 = getelementptr inbounds i32, i32* %91, i64 4 ; [#uses = 1, type = i32*]
  %94 = bitcast i32* %93 to <4 x i32>*            ; [#uses = 1]
  %wide.load112.epil = load <4 x i32>, <4 x i32>* %94, align 4 ; [#uses = 2]
  %95 = icmp sgt <4 x i32> %wide.load112.epil, %vec.phi110.unr ; [#uses = 1]
  %96 = select <4 x i1> %95, <4 x i32> %wide.load112.epil, <4 x i32> %vec.phi110.unr ; [#uses = 1]
  %97 = icmp sgt <4 x i32> %wide.load111.epil, %vec.phi109.unr ; [#uses = 1]
  %98 = select <4 x i1> %97, <4 x i32> %wide.load111.epil, <4 x i32> %vec.phi109.unr ; [#uses = 1]
  br label %middle.block98

middle.block98:                                   ; preds = %middle.block98.unr-lcssa, %vector.body100.epil
  %.lcssa145 = phi <4 x i32> [ %.lcssa145.ph, %middle.block98.unr-lcssa ], [ %98, %vector.body100.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa144 = phi <4 x i32> [ %.lcssa144.ph, %middle.block98.unr-lcssa ], [ %96, %vector.body100.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp115 = icmp sgt <4 x i32> %.lcssa145, %.lcssa144 ; [#uses = 1]
  %rdx.minmax.select116 = select <4 x i1> %rdx.minmax.cmp115, <4 x i32> %.lcssa145, <4 x i32> %.lcssa144 ; [#uses = 1]
  %99 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select116) ; [#uses = 2]
  %cmp.n108 = icmp eq i64 %2, %n.vec104           ; [#uses = 1]
  br i1 %cmp.n108, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52, label %bounds.ok.i.i.i49.preheader139

bounds.ok.i.i.i49.preheader139:                   ; preds = %middle.block98, %bounds.ok.i.i.i49.preheader
  %__key142.016.i.i.i45.ph = phi i64 [ 0, %bounds.ok.i.i.i49.preheader ], [ %n.vec104, %middle.block98 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i46.ph = phi i32 [ %1, %bounds.ok.i.i.i49.preheader ], [ %99, %middle.block98 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i49

bounds.ok.i.i.i49:                                ; preds = %bounds.ok.i.i.i49.preheader139, %bounds.ok.i.i.i49
  %__key142.016.i.i.i45 = phi i64 [ %103, %bounds.ok.i.i.i49 ], [ %__key142.016.i.i.i45.ph, %bounds.ok.i.i.i49.preheader139 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i46 = phi i32 [ %spec.select.i.i.i47, %bounds.ok.i.i.i49 ], [ %extremeElement.015.i.i.i46.ph, %bounds.ok.i.i.i49.preheader139 ] ; [#uses = 2, type = i32]
  %100 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %__key142.016.i.i.i45 ; [#uses = 1, type = i32*]
  %101 = load i32, i32* %100, align 4             ; [#uses = 2]
  %102 = icmp sgt i32 %101, %extremeElement.015.i.i.i46 ; [#uses = 1]
  %spec.select.i.i.i47 = select i1 %102, i32 %101, i32 %extremeElement.015.i.i.i46 ; [#uses = 2]
  %103 = add nuw i64 %__key142.016.i.i.i45, 1     ; [#uses = 2]
  %exitcond.not.i.i.i48 = icmp eq i64 %103, %2    ; [#uses = 1]
  br i1 %exitcond.not.i.i.i48, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52, label %bounds.ok.i.i.i49, !llvm.loop !16

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52: ; preds = %bounds.ok.i.i.i49, %middle.block98
  %spec.select.i.i.i47.lcssa = phi i32 [ %99, %middle.block98 ], [ %spec.select.i.i.i47, %bounds.ok.i.i.i49 ] ; [#uses = 1, type = i32]
  %104 = icmp eq i32 %spec.select.i.i.i34.lcssa, %spec.select.i.i.i47.lcssa ; [#uses = 1]
  br i1 %104, label %bounds.ok.i.i.i63.preheader, label %if

bounds.ok.i.i.i63.preheader:                      ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52
  %min.iters.check121 = icmp ult i64 %2, 8        ; [#uses = 1]
  br i1 %min.iters.check121, label %bounds.ok.i.i.i63.preheader138, label %vector.ph122

vector.ph122:                                     ; preds = %bounds.ok.i.i.i63.preheader
  %n.vec124 = and i64 %2, -8                      ; [#uses = 3]
  %minmax.ident.splatinsert133 = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat134 = shufflevector <4 x i32> %minmax.ident.splatinsert133, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %105 = add i64 %n.vec124, -8                    ; [#uses = 2]
  %106 = lshr exact i64 %105, 3                   ; [#uses = 1]
  %107 = add nuw nsw i64 %106, 1                  ; [#uses = 2]
  %xtraiter = and i64 %107, 1                     ; [#uses = 1]
  %108 = icmp eq i64 %105, 0                      ; [#uses = 1]
  br i1 %108, label %middle.block118.unr-lcssa, label %vector.ph122.new

vector.ph122.new:                                 ; preds = %vector.ph122
  %unroll_iter = and i64 %107, 4611686018427387902 ; [#uses = 1]
  br label %vector.body120

vector.body120:                                   ; preds = %vector.body120, %vector.ph122.new
  %index125 = phi i64 [ 0, %vector.ph122.new ], [ %index.next126.1, %vector.body120 ] ; [#uses = 3, type = i64]
  %vec.phi129 = phi <4 x i32> [ %minmax.ident.splat134, %vector.ph122.new ], [ %123, %vector.body120 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi130 = phi <4 x i32> [ %minmax.ident.splat134, %vector.ph122.new ], [ %124, %vector.body120 ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph122.new ], [ %niter.nsub.1, %vector.body120 ] ; [#uses = 1, type = i64]
  %109 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index125 ; [#uses = 2, type = i32*]
  %110 = bitcast i32* %109 to <4 x i32>*          ; [#uses = 1]
  %wide.load131 = load <4 x i32>, <4 x i32>* %110, align 4 ; [#uses = 2]
  %111 = getelementptr inbounds i32, i32* %109, i64 4 ; [#uses = 1, type = i32*]
  %112 = bitcast i32* %111 to <4 x i32>*          ; [#uses = 1]
  %wide.load132 = load <4 x i32>, <4 x i32>* %112, align 4 ; [#uses = 2]
  %113 = icmp slt <4 x i32> %wide.load131, %vec.phi129 ; [#uses = 1]
  %114 = icmp slt <4 x i32> %wide.load132, %vec.phi130 ; [#uses = 1]
  %115 = select <4 x i1> %113, <4 x i32> %wide.load131, <4 x i32> %vec.phi129 ; [#uses = 2]
  %116 = select <4 x i1> %114, <4 x i32> %wide.load132, <4 x i32> %vec.phi130 ; [#uses = 2]
  %index.next126 = or i64 %index125, 8            ; [#uses = 1]
  %117 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index.next126 ; [#uses = 2, type = i32*]
  %118 = bitcast i32* %117 to <4 x i32>*          ; [#uses = 1]
  %wide.load131.1 = load <4 x i32>, <4 x i32>* %118, align 4 ; [#uses = 2]
  %119 = getelementptr inbounds i32, i32* %117, i64 4 ; [#uses = 1, type = i32*]
  %120 = bitcast i32* %119 to <4 x i32>*          ; [#uses = 1]
  %wide.load132.1 = load <4 x i32>, <4 x i32>* %120, align 4 ; [#uses = 2]
  %121 = icmp slt <4 x i32> %wide.load131.1, %115 ; [#uses = 1]
  %122 = icmp slt <4 x i32> %wide.load132.1, %116 ; [#uses = 1]
  %123 = select <4 x i1> %121, <4 x i32> %wide.load131.1, <4 x i32> %115 ; [#uses = 3]
  %124 = select <4 x i1> %122, <4 x i32> %wide.load132.1, <4 x i32> %116 ; [#uses = 3]
  %index.next126.1 = add i64 %index125, 16        ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block118.unr-lcssa, label %vector.body120, !llvm.loop !17

middle.block118.unr-lcssa:                        ; preds = %vector.body120, %vector.ph122
  %.lcssa142.ph = phi <4 x i32> [ undef, %vector.ph122 ], [ %123, %vector.body120 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph122 ], [ %124, %vector.body120 ] ; [#uses = 1, type = <4 x i32>]
  %index125.unr = phi i64 [ 0, %vector.ph122 ], [ %index.next126.1, %vector.body120 ] ; [#uses = 1, type = i64]
  %vec.phi129.unr = phi <4 x i32> [ %minmax.ident.splat134, %vector.ph122 ], [ %123, %vector.body120 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi130.unr = phi <4 x i32> [ %minmax.ident.splat134, %vector.ph122 ], [ %124, %vector.body120 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %middle.block118, label %vector.body120.epil

vector.body120.epil:                              ; preds = %middle.block118.unr-lcssa
  %125 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %index125.unr ; [#uses = 2, type = i32*]
  %126 = bitcast i32* %125 to <4 x i32>*          ; [#uses = 1]
  %wide.load131.epil = load <4 x i32>, <4 x i32>* %126, align 4 ; [#uses = 2]
  %127 = getelementptr inbounds i32, i32* %125, i64 4 ; [#uses = 1, type = i32*]
  %128 = bitcast i32* %127 to <4 x i32>*          ; [#uses = 1]
  %wide.load132.epil = load <4 x i32>, <4 x i32>* %128, align 4 ; [#uses = 2]
  %129 = icmp slt <4 x i32> %wide.load132.epil, %vec.phi130.unr ; [#uses = 1]
  %130 = select <4 x i1> %129, <4 x i32> %wide.load132.epil, <4 x i32> %vec.phi130.unr ; [#uses = 1]
  %131 = icmp slt <4 x i32> %wide.load131.epil, %vec.phi129.unr ; [#uses = 1]
  %132 = select <4 x i1> %131, <4 x i32> %wide.load131.epil, <4 x i32> %vec.phi129.unr ; [#uses = 1]
  br label %middle.block118

middle.block118:                                  ; preds = %middle.block118.unr-lcssa, %vector.body120.epil
  %.lcssa142 = phi <4 x i32> [ %.lcssa142.ph, %middle.block118.unr-lcssa ], [ %132, %vector.body120.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block118.unr-lcssa ], [ %130, %vector.body120.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp135 = icmp slt <4 x i32> %.lcssa142, %.lcssa ; [#uses = 1]
  %rdx.minmax.select136 = select <4 x i1> %rdx.minmax.cmp135, <4 x i32> %.lcssa142, <4 x i32> %.lcssa ; [#uses = 1]
  %133 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select136) ; [#uses = 2]
  %cmp.n128 = icmp eq i64 %2, %n.vec124           ; [#uses = 1]
  br i1 %cmp.n128, label %_D3std9algorithm9searching__T10minElementSQBoQBnQBg11__lambda171TAiZQBnFNaNbNiNfQpZi.exit66, label %bounds.ok.i.i.i63.preheader138

bounds.ok.i.i.i63.preheader138:                   ; preds = %middle.block118, %bounds.ok.i.i.i63.preheader
  %__key144.016.i.i.i59.ph = phi i64 [ 0, %bounds.ok.i.i.i63.preheader ], [ %n.vec124, %middle.block118 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i60.ph = phi i32 [ %1, %bounds.ok.i.i.i63.preheader ], [ %133, %middle.block118 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i63

bounds.ok.i.i.i63:                                ; preds = %bounds.ok.i.i.i63.preheader138, %bounds.ok.i.i.i63
  %__key144.016.i.i.i59 = phi i64 [ %137, %bounds.ok.i.i.i63 ], [ %__key144.016.i.i.i59.ph, %bounds.ok.i.i.i63.preheader138 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i60 = phi i32 [ %spec.select.i.i.i61, %bounds.ok.i.i.i63 ], [ %extremeElement.015.i.i.i60.ph, %bounds.ok.i.i.i63.preheader138 ] ; [#uses = 2, type = i32]
  %134 = getelementptr inbounds i32, i32* %lowerbound.i.i.i, i64 %__key144.016.i.i.i59 ; [#uses = 1, type = i32*]
  %135 = load i32, i32* %134, align 4             ; [#uses = 2]
  %136 = icmp slt i32 %135, %extremeElement.015.i.i.i60 ; [#uses = 1]
  %spec.select.i.i.i61 = select i1 %136, i32 %135, i32 %extremeElement.015.i.i.i60 ; [#uses = 2]
  %137 = add nuw i64 %__key144.016.i.i.i59, 1     ; [#uses = 2]
  %exitcond.not.i.i.i62 = icmp eq i64 %137, %2    ; [#uses = 1]
  br i1 %exitcond.not.i.i.i62, label %_D3std9algorithm9searching__T10minElementSQBoQBnQBg11__lambda171TAiZQBnFNaNbNiNfQpZi.exit66, label %bounds.ok.i.i.i63, !llvm.loop !18

_D3std9algorithm9searching__T10minElementSQBoQBnQBg11__lambda171TAiZQBnFNaNbNiNfQpZi.exit66: ; preds = %bounds.ok.i.i.i63, %middle.block118, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread
  %extremeElement.0.lcssa.i.i.i65 = phi i32 [ %1, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread ], [ %133, %middle.block118 ], [ %spec.select.i.i.i61, %bounds.ok.i.i.i63 ] ; [#uses = 1, type = i32]
  %138 = sub i32 1, %extremeElement.0.lcssa.i.i.i65 ; [#uses = 1]
  ret i32 %138
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi({ i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 2]
  %r_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %.not.i.i = icmp eq i64 %r_arg.fca.0.extract.i, 0 ; [#uses = 1]
  br i1 %.not.i.i, label %assertFailed.i, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i: ; preds = %0
  %1 = load i32, i32* %r_arg.fca.1.extract.i, align 4 ; [#uses = 3]
  %lowerbound.i.i = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 1 ; [#uses = 4, type = i32*]
  %2 = add i64 %r_arg.fca.0.extract.i, -1         ; [#uses = 5]
  %.not.i7.i = icmp eq i64 %2, 0                  ; [#uses = 1]
  br i1 %.not.i7.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.preheader

bounds.ok.i.i.preheader:                          ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i
  %min.iters.check = icmp ult i64 %2, 8           ; [#uses = 1]
  br i1 %min.iters.check, label %bounds.ok.i.i.preheader3, label %vector.ph

vector.ph:                                        ; preds = %bounds.ok.i.i.preheader
  %n.vec = and i64 %2, -8                         ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %3 = add i64 %n.vec, -8                         ; [#uses = 2]
  %4 = lshr exact i64 %3, 3                       ; [#uses = 1]
  %5 = add nuw nsw i64 %4, 1                      ; [#uses = 2]
  %xtraiter = and i64 %5, 1                       ; [#uses = 1]
  %6 = icmp eq i64 %3, 0                          ; [#uses = 1]
  br i1 %6, label %middle.block.unr-lcssa, label %vector.ph.new

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

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

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa4.ph = phi <4 x i32> [ undef, %vector.ph ], [ %21, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %22, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi1.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %22, %vector.body ] ; [#uses = 2, 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
  %23 = getelementptr inbounds i32, i32* %lowerbound.i.i, i64 %index.unr ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.epil = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 2]
  %27 = icmp sgt <4 x i32> %wide.load2.epil, %vec.phi1.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load2.epil, <4 x i32> %vec.phi1.unr ; [#uses = 1]
  %29 = icmp sgt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %30 = select <4 x i1> %29, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa4 = phi <4 x i32> [ %.lcssa4.ph, %middle.block.unr-lcssa ], [ %30, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp sgt <4 x i32> %.lcssa4, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa4, <4 x i32> %.lcssa ; [#uses = 1]
  %31 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %2, %n.vec                 ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.preheader3

bounds.ok.i.i.preheader3:                         ; preds = %middle.block, %bounds.ok.i.i.preheader
  %__key142.016.i.i.ph = phi i64 [ 0, %bounds.ok.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.ph = phi i32 [ %1, %bounds.ok.i.i.preheader ], [ %31, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i

bounds.ok.i.i:                                    ; preds = %bounds.ok.i.i.preheader3, %bounds.ok.i.i
  %__key142.016.i.i = phi i64 [ %35, %bounds.ok.i.i ], [ %__key142.016.i.i.ph, %bounds.ok.i.i.preheader3 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i = phi i32 [ %spec.select.i.i, %bounds.ok.i.i ], [ %extremeElement.015.i.i.ph, %bounds.ok.i.i.preheader3 ] ; [#uses = 2, type = i32]
  %32 = getelementptr inbounds i32, i32* %lowerbound.i.i, i64 %__key142.016.i.i ; [#uses = 1, type = i32*]
  %33 = load i32, i32* %32, align 4               ; [#uses = 2]
  %34 = icmp sgt i32 %33, %extremeElement.015.i.i ; [#uses = 1]
  %spec.select.i.i = select i1 %34, i32 %33, i32 %extremeElement.015.i.i ; [#uses = 2]
  %35 = add nuw i64 %__key142.016.i.i, 1          ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %35, %2         ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i, !llvm.loop !20

assertFailed.i:                                   ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiZQCbFNaNbNiNfQpZi.exit: ; preds = %bounds.ok.i.i, %middle.block, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i
  %extremeElement.0.lcssa.i.i = phi i32 [ %1, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i ], [ %31, %middle.block ], [ %spec.select.i.i, %bounds.ok.i.i ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa.i.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T10minElementSQBoQBnQBg11__lambda171TAiZQBnFNaNbNiNfQpZi({ i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 2]
  %r_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %.not.i.i = icmp eq i64 %r_arg.fca.0.extract.i, 0 ; [#uses = 1]
  br i1 %.not.i.i, label %assertFailed.i, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i: ; preds = %0
  %1 = load i32, i32* %r_arg.fca.1.extract.i, align 4 ; [#uses = 3]
  %lowerbound.i.i = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 1 ; [#uses = 4, type = i32*]
  %2 = add i64 %r_arg.fca.0.extract.i, -1         ; [#uses = 5]
  %.not.i7.i = icmp eq i64 %2, 0                  ; [#uses = 1]
  br i1 %.not.i7.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.preheader

bounds.ok.i.i.preheader:                          ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i
  %min.iters.check = icmp ult i64 %2, 8           ; [#uses = 1]
  br i1 %min.iters.check, label %bounds.ok.i.i.preheader3, label %vector.ph

vector.ph:                                        ; preds = %bounds.ok.i.i.preheader
  %n.vec = and i64 %2, -8                         ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %3 = add i64 %n.vec, -8                         ; [#uses = 2]
  %4 = lshr exact i64 %3, 3                       ; [#uses = 1]
  %5 = add nuw nsw i64 %4, 1                      ; [#uses = 2]
  %xtraiter = and i64 %5, 1                       ; [#uses = 1]
  %6 = icmp eq i64 %3, 0                          ; [#uses = 1]
  br i1 %6, label %middle.block.unr-lcssa, label %vector.ph.new

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

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

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa4.ph = phi <4 x i32> [ undef, %vector.ph ], [ %21, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %22, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi1.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %22, %vector.body ] ; [#uses = 2, 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
  %23 = getelementptr inbounds i32, i32* %lowerbound.i.i, i64 %index.unr ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load2.epil = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 2]
  %27 = icmp slt <4 x i32> %wide.load2.epil, %vec.phi1.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load2.epil, <4 x i32> %vec.phi1.unr ; [#uses = 1]
  %29 = icmp slt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %30 = select <4 x i1> %29, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa4 = phi <4 x i32> [ %.lcssa4.ph, %middle.block.unr-lcssa ], [ %30, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp slt <4 x i32> %.lcssa4, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa4, <4 x i32> %.lcssa ; [#uses = 1]
  %31 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %2, %n.vec                 ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i.preheader3

bounds.ok.i.i.preheader3:                         ; preds = %middle.block, %bounds.ok.i.i.preheader
  %__key144.016.i.i.ph = phi i64 [ 0, %bounds.ok.i.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.ph = phi i32 [ %1, %bounds.ok.i.i.preheader ], [ %31, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i

bounds.ok.i.i:                                    ; preds = %bounds.ok.i.i.preheader3, %bounds.ok.i.i
  %__key144.016.i.i = phi i64 [ %35, %bounds.ok.i.i ], [ %__key144.016.i.i.ph, %bounds.ok.i.i.preheader3 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i = phi i32 [ %spec.select.i.i, %bounds.ok.i.i ], [ %extremeElement.015.i.i.ph, %bounds.ok.i.i.preheader3 ] ; [#uses = 2, type = i32]
  %32 = getelementptr inbounds i32, i32* %lowerbound.i.i, i64 %__key144.016.i.i ; [#uses = 1, type = i32*]
  %33 = load i32, i32* %32, align 4               ; [#uses = 2]
  %34 = icmp slt i32 %33, %extremeElement.015.i.i ; [#uses = 1]
  %spec.select.i.i = select i1 %34, i32 %33, i32 %extremeElement.015.i.i ; [#uses = 2]
  %35 = add nuw i64 %__key144.016.i.i, 1          ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %35, %2         ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiZQCbFNaNbNiNfQpZi.exit, label %bounds.ok.i.i, !llvm.loop !22

assertFailed.i:                                   ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiZQCbFNaNbNiNfQpZi.exit: ; preds = %bounds.ok.i.i, %middle.block, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i
  %extremeElement.0.lcssa.i.i = phi i32 [ %1, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i ], [ %31, %middle.block ], [ %spec.select.i.i, %bounds.ok.i.i ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa.i.i
}

; [#uses = 1]
; Function Attrs: uwtable
define i32 @_Dmain({ i64, { i64, i8* }* } %unnamed) #1 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
  %__tmpfordtor197.i = alloca %std.stdio.File, align 8 ; [#uses = 5, size/byte = 24]
  %t = alloca i32, align 4                        ; [#uses = 3, size/byte = 4]
  %str_l = alloca i32, align 4                    ; [#uses = 6, size/byte = 4]
  %result = alloca { i64, i32* }, align 8         ; [#uses = 4, size/byte = 16]
  %mex_res = alloca { i64, i32* }, align 8        ; [#uses = 5, size/byte = 16]
  store i32 0, i32* %t, align 4
  %1 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* nonnull %t) #5 ; [#uses = 0]
  %2 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %3 = call i32 @fgetc(%core.stdc.stdio._IO_FILE* %2) #5 ; [#uses = 0]
  %4 = load i32, i32* %t, align 4                 ; [#uses = 2]
  %5 = icmp sgt i32 %4, 0                         ; [#uses = 1]
  br i1 %5, label %forbody.lr.ph, label %endfor

forbody.lr.ph:                                    ; preds = %0
  %.fca.0.gep170 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %result, i64 0, i32 0 ; [#uses = 7, type = i64*]
  %.fca.1.gep171 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %result, i64 0, i32 1 ; [#uses = 6, type = i32**]
  %6 = bitcast { i64, i32* }* %result to { i64, i8* }* ; [#uses = 2]
  %.fca.0.gep = getelementptr inbounds { i64, i32* }, { i64, i32* }* %mex_res, i64 0, i32 0 ; [#uses = 3, type = i64*]
  %.fca.1.gep = getelementptr inbounds { i64, i32* }, { i64, i32* }* %mex_res, i64 0, i32 1 ; [#uses = 3, type = i32**]
  %7 = bitcast { i64, i32* }* %mex_res to { i64, i8* }* ; [#uses = 1]
  %8 = bitcast %std.stdio.File* %__tmpfordtor197.i to i8* ; [#uses = 2]
  %9 = bitcast { i64, i32* }* %result to i8*      ; [#uses = 1]
  %10 = bitcast { i64, i32* }* %mex_res to i8*    ; [#uses = 1]
  %11 = bitcast { i64, i32* }* %mex_res to i8*    ; [#uses = 1]
  br label %forbody

forbody:                                          ; preds = %_D3std5stdio__T7writelnTiZQlFNfiZv.exit, %forbody.lr.ph
  %__key146.0414 = phi i32 [ 0, %forbody.lr.ph ], [ %435, %_D3std5stdio__T7writelnTiZQlFNfiZv.exit ] ; [#uses = 1, type = i32]
  store i32 0, i32* %str_l, align 4
  %12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* nonnull %str_l) #5 ; [#uses = 0]
  %13 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** @stdin, align 8 ; [#uses = 1]
  %14 = call i32 @fgetc(%core.stdc.stdio._IO_FILE* %13) #5 ; [#uses = 0]
  %15 = call { i64, i8* } @_D3std5stdio__T6readlnTAyaZQmFwZQj(i32 10) #5 ; [#uses = 1]
  %16 = call { i64, i8* } @_D3std6string__T9stripLeftTAyaZQpFNaNbNiNfQpZQs({ i64, i8* } %15) #5 ; [#uses = 1]
  %17 = call { i64, i8* } @_D3std6string__T10stripRightTAyaZQrFNaNbNiNfQpZQs({ i64, i8* } %16) #5 ; [#uses = 3]
  %.ptr = extractvalue { i64, i8* } %17, 1        ; [#uses = 1]
  %.len = extractvalue { i64, i8* } %17, 0        ; [#uses = 1]
  %18 = call { i64, i8* } @_D3std5stdio__T6readlnTAyaZQmFwZQj(i32 10) #5 ; [#uses = 1]
  %19 = call { i64, i8* } @_D3std6string__T9stripLeftTAyaZQpFNaNbNiNfQpZQs({ i64, i8* } %18) #5 ; [#uses = 1]
  %20 = call { i64, i8* } @_D3std6string__T10stripRightTAyaZQrFNaNbNiNfQpZQs({ i64, i8* } %19) #5 ; [#uses = 3]
  %.ptr1 = extractvalue { i64, i8* } %20, 1       ; [#uses = 1]
  %.len2 = extractvalue { i64, i8* } %20, 0       ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %9, i8 0, i64 16, i1 false)
  %21 = load i32, i32* %str_l, align 4            ; [#uses = 1]
  %22 = icmp sgt i32 %21, 0                       ; [#uses = 1]
  br i1 %22, label %forbody4, label %endfor6.thread

endfor6.thread:                                   ; preds = %forbody
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %10, i8 0, i64 16, i1 false)
  br label %endfor44

forbody4:                                         ; preds = %forbody, %forinc5
  %indvars.iv = phi i64 [ %indvars.iv.next, %forinc5 ], [ 0, %forbody ] ; [#uses = 5, type = i64]
  %exitcond.not = icmp eq i64 %indvars.iv, %.len  ; [#uses = 1]
  br i1 %exitcond.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %forbody4
  %23 = getelementptr inbounds i8, i8* %.ptr, i64 %indvars.iv ; [#uses = 1, type = i8*]
  %24 = load i8, i8* %23, align 1                 ; [#uses = 2]
  %25 = zext i8 %24 to i32                        ; [#uses = 1]
  %exitcond514.not = icmp eq i64 %indvars.iv, %.len2 ; [#uses = 1]
  br i1 %exitcond514.not, label %bounds.fail12, label %bounds.ok11

bounds.ok11:                                      ; preds = %bounds.ok
  %26 = getelementptr inbounds i8, i8* %.ptr1, i64 %indvars.iv ; [#uses = 1, type = i8*]
  %27 = load i8, i8* %26, align 1                 ; [#uses = 1]
  %28 = icmp eq i8 %24, %27                       ; [#uses = 1]
  br i1 %28, label %bounds.ok16, label %else

bounds.ok16:                                      ; preds = %bounds.ok11
  %29 = add nsw i32 %25, -48                      ; [#uses = 1]
  %.appendedArray = call { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D11TypeInfo_Ai6__initZ to %object.TypeInfo*), { i64, i8* }* nonnull dereferenceable(16) %6, i64 1) #4 ; [#uses = 0]
  %.len19 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 1]
  br label %forinc5

else:                                             ; preds = %bounds.ok11
  %.appendedArray21 = call { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D11TypeInfo_Ai6__initZ to %object.TypeInfo*), { i64, i8* }* nonnull dereferenceable(16) %6, i64 1) #4 ; [#uses = 0]
  %.len22 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 1]
  br label %forinc5

bounds.fail12:                                    ; preds = %bounds.ok
  %.len2.le = extractvalue { i64, i8* } %20, 0    ; [#uses = 2]
  %30 = and i64 %.len2.le, 4294967295             ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 27, i64 %30, i64 %.len2.le) #3
  unreachable

bounds.fail:                                      ; preds = %forbody4
  %.len.le = extractvalue { i64, i8* } %17, 0     ; [#uses = 2]
  %31 = and i64 %.len.le, 4294967295              ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 27, i64 %31, i64 %.len.le) #3
  unreachable

forinc5:                                          ; preds = %bounds.ok16, %else
  %.len19.sink = phi i64 [ %.len19, %bounds.ok16 ], [ %.len22, %else ] ; [#uses = 1, type = i64]
  %.sink = phi i32 [ %29, %bounds.ok16 ], [ 2, %else ] ; [#uses = 1, type = i32]
  %.ptr20 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %.lastIndex = add i64 %.len19.sink, -1          ; [#uses = 1]
  %.lastElem = getelementptr inbounds i32, i32* %.ptr20, i64 %.lastIndex ; [#uses = 1, type = i32*]
  store i32 %.sink, i32* %.lastElem, align 4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 ; [#uses = 2]
  %32 = load i32, i32* %str_l, align 4            ; [#uses = 2]
  %33 = trunc i64 %indvars.iv.next to i32         ; [#uses = 1]
  %34 = icmp sgt i32 %32, %33                     ; [#uses = 1]
  br i1 %34, label %forbody4, label %endfor6

endfor6:                                          ; preds = %forinc5
  %35 = icmp sgt i32 %32, 0                       ; [#uses = 1]
  call void @llvm.memset.p0i8.i64(i8* nonnull align 8 dereferenceable(16) %11, i8 0, i64 16, i1 false)
  br i1 %35, label %forbody28, label %endfor44

forcond41.preheader:                              ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i
  %36 = icmp sgt i32 %40, 0                       ; [#uses = 1]
  br i1 %36, label %forbody42, label %endfor44

forbody28:                                        ; preds = %endfor6, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i
  %indvars.iv515 = phi i64 [ %indvars.iv.next516, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i ], [ 0, %endfor6 ] ; [#uses = 4, type = i64]
  %indvars.iv.next516 = add nuw nsw i64 %indvars.iv515, 1 ; [#uses = 3]
  %.len33 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 2]
  %bounds.cmp.up.not.not = icmp ugt i64 %.len33, %indvars.iv515 ; [#uses = 1]
  br i1 %bounds.cmp.up.not.not, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i, label %bounds.fail32

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i: ; preds = %forbody28
  %.ptr34 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %lowerbound = getelementptr inbounds i32, i32* %.ptr34, i64 %indvars.iv515 ; [#uses = 1, type = i32*]
  %37 = load i32, i32* %lowerbound, align 4       ; [#uses = 2]
  %38 = icmp eq i32 %37, 2                        ; [#uses = 1]
  %39 = sub i32 1, %37                            ; [#uses = 1]
  %spec.select = select i1 %38, i32 2, i32 %39    ; [#uses = 1]
  %.appendedArray35 = call { i64, i8* } @_d_arrayappendcTX(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D11TypeInfo_Ai6__initZ to %object.TypeInfo*), { i64, i8* }* nonnull dereferenceable(16) %7, i64 1) #4 ; [#uses = 0]
  %.len36 = load i64, i64* %.fca.0.gep, align 8   ; [#uses = 1]
  %.ptr37 = load i32*, i32** %.fca.1.gep, align 8 ; [#uses = 1]
  %.lastIndex38 = add i64 %.len36, -1             ; [#uses = 1]
  %.lastElem39 = getelementptr inbounds i32, i32* %.ptr37, i64 %.lastIndex38 ; [#uses = 1, type = i32*]
  store i32 %spec.select, i32* %.lastElem39, align 4
  %40 = load i32, i32* %str_l, align 4            ; [#uses = 3]
  %41 = sext i32 %40 to i64                       ; [#uses = 1]
  %42 = icmp slt i64 %indvars.iv.next516, %41     ; [#uses = 1]
  br i1 %42, label %forbody28, label %forcond41.preheader

bounds.fail32:                                    ; preds = %forbody28
  %43 = and i64 %indvars.iv515, 4294967295        ; [#uses = 1]
  %44 = and i64 %indvars.iv.next516, 4294967295   ; [#uses = 1]
  call void @_d_arraybounds_slice({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 38, i64 %43, i64 %44, i64 %.len33) #3
  unreachable

forbody42:                                        ; preds = %forcond41.preheader, %forinc43
  %indvar = phi i64 [ %indvar.next, %forinc43 ], [ 0, %forcond41.preheader ] ; [#uses = 17, type = i64]
  %45 = phi i32 [ %390, %forinc43 ], [ %40, %forcond41.preheader ] ; [#uses = 1, type = i32]
  %i40.0412 = phi i32 [ %389, %forinc43 ], [ 0, %forcond41.preheader ] ; [#uses = 8, type = i32]
  %46 = sub i64 -7, %indvar                       ; [#uses = 1]
  %47 = lshr i64 %46, 3                           ; [#uses = 2]
  %48 = add nuw nsw i64 %47, 1                    ; [#uses = 2]
  %49 = sub i64 -7, %indvar                       ; [#uses = 1]
  %50 = lshr i64 %49, 3                           ; [#uses = 2]
  %51 = add nuw nsw i64 %50, 1                    ; [#uses = 2]
  %52 = sub i64 -7, %indvar                       ; [#uses = 1]
  %53 = lshr i64 %52, 3                           ; [#uses = 2]
  %54 = add nuw nsw i64 %53, 1                    ; [#uses = 2]
  %55 = sub i64 -7, %indvar                       ; [#uses = 1]
  %56 = lshr i64 %55, 3                           ; [#uses = 2]
  %57 = add nuw nsw i64 %56, 1                    ; [#uses = 2]
  %58 = xor i64 %indvar, -1                       ; [#uses = 1]
  %59 = shl i64 %indvar, 32                       ; [#uses = 1]
  %sext = add i64 %59, 8589934592                 ; [#uses = 1]
  %60 = ashr exact i64 %sext, 32                  ; [#uses = 1]
  %61 = add i64 %60, %58                          ; [#uses = 3]
  %62 = xor i64 %indvar, -1                       ; [#uses = 1]
  %63 = shl i64 %indvar, 32                       ; [#uses = 1]
  %sext846 = add i64 %63, 8589934592              ; [#uses = 1]
  %64 = ashr exact i64 %sext846, 32               ; [#uses = 1]
  %65 = add i64 %64, %62                          ; [#uses = 3]
  %66 = xor i64 %indvar, -1                       ; [#uses = 1]
  %67 = shl i64 %indvar, 32                       ; [#uses = 1]
  %sext847 = add i64 %67, 8589934592              ; [#uses = 1]
  %68 = ashr exact i64 %sext847, 32               ; [#uses = 1]
  %69 = add i64 %68, %66                          ; [#uses = 3]
  %70 = xor i64 %indvar, -1                       ; [#uses = 1]
  %71 = shl i64 %indvar, 32                       ; [#uses = 1]
  %sext848 = add i64 %71, 8589934592              ; [#uses = 1]
  %72 = ashr exact i64 %sext848, 32               ; [#uses = 1]
  %73 = add i64 %72, %70                          ; [#uses = 3]
  %74 = sub i64 1, %indvar                        ; [#uses = 3]
  %75 = sub i64 1, %indvar                        ; [#uses = 3]
  %76 = sub i64 1, %indvar                        ; [#uses = 3]
  %77 = sub i64 1, %indvar                        ; [#uses = 3]
  %78 = sext i32 %i40.0412 to i64                 ; [#uses = 9]
  %.len45 = load i64, i64* %.fca.0.gep, align 8   ; [#uses = 9]
  %bounds.cmp46 = icmp ugt i64 %.len45, %78       ; [#uses = 1]
  br i1 %bounds.cmp46, label %bounds.ok47, label %bounds.fail48

bounds.ok47:                                      ; preds = %forbody42
  %.ptr49 = load i32*, i32** %.fca.1.gep, align 8 ; [#uses = 5]
  %79 = getelementptr inbounds i32, i32* %.ptr49, i64 %78 ; [#uses = 1, type = i32*]
  %80 = load i32, i32* %79, align 4               ; [#uses = 1]
  %81 = icmp eq i32 %80, 0                        ; [#uses = 1]
  br i1 %81, label %if50, label %forinc43

if50:                                             ; preds = %bounds.ok47
  %82 = icmp eq i32 %i40.0412, 0                  ; [#uses = 1]
  br i1 %82, label %if52, label %else54

if52:                                             ; preds = %if50
  %bounds.cmp56 = icmp ugt i64 %.len45, 1         ; [#uses = 1]
  br i1 %bounds.cmp56, label %bounds.ok57, label %bounds.fail58

bounds.ok57:                                      ; preds = %if52
  %83 = getelementptr inbounds i32, i32* %.ptr49, i64 1 ; [#uses = 2, type = i32*]
  %84 = load i32, i32* %83, align 4               ; [#uses = 1]
  %85 = icmp eq i32 %84, 1                        ; [#uses = 1]
  br i1 %85, label %if60, label %forinc43

if60:                                             ; preds = %bounds.ok57
  %.len64 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 2]
  %bounds.cmp.up65 = icmp ugt i64 %.len64, 1      ; [#uses = 1]
  br i1 %bounds.cmp.up65, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193, label %bounds.fail63

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193: ; preds = %if60
  %.ptr67 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %lowerbound68 = getelementptr inbounds i32, i32* %.ptr67, i64 %78 ; [#uses = 2, type = i32*]
  %86 = load i32, i32* %lowerbound68, align 4     ; [#uses = 8]
  %lowerbound.i.i.i.i191 = getelementptr inbounds i32, i32* %lowerbound68, i64 1 ; [#uses = 16, type = i32*]
  %87 = sub nuw nsw i64 1, %78                    ; [#uses = 4]
  %min.iters.check749 = icmp ult i64 %74, 8       ; [#uses = 1]
  br i1 %min.iters.check749, label %bounds.ok.i.i.i.i198.preheader, label %vector.ph750

vector.ph750:                                     ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193
  %n.vec752 = and i64 %74, -8                     ; [#uses = 2]
  %minmax.ident.splatinsert761 = insertelement <4 x i32> undef, i32 %86, i32 0 ; [#uses = 1]
  %minmax.ident.splat762 = shufflevector <4 x i32> %minmax.ident.splatinsert761, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %xtraiter979 = and i64 %57, 1                   ; [#uses = 1]
  %88 = icmp eq i64 %56, 0                        ; [#uses = 1]
  br i1 %88, label %middle.block746.unr-lcssa, label %vector.ph750.new

vector.ph750.new:                                 ; preds = %vector.ph750
  %unroll_iter981 = and i64 %57, 4611686018427387902 ; [#uses = 1]
  br label %vector.body748

vector.body748:                                   ; preds = %vector.body748, %vector.ph750.new
  %index753 = phi i64 [ 0, %vector.ph750.new ], [ %index.next754.1, %vector.body748 ] ; [#uses = 3, type = i64]
  %vec.phi757 = phi <4 x i32> [ %minmax.ident.splat762, %vector.ph750.new ], [ %103, %vector.body748 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi758 = phi <4 x i32> [ %minmax.ident.splat762, %vector.ph750.new ], [ %104, %vector.body748 ] ; [#uses = 2, type = <4 x i32>]
  %niter982 = phi i64 [ %unroll_iter981, %vector.ph750.new ], [ %niter982.nsub.1, %vector.body748 ] ; [#uses = 1, type = i64]
  %89 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index753 ; [#uses = 2, type = i32*]
  %90 = bitcast i32* %89 to <4 x i32>*            ; [#uses = 1]
  %wide.load759 = load <4 x i32>, <4 x i32>* %90, align 4 ; [#uses = 2]
  %91 = getelementptr inbounds i32, i32* %89, i64 4 ; [#uses = 1, type = i32*]
  %92 = bitcast i32* %91 to <4 x i32>*            ; [#uses = 1]
  %wide.load760 = load <4 x i32>, <4 x i32>* %92, align 4 ; [#uses = 2]
  %93 = icmp sgt <4 x i32> %wide.load759, %vec.phi757 ; [#uses = 1]
  %94 = icmp sgt <4 x i32> %wide.load760, %vec.phi758 ; [#uses = 1]
  %95 = select <4 x i1> %93, <4 x i32> %wide.load759, <4 x i32> %vec.phi757 ; [#uses = 2]
  %96 = select <4 x i1> %94, <4 x i32> %wide.load760, <4 x i32> %vec.phi758 ; [#uses = 2]
  %index.next754 = or i64 %index753, 8            ; [#uses = 1]
  %97 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index.next754 ; [#uses = 2, type = i32*]
  %98 = bitcast i32* %97 to <4 x i32>*            ; [#uses = 1]
  %wide.load759.1 = load <4 x i32>, <4 x i32>* %98, align 4 ; [#uses = 2]
  %99 = getelementptr inbounds i32, i32* %97, i64 4 ; [#uses = 1, type = i32*]
  %100 = bitcast i32* %99 to <4 x i32>*           ; [#uses = 1]
  %wide.load760.1 = load <4 x i32>, <4 x i32>* %100, align 4 ; [#uses = 2]
  %101 = icmp sgt <4 x i32> %wide.load759.1, %95  ; [#uses = 1]
  %102 = icmp sgt <4 x i32> %wide.load760.1, %96  ; [#uses = 1]
  %103 = select <4 x i1> %101, <4 x i32> %wide.load759.1, <4 x i32> %95 ; [#uses = 3]
  %104 = select <4 x i1> %102, <4 x i32> %wide.load760.1, <4 x i32> %96 ; [#uses = 3]
  %index.next754.1 = add i64 %index753, 16        ; [#uses = 2]
  %niter982.nsub.1 = add i64 %niter982, -2        ; [#uses = 2]
  %niter982.ncmp.1 = icmp eq i64 %niter982.nsub.1, 0 ; [#uses = 1]
  br i1 %niter982.ncmp.1, label %middle.block746.unr-lcssa, label %vector.body748, !llvm.loop !23

middle.block746.unr-lcssa:                        ; preds = %vector.body748, %vector.ph750
  %.lcssa873.ph = phi <4 x i32> [ undef, %vector.ph750 ], [ %103, %vector.body748 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa872.ph = phi <4 x i32> [ undef, %vector.ph750 ], [ %104, %vector.body748 ] ; [#uses = 1, type = <4 x i32>]
  %index753.unr = phi i64 [ 0, %vector.ph750 ], [ %index.next754.1, %vector.body748 ] ; [#uses = 1, type = i64]
  %vec.phi757.unr = phi <4 x i32> [ %minmax.ident.splat762, %vector.ph750 ], [ %103, %vector.body748 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi758.unr = phi <4 x i32> [ %minmax.ident.splat762, %vector.ph750 ], [ %104, %vector.body748 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod980.not = icmp eq i64 %xtraiter979, 0  ; [#uses = 1]
  br i1 %lcmp.mod980.not, label %middle.block746, label %vector.body748.epil

vector.body748.epil:                              ; preds = %middle.block746.unr-lcssa
  %105 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index753.unr ; [#uses = 2, type = i32*]
  %106 = bitcast i32* %105 to <4 x i32>*          ; [#uses = 1]
  %wide.load759.epil = load <4 x i32>, <4 x i32>* %106, align 4 ; [#uses = 2]
  %107 = getelementptr inbounds i32, i32* %105, i64 4 ; [#uses = 1, type = i32*]
  %108 = bitcast i32* %107 to <4 x i32>*          ; [#uses = 1]
  %wide.load760.epil = load <4 x i32>, <4 x i32>* %108, align 4 ; [#uses = 2]
  %109 = icmp sgt <4 x i32> %wide.load760.epil, %vec.phi758.unr ; [#uses = 1]
  %110 = select <4 x i1> %109, <4 x i32> %wide.load760.epil, <4 x i32> %vec.phi758.unr ; [#uses = 1]
  %111 = icmp sgt <4 x i32> %wide.load759.epil, %vec.phi757.unr ; [#uses = 1]
  %112 = select <4 x i1> %111, <4 x i32> %wide.load759.epil, <4 x i32> %vec.phi757.unr ; [#uses = 1]
  br label %middle.block746

middle.block746:                                  ; preds = %middle.block746.unr-lcssa, %vector.body748.epil
  %.lcssa873 = phi <4 x i32> [ %.lcssa873.ph, %middle.block746.unr-lcssa ], [ %112, %vector.body748.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa872 = phi <4 x i32> [ %.lcssa872.ph, %middle.block746.unr-lcssa ], [ %110, %vector.body748.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp763 = icmp sgt <4 x i32> %.lcssa873, %.lcssa872 ; [#uses = 1]
  %rdx.minmax.select764 = select <4 x i1> %rdx.minmax.cmp763, <4 x i32> %.lcssa873, <4 x i32> %.lcssa872 ; [#uses = 1]
  %113 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select764) ; [#uses = 2]
  %cmp.n756 = icmp eq i64 %74, %n.vec752          ; [#uses = 1]
  br i1 %cmp.n756, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i200, label %bounds.ok.i.i.i.i198.preheader

bounds.ok.i.i.i.i198.preheader:                   ; preds = %middle.block746, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193
  %__key142.016.i.i.i.i194.ph = phi i64 [ 0, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193 ], [ %n.vec752, %middle.block746 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i.i195.ph = phi i32 [ %86, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i193 ], [ %113, %middle.block746 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i.i198

bounds.ok.i.i.i.i198:                             ; preds = %bounds.ok.i.i.i.i198.preheader, %bounds.ok.i.i.i.i198
  %__key142.016.i.i.i.i194 = phi i64 [ %117, %bounds.ok.i.i.i.i198 ], [ %__key142.016.i.i.i.i194.ph, %bounds.ok.i.i.i.i198.preheader ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i.i195 = phi i32 [ %spec.select.i.i.i.i196, %bounds.ok.i.i.i.i198 ], [ %extremeElement.015.i.i.i.i195.ph, %bounds.ok.i.i.i.i198.preheader ] ; [#uses = 2, type = i32]
  %114 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %__key142.016.i.i.i.i194 ; [#uses = 1, type = i32*]
  %115 = load i32, i32* %114, align 4             ; [#uses = 2]
  %116 = icmp sgt i32 %115, %extremeElement.015.i.i.i.i195 ; [#uses = 1]
  %spec.select.i.i.i.i196 = select i1 %116, i32 %115, i32 %extremeElement.015.i.i.i.i195 ; [#uses = 2]
  %117 = add nuw i64 %__key142.016.i.i.i.i194, 1  ; [#uses = 2]
  %exitcond.not.i.i.i.i197 = icmp eq i64 %117, %87 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i.i197, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i200, label %bounds.ok.i.i.i.i198, !llvm.loop !24

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i200: ; preds = %bounds.ok.i.i.i.i198, %middle.block746
  %spec.select.i.i.i.i196.lcssa = phi i32 [ %113, %middle.block746 ], [ %spec.select.i.i.i.i196, %bounds.ok.i.i.i.i198 ] ; [#uses = 1, type = i32]
  %118 = icmp eq i32 %spec.select.i.i.i.i196.lcssa, 2 ; [#uses = 1]
  br i1 %118, label %bounds.ok73, label %bounds.ok.i.i.i36.i207.preheader

bounds.ok.i.i.i36.i207.preheader:                 ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i200
  %min.iters.check729 = icmp ult i64 %75, 8       ; [#uses = 1]
  br i1 %min.iters.check729, label %bounds.ok.i.i.i36.i207.preheader851, label %vector.ph730

vector.ph730:                                     ; preds = %bounds.ok.i.i.i36.i207.preheader
  %n.vec732 = and i64 %75, -8                     ; [#uses = 2]
  %minmax.ident.splatinsert741 = insertelement <4 x i32> undef, i32 %86, i32 0 ; [#uses = 1]
  %minmax.ident.splat742 = shufflevector <4 x i32> %minmax.ident.splatinsert741, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %xtraiter983 = and i64 %54, 1                   ; [#uses = 1]
  %119 = icmp eq i64 %53, 0                       ; [#uses = 1]
  br i1 %119, label %middle.block726.unr-lcssa, label %vector.ph730.new

vector.ph730.new:                                 ; preds = %vector.ph730
  %unroll_iter985 = and i64 %54, 4611686018427387902 ; [#uses = 1]
  br label %vector.body728

vector.body728:                                   ; preds = %vector.body728, %vector.ph730.new
  %index733 = phi i64 [ 0, %vector.ph730.new ], [ %index.next734.1, %vector.body728 ] ; [#uses = 3, type = i64]
  %vec.phi737 = phi <4 x i32> [ %minmax.ident.splat742, %vector.ph730.new ], [ %134, %vector.body728 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi738 = phi <4 x i32> [ %minmax.ident.splat742, %vector.ph730.new ], [ %135, %vector.body728 ] ; [#uses = 2, type = <4 x i32>]
  %niter986 = phi i64 [ %unroll_iter985, %vector.ph730.new ], [ %niter986.nsub.1, %vector.body728 ] ; [#uses = 1, type = i64]
  %120 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index733 ; [#uses = 2, type = i32*]
  %121 = bitcast i32* %120 to <4 x i32>*          ; [#uses = 1]
  %wide.load739 = load <4 x i32>, <4 x i32>* %121, align 4 ; [#uses = 2]
  %122 = getelementptr inbounds i32, i32* %120, i64 4 ; [#uses = 1, type = i32*]
  %123 = bitcast i32* %122 to <4 x i32>*          ; [#uses = 1]
  %wide.load740 = load <4 x i32>, <4 x i32>* %123, align 4 ; [#uses = 2]
  %124 = icmp slt <4 x i32> %wide.load739, %vec.phi737 ; [#uses = 1]
  %125 = icmp slt <4 x i32> %wide.load740, %vec.phi738 ; [#uses = 1]
  %126 = select <4 x i1> %124, <4 x i32> %wide.load739, <4 x i32> %vec.phi737 ; [#uses = 2]
  %127 = select <4 x i1> %125, <4 x i32> %wide.load740, <4 x i32> %vec.phi738 ; [#uses = 2]
  %index.next734 = or i64 %index733, 8            ; [#uses = 1]
  %128 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index.next734 ; [#uses = 2, type = i32*]
  %129 = bitcast i32* %128 to <4 x i32>*          ; [#uses = 1]
  %wide.load739.1 = load <4 x i32>, <4 x i32>* %129, align 4 ; [#uses = 2]
  %130 = getelementptr inbounds i32, i32* %128, i64 4 ; [#uses = 1, type = i32*]
  %131 = bitcast i32* %130 to <4 x i32>*          ; [#uses = 1]
  %wide.load740.1 = load <4 x i32>, <4 x i32>* %131, align 4 ; [#uses = 2]
  %132 = icmp slt <4 x i32> %wide.load739.1, %126 ; [#uses = 1]
  %133 = icmp slt <4 x i32> %wide.load740.1, %127 ; [#uses = 1]
  %134 = select <4 x i1> %132, <4 x i32> %wide.load739.1, <4 x i32> %126 ; [#uses = 3]
  %135 = select <4 x i1> %133, <4 x i32> %wide.load740.1, <4 x i32> %127 ; [#uses = 3]
  %index.next734.1 = add i64 %index733, 16        ; [#uses = 2]
  %niter986.nsub.1 = add i64 %niter986, -2        ; [#uses = 2]
  %niter986.ncmp.1 = icmp eq i64 %niter986.nsub.1, 0 ; [#uses = 1]
  br i1 %niter986.ncmp.1, label %middle.block726.unr-lcssa, label %vector.body728, !llvm.loop !25

middle.block726.unr-lcssa:                        ; preds = %vector.body728, %vector.ph730
  %.lcssa876.ph = phi <4 x i32> [ undef, %vector.ph730 ], [ %134, %vector.body728 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa875.ph = phi <4 x i32> [ undef, %vector.ph730 ], [ %135, %vector.body728 ] ; [#uses = 1, type = <4 x i32>]
  %index733.unr = phi i64 [ 0, %vector.ph730 ], [ %index.next734.1, %vector.body728 ] ; [#uses = 1, type = i64]
  %vec.phi737.unr = phi <4 x i32> [ %minmax.ident.splat742, %vector.ph730 ], [ %134, %vector.body728 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi738.unr = phi <4 x i32> [ %minmax.ident.splat742, %vector.ph730 ], [ %135, %vector.body728 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod984.not = icmp eq i64 %xtraiter983, 0  ; [#uses = 1]
  br i1 %lcmp.mod984.not, label %middle.block726, label %vector.body728.epil

vector.body728.epil:                              ; preds = %middle.block726.unr-lcssa
  %136 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index733.unr ; [#uses = 2, type = i32*]
  %137 = bitcast i32* %136 to <4 x i32>*          ; [#uses = 1]
  %wide.load739.epil = load <4 x i32>, <4 x i32>* %137, align 4 ; [#uses = 2]
  %138 = getelementptr inbounds i32, i32* %136, i64 4 ; [#uses = 1, type = i32*]
  %139 = bitcast i32* %138 to <4 x i32>*          ; [#uses = 1]
  %wide.load740.epil = load <4 x i32>, <4 x i32>* %139, align 4 ; [#uses = 2]
  %140 = icmp slt <4 x i32> %wide.load740.epil, %vec.phi738.unr ; [#uses = 1]
  %141 = select <4 x i1> %140, <4 x i32> %wide.load740.epil, <4 x i32> %vec.phi738.unr ; [#uses = 1]
  %142 = icmp slt <4 x i32> %wide.load739.epil, %vec.phi737.unr ; [#uses = 1]
  %143 = select <4 x i1> %142, <4 x i32> %wide.load739.epil, <4 x i32> %vec.phi737.unr ; [#uses = 1]
  br label %middle.block726

middle.block726:                                  ; preds = %middle.block726.unr-lcssa, %vector.body728.epil
  %.lcssa876 = phi <4 x i32> [ %.lcssa876.ph, %middle.block726.unr-lcssa ], [ %143, %vector.body728.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa875 = phi <4 x i32> [ %.lcssa875.ph, %middle.block726.unr-lcssa ], [ %141, %vector.body728.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp743 = icmp slt <4 x i32> %.lcssa876, %.lcssa875 ; [#uses = 1]
  %rdx.minmax.select744 = select <4 x i1> %rdx.minmax.cmp743, <4 x i32> %.lcssa876, <4 x i32> %.lcssa875 ; [#uses = 1]
  %144 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select744) ; [#uses = 2]
  %cmp.n736 = icmp eq i64 %75, %n.vec732          ; [#uses = 1]
  br i1 %cmp.n736, label %bounds.ok.i.i.i49.i213.preheader, label %bounds.ok.i.i.i36.i207.preheader851

bounds.ok.i.i.i36.i207.preheader851:              ; preds = %middle.block726, %bounds.ok.i.i.i36.i207.preheader
  %__key144.016.i.i.i.i203.ph = phi i64 [ 0, %bounds.ok.i.i.i36.i207.preheader ], [ %n.vec732, %middle.block726 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i33.i204.ph = phi i32 [ %86, %bounds.ok.i.i.i36.i207.preheader ], [ %144, %middle.block726 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i36.i207

bounds.ok.i.i.i36.i207:                           ; preds = %bounds.ok.i.i.i36.i207.preheader851, %bounds.ok.i.i.i36.i207
  %__key144.016.i.i.i.i203 = phi i64 [ %148, %bounds.ok.i.i.i36.i207 ], [ %__key144.016.i.i.i.i203.ph, %bounds.ok.i.i.i36.i207.preheader851 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i33.i204 = phi i32 [ %spec.select.i.i.i34.i205, %bounds.ok.i.i.i36.i207 ], [ %extremeElement.015.i.i.i33.i204.ph, %bounds.ok.i.i.i36.i207.preheader851 ] ; [#uses = 2, type = i32]
  %145 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %__key144.016.i.i.i.i203 ; [#uses = 1, type = i32*]
  %146 = load i32, i32* %145, align 4             ; [#uses = 2]
  %147 = icmp slt i32 %146, %extremeElement.015.i.i.i33.i204 ; [#uses = 1]
  %spec.select.i.i.i34.i205 = select i1 %147, i32 %146, i32 %extremeElement.015.i.i.i33.i204 ; [#uses = 2]
  %148 = add nuw i64 %__key144.016.i.i.i.i203, 1  ; [#uses = 2]
  %exitcond.not.i.i.i35.i206 = icmp eq i64 %148, %87 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i35.i206, label %bounds.ok.i.i.i49.i213.preheader, label %bounds.ok.i.i.i36.i207, !llvm.loop !26

bounds.ok.i.i.i49.i213.preheader:                 ; preds = %bounds.ok.i.i.i36.i207, %middle.block726
  %spec.select.i.i.i34.i205.lcssa = phi i32 [ %144, %middle.block726 ], [ %spec.select.i.i.i34.i205, %bounds.ok.i.i.i36.i207 ] ; [#uses = 1, type = i32]
  %min.iters.check709 = icmp ult i64 %76, 8       ; [#uses = 1]
  br i1 %min.iters.check709, label %bounds.ok.i.i.i49.i213.preheader850, label %vector.ph710

vector.ph710:                                     ; preds = %bounds.ok.i.i.i49.i213.preheader
  %n.vec712 = and i64 %76, -8                     ; [#uses = 2]
  %minmax.ident.splatinsert721 = insertelement <4 x i32> undef, i32 %86, i32 0 ; [#uses = 1]
  %minmax.ident.splat722 = shufflevector <4 x i32> %minmax.ident.splatinsert721, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %xtraiter987 = and i64 %51, 1                   ; [#uses = 1]
  %149 = icmp eq i64 %50, 0                       ; [#uses = 1]
  br i1 %149, label %middle.block706.unr-lcssa, label %vector.ph710.new

vector.ph710.new:                                 ; preds = %vector.ph710
  %unroll_iter989 = and i64 %51, 4611686018427387902 ; [#uses = 1]
  br label %vector.body708

vector.body708:                                   ; preds = %vector.body708, %vector.ph710.new
  %index713 = phi i64 [ 0, %vector.ph710.new ], [ %index.next714.1, %vector.body708 ] ; [#uses = 3, type = i64]
  %vec.phi717 = phi <4 x i32> [ %minmax.ident.splat722, %vector.ph710.new ], [ %164, %vector.body708 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi718 = phi <4 x i32> [ %minmax.ident.splat722, %vector.ph710.new ], [ %165, %vector.body708 ] ; [#uses = 2, type = <4 x i32>]
  %niter990 = phi i64 [ %unroll_iter989, %vector.ph710.new ], [ %niter990.nsub.1, %vector.body708 ] ; [#uses = 1, type = i64]
  %150 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index713 ; [#uses = 2, type = i32*]
  %151 = bitcast i32* %150 to <4 x i32>*          ; [#uses = 1]
  %wide.load719 = load <4 x i32>, <4 x i32>* %151, align 4 ; [#uses = 2]
  %152 = getelementptr inbounds i32, i32* %150, i64 4 ; [#uses = 1, type = i32*]
  %153 = bitcast i32* %152 to <4 x i32>*          ; [#uses = 1]
  %wide.load720 = load <4 x i32>, <4 x i32>* %153, align 4 ; [#uses = 2]
  %154 = icmp sgt <4 x i32> %wide.load719, %vec.phi717 ; [#uses = 1]
  %155 = icmp sgt <4 x i32> %wide.load720, %vec.phi718 ; [#uses = 1]
  %156 = select <4 x i1> %154, <4 x i32> %wide.load719, <4 x i32> %vec.phi717 ; [#uses = 2]
  %157 = select <4 x i1> %155, <4 x i32> %wide.load720, <4 x i32> %vec.phi718 ; [#uses = 2]
  %index.next714 = or i64 %index713, 8            ; [#uses = 1]
  %158 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index.next714 ; [#uses = 2, type = i32*]
  %159 = bitcast i32* %158 to <4 x i32>*          ; [#uses = 1]
  %wide.load719.1 = load <4 x i32>, <4 x i32>* %159, align 4 ; [#uses = 2]
  %160 = getelementptr inbounds i32, i32* %158, i64 4 ; [#uses = 1, type = i32*]
  %161 = bitcast i32* %160 to <4 x i32>*          ; [#uses = 1]
  %wide.load720.1 = load <4 x i32>, <4 x i32>* %161, align 4 ; [#uses = 2]
  %162 = icmp sgt <4 x i32> %wide.load719.1, %156 ; [#uses = 1]
  %163 = icmp sgt <4 x i32> %wide.load720.1, %157 ; [#uses = 1]
  %164 = select <4 x i1> %162, <4 x i32> %wide.load719.1, <4 x i32> %156 ; [#uses = 3]
  %165 = select <4 x i1> %163, <4 x i32> %wide.load720.1, <4 x i32> %157 ; [#uses = 3]
  %index.next714.1 = add i64 %index713, 16        ; [#uses = 2]
  %niter990.nsub.1 = add i64 %niter990, -2        ; [#uses = 2]
  %niter990.ncmp.1 = icmp eq i64 %niter990.nsub.1, 0 ; [#uses = 1]
  br i1 %niter990.ncmp.1, label %middle.block706.unr-lcssa, label %vector.body708, !llvm.loop !27

middle.block706.unr-lcssa:                        ; preds = %vector.body708, %vector.ph710
  %.lcssa879.ph = phi <4 x i32> [ undef, %vector.ph710 ], [ %164, %vector.body708 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa878.ph = phi <4 x i32> [ undef, %vector.ph710 ], [ %165, %vector.body708 ] ; [#uses = 1, type = <4 x i32>]
  %index713.unr = phi i64 [ 0, %vector.ph710 ], [ %index.next714.1, %vector.body708 ] ; [#uses = 1, type = i64]
  %vec.phi717.unr = phi <4 x i32> [ %minmax.ident.splat722, %vector.ph710 ], [ %164, %vector.body708 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi718.unr = phi <4 x i32> [ %minmax.ident.splat722, %vector.ph710 ], [ %165, %vector.body708 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod988.not = icmp eq i64 %xtraiter987, 0  ; [#uses = 1]
  br i1 %lcmp.mod988.not, label %middle.block706, label %vector.body708.epil

vector.body708.epil:                              ; preds = %middle.block706.unr-lcssa
  %166 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index713.unr ; [#uses = 2, type = i32*]
  %167 = bitcast i32* %166 to <4 x i32>*          ; [#uses = 1]
  %wide.load719.epil = load <4 x i32>, <4 x i32>* %167, align 4 ; [#uses = 2]
  %168 = getelementptr inbounds i32, i32* %166, i64 4 ; [#uses = 1, type = i32*]
  %169 = bitcast i32* %168 to <4 x i32>*          ; [#uses = 1]
  %wide.load720.epil = load <4 x i32>, <4 x i32>* %169, align 4 ; [#uses = 2]
  %170 = icmp sgt <4 x i32> %wide.load720.epil, %vec.phi718.unr ; [#uses = 1]
  %171 = select <4 x i1> %170, <4 x i32> %wide.load720.epil, <4 x i32> %vec.phi718.unr ; [#uses = 1]
  %172 = icmp sgt <4 x i32> %wide.load719.epil, %vec.phi717.unr ; [#uses = 1]
  %173 = select <4 x i1> %172, <4 x i32> %wide.load719.epil, <4 x i32> %vec.phi717.unr ; [#uses = 1]
  br label %middle.block706

middle.block706:                                  ; preds = %middle.block706.unr-lcssa, %vector.body708.epil
  %.lcssa879 = phi <4 x i32> [ %.lcssa879.ph, %middle.block706.unr-lcssa ], [ %173, %vector.body708.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa878 = phi <4 x i32> [ %.lcssa878.ph, %middle.block706.unr-lcssa ], [ %171, %vector.body708.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp723 = icmp sgt <4 x i32> %.lcssa879, %.lcssa878 ; [#uses = 1]
  %rdx.minmax.select724 = select <4 x i1> %rdx.minmax.cmp723, <4 x i32> %.lcssa879, <4 x i32> %.lcssa878 ; [#uses = 1]
  %174 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select724) ; [#uses = 2]
  %cmp.n716 = icmp eq i64 %76, %n.vec712          ; [#uses = 1]
  br i1 %cmp.n716, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i214, label %bounds.ok.i.i.i49.i213.preheader850

bounds.ok.i.i.i49.i213.preheader850:              ; preds = %middle.block706, %bounds.ok.i.i.i49.i213.preheader
  %__key142.016.i.i.i45.i209.ph = phi i64 [ 0, %bounds.ok.i.i.i49.i213.preheader ], [ %n.vec712, %middle.block706 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i46.i210.ph = phi i32 [ %86, %bounds.ok.i.i.i49.i213.preheader ], [ %174, %middle.block706 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i49.i213

bounds.ok.i.i.i49.i213:                           ; preds = %bounds.ok.i.i.i49.i213.preheader850, %bounds.ok.i.i.i49.i213
  %__key142.016.i.i.i45.i209 = phi i64 [ %178, %bounds.ok.i.i.i49.i213 ], [ %__key142.016.i.i.i45.i209.ph, %bounds.ok.i.i.i49.i213.preheader850 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i46.i210 = phi i32 [ %spec.select.i.i.i47.i211, %bounds.ok.i.i.i49.i213 ], [ %extremeElement.015.i.i.i46.i210.ph, %bounds.ok.i.i.i49.i213.preheader850 ] ; [#uses = 2, type = i32]
  %175 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %__key142.016.i.i.i45.i209 ; [#uses = 1, type = i32*]
  %176 = load i32, i32* %175, align 4             ; [#uses = 2]
  %177 = icmp sgt i32 %176, %extremeElement.015.i.i.i46.i210 ; [#uses = 1]
  %spec.select.i.i.i47.i211 = select i1 %177, i32 %176, i32 %extremeElement.015.i.i.i46.i210 ; [#uses = 2]
  %178 = add nuw i64 %__key142.016.i.i.i45.i209, 1 ; [#uses = 2]
  %exitcond.not.i.i.i48.i212 = icmp eq i64 %178, %87 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i48.i212, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i214, label %bounds.ok.i.i.i49.i213, !llvm.loop !28

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i214: ; preds = %bounds.ok.i.i.i49.i213, %middle.block706
  %spec.select.i.i.i47.i211.lcssa = phi i32 [ %174, %middle.block706 ], [ %spec.select.i.i.i47.i211, %bounds.ok.i.i.i49.i213 ] ; [#uses = 1, type = i32]
  %179 = icmp eq i32 %spec.select.i.i.i34.i205.lcssa, %spec.select.i.i.i47.i211.lcssa ; [#uses = 1]
  br i1 %179, label %bounds.ok.i.i.i63.i219.preheader, label %bounds.ok73

bounds.ok.i.i.i63.i219.preheader:                 ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i214
  %min.iters.check693 = icmp ult i64 %77, 8       ; [#uses = 1]
  br i1 %min.iters.check693, label %bounds.ok.i.i.i63.i219.preheader849, label %vector.ph694

vector.ph694:                                     ; preds = %bounds.ok.i.i.i63.i219.preheader
  %n.vec696 = and i64 %77, -8                     ; [#uses = 2]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %86, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %xtraiter991 = and i64 %48, 1                   ; [#uses = 1]
  %180 = icmp eq i64 %47, 0                       ; [#uses = 1]
  br i1 %180, label %middle.block690.unr-lcssa, label %vector.ph694.new

vector.ph694.new:                                 ; preds = %vector.ph694
  %unroll_iter993 = and i64 %48, 4611686018427387902 ; [#uses = 1]
  br label %vector.body692

vector.body692:                                   ; preds = %vector.body692, %vector.ph694.new
  %index697 = phi i64 [ 0, %vector.ph694.new ], [ %index.next698.1, %vector.body692 ] ; [#uses = 3, type = i64]
  %vec.phi701 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph694.new ], [ %195, %vector.body692 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi702 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph694.new ], [ %196, %vector.body692 ] ; [#uses = 2, type = <4 x i32>]
  %niter994 = phi i64 [ %unroll_iter993, %vector.ph694.new ], [ %niter994.nsub.1, %vector.body692 ] ; [#uses = 1, type = i64]
  %181 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index697 ; [#uses = 2, type = i32*]
  %182 = bitcast i32* %181 to <4 x i32>*          ; [#uses = 1]
  %wide.load703 = load <4 x i32>, <4 x i32>* %182, align 4 ; [#uses = 2]
  %183 = getelementptr inbounds i32, i32* %181, i64 4 ; [#uses = 1, type = i32*]
  %184 = bitcast i32* %183 to <4 x i32>*          ; [#uses = 1]
  %wide.load704 = load <4 x i32>, <4 x i32>* %184, align 4 ; [#uses = 2]
  %185 = icmp slt <4 x i32> %wide.load703, %vec.phi701 ; [#uses = 1]
  %186 = icmp slt <4 x i32> %wide.load704, %vec.phi702 ; [#uses = 1]
  %187 = select <4 x i1> %185, <4 x i32> %wide.load703, <4 x i32> %vec.phi701 ; [#uses = 2]
  %188 = select <4 x i1> %186, <4 x i32> %wide.load704, <4 x i32> %vec.phi702 ; [#uses = 2]
  %index.next698 = or i64 %index697, 8            ; [#uses = 1]
  %189 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index.next698 ; [#uses = 2, type = i32*]
  %190 = bitcast i32* %189 to <4 x i32>*          ; [#uses = 1]
  %wide.load703.1 = load <4 x i32>, <4 x i32>* %190, align 4 ; [#uses = 2]
  %191 = getelementptr inbounds i32, i32* %189, i64 4 ; [#uses = 1, type = i32*]
  %192 = bitcast i32* %191 to <4 x i32>*          ; [#uses = 1]
  %wide.load704.1 = load <4 x i32>, <4 x i32>* %192, align 4 ; [#uses = 2]
  %193 = icmp slt <4 x i32> %wide.load703.1, %187 ; [#uses = 1]
  %194 = icmp slt <4 x i32> %wide.load704.1, %188 ; [#uses = 1]
  %195 = select <4 x i1> %193, <4 x i32> %wide.load703.1, <4 x i32> %187 ; [#uses = 3]
  %196 = select <4 x i1> %194, <4 x i32> %wide.load704.1, <4 x i32> %188 ; [#uses = 3]
  %index.next698.1 = add i64 %index697, 16        ; [#uses = 2]
  %niter994.nsub.1 = add i64 %niter994, -2        ; [#uses = 2]
  %niter994.ncmp.1 = icmp eq i64 %niter994.nsub.1, 0 ; [#uses = 1]
  br i1 %niter994.ncmp.1, label %middle.block690.unr-lcssa, label %vector.body692, !llvm.loop !29

middle.block690.unr-lcssa:                        ; preds = %vector.body692, %vector.ph694
  %.lcssa882.ph = phi <4 x i32> [ undef, %vector.ph694 ], [ %195, %vector.body692 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa881.ph = phi <4 x i32> [ undef, %vector.ph694 ], [ %196, %vector.body692 ] ; [#uses = 1, type = <4 x i32>]
  %index697.unr = phi i64 [ 0, %vector.ph694 ], [ %index.next698.1, %vector.body692 ] ; [#uses = 1, type = i64]
  %vec.phi701.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph694 ], [ %195, %vector.body692 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi702.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph694 ], [ %196, %vector.body692 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod992.not = icmp eq i64 %xtraiter991, 0  ; [#uses = 1]
  br i1 %lcmp.mod992.not, label %middle.block690, label %vector.body692.epil

vector.body692.epil:                              ; preds = %middle.block690.unr-lcssa
  %197 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %index697.unr ; [#uses = 2, type = i32*]
  %198 = bitcast i32* %197 to <4 x i32>*          ; [#uses = 1]
  %wide.load703.epil = load <4 x i32>, <4 x i32>* %198, align 4 ; [#uses = 2]
  %199 = getelementptr inbounds i32, i32* %197, i64 4 ; [#uses = 1, type = i32*]
  %200 = bitcast i32* %199 to <4 x i32>*          ; [#uses = 1]
  %wide.load704.epil = load <4 x i32>, <4 x i32>* %200, align 4 ; [#uses = 2]
  %201 = icmp slt <4 x i32> %wide.load704.epil, %vec.phi702.unr ; [#uses = 1]
  %202 = select <4 x i1> %201, <4 x i32> %wide.load704.epil, <4 x i32> %vec.phi702.unr ; [#uses = 1]
  %203 = icmp slt <4 x i32> %wide.load703.epil, %vec.phi701.unr ; [#uses = 1]
  %204 = select <4 x i1> %203, <4 x i32> %wide.load703.epil, <4 x i32> %vec.phi701.unr ; [#uses = 1]
  br label %middle.block690

middle.block690:                                  ; preds = %middle.block690.unr-lcssa, %vector.body692.epil
  %.lcssa882 = phi <4 x i32> [ %.lcssa882.ph, %middle.block690.unr-lcssa ], [ %204, %vector.body692.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa881 = phi <4 x i32> [ %.lcssa881.ph, %middle.block690.unr-lcssa ], [ %202, %vector.body692.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp slt <4 x i32> %.lcssa882, %.lcssa881 ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa882, <4 x i32> %.lcssa881 ; [#uses = 1]
  %205 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n700 = icmp eq i64 %77, %n.vec696          ; [#uses = 1]
  br i1 %cmp.n700, label %_D6source3mexFAiZi.exit222, label %bounds.ok.i.i.i63.i219.preheader849

bounds.ok.i.i.i63.i219.preheader849:              ; preds = %middle.block690, %bounds.ok.i.i.i63.i219.preheader
  %__key144.016.i.i.i59.i215.ph = phi i64 [ 0, %bounds.ok.i.i.i63.i219.preheader ], [ %n.vec696, %middle.block690 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i60.i216.ph = phi i32 [ %86, %bounds.ok.i.i.i63.i219.preheader ], [ %205, %middle.block690 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i63.i219

bounds.ok.i.i.i63.i219:                           ; preds = %bounds.ok.i.i.i63.i219.preheader849, %bounds.ok.i.i.i63.i219
  %__key144.016.i.i.i59.i215 = phi i64 [ %209, %bounds.ok.i.i.i63.i219 ], [ %__key144.016.i.i.i59.i215.ph, %bounds.ok.i.i.i63.i219.preheader849 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i60.i216 = phi i32 [ %spec.select.i.i.i61.i217, %bounds.ok.i.i.i63.i219 ], [ %extremeElement.015.i.i.i60.i216.ph, %bounds.ok.i.i.i63.i219.preheader849 ] ; [#uses = 2, type = i32]
  %206 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i191, i64 %__key144.016.i.i.i59.i215 ; [#uses = 1, type = i32*]
  %207 = load i32, i32* %206, align 4             ; [#uses = 2]
  %208 = icmp slt i32 %207, %extremeElement.015.i.i.i60.i216 ; [#uses = 1]
  %spec.select.i.i.i61.i217 = select i1 %208, i32 %207, i32 %extremeElement.015.i.i.i60.i216 ; [#uses = 2]
  %209 = add nuw i64 %__key144.016.i.i.i59.i215, 1 ; [#uses = 2]
  %exitcond.not.i.i.i62.i218 = icmp eq i64 %209, %87 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i62.i218, label %_D6source3mexFAiZi.exit222, label %bounds.ok.i.i.i63.i219, !llvm.loop !30

_D6source3mexFAiZi.exit222:                       ; preds = %bounds.ok.i.i.i63.i219, %middle.block690
  %spec.select.i.i.i61.i217.lcssa = phi i32 [ %205, %middle.block690 ], [ %spec.select.i.i.i61.i217, %bounds.ok.i.i.i63.i219 ] ; [#uses = 1, type = i32]
  %210 = icmp eq i32 %spec.select.i.i.i61.i217.lcssa, -1 ; [#uses = 1]
  br i1 %210, label %bounds.ok73, label %forinc43

bounds.ok73:                                      ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i200, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i214, %_D6source3mexFAiZi.exit222
  store i32 2, i32* %83, align 4
  br label %forinc43

bounds.fail63:                                    ; preds = %if60
  call void @_d_arraybounds_slice({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 49, i64 %78, i64 2, i64 %.len64) #3
  unreachable

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

else54:                                           ; preds = %if50
  %211 = add nsw i32 %45, -1                      ; [#uses = 1]
  %212 = icmp eq i32 %i40.0412, %211              ; [#uses = 1]
  %213 = add i32 %i40.0412, -1                    ; [#uses = 3]
  %214 = sext i32 %213 to i64                     ; [#uses = 11]
  %bounds.cmp80 = icmp ugt i64 %.len45, %214      ; [#uses = 2]
  br i1 %212, label %if76, label %else78

if76:                                             ; preds = %else54
  br i1 %bounds.cmp80, label %bounds.ok81, label %bounds.fail82

bounds.ok81:                                      ; preds = %if76
  %215 = getelementptr inbounds i32, i32* %.ptr49, i64 %214 ; [#uses = 2, type = i32*]
  %216 = load i32, i32* %215, align 4             ; [#uses = 1]
  %217 = icmp eq i32 %216, 1                      ; [#uses = 1]
  br i1 %217, label %if84, label %forinc43

if84:                                             ; preds = %bounds.ok81
  %218 = add nuw nsw i32 %i40.0412, 1             ; [#uses = 2]
  %219 = sext i32 %218 to i64                     ; [#uses = 3]
  %.len88 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 2]
  %bounds.cmp.up89 = icmp uge i64 %.len88, %219   ; [#uses = 1]
  %bounds.cmp.lo90 = icmp uge i32 %218, %213      ; [#uses = 1]
  %220 = and i1 %bounds.cmp.lo90, %bounds.cmp.up89 ; [#uses = 1]
  br i1 %220, label %bounds.ok86, label %bounds.fail87

bounds.ok86:                                      ; preds = %if84
  %.ptr91 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %lowerbound92 = getelementptr inbounds i32, i32* %.ptr91, i64 %214 ; [#uses = 2, type = i32*]
  %221 = sub nsw i64 %219, %214                   ; [#uses = 2]
  %.not.i.i.i.i223 = icmp eq i64 %221, 0          ; [#uses = 1]
  br i1 %.not.i.i.i.i223, label %assertFailed.i.i.i232, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i226

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i226: ; preds = %bounds.ok86
  %222 = load i32, i32* %lowerbound92, align 4    ; [#uses = 6]
  %.not.i7.i.i.i225 = icmp eq i64 %221, 1         ; [#uses = 1]
  br i1 %.not.i7.i.i.i225, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i234, label %bounds.ok.i.i.i.i231.preheader

bounds.ok.i.i.i.i231.preheader:                   ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i226
  %lowerbound.i.i.i.i224 = getelementptr inbounds i32, i32* %lowerbound92, i64 1 ; [#uses = 1, type = i32*]
  %223 = load i32, i32* %lowerbound.i.i.i.i224, align 4 ; [#uses = 4]
  %224 = icmp sgt i32 %223, %222                  ; [#uses = 1]
  %spec.select.i.i.i.i229 = select i1 %224, i32 %223, i32 %222 ; [#uses = 3]
  %225 = icmp eq i32 %spec.select.i.i.i.i229, 2   ; [#uses = 1]
  br i1 %225, label %bounds.ok97, label %bounds.ok.i.i.i36.i240.preheader

assertFailed.i.i.i232:                            ; preds = %bounds.ok86
  call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

bounds.ok.i.i.i36.i240.preheader:                 ; preds = %bounds.ok.i.i.i.i231.preheader
  %226 = icmp slt i32 %223, %222                  ; [#uses = 1]
  %spec.select.i.i.i34.i238 = select i1 %226, i32 %223, i32 %222 ; [#uses = 1]
  %227 = icmp eq i32 %spec.select.i.i.i34.i238, %spec.select.i.i.i.i229 ; [#uses = 1]
  br i1 %227, label %_D6source3mexFAiZi.exit255, label %bounds.ok97

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i234: ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i226
  %228 = icmp eq i32 %222, 2                      ; [#uses = 1]
  br i1 %228, label %bounds.ok97, label %_D6source3mexFAiZi.exit255

_D6source3mexFAiZi.exit255:                       ; preds = %bounds.ok.i.i.i36.i240.preheader, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i234
  %extremeElement.0.lcssa.i.i.i65.i253 = phi i32 [ %222, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i234 ], [ %spec.select.i.i.i.i229, %bounds.ok.i.i.i36.i240.preheader ] ; [#uses = 1, type = i32]
  %229 = icmp eq i32 %extremeElement.0.lcssa.i.i.i65.i253, -1 ; [#uses = 1]
  br i1 %229, label %bounds.ok97, label %forinc43

bounds.ok97:                                      ; preds = %bounds.ok.i.i.i.i231.preheader, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i234, %bounds.ok.i.i.i36.i240.preheader, %_D6source3mexFAiZi.exit255
  store i32 2, i32* %215, align 4
  br label %forinc43

bounds.fail87:                                    ; preds = %if84
  call void @_d_arraybounds_slice({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 57, i64 %214, i64 %219, i64 %.len88) #3
  unreachable

bounds.fail82:                                    ; preds = %if76
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 55, i64 %214, i64 %.len45) #3
  unreachable

else78:                                           ; preds = %else54
  br i1 %bounds.cmp80, label %bounds.ok102, label %bounds.fail103

bounds.ok102:                                     ; preds = %else78
  %230 = getelementptr inbounds i32, i32* %.ptr49, i64 %214 ; [#uses = 2, type = i32*]
  %231 = load i32, i32* %230, align 4             ; [#uses = 1]
  %232 = icmp eq i32 %231, 1                      ; [#uses = 1]
  %233 = add nuw nsw i32 %i40.0412, 1             ; [#uses = 2]
  %234 = sext i32 %233 to i64                     ; [#uses = 6]
  br i1 %232, label %if105, label %else107

if105:                                            ; preds = %bounds.ok102
  %.len110 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 2]
  %bounds.cmp.up111 = icmp uge i64 %.len110, %234 ; [#uses = 1]
  %bounds.cmp.lo112 = icmp uge i32 %233, %213     ; [#uses = 1]
  %235 = and i1 %bounds.cmp.lo112, %bounds.cmp.up111 ; [#uses = 1]
  br i1 %235, label %bounds.ok108, label %bounds.fail109

bounds.ok108:                                     ; preds = %if105
  %.ptr113 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %lowerbound114 = getelementptr inbounds i32, i32* %.ptr113, i64 %214 ; [#uses = 2, type = i32*]
  %236 = sub nsw i64 %234, %214                   ; [#uses = 2]
  %.not.i.i.i.i256 = icmp eq i64 %236, 0          ; [#uses = 1]
  br i1 %.not.i.i.i.i256, label %assertFailed.i.i.i265, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i259

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i259: ; preds = %bounds.ok108
  %237 = load i32, i32* %lowerbound114, align 4   ; [#uses = 6]
  %.not.i7.i.i.i258 = icmp eq i64 %236, 1         ; [#uses = 1]
  br i1 %.not.i7.i.i.i258, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i267, label %bounds.ok.i.i.i.i264.preheader

bounds.ok.i.i.i.i264.preheader:                   ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i259
  %lowerbound.i.i.i.i257 = getelementptr inbounds i32, i32* %lowerbound114, i64 1 ; [#uses = 1, type = i32*]
  %238 = load i32, i32* %lowerbound.i.i.i.i257, align 4 ; [#uses = 4]
  %239 = icmp sgt i32 %238, %237                  ; [#uses = 1]
  %spec.select.i.i.i.i262 = select i1 %239, i32 %238, i32 %237 ; [#uses = 3]
  %240 = icmp eq i32 %spec.select.i.i.i.i262, 2   ; [#uses = 1]
  br i1 %240, label %bounds.ok119, label %bounds.ok.i.i.i36.i273.preheader

assertFailed.i.i.i265:                            ; preds = %bounds.ok108
  call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

bounds.ok.i.i.i36.i273.preheader:                 ; preds = %bounds.ok.i.i.i.i264.preheader
  %241 = icmp slt i32 %238, %237                  ; [#uses = 1]
  %spec.select.i.i.i34.i271 = select i1 %241, i32 %238, i32 %237 ; [#uses = 1]
  %242 = icmp eq i32 %spec.select.i.i.i34.i271, %spec.select.i.i.i.i262 ; [#uses = 1]
  br i1 %242, label %_D6source3mexFAiZi.exit288, label %bounds.ok119

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i267: ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i259
  %243 = icmp eq i32 %237, 2                      ; [#uses = 1]
  br i1 %243, label %bounds.ok119, label %_D6source3mexFAiZi.exit288

_D6source3mexFAiZi.exit288:                       ; preds = %bounds.ok.i.i.i36.i273.preheader, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i267
  %extremeElement.0.lcssa.i.i.i65.i286 = phi i32 [ %237, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i267 ], [ %spec.select.i.i.i.i262, %bounds.ok.i.i.i36.i273.preheader ] ; [#uses = 1, type = i32]
  %244 = icmp eq i32 %extremeElement.0.lcssa.i.i.i65.i286, -1 ; [#uses = 1]
  br i1 %244, label %bounds.ok119, label %forinc43

bounds.ok119:                                     ; preds = %bounds.ok.i.i.i.i264.preheader, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i267, %bounds.ok.i.i.i36.i273.preheader, %_D6source3mexFAiZi.exit288
  store i32 2, i32* %230, align 4
  br label %forinc43

bounds.fail109:                                   ; preds = %if105
  call void @_d_arraybounds_slice({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 65, i64 %214, i64 %234, i64 %.len110) #3
  unreachable

else107:                                          ; preds = %bounds.ok102
  %bounds.cmp123 = icmp ugt i64 %.len45, %234     ; [#uses = 1]
  br i1 %bounds.cmp123, label %bounds.ok124, label %bounds.fail125

bounds.ok124:                                     ; preds = %else107
  %245 = getelementptr inbounds i32, i32* %.ptr49, i64 %234 ; [#uses = 2, type = i32*]
  %246 = load i32, i32* %245, align 4             ; [#uses = 1]
  %247 = icmp eq i32 %246, 1                      ; [#uses = 1]
  br i1 %247, label %if127, label %forinc43

if127:                                            ; preds = %bounds.ok124
  %248 = add nuw i32 %i40.0412, 2                 ; [#uses = 1]
  %249 = sext i32 %248 to i64                     ; [#uses = 3]
  %.len131 = load i64, i64* %.fca.0.gep170, align 8 ; [#uses = 2]
  %bounds.cmp.up132.not = icmp ult i64 %.len131, %249 ; [#uses = 1]
  br i1 %bounds.cmp.up132.not, label %bounds.fail130, label %bounds.ok129

bounds.ok129:                                     ; preds = %if127
  %.ptr134 = load i32*, i32** %.fca.1.gep171, align 8 ; [#uses = 1]
  %lowerbound135 = getelementptr inbounds i32, i32* %.ptr134, i64 %78 ; [#uses = 2, type = i32*]
  %250 = sub nsw i64 %249, %78                    ; [#uses = 2]
  %.not.i.i.i.i289 = icmp eq i64 %250, 0          ; [#uses = 1]
  br i1 %.not.i.i.i.i289, label %assertFailed.i.i.i298, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i292

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i292: ; preds = %bounds.ok129
  %251 = load i32, i32* %lowerbound135, align 4   ; [#uses = 10]
  %lowerbound.i.i.i.i290 = getelementptr inbounds i32, i32* %lowerbound135, i64 1 ; [#uses = 16, type = i32*]
  %252 = add nsw i64 %250, -1                     ; [#uses = 5]
  %.not.i7.i.i.i291 = icmp eq i64 %252, 0         ; [#uses = 1]
  br i1 %.not.i7.i.i.i291, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i300, label %bounds.ok.i.i.i.i297.preheader

bounds.ok.i.i.i.i297.preheader:                   ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i292
  %min.iters.check829 = icmp ult i64 %61, 8       ; [#uses = 1]
  br i1 %min.iters.check829, label %bounds.ok.i.i.i.i297.preheader855, label %vector.ph830

vector.ph830:                                     ; preds = %bounds.ok.i.i.i.i297.preheader
  %n.vec832 = and i64 %61, -8                     ; [#uses = 3]
  %minmax.ident.splatinsert841 = insertelement <4 x i32> undef, i32 %251, i32 0 ; [#uses = 1]
  %minmax.ident.splat842 = shufflevector <4 x i32> %minmax.ident.splatinsert841, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %253 = add i64 %n.vec832, -8                    ; [#uses = 2]
  %254 = lshr exact i64 %253, 3                   ; [#uses = 1]
  %255 = add nuw nsw i64 %254, 1                  ; [#uses = 2]
  %xtraiter = and i64 %255, 1                     ; [#uses = 1]
  %256 = icmp eq i64 %253, 0                      ; [#uses = 1]
  br i1 %256, label %middle.block826.unr-lcssa, label %vector.ph830.new

vector.ph830.new:                                 ; preds = %vector.ph830
  %unroll_iter = and i64 %255, 4611686018427387902 ; [#uses = 1]
  br label %vector.body828

vector.body828:                                   ; preds = %vector.body828, %vector.ph830.new
  %index833 = phi i64 [ 0, %vector.ph830.new ], [ %index.next834.1, %vector.body828 ] ; [#uses = 3, type = i64]
  %vec.phi837 = phi <4 x i32> [ %minmax.ident.splat842, %vector.ph830.new ], [ %271, %vector.body828 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi838 = phi <4 x i32> [ %minmax.ident.splat842, %vector.ph830.new ], [ %272, %vector.body828 ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph830.new ], [ %niter.nsub.1, %vector.body828 ] ; [#uses = 1, type = i64]
  %257 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index833 ; [#uses = 2, type = i32*]
  %258 = bitcast i32* %257 to <4 x i32>*          ; [#uses = 1]
  %wide.load839 = load <4 x i32>, <4 x i32>* %258, align 4 ; [#uses = 2]
  %259 = getelementptr inbounds i32, i32* %257, i64 4 ; [#uses = 1, type = i32*]
  %260 = bitcast i32* %259 to <4 x i32>*          ; [#uses = 1]
  %wide.load840 = load <4 x i32>, <4 x i32>* %260, align 4 ; [#uses = 2]
  %261 = icmp sgt <4 x i32> %wide.load839, %vec.phi837 ; [#uses = 1]
  %262 = icmp sgt <4 x i32> %wide.load840, %vec.phi838 ; [#uses = 1]
  %263 = select <4 x i1> %261, <4 x i32> %wide.load839, <4 x i32> %vec.phi837 ; [#uses = 2]
  %264 = select <4 x i1> %262, <4 x i32> %wide.load840, <4 x i32> %vec.phi838 ; [#uses = 2]
  %index.next834 = or i64 %index833, 8            ; [#uses = 1]
  %265 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index.next834 ; [#uses = 2, type = i32*]
  %266 = bitcast i32* %265 to <4 x i32>*          ; [#uses = 1]
  %wide.load839.1 = load <4 x i32>, <4 x i32>* %266, align 4 ; [#uses = 2]
  %267 = getelementptr inbounds i32, i32* %265, i64 4 ; [#uses = 1, type = i32*]
  %268 = bitcast i32* %267 to <4 x i32>*          ; [#uses = 1]
  %wide.load840.1 = load <4 x i32>, <4 x i32>* %268, align 4 ; [#uses = 2]
  %269 = icmp sgt <4 x i32> %wide.load839.1, %263 ; [#uses = 1]
  %270 = icmp sgt <4 x i32> %wide.load840.1, %264 ; [#uses = 1]
  %271 = select <4 x i1> %269, <4 x i32> %wide.load839.1, <4 x i32> %263 ; [#uses = 3]
  %272 = select <4 x i1> %270, <4 x i32> %wide.load840.1, <4 x i32> %264 ; [#uses = 3]
  %index.next834.1 = add i64 %index833, 16        ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block826.unr-lcssa, label %vector.body828, !llvm.loop !31

middle.block826.unr-lcssa:                        ; preds = %vector.body828, %vector.ph830
  %.lcssa862.ph = phi <4 x i32> [ undef, %vector.ph830 ], [ %271, %vector.body828 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa861.ph = phi <4 x i32> [ undef, %vector.ph830 ], [ %272, %vector.body828 ] ; [#uses = 1, type = <4 x i32>]
  %index833.unr = phi i64 [ 0, %vector.ph830 ], [ %index.next834.1, %vector.body828 ] ; [#uses = 1, type = i64]
  %vec.phi837.unr = phi <4 x i32> [ %minmax.ident.splat842, %vector.ph830 ], [ %271, %vector.body828 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi838.unr = phi <4 x i32> [ %minmax.ident.splat842, %vector.ph830 ], [ %272, %vector.body828 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0        ; [#uses = 1]
  br i1 %lcmp.mod.not, label %middle.block826, label %vector.body828.epil

vector.body828.epil:                              ; preds = %middle.block826.unr-lcssa
  %273 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index833.unr ; [#uses = 2, type = i32*]
  %274 = bitcast i32* %273 to <4 x i32>*          ; [#uses = 1]
  %wide.load839.epil = load <4 x i32>, <4 x i32>* %274, align 4 ; [#uses = 2]
  %275 = getelementptr inbounds i32, i32* %273, i64 4 ; [#uses = 1, type = i32*]
  %276 = bitcast i32* %275 to <4 x i32>*          ; [#uses = 1]
  %wide.load840.epil = load <4 x i32>, <4 x i32>* %276, align 4 ; [#uses = 2]
  %277 = icmp sgt <4 x i32> %wide.load840.epil, %vec.phi838.unr ; [#uses = 1]
  %278 = select <4 x i1> %277, <4 x i32> %wide.load840.epil, <4 x i32> %vec.phi838.unr ; [#uses = 1]
  %279 = icmp sgt <4 x i32> %wide.load839.epil, %vec.phi837.unr ; [#uses = 1]
  %280 = select <4 x i1> %279, <4 x i32> %wide.load839.epil, <4 x i32> %vec.phi837.unr ; [#uses = 1]
  br label %middle.block826

middle.block826:                                  ; preds = %middle.block826.unr-lcssa, %vector.body828.epil
  %.lcssa862 = phi <4 x i32> [ %.lcssa862.ph, %middle.block826.unr-lcssa ], [ %280, %vector.body828.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa861 = phi <4 x i32> [ %.lcssa861.ph, %middle.block826.unr-lcssa ], [ %278, %vector.body828.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp843 = icmp sgt <4 x i32> %.lcssa862, %.lcssa861 ; [#uses = 1]
  %rdx.minmax.select844 = select <4 x i1> %rdx.minmax.cmp843, <4 x i32> %.lcssa862, <4 x i32> %.lcssa861 ; [#uses = 1]
  %281 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select844) ; [#uses = 2]
  %cmp.n836 = icmp eq i64 %61, %n.vec832          ; [#uses = 1]
  br i1 %cmp.n836, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i299, label %bounds.ok.i.i.i.i297.preheader855

bounds.ok.i.i.i.i297.preheader855:                ; preds = %middle.block826, %bounds.ok.i.i.i.i297.preheader
  %__key142.016.i.i.i.i293.ph = phi i64 [ 0, %bounds.ok.i.i.i.i297.preheader ], [ %n.vec832, %middle.block826 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i.i294.ph = phi i32 [ %251, %bounds.ok.i.i.i.i297.preheader ], [ %281, %middle.block826 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i.i297

bounds.ok.i.i.i.i297:                             ; preds = %bounds.ok.i.i.i.i297.preheader855, %bounds.ok.i.i.i.i297
  %__key142.016.i.i.i.i293 = phi i64 [ %285, %bounds.ok.i.i.i.i297 ], [ %__key142.016.i.i.i.i293.ph, %bounds.ok.i.i.i.i297.preheader855 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i.i294 = phi i32 [ %spec.select.i.i.i.i295, %bounds.ok.i.i.i.i297 ], [ %extremeElement.015.i.i.i.i294.ph, %bounds.ok.i.i.i.i297.preheader855 ] ; [#uses = 2, type = i32]
  %282 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %__key142.016.i.i.i.i293 ; [#uses = 1, type = i32*]
  %283 = load i32, i32* %282, align 4             ; [#uses = 2]
  %284 = icmp sgt i32 %283, %extremeElement.015.i.i.i.i294 ; [#uses = 1]
  %spec.select.i.i.i.i295 = select i1 %284, i32 %283, i32 %extremeElement.015.i.i.i.i294 ; [#uses = 2]
  %285 = add nuw i64 %__key142.016.i.i.i.i293, 1  ; [#uses = 2]
  %exitcond.not.i.i.i.i296 = icmp eq i64 %285, %252 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i.i296, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i299, label %bounds.ok.i.i.i.i297, !llvm.loop !32

assertFailed.i.i.i298:                            ; preds = %bounds.ok129
  call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i299: ; preds = %bounds.ok.i.i.i.i297, %middle.block826
  %spec.select.i.i.i.i295.lcssa = phi i32 [ %281, %middle.block826 ], [ %spec.select.i.i.i.i295, %bounds.ok.i.i.i.i297 ] ; [#uses = 1, type = i32]
  %286 = icmp eq i32 %spec.select.i.i.i.i295.lcssa, 2 ; [#uses = 1]
  br i1 %286, label %bounds.ok140, label %bounds.ok.i.i.i36.i306.preheader

bounds.ok.i.i.i36.i306.preheader:                 ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i299
  %min.iters.check809 = icmp ult i64 %65, 8       ; [#uses = 1]
  br i1 %min.iters.check809, label %bounds.ok.i.i.i36.i306.preheader854, label %vector.ph810

bounds.ok.i.i.i36.i306.preheader854:              ; preds = %middle.block806, %bounds.ok.i.i.i36.i306.preheader
  %__key144.016.i.i.i.i302.ph = phi i64 [ 0, %bounds.ok.i.i.i36.i306.preheader ], [ %n.vec812, %middle.block806 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i33.i303.ph = phi i32 [ %251, %bounds.ok.i.i.i36.i306.preheader ], [ %315, %middle.block806 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i36.i306

vector.ph810:                                     ; preds = %bounds.ok.i.i.i36.i306.preheader
  %n.vec812 = and i64 %65, -8                     ; [#uses = 3]
  %minmax.ident.splatinsert821 = insertelement <4 x i32> undef, i32 %251, i32 0 ; [#uses = 1]
  %minmax.ident.splat822 = shufflevector <4 x i32> %minmax.ident.splatinsert821, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %287 = add i64 %n.vec812, -8                    ; [#uses = 2]
  %288 = lshr exact i64 %287, 3                   ; [#uses = 1]
  %289 = add nuw nsw i64 %288, 1                  ; [#uses = 2]
  %xtraiter967 = and i64 %289, 1                  ; [#uses = 1]
  %290 = icmp eq i64 %287, 0                      ; [#uses = 1]
  br i1 %290, label %middle.block806.unr-lcssa, label %vector.ph810.new

vector.ph810.new:                                 ; preds = %vector.ph810
  %unroll_iter969 = and i64 %289, 4611686018427387902 ; [#uses = 1]
  br label %vector.body808

vector.body808:                                   ; preds = %vector.body808, %vector.ph810.new
  %index813 = phi i64 [ 0, %vector.ph810.new ], [ %index.next814.1, %vector.body808 ] ; [#uses = 3, type = i64]
  %vec.phi817 = phi <4 x i32> [ %minmax.ident.splat822, %vector.ph810.new ], [ %305, %vector.body808 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi818 = phi <4 x i32> [ %minmax.ident.splat822, %vector.ph810.new ], [ %306, %vector.body808 ] ; [#uses = 2, type = <4 x i32>]
  %niter970 = phi i64 [ %unroll_iter969, %vector.ph810.new ], [ %niter970.nsub.1, %vector.body808 ] ; [#uses = 1, type = i64]
  %291 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index813 ; [#uses = 2, type = i32*]
  %292 = bitcast i32* %291 to <4 x i32>*          ; [#uses = 1]
  %wide.load819 = load <4 x i32>, <4 x i32>* %292, align 4 ; [#uses = 2]
  %293 = getelementptr inbounds i32, i32* %291, i64 4 ; [#uses = 1, type = i32*]
  %294 = bitcast i32* %293 to <4 x i32>*          ; [#uses = 1]
  %wide.load820 = load <4 x i32>, <4 x i32>* %294, align 4 ; [#uses = 2]
  %295 = icmp slt <4 x i32> %wide.load819, %vec.phi817 ; [#uses = 1]
  %296 = icmp slt <4 x i32> %wide.load820, %vec.phi818 ; [#uses = 1]
  %297 = select <4 x i1> %295, <4 x i32> %wide.load819, <4 x i32> %vec.phi817 ; [#uses = 2]
  %298 = select <4 x i1> %296, <4 x i32> %wide.load820, <4 x i32> %vec.phi818 ; [#uses = 2]
  %index.next814 = or i64 %index813, 8            ; [#uses = 1]
  %299 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index.next814 ; [#uses = 2, type = i32*]
  %300 = bitcast i32* %299 to <4 x i32>*          ; [#uses = 1]
  %wide.load819.1 = load <4 x i32>, <4 x i32>* %300, align 4 ; [#uses = 2]
  %301 = getelementptr inbounds i32, i32* %299, i64 4 ; [#uses = 1, type = i32*]
  %302 = bitcast i32* %301 to <4 x i32>*          ; [#uses = 1]
  %wide.load820.1 = load <4 x i32>, <4 x i32>* %302, align 4 ; [#uses = 2]
  %303 = icmp slt <4 x i32> %wide.load819.1, %297 ; [#uses = 1]
  %304 = icmp slt <4 x i32> %wide.load820.1, %298 ; [#uses = 1]
  %305 = select <4 x i1> %303, <4 x i32> %wide.load819.1, <4 x i32> %297 ; [#uses = 3]
  %306 = select <4 x i1> %304, <4 x i32> %wide.load820.1, <4 x i32> %298 ; [#uses = 3]
  %index.next814.1 = add i64 %index813, 16        ; [#uses = 2]
  %niter970.nsub.1 = add i64 %niter970, -2        ; [#uses = 2]
  %niter970.ncmp.1 = icmp eq i64 %niter970.nsub.1, 0 ; [#uses = 1]
  br i1 %niter970.ncmp.1, label %middle.block806.unr-lcssa, label %vector.body808, !llvm.loop !33

middle.block806.unr-lcssa:                        ; preds = %vector.body808, %vector.ph810
  %.lcssa865.ph = phi <4 x i32> [ undef, %vector.ph810 ], [ %305, %vector.body808 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa864.ph = phi <4 x i32> [ undef, %vector.ph810 ], [ %306, %vector.body808 ] ; [#uses = 1, type = <4 x i32>]
  %index813.unr = phi i64 [ 0, %vector.ph810 ], [ %index.next814.1, %vector.body808 ] ; [#uses = 1, type = i64]
  %vec.phi817.unr = phi <4 x i32> [ %minmax.ident.splat822, %vector.ph810 ], [ %305, %vector.body808 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi818.unr = phi <4 x i32> [ %minmax.ident.splat822, %vector.ph810 ], [ %306, %vector.body808 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod968.not = icmp eq i64 %xtraiter967, 0  ; [#uses = 1]
  br i1 %lcmp.mod968.not, label %middle.block806, label %vector.body808.epil

vector.body808.epil:                              ; preds = %middle.block806.unr-lcssa
  %307 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index813.unr ; [#uses = 2, type = i32*]
  %308 = bitcast i32* %307 to <4 x i32>*          ; [#uses = 1]
  %wide.load819.epil = load <4 x i32>, <4 x i32>* %308, align 4 ; [#uses = 2]
  %309 = getelementptr inbounds i32, i32* %307, i64 4 ; [#uses = 1, type = i32*]
  %310 = bitcast i32* %309 to <4 x i32>*          ; [#uses = 1]
  %wide.load820.epil = load <4 x i32>, <4 x i32>* %310, align 4 ; [#uses = 2]
  %311 = icmp slt <4 x i32> %wide.load820.epil, %vec.phi818.unr ; [#uses = 1]
  %312 = select <4 x i1> %311, <4 x i32> %wide.load820.epil, <4 x i32> %vec.phi818.unr ; [#uses = 1]
  %313 = icmp slt <4 x i32> %wide.load819.epil, %vec.phi817.unr ; [#uses = 1]
  %314 = select <4 x i1> %313, <4 x i32> %wide.load819.epil, <4 x i32> %vec.phi817.unr ; [#uses = 1]
  br label %middle.block806

middle.block806:                                  ; preds = %middle.block806.unr-lcssa, %vector.body808.epil
  %.lcssa865 = phi <4 x i32> [ %.lcssa865.ph, %middle.block806.unr-lcssa ], [ %314, %vector.body808.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa864 = phi <4 x i32> [ %.lcssa864.ph, %middle.block806.unr-lcssa ], [ %312, %vector.body808.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp823 = icmp slt <4 x i32> %.lcssa865, %.lcssa864 ; [#uses = 1]
  %rdx.minmax.select824 = select <4 x i1> %rdx.minmax.cmp823, <4 x i32> %.lcssa865, <4 x i32> %.lcssa864 ; [#uses = 1]
  %315 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select824) ; [#uses = 2]
  %cmp.n816 = icmp eq i64 %65, %n.vec812          ; [#uses = 1]
  br i1 %cmp.n816, label %bounds.ok.i.i.i49.i312.preheader, label %bounds.ok.i.i.i36.i306.preheader854

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i300: ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit.i.i.i292
  %316 = icmp eq i32 %251, 2                      ; [#uses = 1]
  br i1 %316, label %bounds.ok140, label %_D6source3mexFAiZi.exit321

bounds.ok.i.i.i36.i306:                           ; preds = %bounds.ok.i.i.i36.i306.preheader854, %bounds.ok.i.i.i36.i306
  %__key144.016.i.i.i.i302 = phi i64 [ %320, %bounds.ok.i.i.i36.i306 ], [ %__key144.016.i.i.i.i302.ph, %bounds.ok.i.i.i36.i306.preheader854 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i33.i303 = phi i32 [ %spec.select.i.i.i34.i304, %bounds.ok.i.i.i36.i306 ], [ %extremeElement.015.i.i.i33.i303.ph, %bounds.ok.i.i.i36.i306.preheader854 ] ; [#uses = 2, type = i32]
  %317 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %__key144.016.i.i.i.i302 ; [#uses = 1, type = i32*]
  %318 = load i32, i32* %317, align 4             ; [#uses = 2]
  %319 = icmp slt i32 %318, %extremeElement.015.i.i.i33.i303 ; [#uses = 1]
  %spec.select.i.i.i34.i304 = select i1 %319, i32 %318, i32 %extremeElement.015.i.i.i33.i303 ; [#uses = 2]
  %320 = add nuw i64 %__key144.016.i.i.i.i302, 1  ; [#uses = 2]
  %exitcond.not.i.i.i35.i305 = icmp eq i64 %320, %252 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i35.i305, label %bounds.ok.i.i.i49.i312.preheader, label %bounds.ok.i.i.i36.i306, !llvm.loop !34

bounds.ok.i.i.i49.i312.preheader:                 ; preds = %bounds.ok.i.i.i36.i306, %middle.block806
  %spec.select.i.i.i34.i304.lcssa = phi i32 [ %315, %middle.block806 ], [ %spec.select.i.i.i34.i304, %bounds.ok.i.i.i36.i306 ] ; [#uses = 1, type = i32]
  %min.iters.check789 = icmp ult i64 %69, 8       ; [#uses = 1]
  br i1 %min.iters.check789, label %bounds.ok.i.i.i49.i312.preheader853, label %vector.ph790

vector.ph790:                                     ; preds = %bounds.ok.i.i.i49.i312.preheader
  %n.vec792 = and i64 %69, -8                     ; [#uses = 3]
  %minmax.ident.splatinsert801 = insertelement <4 x i32> undef, i32 %251, i32 0 ; [#uses = 1]
  %minmax.ident.splat802 = shufflevector <4 x i32> %minmax.ident.splatinsert801, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %321 = add i64 %n.vec792, -8                    ; [#uses = 2]
  %322 = lshr exact i64 %321, 3                   ; [#uses = 1]
  %323 = add nuw nsw i64 %322, 1                  ; [#uses = 2]
  %xtraiter971 = and i64 %323, 1                  ; [#uses = 1]
  %324 = icmp eq i64 %321, 0                      ; [#uses = 1]
  br i1 %324, label %middle.block786.unr-lcssa, label %vector.ph790.new

vector.ph790.new:                                 ; preds = %vector.ph790
  %unroll_iter973 = and i64 %323, 4611686018427387902 ; [#uses = 1]
  br label %vector.body788

vector.body788:                                   ; preds = %vector.body788, %vector.ph790.new
  %index793 = phi i64 [ 0, %vector.ph790.new ], [ %index.next794.1, %vector.body788 ] ; [#uses = 3, type = i64]
  %vec.phi797 = phi <4 x i32> [ %minmax.ident.splat802, %vector.ph790.new ], [ %339, %vector.body788 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi798 = phi <4 x i32> [ %minmax.ident.splat802, %vector.ph790.new ], [ %340, %vector.body788 ] ; [#uses = 2, type = <4 x i32>]
  %niter974 = phi i64 [ %unroll_iter973, %vector.ph790.new ], [ %niter974.nsub.1, %vector.body788 ] ; [#uses = 1, type = i64]
  %325 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index793 ; [#uses = 2, type = i32*]
  %326 = bitcast i32* %325 to <4 x i32>*          ; [#uses = 1]
  %wide.load799 = load <4 x i32>, <4 x i32>* %326, align 4 ; [#uses = 2]
  %327 = getelementptr inbounds i32, i32* %325, i64 4 ; [#uses = 1, type = i32*]
  %328 = bitcast i32* %327 to <4 x i32>*          ; [#uses = 1]
  %wide.load800 = load <4 x i32>, <4 x i32>* %328, align 4 ; [#uses = 2]
  %329 = icmp sgt <4 x i32> %wide.load799, %vec.phi797 ; [#uses = 1]
  %330 = icmp sgt <4 x i32> %wide.load800, %vec.phi798 ; [#uses = 1]
  %331 = select <4 x i1> %329, <4 x i32> %wide.load799, <4 x i32> %vec.phi797 ; [#uses = 2]
  %332 = select <4 x i1> %330, <4 x i32> %wide.load800, <4 x i32> %vec.phi798 ; [#uses = 2]
  %index.next794 = or i64 %index793, 8            ; [#uses = 1]
  %333 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index.next794 ; [#uses = 2, type = i32*]
  %334 = bitcast i32* %333 to <4 x i32>*          ; [#uses = 1]
  %wide.load799.1 = load <4 x i32>, <4 x i32>* %334, align 4 ; [#uses = 2]
  %335 = getelementptr inbounds i32, i32* %333, i64 4 ; [#uses = 1, type = i32*]
  %336 = bitcast i32* %335 to <4 x i32>*          ; [#uses = 1]
  %wide.load800.1 = load <4 x i32>, <4 x i32>* %336, align 4 ; [#uses = 2]
  %337 = icmp sgt <4 x i32> %wide.load799.1, %331 ; [#uses = 1]
  %338 = icmp sgt <4 x i32> %wide.load800.1, %332 ; [#uses = 1]
  %339 = select <4 x i1> %337, <4 x i32> %wide.load799.1, <4 x i32> %331 ; [#uses = 3]
  %340 = select <4 x i1> %338, <4 x i32> %wide.load800.1, <4 x i32> %332 ; [#uses = 3]
  %index.next794.1 = add i64 %index793, 16        ; [#uses = 2]
  %niter974.nsub.1 = add i64 %niter974, -2        ; [#uses = 2]
  %niter974.ncmp.1 = icmp eq i64 %niter974.nsub.1, 0 ; [#uses = 1]
  br i1 %niter974.ncmp.1, label %middle.block786.unr-lcssa, label %vector.body788, !llvm.loop !35

middle.block786.unr-lcssa:                        ; preds = %vector.body788, %vector.ph790
  %.lcssa868.ph = phi <4 x i32> [ undef, %vector.ph790 ], [ %339, %vector.body788 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa867.ph = phi <4 x i32> [ undef, %vector.ph790 ], [ %340, %vector.body788 ] ; [#uses = 1, type = <4 x i32>]
  %index793.unr = phi i64 [ 0, %vector.ph790 ], [ %index.next794.1, %vector.body788 ] ; [#uses = 1, type = i64]
  %vec.phi797.unr = phi <4 x i32> [ %minmax.ident.splat802, %vector.ph790 ], [ %339, %vector.body788 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi798.unr = phi <4 x i32> [ %minmax.ident.splat802, %vector.ph790 ], [ %340, %vector.body788 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod972.not = icmp eq i64 %xtraiter971, 0  ; [#uses = 1]
  br i1 %lcmp.mod972.not, label %middle.block786, label %vector.body788.epil

vector.body788.epil:                              ; preds = %middle.block786.unr-lcssa
  %341 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index793.unr ; [#uses = 2, type = i32*]
  %342 = bitcast i32* %341 to <4 x i32>*          ; [#uses = 1]
  %wide.load799.epil = load <4 x i32>, <4 x i32>* %342, align 4 ; [#uses = 2]
  %343 = getelementptr inbounds i32, i32* %341, i64 4 ; [#uses = 1, type = i32*]
  %344 = bitcast i32* %343 to <4 x i32>*          ; [#uses = 1]
  %wide.load800.epil = load <4 x i32>, <4 x i32>* %344, align 4 ; [#uses = 2]
  %345 = icmp sgt <4 x i32> %wide.load800.epil, %vec.phi798.unr ; [#uses = 1]
  %346 = select <4 x i1> %345, <4 x i32> %wide.load800.epil, <4 x i32> %vec.phi798.unr ; [#uses = 1]
  %347 = icmp sgt <4 x i32> %wide.load799.epil, %vec.phi797.unr ; [#uses = 1]
  %348 = select <4 x i1> %347, <4 x i32> %wide.load799.epil, <4 x i32> %vec.phi797.unr ; [#uses = 1]
  br label %middle.block786

middle.block786:                                  ; preds = %middle.block786.unr-lcssa, %vector.body788.epil
  %.lcssa868 = phi <4 x i32> [ %.lcssa868.ph, %middle.block786.unr-lcssa ], [ %348, %vector.body788.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa867 = phi <4 x i32> [ %.lcssa867.ph, %middle.block786.unr-lcssa ], [ %346, %vector.body788.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp803 = icmp sgt <4 x i32> %.lcssa868, %.lcssa867 ; [#uses = 1]
  %rdx.minmax.select804 = select <4 x i1> %rdx.minmax.cmp803, <4 x i32> %.lcssa868, <4 x i32> %.lcssa867 ; [#uses = 1]
  %349 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select804) ; [#uses = 2]
  %cmp.n796 = icmp eq i64 %69, %n.vec792          ; [#uses = 1]
  br i1 %cmp.n796, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i313, label %bounds.ok.i.i.i49.i312.preheader853

bounds.ok.i.i.i49.i312.preheader853:              ; preds = %middle.block786, %bounds.ok.i.i.i49.i312.preheader
  %__key142.016.i.i.i45.i308.ph = phi i64 [ 0, %bounds.ok.i.i.i49.i312.preheader ], [ %n.vec792, %middle.block786 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i46.i309.ph = phi i32 [ %251, %bounds.ok.i.i.i49.i312.preheader ], [ %349, %middle.block786 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i49.i312

bounds.ok.i.i.i49.i312:                           ; preds = %bounds.ok.i.i.i49.i312.preheader853, %bounds.ok.i.i.i49.i312
  %__key142.016.i.i.i45.i308 = phi i64 [ %353, %bounds.ok.i.i.i49.i312 ], [ %__key142.016.i.i.i45.i308.ph, %bounds.ok.i.i.i49.i312.preheader853 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i46.i309 = phi i32 [ %spec.select.i.i.i47.i310, %bounds.ok.i.i.i49.i312 ], [ %extremeElement.015.i.i.i46.i309.ph, %bounds.ok.i.i.i49.i312.preheader853 ] ; [#uses = 2, type = i32]
  %350 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %__key142.016.i.i.i45.i308 ; [#uses = 1, type = i32*]
  %351 = load i32, i32* %350, align 4             ; [#uses = 2]
  %352 = icmp sgt i32 %351, %extremeElement.015.i.i.i46.i309 ; [#uses = 1]
  %spec.select.i.i.i47.i310 = select i1 %352, i32 %351, i32 %extremeElement.015.i.i.i46.i309 ; [#uses = 2]
  %353 = add nuw i64 %__key142.016.i.i.i45.i308, 1 ; [#uses = 2]
  %exitcond.not.i.i.i48.i311 = icmp eq i64 %353, %252 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i48.i311, label %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i313, label %bounds.ok.i.i.i49.i312, !llvm.loop !36

_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i313: ; preds = %bounds.ok.i.i.i49.i312, %middle.block786
  %spec.select.i.i.i47.i310.lcssa = phi i32 [ %349, %middle.block786 ], [ %spec.select.i.i.i47.i310, %bounds.ok.i.i.i49.i312 ] ; [#uses = 1, type = i32]
  %354 = icmp eq i32 %spec.select.i.i.i34.i304.lcssa, %spec.select.i.i.i47.i310.lcssa ; [#uses = 1]
  br i1 %354, label %bounds.ok.i.i.i63.i318.preheader, label %bounds.ok140

bounds.ok.i.i.i63.i318.preheader:                 ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i313
  %min.iters.check769 = icmp ult i64 %73, 8       ; [#uses = 1]
  br i1 %min.iters.check769, label %bounds.ok.i.i.i63.i318.preheader852, label %vector.ph770

vector.ph770:                                     ; preds = %bounds.ok.i.i.i63.i318.preheader
  %n.vec772 = and i64 %73, -8                     ; [#uses = 3]
  %minmax.ident.splatinsert781 = insertelement <4 x i32> undef, i32 %251, i32 0 ; [#uses = 1]
  %minmax.ident.splat782 = shufflevector <4 x i32> %minmax.ident.splatinsert781, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %355 = add i64 %n.vec772, -8                    ; [#uses = 2]
  %356 = lshr exact i64 %355, 3                   ; [#uses = 1]
  %357 = add nuw nsw i64 %356, 1                  ; [#uses = 2]
  %xtraiter975 = and i64 %357, 1                  ; [#uses = 1]
  %358 = icmp eq i64 %355, 0                      ; [#uses = 1]
  br i1 %358, label %middle.block766.unr-lcssa, label %vector.ph770.new

vector.ph770.new:                                 ; preds = %vector.ph770
  %unroll_iter977 = and i64 %357, 4611686018427387902 ; [#uses = 1]
  br label %vector.body768

vector.body768:                                   ; preds = %vector.body768, %vector.ph770.new
  %index773 = phi i64 [ 0, %vector.ph770.new ], [ %index.next774.1, %vector.body768 ] ; [#uses = 3, type = i64]
  %vec.phi777 = phi <4 x i32> [ %minmax.ident.splat782, %vector.ph770.new ], [ %373, %vector.body768 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi778 = phi <4 x i32> [ %minmax.ident.splat782, %vector.ph770.new ], [ %374, %vector.body768 ] ; [#uses = 2, type = <4 x i32>]
  %niter978 = phi i64 [ %unroll_iter977, %vector.ph770.new ], [ %niter978.nsub.1, %vector.body768 ] ; [#uses = 1, type = i64]
  %359 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index773 ; [#uses = 2, type = i32*]
  %360 = bitcast i32* %359 to <4 x i32>*          ; [#uses = 1]
  %wide.load779 = load <4 x i32>, <4 x i32>* %360, align 4 ; [#uses = 2]
  %361 = getelementptr inbounds i32, i32* %359, i64 4 ; [#uses = 1, type = i32*]
  %362 = bitcast i32* %361 to <4 x i32>*          ; [#uses = 1]
  %wide.load780 = load <4 x i32>, <4 x i32>* %362, align 4 ; [#uses = 2]
  %363 = icmp slt <4 x i32> %wide.load779, %vec.phi777 ; [#uses = 1]
  %364 = icmp slt <4 x i32> %wide.load780, %vec.phi778 ; [#uses = 1]
  %365 = select <4 x i1> %363, <4 x i32> %wide.load779, <4 x i32> %vec.phi777 ; [#uses = 2]
  %366 = select <4 x i1> %364, <4 x i32> %wide.load780, <4 x i32> %vec.phi778 ; [#uses = 2]
  %index.next774 = or i64 %index773, 8            ; [#uses = 1]
  %367 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index.next774 ; [#uses = 2, type = i32*]
  %368 = bitcast i32* %367 to <4 x i32>*          ; [#uses = 1]
  %wide.load779.1 = load <4 x i32>, <4 x i32>* %368, align 4 ; [#uses = 2]
  %369 = getelementptr inbounds i32, i32* %367, i64 4 ; [#uses = 1, type = i32*]
  %370 = bitcast i32* %369 to <4 x i32>*          ; [#uses = 1]
  %wide.load780.1 = load <4 x i32>, <4 x i32>* %370, align 4 ; [#uses = 2]
  %371 = icmp slt <4 x i32> %wide.load779.1, %365 ; [#uses = 1]
  %372 = icmp slt <4 x i32> %wide.load780.1, %366 ; [#uses = 1]
  %373 = select <4 x i1> %371, <4 x i32> %wide.load779.1, <4 x i32> %365 ; [#uses = 3]
  %374 = select <4 x i1> %372, <4 x i32> %wide.load780.1, <4 x i32> %366 ; [#uses = 3]
  %index.next774.1 = add i64 %index773, 16        ; [#uses = 2]
  %niter978.nsub.1 = add i64 %niter978, -2        ; [#uses = 2]
  %niter978.ncmp.1 = icmp eq i64 %niter978.nsub.1, 0 ; [#uses = 1]
  br i1 %niter978.ncmp.1, label %middle.block766.unr-lcssa, label %vector.body768, !llvm.loop !37

middle.block766.unr-lcssa:                        ; preds = %vector.body768, %vector.ph770
  %.lcssa871.ph = phi <4 x i32> [ undef, %vector.ph770 ], [ %373, %vector.body768 ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa870.ph = phi <4 x i32> [ undef, %vector.ph770 ], [ %374, %vector.body768 ] ; [#uses = 1, type = <4 x i32>]
  %index773.unr = phi i64 [ 0, %vector.ph770 ], [ %index.next774.1, %vector.body768 ] ; [#uses = 1, type = i64]
  %vec.phi777.unr = phi <4 x i32> [ %minmax.ident.splat782, %vector.ph770 ], [ %373, %vector.body768 ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi778.unr = phi <4 x i32> [ %minmax.ident.splat782, %vector.ph770 ], [ %374, %vector.body768 ] ; [#uses = 2, type = <4 x i32>]
  %lcmp.mod976.not = icmp eq i64 %xtraiter975, 0  ; [#uses = 1]
  br i1 %lcmp.mod976.not, label %middle.block766, label %vector.body768.epil

vector.body768.epil:                              ; preds = %middle.block766.unr-lcssa
  %375 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %index773.unr ; [#uses = 2, type = i32*]
  %376 = bitcast i32* %375 to <4 x i32>*          ; [#uses = 1]
  %wide.load779.epil = load <4 x i32>, <4 x i32>* %376, align 4 ; [#uses = 2]
  %377 = getelementptr inbounds i32, i32* %375, i64 4 ; [#uses = 1, type = i32*]
  %378 = bitcast i32* %377 to <4 x i32>*          ; [#uses = 1]
  %wide.load780.epil = load <4 x i32>, <4 x i32>* %378, align 4 ; [#uses = 2]
  %379 = icmp slt <4 x i32> %wide.load780.epil, %vec.phi778.unr ; [#uses = 1]
  %380 = select <4 x i1> %379, <4 x i32> %wide.load780.epil, <4 x i32> %vec.phi778.unr ; [#uses = 1]
  %381 = icmp slt <4 x i32> %wide.load779.epil, %vec.phi777.unr ; [#uses = 1]
  %382 = select <4 x i1> %381, <4 x i32> %wide.load779.epil, <4 x i32> %vec.phi777.unr ; [#uses = 1]
  br label %middle.block766

middle.block766:                                  ; preds = %middle.block766.unr-lcssa, %vector.body768.epil
  %.lcssa871 = phi <4 x i32> [ %.lcssa871.ph, %middle.block766.unr-lcssa ], [ %382, %vector.body768.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa870 = phi <4 x i32> [ %.lcssa870.ph, %middle.block766.unr-lcssa ], [ %380, %vector.body768.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp783 = icmp slt <4 x i32> %.lcssa871, %.lcssa870 ; [#uses = 1]
  %rdx.minmax.select784 = select <4 x i1> %rdx.minmax.cmp783, <4 x i32> %.lcssa871, <4 x i32> %.lcssa870 ; [#uses = 1]
  %383 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select784) ; [#uses = 2]
  %cmp.n776 = icmp eq i64 %73, %n.vec772          ; [#uses = 1]
  br i1 %cmp.n776, label %_D6source3mexFAiZi.exit321, label %bounds.ok.i.i.i63.i318.preheader852

bounds.ok.i.i.i63.i318.preheader852:              ; preds = %middle.block766, %bounds.ok.i.i.i63.i318.preheader
  %__key144.016.i.i.i59.i314.ph = phi i64 [ 0, %bounds.ok.i.i.i63.i318.preheader ], [ %n.vec772, %middle.block766 ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.i.i60.i315.ph = phi i32 [ %251, %bounds.ok.i.i.i63.i318.preheader ], [ %383, %middle.block766 ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i.i.i63.i318

bounds.ok.i.i.i63.i318:                           ; preds = %bounds.ok.i.i.i63.i318.preheader852, %bounds.ok.i.i.i63.i318
  %__key144.016.i.i.i59.i314 = phi i64 [ %387, %bounds.ok.i.i.i63.i318 ], [ %__key144.016.i.i.i59.i314.ph, %bounds.ok.i.i.i63.i318.preheader852 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i.i.i60.i315 = phi i32 [ %spec.select.i.i.i61.i316, %bounds.ok.i.i.i63.i318 ], [ %extremeElement.015.i.i.i60.i315.ph, %bounds.ok.i.i.i63.i318.preheader852 ] ; [#uses = 2, type = i32]
  %384 = getelementptr inbounds i32, i32* %lowerbound.i.i.i.i290, i64 %__key144.016.i.i.i59.i314 ; [#uses = 1, type = i32*]
  %385 = load i32, i32* %384, align 4             ; [#uses = 2]
  %386 = icmp slt i32 %385, %extremeElement.015.i.i.i60.i315 ; [#uses = 1]
  %spec.select.i.i.i61.i316 = select i1 %386, i32 %385, i32 %extremeElement.015.i.i.i60.i315 ; [#uses = 2]
  %387 = add nuw i64 %__key144.016.i.i.i59.i314, 1 ; [#uses = 2]
  %exitcond.not.i.i.i62.i317 = icmp eq i64 %387, %252 ; [#uses = 1]
  br i1 %exitcond.not.i.i.i62.i317, label %_D6source3mexFAiZi.exit321, label %bounds.ok.i.i.i63.i318, !llvm.loop !38

_D6source3mexFAiZi.exit321:                       ; preds = %bounds.ok.i.i.i63.i318, %middle.block766, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i300
  %extremeElement.0.lcssa.i.i.i65.i319 = phi i32 [ %251, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i300 ], [ %383, %middle.block766 ], [ %spec.select.i.i.i61.i316, %bounds.ok.i.i.i63.i318 ] ; [#uses = 1, type = i32]
  %388 = icmp eq i32 %extremeElement.0.lcssa.i.i.i65.i319, -1 ; [#uses = 1]
  br i1 %388, label %bounds.ok140, label %forinc43

bounds.ok140:                                     ; preds = %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.i299, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit.thread.i300, %_D3std9algorithm9searching__T10maxElementSQBoQBnQBg11__lambda170TAiZQBnFNaNbNiNfQpZi.exit52.i313, %_D6source3mexFAiZi.exit321
  store i32 2, i32* %245, align 4
  br label %forinc43

bounds.fail130:                                   ; preds = %if127
  call void @_d_arraybounds_slice({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 70, i64 %78, i64 %249, i64 %.len131) #3
  unreachable

bounds.fail125:                                   ; preds = %else107
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 68, i64 %234, i64 %.len45) #3
  unreachable

bounds.fail103:                                   ; preds = %else78
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 63, i64 %214, i64 %.len45) #3
  unreachable

bounds.fail48:                                    ; preds = %forbody42
  call void @_d_arraybounds_index({ i64, i8* } { i64 60, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.1, i32 0, i32 0) }, i32 43, i64 %78, i64 %.len45) #3
  unreachable

forinc43:                                         ; preds = %bounds.ok47, %_D6source3mexFAiZi.exit255, %bounds.ok97, %bounds.ok81, %bounds.ok124, %bounds.ok140, %_D6source3mexFAiZi.exit321, %_D6source3mexFAiZi.exit288, %bounds.ok119, %bounds.ok57, %bounds.ok73, %_D6source3mexFAiZi.exit222
  %389 = add nuw i32 %i40.0412, 1                 ; [#uses = 2]
  %390 = load i32, i32* %str_l, align 4           ; [#uses = 2]
  %391 = icmp slt i32 %389, %390                  ; [#uses = 1]
  %indvar.next = add i64 %indvar, 1               ; [#uses = 1]
  br i1 %391, label %forbody42, label %endfor44

endfor44:                                         ; preds = %forinc43, %endfor6.thread, %endfor6, %forcond41.preheader
  %.fca.0.load = load i64, i64* %.fca.0.gep, align 8 ; [#uses = 5]
  %.fca.1.load = load i32*, i32** %.fca.1.gep, align 8 ; [#uses = 6]
  %.not.i.i.i.i.i = icmp eq i64 %.fca.0.load, 0   ; [#uses = 1]
  br i1 %.not.i.i.i.i.i, label %_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit, label %forbody.i.i.i.i.i.preheader

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

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

vector.ph.new:                                    ; preds = %vector.ph
  %unroll_iter999 = and i64 %394, 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 ], [ %418, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi688 = phi <4 x i32> [ zeroinitializer, %vector.ph.new ], [ %419, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %niter1000 = phi i64 [ %unroll_iter999, %vector.ph.new ], [ %niter1000.nsub.3, %vector.body ] ; [#uses = 1, type = i64]
  %396 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %index ; [#uses = 2, type = i32*]
  %397 = bitcast i32* %396 to <4 x i32>*          ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %397, align 4 ; [#uses = 1]
  %398 = getelementptr inbounds i32, i32* %396, i64 4 ; [#uses = 1, type = i32*]
  %399 = bitcast i32* %398 to <4 x i32>*          ; [#uses = 1]
  %wide.load689 = load <4 x i32>, <4 x i32>* %399, align 4 ; [#uses = 1]
  %400 = add <4 x i32> %wide.load, %vec.phi       ; [#uses = 1]
  %401 = add <4 x i32> %wide.load689, %vec.phi688 ; [#uses = 1]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %402 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %index.next ; [#uses = 2, type = i32*]
  %403 = bitcast i32* %402 to <4 x i32>*          ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %403, align 4 ; [#uses = 1]
  %404 = getelementptr inbounds i32, i32* %402, i64 4 ; [#uses = 1, type = i32*]
  %405 = bitcast i32* %404 to <4 x i32>*          ; [#uses = 1]
  %wide.load689.1 = load <4 x i32>, <4 x i32>* %405, align 4 ; [#uses = 1]
  %406 = add <4 x i32> %wide.load.1, %400         ; [#uses = 1]
  %407 = add <4 x i32> %wide.load689.1, %401      ; [#uses = 1]
  %index.next.1 = or i64 %index, 16               ; [#uses = 1]
  %408 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %index.next.1 ; [#uses = 2, type = i32*]
  %409 = bitcast i32* %408 to <4 x i32>*          ; [#uses = 1]
  %wide.load.2 = load <4 x i32>, <4 x i32>* %409, align 4 ; [#uses = 1]
  %410 = getelementptr inbounds i32, i32* %408, i64 4 ; [#uses = 1, type = i32*]
  %411 = bitcast i32* %410 to <4 x i32>*          ; [#uses = 1]
  %wide.load689.2 = load <4 x i32>, <4 x i32>* %411, align 4 ; [#uses = 1]
  %412 = add <4 x i32> %wide.load.2, %406         ; [#uses = 1]
  %413 = add <4 x i32> %wide.load689.2, %407      ; [#uses = 1]
  %index.next.2 = or i64 %index, 24               ; [#uses = 1]
  %414 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %index.next.2 ; [#uses = 2, type = i32*]
  %415 = bitcast i32* %414 to <4 x i32>*          ; [#uses = 1]
  %wide.load.3 = load <4 x i32>, <4 x i32>* %415, align 4 ; [#uses = 1]
  %416 = getelementptr inbounds i32, i32* %414, i64 4 ; [#uses = 1, type = i32*]
  %417 = bitcast i32* %416 to <4 x i32>*          ; [#uses = 1]
  %wide.load689.3 = load <4 x i32>, <4 x i32>* %417, align 4 ; [#uses = 1]
  %418 = add <4 x i32> %wide.load.3, %412         ; [#uses = 3]
  %419 = add <4 x i32> %wide.load689.3, %413      ; [#uses = 3]
  %index.next.3 = add i64 %index, 32              ; [#uses = 2]
  %niter1000.nsub.3 = add i64 %niter1000, -4      ; [#uses = 2]
  %niter1000.ncmp.3 = icmp eq i64 %niter1000.nsub.3, 0 ; [#uses = 1]
  br i1 %niter1000.ncmp.3, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !39

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa931.ph = phi <4 x i32> [ undef, %vector.ph ], [ %418, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa930.ph = phi <4 x i32> [ undef, %vector.ph ], [ %419, %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 ], [ %418, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi688.unr = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %419, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %lcmp.mod996.not = icmp eq i64 %xtraiter995, 0  ; [#uses = 1]
  br i1 %lcmp.mod996.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> [ %424, %vector.body.epil ], [ %vec.phi.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %vec.phi688.epil = phi <4 x i32> [ %425, %vector.body.epil ], [ %vec.phi688.unr, %middle.block.unr-lcssa ] ; [#uses = 1, type = <4 x i32>]
  %epil.iter = phi i64 [ %epil.iter.sub, %vector.body.epil ], [ %xtraiter995, %middle.block.unr-lcssa ] ; [#uses = 1, type = i64]
  %420 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %index.epil ; [#uses = 2, type = i32*]
  %421 = bitcast i32* %420 to <4 x i32>*          ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %421, align 4 ; [#uses = 1]
  %422 = getelementptr inbounds i32, i32* %420, i64 4 ; [#uses = 1, type = i32*]
  %423 = bitcast i32* %422 to <4 x i32>*          ; [#uses = 1]
  %wide.load689.epil = load <4 x i32>, <4 x i32>* %423, align 4 ; [#uses = 1]
  %424 = add <4 x i32> %wide.load.epil, %vec.phi.epil ; [#uses = 2]
  %425 = add <4 x i32> %wide.load689.epil, %vec.phi688.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 !40

middle.block:                                     ; preds = %vector.body.epil, %middle.block.unr-lcssa
  %.lcssa931 = phi <4 x i32> [ %.lcssa931.ph, %middle.block.unr-lcssa ], [ %424, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa930 = phi <4 x i32> [ %.lcssa930.ph, %middle.block.unr-lcssa ], [ %425, %vector.body.epil ] ; [#uses = 1, type = <4 x i32>]
  %bin.rdx = add <4 x i32> %.lcssa930, %.lcssa931 ; [#uses = 1]
  %426 = call i32 @llvm.experimental.vector.reduce.add.v4i32(<4 x i32> %bin.rdx) ; [#uses = 2]
  %cmp.n = icmp eq i64 %.fca.0.load, %n.vec       ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit, label %forbody.i.i.i.i.i.preheader856

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

forbody.i.i.i.i.i:                                ; preds = %forbody.i.i.i.i.i.preheader856, %forbody.i.i.i.i.i
  %427 = phi i32 [ %430, %forbody.i.i.i.i.i ], [ %.ph, %forbody.i.i.i.i.i.preheader856 ] ; [#uses = 1, type = i32]
  %__key184.07.i.i.i.i.i = phi i64 [ %431, %forbody.i.i.i.i.i ], [ %__key184.07.i.i.i.i.i.ph, %forbody.i.i.i.i.i.preheader856 ] ; [#uses = 2, type = i64]
  %428 = getelementptr inbounds i32, i32* %.fca.1.load, i64 %__key184.07.i.i.i.i.i ; [#uses = 1, type = i32*]
  %429 = load i32, i32* %428, align 4             ; [#uses = 1]
  %430 = add i32 %429, %427                       ; [#uses = 2]
  %431 = add nuw i64 %__key184.07.i.i.i.i.i, 1    ; [#uses = 2]
  %exitcond.not.i.i.i.i.i = icmp eq i64 %431, %.fca.0.load ; [#uses = 1]
  br i1 %exitcond.not.i.i.i.i.i, label %_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit, label %forbody.i.i.i.i.i, !llvm.loop !42

_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit: ; preds = %forbody.i.i.i.i.i, %middle.block, %endfor44
  %432 = phi i32 [ 0, %endfor44 ], [ %426, %middle.block ], [ %430, %forbody.i.i.i.i.i ] ; [#uses = 1, type = i32]
  call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %8)
  call void @_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File(%std.stdio.File* noalias nonnull sret align 8 %__tmpfordtor197.i) #5
  invoke void @_D3std5stdio4File__T5writeTiTaZQlMFNfiaZv(%std.stdio.File* nonnull %__tmpfordtor197.i, i8 zeroext 10, i32 %432) #5
          to label %_D3std5stdio__T7writelnTiZQlFNfiZv.exit unwind label %eh.resume.i

eh.resume.i:                                      ; preds = %_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit
  %433 = landingpad { i8*, i32 }
          cleanup                                 ; [#uses = 1]
  %434 = extractvalue { i8*, i32 } %433, 0        ; [#uses = 1]
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor197.i) #5
  call void @_Unwind_Resume(i8* %434)
  unreachable

_D3std5stdio__T7writelnTiZQlFNfiZv.exit:          ; preds = %_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi.exit
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor197.i) #5
  call void @llvm.lifetime.end.p0i8(i64 24, i8* nonnull %8)
  %435 = add nuw nsw i32 %__key146.0414, 1        ; [#uses = 2]
  %exitcond517.not = icmp eq i32 %435, %4         ; [#uses = 1]
  br i1 %exitcond517.not, label %endfor, label %forbody

endfor:                                           ; preds = %_D3std5stdio__T7writelnTiZQlFNfiZv.exit, %0
  ret i32 0
}

; [#uses = 2]
; Function Attrs: nofree nounwind
declare i32 @scanf(i8* nocapture readonly, ...) local_unnamed_addr #2

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std6string__T5stripTAyaZQlFNaNbNiNfQpZQs({ i64, i8* } %str_arg) local_unnamed_addr #0 {
  %1 = tail call { i64, i8* } @_D3std6string__T9stripLeftTAyaZQpFNaNbNiNfQpZQs({ i64, i8* } %str_arg) #5 ; [#uses = 1]
  %2 = tail call { i64, i8* } @_D3std6string__T10stripRightTAyaZQrFNaNbNiNfQpZQs({ i64, i8* } %1) #5 ; [#uses = 1]
  ret { i64, i8* } %2
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std5stdio__T6readlnTAyaZQmFwZQj(i32 %terminator_arg) local_unnamed_addr #0 {
  %buf.i = alloca { i64, i8* }, align 8           ; [#uses = 4, size/byte = 16]
  %1 = tail call %std.stdio.File* @_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea21_636f72652e737464632e737464696f2e737464696eZQDeFNbNcNdNiZSQEfQEe4File() #5 ; [#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.7, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.8, 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) #5 ; [#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) #5 ; [#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 = 24]
; Function Attrs: cold noreturn uwtable
declare void @_d_arraybounds_index({ i64, i8* }, i32, i64, i64) local_unnamed_addr #3

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

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

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

toElem.success:                                   ; preds = %0
  call void @_D3std5stdio4File6__dtorMFNfZv(%std.stdio.File* nonnull %__tmpfordtor197) #5
  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 %__tmpfordtor197) #5
  call void @_Unwind_Resume(i8* %2)
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9iteration__T3sumTAiZQiFNaNbNiNfQoZi({ i64, i32* } %r_arg) local_unnamed_addr #0 {
  %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 !43

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 !44

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]
  %__key184.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]
  %__key184.07.i.i.i.i = phi i64 [ %40, %forbody.i.i.i.i ], [ %__key184.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 %__key184.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 %__key184.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 !45

_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 = 1]
declare i32 @_d_run_main(i32, i8**, i8*) local_unnamed_addr #5

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std5range10primitives__T5emptyTAiZQkFNaNbNdNiNfMKQsZb({ i64, i32* }* dereferenceable(16) %a) local_unnamed_addr #0 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %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 = 0]
; Function Attrs: uwtable
define weak_odr i32* @_D3std5range10primitives__T5frontTiZQjFNaNbNcNdNiNfMNkANgiZNgi({ i64, i32* } %a_arg) local_unnamed_addr #0 {
  %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.2, i32 0, i32 0) }, { i64, i8* } { i64 62, i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.3, i32 0, i32 0) }, i32 2472) #3
  unreachable
}

; [#uses = 11]
; 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 void @_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv({ i64, i32* }* dereferenceable(16) %a) local_unnamed_addr #0 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %a, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 2]
  %.not = icmp eq i64 %.len, 0                    ; [#uses = 1]
  br i1 %.not, label %assertFailed, label %bounds.ok

bounds.ok:                                        ; preds = %0
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %a, i64 0, i32 1 ; [#uses = 2, type = i32**]
  %.ptr = load i32*, i32** %2, align 8            ; [#uses = 1]
  %lowerbound = getelementptr inbounds i32, i32* %.ptr, i64 1 ; [#uses = 1, type = i32*]
  %3 = add i64 %.len, -1                          ; [#uses = 1]
  store i64 %3, i64* %1, align 8
  store i32* %lowerbound, i32** %2, align 8
  ret void

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiZQCbFNaNbNiNfQpZi({ i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 2]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %.not.i = icmp eq i64 %r_arg.fca.0.extract, 0   ; [#uses = 1]
  br i1 %.not.i, label %assertFailed, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit: ; preds = %0
  %1 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 3]
  %lowerbound.i = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 4, type = i32*]
  %2 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 5]
  %.not.i7 = icmp eq i64 %2, 0                    ; [#uses = 1]
  br i1 %.not.i7, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i.preheader

bounds.ok.i.preheader:                            ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit
  %min.iters.check = icmp ult i64 %2, 8           ; [#uses = 1]
  br i1 %min.iters.check, label %bounds.ok.i.preheader19, label %vector.ph

vector.ph:                                        ; preds = %bounds.ok.i.preheader
  %n.vec = and i64 %2, -8                         ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %3 = add i64 %n.vec, -8                         ; [#uses = 2]
  %4 = lshr exact i64 %3, 3                       ; [#uses = 1]
  %5 = add nuw nsw i64 %4, 1                      ; [#uses = 2]
  %xtraiter = and i64 %5, 1                       ; [#uses = 1]
  %6 = icmp eq i64 %3, 0                          ; [#uses = 1]
  br i1 %6, label %middle.block.unr-lcssa, label %vector.ph.new

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

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.1, %vector.body ] ; [#uses = 3, type = i64]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %22, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.1, %vector.body ] ; [#uses = 1, type = i64]
  %7 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index ; [#uses = 2, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 2]
  %9 = getelementptr inbounds i32, i32* %7, i64 4 ; [#uses = 1, type = i32*]
  %10 = bitcast i32* %9 to <4 x i32>*             ; [#uses = 1]
  %wide.load18 = load <4 x i32>, <4 x i32>* %10, align 4 ; [#uses = 2]
  %11 = icmp sgt <4 x i32> %wide.load, %vec.phi   ; [#uses = 1]
  %12 = icmp sgt <4 x i32> %wide.load18, %vec.phi17 ; [#uses = 1]
  %13 = select <4 x i1> %11, <4 x i32> %wide.load, <4 x i32> %vec.phi ; [#uses = 2]
  %14 = select <4 x i1> %12, <4 x i32> %wide.load18, <4 x i32> %vec.phi17 ; [#uses = 2]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %15 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index.next ; [#uses = 2, type = i32*]
  %16 = bitcast i32* %15 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %16, align 4 ; [#uses = 2]
  %17 = getelementptr inbounds i32, i32* %15, i64 4 ; [#uses = 1, type = i32*]
  %18 = bitcast i32* %17 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.1 = load <4 x i32>, <4 x i32>* %18, align 4 ; [#uses = 2]
  %19 = icmp sgt <4 x i32> %wide.load.1, %13      ; [#uses = 1]
  %20 = icmp sgt <4 x i32> %wide.load18.1, %14    ; [#uses = 1]
  %21 = select <4 x i1> %19, <4 x i32> %wide.load.1, <4 x i32> %13 ; [#uses = 3]
  %22 = select <4 x i1> %20, <4 x i32> %wide.load18.1, <4 x i32> %14 ; [#uses = 3]
  %index.next.1 = add i64 %index, 16              ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !46

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa20.ph = phi <4 x i32> [ undef, %vector.ph ], [ %21, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %22, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %22, %vector.body ] ; [#uses = 2, 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
  %23 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index.unr ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.epil = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 2]
  %27 = icmp sgt <4 x i32> %wide.load18.epil, %vec.phi17.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load18.epil, <4 x i32> %vec.phi17.unr ; [#uses = 1]
  %29 = icmp sgt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %30 = select <4 x i1> %29, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa20 = phi <4 x i32> [ %.lcssa20.ph, %middle.block.unr-lcssa ], [ %30, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp sgt <4 x i32> %.lcssa20, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa20, <4 x i32> %.lcssa ; [#uses = 1]
  %31 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %2, %n.vec                 ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i.preheader19

bounds.ok.i.preheader19:                          ; preds = %middle.block, %bounds.ok.i.preheader
  %__key142.016.i.ph = phi i64 [ 0, %bounds.ok.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.ph = phi i32 [ %1, %bounds.ok.i.preheader ], [ %31, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i

bounds.ok.i:                                      ; preds = %bounds.ok.i.preheader19, %bounds.ok.i
  %__key142.016.i = phi i64 [ %35, %bounds.ok.i ], [ %__key142.016.i.ph, %bounds.ok.i.preheader19 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i = phi i32 [ %spec.select.i, %bounds.ok.i ], [ %extremeElement.015.i.ph, %bounds.ok.i.preheader19 ] ; [#uses = 2, type = i32]
  %32 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %__key142.016.i ; [#uses = 1, type = i32*]
  %33 = load i32, i32* %32, align 4               ; [#uses = 2]
  %34 = icmp sgt i32 %33, %extremeElement.015.i   ; [#uses = 1]
  %spec.select.i = select i1 %34, i32 %33, i32 %extremeElement.015.i ; [#uses = 2]
  %35 = add nuw i64 %__key142.016.i, 1            ; [#uses = 2]
  %exitcond.not.i = icmp eq i64 %35, %2           ; [#uses = 1]
  br i1 %exitcond.not.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i, !llvm.loop !47

_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiTiZQCdFNaNbNiNfQriZi.exit: ; preds = %bounds.ok.i, %middle.block, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit
  %extremeElement.0.lcssa.i = phi i32 [ %1, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit ], [ %31, %middle.block ], [ %spec.select.i, %bounds.ok.i ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa.i

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda170VAyaa5_61203e2062TAiTiZQCdFNaNbNiNfQriZi(i32 %seedElement_arg, { i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 5]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 4]
  %.not = icmp eq i64 %r_arg.fca.0.extract, 0     ; [#uses = 1]
  br i1 %.not, label %endfor, label %bounds.ok.preheader

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

vector.ph:                                        ; preds = %bounds.ok.preheader
  %n.vec = and i64 %r_arg.fca.0.extract, -8       ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %seedElement_arg, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %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, 1                       ; [#uses = 1]
  %4 = icmp eq i64 %1, 0                          ; [#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, 4611686018427387902  ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.1, %vector.body ] ; [#uses = 3, type = i64]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %19, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %20, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.1, %vector.body ] ; [#uses = 1, type = i64]
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, 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 = 2]
  %7 = getelementptr inbounds i32, i32* %5, i64 4 ; [#uses = 1, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load18 = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 2]
  %9 = icmp sgt <4 x i32> %wide.load, %vec.phi    ; [#uses = 1]
  %10 = icmp sgt <4 x i32> %wide.load18, %vec.phi17 ; [#uses = 1]
  %11 = select <4 x i1> %9, <4 x i32> %wide.load, <4 x i32> %vec.phi ; [#uses = 2]
  %12 = select <4 x i1> %10, <4 x i32> %wide.load18, <4 x i32> %vec.phi17 ; [#uses = 2]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %13 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %index.next ; [#uses = 2, type = i32*]
  %14 = bitcast i32* %13 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %14, align 4 ; [#uses = 2]
  %15 = getelementptr inbounds i32, i32* %13, i64 4 ; [#uses = 1, type = i32*]
  %16 = bitcast i32* %15 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.1 = load <4 x i32>, <4 x i32>* %16, align 4 ; [#uses = 2]
  %17 = icmp sgt <4 x i32> %wide.load.1, %11      ; [#uses = 1]
  %18 = icmp sgt <4 x i32> %wide.load18.1, %12    ; [#uses = 1]
  %19 = select <4 x i1> %17, <4 x i32> %wide.load.1, <4 x i32> %11 ; [#uses = 3]
  %20 = select <4 x i1> %18, <4 x i32> %wide.load18.1, <4 x i32> %12 ; [#uses = 3]
  %index.next.1 = add i64 %index, 16              ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !48

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa20.ph = phi <4 x i32> [ undef, %vector.ph ], [ %19, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %20, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %19, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %20, %vector.body ] ; [#uses = 2, 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
  %21 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %index.unr ; [#uses = 2, type = i32*]
  %22 = bitcast i32* %21 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %22, align 4 ; [#uses = 2]
  %23 = getelementptr inbounds i32, i32* %21, i64 4 ; [#uses = 1, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = icmp sgt <4 x i32> %wide.load18.epil, %vec.phi17.unr ; [#uses = 1]
  %26 = select <4 x i1> %25, <4 x i32> %wide.load18.epil, <4 x i32> %vec.phi17.unr ; [#uses = 1]
  %27 = icmp sgt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa20 = phi <4 x i32> [ %.lcssa20.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %26, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp sgt <4 x i32> %.lcssa20, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa20, <4 x i32> %.lcssa ; [#uses = 1]
  %29 = call i32 @llvm.experimental.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %r_arg.fca.0.extract, %n.vec ; [#uses = 1]
  br i1 %cmp.n, label %endfor, label %bounds.ok.preheader19

bounds.ok.preheader19:                            ; preds = %middle.block, %bounds.ok.preheader
  %__key142.016.ph = phi i64 [ 0, %bounds.ok.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.ph = phi i32 [ %seedElement_arg, %bounds.ok.preheader ], [ %29, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok

bounds.ok:                                        ; preds = %bounds.ok.preheader19, %bounds.ok
  %__key142.016 = phi i64 [ %33, %bounds.ok ], [ %__key142.016.ph, %bounds.ok.preheader19 ] ; [#uses = 2, type = i64]
  %extremeElement.015 = phi i32 [ %spec.select, %bounds.ok ], [ %extremeElement.015.ph, %bounds.ok.preheader19 ] ; [#uses = 2, type = i32]
  %30 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key142.016 ; [#uses = 1, type = i32*]
  %31 = load i32, i32* %30, align 4               ; [#uses = 2]
  %32 = icmp sgt i32 %31, %extremeElement.015     ; [#uses = 1]
  %spec.select = select i1 %32, i32 %31, i32 %extremeElement.015 ; [#uses = 2]
  %33 = add nuw i64 %__key142.016, 1              ; [#uses = 2]
  %exitcond.not = icmp eq i64 %33, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %endfor, label %bounds.ok, !llvm.loop !49

endfor:                                           ; preds = %bounds.ok, %middle.block, %0
  %extremeElement.0.lcssa = phi i32 [ %seedElement_arg, %0 ], [ %29, %middle.block ], [ %spec.select, %bounds.ok ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiZQCbFNaNbNiNfQpZi({ i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 2]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %.not.i = icmp eq i64 %r_arg.fca.0.extract, 0   ; [#uses = 1]
  br i1 %.not.i, label %assertFailed, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit: ; preds = %0
  %1 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 3]
  %lowerbound.i = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 4, type = i32*]
  %2 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 5]
  %.not.i7 = icmp eq i64 %2, 0                    ; [#uses = 1]
  br i1 %.not.i7, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i.preheader

bounds.ok.i.preheader:                            ; preds = %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit
  %min.iters.check = icmp ult i64 %2, 8           ; [#uses = 1]
  br i1 %min.iters.check, label %bounds.ok.i.preheader19, label %vector.ph

vector.ph:                                        ; preds = %bounds.ok.i.preheader
  %n.vec = and i64 %2, -8                         ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %1, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %3 = add i64 %n.vec, -8                         ; [#uses = 2]
  %4 = lshr exact i64 %3, 3                       ; [#uses = 1]
  %5 = add nuw nsw i64 %4, 1                      ; [#uses = 2]
  %xtraiter = and i64 %5, 1                       ; [#uses = 1]
  %6 = icmp eq i64 %3, 0                          ; [#uses = 1]
  br i1 %6, label %middle.block.unr-lcssa, label %vector.ph.new

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

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.1, %vector.body ] ; [#uses = 3, type = i64]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %22, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.1, %vector.body ] ; [#uses = 1, type = i64]
  %7 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index ; [#uses = 2, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 2]
  %9 = getelementptr inbounds i32, i32* %7, i64 4 ; [#uses = 1, type = i32*]
  %10 = bitcast i32* %9 to <4 x i32>*             ; [#uses = 1]
  %wide.load18 = load <4 x i32>, <4 x i32>* %10, align 4 ; [#uses = 2]
  %11 = icmp slt <4 x i32> %wide.load, %vec.phi   ; [#uses = 1]
  %12 = icmp slt <4 x i32> %wide.load18, %vec.phi17 ; [#uses = 1]
  %13 = select <4 x i1> %11, <4 x i32> %wide.load, <4 x i32> %vec.phi ; [#uses = 2]
  %14 = select <4 x i1> %12, <4 x i32> %wide.load18, <4 x i32> %vec.phi17 ; [#uses = 2]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %15 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index.next ; [#uses = 2, type = i32*]
  %16 = bitcast i32* %15 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %16, align 4 ; [#uses = 2]
  %17 = getelementptr inbounds i32, i32* %15, i64 4 ; [#uses = 1, type = i32*]
  %18 = bitcast i32* %17 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.1 = load <4 x i32>, <4 x i32>* %18, align 4 ; [#uses = 2]
  %19 = icmp slt <4 x i32> %wide.load.1, %13      ; [#uses = 1]
  %20 = icmp slt <4 x i32> %wide.load18.1, %14    ; [#uses = 1]
  %21 = select <4 x i1> %19, <4 x i32> %wide.load.1, <4 x i32> %13 ; [#uses = 3]
  %22 = select <4 x i1> %20, <4 x i32> %wide.load18.1, <4 x i32> %14 ; [#uses = 3]
  %index.next.1 = add i64 %index, 16              ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !50

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa20.ph = phi <4 x i32> [ undef, %vector.ph ], [ %21, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %22, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %21, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %22, %vector.body ] ; [#uses = 2, 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
  %23 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %index.unr ; [#uses = 2, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %23, i64 4 ; [#uses = 1, type = i32*]
  %26 = bitcast i32* %25 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.epil = load <4 x i32>, <4 x i32>* %26, align 4 ; [#uses = 2]
  %27 = icmp slt <4 x i32> %wide.load18.epil, %vec.phi17.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load18.epil, <4 x i32> %vec.phi17.unr ; [#uses = 1]
  %29 = icmp slt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %30 = select <4 x i1> %29, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa20 = phi <4 x i32> [ %.lcssa20.ph, %middle.block.unr-lcssa ], [ %30, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp slt <4 x i32> %.lcssa20, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa20, <4 x i32> %.lcssa ; [#uses = 1]
  %31 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %2, %n.vec                 ; [#uses = 1]
  br i1 %cmp.n, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i.preheader19

bounds.ok.i.preheader19:                          ; preds = %middle.block, %bounds.ok.i.preheader
  %__key144.016.i.ph = phi i64 [ 0, %bounds.ok.i.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.i.ph = phi i32 [ %1, %bounds.ok.i.preheader ], [ %31, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok.i

bounds.ok.i:                                      ; preds = %bounds.ok.i.preheader19, %bounds.ok.i
  %__key144.016.i = phi i64 [ %35, %bounds.ok.i ], [ %__key144.016.i.ph, %bounds.ok.i.preheader19 ] ; [#uses = 2, type = i64]
  %extremeElement.015.i = phi i32 [ %spec.select.i, %bounds.ok.i ], [ %extremeElement.015.i.ph, %bounds.ok.i.preheader19 ] ; [#uses = 2, type = i32]
  %32 = getelementptr inbounds i32, i32* %lowerbound.i, i64 %__key144.016.i ; [#uses = 1, type = i32*]
  %33 = load i32, i32* %32, align 4               ; [#uses = 2]
  %34 = icmp slt i32 %33, %extremeElement.015.i   ; [#uses = 1]
  %spec.select.i = select i1 %34, i32 %33, i32 %extremeElement.015.i ; [#uses = 2]
  %35 = add nuw i64 %__key144.016.i, 1            ; [#uses = 2]
  %exitcond.not.i = icmp eq i64 %35, %2           ; [#uses = 1]
  br i1 %exitcond.not.i, label %_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiTiZQCdFNaNbNiNfQriZi.exit, label %bounds.ok.i, !llvm.loop !51

_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiTiZQCdFNaNbNiNfQriZi.exit: ; preds = %bounds.ok.i, %middle.block, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit
  %extremeElement.0.lcssa.i = phi i32 [ %1, %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit ], [ %31, %middle.block ], [ %spec.select.i, %bounds.ok.i ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa.i

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 19, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i32 0, i32 0) }, { i64, i8* } { i64 65, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.6, i32 0, i32 0) }, i32 1319) #3
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std9algorithm9searching__T8extremumSQBlQBkQBd11__lambda171VAyaa5_61203c2062TAiTiZQCdFNaNbNiNfQriZi(i32 %seedElement_arg, { i64, i32* } %r_arg) local_unnamed_addr #0 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 5]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 4]
  %.not = icmp eq i64 %r_arg.fca.0.extract, 0     ; [#uses = 1]
  br i1 %.not, label %endfor, label %bounds.ok.preheader

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

vector.ph:                                        ; preds = %bounds.ok.preheader
  %n.vec = and i64 %r_arg.fca.0.extract, -8       ; [#uses = 3]
  %minmax.ident.splatinsert = insertelement <4 x i32> undef, i32 %seedElement_arg, i32 0 ; [#uses = 1]
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer ; [#uses = 4]
  %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, 1                       ; [#uses = 1]
  %4 = icmp eq i64 %1, 0                          ; [#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, 4611686018427387902  ; [#uses = 1]
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph.new
  %index = phi i64 [ 0, %vector.ph.new ], [ %index.next.1, %vector.body ] ; [#uses = 3, type = i64]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %19, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph.new ], [ %20, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %niter = phi i64 [ %unroll_iter, %vector.ph.new ], [ %niter.nsub.1, %vector.body ] ; [#uses = 1, type = i64]
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, 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 = 2]
  %7 = getelementptr inbounds i32, i32* %5, i64 4 ; [#uses = 1, type = i32*]
  %8 = bitcast i32* %7 to <4 x i32>*              ; [#uses = 1]
  %wide.load18 = load <4 x i32>, <4 x i32>* %8, align 4 ; [#uses = 2]
  %9 = icmp slt <4 x i32> %wide.load, %vec.phi    ; [#uses = 1]
  %10 = icmp slt <4 x i32> %wide.load18, %vec.phi17 ; [#uses = 1]
  %11 = select <4 x i1> %9, <4 x i32> %wide.load, <4 x i32> %vec.phi ; [#uses = 2]
  %12 = select <4 x i1> %10, <4 x i32> %wide.load18, <4 x i32> %vec.phi17 ; [#uses = 2]
  %index.next = or i64 %index, 8                  ; [#uses = 1]
  %13 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %index.next ; [#uses = 2, type = i32*]
  %14 = bitcast i32* %13 to <4 x i32>*            ; [#uses = 1]
  %wide.load.1 = load <4 x i32>, <4 x i32>* %14, align 4 ; [#uses = 2]
  %15 = getelementptr inbounds i32, i32* %13, i64 4 ; [#uses = 1, type = i32*]
  %16 = bitcast i32* %15 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.1 = load <4 x i32>, <4 x i32>* %16, align 4 ; [#uses = 2]
  %17 = icmp slt <4 x i32> %wide.load.1, %11      ; [#uses = 1]
  %18 = icmp slt <4 x i32> %wide.load18.1, %12    ; [#uses = 1]
  %19 = select <4 x i1> %17, <4 x i32> %wide.load.1, <4 x i32> %11 ; [#uses = 3]
  %20 = select <4 x i1> %18, <4 x i32> %wide.load18.1, <4 x i32> %12 ; [#uses = 3]
  %index.next.1 = add i64 %index, 16              ; [#uses = 2]
  %niter.nsub.1 = add i64 %niter, -2              ; [#uses = 2]
  %niter.ncmp.1 = icmp eq i64 %niter.nsub.1, 0    ; [#uses = 1]
  br i1 %niter.ncmp.1, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !52

middle.block.unr-lcssa:                           ; preds = %vector.body, %vector.ph
  %.lcssa20.ph = phi <4 x i32> [ undef, %vector.ph ], [ %19, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %.lcssa.ph = phi <4 x i32> [ undef, %vector.ph ], [ %20, %vector.body ] ; [#uses = 1, type = <4 x i32>]
  %index.unr = phi i64 [ 0, %vector.ph ], [ %index.next.1, %vector.body ] ; [#uses = 1, type = i64]
  %vec.phi.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %19, %vector.body ] ; [#uses = 2, type = <4 x i32>]
  %vec.phi17.unr = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %20, %vector.body ] ; [#uses = 2, 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
  %21 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %index.unr ; [#uses = 2, type = i32*]
  %22 = bitcast i32* %21 to <4 x i32>*            ; [#uses = 1]
  %wide.load.epil = load <4 x i32>, <4 x i32>* %22, align 4 ; [#uses = 2]
  %23 = getelementptr inbounds i32, i32* %21, i64 4 ; [#uses = 1, type = i32*]
  %24 = bitcast i32* %23 to <4 x i32>*            ; [#uses = 1]
  %wide.load18.epil = load <4 x i32>, <4 x i32>* %24, align 4 ; [#uses = 2]
  %25 = icmp slt <4 x i32> %wide.load18.epil, %vec.phi17.unr ; [#uses = 1]
  %26 = select <4 x i1> %25, <4 x i32> %wide.load18.epil, <4 x i32> %vec.phi17.unr ; [#uses = 1]
  %27 = icmp slt <4 x i32> %wide.load.epil, %vec.phi.unr ; [#uses = 1]
  %28 = select <4 x i1> %27, <4 x i32> %wide.load.epil, <4 x i32> %vec.phi.unr ; [#uses = 1]
  br label %middle.block

middle.block:                                     ; preds = %middle.block.unr-lcssa, %vector.body.epil
  %.lcssa20 = phi <4 x i32> [ %.lcssa20.ph, %middle.block.unr-lcssa ], [ %28, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %.lcssa = phi <4 x i32> [ %.lcssa.ph, %middle.block.unr-lcssa ], [ %26, %vector.body.epil ] ; [#uses = 2, type = <4 x i32>]
  %rdx.minmax.cmp = icmp slt <4 x i32> %.lcssa20, %.lcssa ; [#uses = 1]
  %rdx.minmax.select = select <4 x i1> %rdx.minmax.cmp, <4 x i32> %.lcssa20, <4 x i32> %.lcssa ; [#uses = 1]
  %29 = call i32 @llvm.experimental.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select) ; [#uses = 2]
  %cmp.n = icmp eq i64 %r_arg.fca.0.extract, %n.vec ; [#uses = 1]
  br i1 %cmp.n, label %endfor, label %bounds.ok.preheader19

bounds.ok.preheader19:                            ; preds = %middle.block, %bounds.ok.preheader
  %__key144.016.ph = phi i64 [ 0, %bounds.ok.preheader ], [ %n.vec, %middle.block ] ; [#uses = 1, type = i64]
  %extremeElement.015.ph = phi i32 [ %seedElement_arg, %bounds.ok.preheader ], [ %29, %middle.block ] ; [#uses = 1, type = i32]
  br label %bounds.ok

bounds.ok:                                        ; preds = %bounds.ok.preheader19, %bounds.ok
  %__key144.016 = phi i64 [ %33, %bounds.ok ], [ %__key144.016.ph, %bounds.ok.preheader19 ] ; [#uses = 2, type = i64]
  %extremeElement.015 = phi i32 [ %spec.select, %bounds.ok ], [ %extremeElement.015.ph, %bounds.ok.preheader19 ] ; [#uses = 2, type = i32]
  %30 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key144.016 ; [#uses = 1, type = i32*]
  %31 = load i32, i32* %30, align 4               ; [#uses = 2]
  %32 = icmp slt i32 %31, %extremeElement.015     ; [#uses = 1]
  %spec.select = select i1 %32, i32 %31, i32 %extremeElement.015 ; [#uses = 2]
  %33 = add nuw i64 %__key144.016, 1              ; [#uses = 2]
  %exitcond.not = icmp eq i64 %33, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %endfor, label %bounds.ok, !llvm.loop !53

endfor:                                           ; preds = %bounds.ok, %middle.block, %0
  %extremeElement.0.lcssa = phi i32 [ %seedElement_arg, %0 ], [ %29, %middle.block ], [ %spec.select, %bounds.ok ] ; [#uses = 1, type = i32]
  ret i32 %extremeElement.0.lcssa
}

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

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

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std5stdio4File__T6readlnTAyaZQmMFwZQk(%std.stdio.File* nonnull %.this_arg, i32 %terminator_arg) local_unnamed_addr #0 {
  %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.7, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.8, 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) #5 ; [#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) #5 ; [#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 #0 {
  %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.7, i32 0, i32 0) }, i64 2083, { i64, i8* } { i64 51, i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.8, 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) #5 ; [#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) #5 ; [#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 #0 {
  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 #5

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

; [#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 #6 {
  %.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) #4 ; [#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) #5 ; [#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) #5
  %.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.9, 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) #5 ; [#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 #4

; [#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 #5

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T4idupTxaZQjFNaNbNdNfAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #0 {
  %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) #5 ; [#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) #5
  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 #0 {
  %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) #5 ; [#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) #5
  ret { i64, i8* } %1
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D6object__T8_dupCtfeTxaTyaZQqFNaNbNfMAxaZAya({ i64, i8* } %a_arg) local_unnamed_addr #0 {
  %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
  %__key163.015 = phi i64 [ %4, %forbody ], [ 0, %0 ] ; [#uses = 2, type = i64]
  %2 = getelementptr inbounds i8, i8* %a_arg.fca.1.extract, i64 %__key163.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) #4 ; [#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 %__key163.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 = 3]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std6string__T10stripRightTAyaZQrFNaNbNiNfQpZQs({ i64, i8* } %str_arg) local_unnamed_addr #0 {
  %str_arg.fca.0.extract = extractvalue { i64, i8* } %str_arg, 0 ; [#uses = 5]
  %str_arg.fca.1.extract = extractvalue { i64, i8* } %str_arg, 1 ; [#uses = 7]
  br label %forcond

forcond:                                          ; preds = %endif, %0
  %__key172.0 = phi i64 [ %str_arg.fca.0.extract, %0 ], [ %1, %endif ] ; [#uses = 16, type = i64]
  %1 = add i64 %__key172.0, -1                    ; [#uses = 2]
  %.not = icmp eq i64 %__key172.0, 0              ; [#uses = 1]
  br i1 %.not, label %endfor, label %forbody

forbody:                                          ; preds = %forcond
  %2 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %1 ; [#uses = 1, type = i8*]
  %3 = load i8, i8* %2, align 1                   ; [#uses = 2]
  %4 = icmp slt i8 %3, 0                          ; [#uses = 1]
  br i1 %4, label %if, label %endif

if:                                               ; preds = %forbody
  %bounds.cmp.up.not = icmp ugt i64 %__key172.0, %str_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp.up.not, label %bounds.fail, label %forbody19

bounds.fail:                                      ; preds = %if
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3295, i64 0, i64 %__key172.0, i64 %str_arg.fca.0.extract) #3
  unreachable

endif:                                            ; preds = %forbody
  %5 = zext i8 %3 to i32                          ; [#uses = 1]
  %6 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %5) #5 ; [#uses = 1]
  br i1 %6, label %forcond, label %if5

if5:                                              ; preds = %endif
  %bounds.cmp.up10.not = icmp ugt i64 %__key172.0, %str_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp.up10.not, label %bounds.fail8, label %bounds.ok7

bounds.ok7:                                       ; preds = %if5
  %7 = insertvalue { i64, i8* } undef, i64 %__key172.0, 0 ; [#uses = 1]
  %8 = insertvalue { i64, i8* } %7, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %8

bounds.fail8:                                     ; preds = %if5
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3300, i64 0, i64 %__key172.0, i64 %str_arg.fca.0.extract) #3
  unreachable

endfor:                                           ; preds = %forcond
  %9 = insertvalue { i64, i8* } { i64 0, i8* undef }, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %9

forbody19:                                        ; preds = %if, %forinc20
  %.in = phi i64 [ %i16.1, %forinc20 ], [ %__key172.0, %if ] ; [#uses = 6, type = i64]
  %10 = add i64 %.in, -1                          ; [#uses = 6]
  %bounds.cmp = icmp ult i64 %10, %__key172.0     ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok23, label %bounds.fail24

bounds.ok23:                                      ; preds = %forbody19
  %11 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %10 ; [#uses = 1, type = i8*]
  %12 = load i8, i8* %11, align 1                 ; [#uses = 2]
  %13 = zext i8 %12 to i32                        ; [#uses = 3]
  %14 = icmp sgt i8 %12, -1                       ; [#uses = 1]
  br i1 %14, label %if26, label %else

if26:                                             ; preds = %bounds.ok23
  %15 = tail call zeroext i1 @_D3std3uni7isWhiteFNaNbNiNfwZb(i32 %13) #5 ; [#uses = 1]
  br i1 %15, label %forinc20, label %endfor21

else:                                             ; preds = %bounds.ok23
  %16 = icmp eq i64 %10, 0                        ; [#uses = 1]
  %17 = and i32 %13, 192                          ; [#uses = 1]
  %18 = icmp ne i32 %17, 128                      ; [#uses = 1]
  %ororval = or i1 %16, %18                       ; [#uses = 1]
  br i1 %ororval, label %endfor21, label %endif31

endif31:                                          ; preds = %else
  %19 = and i32 %13, 63                           ; [#uses = 2]
  %20 = add i64 %.in, -2                          ; [#uses = 4]
  %bounds.cmp34 = icmp ult i64 %20, %__key172.0   ; [#uses = 1]
  br i1 %bounds.cmp34, label %bounds.ok35, label %bounds.fail36

bounds.ok35:                                      ; preds = %endif31
  %21 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %20 ; [#uses = 1, type = i8*]
  %22 = load i8, i8* %21, align 1                 ; [#uses = 1]
  %23 = zext i8 %22 to i32                        ; [#uses = 4]
  %24 = and i32 %23, 224                          ; [#uses = 1]
  %25 = icmp eq i32 %24, 192                      ; [#uses = 1]
  br i1 %25, label %if38, label %endif39

if38:                                             ; preds = %bounds.ok35
  %26 = shl nuw nsw i32 %23, 6                    ; [#uses = 1]
  %27 = and i32 %26, 1984                         ; [#uses = 1]
  %28 = or i32 %27, %19                           ; [#uses = 1]
  %29 = tail call zeroext i1 @_D3std3uni7isWhiteFNaNbNiNfwZb(i32 %28) #5 ; [#uses = 1]
  br i1 %29, label %forinc20, label %endfor21

endif39:                                          ; preds = %bounds.ok35
  %30 = icmp eq i64 %10, 1                        ; [#uses = 1]
  %31 = and i32 %23, 192                          ; [#uses = 1]
  %32 = icmp ne i32 %31, 128                      ; [#uses = 1]
  %ororval46 = or i1 %30, %32                     ; [#uses = 1]
  br i1 %ororval46, label %endfor21, label %endif48

endif48:                                          ; preds = %endif39
  %33 = add i64 %.in, -3                          ; [#uses = 4]
  %bounds.cmp51 = icmp ult i64 %33, %__key172.0   ; [#uses = 1]
  br i1 %bounds.cmp51, label %bounds.ok52, label %bounds.fail53

bounds.ok52:                                      ; preds = %endif48
  %34 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %33 ; [#uses = 1, type = i8*]
  %35 = load i8, i8* %34, align 1                 ; [#uses = 1]
  %36 = zext i8 %35 to i32                        ; [#uses = 2]
  %37 = and i32 %36, 240                          ; [#uses = 1]
  %38 = icmp eq i32 %37, 224                      ; [#uses = 1]
  br i1 %38, label %andand, label %endfor21

andand:                                           ; preds = %bounds.ok52
  %39 = shl nuw nsw i32 %23, 6                    ; [#uses = 1]
  %40 = and i32 %39, 4032                         ; [#uses = 1]
  %41 = or i32 %40, %19                           ; [#uses = 1]
  %42 = shl nuw nsw i32 %36, 12                   ; [#uses = 1]
  %43 = and i32 %42, 61440                        ; [#uses = 1]
  %44 = or i32 %41, %43                           ; [#uses = 1]
  %45 = tail call zeroext i1 @_D3std3uni7isWhiteFNaNbNiNfwZb(i32 %44) #5 ; [#uses = 1]
  br i1 %45, label %forinc20, label %endfor21

bounds.fail53:                                    ; preds = %endif48
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3346, i64 %33, i64 %__key172.0) #3
  unreachable

bounds.fail36:                                    ; preds = %endif31
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3334, i64 %20, i64 %__key172.0) #3
  unreachable

bounds.fail24:                                    ; preds = %forbody19
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3322, i64 %10, i64 %__key172.0) #3
  unreachable

forinc20:                                         ; preds = %andand, %if38, %if26
  %i16.1 = phi i64 [ %10, %if26 ], [ %20, %if38 ], [ %33, %andand ] ; [#uses = 2, type = i64]
  %.not101 = icmp eq i64 %i16.1, 0                ; [#uses = 1]
  br i1 %.not101, label %bounds.ok59, label %forbody19

endfor21:                                         ; preds = %andand, %bounds.ok52, %endif39, %if38, %else, %if26
  %bounds.cmp.up62.not = icmp ugt i64 %.in, %__key172.0 ; [#uses = 1]
  br i1 %bounds.cmp.up62.not, label %bounds.fail60, label %bounds.ok59

bounds.ok59:                                      ; preds = %forinc20, %endfor21
  %i16.0.lcssa124 = phi i64 [ %.in, %endfor21 ], [ 0, %forinc20 ] ; [#uses = 1, type = i64]
  %46 = insertvalue { i64, i8* } undef, i64 %i16.0.lcssa124, 0 ; [#uses = 1]
  %47 = insertvalue { i64, i8* } %46, i8* %str_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %47

bounds.fail60:                                    ; preds = %endfor21
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3361, i64 0, i64 %.in, i64 %__key172.0) #3
  unreachable
}

; [#uses = 3]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std6string__T9stripLeftTAyaZQpFNaNbNiNfQpZQs({ i64, i8* } %input_arg) local_unnamed_addr #0 {
  %index = alloca i64, align 8                    ; [#uses = 4, size/byte = 8]
  %input_arg.fca.0.extract = extractvalue { i64, i8* } %input_arg, 0 ; [#uses = 9]
  %input_arg.fca.1.extract = extractvalue { i64, i8* } %input_arg, 1 ; [#uses = 4]
  %.not = icmp eq i64 %input_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not, label %bounds.ok5, label %bounds.ok

bounds.ok:                                        ; preds = %0, %forinc
  %i.063 = phi i64 [ %6, %forinc ], [ 0, %0 ]     ; [#uses = 7, type = i64]
  %1 = getelementptr inbounds i8, i8* %input_arg.fca.1.extract, i64 %i.063 ; [#uses = 1, type = i8*]
  %2 = load i8, i8* %1, align 1                   ; [#uses = 2]
  %3 = icmp slt i8 %2, 0                          ; [#uses = 1]
  br i1 %3, label %bounds.ok10, label %endif

endif:                                            ; preds = %bounds.ok
  %4 = zext i8 %2 to i32                          ; [#uses = 1]
  %5 = tail call zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32 %4) #5 ; [#uses = 1]
  br i1 %5, label %forinc, label %endfor

forinc:                                           ; preds = %endif
  %6 = add nuw i64 %i.063, 1                      ; [#uses = 2]
  %exitcond.not = icmp eq i64 %6, %input_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %bounds.ok5, label %bounds.ok

endfor:                                           ; preds = %endif
  %bounds.cmp.lo.not = icmp ult i64 %input_arg.fca.0.extract, %i.063 ; [#uses = 1]
  br i1 %bounds.cmp.lo.not, label %bounds.fail6, label %bounds.ok5

bounds.ok5:                                       ; preds = %forinc, %0, %endfor
  %i.0.lcssa72 = phi i64 [ %i.063, %endfor ], [ 0, %0 ], [ %input_arg.fca.0.extract, %forinc ] ; [#uses = 2, type = i64]
  %lowerbound = getelementptr inbounds i8, i8* %input_arg.fca.1.extract, i64 %i.0.lcssa72 ; [#uses = 1, type = i8*]
  %7 = sub i64 %input_arg.fca.0.extract, %i.0.lcssa72 ; [#uses = 1]
  %.fca.0.insert = insertvalue { i64, i8* } undef, i64 %7, 0 ; [#uses = 1]
  %.fca.1.insert51 = insertvalue { i64, i8* } %.fca.0.insert, i8* %lowerbound, 1 ; [#uses = 1]
  ret { i64, i8* } %.fca.1.insert51

bounds.ok10:                                      ; preds = %bounds.ok
  %8 = getelementptr inbounds i8, i8* %input_arg.fca.1.extract, i64 %i.063 ; [#uses = 2, type = i8*]
  %9 = sub i64 %input_arg.fca.0.extract, %i.063   ; [#uses = 7]
  store i64 0, i64* %index, align 8
  %10 = insertvalue { i64, i8* } undef, i64 %9, 0 ; [#uses = 1]
  %11 = insertvalue { i64, i8* } %10, i8* %8, 1   ; [#uses = 1]
  %.not88 = icmp eq i64 %9, 0                     ; [#uses = 1]
  br i1 %.not88, label %bounds.ok33, label %bounds.ok.i

bounds.ok.i:                                      ; preds = %bounds.ok10, %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit.forcond16_crit_edge
  %12 = phi i64 [ %.pre, %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit.forcond16_crit_edge ], [ 0, %bounds.ok10 ] ; [#uses = 5, type = i64]
  %13 = getelementptr inbounds i8, i8* %8, i64 %12 ; [#uses = 3, type = i8*]
  %14 = load i8, i8* %13, align 1                 ; [#uses = 1]
  %15 = icmp sgt i8 %14, -1                       ; [#uses = 1]
  br i1 %15, label %bounds.ok4.i, label %else.i

bounds.ok4.i:                                     ; preds = %bounds.ok.i
  %16 = add nuw i64 %12, 1                        ; [#uses = 1]
  store i64 %16, i64* %index, align 8
  %17 = load i8, i8* %13, align 1                 ; [#uses = 1]
  %18 = zext i8 %17 to i32                        ; [#uses = 1]
  br label %label.__returnLabel.i

else.i:                                           ; preds = %bounds.ok.i
  %19 = call i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TAxaZQDrFNaNbNiQoKmZw(i64* nonnull dereferenceable(8) %index, { i64, i8* } %11) #5 ; [#uses = 1]
  br label %label.__returnLabel.i

label.__returnLabel.i:                            ; preds = %else.i, %bounds.ok4.i
  %__result.0.i = phi i32 [ %18, %bounds.ok4.i ], [ %19, %else.i ] ; [#uses = 2, type = i32]
  %20 = call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %__result.0.i) #5 ; [#uses = 1]
  br i1 %20, label %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit, label %assertFailed12.i

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

_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit: ; preds = %label.__returnLabel.i
  %21 = call zeroext i1 @_D3std3uni7isWhiteFNaNbNiNfwZb(i32 %__result.0.i) #5 ; [#uses = 1]
  br i1 %21, label %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit.forcond16_crit_edge, label %if21

_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit.forcond16_crit_edge: ; preds = %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit
  %.pre = load i64, i64* %index, align 8          ; [#uses = 2]
  %22 = icmp ugt i64 %9, %.pre                    ; [#uses = 1]
  br i1 %22, label %bounds.ok.i, label %bounds.ok33

if21:                                             ; preds = %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit
  %bounds.cmp.lo27.not = icmp ult i64 %9, %12     ; [#uses = 1]
  br i1 %bounds.cmp.lo27.not, label %bounds.fail25, label %bounds.ok24

bounds.ok24:                                      ; preds = %if21
  %23 = sub i64 %9, %12                           ; [#uses = 1]
  %24 = insertvalue { i64, i8* } undef, i64 %23, 0 ; [#uses = 1]
  %25 = insertvalue { i64, i8* } %24, i8* %13, 1  ; [#uses = 1]
  ret { i64, i8* } %25

bounds.fail25:                                    ; preds = %if21
  call void @_d_arraybounds_slice({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3129, i64 %12, i64 %9, i64 %9) #3
  unreachable

bounds.ok33:                                      ; preds = %_D3std3utf__T6decodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TQCaZQDhFNaNbNiNeKQCrKmZw.exit.forcond16_crit_edge, %bounds.ok10
  %lowerbound38 = getelementptr inbounds i8, i8* %input_arg.fca.1.extract, i64 %input_arg.fca.0.extract ; [#uses = 1, type = i8*]
  %26 = insertvalue { i64, i8* } { i64 0, i8* undef }, i8* %lowerbound38, 1 ; [#uses = 1]
  ret { i64, i8* } %26

bounds.fail6:                                     ; preds = %endfor
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 52, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.10, i32 0, i32 0) }, i32 3113, i64 %i.063, i64 %input_arg.fca.0.extract, i64 %input_arg.fca.0.extract) #3
  unreachable
}

; [#uses = 2]
declare zeroext i1 @_D3std5ascii7isWhiteFNaNbNiNfwZb(i32) local_unnamed_addr #5

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

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

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

if:                                               ; preds = %bounds.ok
  %8 = add nuw i64 %2, 1                          ; [#uses = 1]
  store i64 %8, i64* %index, align 8
  %.len2 = load i64, i64* %1, align 8             ; [#uses = 2]
  %bounds.cmp3 = icmp ult i64 %2, %.len2          ; [#uses = 1]
  br i1 %bounds.cmp3, label %bounds.ok4, label %bounds.fail5

bounds.ok4:                                       ; preds = %if
  %.ptr6 = load i8*, i8** %4, align 8             ; [#uses = 1]
  %9 = getelementptr inbounds i8, i8* %.ptr6, i64 %2 ; [#uses = 1, type = i8*]
  %10 = load i8, i8* %9, align 1                  ; [#uses = 1]
  %11 = zext i8 %10 to i32                        ; [#uses = 1]
  br label %label.__returnLabel

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

else:                                             ; preds = %bounds.ok
  %12 = insertvalue { i64, i8* } undef, i64 %.len, 0 ; [#uses = 1]
  %13 = insertvalue { i64, i8* } %12, i8* %.ptr, 1 ; [#uses = 1]
  %14 = tail call i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TAxaZQDrFNaNbNiQoKmZw(i64* nonnull dereferenceable(8) %index, { i64, i8* } %13) #5 ; [#uses = 1]
  br label %label.__returnLabel

label.__returnLabel:                              ; preds = %else, %bounds.ok4
  %__result.0 = phi i32 [ %11, %bounds.ok4 ], [ %14, %else ] ; [#uses = 2, type = i32]
  %15 = tail call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %__result.0) #5 ; [#uses = 1]
  br i1 %15, label %assertPassed11, label %assertFailed12

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

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

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 44, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.11, i32 0, i32 0) }, { i64, i8* } { i64 49, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.12, i32 0, i32 0) }, i32 1175) #3
  unreachable
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai1TAxaZQDrFNaNbNiQoKmZw(i64* dereferenceable(8) %index, { i64, i8* } %str_arg) local_unnamed_addr #0 {
  %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]
  %1 = load i64, i64* %index, align 8             ; [#uses = 13]
  %2 = getelementptr inbounds i8, i8* %str_arg.fca.1.extract, i64 %1 ; [#uses = 4, type = i8*]
  %3 = sub i64 %str_arg.fca.0.extract, %1         ; [#uses = 3]
  %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 = add i64 %1, 1                              ; [#uses = 1]
  store i64 %7, i64* %index, align 8
  ret i32 65533

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

if3:                                              ; preds = %endif
  %9 = add i64 %1, 1                              ; [#uses = 1]
  store i64 %9, i64* %index, align 8
  ret i32 65533

endif4:                                           ; preds = %endif
  %10 = getelementptr inbounds i8, i8* %2, i64 1  ; [#uses = 1, type = i8*]
  %11 = load i8, i8* %10, align 1                 ; [#uses = 1]
  %12 = zext i8 %11 to i32                        ; [#uses = 2]
  %13 = and i32 %12, 192                          ; [#uses = 1]
  %.not80 = icmp eq i32 %13, 128                  ; [#uses = 1]
  br i1 %.not80, label %endif7, label %if6

if6:                                              ; preds = %endif4
  %14 = add i64 %1, 2                             ; [#uses = 1]
  store i64 %14, i64* %index, align 8
  ret i32 65533

endif7:                                           ; preds = %endif4
  %15 = shl nuw nsw i32 %5, 6                     ; [#uses = 1]
  %16 = and i32 %12, 63                           ; [#uses = 1]
  %17 = or i32 %16, %15                           ; [#uses = 4]
  %.mask84 = and i8 %4, 32                        ; [#uses = 1]
  %18 = icmp eq i8 %.mask84, 0                    ; [#uses = 1]
  br i1 %18, label %if9, label %unrolledstmt1

if9:                                              ; preds = %endif7
  %19 = and i32 %5, 30                            ; [#uses = 1]
  %20 = icmp eq i32 %19, 0                        ; [#uses = 1]
  %21 = add i64 %1, 2                             ; [#uses = 1]
  store i64 %21, i64* %index, align 8
  br i1 %20, label %if11, label %endif12

if11:                                             ; preds = %if36, %endif39, %if9
  %merge = phi i32 [ 65533, %if9 ], [ %spec.select86, %endif39 ], [ 65533, %if36 ] ; [#uses = 1, type = i32]
  ret i32 %merge

endif12:                                          ; preds = %if9
  %22 = and i32 %17, 2047                         ; [#uses = 1]
  ret i32 %22

unrolledstmt1:                                    ; preds = %endif7
  %23 = icmp eq i64 %3, 2                         ; [#uses = 1]
  br i1 %23, label %if15, label %endif16

if15:                                             ; preds = %unrolledstmt1
  %24 = add i64 %1, 2                             ; [#uses = 1]
  store i64 %24, i64* %index, align 8
  ret i32 65533

endif16:                                          ; preds = %unrolledstmt1
  %25 = getelementptr inbounds i8, i8* %2, i64 2  ; [#uses = 1, type = i8*]
  %26 = load i8, i8* %25, align 1                 ; [#uses = 1]
  %27 = zext i8 %26 to i32                        ; [#uses = 2]
  %28 = and i32 %27, 192                          ; [#uses = 1]
  %.not81 = icmp eq i32 %28, 128                  ; [#uses = 1]
  br i1 %.not81, label %endif19, label %if18

if18:                                             ; preds = %endif16
  %29 = add i64 %1, 3                             ; [#uses = 1]
  store i64 %29, i64* %index, align 8
  ret i32 65533

endif19:                                          ; preds = %endif16
  %30 = shl nuw nsw i32 %17, 6                    ; [#uses = 1]
  %31 = and i32 %27, 63                           ; [#uses = 1]
  %32 = or i32 %31, %30                           ; [#uses = 2]
  %.mask85 = and i8 %4, 16                        ; [#uses = 1]
  %33 = icmp eq i8 %.mask85, 0                    ; [#uses = 1]
  br i1 %33, label %if21, label %unrolledstmt2

if21:                                             ; preds = %endif19
  %34 = and i32 %32, 65535                        ; [#uses = 2]
  %35 = and i32 %17, 992                          ; [#uses = 1]
  %36 = icmp eq i32 %35, 0                        ; [#uses = 1]
  br i1 %36, label %if23, label %endif24

if23:                                             ; preds = %if21
  %37 = add i64 %1, 3                             ; [#uses = 1]
  store i64 %37, i64* %index, align 8
  ret i32 65533

endif24:                                          ; preds = %if21
  %38 = tail call zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32 %34) #5 ; [#uses = 1]
  %39 = load i64, i64* %index, align 8            ; [#uses = 1]
  %40 = add i64 %39, 3                            ; [#uses = 1]
  store i64 %40, i64* %index, align 8
  %spec.select = select i1 %38, i32 %34, i32 65533 ; [#uses = 1]
  ret i32 %spec.select

unrolledstmt2:                                    ; preds = %endif19
  %41 = icmp eq i64 %3, 3                         ; [#uses = 1]
  br i1 %41, label %if30, label %endif31

if30:                                             ; preds = %unrolledstmt2
  %42 = add i64 %1, 3                             ; [#uses = 1]
  store i64 %42, i64* %index, align 8
  ret i32 65533

endif31:                                          ; preds = %unrolledstmt2
  %43 = getelementptr inbounds i8, i8* %2, i64 3  ; [#uses = 1, type = i8*]
  %44 = load i8, i8* %43, align 1                 ; [#uses = 1]
  %45 = zext i8 %44 to i32                        ; [#uses = 2]
  %46 = and i32 %45, 192                          ; [#uses = 1]
  %.not82 = icmp eq i32 %46, 128                  ; [#uses = 1]
  br i1 %.not82, label %endif34, label %if33

if33:                                             ; preds = %endif31
  %47 = add i64 %1, 4                             ; [#uses = 1]
  store i64 %47, i64* %index, align 8
  ret i32 65533

endif34:                                          ; preds = %endif31
  %.mask = and i8 %4, 8                           ; [#uses = 1]
  %.not83 = icmp eq i8 %.mask, 0                  ; [#uses = 1]
  br i1 %.not83, label %if36, label %unrolledend

if36:                                             ; preds = %endif34
  %48 = shl nuw nsw i32 %32, 6                    ; [#uses = 1]
  %49 = and i32 %45, 63                           ; [#uses = 1]
  %.masked = and i32 %48, 2097088                 ; [#uses = 1]
  %50 = or i32 %49, %.masked                      ; [#uses = 2]
  %51 = and i32 %17, 496                          ; [#uses = 1]
  %52 = icmp eq i32 %51, 0                        ; [#uses = 1]
  %53 = add i64 %1, 4                             ; [#uses = 1]
  store i64 %53, i64* %index, align 8
  br i1 %52, label %if11, label %endif39

endif39:                                          ; preds = %if36
  %54 = icmp ugt i32 %50, 1114111                 ; [#uses = 1]
  %spec.select86 = select i1 %54, i32 65533, i32 %50 ; [#uses = 1]
  br label %if11

unrolledend:                                      ; preds = %endif34
  %55 = add i64 %1, 4                             ; [#uses = 1]
  store i64 %55, i64* %index, align 8
  ret i32 65533
}

; [#uses = 6]
declare zeroext i1 @_D3std3utf12isValidDcharFNaNbNiNfwZb(i32) local_unnamed_addr #5

; [#uses = 8]
; Function Attrs: cold noreturn uwtable
declare void @_d_assert({ 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 #0 {
  %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 !54

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 !55

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]
  %__key184.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]
  %__key184.07.i.i.i = phi i64 [ %41, %forbody.i.i.i ], [ %__key184.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 %__key184.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 %__key184.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 !56

_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 #0 {
  %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 !57

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 !58

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]
  %__key184.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]
  %__key184.07.i.i = phi i64 [ %41, %forbody.i.i ], [ %__key184.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 %__key184.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 %__key184.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 !59

_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 #0 {
  %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]
  %__key184.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 %__key184.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 %__key184.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 %__key184.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 %__key184.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 %__key184.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]
  %__key184.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]
  %__key184.07.i.epil = phi i64 [ %24, %forbody.i.epil ], [ %__key184.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 %__key184.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 %__key184.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 !60

_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 #0 {
  %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]
  %__key184.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 %__key184.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 %__key184.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 %__key184.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 %__key184.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 %__key184.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]
  %__key184.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]
  %__key184.07.epil = phi i64 [ %24, %forbody.epil ], [ %__key184.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 %__key184.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 %__key184.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 !61

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 #0 {
  %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 #5

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

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std5stdio4File__T5writeTiTaZQlMFNfiaZv(%std.stdio.File* nonnull %.this_arg, i8 zeroext %_param_1_arg, i32 %_param_0_arg) local_unnamed_addr #0 personality i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality {
unrolledstmt:
  %w = alloca %std.stdio.File.LockingTextWriter, align 8 ; [#uses = 7, size/byte = 48]
  %__copytmp195 = 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) #5
  %0 = bitcast %std.stdio.File.LockingTextWriter* %__copytmp195 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 %__copytmp195) #5
          to label %postinvoke3 unwind label %landingPad2

postinvoke3:                                      ; preds = %unrolledstmt
  invoke void @_D3std4conv__T11toTextRangeTiTSQBd5stdio4File17LockingTextWriterZQBzFNfiQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture nonnull align 8 %__copytmp195, i32 %_param_0_arg) #5
          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) #5
          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) #5
  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) #5
  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*) #4

; [#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 #5

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

; [#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__T11toTextRangeTiTSQBd5stdio4File17LockingTextWriterZQBzFNfiQBqZv(%std.stdio.File.LockingTextWriter* noalias nocapture align 8 %writer, i32 %value_arg) local_unnamed_addr #0 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 i32 %value_arg, 0                 ; [#uses = 1]
  %2 = sext i32 %value_arg to i64                 ; [#uses = 2]
  br i1 %1, label %if, label %dowhile.i

if:                                               ; preds = %0
  %negval.i = sub nsw i64 0, %2                   ; [#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 ], [ %6, %bounds.ok.i.i ] ; [#uses = 3, type = i64]
  %3 = icmp ult i64 %value.0.i.i, 10              ; [#uses = 1]
  br i1 %3, label %endif.i.i, label %else.i.i

else.i.i:                                         ; preds = %dowhile.i.i
  %4 = urem i64 %value.0.i.i, 10                  ; [#uses = 1]
  %5 = 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 [ %5, %else.i.i ], [ 0, %dowhile.i.i ] ; [#uses = 2, type = i64]
  %x.0.in.i.i = phi i64 [ %4, %else.i.i ], [ %value.0.i.i, %dowhile.i.i ] ; [#uses = 1, type = i64]
  %6 = add nsw i64 %i.0.i.i, -1                   ; [#uses = 4]
  %bounds.cmp.i.i = icmp ult i64 %6, 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]
  %7 = getelementptr inbounds [20 x i8], [20 x i8]* %buf5, i64 0, i64 %6 ; [#uses = 1, type = i8*]
  %8 = add nuw nsw i8 %x.0.i.i, 48                ; [#uses = 1]
  store i8 %8, i8* %7, align 1
  %.not.i.i = icmp eq i64 %value.1.i.i, 0         ; [#uses = 1]
  br i1 %.not.i.i, label %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit.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.15, i32 0, i32 0) }, i32 48, i64 -1, i64 20) #3
  unreachable

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

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

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

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

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.15, i32 0, i32 0) }, i32 124, i64 0, i64 0) #3
  unreachable

if.i.i.i:                                         ; preds = %bounds.ok.i
  %16 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %17 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %16, align 8 ; [#uses = 1]
  %18 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %17, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %19 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %18, align 8 ; [#uses = 1]
  %20 = call i64 @fwrite(i8* nonnull %11, i64 1, i64 %12, %core.stdc.stdio._IO_FILE* %19) #5 ; [#uses = 1]
  %.not.i.i.i = icmp eq i64 %20, %12              ; [#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.8, 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 = %bounds.ok.i, %.noexc6.forbody.i.i.i_crit_edge
  %21 = phi i8 [ %.pre43, %.noexc6.forbody.i.i.i_crit_edge ], [ 45, %bounds.ok.i ] ; [#uses = 1, type = i8]
  %__key194.010.i.i.i = phi i64 [ %22, %.noexc6.forbody.i.i.i_crit_edge ], [ 0, %bounds.ok.i ] ; [#uses = 2, type = i64]
  invoke void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %writer, i8 zeroext %21) #0
          to label %.noexc6 unwind label %eh.resume.loopexit

.noexc6:                                          ; preds = %forbody.i.i.i
  %22 = add nuw nsw i64 %__key194.010.i.i.i, 1    ; [#uses = 2]
  %exitcond.not.i.i.i = icmp eq i64 %22, %12      ; [#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* %9, i64 %__key194.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 ], [ %2, %0 ] ; [#uses = 4, type = i64]
  %i.0.i = phi i64 [ %26, %bounds.ok.i8 ], [ 20, %0 ] ; [#uses = 2, type = i64]
  %23 = icmp ult i64 %value.0.i, 10               ; [#uses = 1]
  br i1 %23, label %endif.i, label %else.i

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

endif.i:                                          ; preds = %else.i, %dowhile.i
  %value.1.i = phi i64 [ %25, %else.i ], [ 0, %dowhile.i ] ; [#uses = 2, type = i64]
  %x.0.in.i = phi i64 [ %24, %else.i ], [ %value.0.i, %dowhile.i ] ; [#uses = 1, type = i64]
  %26 = add nsw i64 %i.0.i, -1                    ; [#uses = 4]
  %bounds.cmp.i = icmp ult i64 %26, 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]
  %27 = getelementptr inbounds [20 x i8], [20 x i8]* %buf14, i64 0, i64 %26 ; [#uses = 1, type = i8*]
  %28 = add nuw nsw i8 %x.0.i, 48                 ; [#uses = 2]
  store i8 %28, i8* %27, 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.15, i32 0, i32 0) }, i32 48, i64 -1, i64 20) #3
  unreachable

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

if.i.i.i13:                                       ; preds = %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit
  %34 = getelementptr inbounds %std.stdio.File.LockingTextWriter, %std.stdio.File.LockingTextWriter* %writer, i64 0, i32 0, i32 0 ; [#uses = 1, type = %std.stdio.File.Impl**]
  %35 = load %std.stdio.File.Impl*, %std.stdio.File.Impl** %34, align 8 ; [#uses = 1]
  %36 = getelementptr inbounds %std.stdio.File.Impl, %std.stdio.File.Impl* %35, i64 0, i32 0 ; [#uses = 1, type = %core.stdc.stdio._IO_FILE**]
  %37 = load %core.stdc.stdio._IO_FILE*, %core.stdc.stdio._IO_FILE** %36, align 8 ; [#uses = 1]
  %38 = call i64 @fwrite(i8* nonnull %29, i64 1, i64 %30, %core.stdc.stdio._IO_FILE* %37) #5 ; [#uses = 1]
  %.not.i.i.i12 = icmp eq i64 %38, %30            ; [#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.8, 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
  %39 = phi i8 [ %.pre, %.noexc19.forbody.i.i.i17_crit_edge ], [ %28, %_D4core8internal6string__T20unsignedToTempStringVki10ZQBcFNaNbNiNfmMNkAaZQd.exit ] ; [#uses = 1, type = i8]
  %__key194.010.i.i.i15 = phi i64 [ %40, %.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 %39) #0
          to label %.noexc19 unwind label %eh.resume.loopexit.split-lp.loopexit

.noexc19:                                         ; preds = %forbody.i.i.i17
  %40 = add nuw nsw i64 %__key194.010.i.i.i15, 1  ; [#uses = 3]
  %exitcond.not.i.i.i16 = icmp eq i64 %40, %30    ; [#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* %29, i64 %40 ; [#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) #5
  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 }]
  %41 = extractvalue { i8*, i32 } %lpad.phi, 0    ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv(%std.stdio.File.LockingTextWriter* nonnull %writer) #5
  tail call void @_Unwind_Resume(i8* %41)
  unreachable
}

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

; [#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 #0 {
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %e_arg) #5
  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 #0 {
  %1 = load i8, i8* %e, align 1                   ; [#uses = 1]
  tail call void @_D3std5stdio4File17LockingTextWriter__T3putTaZQhMFNfaZv(%std.stdio.File.LockingTextWriter* nonnull %r, i8 zeroext %1) #5
  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 #0 {
  %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) #5
  %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) #5 ; [#uses = 1]
  %6 = tail call i32 @fputc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %5) #5 ; [#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) #5 ; [#uses = 1]
  %9 = tail call i32 @fputwc_unlocked(i32 %4, %core.stdc.stdio._IO_FILE* %8) #5 ; [#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) #5 ; [#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) #5 ; [#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) #5 ; [#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) #5 ; [#uses = 1]
  %34 = call i32 @fputwc_unlocked(i32 %32, %core.stdc.stdio._IO_FILE* %33) #5 ; [#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.8, 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.8, 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.8, 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 #0 {
  %1 = tail call i32 @fputc_unlocked(i32 %ch_arg, %core.stdc.stdio._IO_FILE* %h_arg) #5 ; [#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 #2

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

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

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

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T6strideTAaZQlFNaNfQkZk({ i64, i8* } %str_arg) local_unnamed_addr #0 {
  %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) #5 ; [#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.12, 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 #0 {
  %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) #5 ; [#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 #0 {
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) #4 ; [#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.14, 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.12, i32 0, i32 0) }, { i64, i8* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite.i) #5 ; [#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) #5 ; [#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.12, 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 #0 {
  %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 #5

; [#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 #0 {
  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.12, 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) #5 ; [#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.12, 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) #5 ; [#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.12, 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.12, i32 0, i32 0) }, i32 1281) #3
  unreachable
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFNaQkKmZw(i64* dereferenceable(8) %index, { i64, i8* } %str_arg) local_unnamed_addr #0 {
  %.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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #5 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#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) #0 ; [#uses = 1]
  %85 = bitcast %std.utf.UTFException* %84 to %object.Throwable* ; [#uses = 1]
  call void @_d_throw_exception(%object.Throwable* %85) #3
  unreachable
}

; [#uses = 10]
; Function Attrs: uwtable
define weak_odr %std.utf.UTFException* @_D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException(i8* nonnull %.nest_arg) local_unnamed_addr #0 {
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.12, 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) #4 ; [#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.12, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 22, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.13, i32 0, i32 0) }) #5 ; [#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 #0 {
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.12, 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) #4 ; [#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.12, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } %msg_arg) #5 ; [#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 #0 {
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.12, 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) #4 ; [#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.12, i32 0, i32 0) }, i64 %.lcssa, { i64, i8* } { i64 44, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.11, i32 0, i32 0) }) #5 ; [#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 #5

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D3std3utf__T13_utfExceptionVEQBc8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDmFNaNfQCiwZw(i32 %c_arg, { i64, i8* } %msg_arg) local_unnamed_addr #0 {
  %.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) #4 ; [#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.12, i32 0, i32 0) }, { i64, i8* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite) #5 ; [#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 #5

; [#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 #0 {
  %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) #5 ; [#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.8, i32 0, i32 0) }) #12
  unreachable

forbody.i.i:                                      ; preds = %forcond.preheader.i.i, %forbody.i.i
  %__key194.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 %__key194.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) #0
  %11 = add nuw i64 %__key194.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 #0 {
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.15, 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.15, 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.15, 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 #0 {
  %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.15, 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 #0 {
  %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.15, 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 #0 {
  %.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) #5 ; [#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.8, i32 0, i32 0) }) #12
  unreachable

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

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

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

; [#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 #6 {
  %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) #4 ; [#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) #5 ; [#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) #5
  %.len = extractvalue { i64, i8* } %4, 0         ; [#uses = 1]
  br label %condend

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

; [#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 #4

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

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

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

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

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

; [#uses = 4]
; 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" }
attributes #1 = { uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16,+cx16" }
attributes #2 = { nofree nounwind "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #3 = { cold noreturn uwtable }
attributes #4 = { uwtable }
attributes #5 = { "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #6 = { noreturn uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #7 = { argmemonly nounwind willreturn }
attributes #8 = { nounwind uwtable }
attributes #9 = { nounwind readnone }
attributes #10 = { argmemonly nounwind willreturn writeonly }
attributes #11 = { nounwind readnone willreturn }
attributes #12 = { noreturn "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }

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

!0 = !{{ i64, i32* } undef}
!1 = !{%object.Exception* undef}
!2 = !{%object.Exception undef, i1 false}
!3 = !{{ i64, i8* } undef}
!4 = !{%std.utf.UTFException* undef}
!5 = !{%std.utf.UTFException undef, i1 false}
!6 = !{%std.exception.ErrnoException* undef}
!7 = !{%std.exception.ErrnoException undef, i1 false}
!8 = !{!"ldc version 1.28.0"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = distinct !{!11, !12, !10}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !12, !10}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !12, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !12, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !12, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !12, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !12, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !12, !10}
!27 = distinct !{!27, !10}
!28 = distinct !{!28, !12, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !12, !10}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !12, !10}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !12, !10}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !12, !10}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !12, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.unroll.disable"}
!42 = distinct !{!42, !12, !10}
!43 = distinct !{!43, !10}
!44 = distinct !{!44, !41}
!45 = distinct !{!45, !12, !10}
!46 = distinct !{!46, !10}
!47 = distinct !{!47, !12, !10}
!48 = distinct !{!48, !10}
!49 = distinct !{!49, !12, !10}
!50 = distinct !{!50, !10}
!51 = distinct !{!51, !12, !10}
!52 = distinct !{!52, !10}
!53 = distinct !{!53, !12, !10}
!54 = distinct !{!54, !10}
!55 = distinct !{!55, !41}
!56 = distinct !{!56, !12, !10}
!57 = distinct !{!57, !10}
!58 = distinct !{!58, !41}
!59 = distinct !{!59, !12, !10}
!60 = distinct !{!60, !41}
!61 = distinct !{!61, !41}
