module main;

import core.stdc.stdio;
import std.algorithm.sorting;

int gcd (int a, int b) {
	if (b == 0)
		return a;
	else
		return gcd (b, a % b);
}

int main(string[] argv)
{
	int n;

	scanf("%d", &n);
	int [] a = new int[n];
	for(int i = 0; i < n; i++) scanf("%d", &a[i]);
	a.sort();
	int small = a[1] - a[0];
	for(int i = 1; i < n - 1; i++)
	    small = gcd(small, a[i + 1] - a[i]);
	
	printf("%d", (a[n - 1] - a[0]) / small - n + 1);
	
	return 0;
}
; ModuleID = '/data/TheStack_IR/OJ_Samples/Collated/D/Source_1895/source.d'
source_filename = "/data/TheStack_IR/OJ_Samples/Collated/D/Source_1895/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, [5 x i8] }
%object.TypeInfo_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* }
%object.TypeInfo = type { [19 x i8*]*, i8* }
%object.TypeInfo_Const = type { [19 x i8*]*, i8*, %object.TypeInfo* }
%object.ModuleInfo = type { i32, i32 }
%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" = type { { i64, i32* } }

@.str = private unnamed_addr constant [3 x i8] c"%d\00" ; [#uses = 1]
@_D11TypeInfo_Ai6__initZ = external global %object.TypeInfo_Array ; [#uses = 1]
@.str.1 = private unnamed_addr constant [61 x i8] c"/data/TheStack_IR/OJ_Samples/Collated/D/Source_1895/source.d\00" ; [#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 [54 x i8] c"Attempting to fetch the back of an empty array of int\00" ; [#uses = 1]
@.str.6 = private unnamed_addr constant [35 x i8] c"Failed to sort range of type int[]\00" ; [#uses = 1]
@.str.7 = private unnamed_addr constant [64 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/algorithm/sorting.d\00" ; [#uses = 1]
@.str.8 = private unnamed_addr constant [60 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/range/package.d\00" ; [#uses = 1]
@.str.9 = private unnamed_addr constant [80 x i8] c"Attempting to slice a SortedRange with a larger first argument than the second.\00" ; [#uses = 1]
@_D12TypeInfo_xAi6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_Axi6__initZ to %object.TypeInfo*) } ; [#uses = 2]
@_D14TypeInfo_Const6__vtblZ = external constant [19 x i8*] ; [#uses = 2]
@_D12TypeInfo_Axi6__initZ = linkonce_odr global %object.TypeInfo_Array { [19 x i8*]* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Const* @_D11TypeInfo_xi6__initZ to %object.TypeInfo*) } ; [#uses = 1]
@_D14TypeInfo_Array6__vtblZ = external constant [19 x i8*] ; [#uses = 1]
@_D11TypeInfo_xi6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_i6__initZ } ; [#uses = 1]
@_D10TypeInfo_i6__initZ = external global %object.TypeInfo ; [#uses = 1]
@.str.10 = private unnamed_addr constant [35 x i8] c"sort: invalid comparison function.\00" ; [#uses = 1]
@.str.11 = private unnamed_addr constant [16 x i8] c"r is not a heap\00" ; [#uses = 1]
@.str.12 = private unnamed_addr constant [65 x i8] c"/usr/lib/ldc/x86_64-linux-gnu/include/d/std/algorithm/mutation.d\00" ; [#uses = 1]
@.str.13 = private unnamed_addr constant [49 x i8] c"r.length must be greater equal to Indexes.length\00" ; [#uses = 1]
@.str.14 = private unnamed_addr constant [8 x i8] c"a != b \00" ; [#uses = 1]
@.str.15 = private unnamed_addr constant [17 x i8] c"a != c && b != c\00" ; [#uses = 1]
@.str.16 = private unnamed_addr constant [23 x i8] c"less than check failed\00" ; [#uses = 1]
@.str.17 = private unnamed_addr constant [34 x i8] c"a != d && b != d && c != d failed\00" ; [#uses = 1]
@.str.18 = private unnamed_addr constant [44 x i8] c"a != e && b != e && c != e && d != e failed\00" ; [#uses = 1]
@.str.19 = private unnamed_addr constant [28 x i8] c"Swap: lhs internal pointer.\00" ; [#uses = 1]
@.str.20 = private unnamed_addr constant [28 x i8] c"Swap: rhs internal pointer.\00" ; [#uses = 1]
@.str.21 = private unnamed_addr constant [25 x i8] c"Swap: lhs points to rhs.\00" ; [#uses = 1]
@.str.22 = private unnamed_addr constant [25 x i8] c"Swap: rhs points to lhs.\00" ; [#uses = 1]
@.str.24 = private unnamed_addr constant [33 x i8] c"r must have more than 4 elements\00" ; [#uses = 1]
@.str.25 = private unnamed_addr constant [17 x i8] c"unexpected order\00" ; [#uses = 1]
@.str.27 = private unnamed_addr constant [73 x i8] c"Cannot move object with internal pointer unless `opPostMove` is defined.\00" ; [#uses = 1]
@_D6object__T10RTInfoImplVAmA2i16i2ZQxyG2m = weak_odr local_unnamed_addr constant [2 x i64] [i64 16, i64 2], align 8 ; [#uses = 0]
@_D4main12__ModuleInfoZ = global %0 { i32 -2147483644, i32 0, [5 x i8] c"main\00" } ; [#uses = 1]
@_D4main11__moduleRefZ = linkonce_odr hidden global %object.ModuleInfo* bitcast (%0* @_D4main12__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** @_D4main11__moduleRefZ to i8*)], section "llvm.metadata" ; [#uses = 0]

; [#uses = 0]
; Function Attrs: nounwind readnone uwtable
define i32 @_D4main3gcdFiiZi(i32 %b_arg, i32 %a_arg) local_unnamed_addr #0 {
  %1 = icmp eq i32 %b_arg, 0                      ; [#uses = 1]
  br i1 %1, label %if, label %else

if:                                               ; preds = %else, %0
  %a_arg.tr.lcssa = phi i32 [ %a_arg, %0 ], [ %b_arg.tr6, %else ] ; [#uses = 1, type = i32]
  ret i32 %a_arg.tr.lcssa

else:                                             ; preds = %0, %else
  %a_arg.tr7 = phi i32 [ %b_arg.tr6, %else ], [ %a_arg, %0 ] ; [#uses = 1, type = i32]
  %b_arg.tr6 = phi i32 [ %2, %else ], [ %b_arg, %0 ] ; [#uses = 3, type = i32]
  %2 = srem i32 %a_arg.tr7, %b_arg.tr6            ; [#uses = 2]
  %3 = icmp eq i32 %2, 0                          ; [#uses = 1]
  br i1 %3, label %if, label %else
}

; [#uses = 1]
; Function Attrs: uwtable
define i32 @_Dmain({ i64, { i64, i8* }* } %unnamed) #1 {
  %n = alloca i32, align 4                        ; [#uses = 6, size/byte = 4]
  store i32 0, i32* %n, align 4
  %1 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* nonnull %n) #6 ; [#uses = 0]
  %2 = load i32, i32* %n, align 4                 ; [#uses = 6]
  %3 = sext i32 %2 to i64                         ; [#uses = 8]
  %.gc_mem = call { i64, i8* } @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D11TypeInfo_Ai6__initZ to %object.TypeInfo*), i64 %3) #3 ; [#uses = 1]
  %.ptr = extractvalue { i64, i8* } %.gc_mem, 1   ; [#uses = 2]
  %4 = bitcast i8* %.ptr to i32*                  ; [#uses = 8]
  %5 = insertvalue { i64, i32* } undef, i64 %3, 0 ; [#uses = 1]
  %6 = load i32, i32* %n, align 4                 ; [#uses = 1]
  %7 = icmp sgt i32 %6, 0                         ; [#uses = 1]
  br i1 %7, label %forbody.preheader, label %endfor

forbody.preheader:                                ; preds = %0
  %wide.trip.count79 = zext i32 %2 to i64         ; [#uses = 2]
  br label %forbody

forbody:                                          ; preds = %forbody.preheader, %bounds.ok
  %indvars.iv77 = phi i64 [ 0, %forbody.preheader ], [ %indvars.iv.next78, %bounds.ok ] ; [#uses = 3, type = i64]
  %exitcond80.not = icmp eq i64 %indvars.iv77, %wide.trip.count79 ; [#uses = 1]
  br i1 %exitcond80.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %forbody
  %8 = getelementptr inbounds i32, i32* %4, i64 %indvars.iv77 ; [#uses = 1, type = i32*]
  %9 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %8) #6 ; [#uses = 0]
  %indvars.iv.next78 = add nuw nsw i64 %indvars.iv77, 1 ; [#uses = 2]
  %10 = load i32, i32* %n, align 4                ; [#uses = 1]
  %11 = sext i32 %10 to i64                       ; [#uses = 1]
  %12 = icmp slt i64 %indvars.iv.next78, %11      ; [#uses = 1]
  br i1 %12, label %forbody, label %endfor

bounds.fail:                                      ; preds = %forbody
  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 19, i64 %wide.trip.count79, i64 %3) #4
  unreachable

endfor:                                           ; preds = %bounds.ok, %0
  %.fca.1.insert = insertvalue { i64, i32* } %5, i32* %4, 1 ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T13quickSortImplSQBp10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDhFNaNbNiNfQpmZv(i64 %3, { i64, i32* } %.fca.1.insert) #6
  %.not.i.i.i = icmp eq i32 %2, 0                 ; [#uses = 1]
  br i1 %.not.i.i.i, label %bounds.fail5, label %endif.i.i

endif.i.i:                                        ; preds = %endfor
  %13 = add nsw i64 %3, -1                        ; [#uses = 1]
  br label %forcond.i.i

forcond.i.i:                                      ; preds = %bounds.ok4.i.i, %endif.i.i
  %__key79.0.i.i = phi i64 [ 0, %endif.i.i ], [ %14, %bounds.ok4.i.i ] ; [#uses = 3, type = i64]
  %exitcond.not.i.i = icmp eq i64 %__key79.0.i.i, %13 ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std9algorithm7sorting__T4sortVAyaa5_61203c2062VEQBxQBw8mutation12SwapStrategyi0TAiZQChFNaNbNiNfQpZSQDw5range__T11SortedRangeTQBtVQDva5_61203c2062VEQFsQBw18SortedRangeOptionsi0ZQCn.exit, label %bounds.ok4.i.i

bounds.ok4.i.i:                                   ; preds = %forcond.i.i
  %14 = add nuw i64 %__key79.0.i.i, 1             ; [#uses = 2]
  %15 = getelementptr inbounds i32, i32* %4, i64 %14 ; [#uses = 1, type = i32*]
  %16 = getelementptr inbounds i32, i32* %4, i64 %__key79.0.i.i ; [#uses = 1, type = i32*]
  %17 = load i32, i32* %15, align 4               ; [#uses = 1]
  %18 = load i32, i32* %16, align 4               ; [#uses = 1]
  %19 = icmp slt i32 %17, %18                     ; [#uses = 1]
  br i1 %19, label %assertFailed.i, label %forcond.i.i

assertFailed.i:                                   ; preds = %bounds.ok4.i.i
  call void @_d_assert_msg({ i64, i8* } { i64 34, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1949) #4
  unreachable

_D3std9algorithm7sorting__T4sortVAyaa5_61203c2062VEQBxQBw8mutation12SwapStrategyi0TAiZQChFNaNbNiNfQpZSQDw5range__T11SortedRangeTQBtVQDva5_61203c2062VEQFsQBw18SortedRangeOptionsi0ZQCn.exit: ; preds = %forcond.i.i
  %bounds.cmp3 = icmp ugt i32 %2, 1               ; [#uses = 1]
  br i1 %bounds.cmp3, label %bounds.ok9, label %bounds.fail5

bounds.ok9:                                       ; preds = %_D3std9algorithm7sorting__T4sortVAyaa5_61203c2062VEQBxQBw8mutation12SwapStrategyi0TAiZQChFNaNbNiNfQpZSQDw5range__T11SortedRangeTQBtVQDva5_61203c2062VEQFsQBw18SortedRangeOptionsi0ZQCn.exit
  %20 = getelementptr inbounds i8, i8* %.ptr, i64 4 ; [#uses = 1, type = i8*]
  %21 = bitcast i8* %20 to i32*                   ; [#uses = 1]
  %22 = load i32, i32* %21, align 4               ; [#uses = 1]
  %23 = load i32, i32* %4, align 4                ; [#uses = 2]
  %24 = sub i32 %22, %23                          ; [#uses = 2]
  %25 = load i32, i32* %n, align 4                ; [#uses = 2]
  %26 = add i32 %25, -1                           ; [#uses = 4]
  %27 = icmp sgt i32 %26, 1                       ; [#uses = 1]
  br i1 %27, label %forbody14.lr.ph, label %endfor16

forbody14.lr.ph:                                  ; preds = %bounds.ok9
  %28 = add i32 %2, -1                            ; [#uses = 1]
  %wide.trip.count = zext i32 %28 to i64          ; [#uses = 1]
  %wide.trip.count75 = zext i32 %26 to i64        ; [#uses = 1]
  br label %forbody14

forbody14:                                        ; preds = %_D4main3gcdFiiZi.exit, %forbody14.lr.ph
  %indvars.iv = phi i64 [ 1, %forbody14.lr.ph ], [ %indvars.iv.next, %_D4main3gcdFiiZi.exit ] ; [#uses = 3, type = i64]
  %small.065 = phi i32 [ %24, %forbody14.lr.ph ], [ %a_arg.tr.lcssa.i, %_D4main3gcdFiiZi.exit ] ; [#uses = 2, type = i32]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 ; [#uses = 4]
  %exitcond.not = icmp eq i64 %indvars.iv, %wide.trip.count ; [#uses = 1]
  br i1 %exitcond.not, label %bounds.fail20, label %bounds.ok24

bounds.ok24:                                      ; preds = %forbody14
  %29 = getelementptr inbounds i32, i32* %4, i64 %indvars.iv.next ; [#uses = 1, type = i32*]
  %30 = load i32, i32* %29, align 4               ; [#uses = 1]
  %31 = getelementptr inbounds i32, i32* %4, i64 %indvars.iv ; [#uses = 1, type = i32*]
  %32 = load i32, i32* %31, align 4               ; [#uses = 1]
  %33 = sub i32 %30, %32                          ; [#uses = 2]
  %34 = icmp eq i32 %33, 0                        ; [#uses = 1]
  br i1 %34, label %_D4main3gcdFiiZi.exit, label %else.i

else.i:                                           ; preds = %bounds.ok24, %else.i
  %a_arg.tr7.i = phi i32 [ %b_arg.tr6.i, %else.i ], [ %small.065, %bounds.ok24 ] ; [#uses = 1, type = i32]
  %b_arg.tr6.i = phi i32 [ %35, %else.i ], [ %33, %bounds.ok24 ] ; [#uses = 3, type = i32]
  %35 = srem i32 %a_arg.tr7.i, %b_arg.tr6.i       ; [#uses = 2]
  %36 = icmp eq i32 %35, 0                        ; [#uses = 1]
  br i1 %36, label %_D4main3gcdFiiZi.exit, label %else.i

_D4main3gcdFiiZi.exit:                            ; preds = %else.i, %bounds.ok24
  %a_arg.tr.lcssa.i = phi i32 [ %small.065, %bounds.ok24 ], [ %b_arg.tr6.i, %else.i ] ; [#uses = 2, type = i32]
  %exitcond76.not = icmp eq i64 %indvars.iv.next, %wide.trip.count75 ; [#uses = 1]
  br i1 %exitcond76.not, label %endfor16, label %forbody14

bounds.fail20:                                    ; preds = %forbody14
  %37 = and i64 %indvars.iv.next, 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 23, i64 %37, i64 %3) #4
  unreachable

endfor16:                                         ; preds = %_D4main3gcdFiiZi.exit, %bounds.ok9
  %small.0.lcssa = phi i32 [ %24, %bounds.ok9 ], [ %a_arg.tr.lcssa.i, %_D4main3gcdFiiZi.exit ] ; [#uses = 1, type = i32]
  %38 = sext i32 %26 to i64                       ; [#uses = 2]
  %bounds.cmp28 = icmp ult i32 %26, %2            ; [#uses = 1]
  br i1 %bounds.cmp28, label %bounds.ok34, label %bounds.fail30

bounds.ok34:                                      ; preds = %endfor16
  %39 = getelementptr inbounds i32, i32* %4, i64 %38 ; [#uses = 1, type = i32*]
  %40 = load i32, i32* %39, align 4               ; [#uses = 1]
  %41 = sub i32 %40, %23                          ; [#uses = 1]
  %42 = sdiv i32 %41, %small.0.lcssa              ; [#uses = 1]
  %43 = sub i32 1, %25                            ; [#uses = 1]
  %44 = add i32 %43, %42                          ; [#uses = 1]
  %45 = call i32 (i8*, ...) @printf(i8* nonnull dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 %44) #6 ; [#uses = 0]
  ret i32 0

bounds.fail30:                                    ; preds = %endfor16
  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 25, i64 %38, i64 %3) #4
  unreachable

bounds.fail5:                                     ; preds = %endfor, %_D3std9algorithm7sorting__T4sortVAyaa5_61203c2062VEQBxQBw8mutation12SwapStrategyi0TAiZQChFNaNbNiNfQpZSQDw5range__T11SortedRangeTQBtVQDva5_61203c2062VEQFsQBw18SortedRangeOptionsi0ZQCn.exit
  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 21, i64 1, i64 %3) #4
  unreachable
}

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

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

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" @_D3std9algorithm7sorting__T4sortVAyaa5_61203c2062VEQBxQBw8mutation12SwapStrategyi0TAiZQChFNaNbNiNfQpZSQDw5range__T11SortedRangeTQBtVQDva5_61203c2062VEQFsQBw18SortedRangeOptionsi0ZQCn({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 4]
  tail call void @_D3std9algorithm7sorting__T13quickSortImplSQBp10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDhFNaNbNiNfQpmZv(i64 %r_arg.fca.0.extract, { i64, i32* } %r_arg) #6
  %r_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 3]
  %.not.i.i = icmp eq i64 %r_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %.not.i.i, label %assertPassed, label %endif.i

endif.i:                                          ; preds = %0
  %1 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 1]
  br label %forcond.i

forcond.i:                                        ; preds = %bounds.ok4.i, %endif.i
  %__key79.0.i = phi i64 [ 0, %endif.i ], [ %2, %bounds.ok4.i ] ; [#uses = 3, type = i64]
  %exitcond.not.i = icmp eq i64 %__key79.0.i, %1  ; [#uses = 1]
  br i1 %exitcond.not.i, label %assertPassed, label %bounds.ok4.i

bounds.ok4.i:                                     ; preds = %forcond.i
  %2 = add nuw i64 %__key79.0.i, 1                ; [#uses = 2]
  %3 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %2 ; [#uses = 1, type = i32*]
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %__key79.0.i ; [#uses = 1, type = i32*]
  %5 = load i32, i32* %3, align 4                 ; [#uses = 1]
  %6 = load i32, i32* %4, align 4                 ; [#uses = 1]
  %7 = icmp slt i32 %5, %6                        ; [#uses = 1]
  br i1 %7, label %assertFailed, label %forcond.i

assertPassed:                                     ; preds = %forcond.i, %0
  %.fca.0.0.insert.i = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" undef, i64 %r_arg.fca.0.extract, 0, 0 ; [#uses = 1]
  %.fca.0.1.insert.i = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.0.insert.i, i32* %r_arg.fca.1.extract.i, 0, 1 ; [#uses = 1]
  ret %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.1.insert.i

assertFailed:                                     ; preds = %bounds.ok4.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 34, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.6, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1949) #4
  unreachable
}

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

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

; [#uses = 0]
; Function Attrs: uwtable
define i32 @main(i32 %argc_arg, i8** %argv_arg) local_unnamed_addr #5 {
  %1 = tail call i32 @_d_run_main(i32 %argc_arg, i8** %argv_arg, i8* bitcast (i32 ({ i64, { i64, i8* }* })* @_Dmain to i8*)) #6 ; [#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 #5 {
  %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 #5 {
  %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) #4
  unreachable
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv({ i64, i32* }* dereferenceable(16) %a) local_unnamed_addr #5 {
  %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) #4
  unreachable
}

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

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm8mutation__T4swapTiZQiFNaNbNiNeKiKiZv(i32* dereferenceable(4) %rhs, i32* dereferenceable(4) %lhs) local_unnamed_addr #5 {
  %1 = load i32, i32* %lhs, align 4               ; [#uses = 1]
  %2 = load i32, i32* %rhs, align 4               ; [#uses = 1]
  store i32 %2, i32* %lhs, align 4
  store i32 %1, i32* %rhs, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i32* } @_D3std5range10primitives__T4saveTiZQiFNaNbNdNiNfMNkANgiZQf({ i64, i32* } %a_arg) local_unnamed_addr #5 {
  ret { i64, i32* } %a_arg
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range10primitives__T7popBackTiZQlFNaNbNiNfMKANgiZv({ i64, i32* }* dereferenceable(16) %a) local_unnamed_addr #5 {
  %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 = add i64 %.len, -1                          ; [#uses = 1]
  store i64 %2, i64* %1, align 8
  ret void

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

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

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

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

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

; [#uses = 3]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T13quickSortImplSQBp10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDhFNaNbNiNfQpmZv(i64 %depth_arg, { i64, i32* } %r_arg) local_unnamed_addr #5 {
  %.lval_copy_for_ImplicitByvalRewrite.i = alloca { i64, i32* }, align 8 ; [#uses = 4, size/byte = 16]
  %left = alloca { i64, i32* }, align 8           ; [#uses = 3, size/byte = 16]
  %right = alloca { i64, i32* }, align 8          ; [#uses = 3, size/byte = 16]
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 3]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %1 = icmp ugt i64 %r_arg.fca.0.extract, 256     ; [#uses = 1]
  br i1 %1, label %forbody.lr.ph, label %endfor

forbody.lr.ph:                                    ; preds = %0
  %2 = bitcast { i64, i32* }* %.lval_copy_for_ImplicitByvalRewrite.i to i8* ; [#uses = 3]
  %r.sroa.0.0..sroa_idx.i = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.lval_copy_for_ImplicitByvalRewrite.i, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %r.sroa.8.0..sroa_idx17.i = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.lval_copy_for_ImplicitByvalRewrite.i, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %left, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %4 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %left, i64 0, i32 1 ; [#uses = 2, type = i32**]
  %5 = bitcast i32** %4 to i64*                   ; [#uses = 1]
  %6 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %right, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %right, i64 0, i32 1 ; [#uses = 2, type = i32**]
  br label %forbody

forbody:                                          ; preds = %forbody.lr.ph, %endif52
  %.in = phi i32* [ %r_arg.fca.1.extract, %forbody.lr.ph ], [ %.ptr53, %endif52 ] ; [#uses = 11, type = i32*]
  %depth.0197 = phi i64 [ %depth_arg, %forbody.lr.ph ], [ %condtmp.0.sroa.speculated, %endif52 ] ; [#uses = 4, type = i64]
  %r.sroa.0.0194 = phi i64 [ %r_arg.fca.0.extract, %forbody.lr.ph ], [ %.len54, %endif52 ] ; [#uses = 23, type = i64]
  %8 = ptrtoint i32* %.in to i64                  ; [#uses = 1]
  %9 = icmp eq i64 %depth.0197, 0                 ; [#uses = 1]
  br i1 %9, label %if, label %endif

if:                                               ; preds = %forbody
  %.fca.0.insert79 = insertvalue { i64, i32* } undef, i64 %r.sroa.0.0194, 0 ; [#uses = 1]
  %.fca.1.insert82 = insertvalue { i64, i32* } %.fca.0.insert79, i32* %.in, 1 ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T8heapSortZQkFNaNbNiNfQBbZv({ i64, i32* } %.fca.1.insert82) #6
  ret void

endif:                                            ; preds = %forbody
  %10 = icmp ugt i64 %depth.0197, 9223372036854775806 ; [#uses = 1]
  br i1 %10, label %condtrue, label %condfalse

condtrue:                                         ; preds = %endif
  %11 = udiv i64 %depth.0197, 3                   ; [#uses = 1]
  %12 = shl nuw i64 %11, 1                        ; [#uses = 1]
  br label %condend

condfalse:                                        ; preds = %endif
  %13 = shl nuw i64 %depth.0197, 1                ; [#uses = 1]
  %14 = udiv i64 %13, 3                           ; [#uses = 1]
  br label %condend

condend:                                          ; preds = %condfalse, %condtrue
  %condtmp.0.sroa.speculated = phi i64 [ %12, %condtrue ], [ %14, %condfalse ] ; [#uses = 2, type = i64]
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull %2)
  %15 = lshr i64 %r.sroa.0.0194, 1                ; [#uses = 7]
  %16 = icmp ult i64 %r.sroa.0.0194, 512          ; [#uses = 1]
  br i1 %16, label %endif4.i, label %endif.i

endif4.i:                                         ; preds = %condend
  %.fca.0.insert85 = insertvalue { i64, i32* } undef, i64 %r.sroa.0.0194, 0 ; [#uses = 1]
  %.fca.1.insert88 = insertvalue { i64, i32* } %.fca.0.insert85, i32* %.in, 1 ; [#uses = 1]
  %17 = add nsw i64 %r.sroa.0.0194, -1            ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmZQFiFNaNbNiNfQvmmmZv(i64 %17, i64 %15, i64 0, { i64, i32* } %.fca.1.insert88) #6
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  br label %_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm.exit

endif.i:                                          ; preds = %condend
  %18 = lshr i64 %r.sroa.0.0194, 2                ; [#uses = 2]
  store i64 %r.sroa.0.0194, i64* %r.sroa.0.0..sroa_idx.i, align 8
  store i32* %.in, i32** %r.sroa.8.0..sroa_idx17.i, align 8
  %19 = sub nsw i64 %15, %18                      ; [#uses = 1]
  %20 = add nuw i64 %15, %18                      ; [#uses = 1]
  %21 = add i64 %r.sroa.0.0194, -1                ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmTmTmZQFmFNaNbNiNfQzmmmmmZv(i64 %21, i64 %20, i64 %15, i64 %19, i64 0, { i64, i32* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite.i) #6
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %2)
  br label %_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm.exit

_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm.exit: ; preds = %endif.i, %endif4.i
  %bounds.cmp = icmp ult i64 %15, %r.sroa.0.0194  ; [#uses = 1]
  br i1 %bounds.cmp, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %bounds.fail

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm.exit
  %22 = getelementptr inbounds i32, i32* %.in, i64 %15 ; [#uses = 2, type = i32*]
  %23 = load i32, i32* %22, align 4               ; [#uses = 3]
  %24 = add i64 %r.sroa.0.0194, -1                ; [#uses = 2]
  %25 = getelementptr inbounds i32, i32* %.in, i64 %24 ; [#uses = 4, type = i32*]
  %26 = load i32, i32* %25, align 4               ; [#uses = 1]
  store i32 %26, i32* %22, align 4
  store i32 %23, i32* %25, align 4
  br label %forcond5

forcond5:                                         ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit108, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit
  %lessI.0 = phi i64 [ -1, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %27, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit108 ] ; [#uses = 2, type = i64]
  %greaterI.0 = phi i64 [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %35, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit108 ] ; [#uses = 2, type = i64]
  br label %forcond9

forcond9:                                         ; preds = %bounds.ok15, %forcond5
  %lessI.1 = phi i64 [ %lessI.0, %forcond5 ], [ %27, %bounds.ok15 ] ; [#uses = 2, type = i64]
  %27 = add i64 %lessI.1, 1                       ; [#uses = 13]
  %bounds.cmp14 = icmp ult i64 %27, %r.sroa.0.0194 ; [#uses = 1]
  br i1 %bounds.cmp14, label %bounds.ok15, label %bounds.fail16

bounds.ok15:                                      ; preds = %forcond9
  %28 = getelementptr inbounds i32, i32* %.in, i64 %27 ; [#uses = 1, type = i32*]
  %29 = load i32, i32* %28, align 4               ; [#uses = 3]
  %30 = icmp slt i32 %29, %23                     ; [#uses = 1]
  br i1 %30, label %forcond9, label %endfor12

bounds.fail16:                                    ; preds = %forcond9
  %31 = add i64 %lessI.0, 1                       ; [#uses = 2]
  %32 = icmp ugt i64 %r.sroa.0.0194, %31          ; [#uses = 1]
  %umax = select i1 %32, i64 %r.sroa.0.0194, i64 %31 ; [#uses = 1]
  call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2175, i64 %umax, i64 %r.sroa.0.0194) #4
  unreachable

endfor12:                                         ; preds = %bounds.ok15
  %33 = getelementptr inbounds i32, i32* %.in, i64 %27 ; [#uses = 2, type = i32*]
  %.not = icmp ugt i64 %27, %greaterI.0           ; [#uses = 1]
  br i1 %.not, label %assertFailed, label %forcond18

forcond18:                                        ; preds = %endfor12, %bounds.ok26
  %greaterI.1 = phi i64 [ %35, %bounds.ok26 ], [ %greaterI.0, %endfor12 ] ; [#uses = 2, type = i64]
  %34 = icmp eq i64 %greaterI.1, %27              ; [#uses = 1]
  br i1 %34, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit116, label %endif23

endif23:                                          ; preds = %forcond18
  %35 = add i64 %greaterI.1, -1                   ; [#uses = 8]
  %bounds.cmp25 = icmp ult i64 %35, %r.sroa.0.0194 ; [#uses = 1]
  br i1 %bounds.cmp25, label %bounds.ok26, label %bounds.fail27

bounds.ok26:                                      ; preds = %endif23
  %36 = getelementptr inbounds i32, i32* %.in, i64 %35 ; [#uses = 1, type = i32*]
  %37 = load i32, i32* %36, align 4               ; [#uses = 2]
  %38 = icmp slt i32 %23, %37                     ; [#uses = 1]
  br i1 %38, label %forcond18, label %endfor21

bounds.fail27:                                    ; preds = %endif23
  call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2180, i64 %35, i64 %r.sroa.0.0194) #4
  unreachable

endfor21:                                         ; preds = %bounds.ok26
  %39 = getelementptr inbounds i32, i32* %.in, i64 %35 ; [#uses = 1, type = i32*]
  %.not99 = icmp ugt i64 %27, %35                 ; [#uses = 1]
  br i1 %.not99, label %assertFailed33, label %assertPassed32

assertPassed32:                                   ; preds = %endfor21
  %40 = icmp eq i64 %27, %35                      ; [#uses = 1]
  br i1 %40, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit116, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit108

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit108: ; preds = %assertPassed32
  store i32 %37, i32* %33, align 4
  store i32 %29, i32* %39, align 4
  br label %forcond5

assertFailed33:                                   ; preds = %endfor21
  call void @_d_assert_msg({ i64, i8* } { i64 34, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.10, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2182) #4
  unreachable

assertFailed:                                     ; preds = %endfor12
  call void @_d_assert_msg({ i64, i8* } { i64 34, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.10, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2176) #4
  unreachable

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit116: ; preds = %assertPassed32, %forcond18
  %41 = load i32, i32* %25, align 4               ; [#uses = 1]
  store i32 %29, i32* %25, align 4
  store i32 %41, i32* %33, align 4
  %bounds.cmp.up.not = icmp ugt i64 %27, %r.sroa.0.0194 ; [#uses = 1]
  br i1 %bounds.cmp.up.not, label %bounds.fail39, label %bounds.ok38

bounds.ok38:                                      ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit116
  store i64 %27, i64* %3, align 8
  store i64 %8, i64* %5, align 8
  %42 = add i64 %lessI.1, 2                       ; [#uses = 4]
  %bounds.cmp.lo.not = icmp ult i64 %r.sroa.0.0194, %42 ; [#uses = 1]
  br i1 %bounds.cmp.lo.not, label %bounds.fail44, label %bounds.ok43

bounds.ok43:                                      ; preds = %bounds.ok38
  %lowerbound48 = getelementptr inbounds i32, i32* %.in, i64 %42 ; [#uses = 2, type = i32*]
  %43 = sub i64 %r.sroa.0.0194, %42               ; [#uses = 3]
  store i64 %43, i64* %6, align 8
  store i32* %lowerbound48, i32** %7, align 8
  %44 = icmp ugt i64 %43, %27                     ; [#uses = 1]
  br i1 %44, label %if51, label %endif52

if51:                                             ; preds = %bounds.ok43
  call void @_D3std9algorithm8mutation__T4swapTAiZQjFNaNbNiNeKQpKQsZv({ i64, i32* }* nonnull dereferenceable(16) %right, { i64, i32* }* nonnull dereferenceable(16) %left) #6
  %.fca.0.load.pre = load i64, i64* %6, align 8   ; [#uses = 1]
  %.fca.1.load.pre = load i32*, i32** %7, align 8 ; [#uses = 1]
  br label %endif52

endif52:                                          ; preds = %if51, %bounds.ok43
  %.fca.1.load = phi i32* [ %.fca.1.load.pre, %if51 ], [ %lowerbound48, %bounds.ok43 ] ; [#uses = 1, type = i32*]
  %.fca.0.load = phi i64 [ %.fca.0.load.pre, %if51 ], [ %43, %bounds.ok43 ] ; [#uses = 1, type = i64]
  %.fca.0.insert = insertvalue { i64, i32* } undef, i64 %.fca.0.load, 0 ; [#uses = 1]
  %.fca.1.insert = insertvalue { i64, i32* } %.fca.0.insert, i32* %.fca.1.load, 1 ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T13quickSortImplSQBp10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDhFNaNbNiNfQpmZv(i64 %condtmp.0.sroa.speculated, { i64, i32* } %.fca.1.insert) #5
  %.ptr53 = load i32*, i32** %4, align 8          ; [#uses = 2]
  %.len54 = load i64, i64* %3, align 8            ; [#uses = 3]
  %45 = icmp ugt i64 %.len54, 256                 ; [#uses = 1]
  br i1 %45, label %forbody, label %endfor

bounds.fail44:                                    ; preds = %bounds.ok38
  call void @_d_arraybounds_slice({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2188, i64 %42, i64 %r.sroa.0.0194, i64 %r.sroa.0.0194) #4
  unreachable

bounds.fail39:                                    ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit116
  call void @_d_arraybounds_slice({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2188, i64 0, i64 %27, i64 %r.sroa.0.0194) #4
  unreachable

bounds.fail:                                      ; preds = %_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm.exit
  call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2166, i64 %15, i64 %r.sroa.0.0194) #4
  unreachable

endfor:                                           ; preds = %endif52, %0
  %r.sroa.0.0.lcssa = phi i64 [ %r_arg.fca.0.extract, %0 ], [ %.len54, %endif52 ] ; [#uses = 1, type = i64]
  %storemerge.lcssa = phi i32* [ %r_arg.fca.1.extract, %0 ], [ %.ptr53, %endif52 ] ; [#uses = 1, type = i32*]
  %.fca.0.insert91 = insertvalue { i64, i32* } undef, i64 %r.sroa.0.0.lcssa, 0 ; [#uses = 1]
  %.fca.1.insert94 = insertvalue { i64, i32* } %.fca.0.insert91, i32* %storemerge.lcssa, 1 ; [#uses = 1]
  call void @_D3std9algorithm7sorting__T9shortSortSQBk10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDcFNaNbNiNfQpZv({ i64, i32* } %.fca.1.insert94) #6
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std9algorithm7sorting__T8isSortedSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZb({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %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 %if, label %endif

if:                                               ; preds = %bounds.ok4, %forcond, %0
  %merge = phi i1 [ true, %0 ], [ false, %bounds.ok4 ], [ true, %forcond ] ; [#uses = 1, type = i1]
  ret i1 %merge

endif:                                            ; preds = %0
  %1 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 1]
  br label %forcond

forcond:                                          ; preds = %bounds.ok4, %endif
  %__key79.0 = phi i64 [ 0, %endif ], [ %2, %bounds.ok4 ] ; [#uses = 3, type = i64]
  %exitcond.not = icmp eq i64 %__key79.0, %1      ; [#uses = 1]
  br i1 %exitcond.not, label %if, label %bounds.ok4

bounds.ok4:                                       ; preds = %forcond
  %2 = add nuw i64 %__key79.0, 1                  ; [#uses = 2]
  %3 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %2 ; [#uses = 1, type = i32*]
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key79.0 ; [#uses = 1, type = i32*]
  %5 = load i32, i32* %3, align 4                 ; [#uses = 1]
  %6 = load i32, i32* %4, align 4                 ; [#uses = 1]
  %7 = icmp slt i32 %5, %6                        ; [#uses = 1]
  br i1 %7, label %if, label %forcond
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" @_D3std5range__T12assumeSortedVAyaa5_61203c2062TAiZQBjFNaNbNiNfQpZSQCmQCl__T11SortedRangeTQBqVQCla5_61203c2062VEQEfQEe18SortedRangeOptionsi0ZQCn({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %input_arg.fca.0.extract.i = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 1]
  %input_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 1]
  %.fca.0.0.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" undef, i64 %input_arg.fca.0.extract.i, 0, 0 ; [#uses = 1]
  %.fca.0.1.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.0.insert, i32* %input_arg.fca.1.extract.i, 0, 1 ; [#uses = 1]
  ret %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.1.insert
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm6__ctorMFNaNbNcNiNfQCuZSQEaQDz__TQDwTQDmVQDna5_61203c2062VQDni0ZQFb(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull returned %.this_arg, { i64, i32* } %input_arg) local_unnamed_addr #5 {
  %input_arg.fca.0.extract = extractvalue { i64, i32* } %input_arg, 0 ; [#uses = 1]
  %input_arg.fca.1.extract = extractvalue { i64, i32* } %input_arg, 1 ; [#uses = 1]
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %input_arg.fca.0.extract, i64* %1, align 8
  %2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  store i32* %input_arg.fca.1.extract, i32** %2, align 8
  ret %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm5emptyMFNaNbNdNiNfZb(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i = load i64, i64* %1, align 8            ; [#uses = 1]
  %.not.i = icmp eq i64 %.len.i, 0                ; [#uses = 1]
  ret i1 %.not.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm4saveMFNaNbNdNiNfZSQDvQDu__TQDrTQDhVQDia5_61203c2062VQDii0ZQEw(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %.elt = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 1]
  %.elt2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %.unpack3 = load i32*, i32** %.elt2, align 8    ; [#uses = 1]
  %.fca.0.0.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" undef, i64 %.unpack, 0, 0 ; [#uses = 1]
  %.fca.0.1.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.0.insert, i32* %.unpack3, 0, 1 ; [#uses = 1]
  ret %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.1.insert
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32* @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm5frontMFNaNbNcNdNiNfZi(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %.elt = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 1]
  %.not.i = icmp eq i64 %.unpack, 0               ; [#uses = 1]
  br i1 %.not.i, label %assertFailed.i, label %_D3std5range10primitives__T5frontTiZQjFNaNbNcNdNiNfMNkANgiZNgi.exit

assertFailed.i:                                   ; 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) #4
  unreachable

_D3std5range10primitives__T5frontTiZQjFNaNbNcNdNiNfMNkANgiZNgi.exit: ; preds = %0
  %.elt1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %.unpack2 = load i32*, i32** %.elt1, align 8    ; [#uses = 1]
  ret i32* %.unpack2
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm8popFrontMFNaNbNiNfZv(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 2, 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.i, label %_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit

assertFailed.i:                                   ; 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) #4
  unreachable

_D3std5range10primitives__T8popFrontTiZQmFNaNbNiNfMKANgiZv.exit: ; preds = %0
  %2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 2, type = i32**]
  %.ptr.i = load i32*, i32** %2, align 8          ; [#uses = 1]
  %lowerbound.i = getelementptr inbounds i32, i32* %.ptr.i, i64 1 ; [#uses = 1, type = i32*]
  %3 = add i64 %.len.i, -1                        ; [#uses = 1]
  store i64 %3, i64* %1, align 8
  store i32* %lowerbound.i, i32** %2, align 8
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32* @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm4backMFNaNbNcNdNiNfZi(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %.elt = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 2]
  %.not.i = icmp eq i64 %.unpack, 0               ; [#uses = 1]
  br i1 %.not.i, label %assertFailed.i, label %_D3std5range10primitives__T4backTiZQiFNaNbNcNdNiNfMNkANgiZNgi.exit

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

_D3std5range10primitives__T4backTiZQiFNaNbNcNdNiNfMNkANgiZNgi.exit: ; preds = %0
  %.elt1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %.unpack2 = load i32*, i32** %.elt1, align 8    ; [#uses = 1]
  %1 = add i64 %.unpack, -1                       ; [#uses = 1]
  %2 = getelementptr inbounds i32, i32* %.unpack2, i64 %1 ; [#uses = 1, type = i32*]
  ret i32* %2
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm7popBackMFNaNbNiNfZv(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 2, 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.i, label %_D3std5range10primitives__T7popBackTiZQlFNaNbNiNfMKANgiZv.exit

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

_D3std5range10primitives__T7popBackTiZQlFNaNbNiNfMKANgiZv.exit: ; preds = %0
  %2 = add i64 %.len.i, -1                        ; [#uses = 1]
  store i64 %2, i64* %1, align 8
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32* @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm7opIndexMFNaNbNcNiNfmZi(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg, i64 %i_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 2]
  %bounds.cmp = icmp ugt i64 %.len, %i_arg        ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %0
  %2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %.ptr = load i32*, i32** %2, align 8            ; [#uses = 1]
  %3 = getelementptr inbounds i32, i32* %.ptr, i64 %i_arg ; [#uses = 1, type = i32*]
  ret i32* %3

bounds.fail:                                      ; preds = %0
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 59, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.8, i32 0, i32 0) }, i32 10828, i64 %i_arg, i64 %.len) #4
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm7opSliceMFNaNbNiNjNfmmZSQEaQDz__TQDwTQDmVQDna5_61203c2062VQDni0ZQFb(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg, i64 %b_arg, i64 %a_arg) local_unnamed_addr #5 {
  %.not = icmp ult i64 %b_arg, %a_arg             ; [#uses = 1]
  br i1 %.not, label %assertFailed, label %assertPassed

assertPassed:                                     ; preds = %0
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 2]
  %bounds.cmp.up.not = icmp ult i64 %.len, %b_arg ; [#uses = 1]
  br i1 %bounds.cmp.up.not, label %bounds.fail, label %bounds.ok

bounds.ok:                                        ; preds = %assertPassed
  %2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %.ptr = load i32*, i32** %2, align 8            ; [#uses = 1]
  %lowerbound = getelementptr inbounds i32, i32* %.ptr, i64 %a_arg ; [#uses = 1, type = i32*]
  %3 = sub i64 %b_arg, %a_arg                     ; [#uses = 1]
  %.fca.0.0.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" undef, i64 %3, 0, 0 ; [#uses = 1]
  %.fca.0.1.insert = insertvalue %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.0.insert, i32* %lowerbound, 0, 1 ; [#uses = 1]
  ret %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange" %.fca.0.1.insert

bounds.fail:                                      ; preds = %assertPassed
  tail call void @_d_arraybounds_slice({ i64, i8* } { i64 59, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.8, i32 0, i32 0) }, i32 10840, i64 %a_arg, i64 %b_arg, i64 %.len) #4
  unreachable

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 79, i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.9, i32 0, i32 0) }, { i64, i8* } { i64 59, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.8, i32 0, i32 0) }, i32 10835) #4
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm9__mixin246lengthMFNaNbNdNiNfZm(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 1]
  ret i64 %.len
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i32* } @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm7releaseMFNaNbNiNjNfZQCw(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* nonnull %.this_arg) local_unnamed_addr #5 {
  %1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i.i.i.i.i = load i64, i64* %1, align 8    ; [#uses = 2]
  %2 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2.i.i.i.i.i = load i8*, i8** %3, align 8   ; [#uses = 7]
  %4 = shl i64 %.len.i.i.i.i.i, 2                 ; [#uses = 1]
  %5 = bitcast %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg to i8* ; [#uses = 4]
  %6 = getelementptr inbounds i8, i8* %.ptr2.i.i.i.i.i, i64 %4 ; [#uses = 3, type = i8*]
  %7 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg, i64 1, i32 0 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 3]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i.i.i.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i.i.i.i.i.i = icmp ule i8* %.ptr2.i.i.i.i.i, %5 ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i.i.i.i.i.i = and i1 %.not.i.i.i.i.i.i, %10 ; [#uses = 1]
  %11 = ptrtoint i8* %.ptr2.i.i.i.i.i to i64      ; [#uses = 1]
  br i1 %andandval.i.i.i.i.i.i, label %if.i.i.i.i.i.i, label %endif.i.i.i.i.i.i

if.i.i.i.i.i.i:                                   ; preds = %0
  %12 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i.i.i to i64 ; [#uses = 1]
  %13 = ptrtoint %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %.this_arg to i64 ; [#uses = 1]
  %14 = sub i64 %12, %13                          ; [#uses = 1]
  %15 = insertvalue { i64, i8* } undef, i64 %14, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i8* } %15, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i

endif.i.i.i.i.i.i:                                ; preds = %0
  %.not28.i.i.i.i.i.i = icmp uge i8* %.ptr2.i.i.i.i.i, %5 ; [#uses = 1]
  %17 = icmp ult i8* %.ptr2.i.i.i.i.i, %8         ; [#uses = 1]
  %andandval17.i.i.i.i.i.i = and i1 %.not28.i.i.i.i.i.i, %17 ; [#uses = 1]
  br i1 %andandval17.i.i.i.i.i.i, label %if18.i.i.i.i.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i

if18.i.i.i.i.i.i:                                 ; preds = %endif.i.i.i.i.i.i
  %18 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i.i.i to i64 ; [#uses = 1]
  %19 = sub i64 %18, %11                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2.i.i.i.i.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i: ; preds = %if18.i.i.i.i.i.i, %endif.i.i.i.i.i.i, %if.i.i.i.i.i.i
  %22 = phi { i64, i8* } [ %16, %if.i.i.i.i.i.i ], [ %21, %if18.i.i.i.i.i.i ], [ zeroinitializer, %endif.i.i.i.i.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i.i.i.i.i = extractvalue { i64, i8* } %22, 0 ; [#uses = 1]
  %.not.i.i.i.i = icmp eq i64 %.len1.i.i.i.i.i, 0 ; [#uses = 1]
  br i1 %.not.i.i.i.i, label %_D3std9algorithm8mutation__T4moveTAiZQjFNaNbNiNfMNkKQsZQv.exit, label %assertFailed.i.i.i.i

assertFailed.i.i.i.i:                             ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 72, i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.27, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 1429) #4
  unreachable

_D3std9algorithm8mutation__T4moveTAiZQjFNaNbNiNfMNkKQsZQv.exit: ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i.i
  %.fca.0.insert.i.i.i = insertvalue { i64, i32* } undef, i64 %.len.i.i.i.i.i, 0 ; [#uses = 1]
  %23 = bitcast i8* %.ptr2.i.i.i.i.i to i32*      ; [#uses = 1]
  %.fca.1.insert6.i.i.i = insertvalue { i64, i32* } %.fca.0.insert.i.i.i, i32* %23, 1 ; [#uses = 1]
  ret { i64, i32* } %.fca.1.insert6.i.i.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i32* } @_D3std9algorithm8mutation__T4moveTAiZQjFNaNbNiNfMNkKQsZQv({ i64, i32* }* dereferenceable(16) %source) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i.i.i.i = load i64, i64* %1, align 8      ; [#uses = 2]
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2.i.i.i.i = load i8*, i8** %3, align 8     ; [#uses = 7]
  %4 = shl i64 %.len.i.i.i.i, 2                   ; [#uses = 1]
  %5 = bitcast { i64, i32* }* %source to i8*      ; [#uses = 4]
  %6 = getelementptr inbounds i8, i8* %.ptr2.i.i.i.i, i64 %4 ; [#uses = 3, type = i8*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 3]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i.i.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i.i.i.i.i = icmp ule i8* %.ptr2.i.i.i.i, %5 ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i.i.i.i.i = and i1 %.not.i.i.i.i.i, %10 ; [#uses = 1]
  %11 = ptrtoint i8* %.ptr2.i.i.i.i to i64        ; [#uses = 1]
  br i1 %andandval.i.i.i.i.i, label %if.i.i.i.i.i, label %endif.i.i.i.i.i

if.i.i.i.i.i:                                     ; preds = %0
  %12 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i.i to i64 ; [#uses = 1]
  %13 = ptrtoint { i64, i32* }* %source to i64    ; [#uses = 1]
  %14 = sub i64 %12, %13                          ; [#uses = 1]
  %15 = insertvalue { i64, i8* } undef, i64 %14, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i8* } %15, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i

endif.i.i.i.i.i:                                  ; preds = %0
  %.not28.i.i.i.i.i = icmp uge i8* %.ptr2.i.i.i.i, %5 ; [#uses = 1]
  %17 = icmp ult i8* %.ptr2.i.i.i.i, %8           ; [#uses = 1]
  %andandval17.i.i.i.i.i = and i1 %.not28.i.i.i.i.i, %17 ; [#uses = 1]
  br i1 %andandval17.i.i.i.i.i, label %if18.i.i.i.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i

if18.i.i.i.i.i:                                   ; preds = %endif.i.i.i.i.i
  %18 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i.i to i64 ; [#uses = 1]
  %19 = sub i64 %18, %11                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2.i.i.i.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i: ; preds = %if18.i.i.i.i.i, %endif.i.i.i.i.i, %if.i.i.i.i.i
  %22 = phi { i64, i8* } [ %16, %if.i.i.i.i.i ], [ %21, %if18.i.i.i.i.i ], [ zeroinitializer, %endif.i.i.i.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i.i.i.i = extractvalue { i64, i8* } %22, 0 ; [#uses = 1]
  %.not.i.i.i = icmp eq i64 %.len1.i.i.i.i, 0     ; [#uses = 1]
  br i1 %.not.i.i.i, label %_D3std9algorithm8mutation__T8moveImplTAiZQnFNaNbNiNfMNkKQsZQv.exit, label %assertFailed.i.i.i

assertFailed.i.i.i:                               ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 72, i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.27, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 1429) #4
  unreachable

_D3std9algorithm8mutation__T8moveImplTAiZQnFNaNbNiNfMNkKQsZQv.exit: ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i.i
  %.fca.0.insert.i.i = insertvalue { i64, i32* } undef, i64 %.len.i.i.i.i, 0 ; [#uses = 1]
  %23 = bitcast i8* %.ptr2.i.i.i.i to i32*        ; [#uses = 1]
  %.fca.1.insert6.i.i = insertvalue { i64, i32* } %.fca.0.insert.i.i, i32* %23, 1 ; [#uses = 1]
  ret { i64, i32* } %.fca.1.insert6.i.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm11__xopEqualsFKxSQDtQDs__TQDpTQDfVQDga5_61203c2062VQDgi0ZQEuKxQBuZb(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* dereferenceable(16) %q, %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* dereferenceable(16) %p) local_unnamed_addr #5 {
  %.elt = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %p, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack = load i64, i64* %.elt, align 8        ; [#uses = 3]
  %.elt1 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %p, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %1 = bitcast i32** %.elt1 to i8**               ; [#uses = 1]
  %.unpack27 = load i8*, i8** %1, align 8         ; [#uses = 1]
  %.elt3 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %q, i64 0, i32 0, i32 0 ; [#uses = 1, type = i64*]
  %.unpack4 = load i64, i64* %.elt3, align 8      ; [#uses = 1]
  %.elt5 = getelementptr inbounds %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange", %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %q, i64 0, i32 0, i32 1 ; [#uses = 1, type = i32**]
  %2 = bitcast i32** %.elt5 to i8**               ; [#uses = 1]
  %.unpack68 = load i8*, i8** %2, align 8         ; [#uses = 1]
  %.not.i = icmp eq i64 %.unpack, %.unpack4       ; [#uses = 1]
  br i1 %.not.i, label %endif.i, label %_D4core8internal5array8equality__T8__equalsTiTiZQoFNaNbNiNeMxAiMxQeZb.exit

endif.i:                                          ; preds = %0
  %3 = icmp eq i64 %.unpack, 0                    ; [#uses = 1]
  br i1 %3, label %_D4core8internal5array8equality__T8__equalsTiTiZQoFNaNbNiNeMxAiMxQeZb.exit, label %oror.i

oror.i:                                           ; preds = %endif.i
  %4 = shl i64 %.unpack, 2                        ; [#uses = 1]
  %bcmp.i = tail call i32 @bcmp(i8* %.unpack27, i8* %.unpack68, i64 %4) ; [#uses = 1]
  %5 = icmp eq i32 %bcmp.i, 0                     ; [#uses = 1]
  br label %_D4core8internal5array8equality__T8__equalsTiTiZQoFNaNbNiNeMxAiMxQeZb.exit

_D4core8internal5array8equality__T8__equalsTiTiZQoFNaNbNiNeMxAiMxQeZb.exit: ; preds = %0, %endif.i, %oror.i
  %merge.i = phi i1 [ false, %0 ], [ true, %endif.i ], [ %5, %oror.i ] ; [#uses = 1, type = i1]
  ret i1 %merge.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D4core8internal5array8equality__T8__equalsTiTiZQoFNaNbNiNeMxAiMxQeZb({ i64, i32* } %rhs_arg, { i64, i32* } %lhs_arg) local_unnamed_addr #5 {
  %lhs_arg.fca.0.extract = extractvalue { i64, i32* } %lhs_arg, 0 ; [#uses = 3]
  %lhs_arg.fca.1.extract = extractvalue { i64, i32* } %lhs_arg, 1 ; [#uses = 1]
  %rhs_arg.fca.0.extract = extractvalue { i64, i32* } %rhs_arg, 0 ; [#uses = 1]
  %rhs_arg.fca.1.extract = extractvalue { i64, i32* } %rhs_arg, 1 ; [#uses = 1]
  %.not = icmp eq i64 %lhs_arg.fca.0.extract, %rhs_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not, label %endif, label %if

if:                                               ; preds = %0, %endif, %oror
  %merge = phi i1 [ false, %0 ], [ true, %endif ], [ %5, %oror ] ; [#uses = 1, type = i1]
  ret i1 %merge

endif:                                            ; preds = %0
  %1 = icmp eq i64 %lhs_arg.fca.0.extract, 0      ; [#uses = 1]
  br i1 %1, label %if, label %oror

oror:                                             ; preds = %endif
  %2 = bitcast i32* %lhs_arg.fca.1.extract to i8* ; [#uses = 1]
  %3 = bitcast i32* %rhs_arg.fca.1.extract to i8* ; [#uses = 1]
  %4 = shl i64 %lhs_arg.fca.0.extract, 2          ; [#uses = 1]
  %bcmp = tail call i32 @bcmp(i8* %2, i8* %3, i64 %4) ; [#uses = 1]
  %5 = icmp eq i32 %bcmp, 0                       ; [#uses = 1]
  br label %if
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std5range__T11SortedRangeTAiVAyaa5_61203c2062VEQBwQBv18SortedRangeOptionsi0ZQCm9__xtoHashFNbNeKxSQDuQDt__TQDqTQDgVQDha5_61203c2062VQDhi0ZQEvZm(%"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* dereferenceable(16) %p) local_unnamed_addr #5 {
unrolledstmt:
  %0 = load [19 x i8*]*, [19 x i8*]** getelementptr inbounds (%object.TypeInfo_Const, %object.TypeInfo_Const* @_D12TypeInfo_xAi6__initZ, i64 0, i32 0), align 8 ; [#uses = 1]
  %"getHash@vtbl" = getelementptr inbounds [19 x i8*], [19 x i8*]* %0, i64 0, i64 5 ; [#uses = 1, type = i8**]
  %1 = bitcast i8** %"getHash@vtbl" to i64 (%object.TypeInfo_Const*, i8*)** ; [#uses = 1]
  %2 = load i64 (%object.TypeInfo_Const*, i8*)*, i64 (%object.TypeInfo_Const*, i8*)** %1, align 8 ; [#uses = 1]
  %3 = bitcast %"std.range.SortedRange!(int[], \22a < b\22, SortedRangeOptions.assumeSorted).SortedRange"* %p to i8* ; [#uses = 1]
  %4 = tail call i64 %2(%object.TypeInfo_Const* nonnull @_D12TypeInfo_xAi6__initZ, i8* nonnull %3) ; [#uses = 1]
  ret i64 %4
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D4core8internal5array8equality__T8__equalsTaTaZQoFNaNbNiNeMxAaMxQeZb({ i64, i8* } %rhs_arg, { i64, i8* } %lhs_arg) local_unnamed_addr #5 {
  %lhs_arg.fca.0.extract = extractvalue { i64, i8* } %lhs_arg, 0 ; [#uses = 3]
  %lhs_arg.fca.1.extract = extractvalue { i64, i8* } %lhs_arg, 1 ; [#uses = 1]
  %rhs_arg.fca.0.extract = extractvalue { i64, i8* } %rhs_arg, 0 ; [#uses = 1]
  %rhs_arg.fca.1.extract = extractvalue { i64, i8* } %rhs_arg, 1 ; [#uses = 1]
  %.not = icmp eq i64 %lhs_arg.fca.0.extract, %rhs_arg.fca.0.extract ; [#uses = 1]
  br i1 %.not, label %endif, label %if

if:                                               ; preds = %0, %endif, %oror
  %merge = phi i1 [ false, %0 ], [ true, %endif ], [ %2, %oror ] ; [#uses = 1, type = i1]
  ret i1 %merge

endif:                                            ; preds = %0
  %1 = icmp eq i64 %lhs_arg.fca.0.extract, 0      ; [#uses = 1]
  br i1 %1, label %if, label %oror

oror:                                             ; preds = %endif
  %bcmp = tail call i32 @bcmp(i8* %lhs_arg.fca.1.extract, i8* %rhs_arg.fca.1.extract, i64 %lhs_arg.fca.0.extract) ; [#uses = 1]
  %2 = icmp eq i32 %bcmp, 0                       ; [#uses = 1]
  br label %if
}

; [#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 #5 {
  %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 = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T8heapSortZQkFNaNbNiNfQBbZv({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 11]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 5]
  %1 = icmp ult i64 %r_arg.fca.0.extract, 2       ; [#uses = 1]
  br i1 %1, label %if, label %endif

if:                                               ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, %_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv.exit, %0
  ret void

endif:                                            ; preds = %0
  %2 = lshr i64 %r_arg.fca.0.extract, 1           ; [#uses = 2]
  %.not7.i = icmp eq i64 %2, 0                    ; [#uses = 1]
  br i1 %.not7.i, label %forbody.i.i.preheader, label %forbody.i

forbody.i:                                        ; preds = %endif, %forbody.i
  %.in.i = phi i64 [ %3, %forbody.i ], [ %2, %endif ] ; [#uses = 1, type = i64]
  %3 = add nsw i64 %.in.i, -1                     ; [#uses = 3]
  tail call void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T8siftDownZQkFNaNbNiNfQBbmymZv(i64 %r_arg.fca.0.extract, i64 %3, { i64, i32* } %r_arg) #6
  %.not.i = icmp eq i64 %3, 0                     ; [#uses = 1]
  br i1 %.not.i, label %endfor.i, label %forbody.i

endfor.i:                                         ; preds = %forbody.i
  %4 = icmp ugt i64 %r_arg.fca.0.extract, 1       ; [#uses = 1]
  br i1 %4, label %forbody.i.i.preheader, label %_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv.exit

forbody.i.i.preheader:                            ; preds = %endif, %endfor.i
  br label %forbody.i.i

forbody.i.i:                                      ; preds = %forbody.i.i.preheader, %endif.i.i
  %parent.018.i.i = phi i64 [ %12, %endif.i.i ], [ 0, %forbody.i.i.preheader ] ; [#uses = 4, type = i64]
  %__key74.017.i.i = phi i64 [ %13, %endif.i.i ], [ 1, %forbody.i.i.preheader ] ; [#uses = 3, type = i64]
  %bounds.cmp.i.i = icmp ult i64 %parent.018.i.i, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp.i.i, label %bounds.ok4.i.i, label %bounds.fail.i.i

bounds.ok4.i.i:                                   ; preds = %forbody.i.i
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.018.i.i ; [#uses = 1, type = i32*]
  %6 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key74.017.i.i ; [#uses = 1, type = i32*]
  %7 = load i32, i32* %5, align 4                 ; [#uses = 1]
  %8 = load i32, i32* %6, align 4                 ; [#uses = 1]
  %9 = icmp slt i32 %7, %8                        ; [#uses = 1]
  br i1 %9, label %assertFailed.i, label %endif.i.i

endif.i.i:                                        ; preds = %bounds.ok4.i.i
  %10 = and i64 %__key74.017.i.i, 1               ; [#uses = 1]
  %11 = xor i64 %10, 1                            ; [#uses = 1]
  %12 = add i64 %11, %parent.018.i.i              ; [#uses = 1]
  %13 = add nuw i64 %__key74.017.i.i, 1           ; [#uses = 2]
  %exitcond.not.i.i = icmp eq i64 %13, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not.i.i, label %_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv.exit, label %forbody.i.i

bounds.fail.i.i:                                  ; preds = %forbody.i.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2247, i64 %parent.018.i.i, i64 %r_arg.fca.0.extract) #4
  unreachable

assertFailed.i:                                   ; preds = %bounds.ok4.i.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 15, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2239) #4
  unreachable

_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv.exit: ; preds = %endif.i.i, %endfor.i
  %i.017 = add i64 %r_arg.fca.0.extract, -1       ; [#uses = 2]
  %.not18 = icmp eq i64 %i.017, 0                 ; [#uses = 1]
  br i1 %.not18, label %if, label %forbody.lr.ph

forbody.lr.ph:                                    ; preds = %_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv.exit
  %bounds.cmp.i.not = icmp eq i64 %r_arg.fca.0.extract, 0 ; [#uses = 1]
  br i1 %bounds.cmp.i.not, label %bounds.fail.i.split, label %forbody

forbody:                                          ; preds = %forbody.lr.ph, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit
  %i.019 = phi i64 [ %i.0, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %i.017, %forbody.lr.ph ] ; [#uses = 5, type = i64]
  %bounds.cmp2.i = icmp ugt i64 %r_arg.fca.0.extract, %i.019 ; [#uses = 1]
  br i1 %bounds.cmp2.i, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %bounds.fail4.i

bounds.fail4.i:                                   ; preds = %forbody
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %i.019, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail.i.split:                              ; preds = %forbody.lr.ph
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 0, i64 0) #4
  unreachable

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %forbody
  %14 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %i.019 ; [#uses = 2, type = i32*]
  %15 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 1]
  %16 = load i32, i32* %14, align 4               ; [#uses = 1]
  store i32 %16, i32* %r_arg.fca.1.extract, align 4
  store i32 %15, i32* %14, align 4
  tail call void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9percolateZQlFNaNbNiNfQBcmymZv(i64 %i.019, i64 0, { i64, i32* } %r_arg) #6
  %i.0 = add i64 %i.019, -1                       ; [#uses = 2]
  %.not = icmp eq i64 %i.0, 0                     ; [#uses = 1]
  br i1 %.not, label %if, label %forbody
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std9algorithm7sorting__T8getPivotSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDbFNaNbNiNfQpZm({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %.lval_copy_for_ImplicitByvalRewrite = alloca { i64, i32* }, align 8 ; [#uses = 3, size/byte = 16]
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 7]
  %1 = lshr i64 %r_arg.fca.0.extract, 1           ; [#uses = 6]
  %2 = icmp ult i64 %r_arg.fca.0.extract, 512     ; [#uses = 1]
  br i1 %2, label %if, label %endif

if:                                               ; preds = %0
  %3 = icmp ugt i64 %r_arg.fca.0.extract, 31      ; [#uses = 1]
  br i1 %3, label %if3, label %endif4

if3:                                              ; preds = %if
  %4 = add nsw i64 %r_arg.fca.0.extract, -1       ; [#uses = 1]
  tail call void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmZQFiFNaNbNiNfQvmmmZv(i64 %4, i64 %1, i64 0, { i64, i32* } %r_arg) #6
  br label %endif4

endif4:                                           ; preds = %if3, %if
  ret i64 %1

endif:                                            ; preds = %0
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 1]
  %5 = lshr i64 %r_arg.fca.0.extract, 2           ; [#uses = 2]
  %r.sroa.0.0..sroa_idx = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.lval_copy_for_ImplicitByvalRewrite, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %r_arg.fca.0.extract, i64* %r.sroa.0.0..sroa_idx, align 8
  %r.sroa.8.0..sroa_idx17 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %.lval_copy_for_ImplicitByvalRewrite, i64 0, i32 1 ; [#uses = 1, type = i32**]
  store i32* %r_arg.fca.1.extract, i32** %r.sroa.8.0..sroa_idx17, align 8
  %6 = sub nsw i64 %1, %5                         ; [#uses = 1]
  %7 = add nuw i64 %1, %5                         ; [#uses = 1]
  %8 = add i64 %r_arg.fca.0.extract, -1           ; [#uses = 1]
  tail call void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmTmTmZQFmFNaNbNiNfQzmmmmmZv(i64 %8, i64 %7, i64 %1, i64 %6, i64 0, { i64, i32* }* nonnull byval align 8 %.lval_copy_for_ImplicitByvalRewrite) #6
  ret i64 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv(i64 %i2_arg, i64 %i1_arg, { i64, i32* }* dereferenceable(16) %r) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %r, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 4]
  %bounds.cmp = icmp ugt i64 %.len, %i1_arg       ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %0
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %r, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %.ptr = load i32*, i32** %2, align 8            ; [#uses = 2]
  %bounds.cmp2 = icmp ugt i64 %.len, %i2_arg      ; [#uses = 1]
  br i1 %bounds.cmp2, label %bounds.ok3, label %bounds.fail4

bounds.ok3:                                       ; preds = %bounds.ok
  %3 = getelementptr inbounds i32, i32* %.ptr, i64 %i1_arg ; [#uses = 2, type = i32*]
  %4 = getelementptr inbounds i32, i32* %.ptr, i64 %i2_arg ; [#uses = 2, type = i32*]
  %5 = load i32, i32* %3, align 4                 ; [#uses = 1]
  %6 = load i32, i32* %4, align 4                 ; [#uses = 1]
  store i32 %6, i32* %3, align 4
  store i32 %5, i32* %4, align 4
  ret void

bounds.fail4:                                     ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %i2_arg, i64 %.len) #4
  unreachable

bounds.fail:                                      ; preds = %0
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %i1_arg, i64 %.len) #4
  unreachable
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm8mutation__T4swapTAiZQjFNaNbNiNeKQpKQsZv({ i64, i32* }* dereferenceable(16) %rhs, { i64, i32* }* dereferenceable(16) %lhs) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %lhs, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %.len.i = load i64, i64* %1, align 8            ; [#uses = 2]
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %lhs, i64 0, i32 1 ; [#uses = 2, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2.i = load i8*, i8** %3, align 8           ; [#uses = 10]
  %4 = shl i64 %.len.i, 2                         ; [#uses = 1]
  %5 = bitcast { i64, i32* }* %lhs to i8*         ; [#uses = 8]
  %6 = getelementptr inbounds i8, i8* %.ptr2.i, i64 %4 ; [#uses = 6, type = i8*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %lhs, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 6]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i.i = icmp ule i8* %.ptr2.i, %5           ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i.i = and i1 %.not.i.i, %10          ; [#uses = 1]
  %11 = ptrtoint i8* %.ptr2.i to i64              ; [#uses = 3]
  br i1 %andandval.i.i, label %if.i.i, label %endif.i.i

if.i.i:                                           ; preds = %0
  %12 = ptrtoint i8* %b_arg.a_arg.i.i.i to i64    ; [#uses = 1]
  %13 = ptrtoint { i64, i32* }* %lhs to i64       ; [#uses = 1]
  %14 = sub i64 %12, %13                          ; [#uses = 1]
  %15 = insertvalue { i64, i8* } undef, i64 %14, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i8* } %15, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

endif.i.i:                                        ; preds = %0
  %.not28.i.i = icmp uge i8* %.ptr2.i, %5         ; [#uses = 1]
  %17 = icmp ult i8* %.ptr2.i, %8                 ; [#uses = 1]
  %andandval17.i.i = and i1 %.not28.i.i, %17      ; [#uses = 1]
  br i1 %andandval17.i.i, label %if18.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

if18.i.i:                                         ; preds = %endif.i.i
  %18 = ptrtoint i8* %b_arg.a_arg.i.i.i to i64    ; [#uses = 1]
  %19 = sub i64 %18, %11                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit: ; preds = %if.i.i, %endif.i.i, %if18.i.i
  %22 = phi { i64, i8* } [ %16, %if.i.i ], [ %21, %if18.i.i ], [ zeroinitializer, %endif.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i = extractvalue { i64, i8* } %22, 0     ; [#uses = 1]
  %.not = icmp eq i64 %.len1.i, 0                 ; [#uses = 1]
  br i1 %.not, label %assertPassed, label %assertFailed

assertPassed:                                     ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit
  %23 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %rhs, i64 0, i32 0 ; [#uses = 2, type = i64*]
  %.len.i37 = load i64, i64* %23, align 8         ; [#uses = 2]
  %24 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %rhs, i64 0, i32 1 ; [#uses = 2, type = i32**]
  %25 = bitcast i32** %24 to i8**                 ; [#uses = 1]
  %.ptr2.i38 = load i8*, i8** %25, align 8        ; [#uses = 10]
  %26 = shl i64 %.len.i37, 2                      ; [#uses = 1]
  %27 = bitcast { i64, i32* }* %rhs to i8*        ; [#uses = 8]
  %28 = getelementptr inbounds i8, i8* %.ptr2.i38, i64 %26 ; [#uses = 6, type = i8*]
  %29 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %rhs, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %30 = bitcast { i64, i32* }* %29 to i8*         ; [#uses = 6]
  %31 = icmp ugt i8* %28, %30                     ; [#uses = 1]
  %b_arg.a_arg.i.i.i39 = select i1 %31, i8* %30, i8* %28 ; [#uses = 2]
  %.not.i.i40 = icmp ule i8* %.ptr2.i38, %27      ; [#uses = 1]
  %32 = icmp ugt i8* %28, %27                     ; [#uses = 1]
  %andandval.i.i41 = and i1 %.not.i.i40, %32      ; [#uses = 1]
  %33 = ptrtoint i8* %.ptr2.i38 to i64            ; [#uses = 3]
  br i1 %andandval.i.i41, label %if.i.i42, label %endif.i.i45

if.i.i42:                                         ; preds = %assertPassed
  %34 = ptrtoint i8* %b_arg.a_arg.i.i.i39 to i64  ; [#uses = 1]
  %35 = ptrtoint { i64, i32* }* %rhs to i64       ; [#uses = 1]
  %36 = sub i64 %34, %35                          ; [#uses = 1]
  %37 = insertvalue { i64, i8* } undef, i64 %36, 0 ; [#uses = 1]
  %38 = insertvalue { i64, i8* } %37, i8* %27, 1  ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48

endif.i.i45:                                      ; preds = %assertPassed
  %.not28.i.i43 = icmp uge i8* %.ptr2.i38, %27    ; [#uses = 1]
  %39 = icmp ult i8* %.ptr2.i38, %30              ; [#uses = 1]
  %andandval17.i.i44 = and i1 %.not28.i.i43, %39  ; [#uses = 1]
  br i1 %andandval17.i.i44, label %if18.i.i46, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48

if18.i.i46:                                       ; preds = %endif.i.i45
  %40 = ptrtoint i8* %b_arg.a_arg.i.i.i39 to i64  ; [#uses = 1]
  %41 = sub i64 %40, %33                          ; [#uses = 1]
  %42 = insertvalue { i64, i8* } undef, i64 %41, 0 ; [#uses = 1]
  %43 = insertvalue { i64, i8* } %42, i8* %.ptr2.i38, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48: ; preds = %if.i.i42, %endif.i.i45, %if18.i.i46
  %44 = phi { i64, i8* } [ %38, %if.i.i42 ], [ %43, %if18.i.i46 ], [ zeroinitializer, %endif.i.i45 ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i47 = extractvalue { i64, i8* } %44, 0   ; [#uses = 1]
  %.not49 = icmp eq i64 %.len1.i47, 0             ; [#uses = 1]
  br i1 %.not49, label %assertPassed1, label %assertFailed2

assertPassed1:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48
  %45 = icmp ugt i8* %6, %30                      ; [#uses = 1]
  %b_arg.a_arg.i.i.i27 = select i1 %45, i8* %30, i8* %6 ; [#uses = 2]
  %.not.i.i28 = icmp ule i8* %.ptr2.i, %27        ; [#uses = 1]
  %46 = icmp ugt i8* %6, %27                      ; [#uses = 1]
  %andandval.i.i29 = and i1 %.not.i.i28, %46      ; [#uses = 1]
  br i1 %andandval.i.i29, label %if.i.i30, label %endif.i.i33

if.i.i30:                                         ; preds = %assertPassed1
  %47 = ptrtoint i8* %b_arg.a_arg.i.i.i27 to i64  ; [#uses = 1]
  %48 = ptrtoint { i64, i32* }* %rhs to i64       ; [#uses = 1]
  %49 = sub i64 %47, %48                          ; [#uses = 1]
  %50 = insertvalue { i64, i8* } undef, i64 %49, 0 ; [#uses = 1]
  %51 = insertvalue { i64, i8* } %50, i8* %27, 1  ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36

endif.i.i33:                                      ; preds = %assertPassed1
  %.not28.i.i31 = icmp uge i8* %.ptr2.i, %27      ; [#uses = 1]
  %52 = icmp ult i8* %.ptr2.i, %30                ; [#uses = 1]
  %andandval17.i.i32 = and i1 %.not28.i.i31, %52  ; [#uses = 1]
  br i1 %andandval17.i.i32, label %if18.i.i34, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36

if18.i.i34:                                       ; preds = %endif.i.i33
  %53 = ptrtoint i8* %b_arg.a_arg.i.i.i27 to i64  ; [#uses = 1]
  %54 = sub i64 %53, %11                          ; [#uses = 1]
  %55 = insertvalue { i64, i8* } undef, i64 %54, 0 ; [#uses = 1]
  %56 = insertvalue { i64, i8* } %55, i8* %.ptr2.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36: ; preds = %if.i.i30, %endif.i.i33, %if18.i.i34
  %57 = phi { i64, i8* } [ %51, %if.i.i30 ], [ %56, %if18.i.i34 ], [ zeroinitializer, %endif.i.i33 ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i35 = extractvalue { i64, i8* } %57, 0   ; [#uses = 1]
  %.not50 = icmp eq i64 %.len1.i35, 0             ; [#uses = 1]
  br i1 %.not50, label %assertPassed3, label %assertFailed4

assertPassed3:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36
  %58 = icmp ugt i8* %28, %8                      ; [#uses = 1]
  %b_arg.a_arg.i.i.i15 = select i1 %58, i8* %8, i8* %28 ; [#uses = 2]
  %.not.i.i16 = icmp ule i8* %.ptr2.i38, %5       ; [#uses = 1]
  %59 = icmp ugt i8* %28, %5                      ; [#uses = 1]
  %andandval.i.i17 = and i1 %.not.i.i16, %59      ; [#uses = 1]
  br i1 %andandval.i.i17, label %if.i.i18, label %endif.i.i21

if.i.i18:                                         ; preds = %assertPassed3
  %60 = ptrtoint i8* %b_arg.a_arg.i.i.i15 to i64  ; [#uses = 1]
  %61 = ptrtoint { i64, i32* }* %lhs to i64       ; [#uses = 1]
  %62 = sub i64 %60, %61                          ; [#uses = 1]
  %63 = insertvalue { i64, i8* } undef, i64 %62, 0 ; [#uses = 1]
  %64 = insertvalue { i64, i8* } %63, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24

endif.i.i21:                                      ; preds = %assertPassed3
  %.not28.i.i19 = icmp uge i8* %.ptr2.i38, %5     ; [#uses = 1]
  %65 = icmp ult i8* %.ptr2.i38, %8               ; [#uses = 1]
  %andandval17.i.i20 = and i1 %.not28.i.i19, %65  ; [#uses = 1]
  br i1 %andandval17.i.i20, label %if18.i.i22, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24

if18.i.i22:                                       ; preds = %endif.i.i21
  %66 = ptrtoint i8* %b_arg.a_arg.i.i.i15 to i64  ; [#uses = 1]
  %67 = sub i64 %66, %33                          ; [#uses = 1]
  %68 = insertvalue { i64, i8* } undef, i64 %67, 0 ; [#uses = 1]
  %69 = insertvalue { i64, i8* } %68, i8* %.ptr2.i38, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24: ; preds = %if.i.i18, %endif.i.i21, %if18.i.i22
  %70 = phi { i64, i8* } [ %64, %if.i.i18 ], [ %69, %if18.i.i22 ], [ zeroinitializer, %endif.i.i21 ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i23 = extractvalue { i64, i8* } %70, 0   ; [#uses = 1]
  %.not51 = icmp eq i64 %.len1.i23, 0             ; [#uses = 1]
  br i1 %.not51, label %assertPassed5, label %assertFailed6

assertPassed5:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24
  %71 = bitcast i32** %2 to i64*                  ; [#uses = 1]
  %72 = bitcast i32** %24 to i64*                 ; [#uses = 1]
  store i64 %.len.i37, i64* %1, align 8
  store i64 %33, i64* %71, align 8
  store i64 %.len.i, i64* %23, align 8
  store i64 %11, i64* %72, align 8
  ret void

assertFailed6:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit24
  tail call void @_d_assert_msg({ i64, i8* } { i64 24, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.22, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 2831) #4
  unreachable

assertFailed4:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit36
  tail call void @_d_assert_msg({ i64, i8* } { i64 24, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.21, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 2830) #4
  unreachable

assertFailed2:                                    ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit48
  tail call void @_d_assert_msg({ i64, i8* } { i64 27, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.20, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 2829) #4
  unreachable

assertFailed:                                     ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit
  tail call void @_d_assert_msg({ i64, i8* } { i64 27, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.19, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 2828) #4
  unreachable
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T9shortSortSQBk10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQDcFNaNbNiNfQpZv({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 11]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 22]
  switch i64 %r_arg.fca.0.extract, label %bounds.ok137 [
    i64 0, label %case1
    i64 1, label %case1
    i64 2, label %bounds.ok5
    i64 3, label %bounds.ok17
    i64 4, label %bounds.ok81
  ]

case1:                                            ; preds = %endif164, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262, %bounds.ok62, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit246, %bounds.ok37, %0, %0, %bounds.ok137, %bounds.ok124, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit214, %bounds.ok5, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit
  ret void

bounds.ok5:                                       ; preds = %0
  %1 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 2, type = i32*]
  %2 = load i32, i32* %1, align 4                 ; [#uses = 2]
  %3 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 2]
  %4 = icmp slt i32 %2, %3                        ; [#uses = 1]
  br i1 %4, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %case1

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok5
  store i32 %2, i32* %r_arg.fca.1.extract, align 4
  store i32 %3, i32* %1, align 4
  br label %case1

bounds.ok17:                                      ; preds = %0
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 2 ; [#uses = 4, type = i32*]
  %6 = load i32, i32* %5, align 4                 ; [#uses = 7]
  %7 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 6]
  %8 = icmp slt i32 %6, %7                        ; [#uses = 1]
  %9 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 5, type = i32*]
  %10 = load i32, i32* %9, align 4                ; [#uses = 8]
  br i1 %8, label %bounds.ok29, label %bounds.ok49

bounds.ok29:                                      ; preds = %bounds.ok17
  %11 = icmp slt i32 %7, %10                      ; [#uses = 1]
  br i1 %11, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230, label %bounds.ok37

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230: ; preds = %bounds.ok29
  store i32 %7, i32* %9, align 4
  store i32 %6, i32* %r_arg.fca.1.extract, align 4
  store i32 %10, i32* %5, align 4
  br label %case1

bounds.ok37:                                      ; preds = %bounds.ok29
  store i32 %6, i32* %r_arg.fca.1.extract, align 4
  store i32 %7, i32* %5, align 4
  %12 = icmp slt i32 %10, %6                      ; [#uses = 1]
  br i1 %12, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit246, label %case1

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit246: ; preds = %bounds.ok37
  store i32 %10, i32* %r_arg.fca.1.extract, align 4
  store i32 %6, i32* %9, align 4
  br label %case1

bounds.ok49:                                      ; preds = %bounds.ok17
  %13 = icmp slt i32 %10, %7                      ; [#uses = 1]
  br i1 %13, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254, label %bounds.ok62

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254: ; preds = %bounds.ok49
  store i32 %10, i32* %r_arg.fca.1.extract, align 4
  store i32 %7, i32* %9, align 4
  br label %case1

bounds.ok62:                                      ; preds = %bounds.ok49
  %14 = icmp slt i32 %6, %10                      ; [#uses = 1]
  br i1 %14, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262, label %case1

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262: ; preds = %bounds.ok62
  store i32 %6, i32* %9, align 4
  store i32 %10, i32* %5, align 4
  br label %case1

bounds.ok81:                                      ; preds = %0
  %15 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 4, type = i32*]
  %16 = load i32, i32* %15, align 4               ; [#uses = 4]
  %17 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 4]
  %18 = icmp slt i32 %16, %17                     ; [#uses = 1]
  br i1 %18, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit270, label %bounds.ok88

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit270: ; preds = %bounds.ok81
  store i32 %16, i32* %r_arg.fca.1.extract, align 4
  store i32 %17, i32* %15, align 4
  br label %bounds.ok88

bounds.ok88:                                      ; preds = %bounds.ok81, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit270
  %19 = phi i32 [ %16, %bounds.ok81 ], [ %17, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit270 ] ; [#uses = 3, type = i32]
  %20 = phi i32 [ %17, %bounds.ok81 ], [ %16, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit270 ] ; [#uses = 3, type = i32]
  %21 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 3 ; [#uses = 3, type = i32*]
  %22 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 2 ; [#uses = 4, type = i32*]
  %23 = load i32, i32* %21, align 4               ; [#uses = 4]
  %24 = load i32, i32* %22, align 4               ; [#uses = 4]
  %25 = icmp slt i32 %23, %24                     ; [#uses = 1]
  br i1 %25, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit278, label %bounds.ok100

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit278: ; preds = %bounds.ok88
  store i32 %23, i32* %22, align 4
  store i32 %24, i32* %21, align 4
  br label %bounds.ok100

bounds.ok100:                                     ; preds = %bounds.ok88, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit278
  %26 = phi i32 [ %23, %bounds.ok88 ], [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit278 ] ; [#uses = 3, type = i32]
  %27 = phi i32 [ %24, %bounds.ok88 ], [ %23, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit278 ] ; [#uses = 3, type = i32]
  %28 = icmp slt i32 %27, %20                     ; [#uses = 1]
  br i1 %28, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit286, label %bounds.ok112

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit286: ; preds = %bounds.ok100
  store i32 %27, i32* %r_arg.fca.1.extract, align 4
  store i32 %20, i32* %22, align 4
  br label %bounds.ok112

bounds.ok112:                                     ; preds = %bounds.ok100, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit286
  %29 = phi i32 [ %27, %bounds.ok100 ], [ %20, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit286 ] ; [#uses = 2, type = i32]
  %30 = icmp slt i32 %26, %19                     ; [#uses = 1]
  br i1 %30, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit294, label %bounds.ok124

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit294: ; preds = %bounds.ok112
  store i32 %26, i32* %15, align 4
  store i32 %19, i32* %21, align 4
  br label %bounds.ok124

bounds.ok124:                                     ; preds = %bounds.ok112, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit294
  %31 = phi i32 [ %19, %bounds.ok112 ], [ %26, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit294 ] ; [#uses = 2, type = i32]
  %32 = icmp slt i32 %29, %31                     ; [#uses = 1]
  br i1 %32, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit214, label %case1

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit214: ; preds = %bounds.ok124
  store i32 %29, i32* %15, align 4
  store i32 %31, i32* %22, align 4
  br label %case1

bounds.ok137:                                     ; preds = %0
  %33 = add i64 %r_arg.fca.0.extract, -5          ; [#uses = 2]
  %lowerbound = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %33 ; [#uses = 1, type = i32*]
  %34 = insertvalue { i64, i32* } { i64 5, i32* undef }, i32* %lowerbound, 1 ; [#uses = 1]
  tail call void @_D3std9algorithm7sorting__T5sort5SQBg10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQCyFNaNbNiNfQpZv({ i64, i32* } %34) #6
  %35 = icmp eq i64 %r_arg.fca.0.extract, 5       ; [#uses = 1]
  br i1 %35, label %case1, label %bounds.ok155.preheader

bounds.ok155.preheader:                           ; preds = %bounds.ok137
  %36 = add i64 %r_arg.fca.0.extract, -6          ; [#uses = 1]
  %37 = add i64 %r_arg.fca.0.extract, -1          ; [#uses = 2]
  br label %bounds.ok155

bounds.ok155:                                     ; preds = %bounds.ok155.preheader, %forinc
  %38 = phi i64 [ %i.0335, %forinc ], [ %33, %bounds.ok155.preheader ] ; [#uses = 4, type = i64]
  %i.0335 = phi i64 [ %53, %forinc ], [ %36, %bounds.ok155.preheader ] ; [#uses = 4, type = i64]
  %39 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %i.0335 ; [#uses = 1, type = i32*]
  %40 = load i32, i32* %39, align 4               ; [#uses = 3]
  %bounds.cmp159 = icmp ult i64 %38, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp159, label %bounds.ok160, label %bounds.fail161

bounds.ok160:                                     ; preds = %bounds.ok155
  %41 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %38 ; [#uses = 1, type = i32*]
  %42 = load i32, i32* %41, align 4               ; [#uses = 2]
  %43 = icmp slt i32 %42, %40                     ; [#uses = 1]
  br i1 %43, label %bounds.ok167, label %endif164

bounds.ok167:                                     ; preds = %bounds.ok160, %bounds.ok178
  %44 = phi i32 [ %49, %bounds.ok178 ], [ %42, %bounds.ok160 ] ; [#uses = 1, type = i32]
  %j.0 = phi i64 [ %47, %bounds.ok178 ], [ %38, %bounds.ok160 ] ; [#uses = 4, type = i64]
  %45 = add i64 %j.0, -1                          ; [#uses = 3]
  %bounds.cmp171 = icmp ult i64 %45, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp171, label %bounds.ok172, label %bounds.fail173

bounds.ok172:                                     ; preds = %bounds.ok167
  %46 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %45 ; [#uses = 1, type = i32*]
  store i32 %44, i32* %46, align 4
  %47 = add i64 %j.0, 1                           ; [#uses = 2]
  %exitcond.not = icmp eq i64 %j.0, %37           ; [#uses = 1]
  br i1 %exitcond.not, label %bounds.ok183, label %bounds.ok178

bounds.fail173:                                   ; preds = %bounds.ok167
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1753, i64 %45, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.ok178:                                     ; preds = %bounds.ok172
  %48 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %47 ; [#uses = 1, type = i32*]
  %49 = load i32, i32* %48, align 4               ; [#uses = 2]
  %50 = icmp slt i32 %49, %40                     ; [#uses = 1]
  br i1 %50, label %bounds.ok167, label %bounds.ok183

bounds.ok183:                                     ; preds = %bounds.ok172, %bounds.ok178
  %j.0.lcssa338 = phi i64 [ %j.0, %bounds.ok178 ], [ %37, %bounds.ok172 ] ; [#uses = 1, type = i64]
  %51 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %j.0.lcssa338 ; [#uses = 1, type = i32*]
  store i32 %40, i32* %51, align 4
  br label %endif164

endif164:                                         ; preds = %bounds.ok183, %bounds.ok160
  %52 = icmp eq i64 %i.0335, 0                    ; [#uses = 1]
  br i1 %52, label %case1, label %forinc

bounds.fail161:                                   ; preds = %bounds.ok155
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1748, i64 %38, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail156:                                   ; preds = %forinc
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1744, i64 %53, i64 %r_arg.fca.0.extract) #4
  unreachable

forinc:                                           ; preds = %endif164
  %53 = add i64 %i.0335, -1                       ; [#uses = 3]
  %bounds.cmp154 = icmp ult i64 %53, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp154, label %bounds.ok155, label %bounds.fail156
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i64 @_D3std9algorithm10comparison__T3maxTiTmZQjFNaNbNiNfimZm(i64 %_param_1_arg, i32 %_param_0_arg) local_unnamed_addr #5 {
condend:
  %0 = icmp slt i32 %_param_0_arg, 0              ; [#uses = 1]
  br i1 %0, label %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit.thread, label %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit

_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit: ; preds = %condend
  %1 = zext i32 %_param_0_arg to i64              ; [#uses = 2]
  %2 = icmp ult i64 %1, %_param_1_arg             ; [#uses = 1]
  br i1 %2, label %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit.thread, label %3

_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit.thread: ; preds = %condend, %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit
  br label %3

3:                                                ; preds = %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit, %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit.thread
  %4 = phi i64 [ %_param_1_arg, %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit.thread ], [ %1, %_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb.exit ] ; [#uses = 1, type = i64]
  ret i64 %4
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std10functional__T6safeOpVAyaa1_3cZ__TQuTiTmZQBbFNaNbNiNfKiKmZb(i64* dereferenceable(8) %b, i32* dereferenceable(4) %a) local_unnamed_addr #5 {
  %1 = load i32, i32* %a, align 4                 ; [#uses = 2]
  %2 = icmp slt i32 %1, 0                         ; [#uses = 1]
  br i1 %2, label %ororend, label %oror

oror:                                             ; preds = %0
  %3 = load i64, i64* %b, align 8                 ; [#uses = 1]
  %4 = zext i32 %1 to i64                         ; [#uses = 1]
  %5 = icmp ugt i64 %3, %4                        ; [#uses = 1]
  br label %ororend

ororend:                                          ; preds = %oror, %0
  %ororval = phi i1 [ true, %0 ], [ %5, %oror ]   ; [#uses = 1, type = i1]
  ret i1 %ororval
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std10functional__T6safeOpVAyaa1_3cZ__T8unsafeOpTiTmZQoFNaNbNiNfimZb(i64 %b_arg, i32 %a_arg) local_unnamed_addr #5 {
  %1 = sext i32 %a_arg to i64                     ; [#uses = 1]
  %2 = icmp ult i64 %1, %b_arg                    ; [#uses = 1]
  ret i1 %2
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9buildHeapZQlFNaNbNiNfQBcZv({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 6]
  %1 = lshr i64 %r_arg.fca.0.extract, 1           ; [#uses = 2]
  %.not7 = icmp eq i64 %1, 0                      ; [#uses = 1]
  br i1 %.not7, label %endfor, label %forbody

forbody:                                          ; preds = %0, %forbody
  %.in = phi i64 [ %2, %forbody ], [ %1, %0 ]     ; [#uses = 1, type = i64]
  %2 = add nsw i64 %.in, -1                       ; [#uses = 3]
  tail call void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T8siftDownZQkFNaNbNiNfQBbmymZv(i64 %r_arg.fca.0.extract, i64 %2, { i64, i32* } %r_arg) #6
  %.not = icmp eq i64 %2, 0                       ; [#uses = 1]
  br i1 %.not, label %endfor, label %forbody

endfor:                                           ; preds = %forbody, %0
  %r_arg.fca.1.extract.i = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 2]
  %3 = icmp ugt i64 %r_arg.fca.0.extract, 1       ; [#uses = 1]
  br i1 %3, label %forbody.i, label %assertPassed

forbody.i:                                        ; preds = %endfor, %endif.i
  %parent.018.i = phi i64 [ %11, %endif.i ], [ 0, %endfor ] ; [#uses = 4, type = i64]
  %__key74.017.i = phi i64 [ %12, %endif.i ], [ 1, %endfor ] ; [#uses = 3, type = i64]
  %bounds.cmp.i = icmp ult i64 %parent.018.i, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp.i, label %bounds.ok4.i, label %bounds.fail.i

bounds.ok4.i:                                     ; preds = %forbody.i
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %parent.018.i ; [#uses = 1, type = i32*]
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract.i, i64 %__key74.017.i ; [#uses = 1, type = i32*]
  %6 = load i32, i32* %4, align 4                 ; [#uses = 1]
  %7 = load i32, i32* %5, align 4                 ; [#uses = 1]
  %8 = icmp slt i32 %6, %7                        ; [#uses = 1]
  br i1 %8, label %assertFailed, label %endif.i

endif.i:                                          ; preds = %bounds.ok4.i
  %9 = and i64 %__key74.017.i, 1                  ; [#uses = 1]
  %10 = xor i64 %9, 1                             ; [#uses = 1]
  %11 = add i64 %10, %parent.018.i                ; [#uses = 1]
  %12 = add nuw i64 %__key74.017.i, 1             ; [#uses = 2]
  %exitcond.not.i = icmp eq i64 %12, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not.i, label %assertPassed, label %forbody.i

bounds.fail.i:                                    ; preds = %forbody.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2247, i64 %parent.018.i, i64 %r_arg.fca.0.extract) #4
  unreachable

assertPassed:                                     ; preds = %endif.i, %endfor
  ret void

assertFailed:                                     ; preds = %bounds.ok4.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 15, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2239) #4
  unreachable
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T9percolateZQlFNaNbNiNfQBcmymZv(i64 %end_arg, i64 %parent_arg, { i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 16]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 8]
  %1 = shl i64 %parent_arg, 1                     ; [#uses = 3]
  %2 = add i64 %1, 2                              ; [#uses = 3]
  %.not97 = icmp ult i64 %2, %end_arg             ; [#uses = 1]
  br i1 %.not97, label %endif, label %if

if:                                               ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61, %0
  %parent.0.lcssa = phi i64 [ %parent_arg, %0 ], [ %spec.select, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ] ; [#uses = 4, type = i64]
  %.lcssa82 = phi i64 [ %1, %0 ], [ %21, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ] ; [#uses = 1, type = i64]
  %.lcssa77 = phi i64 [ %2, %0 ], [ %22, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ] ; [#uses = 1, type = i64]
  %3 = icmp eq i64 %.lcssa77, %end_arg            ; [#uses = 1]
  br i1 %3, label %if1, label %endfor

if1:                                              ; preds = %if
  %4 = or i64 %.lcssa82, 1                        ; [#uses = 4]
  %bounds.cmp.i = icmp ugt i64 %r_arg.fca.0.extract, %parent.0.lcssa ; [#uses = 1]
  br i1 %bounds.cmp.i, label %bounds.ok.i, label %bounds.fail.i

bounds.ok.i:                                      ; preds = %if1
  %bounds.cmp2.i = icmp ugt i64 %r_arg.fca.0.extract, %4 ; [#uses = 1]
  br i1 %bounds.cmp2.i, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %bounds.fail4.i

bounds.fail4.i:                                   ; preds = %bounds.ok.i
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %4, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail.i:                                    ; preds = %if1
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %parent.0.lcssa, i64 %r_arg.fca.0.extract) #4
  unreachable

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok.i
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.0.lcssa ; [#uses = 2, type = i32*]
  %6 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %4 ; [#uses = 2, type = i32*]
  %7 = load i32, i32* %5, align 4                 ; [#uses = 1]
  %8 = load i32, i32* %6, align 4                 ; [#uses = 1]
  store i32 %8, i32* %5, align 4
  store i32 %7, i32* %6, align 4
  br label %endfor

endif:                                            ; preds = %0, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61
  %9 = phi i64 [ %22, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ], [ %2, %0 ] ; [#uses = 4, type = i64]
  %10 = phi i64 [ %21, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ], [ %1, %0 ] ; [#uses = 1, type = i64]
  %parent.098 = phi i64 [ %spec.select, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61 ], [ %parent_arg, %0 ] ; [#uses = 3, type = i64]
  %11 = or i64 %10, 1                             ; [#uses = 4]
  %bounds.cmp = icmp ult i64 %9, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %endif
  %bounds.cmp4 = icmp ult i64 %11, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp4, label %bounds.ok5, label %bounds.fail6

bounds.ok5:                                       ; preds = %bounds.ok
  %12 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %9 ; [#uses = 1, type = i32*]
  %13 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %11 ; [#uses = 1, type = i32*]
  %14 = load i32, i32* %12, align 4               ; [#uses = 1]
  %15 = load i32, i32* %13, align 4               ; [#uses = 1]
  %16 = icmp slt i32 %14, %15                     ; [#uses = 1]
  %spec.select = select i1 %16, i64 %11, i64 %9   ; [#uses = 6]
  %bounds.cmp.i55 = icmp ugt i64 %r_arg.fca.0.extract, %parent.098 ; [#uses = 1]
  br i1 %bounds.cmp.i55, label %bounds.ok.i58, label %bounds.fail.i60

bounds.ok.i58:                                    ; preds = %bounds.ok5
  %bounds.cmp2.i57 = icmp ugt i64 %r_arg.fca.0.extract, %spec.select ; [#uses = 1]
  br i1 %bounds.cmp2.i57, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61, label %bounds.fail4.i59

bounds.fail4.i59:                                 ; preds = %bounds.ok.i58
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %spec.select, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail.i60:                                  ; preds = %bounds.ok5
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 3105, i64 %parent.098, i64 %r_arg.fca.0.extract) #4
  unreachable

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit61: ; preds = %bounds.ok.i58
  %17 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.098 ; [#uses = 2, type = i32*]
  %18 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %spec.select ; [#uses = 2, type = i32*]
  %19 = load i32, i32* %17, align 4               ; [#uses = 1]
  %20 = load i32, i32* %18, align 4               ; [#uses = 1]
  store i32 %20, i32* %17, align 4
  store i32 %19, i32* %18, align 4
  %21 = shl i64 %spec.select, 1                   ; [#uses = 3]
  %22 = add i64 %21, 2                            ; [#uses = 3]
  %.not = icmp ult i64 %22, %end_arg              ; [#uses = 1]
  br i1 %.not, label %endif, label %if

bounds.fail6:                                     ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2307, i64 %11, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail:                                      ; preds = %endif
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2307, i64 %9, i64 %r_arg.fca.0.extract) #4
  unreachable

endfor:                                           ; preds = %if, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit
  %parent.1 = phi i64 [ %4, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %parent.0.lcssa, %if ] ; [#uses = 2, type = i64]
  %23 = icmp ugt i64 %parent.1, %parent_arg       ; [#uses = 1]
  br i1 %23, label %forbody12, label %endfor14

forbody12:                                        ; preds = %endfor, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit69
  %child10.096 = phi i64 [ %25, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit69 ], [ %parent.1, %endfor ] ; [#uses = 4, type = i64]
  %24 = add i64 %child10.096, -1                  ; [#uses = 1]
  %25 = lshr i64 %24, 1                           ; [#uses = 5]
  %bounds.cmp16 = icmp ult i64 %25, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp16, label %bounds.ok17, label %bounds.fail18

bounds.ok17:                                      ; preds = %forbody12
  %bounds.cmp21 = icmp ult i64 %child10.096, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp21, label %bounds.ok22, label %bounds.fail23

bounds.ok22:                                      ; preds = %bounds.ok17
  %26 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %25 ; [#uses = 2, type = i32*]
  %27 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %child10.096 ; [#uses = 2, type = i32*]
  %28 = load i32, i32* %26, align 4               ; [#uses = 2]
  %29 = load i32, i32* %27, align 4               ; [#uses = 2]
  %30 = icmp slt i32 %28, %29                     ; [#uses = 1]
  br i1 %30, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit69, label %endfor14

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit69: ; preds = %bounds.ok22
  store i32 %29, i32* %26, align 4
  store i32 %28, i32* %27, align 4
  %31 = icmp ugt i64 %25, %parent_arg             ; [#uses = 1]
  br i1 %31, label %forbody12, label %endfor14

bounds.fail23:                                    ; preds = %bounds.ok17
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2316, i64 %child10.096, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail18:                                    ; preds = %forbody12
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2316, i64 %25, i64 %r_arg.fca.0.extract) #4
  unreachable

endfor14:                                         ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit69, %bounds.ok22, %endfor
  ret void
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T8siftDownZQkFNaNbNiNfQBbmymZv(i64 %end_arg, i64 %parent_arg, { i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 12]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 6]
  %1 = shl i64 %parent_arg, 1                     ; [#uses = 3]
  %2 = add i64 %1, 2                              ; [#uses = 3]
  %.not91 = icmp ult i64 %2, %end_arg             ; [#uses = 1]
  br i1 %.not91, label %endif, label %if

if:                                               ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, %0
  %parent.0.lcssa = phi i64 [ %parent_arg, %0 ], [ %spec.select, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ] ; [#uses = 3, type = i64]
  %.lcssa73 = phi i64 [ %1, %0 ], [ %23, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ] ; [#uses = 1, type = i64]
  %.lcssa = phi i64 [ %2, %0 ], [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ] ; [#uses = 1, type = i64]
  %3 = icmp eq i64 %.lcssa, %end_arg              ; [#uses = 1]
  br i1 %3, label %andand, label %endfor

andand:                                           ; preds = %if
  %bounds.cmp = icmp ult i64 %parent.0.lcssa, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %andand
  %4 = or i64 %.lcssa73, 1                        ; [#uses = 3]
  %bounds.cmp2 = icmp ult i64 %4, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp2, label %bounds.ok3, label %bounds.fail4

bounds.ok3:                                       ; preds = %bounds.ok
  %5 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.0.lcssa ; [#uses = 2, type = i32*]
  %6 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %4 ; [#uses = 2, type = i32*]
  %7 = load i32, i32* %5, align 4                 ; [#uses = 2]
  %8 = load i32, i32* %6, align 4                 ; [#uses = 2]
  %9 = icmp slt i32 %7, %8                        ; [#uses = 1]
  br i1 %9, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit63, label %endfor

bounds.fail4:                                     ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2265, i64 %4, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail:                                      ; preds = %andand
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2265, i64 %parent.0.lcssa, i64 %r_arg.fca.0.extract) #4
  unreachable

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit63: ; preds = %bounds.ok3
  store i32 %8, i32* %5, align 4
  store i32 %7, i32* %6, align 4
  br label %endfor

endif:                                            ; preds = %0, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit
  %10 = phi i64 [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %2, %0 ] ; [#uses = 4, type = i64]
  %11 = phi i64 [ %23, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %1, %0 ] ; [#uses = 1, type = i64]
  %parent.092 = phi i64 [ %spec.select, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit ], [ %parent_arg, %0 ] ; [#uses = 3, type = i64]
  %12 = or i64 %11, 1                             ; [#uses = 4]
  %bounds.cmp9 = icmp ult i64 %10, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp9, label %bounds.ok10, label %bounds.fail11

bounds.ok10:                                      ; preds = %endif
  %bounds.cmp14 = icmp ult i64 %12, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp14, label %bounds.ok15, label %bounds.fail16

bounds.ok15:                                      ; preds = %bounds.ok10
  %13 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %10 ; [#uses = 1, type = i32*]
  %14 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %12 ; [#uses = 1, type = i32*]
  %15 = load i32, i32* %13, align 4               ; [#uses = 1]
  %16 = load i32, i32* %14, align 4               ; [#uses = 1]
  %17 = icmp slt i32 %15, %16                     ; [#uses = 1]
  %spec.select = select i1 %17, i64 %12, i64 %10  ; [#uses = 6]
  %bounds.cmp21 = icmp ult i64 %parent.092, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp21, label %bounds.ok22, label %bounds.fail23

bounds.ok22:                                      ; preds = %bounds.ok15
  %bounds.cmp26 = icmp ult i64 %spec.select, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp26, label %bounds.ok27, label %bounds.fail28

bounds.ok27:                                      ; preds = %bounds.ok22
  %18 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.092 ; [#uses = 2, type = i32*]
  %19 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %spec.select ; [#uses = 2, type = i32*]
  %20 = load i32, i32* %18, align 4               ; [#uses = 2]
  %21 = load i32, i32* %19, align 4               ; [#uses = 2]
  %22 = icmp slt i32 %20, %21                     ; [#uses = 1]
  br i1 %22, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %endfor

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok27
  store i32 %21, i32* %18, align 4
  store i32 %20, i32* %19, align 4
  %23 = shl i64 %spec.select, 1                   ; [#uses = 3]
  %24 = add i64 %23, 2                            ; [#uses = 3]
  %.not = icmp ult i64 %24, %end_arg              ; [#uses = 1]
  br i1 %.not, label %endif, label %if

bounds.fail28:                                    ; preds = %bounds.ok22
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2271, i64 %spec.select, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail23:                                    ; preds = %bounds.ok15
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2271, i64 %parent.092, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail16:                                    ; preds = %bounds.ok10
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2270, i64 %12, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail11:                                    ; preds = %endif
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2270, i64 %10, i64 %r_arg.fca.0.extract) #4
  unreachable

endfor:                                           ; preds = %bounds.ok27, %bounds.ok3, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit63, %if
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std9algorithm7sorting__T7HeapOpsSQBi10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZ__T6isHeapZQiFNaNbNiNfQzZb({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %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 = 2]
  %1 = icmp ugt i64 %r_arg.fca.0.extract, 1       ; [#uses = 1]
  br i1 %1, label %forbody, label %if

forbody:                                          ; preds = %0, %endif
  %parent.018 = phi i64 [ %9, %endif ], [ 0, %0 ] ; [#uses = 4, type = i64]
  %__key74.017 = phi i64 [ %10, %endif ], [ 1, %0 ] ; [#uses = 3, type = i64]
  %bounds.cmp = icmp ult i64 %parent.018, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok4, label %bounds.fail

bounds.ok4:                                       ; preds = %forbody
  %2 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %parent.018 ; [#uses = 1, type = i32*]
  %3 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %__key74.017 ; [#uses = 1, type = i32*]
  %4 = load i32, i32* %2, align 4                 ; [#uses = 1]
  %5 = load i32, i32* %3, align 4                 ; [#uses = 1]
  %6 = icmp slt i32 %4, %5                        ; [#uses = 1]
  br i1 %6, label %if, label %endif

if:                                               ; preds = %bounds.ok4, %endif, %0
  %merge = phi i1 [ true, %0 ], [ true, %endif ], [ false, %bounds.ok4 ] ; [#uses = 1, type = i1]
  ret i1 %merge

endif:                                            ; preds = %bounds.ok4
  %7 = and i64 %__key74.017, 1                    ; [#uses = 1]
  %8 = xor i64 %7, 1                              ; [#uses = 1]
  %9 = add i64 %8, %parent.018                    ; [#uses = 1]
  %10 = add nuw i64 %__key74.017, 1               ; [#uses = 2]
  %exitcond.not = icmp eq i64 %10, %r_arg.fca.0.extract ; [#uses = 1]
  br i1 %exitcond.not, label %if, label %forbody

bounds.fail:                                      ; preds = %forbody
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 2247, i64 %parent.018, i64 %r_arg.fca.0.extract) #4
  unreachable
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmZQFiFNaNbNiNfQvmmmZv(i64 %_param_3_arg, i64 %_param_2_arg, i64 %_param_1_arg, { i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 8]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 5]
  %1 = icmp ugt i64 %r_arg.fca.0.extract, 2       ; [#uses = 1]
  br i1 %1, label %assertPassed, label %assertFailed

assertPassed:                                     ; preds = %0
  %.not = icmp eq i64 %_param_1_arg, %_param_2_arg ; [#uses = 1]
  br i1 %.not, label %assertFailed2, label %assertPassed1

assertPassed1:                                    ; preds = %assertPassed
  %.not127 = icmp ne i64 %_param_1_arg, %_param_3_arg ; [#uses = 1]
  %2 = icmp ne i64 %_param_2_arg, %_param_3_arg   ; [#uses = 1]
  %andandval = and i1 %2, %.not127                ; [#uses = 1]
  br i1 %andandval, label %assertPassed3, label %assertFailed4

assertPassed3:                                    ; preds = %assertPassed1
  %bounds.cmp = icmp ugt i64 %r_arg.fca.0.extract, %_param_3_arg ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %assertPassed3
  %bounds.cmp7 = icmp ugt i64 %r_arg.fca.0.extract, %_param_1_arg ; [#uses = 1]
  br i1 %bounds.cmp7, label %bounds.ok8, label %bounds.fail9

bounds.ok8:                                       ; preds = %bounds.ok
  %3 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %_param_3_arg ; [#uses = 6, type = i32*]
  %4 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %_param_1_arg ; [#uses = 9, type = i32*]
  %5 = load i32, i32* %3, align 4                 ; [#uses = 4]
  %6 = load i32, i32* %4, align 4                 ; [#uses = 6]
  %7 = icmp slt i32 %5, %6                        ; [#uses = 1]
  %bounds.cmp17 = icmp ugt i64 %r_arg.fca.0.extract, %_param_2_arg ; [#uses = 2]
  br i1 %7, label %bounds.ok13, label %else

bounds.ok13:                                      ; preds = %bounds.ok8
  br i1 %bounds.cmp17, label %bounds.ok18, label %bounds.fail19

bounds.ok18:                                      ; preds = %bounds.ok13
  %8 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %_param_2_arg ; [#uses = 4, type = i32*]
  %9 = load i32, i32* %8, align 4                 ; [#uses = 2]
  %10 = icmp slt i32 %6, %9                       ; [#uses = 1]
  br i1 %10, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit143, label %bounds.ok31

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit143: ; preds = %bounds.ok18
  store i32 %9, i32* %4, align 4
  store i32 %6, i32* %8, align 4
  %11 = load i32, i32* %4, align 4                ; [#uses = 1]
  %12 = load i32, i32* %3, align 4                ; [#uses = 1]
  store i32 %12, i32* %4, align 4
  store i32 %11, i32* %3, align 4
  br label %bounds.ok68

bounds.ok31:                                      ; preds = %bounds.ok18
  store i32 %5, i32* %4, align 4
  store i32 %6, i32* %3, align 4
  %13 = load i32, i32* %8, align 4                ; [#uses = 2]
  %14 = load i32, i32* %4, align 4                ; [#uses = 2]
  %15 = icmp slt i32 %13, %14                     ; [#uses = 1]
  br i1 %15, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit159, label %bounds.ok68

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit159: ; preds = %bounds.ok31
  store i32 %13, i32* %4, align 4
  store i32 %14, i32* %8, align 4
  br label %bounds.ok68

bounds.fail19:                                    ; preds = %bounds.ok13
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4272, i64 %_param_2_arg, i64 %r_arg.fca.0.extract) #4
  unreachable

else:                                             ; preds = %bounds.ok8
  br i1 %bounds.cmp17, label %bounds.ok43, label %bounds.fail39

bounds.ok43:                                      ; preds = %else
  %16 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %_param_2_arg ; [#uses = 3, type = i32*]
  %17 = load i32, i32* %16, align 4               ; [#uses = 4]
  %18 = icmp slt i32 %17, %6                      ; [#uses = 1]
  br i1 %18, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit167, label %bounds.ok56

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit167: ; preds = %bounds.ok43
  store i32 %17, i32* %4, align 4
  store i32 %6, i32* %16, align 4
  br label %bounds.ok68

bounds.ok56:                                      ; preds = %bounds.ok43
  %19 = icmp slt i32 %5, %17                      ; [#uses = 1]
  br i1 %19, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %bounds.ok68

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok56
  store i32 %5, i32* %16, align 4
  store i32 %17, i32* %3, align 4
  br label %bounds.ok68

bounds.fail39:                                    ; preds = %else
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4285, i64 %_param_2_arg, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.ok68:                                      ; preds = %bounds.ok31, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit159, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit143, %bounds.ok56, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit167
  %20 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 %_param_2_arg ; [#uses = 1, type = i32*]
  %21 = load i32, i32* %20, align 4               ; [#uses = 2]
  %22 = load i32, i32* %4, align 4                ; [#uses = 1]
  %23 = icmp slt i32 %21, %22                     ; [#uses = 1]
  br i1 %23, label %assertFailed72, label %bounds.ok80

bounds.ok80:                                      ; preds = %bounds.ok68
  %24 = load i32, i32* %3, align 4                ; [#uses = 1]
  %25 = icmp slt i32 %24, %21                     ; [#uses = 1]
  br i1 %25, label %assertFailed84, label %assertPassed83

assertPassed83:                                   ; preds = %bounds.ok80
  ret void

assertFailed84:                                   ; preds = %bounds.ok80
  tail call void @_d_assert_msg({ i64, i8* } { i64 22, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.16, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4295) #4
  unreachable

assertFailed72:                                   ; preds = %bounds.ok68
  tail call void @_d_assert_msg({ i64, i8* } { i64 22, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.16, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4294) #4
  unreachable

bounds.fail9:                                     ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4270, i64 %_param_1_arg, i64 %r_arg.fca.0.extract) #4
  unreachable

bounds.fail:                                      ; preds = %assertPassed3
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4270, i64 %_param_3_arg, i64 %r_arg.fca.0.extract) #4
  unreachable

assertFailed4:                                    ; preds = %assertPassed1
  tail call void @_d_assert_msg({ i64, i8* } { i64 16, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.15, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4246) #4
  unreachable

assertFailed2:                                    ; preds = %assertPassed
  tail call void @_d_assert_msg({ i64, i8* } { i64 7, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4239) #4
  unreachable

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 48, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.13, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4223) #4
  unreachable
}

; [#uses = 2]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T8medianOfSQBj10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsVEQDy8typecons__T4FlagVQCha9_6c65616e5269676874ZQBfi0TAiTmTmTmTmTmZQFmFNaNbNiNfQzmmmmmZv(i64 %_param_5_arg, i64 %_param_4_arg, i64 %_param_3_arg, i64 %_param_2_arg, i64 %_param_1_arg, { i64, i32* }* byval align 8 %r) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %r, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 11]
  %2 = icmp ugt i64 %.len, 4                      ; [#uses = 1]
  br i1 %2, label %assertPassed, label %assertFailed

assertPassed:                                     ; preds = %0
  %.not = icmp eq i64 %_param_1_arg, %_param_2_arg ; [#uses = 1]
  br i1 %.not, label %assertFailed2, label %assertPassed1

assertPassed1:                                    ; preds = %assertPassed
  %.not160 = icmp ne i64 %_param_1_arg, %_param_3_arg ; [#uses = 1]
  %3 = icmp ne i64 %_param_2_arg, %_param_3_arg   ; [#uses = 1]
  %andandval = and i1 %3, %.not160                ; [#uses = 1]
  br i1 %andandval, label %assertPassed3, label %assertFailed4

assertPassed3:                                    ; preds = %assertPassed1
  %.not161 = icmp ne i64 %_param_1_arg, %_param_4_arg ; [#uses = 1]
  %4 = icmp ne i64 %_param_2_arg, %_param_4_arg   ; [#uses = 1]
  %andandval7 = and i1 %4, %.not161               ; [#uses = 1]
  %5 = icmp ne i64 %_param_3_arg, %_param_4_arg   ; [#uses = 1]
  %andandval10 = and i1 %5, %andandval7           ; [#uses = 1]
  br i1 %andandval10, label %assertPassed11, label %assertFailed12

assertPassed11:                                   ; preds = %assertPassed3
  %.not162 = icmp ne i64 %_param_1_arg, %_param_5_arg ; [#uses = 1]
  %6 = icmp ne i64 %_param_2_arg, %_param_5_arg   ; [#uses = 1]
  %andandval15 = and i1 %6, %.not162              ; [#uses = 1]
  %7 = icmp ne i64 %_param_3_arg, %_param_5_arg   ; [#uses = 1]
  %andandval18 = and i1 %7, %andandval15          ; [#uses = 1]
  %8 = icmp ne i64 %_param_4_arg, %_param_5_arg   ; [#uses = 1]
  %andandval21 = and i1 %8, %andandval18          ; [#uses = 1]
  br i1 %andandval21, label %assertPassed22, label %assertFailed23

assertPassed22:                                   ; preds = %assertPassed11
  %bounds.cmp = icmp ugt i64 %.len, %_param_3_arg ; [#uses = 1]
  br i1 %bounds.cmp, label %bounds.ok, label %bounds.fail

bounds.ok:                                        ; preds = %assertPassed22
  %9 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %r, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %.ptr = load i32*, i32** %9, align 8            ; [#uses = 5]
  %bounds.cmp26 = icmp ugt i64 %.len, %_param_1_arg ; [#uses = 1]
  br i1 %bounds.cmp26, label %bounds.ok27, label %bounds.fail28

bounds.ok27:                                      ; preds = %bounds.ok
  %10 = getelementptr inbounds i32, i32* %.ptr, i64 %_param_3_arg ; [#uses = 9, type = i32*]
  %11 = getelementptr inbounds i32, i32* %.ptr, i64 %_param_1_arg ; [#uses = 6, type = i32*]
  %12 = load i32, i32* %10, align 4               ; [#uses = 3]
  %13 = load i32, i32* %11, align 4               ; [#uses = 3]
  %14 = icmp slt i32 %12, %13                     ; [#uses = 1]
  br i1 %14, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit170, label %endif

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit170: ; preds = %bounds.ok27
  store i32 %12, i32* %11, align 4
  store i32 %13, i32* %10, align 4
  br label %endif

endif:                                            ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit170, %bounds.ok27
  %15 = phi i32 [ %13, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit170 ], [ %12, %bounds.ok27 ] ; [#uses = 1, type = i32]
  %bounds.cmp31 = icmp ugt i64 %.len, %_param_4_arg ; [#uses = 1]
  br i1 %bounds.cmp31, label %bounds.ok32, label %bounds.fail33

bounds.ok32:                                      ; preds = %endif
  %bounds.cmp36 = icmp ugt i64 %.len, %_param_2_arg ; [#uses = 1]
  br i1 %bounds.cmp36, label %bounds.ok37, label %bounds.fail38

bounds.ok37:                                      ; preds = %bounds.ok32
  %16 = getelementptr inbounds i32, i32* %.ptr, i64 %_param_4_arg ; [#uses = 3, type = i32*]
  %17 = getelementptr inbounds i32, i32* %.ptr, i64 %_param_2_arg ; [#uses = 8, type = i32*]
  %18 = load i32, i32* %16, align 4               ; [#uses = 3]
  %19 = load i32, i32* %17, align 4               ; [#uses = 3]
  %20 = icmp slt i32 %18, %19                     ; [#uses = 1]
  br i1 %20, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit178, label %bounds.ok49

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit178: ; preds = %bounds.ok37
  store i32 %18, i32* %17, align 4
  store i32 %19, i32* %16, align 4
  %.pre = load i32, i32* %10, align 4             ; [#uses = 1]
  br label %bounds.ok49

bounds.ok49:                                      ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit178, %bounds.ok37
  %21 = phi i32 [ %.pre, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit178 ], [ %15, %bounds.ok37 ] ; [#uses = 2, type = i32]
  %22 = phi i32 [ %19, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit178 ], [ %18, %bounds.ok37 ] ; [#uses = 2, type = i32]
  %23 = icmp slt i32 %22, %21                     ; [#uses = 1]
  br i1 %23, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit194, label %endif53

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit194: ; preds = %bounds.ok49
  store i32 %22, i32* %10, align 4
  store i32 %21, i32* %16, align 4
  %24 = load i32, i32* %11, align 4               ; [#uses = 1]
  %25 = load i32, i32* %17, align 4               ; [#uses = 1]
  store i32 %25, i32* %11, align 4
  store i32 %24, i32* %17, align 4
  br label %endif53

endif53:                                          ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit194, %bounds.ok49
  %bounds.cmp55 = icmp ugt i64 %.len, %_param_5_arg ; [#uses = 1]
  br i1 %bounds.cmp55, label %bounds.ok61, label %bounds.fail57

bounds.ok61:                                      ; preds = %endif53
  %26 = getelementptr inbounds i32, i32* %.ptr, i64 %_param_5_arg ; [#uses = 3, type = i32*]
  %27 = load i32, i32* %26, align 4               ; [#uses = 3]
  %28 = load i32, i32* %17, align 4               ; [#uses = 3]
  %29 = icmp slt i32 %27, %28                     ; [#uses = 1]
  br i1 %29, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit202, label %bounds.ok73

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit202: ; preds = %bounds.ok61
  store i32 %27, i32* %17, align 4
  store i32 %28, i32* %26, align 4
  br label %bounds.ok73

bounds.ok73:                                      ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit202, %bounds.ok61
  %30 = phi i32 [ %28, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit202 ], [ %27, %bounds.ok61 ] ; [#uses = 2, type = i32]
  %31 = load i32, i32* %10, align 4               ; [#uses = 4]
  %32 = icmp slt i32 %30, %31                     ; [#uses = 1]
  br i1 %32, label %bounds.ok85, label %bounds.ok97

bounds.ok85:                                      ; preds = %bounds.ok73
  store i32 %30, i32* %10, align 4
  store i32 %31, i32* %26, align 4
  %33 = load i32, i32* %10, align 4               ; [#uses = 2]
  %34 = load i32, i32* %11, align 4               ; [#uses = 2]
  %35 = icmp slt i32 %33, %34                     ; [#uses = 1]
  br i1 %35, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit218, label %endif77

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit218: ; preds = %bounds.ok85
  store i32 %33, i32* %11, align 4
  store i32 %34, i32* %10, align 4
  br label %endif77

bounds.ok97:                                      ; preds = %bounds.ok73
  %36 = load i32, i32* %17, align 4               ; [#uses = 2]
  %37 = icmp slt i32 %31, %36                     ; [#uses = 1]
  br i1 %37, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %endif77

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok97
  store i32 %31, i32* %17, align 4
  store i32 %36, i32* %10, align 4
  br label %endif77

endif77:                                          ; preds = %bounds.ok97, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, %bounds.ok85, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit218
  ret void

bounds.fail57:                                    ; preds = %endif53
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4332, i64 %_param_5_arg, i64 %.len) #4
  unreachable

bounds.fail38:                                    ; preds = %bounds.ok32
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4326, i64 %_param_2_arg, i64 %.len) #4
  unreachable

bounds.fail33:                                    ; preds = %endif
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4326, i64 %_param_4_arg, i64 %.len) #4
  unreachable

bounds.fail28:                                    ; preds = %bounds.ok
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4325, i64 %_param_1_arg, i64 %.len) #4
  unreachable

bounds.fail:                                      ; preds = %assertPassed22
  tail call void @_d_arraybounds_index({ i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4325, i64 %_param_3_arg, i64 %.len) #4
  unreachable

assertFailed23:                                   ; preds = %assertPassed11
  tail call void @_d_assert_msg({ i64, i8* } { i64 43, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.18, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4260) #4
  unreachable

assertFailed12:                                   ; preds = %assertPassed3
  tail call void @_d_assert_msg({ i64, i8* } { i64 33, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.17, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4253) #4
  unreachable

assertFailed4:                                    ; preds = %assertPassed1
  tail call void @_d_assert_msg({ i64, i8* } { i64 16, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.15, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4246) #4
  unreachable

assertFailed2:                                    ; preds = %assertPassed
  tail call void @_d_assert_msg({ i64, i8* } { i64 7, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.14, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4239) #4
  unreachable

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 48, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.13, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 4223) #4
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr zeroext i1 @_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb({ i64, i32* }* dereferenceable(16) %target, { i64, i32* }* dereferenceable(16) %source) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len = load i64, i64* %1, align 8              ; [#uses = 1]
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2 = load i8*, i8** %3, align 8             ; [#uses = 6]
  %4 = shl i64 %.len, 2                           ; [#uses = 1]
  %5 = bitcast { i64, i32* }* %target to i8*      ; [#uses = 4]
  %6 = getelementptr inbounds i8, i8* %.ptr2, i64 %4 ; [#uses = 3, type = i8*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %target, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 3]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i = icmp ule i8* %.ptr2, %5               ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i = and i1 %.not.i, %10              ; [#uses = 1]
  br i1 %andandval.i, label %if.i, label %endif.i

if.i:                                             ; preds = %0
  %11 = ptrtoint i8* %b_arg.a_arg.i.i to i64      ; [#uses = 1]
  %12 = ptrtoint { i64, i32* }* %target to i64    ; [#uses = 1]
  %13 = sub i64 %11, %12                          ; [#uses = 1]
  %14 = insertvalue { i64, i8* } undef, i64 %13, 0 ; [#uses = 1]
  %15 = insertvalue { i64, i8* } %14, i8* %5, 1   ; [#uses = 1]
  br label %_D3std5array__T7overlapTvTvZQnFNaNbNiNeAvQcZQf.exit

endif.i:                                          ; preds = %0
  %.not28.i = icmp uge i8* %.ptr2, %5             ; [#uses = 1]
  %16 = icmp ult i8* %.ptr2, %8                   ; [#uses = 1]
  %andandval17.i = and i1 %.not28.i, %16          ; [#uses = 1]
  br i1 %andandval17.i, label %if18.i, label %_D3std5array__T7overlapTvTvZQnFNaNbNiNeAvQcZQf.exit

if18.i:                                           ; preds = %endif.i
  %17 = ptrtoint i8* %b_arg.a_arg.i.i to i64      ; [#uses = 1]
  %18 = ptrtoint i8* %.ptr2 to i64                ; [#uses = 1]
  %19 = sub i64 %17, %18                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2, 1 ; [#uses = 1]
  br label %_D3std5array__T7overlapTvTvZQnFNaNbNiNeAvQcZQf.exit

_D3std5array__T7overlapTvTvZQnFNaNbNiNeAvQcZQf.exit: ; preds = %endif.i, %if18.i, %if.i
  %22 = phi { i64, i8* } [ %15, %if.i ], [ %21, %if18.i ], [ zeroinitializer, %endif.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1 = extractvalue { i64, i8* } %22, 0       ; [#uses = 1]
  %23 = icmp ne i64 %.len1, 0                     ; [#uses = 1]
  ret i1 %23
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i8* } @_D3std5array__T7overlapTvTvZQnFNaNbNiNeAvQcZQf({ i64, i8* } %b_arg, { i64, i8* } %a_arg) local_unnamed_addr #5 {
andandend:
  %a_arg.fca.0.extract = extractvalue { i64, i8* } %a_arg, 0 ; [#uses = 1]
  %a_arg.fca.1.extract = extractvalue { i64, i8* } %a_arg, 1 ; [#uses = 6]
  %b_arg.fca.0.extract = extractvalue { i64, i8* } %b_arg, 0 ; [#uses = 1]
  %b_arg.fca.1.extract = extractvalue { i64, i8* } %b_arg, 1 ; [#uses = 6]
  %0 = getelementptr inbounds i8, i8* %a_arg.fca.1.extract, i64 %a_arg.fca.0.extract ; [#uses = 3, type = i8*]
  %1 = getelementptr inbounds i8, i8* %b_arg.fca.1.extract, i64 %b_arg.fca.0.extract ; [#uses = 3, type = i8*]
  %2 = icmp ult i8* %1, %0                        ; [#uses = 1]
  %b_arg.a_arg.i = select i1 %2, i8* %1, i8* %0   ; [#uses = 2]
  %.not = icmp ule i8* %a_arg.fca.1.extract, %b_arg.fca.1.extract ; [#uses = 1]
  %3 = icmp ult i8* %b_arg.fca.1.extract, %0      ; [#uses = 1]
  %andandval = and i1 %.not, %3                   ; [#uses = 1]
  br i1 %andandval, label %if, label %endif

if:                                               ; preds = %andandend
  %4 = ptrtoint i8* %b_arg.a_arg.i to i64         ; [#uses = 1]
  %5 = ptrtoint i8* %b_arg.fca.1.extract to i64   ; [#uses = 1]
  %6 = sub i64 %4, %5                             ; [#uses = 1]
  %7 = insertvalue { i64, i8* } undef, i64 %6, 0  ; [#uses = 1]
  %8 = insertvalue { i64, i8* } %7, i8* %b_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %8

endif:                                            ; preds = %andandend
  %.not28 = icmp ule i8* %b_arg.fca.1.extract, %a_arg.fca.1.extract ; [#uses = 1]
  %9 = icmp ult i8* %a_arg.fca.1.extract, %1      ; [#uses = 1]
  %andandval17 = and i1 %.not28, %9               ; [#uses = 1]
  br i1 %andandval17, label %if18, label %endif19

if18:                                             ; preds = %endif
  %10 = ptrtoint i8* %b_arg.a_arg.i to i64        ; [#uses = 1]
  %11 = ptrtoint i8* %a_arg.fca.1.extract to i64  ; [#uses = 1]
  %12 = sub i64 %10, %11                          ; [#uses = 1]
  %13 = insertvalue { i64, i8* } undef, i64 %12, 0 ; [#uses = 1]
  %14 = insertvalue { i64, i8* } %13, i8* %a_arg.fca.1.extract, 1 ; [#uses = 1]
  ret { i64, i8* } %14

endif19:                                          ; preds = %endif
  ret { i64, i8* } zeroinitializer
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i8* @_D3std9algorithm10comparison__T3minTPvTQdZQlFNaNbNiNfQrQtZQw(i8* %b_arg, i8* %a_arg) local_unnamed_addr #5 {
condend:
  %0 = icmp ult i8* %b_arg, %a_arg                ; [#uses = 1]
  %b_arg.a_arg = select i1 %0, i8* %b_arg, i8* %a_arg ; [#uses = 1]
  ret i8* %b_arg.a_arg
}

; [#uses = 1]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T5sort5SQBg10functional__T9binaryFunVAyaa5_61203c2062VQra1_61VQza1_62ZQBsTAiZQCyFNaNbNiNfQpZv({ i64, i32* } %r_arg) local_unnamed_addr #5 {
  %r_arg.fca.0.extract = extractvalue { i64, i32* } %r_arg, 0 ; [#uses = 1]
  %r_arg.fca.1.extract = extractvalue { i64, i32* } %r_arg, 1 ; [#uses = 9]
  %1 = icmp ugt i64 %r_arg.fca.0.extract, 4       ; [#uses = 1]
  br i1 %1, label %bounds.ok4, label %assertFailed

bounds.ok4:                                       ; preds = %0
  %2 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 1 ; [#uses = 7, type = i32*]
  %3 = load i32, i32* %2, align 4                 ; [#uses = 4]
  %4 = load i32, i32* %r_arg.fca.1.extract, align 4 ; [#uses = 4]
  %5 = icmp slt i32 %3, %4                        ; [#uses = 1]
  br i1 %5, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit198, label %bounds.ok9

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit198: ; preds = %bounds.ok4
  store i32 %3, i32* %r_arg.fca.1.extract, align 4
  store i32 %4, i32* %2, align 4
  br label %bounds.ok9

bounds.ok9:                                       ; preds = %bounds.ok4, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit198
  %6 = phi i32 [ %4, %bounds.ok4 ], [ %3, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit198 ] ; [#uses = 3, type = i32]
  %7 = phi i32 [ %3, %bounds.ok4 ], [ %4, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit198 ] ; [#uses = 4, type = i32]
  %8 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 3 ; [#uses = 6, type = i32*]
  %9 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 2 ; [#uses = 5, type = i32*]
  %10 = load i32, i32* %8, align 4                ; [#uses = 4]
  %11 = load i32, i32* %9, align 4                ; [#uses = 4]
  %12 = icmp slt i32 %10, %11                     ; [#uses = 1]
  br i1 %12, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit206, label %bounds.ok21

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit206: ; preds = %bounds.ok9
  store i32 %10, i32* %9, align 4
  store i32 %11, i32* %8, align 4
  br label %bounds.ok21

bounds.ok21:                                      ; preds = %bounds.ok9, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit206
  %13 = phi i32 [ %11, %bounds.ok9 ], [ %10, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit206 ] ; [#uses = 3, type = i32]
  %14 = phi i32 [ %10, %bounds.ok9 ], [ %11, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit206 ] ; [#uses = 4, type = i32]
  %15 = icmp slt i32 %14, %7                      ; [#uses = 1]
  br i1 %15, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222, label %bounds.ok33

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222: ; preds = %bounds.ok21
  store i32 %13, i32* %r_arg.fca.1.extract, align 4
  store i32 %6, i32* %9, align 4
  store i32 %14, i32* %2, align 4
  store i32 %7, i32* %8, align 4
  br label %bounds.ok33

bounds.ok33:                                      ; preds = %bounds.ok21, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222
  %16 = phi i32 [ %13, %bounds.ok21 ], [ %6, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222 ] ; [#uses = 8, type = i32]
  %17 = phi i32 [ %14, %bounds.ok21 ], [ %7, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222 ] ; [#uses = 9, type = i32]
  %18 = phi i32 [ %6, %bounds.ok21 ], [ %13, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222 ] ; [#uses = 7, type = i32]
  %19 = phi i32 [ %7, %bounds.ok21 ], [ %14, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit222 ] ; [#uses = 8, type = i32]
  %20 = icmp slt i32 %19, %18                     ; [#uses = 1]
  %21 = icmp slt i32 %17, %19                     ; [#uses = 1]
  %or.cond = or i1 %20, %21                       ; [#uses = 1]
  %22 = icmp slt i32 %17, %16                     ; [#uses = 1]
  %or.cond296 = or i1 %or.cond, %22               ; [#uses = 1]
  br i1 %or.cond296, label %assertFailed65, label %bounds.ok68

bounds.ok68:                                      ; preds = %bounds.ok33
  %23 = getelementptr inbounds i32, i32* %r_arg.fca.1.extract, i64 4 ; [#uses = 3, type = i32*]
  %24 = load i32, i32* %23, align 4               ; [#uses = 10]
  %25 = icmp slt i32 %24, %19                     ; [#uses = 1]
  br i1 %25, label %bounds.ok80, label %bounds.ok92

bounds.ok80:                                      ; preds = %bounds.ok68
  store i32 %17, i32* %23, align 4
  store i32 %24, i32* %2, align 4
  store i32 %19, i32* %8, align 4
  %26 = icmp slt i32 %24, %18                     ; [#uses = 1]
  br i1 %26, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254, label %bounds.ok104

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254: ; preds = %bounds.ok80
  store i32 %24, i32* %r_arg.fca.1.extract, align 4
  store i32 %18, i32* %2, align 4
  br label %bounds.ok104

bounds.ok92:                                      ; preds = %bounds.ok68
  %27 = icmp slt i32 %24, %17                     ; [#uses = 1]
  br i1 %27, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262, label %bounds.ok104

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262: ; preds = %bounds.ok92
  store i32 %24, i32* %8, align 4
  store i32 %17, i32* %23, align 4
  br label %bounds.ok104

bounds.ok104:                                     ; preds = %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254, %bounds.ok80, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262, %bounds.ok92
  %28 = phi i32 [ %17, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254 ], [ %17, %bounds.ok80 ], [ %17, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262 ], [ %24, %bounds.ok92 ] ; [#uses = 2, type = i32]
  %29 = phi i32 [ %19, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254 ], [ %19, %bounds.ok80 ], [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262 ], [ %17, %bounds.ok92 ] ; [#uses = 4, type = i32]
  %30 = phi i32 [ %24, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254 ], [ %18, %bounds.ok80 ], [ %18, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262 ], [ %18, %bounds.ok92 ] ; [#uses = 3, type = i32]
  %31 = phi i32 [ %18, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit254 ], [ %24, %bounds.ok80 ], [ %19, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit262 ], [ %19, %bounds.ok92 ] ; [#uses = 4, type = i32]
  %32 = icmp slt i32 %31, %30                     ; [#uses = 1]
  %33 = icmp slt i32 %29, %31                     ; [#uses = 1]
  %or.cond297 = or i1 %32, %33                    ; [#uses = 1]
  %34 = icmp slt i32 %28, %29                     ; [#uses = 1]
  %or.cond298 = or i1 %or.cond297, %34            ; [#uses = 1]
  br i1 %or.cond298, label %assertFailed139, label %bounds.ok142

bounds.ok142:                                     ; preds = %bounds.ok104
  %35 = icmp slt i32 %28, %16                     ; [#uses = 1]
  br i1 %35, label %assertFailed151, label %bounds.ok154

bounds.ok154:                                     ; preds = %bounds.ok142
  %36 = icmp slt i32 %16, %31                     ; [#uses = 1]
  br i1 %36, label %bounds.ok167, label %bounds.ok179

bounds.ok167:                                     ; preds = %bounds.ok154
  store i32 %16, i32* %2, align 4
  store i32 %31, i32* %9, align 4
  %37 = icmp slt i32 %16, %30                     ; [#uses = 1]
  br i1 %37, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230, label %endif163

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230: ; preds = %bounds.ok167
  store i32 %16, i32* %r_arg.fca.1.extract, align 4
  store i32 %30, i32* %2, align 4
  br label %endif163

bounds.ok179:                                     ; preds = %bounds.ok154
  %38 = icmp slt i32 %29, %16                     ; [#uses = 1]
  br i1 %38, label %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, label %endif163

_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit: ; preds = %bounds.ok179
  store i32 %29, i32* %9, align 4
  store i32 %16, i32* %8, align 4
  br label %endif163

endif163:                                         ; preds = %bounds.ok179, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit, %bounds.ok167, %_D3std9algorithm8mutation__T6swapAtTAiZQlFNaNbNiNfKQpmmZv.exit230
  ret void

assertFailed151:                                  ; preds = %bounds.ok142
  tail call void @_d_assert_msg({ i64, i8* } { i64 16, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1842) #4
  unreachable

assertFailed139:                                  ; preds = %bounds.ok104
  tail call void @_d_assert_msg({ i64, i8* } { i64 16, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1838) #4
  unreachable

assertFailed65:                                   ; preds = %bounds.ok33
  tail call void @_d_assert_msg({ i64, i8* } { i64 16, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1821) #4
  unreachable

assertFailed:                                     ; preds = %0
  tail call void @_d_assert_msg({ i64, i8* } { i64 32, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.24, i32 0, i32 0) }, { i64, i8* } { i64 63, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i32 0, i32 0) }, i32 1807) #4
  unreachable
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D4core8lifetime__T4moveTiZQiFNaNbNiNfKiZi(i32* dereferenceable(4) %source) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  ret i32 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm7sorting__T18trustedMoveEmplaceTiZQxFNaNbNiNeKiKiZv(i32* dereferenceable(4) %target, i32* dereferenceable(4) %source) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  store i32 %1, i32* %target, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D4core8lifetime__T8moveImplTiZQmFNaNbNiNfKiZi(i32* dereferenceable(4) %source) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  ret i32 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr i32 @_D4core8lifetime__T15trustedMoveImplTiZQuFNaNbNiNeKiZi(i32* dereferenceable(4) %source) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  ret i32 %1
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D4core8lifetime__T15moveEmplaceImplTiZQuFNaNbNiNfKiKiZv(i32* dereferenceable(4) %source, i32* dereferenceable(4) %target) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  store i32 %1, i32* %target, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D4core8lifetime__T11moveEmplaceTiZQqFNaNbNiKiKiZv(i32* dereferenceable(4) %target, i32* dereferenceable(4) %source) local_unnamed_addr #5 {
  %1 = load i32, i32* %source, align 4            ; [#uses = 1]
  store i32 %1, i32* %target, align 4
  ret void
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i32* } @_D3std9algorithm8mutation__T8moveImplTAiZQnFNaNbNiNfMNkKQsZQv({ i64, i32* }* dereferenceable(16) %source) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i.i.i = load i64, i64* %1, align 8        ; [#uses = 2]
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2.i.i.i = load i8*, i8** %3, align 8       ; [#uses = 7]
  %4 = shl i64 %.len.i.i.i, 2                     ; [#uses = 1]
  %5 = bitcast { i64, i32* }* %source to i8*      ; [#uses = 4]
  %6 = getelementptr inbounds i8, i8* %.ptr2.i.i.i, i64 %4 ; [#uses = 3, type = i8*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 3]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i.i.i.i = icmp ule i8* %.ptr2.i.i.i, %5   ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i.i.i.i = and i1 %.not.i.i.i.i, %10  ; [#uses = 1]
  %11 = ptrtoint i8* %.ptr2.i.i.i to i64          ; [#uses = 1]
  br i1 %andandval.i.i.i.i, label %if.i.i.i.i, label %endif.i.i.i.i

if.i.i.i.i:                                       ; preds = %0
  %12 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i to i64 ; [#uses = 1]
  %13 = ptrtoint { i64, i32* }* %source to i64    ; [#uses = 1]
  %14 = sub i64 %12, %13                          ; [#uses = 1]
  %15 = insertvalue { i64, i8* } undef, i64 %14, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i8* } %15, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i

endif.i.i.i.i:                                    ; preds = %0
  %.not28.i.i.i.i = icmp uge i8* %.ptr2.i.i.i, %5 ; [#uses = 1]
  %17 = icmp ult i8* %.ptr2.i.i.i, %8             ; [#uses = 1]
  %andandval17.i.i.i.i = and i1 %.not28.i.i.i.i, %17 ; [#uses = 1]
  br i1 %andandval17.i.i.i.i, label %if18.i.i.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i

if18.i.i.i.i:                                     ; preds = %endif.i.i.i.i
  %18 = ptrtoint i8* %b_arg.a_arg.i.i.i.i.i to i64 ; [#uses = 1]
  %19 = sub i64 %18, %11                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2.i.i.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i: ; preds = %if18.i.i.i.i, %endif.i.i.i.i, %if.i.i.i.i
  %22 = phi { i64, i8* } [ %16, %if.i.i.i.i ], [ %21, %if18.i.i.i.i ], [ zeroinitializer, %endif.i.i.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i.i.i = extractvalue { i64, i8* } %22, 0 ; [#uses = 1]
  %.not.i.i = icmp eq i64 %.len1.i.i.i, 0         ; [#uses = 1]
  br i1 %.not.i.i, label %_D3std9algorithm8mutation__T15trustedMoveImplTAiZQvFNaNbNiNeMNkKQsZQv.exit, label %assertFailed.i.i

assertFailed.i.i:                                 ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 72, i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.27, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 1429) #4
  unreachable

_D3std9algorithm8mutation__T15trustedMoveImplTAiZQvFNaNbNiNeMNkKQsZQv.exit: ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i.i
  %.fca.0.insert.i = insertvalue { i64, i32* } undef, i64 %.len.i.i.i, 0 ; [#uses = 1]
  %23 = bitcast i8* %.ptr2.i.i.i to i32*          ; [#uses = 1]
  %.fca.1.insert6.i = insertvalue { i64, i32* } %.fca.0.insert.i, i32* %23, 1 ; [#uses = 1]
  ret { i64, i32* } %.fca.1.insert6.i
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr { i64, i32* } @_D3std9algorithm8mutation__T15trustedMoveImplTAiZQvFNaNbNiNeMNkKQsZQv({ i64, i32* }* dereferenceable(16) %source) local_unnamed_addr #5 {
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i.i = load i64, i64* %1, align 8          ; [#uses = 2]
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %3 = bitcast i32** %2 to i8**                   ; [#uses = 1]
  %.ptr2.i.i = load i8*, i8** %3, align 8         ; [#uses = 7]
  %4 = shl i64 %.len.i.i, 2                       ; [#uses = 1]
  %5 = bitcast { i64, i32* }* %source to i8*      ; [#uses = 4]
  %6 = getelementptr inbounds i8, i8* %.ptr2.i.i, i64 %4 ; [#uses = 3, type = i8*]
  %7 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %8 = bitcast { i64, i32* }* %7 to i8*           ; [#uses = 3]
  %9 = icmp ugt i8* %6, %8                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i.i = select i1 %9, i8* %8, i8* %6 ; [#uses = 2]
  %.not.i.i.i = icmp ule i8* %.ptr2.i.i, %5       ; [#uses = 1]
  %10 = icmp ugt i8* %6, %5                       ; [#uses = 1]
  %andandval.i.i.i = and i1 %.not.i.i.i, %10      ; [#uses = 1]
  %11 = ptrtoint i8* %.ptr2.i.i to i64            ; [#uses = 1]
  br i1 %andandval.i.i.i, label %if.i.i.i, label %endif.i.i.i

if.i.i.i:                                         ; preds = %0
  %12 = ptrtoint i8* %b_arg.a_arg.i.i.i.i to i64  ; [#uses = 1]
  %13 = ptrtoint { i64, i32* }* %source to i64    ; [#uses = 1]
  %14 = sub i64 %12, %13                          ; [#uses = 1]
  %15 = insertvalue { i64, i8* } undef, i64 %14, 0 ; [#uses = 1]
  %16 = insertvalue { i64, i8* } %15, i8* %5, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i

endif.i.i.i:                                      ; preds = %0
  %.not28.i.i.i = icmp uge i8* %.ptr2.i.i, %5     ; [#uses = 1]
  %17 = icmp ult i8* %.ptr2.i.i, %8               ; [#uses = 1]
  %andandval17.i.i.i = and i1 %.not28.i.i.i, %17  ; [#uses = 1]
  br i1 %andandval17.i.i.i, label %if18.i.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i

if18.i.i.i:                                       ; preds = %endif.i.i.i
  %18 = ptrtoint i8* %b_arg.a_arg.i.i.i.i to i64  ; [#uses = 1]
  %19 = sub i64 %18, %11                          ; [#uses = 1]
  %20 = insertvalue { i64, i8* } undef, i64 %19, 0 ; [#uses = 1]
  %21 = insertvalue { i64, i8* } %20, i8* %.ptr2.i.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i: ; preds = %if18.i.i.i, %endif.i.i.i, %if.i.i.i
  %22 = phi { i64, i8* } [ %16, %if.i.i.i ], [ %21, %if18.i.i.i ], [ zeroinitializer, %endif.i.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i.i = extractvalue { i64, i8* } %22, 0   ; [#uses = 1]
  %.not.i = icmp eq i64 %.len1.i.i, 0             ; [#uses = 1]
  br i1 %.not.i, label %_D3std9algorithm8mutation__T15moveEmplaceImplTAiZQvFNaNbNiNfMKQqMNkKQwZv.exit, label %assertFailed.i

assertFailed.i:                                   ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i
  tail call void @_d_assert_msg({ i64, i8* } { i64 72, i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.27, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 1429) #4
  unreachable

_D3std9algorithm8mutation__T15moveEmplaceImplTAiZQvFNaNbNiNfMKQqMNkKQwZv.exit: ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit.i
  %.fca.0.insert = insertvalue { i64, i32* } undef, i64 %.len.i.i, 0 ; [#uses = 1]
  %23 = bitcast i8* %.ptr2.i.i to i32*            ; [#uses = 1]
  %.fca.1.insert6 = insertvalue { i64, i32* } %.fca.0.insert, i32* %23, 1 ; [#uses = 1]
  ret { i64, i32* } %.fca.1.insert6
}

; [#uses = 0]
; Function Attrs: uwtable
define weak_odr void @_D3std9algorithm8mutation__T15moveEmplaceImplTAiZQvFNaNbNiNfMKQqMNkKQwZv({ i64, i32* }* dereferenceable(16) %source, { i64, i32* }* dereferenceable(16) %target) local_unnamed_addr #5 {
andandend:
  %0 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 0 ; [#uses = 1, type = i64*]
  %.len.i = load i64, i64* %0, align 8            ; [#uses = 2]
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %2 = bitcast i32** %1 to i8**                   ; [#uses = 1]
  %.ptr2.i = load i8*, i8** %2, align 8           ; [#uses = 6]
  %3 = shl i64 %.len.i, 2                         ; [#uses = 1]
  %4 = bitcast { i64, i32* }* %source to i8*      ; [#uses = 4]
  %5 = getelementptr inbounds i8, i8* %.ptr2.i, i64 %3 ; [#uses = 3, type = i8*]
  %6 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %source, i64 1 ; [#uses = 1, type = { i64, i32* }*]
  %7 = bitcast { i64, i32* }* %6 to i8*           ; [#uses = 3]
  %8 = icmp ugt i8* %5, %7                        ; [#uses = 1]
  %b_arg.a_arg.i.i.i = select i1 %8, i8* %7, i8* %5 ; [#uses = 2]
  %.not.i.i = icmp ule i8* %.ptr2.i, %4           ; [#uses = 1]
  %9 = icmp ugt i8* %5, %4                        ; [#uses = 1]
  %andandval.i.i = and i1 %.not.i.i, %9           ; [#uses = 1]
  %10 = ptrtoint i8* %.ptr2.i to i64              ; [#uses = 2]
  br i1 %andandval.i.i, label %if.i.i, label %endif.i.i

if.i.i:                                           ; preds = %andandend
  %11 = ptrtoint i8* %b_arg.a_arg.i.i.i to i64    ; [#uses = 1]
  %12 = ptrtoint { i64, i32* }* %source to i64    ; [#uses = 1]
  %13 = sub i64 %11, %12                          ; [#uses = 1]
  %14 = insertvalue { i64, i8* } undef, i64 %13, 0 ; [#uses = 1]
  %15 = insertvalue { i64, i8* } %14, i8* %4, 1   ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

endif.i.i:                                        ; preds = %andandend
  %.not28.i.i = icmp uge i8* %.ptr2.i, %4         ; [#uses = 1]
  %16 = icmp ult i8* %.ptr2.i, %7                 ; [#uses = 1]
  %andandval17.i.i = and i1 %.not28.i.i, %16      ; [#uses = 1]
  br i1 %andandval17.i.i, label %if18.i.i, label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

if18.i.i:                                         ; preds = %endif.i.i
  %17 = ptrtoint i8* %b_arg.a_arg.i.i.i to i64    ; [#uses = 1]
  %18 = sub i64 %17, %10                          ; [#uses = 1]
  %19 = insertvalue { i64, i8* } undef, i64 %18, 0 ; [#uses = 1]
  %20 = insertvalue { i64, i8* } %19, i8* %.ptr2.i, 1 ; [#uses = 1]
  br label %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit

_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit: ; preds = %if.i.i, %endif.i.i, %if18.i.i
  %21 = phi { i64, i8* } [ %15, %if.i.i ], [ %20, %if18.i.i ], [ zeroinitializer, %endif.i.i ] ; [#uses = 1, type = { i64, i8* }]
  %.len1.i = extractvalue { i64, i8* } %21, 0     ; [#uses = 1]
  %.not = icmp eq i64 %.len1.i, 0                 ; [#uses = 1]
  br i1 %.not, label %assertPassed, label %assertFailed

assertPassed:                                     ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit
  %22 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %target, i64 0, i32 0 ; [#uses = 1, type = i64*]
  store i64 %.len.i, i64* %22, align 8
  %23 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %target, i64 0, i32 1 ; [#uses = 1, type = i32**]
  %24 = bitcast i32** %23 to i64*                 ; [#uses = 1]
  store i64 %10, i64* %24, align 8
  ret void

assertFailed:                                     ; preds = %_D3std9exception__T11doesPointToTAiTQdTvZQwFNaNbNiNeKxAiKxQeZb.exit
  tail call void @_d_assert_msg({ i64, i8* } { i64 72, i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.27, i32 0, i32 0) }, { i64, i8* } { i64 64, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i32 0, i32 0) }, i32 1429) #4
  unreachable
}

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

; [#uses = 3]
; Function Attrs: nofree nounwind readonly
declare i32 @bcmp(i8* nocapture, i8* nocapture, i64) local_unnamed_addr #7

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

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

attributes #0 = { nounwind readnone 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 = { uwtable }
attributes #4 = { cold noreturn uwtable }
attributes #5 = { uwtable "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #6 = { "frame-pointer"="none" "target-cpu"="x86-64" "target-features"="+cx16" }
attributes #7 = { nofree nounwind readonly }
attributes #8 = { argmemonly nounwind willreturn }

!llvm.ldc.typeinfo._D11TypeInfo_Ai6__initZ = !{!0}
!llvm.ldc.typeinfo._D12TypeInfo_xAi6__initZ = !{!0}
!llvm.ldc.typeinfo._D12TypeInfo_Axi6__initZ = !{!0}
!llvm.ldc.typeinfo._D11TypeInfo_xi6__initZ = !{!1}
!llvm.ldc.typeinfo._D10TypeInfo_i6__initZ = !{!1}
!llvm.ident = !{!2}

!0 = !{{ i64, i32* } undef}
!1 = !{i32 undef}
!2 = !{!"ldc version 1.28.0"}
