; LLVM IR from libxsmm/libxsmm :: src (libxsmm_malloc)

; 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"

%union.libxsmm_malloc_function = type { ptr }
%union.libxsmm_free_function = type { ptr }
%struct.utsname = type { [65 x i8], [65 x i8], [65 x i8], [65 x i8], [65 x i8], [65 x i8] }
%struct.internal_malloc_info_type = type { %union.libxsmm_free_function, ptr, ptr, ptr, i64, i32 }

@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@libxsmm_verbosity = external global i32, align 4
@stderr = external global ptr, align 8
@internal_malloc_kind = external dso_local global i32, align 64
@internal_malloc_local_cur = external dso_local global i64, align 64
@internal_malloc_local_max = external dso_local global i64, align 64
@internal_malloc_private_cur = external dso_local global i64, align 64
@internal_malloc_private_max = external dso_local global i64, align 64
@internal_malloc_hugetlb = external dso_local global i64, align 64
@internal_malloc_plocked = external dso_local global i64, align 64
@internal_malloc_public_cur = external dso_local global i64, align 64
@libxsmm_default_allocator_context = external global ptr, align 8
@libxsmm_default_malloc_fn = external global %union.libxsmm_malloc_function, align 8
@libxsmm_default_free_fn = external global %union.libxsmm_free_function, align 8
@libxsmm_scratch_allocator_context = external global ptr, align 8
@libxsmm_scratch_malloc_fn = external global %union.libxsmm_malloc_function, align 8
@libxsmm_scratch_free_fn = external global %union.libxsmm_free_function, align 8
@libxsmm_xmalloc.error_once = external hidden global i32, align 4
@libxsmm_xmalloc.limit_hugetlb = external hidden global i64, align 8
@libxsmm_xmalloc.limit_plocked = external hidden global i64, align 8
@libxsmm_xmalloc.map32 = external hidden global i32, align 4
@libxsmm_xmalloc.prefault = external hidden global i32, align 4
@.str.34 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_xmalloc = external hidden unnamed_addr constant [72 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [23 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_watermark_verbose_ = external hidden global i64, align 8
@.str.38 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [21 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42 = external hidden global i64, align 8
@.str.43 = external hidden unnamed_addr constant [55 x i8], align 1
@libxsmm_xmalloc.entrypoint = external hidden global i32, align 4
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [11 x i8], align 1
@libxsmm_se = external global i32, align 4
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_ = external hidden global ptr, align 8
@.str.48 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [1 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.50 = external hidden global ptr, align 8
@.str.51 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [5 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.53 = external hidden global ptr, align 8
@.str.54 = external hidden unnamed_addr constant [5 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.55 = external hidden global ptr, align 8
@libxsmm_xmalloc.internal_xmalloc_env_.56 = external hidden global ptr, align 8
@libxsmm_xmalloc.internal_xmalloc_env_.57 = external hidden global ptr, align 8
@.str.58 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [57 x i8], align 1
@internal_malloc_public_max = external dso_local global i64, align 64
@.str.62 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [57 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @libxsmm_alignment(i64 noundef, i64 noundef) #0

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

declare i64 @libxsmm_lcm(i64 noundef, i64 noundef) #2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @internal_malloc_info(ptr noundef, i32 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @internal_xfree(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #5

; Function Attrs: nounwind uwtable
define dso_local i32 @libxsmm_xmalloc(ptr noundef %0, i64 noundef %1, i64 noundef %2, i32 noundef %3, ptr noundef %4, i64 noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %union.libxsmm_malloc_function, align 8
  %22 = alloca %union.libxsmm_free_function, align 8
  %23 = alloca i32, align 4
  %24 = alloca %struct.utsname, align 1
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i64, align 8
  %30 = alloca [32 x i8], align 16
  %31 = alloca i64, align 8
  %32 = alloca [32 x i8], align 16
  %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 i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca [32 x i8], align 16
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i64 %1, ptr %8, align 8, !tbaa !9
  store i64 %2, ptr %9, align 8, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !11
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i64 %5, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !11
  %43 = load ptr, ptr %7, align 8, !tbaa !5
  %44 = icmp ne ptr null, %43
  br i1 %44, label %45, label %1115

45:                                               ; preds = %6
  %46 = load i64, ptr %8, align 8, !tbaa !9
  %47 = icmp ne i64 0, %46
  br i1 %47, label %48, label %1099

48:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store i64 0, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store i64 0, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store i64 0, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store ptr null, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store ptr null, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store ptr null, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %49 = load ptr, ptr @libxsmm_default_allocator_context, align 8, !tbaa !5
  store ptr %49, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 @libxsmm_default_malloc_fn, i64 8, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %22, ptr align 8 @libxsmm_default_free_fn, i64 8, i1 false), !tbaa.struct !13
  %50 = load i32, ptr %10, align 4, !tbaa !11
  %51 = and i32 1, %50
  %52 = icmp ne i32 0, %51
  br i1 %52, label %53, label %55

53:                                               ; preds = %48
  %54 = load ptr, ptr @libxsmm_scratch_allocator_context, align 8, !tbaa !5
  store ptr %54, ptr %20, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 @libxsmm_scratch_malloc_fn, i64 8, i1 false), !tbaa.struct !13
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %22, ptr align 8 @libxsmm_scratch_free_fn, i64 8, i1 false), !tbaa.struct !13
  br label %55

55:                                               ; preds = %53, %48
  %56 = load i32, ptr @internal_malloc_kind, align 64, !tbaa !11
  %57 = and i32 %56, 1
  %58 = icmp ne i32 0, %57
  br i1 %58, label %59, label %62

59:                                               ; preds = %55
  %60 = load i32, ptr @internal_malloc_kind, align 64, !tbaa !11
  %61 = icmp slt i32 0, %60
  br i1 %61, label %68, label %62

62:                                               ; preds = %59, %55
  %63 = load ptr, ptr %21, align 8, !tbaa !14
  %64 = icmp eq ptr null, %63
  br i1 %64, label %68, label %65

65:                                               ; preds = %62
  %66 = load ptr, ptr %22, align 8, !tbaa !14
  %67 = icmp eq ptr null, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %65, %62, %59
  store ptr @__real_malloc, ptr %21, align 8, !tbaa !14
  store ptr @__real_free, ptr %22, align 8, !tbaa !14
  store ptr null, ptr %20, align 8, !tbaa !5
  br label %69

69:                                               ; preds = %68, %65
  %70 = load i32, ptr %10, align 4, !tbaa !11
  %71 = or i32 %70, 192
  store i32 %71, ptr %10, align 4, !tbaa !11
  %72 = load i32, ptr %10, align 4, !tbaa !11
  %73 = and i32 4, %72
  %74 = icmp ne i32 0, %73
  br i1 %74, label %75, label %93

75:                                               ; preds = %69
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = load ptr, ptr %76, align 8, !tbaa !5
  %78 = icmp ne ptr null, %77
  br i1 %78, label %79, label %93

79:                                               ; preds = %75
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = call ptr @internal_malloc_info(ptr noundef %81, i32 noundef 2)
  store ptr %82, ptr %17, align 8, !tbaa !5
  %83 = load ptr, ptr %17, align 8, !tbaa !5
  %84 = icmp ne ptr null, %83
  br i1 %84, label %85, label %89

85:                                               ; preds = %79
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %86, i32 0, i32 4
  %88 = load i64, ptr %87, align 8, !tbaa !15
  store i64 %88, ptr %16, align 8, !tbaa !9
  br label %92

89:                                               ; preds = %79
  %90 = load i32, ptr %10, align 4, !tbaa !11
  %91 = and i32 %90, -33
  store i32 %91, ptr %10, align 4, !tbaa !11
  br label %92

92:                                               ; preds = %89, %85
  br label %95

93:                                               ; preds = %75, %69
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %94, align 8, !tbaa !5
  br label %95

95:                                               ; preds = %93, %92
  %96 = load i32, ptr %10, align 4, !tbaa !11
  %97 = and i32 256, %96
  %98 = icmp eq i32 0, %97
  br i1 %98, label %99, label %130

99:                                               ; preds = %95
  %100 = load i32, ptr %10, align 4, !tbaa !11
  %101 = and i32 32, %100
  %102 = icmp eq i32 0, %101
  br i1 %102, label %103, label %130

103:                                              ; preds = %99
  %104 = load i32, ptr %10, align 4, !tbaa !11
  %105 = and i32 4, %104
  %106 = icmp eq i32 0, %105
  br i1 %106, label %107, label %111

107:                                              ; preds = %103
  %108 = load i64, ptr %8, align 8, !tbaa !9
  %109 = load i64, ptr %9, align 8, !tbaa !9
  %110 = call i64 @libxsmm_alignment(i64 noundef %108, i64 noundef %109)
  br label %113

111:                                              ; preds = %103
  %112 = load i64, ptr %9, align 8, !tbaa !9
  br label %113

113:                                              ; preds = %111, %107
  %114 = phi i64 [ %110, %107 ], [ %112, %111 ]
  store i64 %114, ptr %14, align 8, !tbaa !9
  %115 = load i64, ptr %8, align 8, !tbaa !9
  %116 = load i64, ptr %12, align 8, !tbaa !9
  %117 = add i64 %115, %116
  %118 = add i64 %117, 48
  %119 = load i64, ptr %14, align 8, !tbaa !9
  %120 = add i64 %118, %119
  %121 = sub i64 %120, 1
  store i64 %121, ptr %15, align 8, !tbaa !9
  %122 = load ptr, ptr %7, align 8, !tbaa !5
  %123 = load i64, ptr %15, align 8, !tbaa !9
  %124 = load ptr, ptr %20, align 8, !tbaa !5
  %125 = getelementptr inbounds %union.libxsmm_malloc_function, ptr %21, i32 0, i32 0
  %126 = load ptr, ptr %125, align 8
  %127 = getelementptr inbounds %union.libxsmm_free_function, ptr %22, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8
  %129 = call ptr @internal_xmalloc(ptr noundef %122, ptr noundef %17, i64 noundef %123, ptr noundef %124, ptr %126, ptr %128)
  store ptr %129, ptr %18, align 8, !tbaa !5
  br label %880

130:                                              ; preds = %99, %95
  %131 = load ptr, ptr %17, align 8, !tbaa !5
  %132 = icmp eq ptr null, %131
  br i1 %132, label %139, label %133

133:                                              ; preds = %130
  %134 = load i64, ptr %8, align 8, !tbaa !9
  %135 = load ptr, ptr %17, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %135, i32 0, i32 4
  %137 = load i64, ptr %136, align 8, !tbaa !15
  %138 = icmp ne i64 %134, %137
  br i1 %138, label %139, label %852

139:                                              ; preds = %133, %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %140 = load i64, ptr %8, align 8, !tbaa !9
  %141 = icmp ult i64 2097152, %140
  %142 = zext i1 %141 to i64
  %143 = select i1 %141, i32 0, i32 16384
  %144 = or i32 0, %143
  %145 = load i32, ptr %10, align 4, !tbaa !11
  %146 = and i32 256, %145
  %147 = icmp ne i32 0, %146
  br i1 %147, label %148, label %151

148:                                              ; preds = %139
  %149 = load i32, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  %150 = icmp ne i32 0, %149
  br label %151

151:                                              ; preds = %148, %139
  %152 = phi i1 [ false, %139 ], [ %150, %148 ]
  %153 = zext i1 %152 to i64
  %154 = select i1 %152, i32 64, i32 0
  %155 = or i32 %144, %154
  %156 = load i32, ptr %10, align 4, !tbaa !11
  %157 = and i32 256, %156
  %158 = icmp eq i32 0, %157
  br i1 %158, label %159, label %172

159:                                              ; preds = %151
  %160 = load i64, ptr %8, align 8, !tbaa !9
  %161 = icmp ule i64 33554432, %160
  br i1 %161, label %166, label %162

162:                                              ; preds = %159
  %163 = load i32, ptr %10, align 4, !tbaa !11
  %164 = and i32 8, %163
  %165 = icmp ne i32 0, %164
  br i1 %165, label %166, label %172

166:                                              ; preds = %162, %159
  %167 = load i64, ptr @internal_malloc_hugetlb, align 64, !tbaa !9
  %168 = load i64, ptr %8, align 8, !tbaa !9
  %169 = add i64 %167, %168
  %170 = load i64, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !9
  %171 = icmp ult i64 %169, %170
  br label %172

172:                                              ; preds = %166, %162, %151
  %173 = phi i1 [ false, %162 ], [ false, %151 ], [ %171, %166 ]
  %174 = zext i1 %173 to i64
  %175 = select i1 %173, i32 262144, i32 0
  %176 = or i32 %155, %175
  %177 = load i32, ptr %10, align 4, !tbaa !11
  %178 = and i32 256, %177
  %179 = icmp ne i32 0, %178
  %180 = zext i1 %179 to i64
  %181 = select i1 %179, i32 0, i32 0
  %182 = or i32 %176, %181
  store i32 %182, ptr %23, align 4, !tbaa !11
  %183 = load i32, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !11
  %184 = icmp eq i32 0, %183
  br i1 %184, label %185, label %219

185:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 390, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 3, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 10, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 327, ptr %28, align 4, !tbaa !11
  %186 = call i32 @uname(ptr noundef %24) #8
  %187 = icmp sle i32 0, %186
  br i1 %187, label %188, label %217

188:                                              ; preds = %185
  %189 = getelementptr inbounds %struct.utsname, ptr %24, i32 0, i32 0
  %190 = getelementptr inbounds [65 x i8], ptr %189, i64 0, i64 0
  %191 = call i32 @strcmp(ptr noundef @.str.34, ptr noundef %190) #9
  %192 = icmp eq i32 0, %191
  br i1 %192, label %193, label %217

193:                                              ; preds = %188
  %194 = getelementptr inbounds %struct.utsname, ptr %24, i32 0, i32 2
  %195 = getelementptr inbounds [65 x i8], ptr %194, i64 0, i64 0
  %196 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %195, ptr noundef @.str.35, ptr noundef %25, ptr noundef %26, ptr noundef %27, ptr noundef %28) #8
  %197 = icmp eq i32 4, %196
  br i1 %197, label %198, label %217

198:                                              ; preds = %193
  %199 = load i32, ptr %25, align 4, !tbaa !11
  %200 = and i32 127, %199
  %201 = shl i32 %200, 24
  %202 = load i32, ptr %26, align 4, !tbaa !11
  %203 = and i32 31, %202
  %204 = shl i32 %203, 19
  %205 = or i32 %201, %204
  %206 = load i32, ptr %27, align 4, !tbaa !11
  %207 = and i32 31, %206
  %208 = shl i32 %207, 14
  %209 = or i32 %205, %208
  %210 = load i32, ptr %28, align 4, !tbaa !11
  %211 = and i32 16383, %210
  %212 = or i32 %209, %211
  %213 = icmp ugt i32 55574855, %212
  br i1 %213, label %214, label %217

214:                                              ; preds = %198
  %215 = load i32, ptr %23, align 4, !tbaa !11
  %216 = or i32 %215, 32768
  store i32 %216, ptr %23, align 4, !tbaa !11
  store i32 1, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !11
  br label %218

217:                                              ; preds = %198, %193, %188, %185
  store i32 -1, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !11
  br label %218

218:                                              ; preds = %217, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 390, ptr %24) #8
  br label %226

219:                                              ; preds = %172
  %220 = load i32, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !11
  %221 = icmp eq i32 1, %220
  br i1 %221, label %222, label %225

222:                                              ; preds = %219
  %223 = load i32, ptr %23, align 4, !tbaa !11
  %224 = or i32 %223, 32768
  store i32 %224, ptr %23, align 4, !tbaa !11
  br label %225

225:                                              ; preds = %222, %219
  br label %226

226:                                              ; preds = %225, %218
  %227 = load i64, ptr %9, align 8, !tbaa !9
  %228 = icmp eq i64 0, %227
  br i1 %228, label %229, label %233

229:                                              ; preds = %226
  %230 = load i64, ptr %8, align 8, !tbaa !9
  %231 = load i64, ptr %9, align 8, !tbaa !9
  %232 = call i64 @libxsmm_alignment(i64 noundef %230, i64 noundef %231)
  br label %235

233:                                              ; preds = %226
  %234 = load i64, ptr %9, align 8, !tbaa !9
  br label %235

235:                                              ; preds = %233, %229
  %236 = phi i64 [ %232, %229 ], [ %234, %233 ]
  %237 = call i64 @libxsmm_lcm(i64 noundef %236, i64 noundef 4096)
  store i64 %237, ptr %14, align 8, !tbaa !9
  %238 = load i64, ptr %8, align 8, !tbaa !9
  %239 = load i64, ptr %12, align 8, !tbaa !9
  %240 = add i64 %238, %239
  %241 = add i64 %240, 48
  %242 = load i64, ptr %14, align 8, !tbaa !9
  %243 = add i64 %241, %242
  %244 = sub i64 %243, 1
  %245 = load i64, ptr %14, align 8, !tbaa !9
  %246 = sub i64 %245, 1
  %247 = add i64 %244, %246
  %248 = load i64, ptr %14, align 8, !tbaa !9
  %249 = sub i64 %248, 1
  %250 = xor i64 %249, -1
  %251 = and i64 %247, %250
  store i64 %251, ptr %15, align 8, !tbaa !9
  %252 = load i32, ptr %10, align 4, !tbaa !11
  %253 = and i32 256, %252
  %254 = icmp eq i32 0, %253
  br i1 %254, label %255, label %412

255:                                              ; preds = %235
  %256 = load i32, ptr %23, align 4, !tbaa !11
  %257 = and i32 64, %256
  %258 = icmp eq i32 0, %257
  br i1 %258, label %259, label %260

259:                                              ; preds = %255
  br label %261

260:                                              ; preds = %255
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.1, i32 noundef 1894, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

261:                                              ; preds = %259
  %262 = load ptr, ptr %17, align 8, !tbaa !5
  %263 = icmp eq ptr null, %262
  br i1 %263, label %264, label %265

264:                                              ; preds = %261
  br label %269

265:                                              ; preds = %261
  %266 = load ptr, ptr %17, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %266, i32 0, i32 1
  %268 = load ptr, ptr %267, align 8, !tbaa !17
  br label %269

269:                                              ; preds = %265, %264
  %270 = phi ptr [ null, %264 ], [ %268, %265 ]
  %271 = load i64, ptr %15, align 8, !tbaa !9
  %272 = load i32, ptr %23, align 4, !tbaa !11
  %273 = or i32 34, %272
  %274 = call ptr @mmap(ptr noundef %270, i64 noundef %271, i32 noundef 3, i32 noundef %273, i32 noundef -1, i64 noundef 0) #8
  store ptr %274, ptr %18, align 8, !tbaa !5
  %275 = load i32, ptr %23, align 4, !tbaa !11
  %276 = and i32 262144, %275
  %277 = icmp ne i32 0, %276
  br i1 %277, label %278, label %350

278:                                              ; preds = %269
  %279 = load ptr, ptr %18, align 8, !tbaa !5
  %280 = icmp ne ptr inttoptr (i64 -1 to ptr), %279
  br i1 %280, label %281, label %292

281:                                              ; preds = %278
  %282 = load ptr, ptr %18, align 8, !tbaa !5
  %283 = icmp ne ptr null, %282
  br i1 %283, label %284, label %285

284:                                              ; preds = %281
  br label %286

285:                                              ; preds = %281
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.1, i32 noundef 1903, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

286:                                              ; preds = %284
  %287 = load i64, ptr %15, align 8, !tbaa !9
  %288 = atomicrmw add ptr @internal_malloc_hugetlb, i64 %287 seq_cst, align 64
  %289 = add i64 %288, %287
  %290 = load i32, ptr %10, align 4, !tbaa !11
  %291 = or i32 %290, 8
  store i32 %291, ptr %10, align 4, !tbaa !11
  br label %349

292:                                              ; preds = %278
  %293 = load ptr, ptr %17, align 8, !tbaa !5
  %294 = icmp eq ptr null, %293
  br i1 %294, label %295, label %296

295:                                              ; preds = %292
  br label %300

296:                                              ; preds = %292
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %297, i32 0, i32 1
  %299 = load ptr, ptr %298, align 8, !tbaa !17
  br label %300

300:                                              ; preds = %296, %295
  %301 = phi ptr [ null, %295 ], [ %299, %296 ]
  %302 = load i64, ptr %15, align 8, !tbaa !9
  %303 = load i32, ptr %23, align 4, !tbaa !11
  %304 = and i32 %303, -262145
  %305 = or i32 34, %304
  %306 = call ptr @mmap(ptr noundef %301, i64 noundef %302, i32 noundef 3, i32 noundef %305, i32 noundef -1, i64 noundef 0) #8
  store ptr %306, ptr %18, align 8, !tbaa !5
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = icmp ne ptr inttoptr (i64 -1 to ptr), %307
  br i1 %308, label %309, label %346

309:                                              ; preds = %300
  %310 = load ptr, ptr %18, align 8, !tbaa !5
  %311 = icmp ne ptr null, %310
  br i1 %311, label %312, label %313

312:                                              ; preds = %309
  br label %314

313:                                              ; preds = %309
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.1, i32 noundef 1903, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

314:                                              ; preds = %312
  br label %315

315:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %316 = load i64, ptr @internal_malloc_hugetlb, align 64, !tbaa !9
  %317 = load i64, ptr %15, align 8, !tbaa !9
  %318 = udiv i64 %317, 2
  %319 = add i64 %316, %318
  store i64 %319, ptr %29, align 8, !tbaa !9
  %320 = load i64, ptr %29, align 8, !tbaa !9
  %321 = load i64, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !9
  %322 = icmp ult i64 %320, %321
  br i1 %322, label %323, label %343

323:                                              ; preds = %315
  %324 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %324, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !9
  %325 = load i64, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_, align 8, !tbaa !9
  %326 = load i64, ptr %29, align 8, !tbaa !9
  %327 = icmp ult i64 %325, %326
  br i1 %327, label %328, label %342

328:                                              ; preds = %323
  %329 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %330 = icmp sle i32 3, %329
  br i1 %330, label %334, label %331

331:                                              ; preds = %328
  %332 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %333 = icmp sgt i32 0, %332
  br i1 %333, label %334, label %342

334:                                              ; preds = %331, %328
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %335 = getelementptr inbounds [32 x i8], ptr %30, i64 0, i64 0
  %336 = load i64, ptr %29, align 8, !tbaa !9
  %337 = call i64 @libxsmm_format_value(ptr noundef %335, i32 noundef 32, i64 noundef %336, ptr noundef @.str.38, ptr noundef @.str.39, i32 noundef 10)
  %338 = load ptr, ptr @stderr, align 8, !tbaa !5
  %339 = getelementptr inbounds [32 x i8], ptr %30, i64 0, i64 0
  %340 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %338, ptr noundef @.str.40, ptr noundef %339) #8
  %341 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %341, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %342

342:                                              ; preds = %334, %331, %323
  br label %343

343:                                              ; preds = %342, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  br label %346

346:                                              ; preds = %345, %300
  %347 = load i32, ptr %10, align 4, !tbaa !11
  %348 = and i32 %347, -9
  store i32 %348, ptr %10, align 4, !tbaa !11
  br label %349

349:                                              ; preds = %346, %286
  br label %353

350:                                              ; preds = %269
  %351 = load i32, ptr %10, align 4, !tbaa !11
  %352 = and i32 %351, -9
  store i32 %352, ptr %10, align 4, !tbaa !11
  br label %353

353:                                              ; preds = %350, %349
  %354 = load i32, ptr %23, align 4, !tbaa !11
  %355 = and i32 8192, %354
  %356 = icmp ne i32 0, %355
  br i1 %356, label %357, label %411

357:                                              ; preds = %353
  %358 = load ptr, ptr %18, align 8, !tbaa !5
  %359 = icmp ne ptr inttoptr (i64 -1 to ptr), %358
  br i1 %359, label %360, label %411

360:                                              ; preds = %357
  %361 = load ptr, ptr %18, align 8, !tbaa !5
  %362 = icmp ne ptr null, %361
  br i1 %362, label %363, label %364

363:                                              ; preds = %360
  br label %365

364:                                              ; preds = %360
  call void @__assert_fail(ptr noundef @.str.41, ptr noundef @.str.1, i32 noundef 1911, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

365:                                              ; preds = %363
  %366 = load ptr, ptr %18, align 8, !tbaa !5
  %367 = load i64, ptr %15, align 8, !tbaa !9
  %368 = call i32 @mlock(ptr noundef %366, i64 noundef %367) #8
  %369 = icmp eq i32 0, %368
  br i1 %369, label %370, label %376

370:                                              ; preds = %365
  %371 = load i64, ptr %15, align 8, !tbaa !9
  %372 = atomicrmw add ptr @internal_malloc_plocked, i64 %371 seq_cst, align 64
  %373 = add i64 %372, %371
  %374 = load i32, ptr %10, align 4, !tbaa !11
  %375 = or i32 %374, 16
  store i32 %375, ptr %10, align 4, !tbaa !11
  br label %410

376:                                              ; preds = %365
  br label %377

377:                                              ; preds = %376
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %378 = load i64, ptr @internal_malloc_plocked, align 64, !tbaa !9
  %379 = load i64, ptr %15, align 8, !tbaa !9
  %380 = udiv i64 %379, 2
  %381 = add i64 %378, %380
  store i64 %381, ptr %31, align 8, !tbaa !9
  %382 = load i64, ptr %31, align 8, !tbaa !9
  %383 = load i64, ptr @libxsmm_xmalloc.limit_plocked, align 8, !tbaa !9
  %384 = icmp ult i64 %382, %383
  br i1 %384, label %385, label %405

385:                                              ; preds = %377
  %386 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %386, ptr @libxsmm_xmalloc.limit_plocked, align 8, !tbaa !9
  %387 = load i64, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42, align 8, !tbaa !9
  %388 = load i64, ptr %31, align 8, !tbaa !9
  %389 = icmp ult i64 %387, %388
  br i1 %389, label %390, label %404

390:                                              ; preds = %385
  %391 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %392 = icmp sle i32 3, %391
  br i1 %392, label %396, label %393

393:                                              ; preds = %390
  %394 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %395 = icmp sgt i32 0, %394
  br i1 %395, label %396, label %404

396:                                              ; preds = %393, %390
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %397 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %398 = load i64, ptr %31, align 8, !tbaa !9
  %399 = call i64 @libxsmm_format_value(ptr noundef %397, i32 noundef 32, i64 noundef %398, ptr noundef @.str.38, ptr noundef @.str.39, i32 noundef 10)
  %400 = load ptr, ptr @stderr, align 8, !tbaa !5
  %401 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %402 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %400, ptr noundef @.str.43, ptr noundef %401) #8
  %403 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %403, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  br label %404

404:                                              ; preds = %396, %393, %385
  br label %405

405:                                              ; preds = %404, %377
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %406

406:                                              ; preds = %405
  br label %407

407:                                              ; preds = %406
  %408 = load i32, ptr %10, align 4, !tbaa !11
  %409 = and i32 %408, -17
  store i32 %409, ptr %10, align 4, !tbaa !11
  br label %410

410:                                              ; preds = %407, %370
  br label %411

411:                                              ; preds = %410, %357, %353
  br label %808

412:                                              ; preds = %235
  %413 = load i32, ptr %23, align 4, !tbaa !11
  %414 = and i32 262144, %413
  %415 = icmp eq i32 0, %414
  br i1 %415, label %416, label %417

416:                                              ; preds = %412
  br label %418

417:                                              ; preds = %412
  call void @__assert_fail(ptr noundef @.str.44, ptr noundef @.str.1, i32 noundef 1934, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

418:                                              ; preds = %416
  %419 = load i32, ptr %23, align 4, !tbaa !11
  %420 = and i32 8192, %419
  %421 = icmp eq i32 0, %420
  br i1 %421, label %422, label %423

422:                                              ; preds = %418
  br label %424

423:                                              ; preds = %418
  call void @__assert_fail(ptr noundef @.str.45, ptr noundef @.str.1, i32 noundef 1937, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

424:                                              ; preds = %422
  %425 = atomicrmw or ptr @libxsmm_xmalloc.entrypoint, i32 0 seq_cst, align 4
  %426 = or i32 %425, 0
  %427 = icmp sgt i32 0, %426
  br i1 %427, label %428, label %454

428:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %429 = call ptr @getenv(ptr noundef @.str.46) #8
  store ptr %429, ptr %33, align 8, !tbaa !5
  br label %430

430:                                              ; preds = %428
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !18
  %431 = load ptr, ptr %33, align 8, !tbaa !5
  %432 = icmp eq ptr null, %431
  br i1 %432, label %433, label %438

433:                                              ; preds = %430
  %434 = load i32, ptr @libxsmm_se, align 4, !tbaa !11
  %435 = icmp eq i32 0, %434
  %436 = zext i1 %435 to i64
  %437 = select i1 %435, i32 3, i32 0
  br label %445

438:                                              ; preds = %430
  %439 = load ptr, ptr %33, align 8, !tbaa !5
  %440 = load i8, ptr %439, align 1, !tbaa !14
  %441 = sext i8 %440 to i32
  %442 = icmp ne i32 48, %441
  %443 = zext i1 %442 to i64
  %444 = select i1 %442, i32 0, i32 3
  br label %445

445:                                              ; preds = %438, %433
  %446 = phi i32 [ %437, %433 ], [ %444, %438 ]
  store i32 %446, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #8, !srcloc !19
  br label %447

447:                                              ; preds = %445
  br label %448

448:                                              ; preds = %447
  %449 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %450 = icmp sle i32 0, %449
  br i1 %450, label %451, label %452

451:                                              ; preds = %448
  br label %453

452:                                              ; preds = %448
  call void @__assert_fail(ptr noundef @.str.47, ptr noundef @.str.1, i32 noundef 1947, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

453:                                              ; preds = %451
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %454

454:                                              ; preds = %453, %424
  %455 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %456 = icmp sle i32 %455, 0
  br i1 %456, label %457, label %504

457:                                              ; preds = %454
  %458 = load ptr, ptr %18, align 8, !tbaa !5
  %459 = icmp eq ptr inttoptr (i64 -1 to ptr), %458
  br i1 %459, label %463, label %460

460:                                              ; preds = %457
  %461 = load ptr, ptr %18, align 8, !tbaa !5
  %462 = icmp eq ptr null, %461
  br i1 %462, label %463, label %504

463:                                              ; preds = %460, %457
  br label %464

464:                                              ; preds = %463
  %465 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %466 = icmp eq ptr null, %465
  br i1 %466, label %467, label %473

467:                                              ; preds = %464
  %468 = call ptr @getenv(ptr noundef @.str.48) #8
  store ptr %468, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %469 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %470 = icmp eq ptr null, %469
  br i1 %470, label %471, label %472

471:                                              ; preds = %467
  store ptr @.str.49, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  br label %472

472:                                              ; preds = %471, %467
  br label %473

473:                                              ; preds = %472, %464
  %474 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %475 = load i64, ptr %15, align 8, !tbaa !9
  %476 = load i32, ptr %23, align 4, !tbaa !11
  %477 = call ptr @internal_xmalloc_xmap(ptr noundef %474, i64 noundef %475, i32 noundef %476, ptr noundef %19)
  store ptr %477, ptr %18, align 8, !tbaa !5
  %478 = load ptr, ptr %18, align 8, !tbaa !5
  %479 = icmp eq ptr inttoptr (i64 -1 to ptr), %478
  br i1 %479, label %480, label %497

480:                                              ; preds = %473
  %481 = load i32, ptr %23, align 4, !tbaa !11
  %482 = and i32 64, %481
  %483 = icmp ne i32 0, %482
  br i1 %483, label %484, label %497

484:                                              ; preds = %480
  br label %485

485:                                              ; preds = %484
  %486 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %487 = load i64, ptr %15, align 8, !tbaa !9
  %488 = load i32, ptr %23, align 4, !tbaa !11
  %489 = and i32 %488, -65
  %490 = call ptr @internal_xmalloc_xmap(ptr noundef %486, i64 noundef %487, i32 noundef %489, ptr noundef %19)
  store ptr %490, ptr %18, align 8, !tbaa !5
  %491 = load ptr, ptr %18, align 8, !tbaa !5
  %492 = icmp ne ptr inttoptr (i64 -1 to ptr), %491
  br i1 %492, label %493, label %494

493:                                              ; preds = %485
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %494

494:                                              ; preds = %493, %485
  br label %495

495:                                              ; preds = %494
  br label %496

496:                                              ; preds = %495
  br label %497

497:                                              ; preds = %496, %480, %473
  %498 = load ptr, ptr %18, align 8, !tbaa !5
  %499 = icmp ne ptr inttoptr (i64 -1 to ptr), %498
  br i1 %499, label %500, label %501

500:                                              ; preds = %497
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %501

501:                                              ; preds = %500, %497
  br label %502

502:                                              ; preds = %501
  br label %503

503:                                              ; preds = %502
  br label %504

504:                                              ; preds = %503, %460, %454
  %505 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %506 = icmp sle i32 %505, 1
  br i1 %506, label %507, label %554

507:                                              ; preds = %504
  %508 = load ptr, ptr %18, align 8, !tbaa !5
  %509 = icmp eq ptr inttoptr (i64 -1 to ptr), %508
  br i1 %509, label %513, label %510

510:                                              ; preds = %507
  %511 = load ptr, ptr %18, align 8, !tbaa !5
  %512 = icmp eq ptr null, %511
  br i1 %512, label %513, label %554

513:                                              ; preds = %510, %507
  br label %514

514:                                              ; preds = %513
  %515 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %516 = icmp eq ptr null, %515
  br i1 %516, label %517, label %523

517:                                              ; preds = %514
  %518 = call ptr @getenv(ptr noundef @.str.51) #8
  store ptr %518, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %519 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %520 = icmp eq ptr null, %519
  br i1 %520, label %521, label %522

521:                                              ; preds = %517
  store ptr @.str.52, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  br label %522

522:                                              ; preds = %521, %517
  br label %523

523:                                              ; preds = %522, %514
  %524 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %525 = load i64, ptr %15, align 8, !tbaa !9
  %526 = load i32, ptr %23, align 4, !tbaa !11
  %527 = call ptr @internal_xmalloc_xmap(ptr noundef %524, i64 noundef %525, i32 noundef %526, ptr noundef %19)
  store ptr %527, ptr %18, align 8, !tbaa !5
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  %529 = icmp eq ptr inttoptr (i64 -1 to ptr), %528
  br i1 %529, label %530, label %547

530:                                              ; preds = %523
  %531 = load i32, ptr %23, align 4, !tbaa !11
  %532 = and i32 64, %531
  %533 = icmp ne i32 0, %532
  br i1 %533, label %534, label %547

534:                                              ; preds = %530
  br label %535

535:                                              ; preds = %534
  %536 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %537 = load i64, ptr %15, align 8, !tbaa !9
  %538 = load i32, ptr %23, align 4, !tbaa !11
  %539 = and i32 %538, -65
  %540 = call ptr @internal_xmalloc_xmap(ptr noundef %536, i64 noundef %537, i32 noundef %539, ptr noundef %19)
  store ptr %540, ptr %18, align 8, !tbaa !5
  %541 = load ptr, ptr %18, align 8, !tbaa !5
  %542 = icmp ne ptr inttoptr (i64 -1 to ptr), %541
  br i1 %542, label %543, label %544

543:                                              ; preds = %535
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %544

544:                                              ; preds = %543, %535
  br label %545

545:                                              ; preds = %544
  br label %546

546:                                              ; preds = %545
  br label %547

547:                                              ; preds = %546, %530, %523
  %548 = load ptr, ptr %18, align 8, !tbaa !5
  %549 = icmp ne ptr inttoptr (i64 -1 to ptr), %548
  br i1 %549, label %550, label %551

550:                                              ; preds = %547
  store i32 1, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %551

551:                                              ; preds = %550, %547
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553, %510, %504
  %555 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %556 = icmp sle i32 %555, 2
  br i1 %556, label %557, label %604

557:                                              ; preds = %554
  %558 = load ptr, ptr %18, align 8, !tbaa !5
  %559 = icmp eq ptr inttoptr (i64 -1 to ptr), %558
  br i1 %559, label %563, label %560

560:                                              ; preds = %557
  %561 = load ptr, ptr %18, align 8, !tbaa !5
  %562 = icmp eq ptr null, %561
  br i1 %562, label %563, label %604

563:                                              ; preds = %560, %557
  br label %564

564:                                              ; preds = %563
  %565 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %566 = icmp eq ptr null, %565
  br i1 %566, label %567, label %573

567:                                              ; preds = %564
  %568 = call ptr @getenv(ptr noundef @.str.54) #8
  store ptr %568, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %569 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %570 = icmp eq ptr null, %569
  br i1 %570, label %571, label %572

571:                                              ; preds = %567
  store ptr @.str.49, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  br label %572

572:                                              ; preds = %571, %567
  br label %573

573:                                              ; preds = %572, %564
  %574 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %575 = load i64, ptr %15, align 8, !tbaa !9
  %576 = load i32, ptr %23, align 4, !tbaa !11
  %577 = call ptr @internal_xmalloc_xmap(ptr noundef %574, i64 noundef %575, i32 noundef %576, ptr noundef %19)
  store ptr %577, ptr %18, align 8, !tbaa !5
  %578 = load ptr, ptr %18, align 8, !tbaa !5
  %579 = icmp eq ptr inttoptr (i64 -1 to ptr), %578
  br i1 %579, label %580, label %597

580:                                              ; preds = %573
  %581 = load i32, ptr %23, align 4, !tbaa !11
  %582 = and i32 64, %581
  %583 = icmp ne i32 0, %582
  br i1 %583, label %584, label %597

584:                                              ; preds = %580
  br label %585

585:                                              ; preds = %584
  %586 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %587 = load i64, ptr %15, align 8, !tbaa !9
  %588 = load i32, ptr %23, align 4, !tbaa !11
  %589 = and i32 %588, -65
  %590 = call ptr @internal_xmalloc_xmap(ptr noundef %586, i64 noundef %587, i32 noundef %589, ptr noundef %19)
  store ptr %590, ptr %18, align 8, !tbaa !5
  %591 = load ptr, ptr %18, align 8, !tbaa !5
  %592 = icmp ne ptr inttoptr (i64 -1 to ptr), %591
  br i1 %592, label %593, label %594

593:                                              ; preds = %585
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %594

594:                                              ; preds = %593, %585
  br label %595

595:                                              ; preds = %594
  br label %596

596:                                              ; preds = %595
  br label %597

597:                                              ; preds = %596, %580, %573
  %598 = load ptr, ptr %18, align 8, !tbaa !5
  %599 = icmp ne ptr inttoptr (i64 -1 to ptr), %598
  br i1 %599, label %600, label %601

600:                                              ; preds = %597
  store i32 2, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %601

601:                                              ; preds = %600, %597
  br label %602

602:                                              ; preds = %601
  br label %603

603:                                              ; preds = %602
  br label %604

604:                                              ; preds = %603, %560, %554
  %605 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %606 = icmp sge i32 3, %605
  br i1 %606, label %607, label %650

607:                                              ; preds = %604
  %608 = load ptr, ptr %18, align 8, !tbaa !5
  %609 = icmp eq ptr inttoptr (i64 -1 to ptr), %608
  br i1 %609, label %613, label %610

610:                                              ; preds = %607
  %611 = load ptr, ptr %18, align 8, !tbaa !5
  %612 = icmp eq ptr null, %611
  br i1 %612, label %613, label %650

613:                                              ; preds = %610, %607
  %614 = load ptr, ptr %19, align 8, !tbaa !5
  %615 = load i64, ptr %15, align 8, !tbaa !9
  %616 = load i32, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  %617 = icmp eq i32 0, %616
  br i1 %617, label %618, label %621

618:                                              ; preds = %613
  %619 = load i32, ptr %23, align 4, !tbaa !11
  %620 = and i32 %619, -65
  br label %623

621:                                              ; preds = %613
  %622 = load i32, ptr %23, align 4, !tbaa !11
  br label %623

623:                                              ; preds = %621, %618
  %624 = phi i32 [ %620, %618 ], [ %622, %621 ]
  %625 = or i32 34, %624
  %626 = call ptr @mmap(ptr noundef %614, i64 noundef %615, i32 noundef 7, i32 noundef %625, i32 noundef -1, i64 noundef 0) #8
  store ptr %626, ptr %18, align 8, !tbaa !5
  %627 = load ptr, ptr %18, align 8, !tbaa !5
  %628 = icmp ne ptr inttoptr (i64 -1 to ptr), %627
  br i1 %628, label %629, label %630

629:                                              ; preds = %623
  store i32 3, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %649

630:                                              ; preds = %623
  %631 = load i32, ptr %23, align 4, !tbaa !11
  %632 = and i32 64, %631
  %633 = icmp ne i32 0, %632
  br i1 %633, label %634, label %648

634:                                              ; preds = %630
  %635 = load i32, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  %636 = icmp ne i32 0, %635
  br i1 %636, label %637, label %648

637:                                              ; preds = %634
  %638 = load ptr, ptr %19, align 8, !tbaa !5
  %639 = load i64, ptr %15, align 8, !tbaa !9
  %640 = load i32, ptr %23, align 4, !tbaa !11
  %641 = and i32 %640, -65
  %642 = or i32 34, %641
  %643 = call ptr @mmap(ptr noundef %638, i64 noundef %639, i32 noundef 7, i32 noundef %642, i32 noundef -1, i64 noundef 0) #8
  store ptr %643, ptr %18, align 8, !tbaa !5
  %644 = load ptr, ptr %18, align 8, !tbaa !5
  %645 = icmp ne ptr inttoptr (i64 -1 to ptr), %644
  br i1 %645, label %646, label %647

646:                                              ; preds = %637
  store i32 3, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %647

647:                                              ; preds = %646, %637
  br label %648

648:                                              ; preds = %647, %634, %630
  br label %649

649:                                              ; preds = %648, %629
  br label %650

650:                                              ; preds = %649, %610, %604
  %651 = load ptr, ptr %18, align 8, !tbaa !5
  %652 = icmp eq ptr inttoptr (i64 -1 to ptr), %651
  br i1 %652, label %653, label %807

653:                                              ; preds = %650
  %654 = load i32, ptr @libxsmm_se, align 4, !tbaa !11
  %655 = icmp eq i32 0, %654
  br i1 %655, label %656, label %807

656:                                              ; preds = %653
  store i32 1, ptr @libxsmm_se, align 4, !tbaa !11
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %657 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %658 = icmp sle i32 %657, 0
  br i1 %658, label %659, label %706

659:                                              ; preds = %656
  %660 = load ptr, ptr %18, align 8, !tbaa !5
  %661 = icmp eq ptr inttoptr (i64 -1 to ptr), %660
  br i1 %661, label %665, label %662

662:                                              ; preds = %659
  %663 = load ptr, ptr %18, align 8, !tbaa !5
  %664 = icmp eq ptr null, %663
  br i1 %664, label %665, label %706

665:                                              ; preds = %662, %659
  br label %666

666:                                              ; preds = %665
  %667 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %668 = icmp eq ptr null, %667
  br i1 %668, label %669, label %675

669:                                              ; preds = %666
  %670 = call ptr @getenv(ptr noundef @.str.48) #8
  store ptr %670, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %671 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %672 = icmp eq ptr null, %671
  br i1 %672, label %673, label %674

673:                                              ; preds = %669
  store ptr @.str.49, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  br label %674

674:                                              ; preds = %673, %669
  br label %675

675:                                              ; preds = %674, %666
  %676 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %677 = load i64, ptr %15, align 8, !tbaa !9
  %678 = load i32, ptr %23, align 4, !tbaa !11
  %679 = call ptr @internal_xmalloc_xmap(ptr noundef %676, i64 noundef %677, i32 noundef %678, ptr noundef %19)
  store ptr %679, ptr %18, align 8, !tbaa !5
  %680 = load ptr, ptr %18, align 8, !tbaa !5
  %681 = icmp eq ptr inttoptr (i64 -1 to ptr), %680
  br i1 %681, label %682, label %699

682:                                              ; preds = %675
  %683 = load i32, ptr %23, align 4, !tbaa !11
  %684 = and i32 64, %683
  %685 = icmp ne i32 0, %684
  br i1 %685, label %686, label %699

686:                                              ; preds = %682
  br label %687

687:                                              ; preds = %686
  %688 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %689 = load i64, ptr %15, align 8, !tbaa !9
  %690 = load i32, ptr %23, align 4, !tbaa !11
  %691 = and i32 %690, -65
  %692 = call ptr @internal_xmalloc_xmap(ptr noundef %688, i64 noundef %689, i32 noundef %691, ptr noundef %19)
  store ptr %692, ptr %18, align 8, !tbaa !5
  %693 = load ptr, ptr %18, align 8, !tbaa !5
  %694 = icmp ne ptr inttoptr (i64 -1 to ptr), %693
  br i1 %694, label %695, label %696

695:                                              ; preds = %687
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %696

696:                                              ; preds = %695, %687
  br label %697

697:                                              ; preds = %696
  br label %698

698:                                              ; preds = %697
  br label %699

699:                                              ; preds = %698, %682, %675
  %700 = load ptr, ptr %18, align 8, !tbaa !5
  %701 = icmp ne ptr inttoptr (i64 -1 to ptr), %700
  br i1 %701, label %702, label %703

702:                                              ; preds = %699
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %703

703:                                              ; preds = %702, %699
  br label %704

704:                                              ; preds = %703
  br label %705

705:                                              ; preds = %704
  br label %706

706:                                              ; preds = %705, %662, %656
  %707 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %708 = icmp sle i32 %707, 1
  br i1 %708, label %709, label %756

709:                                              ; preds = %706
  %710 = load ptr, ptr %18, align 8, !tbaa !5
  %711 = icmp eq ptr inttoptr (i64 -1 to ptr), %710
  br i1 %711, label %715, label %712

712:                                              ; preds = %709
  %713 = load ptr, ptr %18, align 8, !tbaa !5
  %714 = icmp eq ptr null, %713
  br i1 %714, label %715, label %756

715:                                              ; preds = %712, %709
  br label %716

716:                                              ; preds = %715
  %717 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %718 = icmp eq ptr null, %717
  br i1 %718, label %719, label %725

719:                                              ; preds = %716
  %720 = call ptr @getenv(ptr noundef @.str.51) #8
  store ptr %720, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %721 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %722 = icmp eq ptr null, %721
  br i1 %722, label %723, label %724

723:                                              ; preds = %719
  store ptr @.str.52, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  br label %724

724:                                              ; preds = %723, %719
  br label %725

725:                                              ; preds = %724, %716
  %726 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %727 = load i64, ptr %15, align 8, !tbaa !9
  %728 = load i32, ptr %23, align 4, !tbaa !11
  %729 = call ptr @internal_xmalloc_xmap(ptr noundef %726, i64 noundef %727, i32 noundef %728, ptr noundef %19)
  store ptr %729, ptr %18, align 8, !tbaa !5
  %730 = load ptr, ptr %18, align 8, !tbaa !5
  %731 = icmp eq ptr inttoptr (i64 -1 to ptr), %730
  br i1 %731, label %732, label %749

732:                                              ; preds = %725
  %733 = load i32, ptr %23, align 4, !tbaa !11
  %734 = and i32 64, %733
  %735 = icmp ne i32 0, %734
  br i1 %735, label %736, label %749

736:                                              ; preds = %732
  br label %737

737:                                              ; preds = %736
  %738 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %739 = load i64, ptr %15, align 8, !tbaa !9
  %740 = load i32, ptr %23, align 4, !tbaa !11
  %741 = and i32 %740, -65
  %742 = call ptr @internal_xmalloc_xmap(ptr noundef %738, i64 noundef %739, i32 noundef %741, ptr noundef %19)
  store ptr %742, ptr %18, align 8, !tbaa !5
  %743 = load ptr, ptr %18, align 8, !tbaa !5
  %744 = icmp ne ptr inttoptr (i64 -1 to ptr), %743
  br i1 %744, label %745, label %746

745:                                              ; preds = %737
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %746

746:                                              ; preds = %745, %737
  br label %747

747:                                              ; preds = %746
  br label %748

748:                                              ; preds = %747
  br label %749

749:                                              ; preds = %748, %732, %725
  %750 = load ptr, ptr %18, align 8, !tbaa !5
  %751 = icmp ne ptr inttoptr (i64 -1 to ptr), %750
  br i1 %751, label %752, label %753

752:                                              ; preds = %749
  store i32 1, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %753

753:                                              ; preds = %752, %749
  br label %754

754:                                              ; preds = %753
  br label %755

755:                                              ; preds = %754
  br label %756

756:                                              ; preds = %755, %712, %706
  %757 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  %758 = icmp sle i32 %757, 2
  br i1 %758, label %759, label %806

759:                                              ; preds = %756
  %760 = load ptr, ptr %18, align 8, !tbaa !5
  %761 = icmp eq ptr inttoptr (i64 -1 to ptr), %760
  br i1 %761, label %765, label %762

762:                                              ; preds = %759
  %763 = load ptr, ptr %18, align 8, !tbaa !5
  %764 = icmp eq ptr null, %763
  br i1 %764, label %765, label %806

765:                                              ; preds = %762, %759
  br label %766

766:                                              ; preds = %765
  %767 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %768 = icmp eq ptr null, %767
  br i1 %768, label %769, label %775

769:                                              ; preds = %766
  %770 = call ptr @getenv(ptr noundef @.str.54) #8
  store ptr %770, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %771 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %772 = icmp eq ptr null, %771
  br i1 %772, label %773, label %774

773:                                              ; preds = %769
  store ptr @.str.49, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  br label %774

774:                                              ; preds = %773, %769
  br label %775

775:                                              ; preds = %774, %766
  %776 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %777 = load i64, ptr %15, align 8, !tbaa !9
  %778 = load i32, ptr %23, align 4, !tbaa !11
  %779 = call ptr @internal_xmalloc_xmap(ptr noundef %776, i64 noundef %777, i32 noundef %778, ptr noundef %19)
  store ptr %779, ptr %18, align 8, !tbaa !5
  %780 = load ptr, ptr %18, align 8, !tbaa !5
  %781 = icmp eq ptr inttoptr (i64 -1 to ptr), %780
  br i1 %781, label %782, label %799

782:                                              ; preds = %775
  %783 = load i32, ptr %23, align 4, !tbaa !11
  %784 = and i32 64, %783
  %785 = icmp ne i32 0, %784
  br i1 %785, label %786, label %799

786:                                              ; preds = %782
  br label %787

787:                                              ; preds = %786
  %788 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %789 = load i64, ptr %15, align 8, !tbaa !9
  %790 = load i32, ptr %23, align 4, !tbaa !11
  %791 = and i32 %790, -65
  %792 = call ptr @internal_xmalloc_xmap(ptr noundef %788, i64 noundef %789, i32 noundef %791, ptr noundef %19)
  store ptr %792, ptr %18, align 8, !tbaa !5
  %793 = load ptr, ptr %18, align 8, !tbaa !5
  %794 = icmp ne ptr inttoptr (i64 -1 to ptr), %793
  br i1 %794, label %795, label %796

795:                                              ; preds = %787
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !11
  br label %796

796:                                              ; preds = %795, %787
  br label %797

797:                                              ; preds = %796
  br label %798

798:                                              ; preds = %797
  br label %799

799:                                              ; preds = %798, %782, %775
  %800 = load ptr, ptr %18, align 8, !tbaa !5
  %801 = icmp ne ptr inttoptr (i64 -1 to ptr), %800
  br i1 %801, label %802, label %803

802:                                              ; preds = %799
  store i32 2, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !11
  br label %803

803:                                              ; preds = %802, %799
  br label %804

804:                                              ; preds = %803
  br label %805

805:                                              ; preds = %804
  br label %806

806:                                              ; preds = %805, %762, %756
  br label %807

807:                                              ; preds = %806, %653, %650
  br label %808

808:                                              ; preds = %807, %411
  %809 = load ptr, ptr %18, align 8, !tbaa !5
  %810 = icmp ne ptr inttoptr (i64 -1 to ptr), %809
  br i1 %810, label %811, label %817

811:                                              ; preds = %808
  %812 = load ptr, ptr %18, align 8, !tbaa !5
  %813 = icmp ne ptr null, %812
  br i1 %813, label %814, label %817

814:                                              ; preds = %811
  %815 = load i32, ptr %10, align 4, !tbaa !11
  %816 = or i32 %815, 32
  store i32 %816, ptr %10, align 4, !tbaa !11
  br label %842

817:                                              ; preds = %811, %808
  %818 = load i32, ptr %10, align 4, !tbaa !11
  %819 = and i32 32, %818
  %820 = icmp eq i32 0, %819
  br i1 %820, label %821, label %841

821:                                              ; preds = %817
  %822 = load ptr, ptr %21, align 8, !tbaa !14
  %823 = icmp ne ptr null, %822
  br i1 %823, label %824, label %838

824:                                              ; preds = %821
  %825 = load ptr, ptr %20, align 8, !tbaa !5
  %826 = icmp eq ptr null, %825
  br i1 %826, label %827, label %831

827:                                              ; preds = %824
  %828 = load ptr, ptr %21, align 8, !tbaa !14
  %829 = load i64, ptr %15, align 8, !tbaa !9
  %830 = call ptr %828(i64 noundef %829)
  br label %836

831:                                              ; preds = %824
  %832 = load ptr, ptr %21, align 8, !tbaa !14
  %833 = load i64, ptr %15, align 8, !tbaa !9
  %834 = load ptr, ptr %20, align 8, !tbaa !5
  %835 = call ptr %832(i64 noundef %833, ptr noundef %834)
  br label %836

836:                                              ; preds = %831, %827
  %837 = phi ptr [ %830, %827 ], [ %835, %831 ]
  br label %839

838:                                              ; preds = %821
  br label %839

839:                                              ; preds = %838, %836
  %840 = phi ptr [ %837, %836 ], [ null, %838 ]
  store ptr %840, ptr %18, align 8, !tbaa !5
  br label %841

841:                                              ; preds = %839, %817
  store ptr null, ptr %19, align 8, !tbaa !5
  br label %842

842:                                              ; preds = %841, %814
  %843 = load ptr, ptr %18, align 8, !tbaa !5
  %844 = icmp ne ptr inttoptr (i64 -1 to ptr), %843
  br i1 %844, label %845, label %851

845:                                              ; preds = %842
  %846 = load ptr, ptr %18, align 8, !tbaa !5
  %847 = icmp ne ptr null, %846
  br i1 %847, label %848, label %851

848:                                              ; preds = %845
  %849 = load ptr, ptr %18, align 8, !tbaa !5
  %850 = load i64, ptr %15, align 8, !tbaa !9
  call void @internal_xmalloc_mhint(ptr noundef %849, i64 noundef %850)
  br label %851

851:                                              ; preds = %848, %845, %842
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %879

852:                                              ; preds = %133
  %853 = load i64, ptr %8, align 8, !tbaa !9
  %854 = load i64, ptr %12, align 8, !tbaa !9
  %855 = add i64 %853, %854
  %856 = add i64 %855, 48
  %857 = load i64, ptr %9, align 8, !tbaa !9
  %858 = add i64 %856, %857
  %859 = sub i64 %858, 1
  store i64 %859, ptr %15, align 8, !tbaa !9
  %860 = load ptr, ptr %17, align 8, !tbaa !5
  %861 = icmp ne ptr null, %860
  br i1 %861, label %862, label %871

862:                                              ; preds = %852
  %863 = load ptr, ptr %17, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %863, i32 0, i32 1
  %865 = load ptr, ptr %864, align 8, !tbaa !17
  store ptr %865, ptr %18, align 8, !tbaa !5
  %866 = load ptr, ptr %17, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %866, i32 0, i32 5
  %868 = load i32, ptr %867, align 8, !tbaa !20
  %869 = load i32, ptr %10, align 4, !tbaa !11
  %870 = or i32 %869, %868
  store i32 %870, ptr %10, align 4, !tbaa !11
  br label %876

871:                                              ; preds = %852
  %872 = load i32, ptr %10, align 4, !tbaa !11
  %873 = or i32 %872, 32
  store i32 %873, ptr %10, align 4, !tbaa !11
  %874 = load ptr, ptr %7, align 8, !tbaa !5
  %875 = load ptr, ptr %874, align 8, !tbaa !5
  store ptr %875, ptr %18, align 8, !tbaa !5
  br label %876

876:                                              ; preds = %871, %862
  %877 = load i64, ptr %9, align 8, !tbaa !9
  store i64 %877, ptr %14, align 8, !tbaa !9
  %878 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %878, align 8, !tbaa !5
  br label %879

879:                                              ; preds = %876, %851
  br label %880

880:                                              ; preds = %879, %113
  %881 = load ptr, ptr %18, align 8, !tbaa !5
  %882 = icmp ne ptr inttoptr (i64 -1 to ptr), %881
  br i1 %882, label %883, label %1081

883:                                              ; preds = %880
  %884 = load ptr, ptr %18, align 8, !tbaa !5
  %885 = icmp ne ptr null, %884
  br i1 %885, label %886, label %1081

886:                                              ; preds = %883
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %887 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %887, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %888 = load ptr, ptr %34, align 8, !tbaa !5
  %889 = load i64, ptr %12, align 8, !tbaa !9
  %890 = getelementptr inbounds i8, ptr %888, i64 %889
  %891 = getelementptr inbounds i8, ptr %890, i64 48
  %892 = load ptr, ptr %34, align 8, !tbaa !5
  %893 = load i64, ptr %12, align 8, !tbaa !9
  %894 = getelementptr inbounds i8, ptr %892, i64 %893
  %895 = getelementptr inbounds i8, ptr %894, i64 48
  %896 = ptrtoint ptr %895 to i64
  %897 = load i64, ptr %14, align 8, !tbaa !9
  %898 = sub i64 %897, 1
  %899 = add i64 %896, %898
  %900 = load i64, ptr %14, align 8, !tbaa !9
  %901 = sub i64 %900, 1
  %902 = xor i64 %901, -1
  %903 = and i64 %899, %902
  %904 = load ptr, ptr %34, align 8, !tbaa !5
  %905 = load i64, ptr %12, align 8, !tbaa !9
  %906 = getelementptr inbounds i8, ptr %904, i64 %905
  %907 = getelementptr inbounds i8, ptr %906, i64 48
  %908 = ptrtoint ptr %907 to i64
  %909 = sub i64 %903, %908
  %910 = udiv i64 %909, 1
  %911 = getelementptr inbounds i8, ptr %891, i64 %910
  store ptr %911, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %912 = load ptr, ptr %35, align 8, !tbaa !5
  %913 = getelementptr inbounds i8, ptr %912, i64 -48
  store ptr %913, ptr %36, align 8, !tbaa !5
  %914 = load ptr, ptr %35, align 8, !tbaa !5
  %915 = load i64, ptr %8, align 8, !tbaa !9
  %916 = getelementptr inbounds i8, ptr %914, i64 %915
  %917 = load ptr, ptr %34, align 8, !tbaa !5
  %918 = load i64, ptr %15, align 8, !tbaa !9
  %919 = getelementptr inbounds i8, ptr %917, i64 %918
  %920 = icmp ule ptr %916, %919
  br i1 %920, label %921, label %922

921:                                              ; preds = %886
  br label %923

922:                                              ; preds = %886
  call void @__assert_fail(ptr noundef @.str.58, ptr noundef @.str.1, i32 noundef 2026, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

923:                                              ; preds = %921
  %924 = load i64, ptr %14, align 8, !tbaa !9
  %925 = icmp ult i64 0, %924
  br i1 %925, label %926, label %927

926:                                              ; preds = %923
  br label %928

927:                                              ; preds = %923
  call void @__assert_fail(ptr noundef @.str.59, ptr noundef @.str.1, i32 noundef 2027, ptr noundef @__PRETTY_FUNCTION__.libxsmm_xmalloc) #10
  unreachable

928:                                              ; preds = %926
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = load ptr, ptr %929, align 8, !tbaa !5
  %931 = icmp ne ptr null, %930
  br i1 %931, label %932, label %964

932:                                              ; preds = %928
  %933 = load ptr, ptr %35, align 8, !tbaa !5
  %934 = load ptr, ptr %7, align 8, !tbaa !5
  %935 = load ptr, ptr %934, align 8, !tbaa !5
  %936 = load i64, ptr %16, align 8, !tbaa !9
  %937 = load i64, ptr %8, align 8, !tbaa !9
  %938 = icmp ult i64 %936, %937
  br i1 %938, label %939, label %941

939:                                              ; preds = %932
  %940 = load i64, ptr %16, align 8, !tbaa !9
  br label %943

941:                                              ; preds = %932
  %942 = load i64, ptr %8, align 8, !tbaa !9
  br label %943

943:                                              ; preds = %941, %939
  %944 = phi i64 [ %940, %939 ], [ %942, %941 ]
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %933, ptr align 1 %935, i64 %944, i1 false)
  %945 = load ptr, ptr %17, align 8, !tbaa !5
  %946 = icmp ne ptr null, %945
  br i1 %946, label %947, label %963

947:                                              ; preds = %943
  %948 = load ptr, ptr %7, align 8, !tbaa !5
  %949 = load ptr, ptr %948, align 8, !tbaa !5
  %950 = load ptr, ptr %17, align 8, !tbaa !5
  %951 = call i32 @internal_xfree(ptr noundef %949, ptr noundef %950)
  %952 = icmp ne i32 0, %951
  br i1 %952, label %953, label %963

953:                                              ; preds = %947
  %954 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %955 = icmp ne i32 0, %954
  br i1 %955, label %956, label %963

956:                                              ; preds = %953
  %957 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %958 = add i32 %957, 1
  %959 = icmp eq i32 1, %958
  br i1 %959, label %960, label %963

960:                                              ; preds = %956
  %961 = load ptr, ptr @stderr, align 8, !tbaa !5
  %962 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %961, ptr noundef @.str.60) #8
  br label %963

963:                                              ; preds = %960, %956, %953, %947, %943
  br label %964

964:                                              ; preds = %963, %928
  %965 = load ptr, ptr %11, align 8, !tbaa !5
  %966 = icmp ne ptr null, %965
  br i1 %966, label %970, label %967

967:                                              ; preds = %964
  %968 = load i64, ptr %12, align 8, !tbaa !9
  %969 = icmp eq i64 0, %968
  br i1 %969, label %970, label %991

970:                                              ; preds = %967, %964
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %971 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %971, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !11
  br label %972

972:                                              ; preds = %987, %970
  %973 = load i32, ptr %38, align 4, !tbaa !11
  %974 = load i64, ptr %12, align 8, !tbaa !9
  %975 = trunc i64 %974 to i32
  %976 = icmp slt i32 %973, %975
  br i1 %976, label %977, label %990

977:                                              ; preds = %972
  %978 = load ptr, ptr %37, align 8, !tbaa !5
  %979 = load i32, ptr %38, align 4, !tbaa !11
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds i8, ptr %978, i64 %980
  %982 = load i8, ptr %981, align 1, !tbaa !14
  %983 = load ptr, ptr %34, align 8, !tbaa !5
  %984 = load i32, ptr %38, align 4, !tbaa !11
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i8, ptr %983, i64 %985
  store i8 %982, ptr %986, align 1, !tbaa !14
  br label %987

987:                                              ; preds = %977
  %988 = load i32, ptr %38, align 4, !tbaa !11
  %989 = add nsw i32 %988, 1
  store i32 %989, ptr %38, align 4, !tbaa !11
  br label %972, !llvm.loop !21

990:                                              ; preds = %972
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %1002

991:                                              ; preds = %967
  %992 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %993 = icmp ne i32 0, %992
  br i1 %993, label %994, label %1001

994:                                              ; preds = %991
  %995 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %996 = add i32 %995, 1
  %997 = icmp eq i32 1, %996
  br i1 %997, label %998, label %1001

998:                                              ; preds = %994
  %999 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1000 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %999, ptr noundef @.str.61) #8
  br label %1001

1001:                                             ; preds = %998, %994, %991
  br label %1002

1002:                                             ; preds = %1001, %990
  %1003 = load i32, ptr %10, align 4, !tbaa !11
  %1004 = and i32 256, %1003
  %1005 = icmp eq i32 0, %1004
  br i1 %1005, label %1006, label %1051

1006:                                             ; preds = %1002
  %1007 = load i32, ptr %10, align 4, !tbaa !11
  %1008 = and i32 2, %1007
  %1009 = icmp eq i32 0, %1008
  br i1 %1009, label %1010, label %1035

1010:                                             ; preds = %1006
  %1011 = load i32, ptr %10, align 4, !tbaa !11
  %1012 = and i32 1, %1011
  %1013 = icmp ne i32 0, %1012
  br i1 %1013, label %1014, label %1024

1014:                                             ; preds = %1010
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %1015 = load i64, ptr %15, align 8, !tbaa !9
  %1016 = atomicrmw add ptr @internal_malloc_public_cur, i64 %1015 seq_cst, align 64
  %1017 = add i64 %1016, %1015
  store i64 %1017, ptr %39, align 8, !tbaa !9
  %1018 = load i64, ptr @internal_malloc_public_max, align 64, !tbaa !9
  %1019 = load i64, ptr %39, align 8, !tbaa !9
  %1020 = icmp ult i64 %1018, %1019
  br i1 %1020, label %1021, label %1023

1021:                                             ; preds = %1014
  %1022 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %1022, ptr @internal_malloc_public_max, align 64, !tbaa !9
  br label %1023

1023:                                             ; preds = %1021, %1014
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %1034

1024:                                             ; preds = %1010
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %1025 = load i64, ptr %15, align 8, !tbaa !9
  %1026 = atomicrmw add ptr @internal_malloc_local_cur, i64 %1025 seq_cst, align 64
  %1027 = add i64 %1026, %1025
  store i64 %1027, ptr %40, align 8, !tbaa !9
  %1028 = load i64, ptr @internal_malloc_local_max, align 64, !tbaa !9
  %1029 = load i64, ptr %40, align 8, !tbaa !9
  %1030 = icmp ult i64 %1028, %1029
  br i1 %1030, label %1031, label %1033

1031:                                             ; preds = %1024
  %1032 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %1032, ptr @internal_malloc_local_max, align 64, !tbaa !9
  br label %1033

1033:                                             ; preds = %1031, %1024
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %1034

1034:                                             ; preds = %1033, %1023
  br label %1050

1035:                                             ; preds = %1006
  %1036 = load i32, ptr %10, align 4, !tbaa !11
  %1037 = and i32 1, %1036
  %1038 = icmp ne i32 0, %1037
  br i1 %1038, label %1039, label %1049

1039:                                             ; preds = %1035
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %1040 = load i64, ptr %15, align 8, !tbaa !9
  %1041 = atomicrmw add ptr @internal_malloc_private_cur, i64 %1040 seq_cst, align 64
  %1042 = add i64 %1041, %1040
  store i64 %1042, ptr %41, align 8, !tbaa !9
  %1043 = load i64, ptr @internal_malloc_private_max, align 64, !tbaa !9
  %1044 = load i64, ptr %41, align 8, !tbaa !9
  %1045 = icmp ult i64 %1043, %1044
  br i1 %1045, label %1046, label %1048

1046:                                             ; preds = %1039
  %1047 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %1047, ptr @internal_malloc_private_max, align 64, !tbaa !9
  br label %1048

1048:                                             ; preds = %1046, %1039
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %1049

1049:                                             ; preds = %1048, %1035
  br label %1050

1050:                                             ; preds = %1049, %1034
  br label %1051

1051:                                             ; preds = %1050, %1002
  %1052 = load i32, ptr %10, align 4, !tbaa !11
  %1053 = and i32 32, %1052
  %1054 = icmp eq i32 0, %1053
  br i1 %1054, label %1055, label %1061

1055:                                             ; preds = %1051
  %1056 = load ptr, ptr %20, align 8, !tbaa !5
  %1057 = load ptr, ptr %36, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1057, i32 0, i32 3
  store ptr %1056, ptr %1058, align 8, !tbaa !23
  %1059 = load ptr, ptr %36, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1059, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1060, ptr align 8 %22, i64 8, i1 false), !tbaa.struct !13
  br label %1066

1061:                                             ; preds = %1051
  %1062 = load ptr, ptr %36, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1062, i32 0, i32 0
  store ptr null, ptr %1063, align 8, !tbaa !14
  %1064 = load ptr, ptr %36, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1064, i32 0, i32 3
  store ptr null, ptr %1065, align 8, !tbaa !23
  br label %1066

1066:                                             ; preds = %1061, %1055
  %1067 = load i64, ptr %8, align 8, !tbaa !9
  %1068 = load ptr, ptr %36, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1068, i32 0, i32 4
  store i64 %1067, ptr %1069, align 8, !tbaa !15
  %1070 = load ptr, ptr %18, align 8, !tbaa !5
  %1071 = load ptr, ptr %36, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1071, i32 0, i32 1
  store ptr %1070, ptr %1072, align 8, !tbaa !17
  %1073 = load ptr, ptr %19, align 8, !tbaa !5
  %1074 = load ptr, ptr %36, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1074, i32 0, i32 2
  store ptr %1073, ptr %1075, align 8, !tbaa !24
  %1076 = load i32, ptr %10, align 4, !tbaa !11
  %1077 = load ptr, ptr %36, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.internal_malloc_info_type, ptr %1077, i32 0, i32 5
  store i32 %1076, ptr %1078, align 8, !tbaa !20
  %1079 = load ptr, ptr %35, align 8, !tbaa !5
  %1080 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %1079, ptr %1080, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %1098

1081:                                             ; preds = %883, %880
  %1082 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %1083 = icmp ne i32 0, %1082
  br i1 %1083, label %1084, label %1096

1084:                                             ; preds = %1081
  %1085 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %1086 = add i32 %1085, 1
  %1087 = icmp eq i32 1, %1086
  br i1 %1087, label %1088, label %1096

1088:                                             ; preds = %1084
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #8
  %1089 = getelementptr inbounds [32 x i8], ptr %42, i64 0, i64 0
  %1090 = load i64, ptr %15, align 8, !tbaa !9
  %1091 = call i64 @libxsmm_format_value(ptr noundef %1089, i32 noundef 32, i64 noundef %1090, ptr noundef @.str.38, ptr noundef @.str.39, i32 noundef 10)
  %1092 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1093 = getelementptr inbounds [32 x i8], ptr %42, i64 0, i64 0
  %1094 = load i32, ptr %10, align 4, !tbaa !11
  %1095 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1092, ptr noundef @.str.62, ptr noundef %1093, i32 noundef %1094) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  br label %1096

1096:                                             ; preds = %1088, %1084, %1081
  store i32 1, ptr %13, align 4, !tbaa !11
  %1097 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %1097, align 8, !tbaa !5
  br label %1098

1098:                                             ; preds = %1096, %1066
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %1114

1099:                                             ; preds = %45
  %1100 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %1101 = icmp sle i32 3, %1100
  br i1 %1101, label %1105, label %1102

1102:                                             ; preds = %1099
  %1103 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !11
  %1104 = icmp sgt i32 0, %1103
  br i1 %1104, label %1105, label %1112

1105:                                             ; preds = %1102, %1099
  %1106 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %1107 = add i32 %1106, 1
  %1108 = icmp eq i32 1, %1107
  br i1 %1108, label %1109, label %1112

1109:                                             ; preds = %1105
  %1110 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1111 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1110, ptr noundef @.str.63) #8
  br label %1112

1112:                                             ; preds = %1109, %1105, %1102
  %1113 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %1113, align 8, !tbaa !5
  br label %1114

1114:                                             ; preds = %1112, %1098
  br label %1120

1115:                                             ; preds = %6
  %1116 = load i64, ptr %8, align 8, !tbaa !9
  %1117 = icmp ne i64 0, %1116
  br i1 %1117, label %1118, label %1119

1118:                                             ; preds = %1115
  store i32 1, ptr %13, align 4, !tbaa !11
  br label %1119

1119:                                             ; preds = %1118, %1115
  br label %1120

1120:                                             ; preds = %1119, %1114
  %1121 = load i32, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  ret i32 %1121
}

; 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) #6

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local ptr @internal_xmalloc(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr, ptr) #0

declare void @__real_free(ptr noundef) #2

declare ptr @__real_malloc(i64 noundef) #2

; Function Attrs: nounwind
declare i32 @uname(ptr noundef) #5

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

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #5

; Function Attrs: nounwind
declare ptr @mmap(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) #5

declare i64 @libxsmm_format_value(ptr noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind
declare i32 @mlock(ptr noundef, i64 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @internal_xmalloc_xmap(ptr noundef, i64 noundef, i32 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @internal_xmalloc_mhint(ptr noundef, i64 noundef) #4

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = { noreturn 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 #4 = { inlinehint 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 #5 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { noreturn nounwind }

!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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{i64 0, i64 8, !14}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !10, i64 32}
!16 = !{!"internal_malloc_info_type", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !12, i64 40}
!17 = !{!16, !6, i64 8}
!18 = !{i64 2152955283}
!19 = !{i64 2152955360}
!20 = !{!16, !12, i64 40}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!16, !6, i64 24}
!24 = !{!16, !6, i64 16}


; 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"

%union.libxsmm_malloc_function = type { ptr }
%union.libxsmm_free_function = type { ptr }
%struct.utsname = type { [65 x i8], [65 x i8], [65 x i8], [65 x i8], [65 x i8], [65 x i8] }

@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@stderr = external local_unnamed_addr global ptr, align 8
@internal_malloc_kind = external dso_local local_unnamed_addr global i32, align 64
@internal_malloc_local_cur = external dso_local global i64, align 64
@internal_malloc_local_max = external dso_local local_unnamed_addr global i64, align 64
@internal_malloc_private_cur = external dso_local global i64, align 64
@internal_malloc_private_max = external dso_local local_unnamed_addr global i64, align 64
@internal_malloc_hugetlb = external dso_local global i64, align 64
@internal_malloc_plocked = external dso_local global i64, align 64
@internal_malloc_public_cur = external dso_local global i64, align 64
@libxsmm_default_allocator_context = external local_unnamed_addr global ptr, align 8
@libxsmm_default_malloc_fn = external local_unnamed_addr global %union.libxsmm_malloc_function, align 8
@libxsmm_default_free_fn = external local_unnamed_addr global %union.libxsmm_free_function, align 8
@libxsmm_scratch_allocator_context = external local_unnamed_addr global ptr, align 8
@libxsmm_scratch_malloc_fn = external local_unnamed_addr global %union.libxsmm_malloc_function, align 8
@libxsmm_scratch_free_fn = external local_unnamed_addr global %union.libxsmm_free_function, align 8
@libxsmm_xmalloc.error_once = external hidden global i32, align 4
@libxsmm_xmalloc.limit_hugetlb = external hidden local_unnamed_addr global i64, align 8
@libxsmm_xmalloc.limit_plocked = external hidden local_unnamed_addr global i64, align 8
@libxsmm_xmalloc.map32 = external hidden local_unnamed_addr global i32, align 4
@libxsmm_xmalloc.prefault = external hidden local_unnamed_addr global i32, align 4
@.str.34 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_xmalloc = external hidden unnamed_addr constant [72 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [23 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_watermark_verbose_ = external hidden local_unnamed_addr global i64, align 8
@.str.38 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [21 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42 = external hidden local_unnamed_addr global i64, align 8
@.str.43 = external hidden unnamed_addr constant [55 x i8], align 1
@libxsmm_xmalloc.entrypoint = external hidden global i32, align 4
@.str.44 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [11 x i8], align 1
@libxsmm_se = external local_unnamed_addr global i32, align 4
@.str.47 = external hidden unnamed_addr constant [16 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_ = external hidden local_unnamed_addr global ptr, align 8
@.str.48 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [1 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.50 = external hidden local_unnamed_addr global ptr, align 8
@.str.51 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [5 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.53 = external hidden local_unnamed_addr global ptr, align 8
@.str.54 = external hidden unnamed_addr constant [5 x i8], align 1
@libxsmm_xmalloc.internal_xmalloc_env_.55 = external hidden local_unnamed_addr global ptr, align 8
@libxsmm_xmalloc.internal_xmalloc_env_.56 = external hidden local_unnamed_addr global ptr, align 8
@libxsmm_xmalloc.internal_xmalloc_env_.57 = external hidden local_unnamed_addr global ptr, align 8
@.str.58 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [57 x i8], align 1
@internal_malloc_public_max = external dso_local local_unnamed_addr global i64, align 64
@.str.62 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [57 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @libxsmm_alignment(i64 noundef, i64 noundef) local_unnamed_addr #0

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

declare i64 @libxsmm_lcm(i64 noundef, i64 noundef) local_unnamed_addr #2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @internal_malloc_info(ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @internal_xfree(ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @libxsmm_xmalloc(ptr noundef %0, i64 noundef %1, i64 noundef %2, i32 noundef %3, ptr noundef readonly %4, i64 noundef %5) local_unnamed_addr #0 {
  %7 = ptrtoint ptr %4 to i64
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %struct.utsname, align 1
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca [32 x i8], align 16
  %16 = alloca [32 x i8], align 16
  %17 = alloca [32 x i8], align 16
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %519, label %18

18:                                               ; preds = %6
  %.not358 = icmp eq i64 %1, 0
  br i1 %.not358, label %510, label %19

19:                                               ; preds = %18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #11
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  store ptr null, ptr %9, align 8, !tbaa !5
  %20 = and i32 %3, 1
  %.not359 = icmp eq i32 %20, 0
  %libxsmm_default_allocator_context.val = load ptr, ptr @libxsmm_default_allocator_context, align 8
  %libxsmm_scratch_allocator_context.val = load ptr, ptr @libxsmm_scratch_allocator_context, align 8
  %.0305 = select i1 %.not359, ptr %libxsmm_default_allocator_context.val, ptr %libxsmm_scratch_allocator_context.val
  %libxsmm_default_malloc_fn.val = load ptr, ptr @libxsmm_default_malloc_fn, align 8
  %libxsmm_scratch_malloc_fn.val = load ptr, ptr @libxsmm_scratch_malloc_fn, align 8
  %.sroa.0119.0 = select i1 %.not359, ptr %libxsmm_default_malloc_fn.val, ptr %libxsmm_scratch_malloc_fn.val
  %libxsmm_default_free_fn.val = load ptr, ptr @libxsmm_default_free_fn, align 8
  %libxsmm_scratch_free_fn.val = load ptr, ptr @libxsmm_scratch_free_fn, align 8
  %.sroa.0.0 = select i1 %.not359, ptr %libxsmm_default_free_fn.val, ptr %libxsmm_scratch_free_fn.val
  %21 = load i32, ptr @internal_malloc_kind, align 64
  %22 = and i32 %21, 1
  %23 = icmp ne i32 %22, 0
  %24 = icmp sgt i32 %21, 0
  %or.cond = and i1 %24, %23
  %25 = icmp eq ptr %.sroa.0119.0, null
  %or.cond3 = select i1 %or.cond, i1 true, i1 %25
  %26 = icmp eq ptr %.sroa.0.0, null
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %26
  %.sroa.0.1 = select i1 %or.cond5, ptr @__real_free, ptr %.sroa.0.0
  %.sroa.0119.1 = select i1 %or.cond5, ptr @__real_malloc, ptr %.sroa.0119.0
  %.1306 = select i1 %or.cond5, ptr null, ptr %.0305
  %27 = or i32 %3, 192
  %28 = and i32 %3, 4
  %.not360 = icmp eq i32 %28, 0
  br i1 %.not360, label %38, label %29

29:                                               ; preds = %19
  %30 = load ptr, ptr %0, align 8, !tbaa !5
  %.not361 = icmp eq ptr %30, null
  br i1 %.not361, label %38, label %31

31:                                               ; preds = %29
  %32 = tail call ptr @internal_malloc_info(ptr noundef nonnull %30, i32 noundef 2)
  store ptr %32, ptr %8, align 8, !tbaa !5
  %.not362 = icmp eq ptr %32, null
  br i1 %.not362, label %36, label %33

33:                                               ; preds = %31
  %34 = getelementptr inbounds i8, ptr %32, i64 32
  %35 = load i64, ptr %34, align 8, !tbaa !9
  br label %39

36:                                               ; preds = %31
  %37 = and i32 %27, -33
  br label %39

38:                                               ; preds = %29, %19
  store ptr null, ptr %0, align 8, !tbaa !5
  br label %39

39:                                               ; preds = %33, %36, %38
  %40 = phi ptr [ %32, %33 ], [ null, %36 ], [ null, %38 ]
  %.0298 = phi i64 [ %35, %33 ], [ 0, %36 ], [ 0, %38 ]
  %.0 = phi i32 [ %27, %33 ], [ %37, %36 ], [ %27, %38 ]
  %41 = and i32 %.0, 256
  %42 = icmp eq i32 %41, 0
  %43 = and i32 %.0, 288
  %or.cond403 = icmp eq i32 %43, 0
  br i1 %or.cond403, label %44, label %55

44:                                               ; preds = %39
  %45 = and i32 %.0, 4
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %49

47:                                               ; preds = %44
  %48 = tail call i64 @libxsmm_alignment(i64 noundef %1, i64 noundef %2)
  br label %49

49:                                               ; preds = %44, %47
  %50 = phi i64 [ %48, %47 ], [ %2, %44 ]
  %51 = add i64 %5, %1
  %52 = add i64 %51, 47
  %53 = add i64 %52, %50
  %54 = call ptr @internal_xmalloc(ptr noundef nonnull %0, ptr noundef nonnull %8, i64 noundef %53, ptr noundef %.1306, ptr %.sroa.0119.1, ptr %.sroa.0.1)
  br label %391

55:                                               ; preds = %39
  %56 = icmp eq ptr %40, null
  br i1 %56, label %60, label %57

57:                                               ; preds = %55
  %58 = getelementptr inbounds i8, ptr %40, i64 32
  %59 = load i64, ptr %58, align 8, !tbaa !9
  %.not363 = icmp eq i64 %59, %1
  br i1 %.not363, label %382, label %60

60:                                               ; preds = %57, %55
  %61 = icmp ugt i64 %1, 2097152
  %62 = select i1 %61, i32 0, i32 16384
  %63 = icmp ne i32 %41, 0
  %64 = load i32, ptr @libxsmm_xmalloc.map32, align 4
  %65 = icmp ne i32 %64, 0
  %66 = select i1 %63, i1 %65, i1 false
  %67 = select i1 %66, i32 64, i32 0
  %68 = or disjoint i32 %67, %62
  br i1 %42, label %69, label %.thread

69:                                               ; preds = %60
  %70 = icmp ult i64 %1, 33554432
  %71 = and i32 %.0, 8
  %.not364 = icmp eq i32 %71, 0
  %or.cond404 = and i1 %70, %.not364
  br i1 %or.cond404, label %.thread, label %72

72:                                               ; preds = %69
  %73 = load i64, ptr @internal_malloc_hugetlb, align 64, !tbaa !13
  %74 = add i64 %73, %1
  %75 = load i64, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !13
  %76 = icmp ult i64 %74, %75
  %cond.fr = freeze i1 %76
  %spec.select471 = select i1 %cond.fr, i32 262144, i32 0
  br label %.thread

.thread:                                          ; preds = %72, %69, %60
  %77 = phi i32 [ 0, %60 ], [ 0, %69 ], [ %spec.select471, %72 ]
  %78 = or disjoint i32 %68, %77
  %79 = load i32, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !14
  switch i32 %79, label %110 [
    i32 0, label %80
    i32 1, label %108
  ]

80:                                               ; preds = %.thread
  call void @llvm.lifetime.start.p0(i64 390, ptr nonnull %10) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #11
  store i32 3, ptr %11, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #11
  store i32 10, ptr %12, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #11
  store i32 0, ptr %13, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #11
  store i32 327, ptr %14, align 4, !tbaa !14
  %81 = call i32 @uname(ptr noundef nonnull %10) #11
  %82 = icmp sgt i32 %81, -1
  br i1 %82, label %83, label %107

83:                                               ; preds = %80
  %84 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) @.str.34, ptr noundef nonnull dereferenceable(1) %10) #12
  %85 = icmp eq i32 %84, 0
  br i1 %85, label %86, label %107

86:                                               ; preds = %83
  %87 = getelementptr inbounds i8, ptr %10, i64 130
  %88 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %87, ptr noundef nonnull @.str.35, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14) #11
  %89 = icmp eq i32 %88, 4
  br i1 %89, label %90, label %107

90:                                               ; preds = %86
  %91 = load i32, ptr %11, align 4, !tbaa !14
  %92 = shl i32 %91, 24
  %93 = and i32 %92, 2130706432
  %94 = load i32, ptr %12, align 4, !tbaa !14
  %95 = shl i32 %94, 19
  %96 = and i32 %95, 16252928
  %97 = or disjoint i32 %96, %93
  %98 = load i32, ptr %13, align 4, !tbaa !14
  %99 = shl i32 %98, 14
  %100 = and i32 %99, 507904
  %101 = or disjoint i32 %97, %100
  %102 = load i32, ptr %14, align 4, !tbaa !14
  %103 = and i32 %102, 16383
  %104 = or disjoint i32 %101, %103
  %105 = icmp ult i32 %104, 55574855
  %106 = or disjoint i32 %78, 32768
  %spec.select416 = select i1 %105, i32 1, i32 -1
  %spec.select417 = select i1 %105, i32 %106, i32 %78
  br label %107

107:                                              ; preds = %90, %80, %83, %86
  %storemerge = phi i32 [ -1, %86 ], [ -1, %83 ], [ -1, %80 ], [ %spec.select416, %90 ]
  %.0307 = phi i32 [ %78, %86 ], [ %78, %83 ], [ %78, %80 ], [ %spec.select417, %90 ]
  store i32 %storemerge, ptr @libxsmm_xmalloc.prefault, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 390, ptr nonnull %10) #11
  br label %110

108:                                              ; preds = %.thread
  %109 = or disjoint i32 %78, 32768
  br label %110

110:                                              ; preds = %.thread, %108, %107
  %.1308 = phi i32 [ %.0307, %107 ], [ %109, %108 ], [ %78, %.thread ]
  %111 = icmp eq i64 %2, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %110
  %113 = call i64 @libxsmm_alignment(i64 noundef %1, i64 noundef 0)
  br label %114

114:                                              ; preds = %110, %112
  %115 = phi i64 [ %113, %112 ], [ %2, %110 ]
  %116 = call i64 @libxsmm_lcm(i64 noundef %115, i64 noundef 4096) #11
  %reass.add = shl i64 %116, 1
  %117 = add i64 %5, %1
  %118 = add i64 %117, 46
  %119 = add i64 %118, %reass.add
  %120 = sub i64 0, %116
  %121 = and i64 %119, %120
  br i1 %42, label %122, label %200

122:                                              ; preds = %114
  %123 = and i32 %.1308, 64
  %124 = icmp eq i32 %123, 0
  br i1 %124, label %126, label %125

125:                                              ; preds = %122
  call void @__assert_fail(ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.1, i32 noundef 1894, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

126:                                              ; preds = %122
  %127 = load ptr, ptr %8, align 8, !tbaa !5
  %128 = icmp eq ptr %127, null
  br i1 %128, label %132, label %129

129:                                              ; preds = %126
  %130 = getelementptr inbounds i8, ptr %127, i64 8
  %131 = load ptr, ptr %130, align 8, !tbaa !15
  br label %132

132:                                              ; preds = %126, %129
  %133 = phi ptr [ %131, %129 ], [ null, %126 ]
  %134 = or i32 %.1308, 34
  %135 = call ptr @mmap(ptr noundef %133, i64 noundef %121, i32 noundef 3, i32 noundef %134, i32 noundef -1, i64 noundef 0) #11
  %136 = and i32 %.1308, 262144
  %.not386 = icmp eq i32 %136, 0
  br i1 %.not386, label %170, label %137

137:                                              ; preds = %132
  %magicptr = ptrtoint ptr %135 to i64
  switch i64 %magicptr, label %139 [
    i64 -1, label %142
    i64 0, label %138
  ]

138:                                              ; preds = %137
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.1, i32 noundef 1903, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

139:                                              ; preds = %137
  %140 = atomicrmw add ptr @internal_malloc_hugetlb, i64 %121 seq_cst, align 64
  %141 = or i32 %.0, 8
  br label %172

142:                                              ; preds = %137
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = icmp eq ptr %143, null
  br i1 %144, label %148, label %145

145:                                              ; preds = %142
  %146 = getelementptr inbounds i8, ptr %143, i64 8
  %147 = load ptr, ptr %146, align 8, !tbaa !15
  br label %148

148:                                              ; preds = %142, %145
  %149 = phi ptr [ %147, %145 ], [ null, %142 ]
  %150 = and i32 %.1308, -262243
  %151 = or disjoint i32 %150, 34
  %152 = call ptr @mmap(ptr noundef %149, i64 noundef %121, i32 noundef 3, i32 noundef %151, i32 noundef -1, i64 noundef 0) #11
  %magicptr405 = ptrtoint ptr %152 to i64
  switch i64 %magicptr405, label %154 [
    i64 -1, label %168
    i64 0, label %153
  ]

153:                                              ; preds = %148
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.1, i32 noundef 1903, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

154:                                              ; preds = %148
  %155 = load i64, ptr @internal_malloc_hugetlb, align 64, !tbaa !13
  %156 = lshr i64 %121, 1
  %157 = add i64 %155, %156
  %158 = load i64, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !13
  %159 = icmp ult i64 %157, %158
  br i1 %159, label %160, label %168

160:                                              ; preds = %154
  store i64 %157, ptr @libxsmm_xmalloc.limit_hugetlb, align 8, !tbaa !13
  %161 = load i64, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_, align 8, !tbaa !13
  %162 = icmp ult i64 %161, %157
  %163 = load i32, ptr @libxsmm_verbosity, align 4
  %or.cond7 = icmp ugt i32 %163, 2
  %or.cond406 = select i1 %162, i1 %or.cond7, i1 false
  br i1 %or.cond406, label %164, label %168

164:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #11
  %165 = call i64 @libxsmm_format_value(ptr noundef nonnull %15, i32 noundef 32, i64 noundef %157, ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.39, i32 noundef 10) #11
  %166 = load ptr, ptr @stderr, align 8, !tbaa !5
  %167 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef nonnull @.str.40, ptr noundef nonnull %15) #14
  store i64 %157, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_, align 8, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #11
  br label %168

168:                                              ; preds = %154, %164, %160, %148
  %169 = and i32 %.0, -265
  br label %172

170:                                              ; preds = %132
  %171 = and i32 %.0, -265
  br label %172

172:                                              ; preds = %139, %168, %170
  %.0299 = phi ptr [ %135, %139 ], [ %152, %168 ], [ %135, %170 ]
  %.1 = phi i32 [ %141, %139 ], [ %169, %168 ], [ %171, %170 ]
  %173 = and i32 %.1308, 8192
  %174 = icmp ne i32 %173, 0
  %175 = icmp ne ptr %.0299, inttoptr (i64 -1 to ptr)
  %or.cond9 = select i1 %174, i1 %175, i1 false
  br i1 %or.cond9, label %176, label %.thread447

176:                                              ; preds = %172
  %.not391 = icmp eq ptr %.0299, null
  br i1 %.not391, label %177, label %178

177:                                              ; preds = %176
  call void @__assert_fail(ptr noundef nonnull @.str.41, ptr noundef nonnull @.str.1, i32 noundef 1911, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

178:                                              ; preds = %176
  %179 = call i32 @mlock(ptr noundef nonnull %.0299, i64 noundef %121) #11
  %180 = icmp eq i32 %179, 0
  br i1 %180, label %181, label %184

181:                                              ; preds = %178
  %182 = atomicrmw add ptr @internal_malloc_plocked, i64 %121 seq_cst, align 64
  %183 = or i32 %.1, 16
  br label %.thread447

184:                                              ; preds = %178
  %185 = load i64, ptr @internal_malloc_plocked, align 64, !tbaa !13
  %186 = lshr i64 %121, 1
  %187 = add i64 %185, %186
  %188 = load i64, ptr @libxsmm_xmalloc.limit_plocked, align 8, !tbaa !13
  %189 = icmp ult i64 %187, %188
  br i1 %189, label %190, label %198

190:                                              ; preds = %184
  store i64 %187, ptr @libxsmm_xmalloc.limit_plocked, align 8, !tbaa !13
  %191 = load i64, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42, align 8, !tbaa !13
  %192 = icmp ult i64 %191, %187
  %193 = load i32, ptr @libxsmm_verbosity, align 4
  %or.cond11 = icmp ugt i32 %193, 2
  %or.cond407 = select i1 %192, i1 %or.cond11, i1 false
  br i1 %or.cond407, label %194, label %198

194:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #11
  %195 = call i64 @libxsmm_format_value(ptr noundef nonnull %16, i32 noundef 32, i64 noundef %187, ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.39, i32 noundef 10) #11
  %196 = load ptr, ptr @stderr, align 8, !tbaa !5
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.43, ptr noundef nonnull %16) #14
  store i64 %187, ptr @libxsmm_xmalloc.internal_xmalloc_watermark_verbose_.42, align 8, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #11
  br label %198

198:                                              ; preds = %190, %194, %184
  %199 = and i32 %.1, -17
  br label %.thread447

200:                                              ; preds = %114
  %201 = and i32 %.1308, 262144
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %204, label %203

203:                                              ; preds = %200
  call void @__assert_fail(ptr noundef nonnull @.str.44, ptr noundef nonnull @.str.1, i32 noundef 1934, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

204:                                              ; preds = %200
  %205 = and i32 %.1308, 8192
  %206 = icmp eq i32 %205, 0
  br i1 %206, label %208, label %207

207:                                              ; preds = %204
  call void @__assert_fail(ptr noundef nonnull @.str.45, ptr noundef nonnull @.str.1, i32 noundef 1937, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

208:                                              ; preds = %204
  %209 = atomicrmw or ptr @libxsmm_xmalloc.entrypoint, i32 0 seq_cst, align 4
  %210 = icmp slt i32 %209, 0
  br i1 %210, label %211, label %thread-pre-split

211:                                              ; preds = %208
  %212 = call ptr @getenv(ptr noundef nonnull @.str.46) #11
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !16
  %213 = icmp eq ptr %212, null
  br i1 %213, label %214, label %217

214:                                              ; preds = %211
  %215 = load i32, ptr @libxsmm_se, align 4, !tbaa !14
  %216 = icmp eq i32 %215, 0
  br label %219

217:                                              ; preds = %211
  %218 = load i8, ptr %212, align 1, !tbaa !17
  %.not365 = icmp eq i8 %218, 48
  br label %219

219:                                              ; preds = %217, %214
  %.not365.sink = phi i1 [ %.not365, %217 ], [ %216, %214 ]
  %220 = select i1 %.not365.sink, i32 3, i32 0
  store i32 %220, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() #11, !srcloc !18
  %221 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  %222 = icmp sgt i32 %221, -1
  br i1 %222, label %224, label %223

223:                                              ; preds = %219
  call void @__assert_fail(ptr noundef nonnull @.str.47, ptr noundef nonnull @.str.1, i32 noundef 1947, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

thread-pre-split:                                 ; preds = %208
  %.pr = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %224

224:                                              ; preds = %thread-pre-split, %219
  %225 = phi i32 [ %.pr, %thread-pre-split ], [ %221, %219 ]
  %226 = icmp slt i32 %225, 1
  br i1 %226, label %227, label %.thread420

227:                                              ; preds = %224
  %228 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %229 = icmp eq ptr %228, null
  br i1 %229, label %230, label %233

230:                                              ; preds = %227
  %231 = call ptr @getenv(ptr noundef nonnull @.str.48) #11
  %232 = icmp eq ptr %231, null
  %spec.store.select = select i1 %232, ptr @.str.49, ptr %231
  store ptr %spec.store.select, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8
  br label %233

233:                                              ; preds = %230, %227
  %234 = phi ptr [ %spec.store.select, %230 ], [ %228, %227 ]
  %235 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %234, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %236 = icmp eq ptr %235, inttoptr (i64 -1 to ptr)
  br i1 %236, label %237, label %.thread425

237:                                              ; preds = %233
  %238 = and i32 %.1308, 64
  %.not366 = icmp eq i32 %238, 0
  br i1 %.not366, label %.thread420, label %239

239:                                              ; preds = %237
  %240 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_, align 8, !tbaa !5
  %241 = and i32 %.1308, -270401
  %242 = call ptr @internal_xmalloc_xmap(ptr noundef %240, i64 noundef %121, i32 noundef %241, ptr noundef nonnull %9)
  %.not367 = icmp eq ptr %242, inttoptr (i64 -1 to ptr)
  br i1 %.not367, label %.thread420, label %243

243:                                              ; preds = %239
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread425

.thread425:                                       ; preds = %243, %233
  %.1300 = phi ptr [ %242, %243 ], [ %235, %233 ]
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %245

.thread420:                                       ; preds = %237, %239, %224
  %.2301.ph = phi ptr [ null, %224 ], [ inttoptr (i64 -1 to ptr), %239 ], [ inttoptr (i64 -1 to ptr), %237 ]
  %.pr424 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  %244 = icmp slt i32 %.pr424, 2
  br i1 %244, label %245, label %263

245:                                              ; preds = %.thread425, %.thread420
  %.2301427 = phi ptr [ %.1300, %.thread425 ], [ %.2301.ph, %.thread420 ]
  %magicptr408 = ptrtoint ptr %.2301427 to i64
  switch i64 %magicptr408, label %thread-pre-split432 [
    i64 -1, label %246
    i64 0, label %246
  ]

246:                                              ; preds = %245, %245
  %247 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %248 = icmp eq ptr %247, null
  br i1 %248, label %249, label %252

249:                                              ; preds = %246
  %250 = call ptr @getenv(ptr noundef nonnull @.str.51) #11
  %251 = icmp eq ptr %250, null
  %spec.store.select16 = select i1 %251, ptr @.str.52, ptr %250
  store ptr %spec.store.select16, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8
  br label %252

252:                                              ; preds = %249, %246
  %253 = phi ptr [ %spec.store.select16, %249 ], [ %247, %246 ]
  %254 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %253, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %255 = icmp eq ptr %254, inttoptr (i64 -1 to ptr)
  br i1 %255, label %256, label %.thread434

256:                                              ; preds = %252
  %257 = and i32 %.1308, 64
  %.not369 = icmp eq i32 %257, 0
  br i1 %.not369, label %thread-pre-split432, label %258

258:                                              ; preds = %256
  %259 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.50, align 8, !tbaa !5
  %260 = and i32 %.1308, -270401
  %261 = call ptr @internal_xmalloc_xmap(ptr noundef %259, i64 noundef %121, i32 noundef %260, ptr noundef nonnull %9)
  %.not370 = icmp eq ptr %261, inttoptr (i64 -1 to ptr)
  br i1 %.not370, label %thread-pre-split432, label %262

262:                                              ; preds = %258
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread434

.thread434:                                       ; preds = %262, %252
  %.3302 = phi ptr [ %261, %262 ], [ %254, %252 ]
  store i32 1, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %266

thread-pre-split432:                              ; preds = %256, %258, %245
  %.4303.ph = phi ptr [ %.2301427, %245 ], [ inttoptr (i64 -1 to ptr), %258 ], [ inttoptr (i64 -1 to ptr), %256 ]
  %.pr433 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %263

263:                                              ; preds = %thread-pre-split432, %.thread420
  %264 = phi i32 [ %.pr433, %thread-pre-split432 ], [ %.pr424, %.thread420 ]
  %.4303 = phi ptr [ %.4303.ph, %thread-pre-split432 ], [ %.2301.ph, %.thread420 ]
  %265 = icmp slt i32 %264, 3
  br i1 %265, label %266, label %.thread438

266:                                              ; preds = %.thread434, %263
  %.4303436 = phi ptr [ %.3302, %.thread434 ], [ %.4303, %263 ]
  %magicptr409 = ptrtoint ptr %.4303436 to i64
  switch i64 %magicptr409, label %.thread438 [
    i64 -1, label %267
    i64 0, label %267
  ]

267:                                              ; preds = %266, %266
  %268 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %269 = icmp eq ptr %268, null
  br i1 %269, label %270, label %273

270:                                              ; preds = %267
  %271 = call ptr @getenv(ptr noundef nonnull @.str.54) #11
  %272 = icmp eq ptr %271, null
  %spec.store.select19 = select i1 %272, ptr @.str.49, ptr %271
  store ptr %spec.store.select19, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8
  br label %273

273:                                              ; preds = %270, %267
  %274 = phi ptr [ %spec.store.select19, %270 ], [ %268, %267 ]
  %275 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %274, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %276 = icmp eq ptr %275, inttoptr (i64 -1 to ptr)
  br i1 %276, label %277, label %.thread443

277:                                              ; preds = %273
  %278 = and i32 %.1308, 64
  %.not372 = icmp eq i32 %278, 0
  br i1 %.not372, label %.thread438, label %279

279:                                              ; preds = %277
  %280 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.53, align 8, !tbaa !5
  %281 = and i32 %.1308, -270401
  %282 = call ptr @internal_xmalloc_xmap(ptr noundef %280, i64 noundef %121, i32 noundef %281, ptr noundef nonnull %9)
  %.not373 = icmp eq ptr %282, inttoptr (i64 -1 to ptr)
  br i1 %.not373, label %.thread438, label %283

283:                                              ; preds = %279
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread443

.thread443:                                       ; preds = %283, %273
  %.5304 = phi ptr [ %282, %283 ], [ %275, %273 ]
  store i32 2, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %285

.thread438:                                       ; preds = %277, %279, %266, %263
  %.6.ph = phi ptr [ %.4303, %263 ], [ %.4303436, %266 ], [ inttoptr (i64 -1 to ptr), %279 ], [ inttoptr (i64 -1 to ptr), %277 ]
  %.pr442 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  %284 = icmp slt i32 %.pr442, 4
  br i1 %284, label %285, label %305

285:                                              ; preds = %.thread443, %.thread438
  %.6445 = phi ptr [ %.5304, %.thread443 ], [ %.6.ph, %.thread438 ]
  %magicptr410 = ptrtoint ptr %.6445 to i64
  switch i64 %magicptr410, label %305 [
    i64 -1, label %286
    i64 0, label %286
  ]

286:                                              ; preds = %285, %285
  %287 = load ptr, ptr %9, align 8, !tbaa !5
  %288 = load i32, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  %289 = icmp eq i32 %288, 0
  %290 = and i32 %.1308, -270401
  %291 = select i1 %289, i32 %290, i32 %.1308
  %292 = or i32 %291, 34
  %293 = call ptr @mmap(ptr noundef %287, i64 noundef %121, i32 noundef 7, i32 noundef %292, i32 noundef -1, i64 noundef 0) #11
  %.not375 = icmp eq ptr %293, inttoptr (i64 -1 to ptr)
  br i1 %.not375, label %295, label %294

294:                                              ; preds = %286
  store i32 3, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %.thread447

295:                                              ; preds = %286
  %296 = and i32 %.1308, 64
  %297 = icmp ne i32 %296, 0
  %298 = load i32, ptr @libxsmm_xmalloc.map32, align 4
  %299 = icmp ne i32 %298, 0
  %or.cond23 = select i1 %297, i1 %299, i1 false
  br i1 %or.cond23, label %300, label %305

300:                                              ; preds = %295
  %301 = load ptr, ptr %9, align 8, !tbaa !5
  %302 = or i32 %290, 34
  %303 = call ptr @mmap(ptr noundef %301, i64 noundef %121, i32 noundef 7, i32 noundef %302, i32 noundef -1, i64 noundef 0) #11
  %.not376 = icmp eq ptr %303, inttoptr (i64 -1 to ptr)
  br i1 %.not376, label %305, label %304

304:                                              ; preds = %300
  store i32 3, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread447

305:                                              ; preds = %285, %300, %295, %.thread438
  %.7 = phi ptr [ inttoptr (i64 -1 to ptr), %300 ], [ inttoptr (i64 -1 to ptr), %295 ], [ %.6445, %285 ], [ %.6.ph, %.thread438 ]
  %306 = icmp eq ptr %.7, inttoptr (i64 -1 to ptr)
  %307 = load i32, ptr @libxsmm_se, align 4
  %308 = icmp eq i32 %307, 0
  %or.cond25 = select i1 %306, i1 %308, i1 false
  br i1 %or.cond25, label %309, label %.thread447

309:                                              ; preds = %305
  store i32 1, ptr @libxsmm_se, align 4, !tbaa !14
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  %310 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %311 = icmp eq ptr %310, null
  br i1 %311, label %312, label %315

312:                                              ; preds = %309
  %313 = call ptr @getenv(ptr noundef nonnull @.str.48) #11
  %314 = icmp eq ptr %313, null
  %spec.store.select28 = select i1 %314, ptr @.str.49, ptr %313
  store ptr %spec.store.select28, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8
  br label %315

315:                                              ; preds = %312, %309
  %316 = phi ptr [ %spec.store.select28, %312 ], [ %310, %309 ]
  %317 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %316, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %318 = icmp eq ptr %317, inttoptr (i64 -1 to ptr)
  br i1 %318, label %319, label %.thread455

319:                                              ; preds = %315
  %320 = and i32 %.1308, 64
  %.not377 = icmp eq i32 %320, 0
  br i1 %.not377, label %326, label %321

321:                                              ; preds = %319
  %322 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.55, align 8, !tbaa !5
  %323 = and i32 %.1308, -270401
  %324 = call ptr @internal_xmalloc_xmap(ptr noundef %322, i64 noundef %121, i32 noundef %323, ptr noundef nonnull %9)
  %.not378 = icmp eq ptr %324, inttoptr (i64 -1 to ptr)
  br i1 %.not378, label %326, label %325

325:                                              ; preds = %321
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread455

.thread455:                                       ; preds = %325, %315
  %.8 = phi ptr [ %324, %325 ], [ %317, %315 ]
  store i32 0, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %328

326:                                              ; preds = %321, %319
  %.pr454 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  %327 = icmp slt i32 %.pr454, 2
  br i1 %327, label %328, label %346

328:                                              ; preds = %.thread455, %326
  %.9457 = phi ptr [ %.8, %.thread455 ], [ inttoptr (i64 -1 to ptr), %326 ]
  %magicptr411 = ptrtoint ptr %.9457 to i64
  switch i64 %magicptr411, label %thread-pre-split462 [
    i64 -1, label %329
    i64 0, label %329
  ]

329:                                              ; preds = %328, %328
  %330 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %331 = icmp eq ptr %330, null
  br i1 %331, label %332, label %335

332:                                              ; preds = %329
  %333 = call ptr @getenv(ptr noundef nonnull @.str.51) #11
  %334 = icmp eq ptr %333, null
  %spec.store.select31 = select i1 %334, ptr @.str.52, ptr %333
  store ptr %spec.store.select31, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8
  br label %335

335:                                              ; preds = %332, %329
  %336 = phi ptr [ %spec.store.select31, %332 ], [ %330, %329 ]
  %337 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %336, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %338 = icmp eq ptr %337, inttoptr (i64 -1 to ptr)
  br i1 %338, label %339, label %.thread464

339:                                              ; preds = %335
  %340 = and i32 %.1308, 64
  %.not380 = icmp eq i32 %340, 0
  br i1 %.not380, label %thread-pre-split462, label %341

341:                                              ; preds = %339
  %342 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.56, align 8, !tbaa !5
  %343 = and i32 %.1308, -270401
  %344 = call ptr @internal_xmalloc_xmap(ptr noundef %342, i64 noundef %121, i32 noundef %343, ptr noundef nonnull %9)
  %.not381 = icmp eq ptr %344, inttoptr (i64 -1 to ptr)
  br i1 %.not381, label %thread-pre-split462, label %345

345:                                              ; preds = %341
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %.thread464

.thread464:                                       ; preds = %345, %335
  %.10 = phi ptr [ %344, %345 ], [ %337, %335 ]
  store i32 1, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %349

thread-pre-split462:                              ; preds = %339, %341, %328
  %.11.ph = phi ptr [ %.9457, %328 ], [ inttoptr (i64 -1 to ptr), %341 ], [ inttoptr (i64 -1 to ptr), %339 ]
  %.pr463 = load i32, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %346

346:                                              ; preds = %thread-pre-split462, %326
  %347 = phi i32 [ %.pr463, %thread-pre-split462 ], [ %.pr454, %326 ]
  %.11 = phi ptr [ %.11.ph, %thread-pre-split462 ], [ inttoptr (i64 -1 to ptr), %326 ]
  %348 = icmp slt i32 %347, 3
  br i1 %348, label %349, label %.thread447

349:                                              ; preds = %.thread464, %346
  %.11466 = phi ptr [ %.10, %.thread464 ], [ %.11, %346 ]
  %magicptr412 = ptrtoint ptr %.11466 to i64
  switch i64 %magicptr412, label %.thread447 [
    i64 -1, label %350
    i64 0, label %350
  ]

350:                                              ; preds = %349, %349
  %351 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %352 = icmp eq ptr %351, null
  br i1 %352, label %353, label %356

353:                                              ; preds = %350
  %354 = call ptr @getenv(ptr noundef nonnull @.str.54) #11
  %355 = icmp eq ptr %354, null
  %spec.store.select34 = select i1 %355, ptr @.str.49, ptr %354
  store ptr %spec.store.select34, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8
  br label %356

356:                                              ; preds = %353, %350
  %357 = phi ptr [ %spec.store.select34, %353 ], [ %351, %350 ]
  %358 = call ptr @internal_xmalloc_xmap(ptr noundef nonnull %357, i64 noundef %121, i32 noundef %.1308, ptr noundef nonnull %9)
  %359 = icmp eq ptr %358, inttoptr (i64 -1 to ptr)
  br i1 %359, label %360, label %367

360:                                              ; preds = %356
  %361 = and i32 %.1308, 64
  %.not383 = icmp eq i32 %361, 0
  br i1 %.not383, label %.thread447, label %362

362:                                              ; preds = %360
  %363 = load ptr, ptr @libxsmm_xmalloc.internal_xmalloc_env_.57, align 8, !tbaa !5
  %364 = and i32 %.1308, -270401
  %365 = call ptr @internal_xmalloc_xmap(ptr noundef %363, i64 noundef %121, i32 noundef %364, ptr noundef nonnull %9)
  %.not384 = icmp eq ptr %365, inttoptr (i64 -1 to ptr)
  br i1 %.not384, label %.thread447, label %366

366:                                              ; preds = %362
  store i32 0, ptr @libxsmm_xmalloc.map32, align 4, !tbaa !14
  br label %367

367:                                              ; preds = %356, %366
  %.12 = phi ptr [ %365, %366 ], [ %358, %356 ]
  store i32 2, ptr @libxsmm_xmalloc.entrypoint, align 4, !tbaa !14
  br label %.thread447

.thread447:                                       ; preds = %360, %362, %304, %294, %349, %305, %367, %346, %172, %198, %181
  %.13 = phi ptr [ %.0299, %181 ], [ %.0299, %198 ], [ %.0299, %172 ], [ %.12, %367 ], [ %.11466, %349 ], [ %.11, %346 ], [ %.7, %305 ], [ %303, %304 ], [ %293, %294 ], [ inttoptr (i64 -1 to ptr), %362 ], [ inttoptr (i64 -1 to ptr), %360 ]
  %.2 = phi i32 [ %183, %181 ], [ %199, %198 ], [ %.1, %172 ], [ %.0, %367 ], [ %.0, %349 ], [ %.0, %346 ], [ %.0, %305 ], [ %.0, %304 ], [ %.0, %294 ], [ %.0, %362 ], [ %.0, %360 ]
  %magicptr413 = ptrtoint ptr %.13 to i64
  switch i64 %magicptr413, label %368 [
    i64 -1, label %370
    i64 0, label %370
  ]

368:                                              ; preds = %.thread447
  %369 = or i32 %.2, 32
  br label %380

370:                                              ; preds = %.thread447, %.thread447
  %371 = and i32 %.2, 32
  %372 = icmp eq i32 %371, 0
  br i1 %372, label %373, label %379

373:                                              ; preds = %370
  %374 = icmp eq ptr %.1306, null
  br i1 %374, label %375, label %377

375:                                              ; preds = %373
  %376 = call ptr %.sroa.0119.1(i64 noundef %121) #11
  br label %379

377:                                              ; preds = %373
  %378 = call ptr %.sroa.0119.1(i64 noundef %121, ptr noundef nonnull %.1306) #11
  br label %379

379:                                              ; preds = %377, %375, %370
  %.14 = phi ptr [ %.13, %370 ], [ %376, %375 ], [ %378, %377 ]
  store ptr null, ptr %9, align 8, !tbaa !5
  %.pre = ptrtoint ptr %.14 to i64
  br label %380

380:                                              ; preds = %379, %368
  %magicptr414.pre-phi = phi i64 [ %.pre, %379 ], [ %magicptr413, %368 ]
  %.15 = phi ptr [ %.14, %379 ], [ %.13, %368 ]
  %.3 = phi i32 [ %.2, %379 ], [ %369, %368 ]
  switch i64 %magicptr414.pre-phi, label %381 [
    i64 -1, label %391
    i64 0, label %391
  ]

381:                                              ; preds = %380
  call void @internal_xmalloc_mhint(ptr noundef nonnull %.15, i64 noundef %121)
  br label %391

382:                                              ; preds = %57
  %383 = add i64 %5, %1
  %384 = add i64 %383, 47
  %385 = add i64 %384, %2
  %386 = getelementptr inbounds i8, ptr %40, i64 40
  %387 = load i32, ptr %386, align 8, !tbaa !19
  %388 = or i32 %387, %.0
  %389 = getelementptr inbounds i8, ptr %40, i64 8
  %390 = load ptr, ptr %389, align 8, !tbaa !15
  store ptr null, ptr %0, align 8, !tbaa !5
  br label %391

391:                                              ; preds = %381, %380, %380, %382, %49
  %.17 = phi ptr [ %54, %49 ], [ %390, %382 ], [ %.15, %380 ], [ %.15, %380 ], [ %.15, %381 ]
  %.0297 = phi i64 [ %53, %49 ], [ %385, %382 ], [ %121, %380 ], [ %121, %380 ], [ %121, %381 ]
  %.0295 = phi i64 [ %50, %49 ], [ %2, %382 ], [ %116, %380 ], [ %116, %380 ], [ %116, %381 ]
  %.5 = phi i32 [ %.0, %49 ], [ %388, %382 ], [ %.3, %380 ], [ %.3, %380 ], [ %.3, %381 ]
  %magicptr415 = ptrtoint ptr %.17 to i64
  switch i64 %magicptr415, label %392 [
    i64 -1, label %500
    i64 0, label %500
  ]

392:                                              ; preds = %391
  %393 = getelementptr inbounds i8, ptr %.17, i64 %5
  %394 = getelementptr inbounds i8, ptr %393, i64 48
  %395 = ptrtoint ptr %394 to i64
  %396 = add i64 %.0295, -1
  %397 = add i64 %396, %395
  %398 = sub i64 0, %.0295
  %399 = and i64 %397, %398
  %400 = sub i64 %399, %395
  %401 = getelementptr inbounds i8, ptr %394, i64 %400
  %402 = getelementptr inbounds i8, ptr %401, i64 -48
  %403 = getelementptr inbounds i8, ptr %401, i64 %1
  %404 = getelementptr inbounds i8, ptr %.17, i64 %.0297
  %.not395 = icmp ugt ptr %403, %404
  br i1 %.not395, label %405, label %406

405:                                              ; preds = %392
  call void @__assert_fail(ptr noundef nonnull @.str.58, ptr noundef nonnull @.str.1, i32 noundef 2026, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

406:                                              ; preds = %392
  %.not396 = icmp eq i64 %.0295, 0
  br i1 %.not396, label %407, label %408

407:                                              ; preds = %406
  call void @__assert_fail(ptr noundef nonnull @.str.59, ptr noundef nonnull @.str.1, i32 noundef 2027, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_xmalloc) #13
  unreachable

408:                                              ; preds = %406
  %409 = load ptr, ptr %0, align 8, !tbaa !5
  %.not397 = icmp eq ptr %409, null
  br i1 %.not397, label %425, label %410

410:                                              ; preds = %408
  %411 = call i64 @llvm.umin.i64(i64 %.0298, i64 %1)
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %401, ptr nonnull align 1 %409, i64 %411, i1 false)
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %.not398 = icmp eq ptr %412, null
  br i1 %.not398, label %425, label %413

413:                                              ; preds = %410
  %414 = load ptr, ptr %0, align 8, !tbaa !5
  %415 = call i32 @internal_xfree(ptr noundef %414, ptr noundef nonnull %412)
  %416 = icmp ne i32 %415, 0
  %417 = load i32, ptr @libxsmm_verbosity, align 4
  %418 = icmp ne i32 %417, 0
  %or.cond42 = select i1 %416, i1 %418, i1 false
  br i1 %or.cond42, label %419, label %425

419:                                              ; preds = %413
  %420 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %421 = icmp eq i32 %420, 0
  br i1 %421, label %422, label %425

422:                                              ; preds = %419
  %423 = load ptr, ptr @stderr, align 8, !tbaa !5
  %424 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %423, ptr noundef nonnull @.str.60) #14
  br label %425

425:                                              ; preds = %410, %413, %419, %422, %408
  %426 = icmp ne ptr %4, null
  %427 = icmp eq i64 %5, 0
  %or.cond44 = or i1 %426, %427
  br i1 %or.cond44, label %.preheader, label %457

.preheader:                                       ; preds = %425
  %428 = trunc i64 %5 to i32
  %429 = icmp sgt i32 %428, 0
  br i1 %429, label %iter.check, label %.loopexit

iter.check:                                       ; preds = %.preheader
  %wide.trip.count = and i64 %5, 2147483647
  %min.iters.check = icmp ult i64 %wide.trip.count, 8
  %430 = sub i64 %magicptr415, %7
  %diff.check = icmp ult i64 %430, 32
  %or.cond485 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond485, label %.lr.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check477 = icmp ult i64 %wide.trip.count, 32
  br i1 %min.iters.check477, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.mod.vf = and i64 %5, 31
  %n.vec = sub nsw i64 %wide.trip.count, %n.mod.vf
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %431 = getelementptr inbounds i8, ptr %4, i64 %index
  %432 = getelementptr inbounds i8, ptr %431, i64 16
  %wide.load = load <16 x i8>, ptr %431, align 1, !tbaa !17
  %wide.load478 = load <16 x i8>, ptr %432, align 1, !tbaa !17
  %433 = getelementptr inbounds i8, ptr %.17, i64 %index
  %434 = getelementptr inbounds i8, ptr %433, i64 16
  store <16 x i8> %wide.load, ptr %433, align 1, !tbaa !17
  store <16 x i8> %wide.load478, ptr %434, align 1, !tbaa !17
  %index.next = add nuw i64 %index, 32
  %435 = icmp eq i64 %index.next, %n.vec
  br i1 %435, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br i1 %cmp.n, label %.loopexit, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %min.epilog.iters.check = icmp ult i64 %n.mod.vf, 8
  br i1 %min.epilog.iters.check, label %.lr.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.mod.vf479 = and i64 %5, 7
  %n.vec480 = sub nsw i64 %wide.trip.count, %n.mod.vf479
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index481 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next483, %vec.epilog.vector.body ]
  %436 = getelementptr inbounds i8, ptr %4, i64 %index481
  %wide.load482 = load <8 x i8>, ptr %436, align 1, !tbaa !17
  %437 = getelementptr inbounds i8, ptr %.17, i64 %index481
  store <8 x i8> %wide.load482, ptr %437, align 1, !tbaa !17
  %index.next483 = add nuw i64 %index481, 8
  %438 = icmp eq i64 %index.next483, %n.vec480
  br i1 %438, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !24

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n484 = icmp eq i64 %n.mod.vf479, 0
  br i1 %cmp.n484, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %indvars.iv.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec480, %vec.epilog.middle.block ]
  %439 = sub i64 %5, %indvars.iv.ph
  %xtraiter = and i64 %439, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader, %.lr.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %indvars.iv.ph, %.lr.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader ]
  %440 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv.prol
  %441 = load i8, ptr %440, align 1, !tbaa !17
  %442 = getelementptr inbounds i8, ptr %.17, i64 %indvars.iv.prol
  store i8 %441, ptr %442, align 1, !tbaa !17
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !25

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %443 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %444 = icmp ugt i64 %443, -4
  br i1 %444, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %445 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv
  %446 = load i8, ptr %445, align 1, !tbaa !17
  %447 = getelementptr inbounds i8, ptr %.17, i64 %indvars.iv
  store i8 %446, ptr %447, align 1, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %448 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv.next
  %449 = load i8, ptr %448, align 1, !tbaa !17
  %450 = getelementptr inbounds i8, ptr %.17, i64 %indvars.iv.next
  store i8 %449, ptr %450, align 1, !tbaa !17
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %451 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv.next.1
  %452 = load i8, ptr %451, align 1, !tbaa !17
  %453 = getelementptr inbounds i8, ptr %.17, i64 %indvars.iv.next.1
  store i8 %452, ptr %453, align 1, !tbaa !17
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %454 = getelementptr inbounds i8, ptr %4, i64 %indvars.iv.next.2
  %455 = load i8, ptr %454, align 1, !tbaa !17
  %456 = getelementptr inbounds i8, ptr %.17, i64 %indvars.iv.next.2
  store i8 %455, ptr %456, align 1, !tbaa !17
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.loopexit, label %.lr.ph, !llvm.loop !27

457:                                              ; preds = %425
  %458 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  %.not399 = icmp eq i32 %458, 0
  br i1 %.not399, label %.loopexit, label %459

459:                                              ; preds = %457
  %460 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %461 = icmp eq i32 %460, 0
  br i1 %461, label %462, label %.loopexit

462:                                              ; preds = %459
  %463 = load ptr, ptr @stderr, align 8, !tbaa !5
  %464 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %463, ptr noundef nonnull @.str.61) #14
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block, %vec.epilog.middle.block, %.preheader, %457, %459, %462
  %465 = and i32 %.5, 256
  %466 = icmp eq i32 %465, 0
  br i1 %466, label %467, label %491

467:                                              ; preds = %.loopexit
  %468 = and i32 %.5, 2
  %469 = icmp eq i32 %468, 0
  %470 = and i32 %.5, 1
  %.not401 = icmp eq i32 %470, 0
  br i1 %469, label %471, label %484

471:                                              ; preds = %467
  br i1 %.not401, label %478, label %472

472:                                              ; preds = %471
  %473 = atomicrmw add ptr @internal_malloc_public_cur, i64 %.0297 seq_cst, align 64
  %474 = add i64 %473, %.0297
  %475 = load i64, ptr @internal_malloc_public_max, align 64, !tbaa !13
  %476 = icmp ult i64 %475, %474
  br i1 %476, label %477, label %491

477:                                              ; preds = %472
  store i64 %474, ptr @internal_malloc_public_max, align 64, !tbaa !13
  br label %491

478:                                              ; preds = %471
  %479 = atomicrmw add ptr @internal_malloc_local_cur, i64 %.0297 seq_cst, align 64
  %480 = add i64 %479, %.0297
  %481 = load i64, ptr @internal_malloc_local_max, align 64, !tbaa !13
  %482 = icmp ult i64 %481, %480
  br i1 %482, label %483, label %491

483:                                              ; preds = %478
  store i64 %480, ptr @internal_malloc_local_max, align 64, !tbaa !13
  br label %491

484:                                              ; preds = %467
  br i1 %.not401, label %491, label %485

485:                                              ; preds = %484
  %486 = atomicrmw add ptr @internal_malloc_private_cur, i64 %.0297 seq_cst, align 64
  %487 = add i64 %486, %.0297
  %488 = load i64, ptr @internal_malloc_private_max, align 64, !tbaa !13
  %489 = icmp ult i64 %488, %487
  br i1 %489, label %490, label %491

490:                                              ; preds = %485
  store i64 %487, ptr @internal_malloc_private_max, align 64, !tbaa !13
  br label %491

491:                                              ; preds = %485, %490, %478, %483, %472, %477, %484, %.loopexit
  %492 = and i32 %.5, 32
  %493 = icmp eq i32 %492, 0
  %spec.select475 = select i1 %493, ptr %.1306, ptr null
  %spec.select476 = select i1 %493, ptr %.sroa.0.1, ptr null
  %494 = getelementptr inbounds i8, ptr %401, i64 -24
  store ptr %spec.select475, ptr %494, align 8
  store ptr %spec.select476, ptr %402, align 8
  %495 = getelementptr inbounds i8, ptr %401, i64 -16
  store i64 %1, ptr %495, align 8, !tbaa !9
  %496 = getelementptr inbounds i8, ptr %401, i64 -40
  store ptr %.17, ptr %496, align 8, !tbaa !15
  %497 = load ptr, ptr %9, align 8, !tbaa !5
  %498 = getelementptr inbounds i8, ptr %401, i64 -32
  store ptr %497, ptr %498, align 8, !tbaa !28
  %499 = getelementptr inbounds i8, ptr %401, i64 -8
  store i32 %.5, ptr %499, align 8, !tbaa !19
  br label %509

500:                                              ; preds = %391, %391
  %501 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  %.not393 = icmp eq i32 %501, 0
  br i1 %.not393, label %509, label %502

502:                                              ; preds = %500
  %503 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %504 = icmp eq i32 %503, 0
  br i1 %504, label %505, label %509

505:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #11
  %506 = call i64 @libxsmm_format_value(ptr noundef nonnull %17, i32 noundef 32, i64 noundef %.0297, ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.39, i32 noundef 10) #11
  %507 = load ptr, ptr @stderr, align 8, !tbaa !5
  %508 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %507, ptr noundef nonnull @.str.62, ptr noundef nonnull %17, i32 noundef %.5) #14
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #11
  br label %509

509:                                              ; preds = %500, %502, %505, %491
  %storemerge394 = phi ptr [ %401, %491 ], [ null, %505 ], [ null, %502 ], [ null, %500 ]
  %.0293 = phi i32 [ 0, %491 ], [ 1, %505 ], [ 1, %502 ], [ 1, %500 ]
  store ptr %storemerge394, ptr %0, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  br label %520

510:                                              ; preds = %18
  %511 = load i32, ptr @libxsmm_verbosity, align 4
  %or.cond46 = icmp ugt i32 %511, 2
  br i1 %or.cond46, label %512, label %518

512:                                              ; preds = %510
  %513 = atomicrmw add ptr @libxsmm_xmalloc.error_once, i32 1 seq_cst, align 4
  %514 = icmp eq i32 %513, 0
  br i1 %514, label %515, label %518

515:                                              ; preds = %512
  %516 = load ptr, ptr @stderr, align 8, !tbaa !5
  %517 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %516, ptr noundef nonnull @.str.63) #14
  br label %518

518:                                              ; preds = %510, %515, %512
  store ptr null, ptr %0, align 8, !tbaa !5
  br label %520

519:                                              ; preds = %6
  %.not357 = icmp ne i64 %1, 0
  %spec.select = zext i1 %.not357 to i32
  br label %520

520:                                              ; preds = %519, %509, %518
  %.1294 = phi i32 [ %.0293, %509 ], [ 0, %518 ], [ %spec.select, %519 ]
  ret i32 %.1294
}

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local ptr @internal_xmalloc(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr, ptr) local_unnamed_addr #0

declare void @__real_free(ptr noundef) #2

declare ptr @__real_malloc(i64 noundef) #2

; Function Attrs: nofree nounwind
declare noundef i32 @uname(ptr nocapture noundef) local_unnamed_addr #5

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

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

; Function Attrs: nounwind
declare ptr @mmap(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #8

declare i64 @libxsmm_format_value(ptr noundef, i32 noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @mlock(ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @internal_xmalloc_xmap(ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @internal_xmalloc_mhint(ptr noundef, i64 noundef) local_unnamed_addr #4

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = { noreturn 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 #4 = { inlinehint 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 #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 nounwind 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 #7 = { 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 #8 = { 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 #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nounwind }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { noreturn nounwind }
attributes #14 = { cold nounwind }

!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, !11, i64 32}
!10 = !{!"internal_malloc_info_type", !7, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !11, i64 32, !12, i64 40}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!12, !12, i64 0}
!15 = !{!10, !6, i64 8}
!16 = !{i64 2152955283}
!17 = !{!7, !7, i64 0}
!18 = !{i64 2152955360}
!19 = !{!10, !12, i64 40}
!20 = distinct !{!20, !21, !22, !23}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !21, !22, !23}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !21, !22}
!28 = !{!10, !6, i64 16}


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