; LLVM IR from scandum/quadsort :: src (bench)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@comparisons = external dso_local global i64, align 8
@test_sort.compare = external hidden global i8, align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [56 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
declare dso_local void @quadsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @quadsort_size(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_stable(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_double(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_str(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_int_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_double_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local i64 @utime() #2

; Function Attrs: nounwind uwtable
define dso_local void @test_sort(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, i64 noundef %10, ptr noundef %11) #2 {
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca [100 x i8], align 16
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  store ptr %0, ptr %13, align 8, !tbaa !5
  store ptr %1, ptr %14, align 8, !tbaa !5
  store ptr %2, ptr %15, align 8, !tbaa !5
  store i32 %3, ptr %16, align 4, !tbaa !9
  store i32 %4, ptr %17, align 4, !tbaa !9
  store i32 %5, ptr %18, align 4, !tbaa !9
  store i32 %6, ptr %19, align 4, !tbaa !9
  store ptr %7, ptr %20, align 8, !tbaa !5
  store ptr %8, ptr %21, align 8, !tbaa !5
  store ptr %9, ptr %22, align 8, !tbaa !5
  store i64 %10, ptr %23, align 8, !tbaa !11
  store ptr %11, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 100, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %54 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %54, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %55 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %55, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %56 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %56, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %57 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %57, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %58 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %58, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %59 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %59, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %60 = load ptr, ptr %21, align 8, !tbaa !5
  %61 = load i8, ptr %60, align 1, !tbaa !13
  %62 = sext i8 %61 to i32
  %63 = icmp eq i32 %62, 42
  br i1 %63, label %64, label %97

64:                                               ; preds = %12
  %65 = load ptr, ptr %22, align 8, !tbaa !5
  %66 = call i32 @strcmp(ptr noundef %65, ptr noundef @.str.8) #8
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %84

68:                                               ; preds = %64
  %69 = load ptr, ptr %22, align 8, !tbaa !5
  %70 = call i32 @strcmp(ptr noundef %69, ptr noundef @.str.9) #8
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %72, label %84

72:                                               ; preds = %68
  %73 = load ptr, ptr %22, align 8, !tbaa !5
  %74 = call i32 @strcmp(ptr noundef %73, ptr noundef @.str.10) #8
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %76, label %84

76:                                               ; preds = %72
  %77 = load ptr, ptr %22, align 8, !tbaa !5
  %78 = call i32 @strcmp(ptr noundef %77, ptr noundef @.str.11) #8
  %79 = icmp ne i32 %78, 0
  br i1 %79, label %80, label %84

80:                                               ; preds = %76
  %81 = load ptr, ptr %22, align 8, !tbaa !5
  %82 = call i32 @strcmp(ptr noundef %81, ptr noundef @.str.12) #8
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %94, label %84

84:                                               ; preds = %80, %76, %72, %68, %64
  %85 = load i64, ptr @comparisons, align 8, !tbaa !11
  %86 = icmp ne i64 %85, 0
  br i1 %86, label %87, label %90

87:                                               ; preds = %84
  store i8 1, ptr @test_sort.compare, align 1, !tbaa !13
  %88 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef @.str.14)
  %89 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef @.str.15)
  br label %93

90:                                               ; preds = %84
  %91 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef @.str.16)
  %92 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef @.str.15)
  br label %93

93:                                               ; preds = %90, %87
  br label %96

94:                                               ; preds = %80
  %95 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, ptr noundef @.str.17)
  br label %96

96:                                               ; preds = %94, %93
  store i32 1, ptr %43, align 4
  br label %873

97:                                               ; preds = %12
  %98 = load ptr, ptr %21, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %98, i64 0
  %100 = load i8, ptr %99, align 1, !tbaa !13
  %101 = sext i8 %100 to i32
  %102 = load ptr, ptr %21, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %102, i64 1
  %104 = load i8, ptr %103, align 1, !tbaa !13
  %105 = sext i8 %104 to i32
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %107, label %113

107:                                              ; preds = %97
  %108 = load ptr, ptr %21, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %108, i64 1
  %110 = load i8, ptr %109, align 1, !tbaa !13
  %111 = sext i8 %110 to i32
  %112 = mul nsw i32 %111, 32
  br label %114

113:                                              ; preds = %97
  br label %114

114:                                              ; preds = %113, %107
  %115 = phi i32 [ %112, %107 ], [ 0, %113 ]
  %116 = add nsw i32 %101, %115
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %117, i64 2
  %119 = load i8, ptr %118, align 1, !tbaa !13
  %120 = sext i8 %119 to i32
  %121 = icmp ne i32 %120, 0
  br i1 %121, label %122, label %128

122:                                              ; preds = %114
  %123 = load ptr, ptr %21, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 2
  %125 = load i8, ptr %124, align 1, !tbaa !13
  %126 = sext i8 %125 to i32
  %127 = mul nsw i32 %126, 1024
  br label %129

128:                                              ; preds = %114
  br label %129

129:                                              ; preds = %128, %122
  %130 = phi i32 [ %127, %122 ], [ 0, %128 ]
  %131 = add nsw i32 %116, %130
  store i32 %131, ptr %42, align 4, !tbaa !9
  store i64 0, ptr %30, align 8, !tbaa !14
  store i64 0, ptr %29, align 8, !tbaa !14
  store i64 0, ptr %28, align 8, !tbaa !14
  %132 = load i32, ptr %16, align 4, !tbaa !9
  %133 = icmp eq i32 %132, 7
  br i1 %133, label %134, label %162

134:                                              ; preds = %129
  %135 = load i32, ptr %17, align 4, !tbaa !9
  %136 = icmp eq i32 %135, 7
  br i1 %136, label %137, label %162

137:                                              ; preds = %134
  %138 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %138, ptr %36, align 8, !tbaa !5
  %139 = load ptr, ptr %36, align 8, !tbaa !5
  %140 = getelementptr inbounds i32, ptr %139, i64 0
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = load ptr, ptr %36, align 8, !tbaa !5
  %143 = getelementptr inbounds i32, ptr %142, i64 1
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = load ptr, ptr %36, align 8, !tbaa !5
  %146 = getelementptr inbounds i32, ptr %145, i64 2
  %147 = load i32, ptr %146, align 4, !tbaa !9
  %148 = load ptr, ptr %36, align 8, !tbaa !5
  %149 = getelementptr inbounds i32, ptr %148, i64 3
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = load ptr, ptr %36, align 8, !tbaa !5
  %152 = getelementptr inbounds i32, ptr %151, i64 4
  %153 = load i32, ptr %152, align 4, !tbaa !9
  %154 = load ptr, ptr %36, align 8, !tbaa !5
  %155 = getelementptr inbounds i32, ptr %154, i64 5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = load ptr, ptr %36, align 8, !tbaa !5
  %158 = getelementptr inbounds i32, ptr %157, i64 6
  %159 = load i32, ptr %158, align 4, !tbaa !9
  %160 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %141, i32 noundef %144, i32 noundef %147, i32 noundef %150, i32 noundef %153, i32 noundef %156, i32 noundef %159)
  %161 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %161, ptr %36, align 8, !tbaa !5
  br label %162

162:                                              ; preds = %137, %134, %129
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %251, %162
  %164 = load i32, ptr %39, align 4, !tbaa !9
  %165 = load i32, ptr %18, align 4, !tbaa !9
  %166 = icmp slt i32 %164, %165
  br i1 %166, label %167, label %254

167:                                              ; preds = %163
  store i64 0, ptr %30, align 8, !tbaa !14
  store i64 0, ptr %27, align 8, !tbaa !14
  %168 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %168, ptr %40, align 4, !tbaa !9
  %169 = call i64 @utime()
  store i64 %169, ptr %25, align 8, !tbaa !14
  %170 = load i32, ptr %19, align 4, !tbaa !9
  %171 = sub nsw i32 %170, 1
  store i32 %171, ptr %38, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %231, %167
  %173 = load i32, ptr %38, align 4, !tbaa !9
  %174 = icmp sge i32 %173, 0
  br i1 %174, label %175, label %234

175:                                              ; preds = %172
  %176 = load ptr, ptr %13, align 8, !tbaa !5
  %177 = load ptr, ptr %14, align 8, !tbaa !5
  %178 = load i32, ptr %17, align 4, !tbaa !9
  %179 = load i32, ptr %38, align 4, !tbaa !9
  %180 = mul nsw i32 %178, %179
  %181 = sext i32 %180 to i64
  %182 = load i64, ptr %23, align 8, !tbaa !11
  %183 = mul i64 %181, %182
  %184 = getelementptr inbounds i8, ptr %177, i64 %183
  %185 = load i32, ptr %40, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = load i64, ptr %23, align 8, !tbaa !11
  %188 = mul i64 %186, %187
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %176, ptr align 1 %184, i64 %188, i1 false)
  store i64 0, ptr @comparisons, align 8, !tbaa !11
  %189 = load i32, ptr %42, align 4, !tbaa !9
  switch i32 %189, label %208 [
    i32 103185, label %190
    i32 118867, label %196
    i32 117457, label %202
  ]

190:                                              ; preds = %175
  %191 = load ptr, ptr %13, align 8, !tbaa !5
  %192 = load i32, ptr %40, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = load i64, ptr %23, align 8, !tbaa !11
  %195 = load ptr, ptr %24, align 8, !tbaa !5
  call void @quadsort(ptr noundef %191, i64 noundef %193, i64 noundef %194, ptr noundef %195)
  br label %216

196:                                              ; preds = %175
  %197 = load ptr, ptr %13, align 8, !tbaa !5
  %198 = load i32, ptr %40, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = load i64, ptr %23, align 8, !tbaa !11
  %201 = load ptr, ptr %24, align 8, !tbaa !5
  call void @quadsort_size(ptr noundef %197, i64 noundef %199, i64 noundef %200, ptr noundef %201)
  br label %216

202:                                              ; preds = %175
  %203 = load ptr, ptr %13, align 8, !tbaa !5
  %204 = load i32, ptr %40, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = load i64, ptr %23, align 8, !tbaa !11
  %207 = load ptr, ptr %24, align 8, !tbaa !5
  call void @qsort(ptr noundef %203, i64 noundef %205, i64 noundef %206, ptr noundef %207)
  br label %216

208:                                              ; preds = %175
  %209 = load i32, ptr %42, align 4, !tbaa !9
  switch i32 %209, label %213 [
    i32 120403, label %210
    i32 103155, label %210
    i32 119024, label %210
    i32 121202, label %210
    i32 102867, label %210
    i32 115092, label %210
  ]

210:                                              ; preds = %208, %208, %208, %208, %208, %208
  %211 = load ptr, ptr %21, align 8, !tbaa !5
  %212 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, ptr noundef %211)
  store i32 1, ptr %43, align 4
  br label %873

213:                                              ; preds = %208
  %214 = load ptr, ptr %21, align 8, !tbaa !5
  %215 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, ptr noundef %214)
  store i32 1, ptr %43, align 4
  br label %873

216:                                              ; preds = %202, %196, %190
  %217 = load i64, ptr @comparisons, align 8, !tbaa !11
  %218 = load i64, ptr %30, align 8, !tbaa !14
  %219 = add i64 %218, %217
  store i64 %219, ptr %30, align 8, !tbaa !14
  %220 = load i32, ptr %16, align 4, !tbaa !9
  %221 = load i32, ptr %17, align 4, !tbaa !9
  %222 = icmp slt i32 %220, %221
  br i1 %222, label %223, label %230

223:                                              ; preds = %216
  %224 = load i32, ptr %40, align 4, !tbaa !9
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %40, align 4, !tbaa !9
  %226 = load i32, ptr %17, align 4, !tbaa !9
  %227 = icmp sgt i32 %225, %226
  br i1 %227, label %228, label %230

228:                                              ; preds = %223
  %229 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %229, ptr %40, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %228, %223, %216
  br label %231

231:                                              ; preds = %230
  %232 = load i32, ptr %38, align 4, !tbaa !9
  %233 = add nsw i32 %232, -1
  store i32 %233, ptr %38, align 4, !tbaa !9
  br label %172, !llvm.loop !16

234:                                              ; preds = %172
  %235 = call i64 @utime()
  store i64 %235, ptr %26, align 8, !tbaa !14
  %236 = load i64, ptr %26, align 8, !tbaa !14
  %237 = load i64, ptr %25, align 8, !tbaa !14
  %238 = sub nsw i64 %236, %237
  store i64 %238, ptr %27, align 8, !tbaa !14
  %239 = load i64, ptr %28, align 8, !tbaa !14
  %240 = icmp ne i64 %239, 0
  br i1 %240, label %241, label %245

241:                                              ; preds = %234
  %242 = load i64, ptr %27, align 8, !tbaa !14
  %243 = load i64, ptr %28, align 8, !tbaa !14
  %244 = icmp slt i64 %242, %243
  br i1 %244, label %245, label %247

245:                                              ; preds = %241, %234
  %246 = load i64, ptr %27, align 8, !tbaa !14
  store i64 %246, ptr %28, align 8, !tbaa !14
  br label %247

247:                                              ; preds = %245, %241
  %248 = load i64, ptr %27, align 8, !tbaa !14
  %249 = load i64, ptr %29, align 8, !tbaa !14
  %250 = add nsw i64 %249, %248
  store i64 %250, ptr %29, align 8, !tbaa !14
  br label %251

251:                                              ; preds = %247
  %252 = load i32, ptr %39, align 4, !tbaa !9
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %39, align 4, !tbaa !9
  br label %163, !llvm.loop !18

254:                                              ; preds = %163
  %255 = load i32, ptr %16, align 4, !tbaa !9
  %256 = icmp eq i32 %255, 7
  br i1 %256, label %257, label %283

257:                                              ; preds = %254
  %258 = load i32, ptr %17, align 4, !tbaa !9
  %259 = icmp eq i32 %258, 7
  br i1 %259, label %260, label %283

260:                                              ; preds = %257
  %261 = load ptr, ptr %36, align 8, !tbaa !5
  %262 = getelementptr inbounds i32, ptr %261, i64 0
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = load ptr, ptr %36, align 8, !tbaa !5
  %265 = getelementptr inbounds i32, ptr %264, i64 1
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = load ptr, ptr %36, align 8, !tbaa !5
  %268 = getelementptr inbounds i32, ptr %267, i64 2
  %269 = load i32, ptr %268, align 4, !tbaa !9
  %270 = load ptr, ptr %36, align 8, !tbaa !5
  %271 = getelementptr inbounds i32, ptr %270, i64 3
  %272 = load i32, ptr %271, align 4, !tbaa !9
  %273 = load ptr, ptr %36, align 8, !tbaa !5
  %274 = getelementptr inbounds i32, ptr %273, i64 4
  %275 = load i32, ptr %274, align 4, !tbaa !9
  %276 = load ptr, ptr %36, align 8, !tbaa !5
  %277 = getelementptr inbounds i32, ptr %276, i64 5
  %278 = load i32, ptr %277, align 4, !tbaa !9
  %279 = load ptr, ptr %36, align 8, !tbaa !5
  %280 = getelementptr inbounds i32, ptr %279, i64 6
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %263, i32 noundef %266, i32 noundef %269, i32 noundef %272, i32 noundef %275, i32 noundef %278, i32 noundef %281)
  br label %283

283:                                              ; preds = %260, %257, %254
  %284 = load i32, ptr %19, align 4, !tbaa !9
  %285 = icmp eq i32 %284, 0
  br i1 %285, label %286, label %287

286:                                              ; preds = %283
  store i32 1, ptr %43, align 4
  br label %873

287:                                              ; preds = %283
  %288 = load i32, ptr %18, align 4, !tbaa !9
  %289 = sext i32 %288 to i64
  %290 = load i64, ptr %29, align 8, !tbaa !14
  %291 = sdiv i64 %290, %289
  store i64 %291, ptr %29, align 8, !tbaa !14
  %292 = load ptr, ptr %24, align 8, !tbaa !5
  %293 = icmp eq ptr %292, @cmp_stable
  br i1 %293, label %294, label %321

294:                                              ; preds = %287
  store i32 1, ptr %41, align 4, !tbaa !9
  br label %295

295:                                              ; preds = %317, %294
  %296 = load i32, ptr %41, align 4, !tbaa !9
  %297 = load i32, ptr %17, align 4, !tbaa !9
  %298 = icmp slt i32 %296, %297
  br i1 %298, label %299, label %320

299:                                              ; preds = %295
  %300 = load ptr, ptr %36, align 8, !tbaa !5
  %301 = load i32, ptr %41, align 4, !tbaa !9
  %302 = sub nsw i32 %301, 1
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i32, ptr %300, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !9
  %306 = load ptr, ptr %36, align 8, !tbaa !5
  %307 = load i32, ptr %41, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds i32, ptr %306, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %311 = icmp sgt i32 %305, %310
  br i1 %311, label %312, label %316

312:                                              ; preds = %299
  %313 = getelementptr inbounds [100 x i8], ptr %31, i64 0, i64 0
  %314 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %313, ptr noundef @.str.21, ptr noundef @.str.22) #7
  %315 = getelementptr inbounds [100 x i8], ptr %31, i64 0, i64 0
  store ptr %315, ptr %22, align 8, !tbaa !5
  br label %320

316:                                              ; preds = %299
  br label %317

317:                                              ; preds = %316
  %318 = load i32, ptr %41, align 4, !tbaa !9
  %319 = add nsw i32 %318, 1
  store i32 %319, ptr %41, align 4, !tbaa !9
  br label %295, !llvm.loop !19

320:                                              ; preds = %312, %295
  br label %321

321:                                              ; preds = %320, %287
  %322 = load i8, ptr @test_sort.compare, align 1, !tbaa !13
  %323 = icmp ne i8 %322, 0
  br i1 %323, label %324, label %366

324:                                              ; preds = %321
  %325 = load i32, ptr %19, align 4, !tbaa !9
  %326 = icmp sle i32 %325, 1
  br i1 %326, label %327, label %344

327:                                              ; preds = %324
  %328 = load ptr, ptr %21, align 8, !tbaa !5
  %329 = load i32, ptr %17, align 4, !tbaa !9
  %330 = load i64, ptr %23, align 8, !tbaa !11
  %331 = trunc i64 %330 to i32
  %332 = mul nsw i32 %331, 8
  %333 = load i64, ptr %28, align 8, !tbaa !14
  %334 = sitofp i64 %333 to double
  %335 = fdiv double %334, 1.000000e+06
  %336 = load i64, ptr %29, align 8, !tbaa !14
  %337 = sitofp i64 %336 to double
  %338 = fdiv double %337, 1.000000e+06
  %339 = load i64, ptr @comparisons, align 8, !tbaa !11
  %340 = trunc i64 %339 to i32
  %341 = load i32, ptr %18, align 4, !tbaa !9
  %342 = load ptr, ptr %22, align 8, !tbaa !5
  %343 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, ptr noundef %328, i32 noundef %329, i32 noundef %332, double noundef %335, double noundef %338, i32 noundef %340, i32 noundef %341, ptr noundef %342)
  br label %365

344:                                              ; preds = %324
  %345 = load ptr, ptr %21, align 8, !tbaa !5
  %346 = load i32, ptr %17, align 4, !tbaa !9
  %347 = load i64, ptr %23, align 8, !tbaa !11
  %348 = trunc i64 %347 to i32
  %349 = mul nsw i32 %348, 8
  %350 = load i64, ptr %28, align 8, !tbaa !14
  %351 = sitofp i64 %350 to double
  %352 = fdiv double %351, 1.000000e+06
  %353 = load i64, ptr %29, align 8, !tbaa !14
  %354 = sitofp i64 %353 to double
  %355 = fdiv double %354, 1.000000e+06
  %356 = load i64, ptr %30, align 8, !tbaa !14
  %357 = sitofp i64 %356 to float
  %358 = load i32, ptr %19, align 4, !tbaa !9
  %359 = sitofp i32 %358 to float
  %360 = fdiv float %357, %359
  %361 = fpext float %360 to double
  %362 = load i32, ptr %18, align 4, !tbaa !9
  %363 = load ptr, ptr %22, align 8, !tbaa !5
  %364 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, ptr noundef %345, i32 noundef %346, i32 noundef %349, double noundef %352, double noundef %355, double noundef %361, i32 noundef %362, ptr noundef %363)
  br label %365

365:                                              ; preds = %344, %327
  br label %382

366:                                              ; preds = %321
  %367 = load ptr, ptr %21, align 8, !tbaa !5
  %368 = load i32, ptr %17, align 4, !tbaa !9
  %369 = load i64, ptr %23, align 8, !tbaa !11
  %370 = trunc i64 %369 to i32
  %371 = mul nsw i32 %370, 8
  %372 = load i64, ptr %28, align 8, !tbaa !14
  %373 = sitofp i64 %372 to double
  %374 = fdiv double %373, 1.000000e+06
  %375 = load i64, ptr %29, align 8, !tbaa !14
  %376 = sitofp i64 %375 to double
  %377 = fdiv double %376, 1.000000e+06
  %378 = load i32, ptr %19, align 4, !tbaa !9
  %379 = load i32, ptr %18, align 4, !tbaa !9
  %380 = load ptr, ptr %22, align 8, !tbaa !5
  %381 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, ptr noundef %367, i32 noundef %368, i32 noundef %371, double noundef %374, double noundef %377, i32 noundef %378, i32 noundef %379, ptr noundef %380)
  br label %382

382:                                              ; preds = %366, %365
  %383 = load i32, ptr %16, align 4, !tbaa !9
  %384 = load i32, ptr %17, align 4, !tbaa !9
  %385 = icmp ne i32 %383, %384
  br i1 %385, label %389, label %386

386:                                              ; preds = %382
  %387 = load ptr, ptr %24, align 8, !tbaa !5
  %388 = icmp eq ptr %387, @cmp_stable
  br i1 %388, label %389, label %390

389:                                              ; preds = %386, %382
  store i32 1, ptr %43, align 4
  br label %873

390:                                              ; preds = %386
  store i32 1, ptr %41, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %662, %390
  %392 = load i32, ptr %41, align 4, !tbaa !9
  %393 = load i32, ptr %17, align 4, !tbaa !9
  %394 = icmp slt i32 %392, %393
  br i1 %394, label %395, label %665

395:                                              ; preds = %391
  %396 = load ptr, ptr %24, align 8, !tbaa !5
  %397 = icmp eq ptr %396, @cmp_str
  br i1 %397, label %398, label %432

398:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %399 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %399, ptr %44, align 8, !tbaa !5
  %400 = load ptr, ptr %44, align 8, !tbaa !5
  %401 = load i32, ptr %41, align 4, !tbaa !9
  %402 = sub nsw i32 %401, 1
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds ptr, ptr %400, i64 %403
  %405 = load ptr, ptr %404, align 8, !tbaa !5
  %406 = load ptr, ptr %44, align 8, !tbaa !5
  %407 = load i32, ptr %41, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds ptr, ptr %406, i64 %408
  %410 = load ptr, ptr %409, align 8, !tbaa !5
  %411 = call i32 @strcmp(ptr noundef %405, ptr noundef %410) #8
  %412 = icmp sgt i32 %411, 0
  br i1 %412, label %413, label %428

413:                                              ; preds = %398
  %414 = load ptr, ptr %21, align 8, !tbaa !5
  %415 = load i32, ptr %41, align 4, !tbaa !9
  %416 = load ptr, ptr %44, align 8, !tbaa !5
  %417 = load i32, ptr %41, align 4, !tbaa !9
  %418 = sub nsw i32 %417, 1
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds ptr, ptr %416, i64 %419
  %421 = load ptr, ptr %420, align 8, !tbaa !5
  %422 = load ptr, ptr %44, align 8, !tbaa !5
  %423 = load i32, ptr %41, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds ptr, ptr %422, i64 %424
  %426 = load ptr, ptr %425, align 8, !tbaa !5
  %427 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, ptr noundef %414, i32 noundef %415, ptr noundef %421, ptr noundef %426)
  store i32 13, ptr %43, align 4
  br label %429

428:                                              ; preds = %398
  store i32 0, ptr %43, align 4
  br label %429

429:                                              ; preds = %428, %413
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  %430 = load i32, ptr %43, align 4
  switch i32 %430, label %876 [
    i32 0, label %431
    i32 13, label %665
  ]

431:                                              ; preds = %429
  br label %661

432:                                              ; preds = %395
  %433 = load i64, ptr %23, align 8, !tbaa !11
  %434 = icmp eq i64 %433, 8
  br i1 %434, label %435, label %472

435:                                              ; preds = %432
  %436 = load ptr, ptr %24, align 8, !tbaa !5
  %437 = icmp eq ptr %436, @cmp_long_double_ptr
  br i1 %437, label %438, label %472

438:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %439 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %439, ptr %45, align 8, !tbaa !5
  %440 = load ptr, ptr %45, align 8, !tbaa !5
  %441 = load i32, ptr %41, align 4, !tbaa !9
  %442 = sub nsw i32 %441, 1
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds ptr, ptr %440, i64 %443
  %445 = load ptr, ptr %45, align 8, !tbaa !5
  %446 = load i32, ptr %41, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds ptr, ptr %445, i64 %447
  %449 = call i32 @cmp_long_double_ptr(ptr noundef %444, ptr noundef %448)
  %450 = icmp sgt i32 %449, 0
  br i1 %450, label %451, label %468

451:                                              ; preds = %438
  %452 = load ptr, ptr %21, align 8, !tbaa !5
  %453 = load i32, ptr %41, align 4, !tbaa !9
  %454 = load ptr, ptr %45, align 8, !tbaa !5
  %455 = load i32, ptr %41, align 4, !tbaa !9
  %456 = sub nsw i32 %455, 1
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds ptr, ptr %454, i64 %457
  %459 = load ptr, ptr %458, align 8, !tbaa !5
  %460 = load x86_fp80, ptr %459, align 16, !tbaa !20
  %461 = load ptr, ptr %45, align 8, !tbaa !5
  %462 = load i32, ptr %41, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds ptr, ptr %461, i64 %463
  %465 = load ptr, ptr %464, align 8, !tbaa !5
  %466 = load x86_fp80, ptr %465, align 16, !tbaa !20
  %467 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, ptr noundef %452, i32 noundef %453, x86_fp80 noundef %460, x86_fp80 noundef %466)
  store i32 13, ptr %43, align 4
  br label %469

468:                                              ; preds = %438
  store i32 0, ptr %43, align 4
  br label %469

469:                                              ; preds = %468, %451
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  %470 = load i32, ptr %43, align 4
  switch i32 %470, label %876 [
    i32 0, label %471
    i32 13, label %665
  ]

471:                                              ; preds = %469
  br label %660

472:                                              ; preds = %435, %432
  %473 = load ptr, ptr %24, align 8, !tbaa !5
  %474 = icmp eq ptr %473, @cmp_long_ptr
  br i1 %474, label %475, label %509

475:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %476 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %476, ptr %46, align 8, !tbaa !5
  %477 = load ptr, ptr %46, align 8, !tbaa !5
  %478 = load i32, ptr %41, align 4, !tbaa !9
  %479 = sub nsw i32 %478, 1
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds ptr, ptr %477, i64 %480
  %482 = load ptr, ptr %46, align 8, !tbaa !5
  %483 = load i32, ptr %41, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds ptr, ptr %482, i64 %484
  %486 = call i32 @cmp_long_ptr(ptr noundef %481, ptr noundef %485)
  %487 = icmp sgt i32 %486, 0
  br i1 %487, label %488, label %505

488:                                              ; preds = %475
  %489 = load ptr, ptr %21, align 8, !tbaa !5
  %490 = load i32, ptr %41, align 4, !tbaa !9
  %491 = load ptr, ptr %46, align 8, !tbaa !5
  %492 = load i32, ptr %41, align 4, !tbaa !9
  %493 = sub nsw i32 %492, 1
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds ptr, ptr %491, i64 %494
  %496 = load ptr, ptr %495, align 8, !tbaa !5
  %497 = load i64, ptr %496, align 8, !tbaa !14
  %498 = load ptr, ptr %46, align 8, !tbaa !5
  %499 = load i32, ptr %41, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds ptr, ptr %498, i64 %500
  %502 = load ptr, ptr %501, align 8, !tbaa !5
  %503 = load i64, ptr %502, align 8, !tbaa !14
  %504 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, ptr noundef %489, i32 noundef %490, i64 noundef %497, i64 noundef %503)
  store i32 13, ptr %43, align 4
  br label %506

505:                                              ; preds = %475
  store i32 0, ptr %43, align 4
  br label %506

506:                                              ; preds = %505, %488
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  %507 = load i32, ptr %43, align 4
  switch i32 %507, label %876 [
    i32 0, label %508
    i32 13, label %665
  ]

508:                                              ; preds = %506
  br label %659

509:                                              ; preds = %472
  %510 = load ptr, ptr %24, align 8, !tbaa !5
  %511 = icmp eq ptr %510, @cmp_int_ptr
  br i1 %511, label %512, label %546

512:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %513 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %513, ptr %47, align 8, !tbaa !5
  %514 = load ptr, ptr %47, align 8, !tbaa !5
  %515 = load i32, ptr %41, align 4, !tbaa !9
  %516 = sub nsw i32 %515, 1
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds ptr, ptr %514, i64 %517
  %519 = load ptr, ptr %47, align 8, !tbaa !5
  %520 = load i32, ptr %41, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds ptr, ptr %519, i64 %521
  %523 = call i32 @cmp_int_ptr(ptr noundef %518, ptr noundef %522)
  %524 = icmp sgt i32 %523, 0
  br i1 %524, label %525, label %542

525:                                              ; preds = %512
  %526 = load ptr, ptr %21, align 8, !tbaa !5
  %527 = load i32, ptr %41, align 4, !tbaa !9
  %528 = load ptr, ptr %47, align 8, !tbaa !5
  %529 = load i32, ptr %41, align 4, !tbaa !9
  %530 = sub nsw i32 %529, 1
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds ptr, ptr %528, i64 %531
  %533 = load ptr, ptr %532, align 8, !tbaa !5
  %534 = load i32, ptr %533, align 4, !tbaa !9
  %535 = load ptr, ptr %47, align 8, !tbaa !5
  %536 = load i32, ptr %41, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds ptr, ptr %535, i64 %537
  %539 = load ptr, ptr %538, align 8, !tbaa !5
  %540 = load i32, ptr %539, align 4, !tbaa !9
  %541 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, ptr noundef %526, i32 noundef %527, i32 noundef %534, i32 noundef %540)
  store i32 13, ptr %43, align 4
  br label %543

542:                                              ; preds = %512
  store i32 0, ptr %43, align 4
  br label %543

543:                                              ; preds = %542, %525
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  %544 = load i32, ptr %43, align 4
  switch i32 %544, label %876 [
    i32 0, label %545
    i32 13, label %665
  ]

545:                                              ; preds = %543
  br label %658

546:                                              ; preds = %509
  %547 = load i64, ptr %23, align 8, !tbaa !11
  %548 = icmp eq i64 %547, 4
  br i1 %548, label %549, label %592

549:                                              ; preds = %546
  %550 = load ptr, ptr %36, align 8, !tbaa !5
  %551 = load i32, ptr %41, align 4, !tbaa !9
  %552 = sub nsw i32 %551, 1
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds i32, ptr %550, i64 %553
  %555 = load i32, ptr %554, align 4, !tbaa !9
  %556 = load ptr, ptr %36, align 8, !tbaa !5
  %557 = load i32, ptr %41, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %556, i64 %558
  %560 = load i32, ptr %559, align 4, !tbaa !9
  %561 = icmp sgt i32 %555, %560
  br i1 %561, label %562, label %577

562:                                              ; preds = %549
  %563 = load ptr, ptr %21, align 8, !tbaa !5
  %564 = load i32, ptr %41, align 4, !tbaa !9
  %565 = load ptr, ptr %36, align 8, !tbaa !5
  %566 = load i32, ptr %41, align 4, !tbaa !9
  %567 = sub nsw i32 %566, 1
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds i32, ptr %565, i64 %568
  %570 = load i32, ptr %569, align 4, !tbaa !9
  %571 = load ptr, ptr %36, align 8, !tbaa !5
  %572 = load i32, ptr %41, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds i32, ptr %571, i64 %573
  %575 = load i32, ptr %574, align 4, !tbaa !9
  %576 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, ptr noundef %563, i32 noundef %564, i32 noundef %570, i32 noundef %575)
  br label %665

577:                                              ; preds = %549
  %578 = load ptr, ptr %36, align 8, !tbaa !5
  %579 = load i32, ptr %41, align 4, !tbaa !9
  %580 = sub nsw i32 %579, 1
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds i32, ptr %578, i64 %581
  %583 = load i32, ptr %582, align 4, !tbaa !9
  %584 = load ptr, ptr %36, align 8, !tbaa !5
  %585 = load i32, ptr %41, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = icmp eq i32 %583, %588
  br i1 %589, label %590, label %591

590:                                              ; preds = %577
  br label %591

591:                                              ; preds = %590, %577
  br label %657

592:                                              ; preds = %546
  %593 = load i64, ptr %23, align 8, !tbaa !11
  %594 = icmp eq i64 %593, 8
  br i1 %594, label %595, label %624

595:                                              ; preds = %592
  %596 = load ptr, ptr %32, align 8, !tbaa !5
  %597 = load i32, ptr %41, align 4, !tbaa !9
  %598 = sub nsw i32 %597, 1
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds i64, ptr %596, i64 %599
  %601 = load i64, ptr %600, align 8, !tbaa !14
  %602 = load ptr, ptr %32, align 8, !tbaa !5
  %603 = load i32, ptr %41, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i64, ptr %602, i64 %604
  %606 = load i64, ptr %605, align 8, !tbaa !14
  %607 = icmp sgt i64 %601, %606
  br i1 %607, label %608, label %623

608:                                              ; preds = %595
  %609 = load ptr, ptr %21, align 8, !tbaa !5
  %610 = load i32, ptr %41, align 4, !tbaa !9
  %611 = load ptr, ptr %32, align 8, !tbaa !5
  %612 = load i32, ptr %41, align 4, !tbaa !9
  %613 = sub nsw i32 %612, 1
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds i64, ptr %611, i64 %614
  %616 = load i64, ptr %615, align 8, !tbaa !14
  %617 = load ptr, ptr %32, align 8, !tbaa !5
  %618 = load i32, ptr %41, align 4, !tbaa !9
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds i64, ptr %617, i64 %619
  %621 = load i64, ptr %620, align 8, !tbaa !14
  %622 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, ptr noundef %609, i32 noundef %610, i64 noundef %616, i64 noundef %621)
  br label %665

623:                                              ; preds = %595
  br label %656

624:                                              ; preds = %592
  %625 = load i64, ptr %23, align 8, !tbaa !11
  %626 = icmp eq i64 %625, 16
  br i1 %626, label %627, label %655

627:                                              ; preds = %624
  %628 = load ptr, ptr %34, align 8, !tbaa !5
  %629 = load i32, ptr %41, align 4, !tbaa !9
  %630 = sub nsw i32 %629, 1
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds x86_fp80, ptr %628, i64 %631
  %633 = load ptr, ptr %34, align 8, !tbaa !5
  %634 = load i32, ptr %41, align 4, !tbaa !9
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds x86_fp80, ptr %633, i64 %635
  %637 = call i32 @cmp_long_double(ptr noundef %632, ptr noundef %636)
  %638 = icmp sgt i32 %637, 0
  br i1 %638, label %639, label %654

639:                                              ; preds = %627
  %640 = load ptr, ptr %21, align 8, !tbaa !5
  %641 = load i32, ptr %41, align 4, !tbaa !9
  %642 = load ptr, ptr %34, align 8, !tbaa !5
  %643 = load i32, ptr %41, align 4, !tbaa !9
  %644 = sub nsw i32 %643, 1
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds x86_fp80, ptr %642, i64 %645
  %647 = load x86_fp80, ptr %646, align 16, !tbaa !20
  %648 = load ptr, ptr %34, align 8, !tbaa !5
  %649 = load i32, ptr %41, align 4, !tbaa !9
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds x86_fp80, ptr %648, i64 %650
  %652 = load x86_fp80, ptr %651, align 16, !tbaa !20
  %653 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, ptr noundef %640, i32 noundef %641, x86_fp80 noundef %647, x86_fp80 noundef %652)
  br label %665

654:                                              ; preds = %627
  br label %655

655:                                              ; preds = %654, %624
  br label %656

656:                                              ; preds = %655, %623
  br label %657

657:                                              ; preds = %656, %591
  br label %658

658:                                              ; preds = %657, %545
  br label %659

659:                                              ; preds = %658, %508
  br label %660

660:                                              ; preds = %659, %471
  br label %661

661:                                              ; preds = %660, %431
  br label %662

662:                                              ; preds = %661
  %663 = load i32, ptr %41, align 4, !tbaa !9
  %664 = add nsw i32 %663, 1
  store i32 %664, ptr %41, align 4, !tbaa !9
  br label %391, !llvm.loop !22

665:                                              ; preds = %639, %608, %562, %543, %506, %469, %429, %391
  store i32 1, ptr %41, align 4, !tbaa !9
  br label %666

666:                                              ; preds = %869, %665
  %667 = load i32, ptr %41, align 4, !tbaa !9
  %668 = load i32, ptr %17, align 4, !tbaa !9
  %669 = icmp slt i32 %667, %668
  br i1 %669, label %670, label %872

670:                                              ; preds = %666
  %671 = load i64, ptr %23, align 8, !tbaa !11
  %672 = icmp eq i64 %671, 4
  br i1 %672, label %673, label %700

673:                                              ; preds = %670
  %674 = load ptr, ptr %36, align 8, !tbaa !5
  %675 = load i32, ptr %41, align 4, !tbaa !9
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds i32, ptr %674, i64 %676
  %678 = load i32, ptr %677, align 4, !tbaa !9
  %679 = load ptr, ptr %37, align 8, !tbaa !5
  %680 = load i32, ptr %41, align 4, !tbaa !9
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %679, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !9
  %684 = icmp ne i32 %678, %683
  br i1 %684, label %685, label %699

685:                                              ; preds = %673
  %686 = load i32, ptr %41, align 4, !tbaa !9
  %687 = load i32, ptr %41, align 4, !tbaa !9
  %688 = load ptr, ptr %36, align 8, !tbaa !5
  %689 = load i32, ptr %41, align 4, !tbaa !9
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds i32, ptr %688, i64 %690
  %692 = load i32, ptr %691, align 4, !tbaa !9
  %693 = load ptr, ptr %37, align 8, !tbaa !5
  %694 = load i32, ptr %41, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %693, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !9
  %698 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, i32 noundef %686, i32 noundef %687, i32 noundef %692, i32 noundef %697)
  br label %872

699:                                              ; preds = %673
  br label %868

700:                                              ; preds = %670
  %701 = load i64, ptr %23, align 8, !tbaa !11
  %702 = icmp eq i64 %701, 8
  br i1 %702, label %703, label %836

703:                                              ; preds = %700
  %704 = load ptr, ptr %32, align 8, !tbaa !5
  %705 = load i32, ptr %41, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i64, ptr %704, i64 %706
  %708 = load i64, ptr %707, align 8, !tbaa !14
  %709 = load ptr, ptr %33, align 8, !tbaa !5
  %710 = load i32, ptr %41, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i64, ptr %709, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !14
  %714 = icmp ne i64 %708, %713
  br i1 %714, label %715, label %835

715:                                              ; preds = %703
  %716 = load ptr, ptr %24, align 8, !tbaa !5
  %717 = icmp eq ptr %716, @cmp_str
  br i1 %717, label %718, label %749

718:                                              ; preds = %715
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %719 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %719, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %720 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %720, ptr %49, align 8, !tbaa !5
  %721 = load i32, ptr %41, align 4, !tbaa !9
  %722 = load i32, ptr %41, align 4, !tbaa !9
  %723 = load ptr, ptr %48, align 8, !tbaa !5
  %724 = load i32, ptr %41, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds ptr, ptr %723, i64 %725
  %727 = load ptr, ptr %726, align 8, !tbaa !5
  %728 = load ptr, ptr %49, align 8, !tbaa !5
  %729 = load i32, ptr %41, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds ptr, ptr %728, i64 %730
  %732 = load ptr, ptr %731, align 8, !tbaa !5
  %733 = load ptr, ptr %48, align 8, !tbaa !5
  %734 = load i32, ptr %41, align 4, !tbaa !9
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds ptr, ptr %733, i64 %735
  %737 = load ptr, ptr %736, align 8, !tbaa !5
  %738 = load ptr, ptr %49, align 8, !tbaa !5
  %739 = load i32, ptr %41, align 4, !tbaa !9
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds ptr, ptr %738, i64 %740
  %742 = load ptr, ptr %741, align 8, !tbaa !5
  %743 = call i32 @strcmp(ptr noundef %737, ptr noundef %742) #8
  %744 = icmp ne i32 %743, 0
  %745 = xor i1 %744, true
  %746 = zext i1 %745 to i64
  %747 = select i1 %745, ptr @.str.32, ptr @.str.33
  %748 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, i32 noundef %721, i32 noundef %722, ptr noundef %727, ptr noundef %732, ptr noundef %747)
  store i32 16, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  br label %872

749:                                              ; preds = %715
  %750 = load ptr, ptr %24, align 8, !tbaa !5
  %751 = icmp eq ptr %750, @cmp_long_ptr
  br i1 %751, label %752, label %785

752:                                              ; preds = %749
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %753 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %753, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %754 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %754, ptr %51, align 8, !tbaa !5
  %755 = load i32, ptr %41, align 4, !tbaa !9
  %756 = load i32, ptr %41, align 4, !tbaa !9
  %757 = load ptr, ptr %50, align 8, !tbaa !5
  %758 = load i32, ptr %41, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds ptr, ptr %757, i64 %759
  %761 = load ptr, ptr %760, align 8, !tbaa !5
  %762 = load i64, ptr %761, align 8, !tbaa !14
  %763 = load ptr, ptr %51, align 8, !tbaa !5
  %764 = load i32, ptr %41, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds ptr, ptr %763, i64 %765
  %767 = load ptr, ptr %766, align 8, !tbaa !5
  %768 = load i64, ptr %767, align 8, !tbaa !14
  %769 = load ptr, ptr %50, align 8, !tbaa !5
  %770 = load i32, ptr %41, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds ptr, ptr %769, i64 %771
  %773 = load ptr, ptr %772, align 8, !tbaa !5
  %774 = load i64, ptr %773, align 8, !tbaa !14
  %775 = load ptr, ptr %51, align 8, !tbaa !5
  %776 = load i32, ptr %41, align 4, !tbaa !9
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds ptr, ptr %775, i64 %777
  %779 = load ptr, ptr %778, align 8, !tbaa !5
  %780 = load i64, ptr %779, align 8, !tbaa !14
  %781 = icmp eq i64 %774, %780
  %782 = zext i1 %781 to i64
  %783 = select i1 %781, ptr @.str.32, ptr @.str.33
  %784 = call i32 (ptr, ...) @printf(ptr noundef @.str.34, i32 noundef %755, i32 noundef %756, i64 noundef %762, i64 noundef %768, ptr noundef %783)
  store i32 16, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %872

785:                                              ; preds = %749
  %786 = load ptr, ptr %24, align 8, !tbaa !5
  %787 = icmp eq ptr %786, @cmp_int_ptr
  br i1 %787, label %788, label %821

788:                                              ; preds = %785
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %789 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %789, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %790 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %790, ptr %53, align 8, !tbaa !5
  %791 = load i32, ptr %41, align 4, !tbaa !9
  %792 = load i32, ptr %41, align 4, !tbaa !9
  %793 = load ptr, ptr %52, align 8, !tbaa !5
  %794 = load i32, ptr %41, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds ptr, ptr %793, i64 %795
  %797 = load ptr, ptr %796, align 8, !tbaa !5
  %798 = load i32, ptr %797, align 4, !tbaa !9
  %799 = load ptr, ptr %53, align 8, !tbaa !5
  %800 = load i32, ptr %41, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds ptr, ptr %799, i64 %801
  %803 = load ptr, ptr %802, align 8, !tbaa !5
  %804 = load i32, ptr %803, align 4, !tbaa !9
  %805 = load ptr, ptr %52, align 8, !tbaa !5
  %806 = load i32, ptr %41, align 4, !tbaa !9
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds ptr, ptr %805, i64 %807
  %809 = load ptr, ptr %808, align 8, !tbaa !5
  %810 = load i32, ptr %809, align 4, !tbaa !9
  %811 = load ptr, ptr %53, align 8, !tbaa !5
  %812 = load i32, ptr %41, align 4, !tbaa !9
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds ptr, ptr %811, i64 %813
  %815 = load ptr, ptr %814, align 8, !tbaa !5
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = icmp eq i32 %810, %816
  %818 = zext i1 %817 to i64
  %819 = select i1 %817, ptr @.str.32, ptr @.str.33
  %820 = call i32 (ptr, ...) @printf(ptr noundef @.str.35, i32 noundef %791, i32 noundef %792, i32 noundef %798, i32 noundef %804, ptr noundef %819)
  store i32 16, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  br label %872

821:                                              ; preds = %785
  %822 = load i32, ptr %41, align 4, !tbaa !9
  %823 = load i32, ptr %41, align 4, !tbaa !9
  %824 = load ptr, ptr %32, align 8, !tbaa !5
  %825 = load i32, ptr %41, align 4, !tbaa !9
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds i64, ptr %824, i64 %826
  %828 = load i64, ptr %827, align 8, !tbaa !14
  %829 = load ptr, ptr %33, align 8, !tbaa !5
  %830 = load i32, ptr %41, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds i64, ptr %829, i64 %831
  %833 = load i64, ptr %832, align 8, !tbaa !14
  %834 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, i32 noundef %822, i32 noundef %823, i64 noundef %828, i64 noundef %833)
  br label %872

835:                                              ; preds = %703
  br label %867

836:                                              ; preds = %700
  %837 = load i64, ptr %23, align 8, !tbaa !11
  %838 = icmp eq i64 %837, 16
  br i1 %838, label %839, label %866

839:                                              ; preds = %836
  %840 = load ptr, ptr %34, align 8, !tbaa !5
  %841 = load i32, ptr %41, align 4, !tbaa !9
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds x86_fp80, ptr %840, i64 %842
  %844 = load x86_fp80, ptr %843, align 16, !tbaa !20
  %845 = load ptr, ptr %35, align 8, !tbaa !5
  %846 = load i32, ptr %41, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds x86_fp80, ptr %845, i64 %847
  %849 = load x86_fp80, ptr %848, align 16, !tbaa !20
  %850 = fcmp une x86_fp80 %844, %849
  br i1 %850, label %851, label %865

851:                                              ; preds = %839
  %852 = load i32, ptr %41, align 4, !tbaa !9
  %853 = load i32, ptr %41, align 4, !tbaa !9
  %854 = load ptr, ptr %34, align 8, !tbaa !5
  %855 = load i32, ptr %41, align 4, !tbaa !9
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds x86_fp80, ptr %854, i64 %856
  %858 = load x86_fp80, ptr %857, align 16, !tbaa !20
  %859 = load ptr, ptr %35, align 8, !tbaa !5
  %860 = load i32, ptr %41, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds x86_fp80, ptr %859, i64 %861
  %863 = load x86_fp80, ptr %862, align 16, !tbaa !20
  %864 = call i32 (ptr, ...) @printf(ptr noundef @.str.37, i32 noundef %852, i32 noundef %853, x86_fp80 noundef %858, x86_fp80 noundef %863)
  br label %872

865:                                              ; preds = %839
  br label %866

866:                                              ; preds = %865, %836
  br label %867

867:                                              ; preds = %866, %835
  br label %868

868:                                              ; preds = %867, %699
  br label %869

869:                                              ; preds = %868
  %870 = load i32, ptr %41, align 4, !tbaa !9
  %871 = add nsw i32 %870, 1
  store i32 %871, ptr %41, align 4, !tbaa !9
  br label %666, !llvm.loop !23

872:                                              ; preds = %851, %821, %788, %752, %718, %685, %666
  store i32 0, ptr %43, align 4
  br label %873

873:                                              ; preds = %872, %389, %286, %213, %210, %96
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 100, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  %874 = load i32, ptr %43, align 4
  switch i32 %874, label %876 [
    i32 0, label %875
    i32 1, label %875
  ]

875:                                              ; preds = %873, %873
  ret void

876:                                              ; preds = %873, %543, %506, %469, %429
  unreachable
}

declare i32 @printf(ptr noundef, ...) #5

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = !{!21, !21, i64 0}
!21 = !{!"long double", !7, i64 0}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@comparisons = external dso_local local_unnamed_addr global i64, align 8
@test_sort.compare = external hidden local_unnamed_addr global i8, align 1
@.str.8 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [56 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
declare dso_local void @quadsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @quadsort_size(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_stable(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_double(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_str(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_int_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare dso_local i32 @cmp_long_double_ptr(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local i64 @utime() local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @test_sort(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr nocapture noundef readnone %7, ptr noundef %8, ptr noundef %9, i64 noundef %10, ptr noundef %11) local_unnamed_addr #2 {
  %13 = alloca [100 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %13) #8
  %14 = load i8, ptr %8, align 1, !tbaa !5
  %15 = icmp eq i8 %14, 42
  br i1 %15, label %16, label %36

16:                                               ; preds = %12
  %17 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.8) #9
  %.not337 = icmp eq i32 %17, 0
  br i1 %.not337, label %26, label %18

18:                                               ; preds = %16
  %19 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.9) #9
  %.not338 = icmp eq i32 %19, 0
  br i1 %.not338, label %26, label %20

20:                                               ; preds = %18
  %21 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.10) #9
  %.not339 = icmp eq i32 %21, 0
  br i1 %.not339, label %26, label %22

22:                                               ; preds = %20
  %23 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.11) #9
  %.not340 = icmp eq i32 %23, 0
  br i1 %.not340, label %26, label %24

24:                                               ; preds = %22
  %25 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.12) #9
  %.not341 = icmp eq i32 %25, 0
  br i1 %.not341, label %26, label %34

26:                                               ; preds = %24, %22, %20, %18, %16
  %27 = load i64, ptr @comparisons, align 8, !tbaa !8
  %.not342 = icmp eq i64 %27, 0
  br i1 %.not342, label %31, label %28

28:                                               ; preds = %26
  store i8 1, ptr @test_sort.compare, align 1, !tbaa !5
  %29 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull @.str.14)
  %30 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull @.str.15)
  br label %.loopexit

31:                                               ; preds = %26
  %32 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull @.str.16)
  %33 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull @.str.15)
  br label %.loopexit

34:                                               ; preds = %24
  %35 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, ptr noundef nonnull @.str.17)
  br label %.loopexit

36:                                               ; preds = %12
  %37 = sext i8 %14 to i32
  %38 = getelementptr inbounds i8, ptr %8, i64 1
  %39 = load i8, ptr %38, align 1, !tbaa !5
  %40 = sext i8 %39 to i32
  %41 = shl nsw i32 %40, 5
  %42 = add nsw i32 %41, %37
  %43 = getelementptr inbounds i8, ptr %8, i64 2
  %44 = load i8, ptr %43, align 1, !tbaa !5
  %45 = sext i8 %44 to i32
  %46 = shl nsw i32 %45, 10
  %47 = add nsw i32 %42, %46
  %48 = icmp eq i32 %3, 7
  %49 = icmp eq i32 %4, 7
  %or.cond = and i1 %48, %49
  br i1 %or.cond, label %50, label %65

50:                                               ; preds = %36
  %51 = load i32, ptr %1, align 4, !tbaa !10
  %52 = getelementptr inbounds i8, ptr %1, i64 4
  %53 = load i32, ptr %52, align 4, !tbaa !10
  %54 = getelementptr inbounds i8, ptr %1, i64 8
  %55 = load i32, ptr %54, align 4, !tbaa !10
  %56 = getelementptr inbounds i8, ptr %1, i64 12
  %57 = load i32, ptr %56, align 4, !tbaa !10
  %58 = getelementptr inbounds i8, ptr %1, i64 16
  %59 = load i32, ptr %58, align 4, !tbaa !10
  %60 = getelementptr inbounds i8, ptr %1, i64 20
  %61 = load i32, ptr %60, align 4, !tbaa !10
  %62 = getelementptr inbounds i8, ptr %1, i64 24
  %63 = load i32, ptr %62, align 4, !tbaa !10
  %64 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %51, i32 noundef %53, i32 noundef %55, i32 noundef %57, i32 noundef %59, i32 noundef %61, i32 noundef %63)
  br label %65

65:                                               ; preds = %50, %36
  %66 = icmp sgt i32 %5, 0
  br i1 %66, label %.lr.ph412, label %._crit_edge413

.lr.ph412:                                        ; preds = %65
  %67 = icmp sgt i32 %6, 0
  %68 = sext i32 %3 to i64
  %69 = mul i64 %68, %10
  br i1 %67, label %.lr.ph412.split.us, label %.lr.ph412.split

.lr.ph412.split.us:                               ; preds = %.lr.ph412
  %70 = icmp slt i32 %3, %4
  %71 = zext nneg i32 %6 to i64
  %72 = sext i32 %4 to i64
  %factor.op.mul652 = mul i64 %72, %10
  br i1 %70, label %.lr.ph.us.us, label %.lr.ph.us

.lr.ph.us.us:                                     ; preds = %.lr.ph412.split.us, %._crit_edge.split.us.us.us
  %.0294410.us.us = phi i64 [ %.1.us.us, %._crit_edge.split.us.us.us ], [ 0, %.lr.ph412.split.us ]
  %.0295409.us.us = phi i64 [ %89, %._crit_edge.split.us.us.us ], [ 0, %.lr.ph412.split.us ]
  %.0300408.us.us = phi i32 [ %90, %._crit_edge.split.us.us.us ], [ 0, %.lr.ph412.split.us ]
  %73 = tail call i64 @utime()
  br label %74

74:                                               ; preds = %81, %.lr.ph.us.us
  %indvars.iv543.in = phi i64 [ %indvars.iv543, %81 ], [ %71, %.lr.ph.us.us ]
  %.1297404.us.us.us = phi i64 [ %83, %81 ], [ 0, %.lr.ph.us.us ]
  %.0301403.us.us.us = phi i32 [ %spec.select.us.us.us, %81 ], [ %3, %.lr.ph.us.us ]
  %indvars.iv543 = add nsw i64 %indvars.iv543.in, -1
  %.reass653 = mul i64 %indvars.iv543, %factor.op.mul652
  %75 = getelementptr inbounds i8, ptr %1, i64 %.reass653
  %76 = sext i32 %.0301403.us.us.us to i64
  %77 = mul i64 %76, %10
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %0, ptr align 1 %75, i64 %77, i1 false)
  store i64 0, ptr @comparisons, align 8, !tbaa !8
  switch i32 %47, label %.split.us [
    i32 103185, label %80
    i32 118867, label %79
    i32 117457, label %78
    i32 120403, label %.split407.us
    i32 103155, label %.split407.us
    i32 119024, label %.split407.us
    i32 121202, label %.split407.us
    i32 102867, label %.split407.us
    i32 115092, label %.split407.us
  ]

78:                                               ; preds = %74
  tail call void @qsort(ptr noundef %0, i64 noundef %76, i64 noundef %10, ptr noundef %11) #8
  br label %81

79:                                               ; preds = %74
  tail call void @quadsort_size(ptr noundef %0, i64 noundef %76, i64 noundef %10, ptr noundef %11)
  br label %81

80:                                               ; preds = %74
  tail call void @quadsort(ptr noundef %0, i64 noundef %76, i64 noundef %10, ptr noundef %11)
  br label %81

81:                                               ; preds = %80, %79, %78
  %82 = load i64, ptr @comparisons, align 8, !tbaa !8
  %83 = add i64 %82, %.1297404.us.us.us
  %84 = add nsw i32 %.0301403.us.us.us, 1
  %.not336.us.us.us = icmp slt i32 %.0301403.us.us.us, %4
  %spec.select.us.us.us = select i1 %.not336.us.us.us, i32 %84, i32 %3
  %85 = icmp sgt i64 %indvars.iv543.in, 1
  br i1 %85, label %74, label %._crit_edge.split.us.us.us, !llvm.loop !12

._crit_edge.split.us.us.us:                       ; preds = %81
  %86 = tail call i64 @utime()
  %87 = sub nsw i64 %86, %73
  %.not335.us.us = icmp eq i64 %.0294410.us.us, 0
  %88 = tail call i64 @llvm.smin.i64(i64 %87, i64 %.0294410.us.us)
  %.1.us.us = select i1 %.not335.us.us, i64 %87, i64 %88
  %89 = add nsw i64 %87, %.0295409.us.us
  %90 = add nuw nsw i32 %.0300408.us.us, 1
  %exitcond546.not = icmp eq i32 %90, %5
  br i1 %exitcond546.not, label %._crit_edge413, label %.lr.ph.us.us, !llvm.loop !14

.lr.ph.us:                                        ; preds = %.lr.ph412.split.us, %._crit_edge.split.us420
  %.0294410.us = phi i64 [ %.1.us, %._crit_edge.split.us420 ], [ 0, %.lr.ph412.split.us ]
  %.0295409.us = phi i64 [ %104, %._crit_edge.split.us420 ], [ 0, %.lr.ph412.split.us ]
  %.0300408.us = phi i32 [ %105, %._crit_edge.split.us420 ], [ 0, %.lr.ph412.split.us ]
  %91 = tail call i64 @utime()
  br label %92

92:                                               ; preds = %.lr.ph.us, %97
  %indvars.iv.in = phi i64 [ %71, %.lr.ph.us ], [ %indvars.iv, %97 ]
  %.1297404.us418 = phi i64 [ 0, %.lr.ph.us ], [ %99, %97 ]
  %indvars.iv = add nsw i64 %indvars.iv.in, -1
  %.reass = mul i64 %indvars.iv, %factor.op.mul652
  %93 = getelementptr inbounds i8, ptr %1, i64 %.reass
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %0, ptr align 1 %93, i64 %69, i1 false)
  store i64 0, ptr @comparisons, align 8, !tbaa !8
  switch i32 %47, label %.split.us [
    i32 103185, label %96
    i32 118867, label %95
    i32 117457, label %94
    i32 120403, label %.split407.us
    i32 103155, label %.split407.us
    i32 119024, label %.split407.us
    i32 121202, label %.split407.us
    i32 102867, label %.split407.us
    i32 115092, label %.split407.us
  ]

94:                                               ; preds = %92
  tail call void @qsort(ptr noundef %0, i64 noundef %68, i64 noundef %10, ptr noundef %11) #8
  br label %97

95:                                               ; preds = %92
  tail call void @quadsort_size(ptr noundef %0, i64 noundef %68, i64 noundef %10, ptr noundef %11)
  br label %97

96:                                               ; preds = %92
  tail call void @quadsort(ptr noundef %0, i64 noundef %68, i64 noundef %10, ptr noundef %11)
  br label %97

97:                                               ; preds = %96, %95, %94
  %98 = load i64, ptr @comparisons, align 8, !tbaa !8
  %99 = add i64 %98, %.1297404.us418
  %100 = icmp sgt i64 %indvars.iv.in, 1
  br i1 %100, label %92, label %._crit_edge.split.us420, !llvm.loop !12

._crit_edge.split.us420:                          ; preds = %97
  %101 = tail call i64 @utime()
  %102 = sub nsw i64 %101, %91
  %.not335.us = icmp eq i64 %.0294410.us, 0
  %103 = tail call i64 @llvm.smin.i64(i64 %102, i64 %.0294410.us)
  %.1.us = select i1 %.not335.us, i64 %102, i64 %103
  %104 = add nsw i64 %102, %.0295409.us
  %105 = add nuw nsw i32 %.0300408.us, 1
  %exitcond542.not = icmp eq i32 %105, %5
  br i1 %exitcond542.not, label %._crit_edge413, label %.lr.ph.us, !llvm.loop !14

.lr.ph412.split:                                  ; preds = %.lr.ph412, %.lr.ph412.split
  %.0294410 = phi i64 [ %.1, %.lr.ph412.split ], [ 0, %.lr.ph412 ]
  %.0295409 = phi i64 [ %110, %.lr.ph412.split ], [ 0, %.lr.ph412 ]
  %.0300408 = phi i32 [ %111, %.lr.ph412.split ], [ 0, %.lr.ph412 ]
  %106 = tail call i64 @utime()
  %107 = tail call i64 @utime()
  %108 = sub nsw i64 %107, %106
  %.not335 = icmp eq i64 %.0294410, 0
  %109 = tail call i64 @llvm.smin.i64(i64 %108, i64 %.0294410)
  %.1 = select i1 %.not335, i64 %108, i64 %109
  %110 = add nsw i64 %108, %.0295409
  %111 = add nuw nsw i32 %.0300408, 1
  %exitcond.not = icmp eq i32 %111, %5
  br i1 %exitcond.not, label %._crit_edge413, label %.lr.ph412.split, !llvm.loop !14

.split407.us:                                     ; preds = %92, %92, %92, %92, %92, %92, %74, %74, %74, %74, %74, %74
  %112 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, ptr noundef nonnull %8)
  br label %.loopexit

.split.us:                                        ; preds = %92, %74
  %113 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, ptr noundef nonnull %8)
  br label %.loopexit

._crit_edge413:                                   ; preds = %.lr.ph412.split, %._crit_edge.split.us420, %._crit_edge.split.us.us.us, %65
  %.0296.lcssa = phi i64 [ 0, %65 ], [ %83, %._crit_edge.split.us.us.us ], [ %99, %._crit_edge.split.us420 ], [ 0, %.lr.ph412.split ]
  %.0295.lcssa = phi i64 [ 0, %65 ], [ %89, %._crit_edge.split.us.us.us ], [ %104, %._crit_edge.split.us420 ], [ %110, %.lr.ph412.split ]
  %.0294.lcssa = phi i64 [ 0, %65 ], [ %.1.us.us, %._crit_edge.split.us.us.us ], [ %.1.us, %._crit_edge.split.us420 ], [ %.1, %.lr.ph412.split ]
  br i1 %or.cond, label %114, label %129

114:                                              ; preds = %._crit_edge413
  %115 = load i32, ptr %0, align 4, !tbaa !10
  %116 = getelementptr inbounds i8, ptr %0, i64 4
  %117 = load i32, ptr %116, align 4, !tbaa !10
  %118 = getelementptr inbounds i8, ptr %0, i64 8
  %119 = load i32, ptr %118, align 4, !tbaa !10
  %120 = getelementptr inbounds i8, ptr %0, i64 12
  %121 = load i32, ptr %120, align 4, !tbaa !10
  %122 = getelementptr inbounds i8, ptr %0, i64 16
  %123 = load i32, ptr %122, align 4, !tbaa !10
  %124 = getelementptr inbounds i8, ptr %0, i64 20
  %125 = load i32, ptr %124, align 4, !tbaa !10
  %126 = getelementptr inbounds i8, ptr %0, i64 24
  %127 = load i32, ptr %126, align 4, !tbaa !10
  %128 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %115, i32 noundef %117, i32 noundef %119, i32 noundef %121, i32 noundef %123, i32 noundef %125, i32 noundef %127)
  br label %129

129:                                              ; preds = %114, %._crit_edge413
  %130 = icmp eq i32 %6, 0
  br i1 %130, label %.loopexit, label %131

131:                                              ; preds = %129
  %132 = sext i32 %5 to i64
  %133 = sdiv i64 %.0295.lcssa, %132
  %134 = icmp eq ptr %11, @cmp_stable
  %135 = icmp sgt i32 %4, 1
  %or.cond480 = and i1 %134, %135
  br i1 %or.cond480, label %.lr.ph.preheader, label %.loopexit363

.lr.ph.preheader:                                 ; preds = %131
  %wide.trip.count = zext nneg i32 %4 to i64
  br label %.lr.ph

136:                                              ; preds = %.lr.ph
  %indvars.iv.next548 = add nuw nsw i64 %indvars.iv547, 1
  %exitcond550.not = icmp eq i64 %indvars.iv.next548, %wide.trip.count
  br i1 %exitcond550.not, label %.loopexit363, label %.lr.ph, !llvm.loop !15

.lr.ph:                                           ; preds = %.lr.ph.preheader, %136
  %indvars.iv547 = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next548, %136 ]
  %137 = getelementptr i32, ptr %0, i64 %indvars.iv547
  %138 = getelementptr i8, ptr %137, i64 -4
  %139 = load i32, ptr %138, align 4, !tbaa !10
  %140 = load i32, ptr %137, align 4, !tbaa !10
  %141 = icmp sgt i32 %139, %140
  br i1 %141, label %142, label %136

142:                                              ; preds = %.lr.ph
  %143 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %13, ptr noundef nonnull dereferenceable(1) @.str.21, ptr noundef nonnull @.str.22) #8
  br label %.loopexit363

.loopexit363:                                     ; preds = %136, %142, %131
  %.0 = phi ptr [ %13, %142 ], [ %9, %131 ], [ %9, %136 ]
  %144 = load i8, ptr @test_sort.compare, align 1, !tbaa !5
  %.not331 = icmp eq i8 %144, 0
  br i1 %.not331, label %163, label %145

145:                                              ; preds = %.loopexit363
  %146 = icmp slt i32 %6, 2
  %147 = trunc i64 %10 to i32
  %148 = shl nsw i32 %147, 3
  %149 = sitofp i64 %.0294.lcssa to double
  %150 = fdiv double %149, 1.000000e+06
  %151 = sitofp i64 %133 to double
  %152 = fdiv double %151, 1.000000e+06
  br i1 %146, label %153, label %157

153:                                              ; preds = %145
  %154 = load i64, ptr @comparisons, align 8, !tbaa !8
  %155 = trunc i64 %154 to i32
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, ptr noundef nonnull %8, i32 noundef %4, i32 noundef %148, double noundef %150, double noundef %152, i32 noundef %155, i32 noundef %5, ptr noundef %.0)
  br label %171

157:                                              ; preds = %145
  %158 = sitofp i64 %.0296.lcssa to float
  %159 = uitofp nneg i32 %6 to float
  %160 = fdiv float %158, %159
  %161 = fpext float %160 to double
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, ptr noundef nonnull %8, i32 noundef %4, i32 noundef %148, double noundef %150, double noundef %152, double noundef %161, i32 noundef %5, ptr noundef %.0)
  br label %171

163:                                              ; preds = %.loopexit363
  %164 = trunc i64 %10 to i32
  %165 = shl nsw i32 %164, 3
  %166 = sitofp i64 %.0294.lcssa to double
  %167 = fdiv double %166, 1.000000e+06
  %168 = sitofp i64 %133 to double
  %169 = fdiv double %168, 1.000000e+06
  %170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, ptr noundef nonnull %8, i32 noundef %4, i32 noundef %165, double noundef %167, double noundef %169, i32 noundef %6, i32 noundef %5, ptr noundef %.0)
  br label %171

171:                                              ; preds = %153, %157, %163
  %172 = icmp ne i32 %3, %4
  %or.cond5 = or i1 %172, %134
  br i1 %or.cond5, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %171
  %173 = icmp sgt i32 %3, 1
  br i1 %173, label %.lr.ph430, label %.loopexit

.lr.ph430:                                        ; preds = %.preheader
  %174 = icmp eq ptr %11, @cmp_str
  %175 = icmp eq i64 %10, 8
  %176 = icmp eq ptr %11, @cmp_long_ptr
  %177 = icmp eq ptr %11, @cmp_int_ptr
  %178 = icmp eq i64 %10, 4
  %179 = icmp eq i64 %10, 16
  br i1 %174, label %.lr.ph430.split.us.preheader, label %.lr.ph430.split

.lr.ph430.split.us.preheader:                     ; preds = %.lr.ph430
  %wide.trip.count584 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.us

.lr.ph430.split.us:                               ; preds = %.lr.ph430.split.us.preheader, %.thread.us
  %indvars.iv581 = phi i64 [ 1, %.lr.ph430.split.us.preheader ], [ %indvars.iv.next582, %.thread.us ]
  %180 = getelementptr ptr, ptr %0, i64 %indvars.iv581
  %181 = getelementptr i8, ptr %180, i64 -8
  %182 = load ptr, ptr %181, align 8, !tbaa !16
  %183 = load ptr, ptr %180, align 8, !tbaa !16
  %184 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %182, ptr noundef nonnull dereferenceable(1) %183) #9
  %185 = icmp sgt i32 %184, 0
  br i1 %185, label %.split432.us, label %.thread.us

.thread.us:                                       ; preds = %.lr.ph430.split.us
  %indvars.iv.next582 = add nuw nsw i64 %indvars.iv581, 1
  %exitcond585.not = icmp eq i64 %indvars.iv.next582, %wide.trip.count584
  br i1 %exitcond585.not, label %.loopexit361, label %.lr.ph430.split.us, !llvm.loop !18

.lr.ph430.split:                                  ; preds = %.lr.ph430
  %186 = icmp eq ptr %11, @cmp_long_double_ptr
  %or.cond7 = and i1 %175, %186
  br i1 %or.cond7, label %.lr.ph430.split.split.us.preheader, label %.lr.ph430.split.split

.lr.ph430.split.split.us.preheader:               ; preds = %.lr.ph430.split
  %wide.trip.count579 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.us

.lr.ph430.split.split.us:                         ; preds = %.lr.ph430.split.split.us.preheader, %.thread.us437
  %indvars.iv576 = phi i64 [ 1, %.lr.ph430.split.split.us.preheader ], [ %indvars.iv.next577, %.thread.us437 ]
  %187 = getelementptr ptr, ptr %0, i64 %indvars.iv576
  %188 = getelementptr i8, ptr %187, i64 -8
  %189 = call i32 @cmp_long_double_ptr(ptr noundef %188, ptr noundef nonnull %187)
  %190 = icmp sgt i32 %189, 0
  br i1 %190, label %.split439.us, label %.thread.us437

.thread.us437:                                    ; preds = %.lr.ph430.split.split.us
  %indvars.iv.next577 = add nuw nsw i64 %indvars.iv576, 1
  %exitcond580.not = icmp eq i64 %indvars.iv.next577, %wide.trip.count579
  br i1 %exitcond580.not, label %.loopexit361, label %.lr.ph430.split.split.us, !llvm.loop !18

.lr.ph430.split.split:                            ; preds = %.lr.ph430.split
  br i1 %176, label %.lr.ph430.split.split.split.us.preheader, label %.lr.ph430.split.split.split

.lr.ph430.split.split.split.us.preheader:         ; preds = %.lr.ph430.split.split
  %wide.trip.count574 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.split.us

.lr.ph430.split.split.split.us:                   ; preds = %.lr.ph430.split.split.split.us.preheader, %.thread.us444
  %indvars.iv571 = phi i64 [ 1, %.lr.ph430.split.split.split.us.preheader ], [ %indvars.iv.next572, %.thread.us444 ]
  %191 = getelementptr ptr, ptr %0, i64 %indvars.iv571
  %192 = getelementptr i8, ptr %191, i64 -8
  %193 = call i32 @cmp_long_ptr(ptr noundef %192, ptr noundef nonnull %191)
  %194 = icmp sgt i32 %193, 0
  br i1 %194, label %.split446.us, label %.thread.us444

.thread.us444:                                    ; preds = %.lr.ph430.split.split.split.us
  %indvars.iv.next572 = add nuw nsw i64 %indvars.iv571, 1
  %exitcond575.not = icmp eq i64 %indvars.iv.next572, %wide.trip.count574
  br i1 %exitcond575.not, label %.loopexit361, label %.lr.ph430.split.split.split.us, !llvm.loop !18

.lr.ph430.split.split.split:                      ; preds = %.lr.ph430.split.split
  br i1 %177, label %.lr.ph430.split.split.split.split.us.preheader, label %.lr.ph430.split.split.split.split

.lr.ph430.split.split.split.split.us.preheader:   ; preds = %.lr.ph430.split.split.split
  %wide.trip.count569 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.split.split.us

.lr.ph430.split.split.split.split.us:             ; preds = %.lr.ph430.split.split.split.split.us.preheader, %.thread.us451
  %indvars.iv566 = phi i64 [ 1, %.lr.ph430.split.split.split.split.us.preheader ], [ %indvars.iv.next567, %.thread.us451 ]
  %195 = getelementptr ptr, ptr %0, i64 %indvars.iv566
  %196 = getelementptr i8, ptr %195, i64 -8
  %197 = call i32 @cmp_int_ptr(ptr noundef %196, ptr noundef nonnull %195)
  %198 = icmp sgt i32 %197, 0
  br i1 %198, label %.split453.us, label %.thread.us451

.thread.us451:                                    ; preds = %.lr.ph430.split.split.split.split.us
  %indvars.iv.next567 = add nuw nsw i64 %indvars.iv566, 1
  %exitcond570.not = icmp eq i64 %indvars.iv.next567, %wide.trip.count569
  br i1 %exitcond570.not, label %.loopexit361, label %.lr.ph430.split.split.split.split.us, !llvm.loop !18

.lr.ph430.split.split.split.split:                ; preds = %.lr.ph430.split.split.split
  br i1 %178, label %.lr.ph430.split.split.split.split.split.us.preheader, label %.lr.ph430.split.split.split.split.split

.lr.ph430.split.split.split.split.split.us.preheader: ; preds = %.lr.ph430.split.split.split.split
  %wide.trip.count564 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.split.split.split.us

.lr.ph430.split.split.split.split.split.us:       ; preds = %.lr.ph430.split.split.split.split.split.us.preheader, %.thread.us458
  %indvars.iv561 = phi i64 [ 1, %.lr.ph430.split.split.split.split.split.us.preheader ], [ %indvars.iv.next562, %.thread.us458 ]
  %199 = getelementptr i32, ptr %0, i64 %indvars.iv561
  %200 = getelementptr i8, ptr %199, i64 -4
  %201 = load i32, ptr %200, align 4, !tbaa !10
  %202 = load i32, ptr %199, align 4, !tbaa !10
  %203 = icmp sgt i32 %201, %202
  br i1 %203, label %.split460.us, label %.thread.us458

.thread.us458:                                    ; preds = %.lr.ph430.split.split.split.split.split.us
  %indvars.iv.next562 = add nuw nsw i64 %indvars.iv561, 1
  %exitcond565.not = icmp eq i64 %indvars.iv.next562, %wide.trip.count564
  br i1 %exitcond565.not, label %.loopexit361, label %.lr.ph430.split.split.split.split.split.us, !llvm.loop !18

.lr.ph430.split.split.split.split.split:          ; preds = %.lr.ph430.split.split.split.split
  br i1 %175, label %.lr.ph430.split.split.split.split.split.split.us.preheader, label %.lr.ph430.split.split.split.split.split.split

.lr.ph430.split.split.split.split.split.split.us.preheader: ; preds = %.lr.ph430.split.split.split.split.split
  %wide.trip.count559 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.split.split.split.split.us

.lr.ph430.split.split.split.split.split.split.us: ; preds = %.lr.ph430.split.split.split.split.split.split.us.preheader, %.thread.us465
  %indvars.iv556 = phi i64 [ 1, %.lr.ph430.split.split.split.split.split.split.us.preheader ], [ %indvars.iv.next557, %.thread.us465 ]
  %204 = getelementptr i64, ptr %0, i64 %indvars.iv556
  %205 = getelementptr i8, ptr %204, i64 -8
  %206 = load i64, ptr %205, align 8, !tbaa !19
  %207 = load i64, ptr %204, align 8, !tbaa !19
  %208 = icmp sgt i64 %206, %207
  br i1 %208, label %.split467.us, label %.thread.us465

.thread.us465:                                    ; preds = %.lr.ph430.split.split.split.split.split.split.us
  %indvars.iv.next557 = add nuw nsw i64 %indvars.iv556, 1
  %exitcond560.not = icmp eq i64 %indvars.iv.next557, %wide.trip.count559
  br i1 %exitcond560.not, label %.loopexit361, label %.lr.ph430.split.split.split.split.split.split.us, !llvm.loop !18

.lr.ph430.split.split.split.split.split.split:    ; preds = %.lr.ph430.split.split.split.split.split
  br i1 %179, label %.lr.ph430.split.split.split.split.split.split.split.us.preheader, label %.lr.ph479.preheader

.lr.ph430.split.split.split.split.split.split.split.us.preheader: ; preds = %.lr.ph430.split.split.split.split.split.split
  %wide.trip.count554 = zext nneg i32 %3 to i64
  br label %.lr.ph430.split.split.split.split.split.split.split.us

.lr.ph430.split.split.split.split.split.split.split.us: ; preds = %.lr.ph430.split.split.split.split.split.split.split.us.preheader, %.thread.us472
  %indvars.iv551 = phi i64 [ 1, %.lr.ph430.split.split.split.split.split.split.split.us.preheader ], [ %indvars.iv.next552, %.thread.us472 ]
  %209 = getelementptr x86_fp80, ptr %0, i64 %indvars.iv551
  %210 = getelementptr i8, ptr %209, i64 -16
  %211 = call i32 @cmp_long_double(ptr noundef %210, ptr noundef nonnull %209)
  %212 = icmp sgt i32 %211, 0
  br i1 %212, label %.split474.us, label %.thread.us472

.thread.us472:                                    ; preds = %.lr.ph430.split.split.split.split.split.split.split.us
  %indvars.iv.next552 = add nuw nsw i64 %indvars.iv551, 1
  %exitcond555.not = icmp eq i64 %indvars.iv.next552, %wide.trip.count554
  br i1 %exitcond555.not, label %.loopexit361, label %.lr.ph430.split.split.split.split.split.split.split.us, !llvm.loop !18

.split432.us:                                     ; preds = %.lr.ph430.split.us
  %213 = trunc nuw nsw i64 %indvars.iv581 to i32
  %214 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, ptr noundef nonnull %8, i32 noundef %213, ptr noundef %182, ptr noundef %183)
  br label %.loopexit361

.split439.us:                                     ; preds = %.lr.ph430.split.split.us
  %215 = trunc nuw nsw i64 %indvars.iv576 to i32
  %216 = load ptr, ptr %188, align 8, !tbaa !16
  %217 = load x86_fp80, ptr %216, align 16, !tbaa !21
  %218 = load ptr, ptr %187, align 8, !tbaa !16
  %219 = load x86_fp80, ptr %218, align 16, !tbaa !21
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, ptr noundef nonnull %8, i32 noundef %215, x86_fp80 noundef %217, x86_fp80 noundef %219)
  br label %.loopexit361

.split446.us:                                     ; preds = %.lr.ph430.split.split.split.us
  %221 = trunc nuw nsw i64 %indvars.iv571 to i32
  %222 = load ptr, ptr %192, align 8, !tbaa !16
  %223 = load i64, ptr %222, align 8, !tbaa !19
  %224 = load ptr, ptr %191, align 8, !tbaa !16
  %225 = load i64, ptr %224, align 8, !tbaa !19
  %226 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, ptr noundef nonnull %8, i32 noundef %221, i64 noundef %223, i64 noundef %225)
  br label %.loopexit361

.split453.us:                                     ; preds = %.lr.ph430.split.split.split.split.us
  %227 = trunc nuw nsw i64 %indvars.iv566 to i32
  %228 = load ptr, ptr %196, align 8, !tbaa !16
  %229 = load i32, ptr %228, align 4, !tbaa !10
  %230 = load ptr, ptr %195, align 8, !tbaa !16
  %231 = load i32, ptr %230, align 4, !tbaa !10
  %232 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull %8, i32 noundef %227, i32 noundef %229, i32 noundef %231)
  br label %.loopexit361

.split460.us:                                     ; preds = %.lr.ph430.split.split.split.split.split.us
  %233 = trunc nuw nsw i64 %indvars.iv561 to i32
  %234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull %8, i32 noundef %233, i32 noundef %201, i32 noundef %202)
  br label %.loopexit361

.split467.us:                                     ; preds = %.lr.ph430.split.split.split.split.split.split.us
  %235 = trunc nuw nsw i64 %indvars.iv556 to i32
  %236 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, ptr noundef nonnull %8, i32 noundef %235, i64 noundef %206, i64 noundef %207)
  br label %.loopexit361

.split474.us:                                     ; preds = %.lr.ph430.split.split.split.split.split.split.split.us
  %237 = trunc nuw nsw i64 %indvars.iv551 to i32
  %238 = load x86_fp80, ptr %210, align 16, !tbaa !21
  %239 = load x86_fp80, ptr %209, align 16, !tbaa !21
  %240 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, ptr noundef nonnull %8, i32 noundef %237, x86_fp80 noundef %238, x86_fp80 noundef %239)
  br label %.loopexit361

.loopexit361:                                     ; preds = %.thread.us472, %.thread.us465, %.thread.us458, %.thread.us451, %.thread.us444, %.thread.us437, %.thread.us, %.split453.us, %.split446.us, %.split439.us, %.split432.us, %.split474.us, %.split467.us, %.split460.us
  br i1 %173, label %.lr.ph479.preheader, label %.loopexit

.lr.ph479.preheader:                              ; preds = %.lr.ph430.split.split.split.split.split.split, %.loopexit361
  %wide.trip.count589 = zext nneg i32 %3 to i64
  br label %.lr.ph479

.lr.ph479:                                        ; preds = %.lr.ph479.preheader, %290
  %indvars.iv586 = phi i64 [ 1, %.lr.ph479.preheader ], [ %indvars.iv.next587, %290 ]
  switch i64 %10, label %290 [
    i64 4, label %241
    i64 8, label %249
    i64 16, label %281
  ]

241:                                              ; preds = %.lr.ph479
  %242 = getelementptr inbounds i32, ptr %0, i64 %indvars.iv586
  %243 = load i32, ptr %242, align 4, !tbaa !10
  %244 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv586
  %245 = load i32, ptr %244, align 4, !tbaa !10
  %.not334 = icmp eq i32 %243, %245
  br i1 %.not334, label %290, label %246

246:                                              ; preds = %241
  %247 = trunc nuw nsw i64 %indvars.iv586 to i32
  %248 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, i32 noundef %247, i32 noundef %247, i32 noundef %243, i32 noundef %245)
  br label %.loopexit

249:                                              ; preds = %.lr.ph479
  %250 = getelementptr inbounds i64, ptr %0, i64 %indvars.iv586
  %251 = load i64, ptr %250, align 8
  %252 = getelementptr inbounds i64, ptr %2, i64 %indvars.iv586
  %253 = load i64, ptr %252, align 8
  %.not332 = icmp eq i64 %251, %253
  br i1 %.not332, label %290, label %254

254:                                              ; preds = %249
  %255 = inttoptr i64 %251 to ptr
  %256 = inttoptr i64 %253 to ptr
  %257 = trunc nuw nsw i64 %indvars.iv586 to i32
  %258 = icmp eq ptr %11, @cmp_str
  br i1 %258, label %259, label %263

259:                                              ; preds = %254
  %260 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %255, ptr noundef nonnull dereferenceable(1) %256) #9
  %.not333 = icmp eq i32 %260, 0
  %261 = select i1 %.not333, ptr @.str.32, ptr @.str.33
  %262 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, i32 noundef %257, i32 noundef %257, ptr noundef %255, ptr noundef %256, ptr noundef nonnull %261)
  br label %.loopexit

263:                                              ; preds = %254
  %264 = icmp eq ptr %11, @cmp_long_ptr
  br i1 %264, label %265, label %271

265:                                              ; preds = %263
  %266 = load i64, ptr %255, align 8, !tbaa !19
  %267 = load i64, ptr %256, align 8, !tbaa !19
  %268 = icmp eq i64 %266, %267
  %269 = select i1 %268, ptr @.str.32, ptr @.str.33
  %270 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.34, i32 noundef %257, i32 noundef %257, i64 noundef %266, i64 noundef %267, ptr noundef nonnull %269)
  br label %.loopexit

271:                                              ; preds = %263
  %272 = icmp eq ptr %11, @cmp_int_ptr
  br i1 %272, label %273, label %279

273:                                              ; preds = %271
  %274 = load i32, ptr %255, align 4, !tbaa !10
  %275 = load i32, ptr %256, align 4, !tbaa !10
  %276 = icmp eq i32 %274, %275
  %277 = select i1 %276, ptr @.str.32, ptr @.str.33
  %278 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.35, i32 noundef %257, i32 noundef %257, i32 noundef %274, i32 noundef %275, ptr noundef nonnull %277)
  br label %.loopexit

279:                                              ; preds = %271
  %280 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, i32 noundef %257, i32 noundef %257, i64 noundef %251, i64 noundef %253)
  br label %.loopexit

281:                                              ; preds = %.lr.ph479
  %282 = getelementptr inbounds x86_fp80, ptr %0, i64 %indvars.iv586
  %283 = load x86_fp80, ptr %282, align 16, !tbaa !21
  %284 = getelementptr inbounds x86_fp80, ptr %2, i64 %indvars.iv586
  %285 = load x86_fp80, ptr %284, align 16, !tbaa !21
  %286 = fcmp une x86_fp80 %283, %285
  br i1 %286, label %287, label %290

287:                                              ; preds = %281
  %288 = trunc nuw nsw i64 %indvars.iv586 to i32
  %289 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.37, i32 noundef %288, i32 noundef %288, x86_fp80 noundef %283, x86_fp80 noundef %285)
  br label %.loopexit

290:                                              ; preds = %.lr.ph479, %241, %281, %249
  %indvars.iv.next587 = add nuw nsw i64 %indvars.iv586, 1
  %exitcond590.not = icmp eq i64 %indvars.iv.next587, %wide.trip.count589
  br i1 %exitcond590.not, label %.loopexit, label %.lr.ph479, !llvm.loop !23

.loopexit:                                        ; preds = %290, %.preheader, %.loopexit361, %246, %259, %265, %273, %279, %287, %171, %129, %34, %31, %28, %.split.us, %.split407.us
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %13) #8
  ret void
}

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nofree "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"long", !6, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !6, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = !{!17, !17, i64 0}
!17 = !{!"any pointer", !6, i64 0}
!18 = distinct !{!18, !13}
!19 = !{!20, !20, i64 0}
!20 = !{!"long long", !6, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"long double", !6, i64 0}
!23 = distinct !{!23, !13}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass