; LLVM IR from libxsmm/libxsmm :: samples/transpose (transpose)

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

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@stderr = external global ptr, align 8
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [86 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca i64, align 8
  %46 = alloca double, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #8
  %47 = load i32, ptr %4, align 4, !tbaa !5
  %48 = icmp slt i32 1, %47
  br i1 %48, label %49, label %55

49:                                               ; preds = %2
  %50 = load ptr, ptr %5, align 8, !tbaa !9
  %51 = getelementptr inbounds ptr, ptr %50, i64 1
  %52 = load ptr, ptr %51, align 8, !tbaa !9
  %53 = load i8, ptr %52, align 1, !tbaa !11
  %54 = sext i8 %53 to i32
  br label %56

55:                                               ; preds = %2
  br label %56

56:                                               ; preds = %55, %49
  %57 = phi i32 [ %54, %49 ], [ 111, %55 ]
  %58 = trunc i32 %57 to i8
  store i8 %58, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %59 = load i32, ptr %4, align 4, !tbaa !5
  %60 = icmp slt i32 2, %59
  br i1 %60, label %61, label %66

61:                                               ; preds = %56
  %62 = load ptr, ptr %5, align 8, !tbaa !9
  %63 = getelementptr inbounds ptr, ptr %62, i64 2
  %64 = load ptr, ptr %63, align 8, !tbaa !9
  %65 = call i32 @atoi(ptr noundef %64) #9
  br label %67

66:                                               ; preds = %56
  br label %67

67:                                               ; preds = %66, %61
  %68 = phi i32 [ %65, %61 ], [ 4096, %66 ]
  store i32 %68, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  %69 = load i32, ptr %4, align 4, !tbaa !5
  %70 = icmp slt i32 3, %69
  br i1 %70, label %71, label %76

71:                                               ; preds = %67
  %72 = load ptr, ptr %5, align 8, !tbaa !9
  %73 = getelementptr inbounds ptr, ptr %72, i64 3
  %74 = load ptr, ptr %73, align 8, !tbaa !9
  %75 = call i32 @atoi(ptr noundef %74) #9
  br label %78

76:                                               ; preds = %67
  %77 = load i32, ptr %7, align 4, !tbaa !5
  br label %78

78:                                               ; preds = %76, %71
  %79 = phi i32 [ %75, %71 ], [ %77, %76 ]
  store i32 %79, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %80 = load i32, ptr %4, align 4, !tbaa !5
  %81 = icmp slt i32 4, %80
  br i1 %81, label %82, label %87

82:                                               ; preds = %78
  %83 = load ptr, ptr %5, align 8, !tbaa !9
  %84 = getelementptr inbounds ptr, ptr %83, i64 4
  %85 = load ptr, ptr %84, align 8, !tbaa !9
  %86 = call i32 @atoi(ptr noundef %85) #9
  br label %88

87:                                               ; preds = %78
  br label %88

88:                                               ; preds = %87, %82
  %89 = phi i32 [ %86, %82 ], [ 0, %87 ]
  %90 = load i32, ptr %7, align 4, !tbaa !5
  %91 = icmp slt i32 %89, %90
  br i1 %91, label %92, label %94

92:                                               ; preds = %88
  %93 = load i32, ptr %7, align 4, !tbaa !5
  br label %105

94:                                               ; preds = %88
  %95 = load i32, ptr %4, align 4, !tbaa !5
  %96 = icmp slt i32 4, %95
  br i1 %96, label %97, label %102

97:                                               ; preds = %94
  %98 = load ptr, ptr %5, align 8, !tbaa !9
  %99 = getelementptr inbounds ptr, ptr %98, i64 4
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  %101 = call i32 @atoi(ptr noundef %100) #9
  br label %103

102:                                              ; preds = %94
  br label %103

103:                                              ; preds = %102, %97
  %104 = phi i32 [ %101, %97 ], [ 0, %102 ]
  br label %105

105:                                              ; preds = %103, %92
  %106 = phi i32 [ %93, %92 ], [ %104, %103 ]
  store i32 %106, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  %107 = load i32, ptr %4, align 4, !tbaa !5
  %108 = icmp slt i32 5, %107
  br i1 %108, label %109, label %114

109:                                              ; preds = %105
  %110 = load ptr, ptr %5, align 8, !tbaa !9
  %111 = getelementptr inbounds ptr, ptr %110, i64 5
  %112 = load ptr, ptr %111, align 8, !tbaa !9
  %113 = call i32 @atoi(ptr noundef %112) #9
  br label %115

114:                                              ; preds = %105
  br label %115

115:                                              ; preds = %114, %109
  %116 = phi i32 [ %113, %109 ], [ 0, %114 ]
  %117 = load i8, ptr %6, align 1, !tbaa !11
  %118 = sext i8 %117 to i32
  %119 = icmp eq i32 111, %118
  br i1 %119, label %124, label %120

120:                                              ; preds = %115
  %121 = load i8, ptr %6, align 1, !tbaa !11
  %122 = sext i8 %121 to i32
  %123 = icmp eq i32 79, %122
  br i1 %123, label %124, label %126

124:                                              ; preds = %120, %115
  %125 = load i32, ptr %8, align 4, !tbaa !5
  br label %136

126:                                              ; preds = %120
  %127 = load i32, ptr %8, align 4, !tbaa !5
  %128 = load i32, ptr %9, align 4, !tbaa !5
  %129 = icmp slt i32 %127, %128
  br i1 %129, label %130, label %132

130:                                              ; preds = %126
  %131 = load i32, ptr %9, align 4, !tbaa !5
  br label %134

132:                                              ; preds = %126
  %133 = load i32, ptr %8, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %132, %130
  %135 = phi i32 [ %131, %130 ], [ %133, %132 ]
  br label %136

136:                                              ; preds = %134, %124
  %137 = phi i32 [ %125, %124 ], [ %135, %134 ]
  %138 = icmp slt i32 %116, %137
  br i1 %138, label %139, label %161

139:                                              ; preds = %136
  %140 = load i8, ptr %6, align 1, !tbaa !11
  %141 = sext i8 %140 to i32
  %142 = icmp eq i32 111, %141
  br i1 %142, label %147, label %143

143:                                              ; preds = %139
  %144 = load i8, ptr %6, align 1, !tbaa !11
  %145 = sext i8 %144 to i32
  %146 = icmp eq i32 79, %145
  br i1 %146, label %147, label %149

147:                                              ; preds = %143, %139
  %148 = load i32, ptr %8, align 4, !tbaa !5
  br label %159

149:                                              ; preds = %143
  %150 = load i32, ptr %8, align 4, !tbaa !5
  %151 = load i32, ptr %9, align 4, !tbaa !5
  %152 = icmp slt i32 %150, %151
  br i1 %152, label %153, label %155

153:                                              ; preds = %149
  %154 = load i32, ptr %9, align 4, !tbaa !5
  br label %157

155:                                              ; preds = %149
  %156 = load i32, ptr %8, align 4, !tbaa !5
  br label %157

157:                                              ; preds = %155, %153
  %158 = phi i32 [ %154, %153 ], [ %156, %155 ]
  br label %159

159:                                              ; preds = %157, %147
  %160 = phi i32 [ %148, %147 ], [ %158, %157 ]
  br label %172

161:                                              ; preds = %136
  %162 = load i32, ptr %4, align 4, !tbaa !5
  %163 = icmp slt i32 5, %162
  br i1 %163, label %164, label %169

164:                                              ; preds = %161
  %165 = load ptr, ptr %5, align 8, !tbaa !9
  %166 = getelementptr inbounds ptr, ptr %165, i64 5
  %167 = load ptr, ptr %166, align 8, !tbaa !9
  %168 = call i32 @atoi(ptr noundef %167) #9
  br label %170

169:                                              ; preds = %161
  br label %170

170:                                              ; preds = %169, %164
  %171 = phi i32 [ %168, %164 ], [ 0, %169 ]
  br label %172

172:                                              ; preds = %170, %159
  %173 = phi i32 [ %160, %159 ], [ %171, %170 ]
  store i32 %173, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  %174 = load i32, ptr %4, align 4, !tbaa !5
  %175 = icmp slt i32 6, %174
  br i1 %175, label %176, label %181

176:                                              ; preds = %172
  %177 = load ptr, ptr %5, align 8, !tbaa !9
  %178 = getelementptr inbounds ptr, ptr %177, i64 6
  %179 = load ptr, ptr %178, align 8, !tbaa !9
  %180 = call i32 @atoi(ptr noundef %179) #9
  br label %182

181:                                              ; preds = %172
  br label %182

182:                                              ; preds = %181, %176
  %183 = phi i32 [ %180, %176 ], [ 0, %181 ]
  store i32 %183, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %184 = load i32, ptr %11, align 4, !tbaa !5
  %185 = icmp sle i32 0, %184
  br i1 %185, label %186, label %188

186:                                              ; preds = %182
  %187 = load i32, ptr %11, align 4, !tbaa !5
  br label %191

188:                                              ; preds = %182
  %189 = load i32, ptr %11, align 4, !tbaa !5
  %190 = sub nsw i32 0, %189
  br label %191

191:                                              ; preds = %188, %186
  %192 = phi i32 [ %187, %186 ], [ %190, %188 ]
  store i32 %192, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %193 = load i32, ptr %4, align 4, !tbaa !5
  %194 = icmp slt i32 7, %193
  br i1 %194, label %195, label %200

195:                                              ; preds = %191
  %196 = load ptr, ptr %5, align 8, !tbaa !9
  %197 = getelementptr inbounds ptr, ptr %196, i64 7
  %198 = load ptr, ptr %197, align 8, !tbaa !9
  %199 = call i32 @atoi(ptr noundef %198) #9
  br label %201

200:                                              ; preds = %191
  br label %201

201:                                              ; preds = %200, %195
  %202 = phi i32 [ %199, %195 ], [ 0, %200 ]
  store i32 %202, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %203 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %203, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %204 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %204, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %205 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %205, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %206 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %206, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %207 = load i8, ptr %6, align 1, !tbaa !11
  %208 = sext i8 %207 to i32
  %209 = call ptr @strchr(ptr noundef @.str, i32 noundef %208) #9
  %210 = icmp ne ptr null, %209
  br i1 %210, label %211, label %909

211:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %212 = call ptr @getenv(ptr noundef @.str.1) #8
  store ptr %212, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %213 = call ptr @getenv(ptr noundef @.str.2) #8
  store ptr %213, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %214 = load ptr, ptr %20, align 8, !tbaa !9
  %215 = icmp eq ptr null, %214
  br i1 %215, label %221, label %216

216:                                              ; preds = %211
  %217 = load ptr, ptr %20, align 8, !tbaa !9
  %218 = load i8, ptr %217, align 1, !tbaa !11
  %219 = sext i8 %218 to i32
  %220 = icmp eq i32 0, %219
  br i1 %220, label %221, label %222

221:                                              ; preds = %216, %211
  br label %225

222:                                              ; preds = %216
  %223 = load ptr, ptr %20, align 8, !tbaa !9
  %224 = call i32 @atoi(ptr noundef %223) #9
  br label %225

225:                                              ; preds = %222, %221
  %226 = phi i32 [ 0, %221 ], [ %224, %222 ]
  store i32 %226, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %227 = load ptr, ptr %21, align 8, !tbaa !9
  %228 = icmp eq ptr null, %227
  br i1 %228, label %234, label %229

229:                                              ; preds = %225
  %230 = load ptr, ptr %21, align 8, !tbaa !9
  %231 = load i8, ptr %230, align 1, !tbaa !11
  %232 = sext i8 %231 to i32
  %233 = icmp eq i32 0, %232
  br i1 %233, label %234, label %235

234:                                              ; preds = %229, %225
  br label %238

235:                                              ; preds = %229
  %236 = load ptr, ptr %21, align 8, !tbaa !9
  %237 = call i32 @atoi(ptr noundef %236) #9
  br label %238

238:                                              ; preds = %235, %234
  %239 = phi i32 [ 1, %234 ], [ %237, %235 ]
  store i32 %239, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %240 = load i32, ptr %9, align 4, !tbaa !5
  %241 = sext i32 %240 to i64
  %242 = load i8, ptr %6, align 1, !tbaa !11
  %243 = sext i8 %242 to i32
  %244 = icmp eq i32 111, %243
  br i1 %244, label %249, label %245

245:                                              ; preds = %238
  %246 = load i8, ptr %6, align 1, !tbaa !11
  %247 = sext i8 %246 to i32
  %248 = icmp eq i32 79, %247
  br i1 %248, label %249, label %251

249:                                              ; preds = %245, %238
  %250 = load i32, ptr %8, align 4, !tbaa !5
  br label %253

251:                                              ; preds = %245
  %252 = load i32, ptr %10, align 4, !tbaa !5
  br label %253

253:                                              ; preds = %251, %249
  %254 = phi i32 [ %250, %249 ], [ %252, %251 ]
  %255 = sext i32 %254 to i64
  %256 = mul i64 %241, %255
  %257 = mul i64 %256, 8
  %258 = call noalias ptr @libxsmm_malloc(i64 noundef %257)
  store ptr %258, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %259 = load i32, ptr %10, align 4, !tbaa !5
  %260 = sext i32 %259 to i64
  %261 = load i8, ptr %6, align 1, !tbaa !11
  %262 = sext i8 %261 to i32
  %263 = icmp eq i32 111, %262
  br i1 %263, label %268, label %264

264:                                              ; preds = %253
  %265 = load i8, ptr %6, align 1, !tbaa !11
  %266 = sext i8 %265 to i32
  %267 = icmp eq i32 79, %266
  br i1 %267, label %268, label %270

268:                                              ; preds = %264, %253
  %269 = load i32, ptr %7, align 4, !tbaa !5
  br label %272

270:                                              ; preds = %264
  %271 = load i32, ptr %9, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %270, %268
  %273 = phi i32 [ %269, %268 ], [ %271, %270 ]
  %274 = sext i32 %273 to i64
  %275 = mul i64 %260, %274
  %276 = mul i64 %275, 8
  %277 = call noalias ptr @libxsmm_malloc(i64 noundef %276)
  store ptr %277, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  store i64 0, ptr %27, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store i64 0, ptr %28, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store i64 0, ptr %30, align 8, !tbaa !14
  %278 = load ptr, ptr @stdout, align 8, !tbaa !9
  %279 = load i32, ptr %7, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  %281 = load i32, ptr %8, align 4, !tbaa !5
  %282 = sext i32 %281 to i64
  %283 = load i32, ptr %9, align 4, !tbaa !5
  %284 = sext i32 %283 to i64
  %285 = load i32, ptr %10, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = load i32, ptr %7, align 4, !tbaa !5
  %288 = sext i32 %287 to i64
  %289 = mul i64 8, %288
  %290 = load i32, ptr %8, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = mul i64 %289, %291
  %293 = uitofp i64 %292 to double
  %294 = fmul double 1.000000e+00, %293
  %295 = fdiv double %294, 0x4130000000000000
  %296 = load i8, ptr %6, align 1, !tbaa !11
  %297 = sext i8 %296 to i32
  %298 = icmp eq i32 111, %297
  br i1 %298, label %303, label %299

299:                                              ; preds = %272
  %300 = load i8, ptr %6, align 1, !tbaa !11
  %301 = sext i8 %300 to i32
  %302 = icmp eq i32 79, %301
  br label %303

303:                                              ; preds = %299, %272
  %304 = phi i1 [ true, %272 ], [ %302, %299 ]
  %305 = zext i1 %304 to i64
  %306 = select i1 %304, ptr @.str.5, ptr @.str.6
  %307 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %278, ptr noundef @.str.3, i64 noundef %280, i64 noundef %282, i64 noundef %284, i64 noundef %286, double noundef %295, ptr noundef @.str.4, ptr noundef %306) #8
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %308

308:                                              ; preds = %334, %303
  %309 = load i32, ptr %29, align 4, !tbaa !5
  %310 = load i32, ptr %8, align 4, !tbaa !5
  %311 = icmp slt i32 %309, %310
  br i1 %311, label %312, label %337

312:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %313

313:                                              ; preds = %330, %312
  %314 = load i32, ptr %31, align 4, !tbaa !5
  %315 = load i32, ptr %7, align 4, !tbaa !5
  %316 = icmp slt i32 %314, %315
  br i1 %316, label %317, label %333

317:                                              ; preds = %313
  %318 = load i32, ptr %29, align 4, !tbaa !5
  %319 = load i32, ptr %31, align 4, !tbaa !5
  %320 = load i32, ptr %7, align 4, !tbaa !5
  %321 = call double @initial_value(i32 noundef %318, i32 noundef %319, i32 noundef %320)
  %322 = load ptr, ptr %24, align 8, !tbaa !9
  %323 = load i32, ptr %29, align 4, !tbaa !5
  %324 = load i32, ptr %9, align 4, !tbaa !5
  %325 = mul nsw i32 %323, %324
  %326 = load i32, ptr %31, align 4, !tbaa !5
  %327 = add nsw i32 %325, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds double, ptr %322, i64 %328
  store double %321, ptr %329, align 8, !tbaa !16
  br label %330

330:                                              ; preds = %317
  %331 = load i32, ptr %31, align 4, !tbaa !5
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %31, align 4, !tbaa !5
  br label %313, !llvm.loop !18

333:                                              ; preds = %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %334

334:                                              ; preds = %333
  %335 = load i32, ptr %29, align 4, !tbaa !5
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %29, align 4, !tbaa !5
  br label %308, !llvm.loop !20

337:                                              ; preds = %308
  %338 = load i32, ptr %23, align 4, !tbaa !5
  %339 = icmp ne i32 0, %338
  br i1 %339, label %340, label %341

340:                                              ; preds = %337
  call void @srand(i32 noundef 25071975) #8
  br label %345

341:                                              ; preds = %337
  %342 = call i64 @libxsmm_timer_tick()
  %343 = urem i64 %342, 4294967295
  %344 = trunc i64 %343 to i32
  call void @srand(i32 noundef %344) #8
  br label %345

345:                                              ; preds = %341, %340
  %346 = load i32, ptr %11, align 4, !tbaa !5
  %347 = icmp eq i32 0, %346
  %348 = zext i1 %347 to i64
  %349 = select i1 %347, i32 -1, i32 0
  store i32 %349, ptr %19, align 4, !tbaa !5
  br label %350

350:                                              ; preds = %588, %345
  %351 = load i32, ptr %19, align 4, !tbaa !5
  %352 = load i32, ptr %12, align 4, !tbaa !5
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %354, label %357

354:                                              ; preds = %350
  %355 = load i32, ptr %18, align 4, !tbaa !5
  %356 = icmp eq i32 0, %355
  br label %357

357:                                              ; preds = %354, %350
  %358 = phi i1 [ false, %350 ], [ %356, %354 ]
  br i1 %358, label %359, label %591

359:                                              ; preds = %357
  %360 = load i32, ptr %11, align 4, !tbaa !5
  %361 = icmp slt i32 0, %360
  br i1 %361, label %362, label %442

362:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %363 = load i32, ptr %13, align 4, !tbaa !5
  %364 = icmp sle i32 0, %363
  br i1 %364, label %365, label %369

365:                                              ; preds = %362
  %366 = load i32, ptr %13, align 4, !tbaa !5
  %367 = load i32, ptr %9, align 4, !tbaa !5
  %368 = call i32 @randstart(i32 noundef %366, i32 noundef %367)
  br label %370

369:                                              ; preds = %362
  br label %370

370:                                              ; preds = %369, %365
  %371 = phi i32 [ %368, %365 ], [ 0, %369 ]
  store i32 %371, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %372 = load i32, ptr %13, align 4, !tbaa !5
  %373 = icmp sle i32 0, %372
  br i1 %373, label %374, label %378

374:                                              ; preds = %370
  %375 = load i32, ptr %13, align 4, !tbaa !5
  %376 = load i32, ptr %10, align 4, !tbaa !5
  %377 = call i32 @randstart(i32 noundef %375, i32 noundef %376)
  br label %379

378:                                              ; preds = %370
  br label %379

379:                                              ; preds = %378, %374
  %380 = phi i32 [ %377, %374 ], [ 0, %378 ]
  store i32 %380, ptr %33, align 4, !tbaa !5
  %381 = load i32, ptr %13, align 4, !tbaa !5
  %382 = icmp sle i32 0, %381
  br i1 %382, label %383, label %385

383:                                              ; preds = %379
  %384 = load i32, ptr %13, align 4, !tbaa !5
  br label %388

385:                                              ; preds = %379
  %386 = load i32, ptr %13, align 4, !tbaa !5
  %387 = sub nsw i32 0, %386
  br label %388

388:                                              ; preds = %385, %383
  %389 = phi i32 [ %384, %383 ], [ %387, %385 ]
  %390 = load i32, ptr %7, align 4, !tbaa !5
  %391 = call i32 @randstart(i32 noundef %389, i32 noundef %390)
  store i32 %391, ptr %14, align 4, !tbaa !5
  %392 = load i32, ptr %32, align 4, !tbaa !5
  %393 = load i32, ptr %14, align 4, !tbaa !5
  %394 = icmp slt i32 %392, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %388
  %396 = load i32, ptr %14, align 4, !tbaa !5
  br label %399

397:                                              ; preds = %388
  %398 = load i32, ptr %32, align 4, !tbaa !5
  br label %399

399:                                              ; preds = %397, %395
  %400 = phi i32 [ %396, %395 ], [ %398, %397 ]
  store i32 %400, ptr %16, align 4, !tbaa !5
  %401 = load i32, ptr %13, align 4, !tbaa !5
  %402 = icmp sle i32 0, %401
  br i1 %402, label %403, label %405

403:                                              ; preds = %399
  %404 = load i32, ptr %13, align 4, !tbaa !5
  br label %408

405:                                              ; preds = %399
  %406 = load i32, ptr %13, align 4, !tbaa !5
  %407 = sub nsw i32 0, %406
  br label %408

408:                                              ; preds = %405, %403
  %409 = phi i32 [ %404, %403 ], [ %407, %405 ]
  %410 = load i32, ptr %8, align 4, !tbaa !5
  %411 = call i32 @randstart(i32 noundef %409, i32 noundef %410)
  store i32 %411, ptr %15, align 4, !tbaa !5
  %412 = load i32, ptr %33, align 4, !tbaa !5
  %413 = load i32, ptr %15, align 4, !tbaa !5
  %414 = icmp slt i32 %412, %413
  br i1 %414, label %415, label %417

415:                                              ; preds = %408
  %416 = load i32, ptr %15, align 4, !tbaa !5
  br label %419

417:                                              ; preds = %408
  %418 = load i32, ptr %33, align 4, !tbaa !5
  br label %419

419:                                              ; preds = %417, %415
  %420 = phi i32 [ %416, %415 ], [ %418, %417 ]
  store i32 %420, ptr %17, align 4, !tbaa !5
  %421 = load i8, ptr %6, align 1, !tbaa !11
  %422 = sext i8 %421 to i32
  %423 = icmp eq i32 111, %422
  br i1 %423, label %428, label %424

424:                                              ; preds = %419
  %425 = load i8, ptr %6, align 1, !tbaa !11
  %426 = sext i8 %425 to i32
  %427 = icmp eq i32 79, %426
  br i1 %427, label %428, label %435

428:                                              ; preds = %424, %419
  %429 = load ptr, ptr %25, align 8, !tbaa !9
  %430 = load ptr, ptr %24, align 8, !tbaa !9
  %431 = load i32, ptr %14, align 4, !tbaa !5
  %432 = load i32, ptr %15, align 4, !tbaa !5
  %433 = load i32, ptr %16, align 4, !tbaa !5
  %434 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_otrans(ptr noundef %429, ptr noundef %430, i32 noundef 8, i32 noundef %431, i32 noundef %432, i32 noundef %433, i32 noundef %434)
  br label %441

435:                                              ; preds = %424
  %436 = load ptr, ptr %25, align 8, !tbaa !9
  %437 = load i32, ptr %14, align 4, !tbaa !5
  %438 = load i32, ptr %15, align 4, !tbaa !5
  %439 = load i32, ptr %16, align 4, !tbaa !5
  %440 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_itrans(ptr noundef %436, i32 noundef 8, i32 noundef %437, i32 noundef %438, i32 noundef %439, i32 noundef %440)
  br label %441

441:                                              ; preds = %435, %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %442

442:                                              ; preds = %441, %359
  %443 = load i32, ptr %14, align 4, !tbaa !5
  %444 = sext i32 %443 to i64
  %445 = mul i64 8, %444
  %446 = load i32, ptr %15, align 4, !tbaa !5
  %447 = sext i32 %446 to i64
  %448 = mul i64 %445, %447
  %449 = load i64, ptr %30, align 8, !tbaa !14
  %450 = add i64 %449, %448
  store i64 %450, ptr %30, align 8, !tbaa !14
  %451 = load i8, ptr %6, align 1, !tbaa !11
  %452 = sext i8 %451 to i32
  %453 = icmp eq i32 111, %452
  br i1 %453, label %458, label %454

454:                                              ; preds = %442
  %455 = load i8, ptr %6, align 1, !tbaa !11
  %456 = sext i8 %455 to i32
  %457 = icmp eq i32 79, %456
  br i1 %457, label %458, label %490

458:                                              ; preds = %454, %442
  %459 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %459, ptr %16, align 4, !tbaa !5
  %460 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %460, ptr %17, align 4, !tbaa !5
  %461 = load i32, ptr %22, align 4, !tbaa !5
  %462 = icmp eq i32 0, %461
  br i1 %462, label %463, label %476

463:                                              ; preds = %458
  %464 = call i64 @libxsmm_timer_tick()
  store i64 %464, ptr %26, align 8, !tbaa !12
  %465 = load ptr, ptr %25, align 8, !tbaa !9
  %466 = load ptr, ptr %24, align 8, !tbaa !9
  %467 = load i32, ptr %14, align 4, !tbaa !5
  %468 = load i32, ptr %15, align 4, !tbaa !5
  %469 = load i32, ptr %16, align 4, !tbaa !5
  %470 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_otrans(ptr noundef %465, ptr noundef %466, i32 noundef 8, i32 noundef %467, i32 noundef %468, i32 noundef %469, i32 noundef %470)
  %471 = load i64, ptr %26, align 8, !tbaa !12
  %472 = call i64 @libxsmm_timer_tick()
  %473 = call i64 @libxsmm_timer_ncycles(i64 noundef %471, i64 noundef %472)
  %474 = load i64, ptr %27, align 8, !tbaa !12
  %475 = add i64 %474, %473
  store i64 %475, ptr %27, align 8, !tbaa !12
  br label %489

476:                                              ; preds = %458
  %477 = call i64 @libxsmm_timer_tick()
  store i64 %477, ptr %26, align 8, !tbaa !12
  %478 = load ptr, ptr %25, align 8, !tbaa !9
  %479 = load ptr, ptr %24, align 8, !tbaa !9
  %480 = load i32, ptr %14, align 4, !tbaa !5
  %481 = load i32, ptr %15, align 4, !tbaa !5
  %482 = load i32, ptr %16, align 4, !tbaa !5
  %483 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_otrans(ptr noundef %478, ptr noundef %479, i32 noundef 8, i32 noundef %480, i32 noundef %481, i32 noundef %482, i32 noundef %483)
  %484 = load i64, ptr %26, align 8, !tbaa !12
  %485 = call i64 @libxsmm_timer_tick()
  %486 = call i64 @libxsmm_timer_ncycles(i64 noundef %484, i64 noundef %485)
  %487 = load i64, ptr %27, align 8, !tbaa !12
  %488 = add i64 %487, %486
  store i64 %488, ptr %27, align 8, !tbaa !12
  br label %489

489:                                              ; preds = %476, %463
  br label %536

490:                                              ; preds = %454
  %491 = load i8, ptr %6, align 1, !tbaa !11
  %492 = sext i8 %491 to i32
  %493 = icmp eq i32 105, %492
  br i1 %493, label %498, label %494

494:                                              ; preds = %490
  %495 = load i8, ptr %6, align 1, !tbaa !11
  %496 = sext i8 %495 to i32
  %497 = icmp eq i32 73, %496
  br i1 %497, label %498, label %499

498:                                              ; preds = %494, %490
  br label %500

499:                                              ; preds = %494
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 196, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

500:                                              ; preds = %498
  %501 = load ptr, ptr %25, align 8, !tbaa !9
  %502 = load ptr, ptr %24, align 8, !tbaa !9
  %503 = load i32, ptr %16, align 4, !tbaa !5
  %504 = sext i32 %503 to i64
  %505 = mul i64 8, %504
  %506 = load i32, ptr %15, align 4, !tbaa !5
  %507 = sext i32 %506 to i64
  %508 = mul i64 %505, %507
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %501, ptr align 8 %502, i64 %508, i1 false)
  %509 = load i32, ptr %22, align 4, !tbaa !5
  %510 = icmp sgt i32 2, %509
  br i1 %510, label %511, label %523

511:                                              ; preds = %500
  %512 = call i64 @libxsmm_timer_tick()
  store i64 %512, ptr %26, align 8, !tbaa !12
  %513 = load ptr, ptr %25, align 8, !tbaa !9
  %514 = load i32, ptr %14, align 4, !tbaa !5
  %515 = load i32, ptr %15, align 4, !tbaa !5
  %516 = load i32, ptr %16, align 4, !tbaa !5
  %517 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_itrans(ptr noundef %513, i32 noundef 8, i32 noundef %514, i32 noundef %515, i32 noundef %516, i32 noundef %517)
  %518 = load i64, ptr %26, align 8, !tbaa !12
  %519 = call i64 @libxsmm_timer_tick()
  %520 = call i64 @libxsmm_timer_ncycles(i64 noundef %518, i64 noundef %519)
  %521 = load i64, ptr %27, align 8, !tbaa !12
  %522 = add i64 %521, %520
  store i64 %522, ptr %27, align 8, !tbaa !12
  br label %535

523:                                              ; preds = %500
  %524 = call i64 @libxsmm_timer_tick()
  store i64 %524, ptr %26, align 8, !tbaa !12
  %525 = load ptr, ptr %25, align 8, !tbaa !9
  %526 = load i32, ptr %14, align 4, !tbaa !5
  %527 = load i32, ptr %15, align 4, !tbaa !5
  %528 = load i32, ptr %16, align 4, !tbaa !5
  %529 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_itrans(ptr noundef %525, i32 noundef 8, i32 noundef %526, i32 noundef %527, i32 noundef %528, i32 noundef %529)
  %530 = load i64, ptr %26, align 8, !tbaa !12
  %531 = call i64 @libxsmm_timer_tick()
  %532 = call i64 @libxsmm_timer_ncycles(i64 noundef %530, i64 noundef %531)
  %533 = load i64, ptr %27, align 8, !tbaa !12
  %534 = add i64 %533, %532
  store i64 %534, ptr %27, align 8, !tbaa !12
  br label %535

535:                                              ; preds = %523, %511
  br label %536

536:                                              ; preds = %535, %489
  %537 = load i32, ptr %23, align 4, !tbaa !5
  %538 = icmp ne i32 0, %537
  br i1 %538, label %539, label %587

539:                                              ; preds = %536
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %540

540:                                              ; preds = %583, %539
  %541 = load i32, ptr %29, align 4, !tbaa !5
  %542 = load i32, ptr %14, align 4, !tbaa !5
  %543 = icmp slt i32 %541, %542
  br i1 %543, label %544, label %586

544:                                              ; preds = %540
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %545

545:                                              ; preds = %579, %544
  %546 = load i32, ptr %34, align 4, !tbaa !5
  %547 = load i32, ptr %15, align 4, !tbaa !5
  %548 = icmp slt i32 %546, %547
  br i1 %548, label %549, label %582

549:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %550 = load ptr, ptr %25, align 8, !tbaa !9
  %551 = load i32, ptr %29, align 4, !tbaa !5
  %552 = load i32, ptr %17, align 4, !tbaa !5
  %553 = mul nsw i32 %551, %552
  %554 = load i32, ptr %34, align 4, !tbaa !5
  %555 = add nsw i32 %553, %554
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds double, ptr %550, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !16
  store double %558, ptr %35, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %559 = load ptr, ptr %24, align 8, !tbaa !9
  %560 = load i32, ptr %34, align 4, !tbaa !5
  %561 = load i32, ptr %16, align 4, !tbaa !5
  %562 = mul nsw i32 %560, %561
  %563 = load i32, ptr %29, align 4, !tbaa !5
  %564 = add nsw i32 %562, %563
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds double, ptr %559, i64 %565
  %567 = load double, ptr %566, align 8, !tbaa !16
  store double %567, ptr %36, align 8, !tbaa !16
  %568 = load double, ptr %35, align 8, !tbaa !16
  %569 = load double, ptr %36, align 8, !tbaa !16
  %570 = fcmp une double %568, %569
  br i1 %570, label %571, label %575

571:                                              ; preds = %549
  %572 = load i32, ptr %14, align 4, !tbaa !5
  %573 = load i32, ptr %29, align 4, !tbaa !5
  %574 = add nsw i32 %573, %572
  store i32 %574, ptr %29, align 4, !tbaa !5
  store i32 1, ptr %18, align 4, !tbaa !5
  store i32 14, ptr %37, align 4
  br label %576

575:                                              ; preds = %549
  store i32 0, ptr %37, align 4
  br label %576

576:                                              ; preds = %575, %571
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  %577 = load i32, ptr %37, align 4
  switch i32 %577, label %918 [
    i32 0, label %578
    i32 14, label %582
  ]

578:                                              ; preds = %576
  br label %579

579:                                              ; preds = %578
  %580 = load i32, ptr %34, align 4, !tbaa !5
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %34, align 4, !tbaa !5
  br label %545, !llvm.loop !21

582:                                              ; preds = %576, %545
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %583

583:                                              ; preds = %582
  %584 = load i32, ptr %29, align 4, !tbaa !5
  %585 = add nsw i32 %584, 1
  store i32 %585, ptr %29, align 4, !tbaa !5
  br label %540, !llvm.loop !22

586:                                              ; preds = %540
  br label %587

587:                                              ; preds = %586, %536
  br label %588

588:                                              ; preds = %587
  %589 = load i32, ptr %19, align 4, !tbaa !5
  %590 = add nsw i32 %589, 1
  store i32 %590, ptr %19, align 4, !tbaa !5
  br label %350, !llvm.loop !23

591:                                              ; preds = %357
  %592 = load i32, ptr %23, align 4, !tbaa !5
  %593 = icmp slt i32 0, %592
  br i1 %593, label %594, label %785

594:                                              ; preds = %591
  call void @srand(i32 noundef 25071975) #8
  %595 = load i32, ptr %11, align 4, !tbaa !5
  %596 = icmp eq i32 0, %595
  %597 = zext i1 %596 to i64
  %598 = select i1 %596, i32 -1, i32 0
  store i32 %598, ptr %19, align 4, !tbaa !5
  br label %599

599:                                              ; preds = %781, %594
  %600 = load i32, ptr %19, align 4, !tbaa !5
  %601 = load i32, ptr %12, align 4, !tbaa !5
  %602 = icmp slt i32 %600, %601
  br i1 %602, label %603, label %606

603:                                              ; preds = %599
  %604 = load i32, ptr %18, align 4, !tbaa !5
  %605 = icmp eq i32 0, %604
  br label %606

606:                                              ; preds = %603, %599
  %607 = phi i1 [ false, %599 ], [ %605, %603 ]
  br i1 %607, label %608, label %784

608:                                              ; preds = %606
  %609 = load i32, ptr %11, align 4, !tbaa !5
  %610 = icmp slt i32 0, %609
  br i1 %610, label %611, label %692

611:                                              ; preds = %608
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %612 = load i32, ptr %13, align 4, !tbaa !5
  %613 = icmp sle i32 0, %612
  br i1 %613, label %614, label %618

614:                                              ; preds = %611
  %615 = load i32, ptr %13, align 4, !tbaa !5
  %616 = load i32, ptr %9, align 4, !tbaa !5
  %617 = call i32 @randstart(i32 noundef %615, i32 noundef %616)
  br label %619

618:                                              ; preds = %611
  br label %619

619:                                              ; preds = %618, %614
  %620 = phi i32 [ %617, %614 ], [ 0, %618 ]
  store i32 %620, ptr %38, align 4, !tbaa !5
  %621 = load i32, ptr %13, align 4, !tbaa !5
  %622 = icmp sle i32 0, %621
  br i1 %622, label %623, label %625

623:                                              ; preds = %619
  %624 = load i32, ptr %13, align 4, !tbaa !5
  br label %628

625:                                              ; preds = %619
  %626 = load i32, ptr %13, align 4, !tbaa !5
  %627 = sub nsw i32 0, %626
  br label %628

628:                                              ; preds = %625, %623
  %629 = phi i32 [ %624, %623 ], [ %627, %625 ]
  %630 = load i32, ptr %7, align 4, !tbaa !5
  %631 = call i32 @randstart(i32 noundef %629, i32 noundef %630)
  store i32 %631, ptr %14, align 4, !tbaa !5
  %632 = load i32, ptr %38, align 4, !tbaa !5
  %633 = load i32, ptr %14, align 4, !tbaa !5
  %634 = icmp slt i32 %632, %633
  br i1 %634, label %635, label %637

635:                                              ; preds = %628
  %636 = load i32, ptr %14, align 4, !tbaa !5
  br label %639

637:                                              ; preds = %628
  %638 = load i32, ptr %38, align 4, !tbaa !5
  br label %639

639:                                              ; preds = %637, %635
  %640 = phi i32 [ %636, %635 ], [ %638, %637 ]
  store i32 %640, ptr %16, align 4, !tbaa !5
  %641 = load i8, ptr %6, align 1, !tbaa !11
  %642 = sext i8 %641 to i32
  %643 = icmp eq i32 111, %642
  br i1 %643, label %648, label %644

644:                                              ; preds = %639
  %645 = load i8, ptr %6, align 1, !tbaa !11
  %646 = sext i8 %645 to i32
  %647 = icmp eq i32 79, %646
  br i1 %647, label %648, label %678

648:                                              ; preds = %644, %639
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %649 = load i32, ptr %13, align 4, !tbaa !5
  %650 = icmp sle i32 0, %649
  br i1 %650, label %651, label %655

651:                                              ; preds = %648
  %652 = load i32, ptr %13, align 4, !tbaa !5
  %653 = load i32, ptr %10, align 4, !tbaa !5
  %654 = call i32 @randstart(i32 noundef %652, i32 noundef %653)
  br label %656

655:                                              ; preds = %648
  br label %656

656:                                              ; preds = %655, %651
  %657 = phi i32 [ %654, %651 ], [ 0, %655 ]
  store i32 %657, ptr %39, align 4, !tbaa !5
  %658 = load i32, ptr %13, align 4, !tbaa !5
  %659 = icmp sle i32 0, %658
  br i1 %659, label %660, label %662

660:                                              ; preds = %656
  %661 = load i32, ptr %13, align 4, !tbaa !5
  br label %665

662:                                              ; preds = %656
  %663 = load i32, ptr %13, align 4, !tbaa !5
  %664 = sub nsw i32 0, %663
  br label %665

665:                                              ; preds = %662, %660
  %666 = phi i32 [ %661, %660 ], [ %664, %662 ]
  %667 = load i32, ptr %8, align 4, !tbaa !5
  %668 = call i32 @randstart(i32 noundef %666, i32 noundef %667)
  store i32 %668, ptr %15, align 4, !tbaa !5
  %669 = load i32, ptr %39, align 4, !tbaa !5
  %670 = load i32, ptr %15, align 4, !tbaa !5
  %671 = icmp slt i32 %669, %670
  br i1 %671, label %672, label %674

672:                                              ; preds = %665
  %673 = load i32, ptr %15, align 4, !tbaa !5
  br label %676

674:                                              ; preds = %665
  %675 = load i32, ptr %39, align 4, !tbaa !5
  br label %676

676:                                              ; preds = %674, %672
  %677 = phi i32 [ %673, %672 ], [ %675, %674 ]
  store i32 %677, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %691

678:                                              ; preds = %644
  %679 = load i32, ptr %13, align 4, !tbaa !5
  %680 = icmp sle i32 0, %679
  br i1 %680, label %681, label %683

681:                                              ; preds = %678
  %682 = load i32, ptr %13, align 4, !tbaa !5
  br label %686

683:                                              ; preds = %678
  %684 = load i32, ptr %13, align 4, !tbaa !5
  %685 = sub nsw i32 0, %684
  br label %686

686:                                              ; preds = %683, %681
  %687 = phi i32 [ %682, %681 ], [ %685, %683 ]
  %688 = load i32, ptr %8, align 4, !tbaa !5
  %689 = call i32 @randstart(i32 noundef %687, i32 noundef %688)
  store i32 %689, ptr %15, align 4, !tbaa !5
  %690 = load i32, ptr %16, align 4, !tbaa !5
  store i32 %690, ptr %17, align 4, !tbaa !5
  br label %691

691:                                              ; preds = %686, %676
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %692

692:                                              ; preds = %691, %608
  %693 = load i8, ptr %6, align 1, !tbaa !11
  %694 = sext i8 %693 to i32
  %695 = icmp eq i32 111, %694
  br i1 %695, label %700, label %696

696:                                              ; preds = %692
  %697 = load i8, ptr %6, align 1, !tbaa !11
  %698 = sext i8 %697 to i32
  %699 = icmp eq i32 79, %698
  br i1 %699, label %700, label %713

700:                                              ; preds = %696, %692
  %701 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %701, ptr %16, align 4, !tbaa !5
  %702 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %702, ptr %17, align 4, !tbaa !5
  %703 = call i64 @libxsmm_timer_tick()
  store i64 %703, ptr %26, align 8, !tbaa !12
  %704 = load ptr, ptr %25, align 8, !tbaa !9
  %705 = load ptr, ptr %24, align 8, !tbaa !9
  %706 = load i32, ptr %14, align 4, !tbaa !5
  %707 = load i32, ptr %15, align 4, !tbaa !5
  call void @matrix_transpose(ptr noundef %704, ptr noundef %705, i32 noundef %706, i32 noundef %707)
  %708 = load i64, ptr %26, align 8, !tbaa !12
  %709 = call i64 @libxsmm_timer_tick()
  %710 = call i64 @libxsmm_timer_ncycles(i64 noundef %708, i64 noundef %709)
  %711 = load i64, ptr %28, align 8, !tbaa !12
  %712 = add i64 %711, %710
  store i64 %712, ptr %28, align 8, !tbaa !12
  br label %726

713:                                              ; preds = %696
  %714 = load i8, ptr %6, align 1, !tbaa !11
  %715 = sext i8 %714 to i32
  %716 = icmp eq i32 105, %715
  br i1 %716, label %721, label %717

717:                                              ; preds = %713
  %718 = load i8, ptr %6, align 1, !tbaa !11
  %719 = sext i8 %718 to i32
  %720 = icmp eq i32 73, %719
  br i1 %720, label %721, label %722

721:                                              ; preds = %717, %713
  br label %723

722:                                              ; preds = %717
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 260, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

723:                                              ; preds = %721
  %724 = load ptr, ptr @stderr, align 8, !tbaa !9
  %725 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %724, ptr noundef @.str.9) #8
  br label %781

726:                                              ; preds = %700
  %727 = load i32, ptr %23, align 4, !tbaa !5
  %728 = icmp slt i32 1, %727
  br i1 %728, label %732, label %729

729:                                              ; preds = %726
  %730 = load i32, ptr %23, align 4, !tbaa !5
  %731 = icmp sgt i32 0, %730
  br i1 %731, label %732, label %780

732:                                              ; preds = %729, %726
  store i32 0, ptr %29, align 4, !tbaa !5
  br label %733

733:                                              ; preds = %776, %732
  %734 = load i32, ptr %29, align 4, !tbaa !5
  %735 = load i32, ptr %14, align 4, !tbaa !5
  %736 = icmp slt i32 %734, %735
  br i1 %736, label %737, label %779

737:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !5
  br label %738

738:                                              ; preds = %772, %737
  %739 = load i32, ptr %40, align 4, !tbaa !5
  %740 = load i32, ptr %15, align 4, !tbaa !5
  %741 = icmp slt i32 %739, %740
  br i1 %741, label %742, label %775

742:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %743 = load ptr, ptr %25, align 8, !tbaa !9
  %744 = load i32, ptr %29, align 4, !tbaa !5
  %745 = load i32, ptr %17, align 4, !tbaa !5
  %746 = mul nsw i32 %744, %745
  %747 = load i32, ptr %40, align 4, !tbaa !5
  %748 = add nsw i32 %746, %747
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds double, ptr %743, i64 %749
  %751 = load double, ptr %750, align 8, !tbaa !16
  store double %751, ptr %41, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %752 = load ptr, ptr %24, align 8, !tbaa !9
  %753 = load i32, ptr %40, align 4, !tbaa !5
  %754 = load i32, ptr %16, align 4, !tbaa !5
  %755 = mul nsw i32 %753, %754
  %756 = load i32, ptr %29, align 4, !tbaa !5
  %757 = add nsw i32 %755, %756
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds double, ptr %752, i64 %758
  %760 = load double, ptr %759, align 8, !tbaa !16
  store double %760, ptr %42, align 8, !tbaa !16
  %761 = load double, ptr %41, align 8, !tbaa !16
  %762 = load double, ptr %42, align 8, !tbaa !16
  %763 = fcmp une double %761, %762
  br i1 %763, label %764, label %768

764:                                              ; preds = %742
  %765 = load i32, ptr %14, align 4, !tbaa !5
  %766 = load i32, ptr %29, align 4, !tbaa !5
  %767 = add nsw i32 %766, %765
  store i32 %767, ptr %29, align 4, !tbaa !5
  store i32 1, ptr %18, align 4, !tbaa !5
  store i32 23, ptr %37, align 4
  br label %769

768:                                              ; preds = %742
  store i32 0, ptr %37, align 4
  br label %769

769:                                              ; preds = %768, %764
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  %770 = load i32, ptr %37, align 4
  switch i32 %770, label %918 [
    i32 0, label %771
    i32 23, label %775
  ]

771:                                              ; preds = %769
  br label %772

772:                                              ; preds = %771
  %773 = load i32, ptr %40, align 4, !tbaa !5
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %40, align 4, !tbaa !5
  br label %738, !llvm.loop !24

775:                                              ; preds = %769, %738
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %776

776:                                              ; preds = %775
  %777 = load i32, ptr %29, align 4, !tbaa !5
  %778 = add nsw i32 %777, 1
  store i32 %778, ptr %29, align 4, !tbaa !5
  br label %733, !llvm.loop !25

779:                                              ; preds = %733
  br label %780

780:                                              ; preds = %779, %729
  br label %781

781:                                              ; preds = %780, %723
  %782 = load i32, ptr %19, align 4, !tbaa !5
  %783 = add nsw i32 %782, 1
  store i32 %783, ptr %19, align 4, !tbaa !5
  br label %599, !llvm.loop !26

784:                                              ; preds = %606
  br label %785

785:                                              ; preds = %784, %591
  %786 = load i32, ptr %18, align 4, !tbaa !5
  %787 = icmp eq i32 0, %786
  br i1 %787, label %788, label %891

788:                                              ; preds = %785
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %789 = load i64, ptr %27, align 8, !tbaa !12
  %790 = call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %789)
  store double %790, ptr %43, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  store double 0x41D0000000000000, ptr %44, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %791 = load i64, ptr %30, align 8, !tbaa !14
  %792 = load i8, ptr %6, align 1, !tbaa !11
  %793 = sext i8 %792 to i32
  %794 = icmp eq i32 111, %793
  br i1 %794, label %799, label %795

795:                                              ; preds = %788
  %796 = load i8, ptr %6, align 1, !tbaa !11
  %797 = sext i8 %796 to i32
  %798 = icmp eq i32 79, %797
  br label %799

799:                                              ; preds = %795, %788
  %800 = phi i1 [ true, %788 ], [ %798, %795 ]
  %801 = zext i1 %800 to i64
  %802 = select i1 %800, i32 3, i32 2
  %803 = sext i32 %802 to i64
  %804 = mul i64 %791, %803
  store i64 %804, ptr %45, align 8, !tbaa !14
  %805 = load i64, ptr %27, align 8, !tbaa !12
  %806 = icmp ult i64 0, %805
  br i1 %806, label %807, label %854

807:                                              ; preds = %799
  %808 = load ptr, ptr @stdout, align 8, !tbaa !9
  %809 = load i64, ptr %45, align 8, !tbaa !14
  %810 = uitofp i64 %809 to double
  %811 = load double, ptr %43, align 8, !tbaa !16
  %812 = fmul double %811, 0x41D0000000000000
  %813 = fdiv double %810, %812
  %814 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %808, ptr noundef @.str.10, double noundef %813) #8
  %815 = load i32, ptr %11, align 4, !tbaa !5
  %816 = icmp sge i32 0, %815
  br i1 %816, label %817, label %853

817:                                              ; preds = %807
  %818 = load i8, ptr %6, align 1, !tbaa !11
  %819 = sext i8 %818 to i32
  %820 = icmp eq i32 105, %819
  br i1 %820, label %825, label %821

821:                                              ; preds = %817
  %822 = load i8, ptr %6, align 1, !tbaa !11
  %823 = sext i8 %822 to i32
  %824 = icmp eq i32 73, %823
  br i1 %824, label %825, label %853

825:                                              ; preds = %821, %817
  %826 = load i32, ptr %14, align 4, !tbaa !5
  %827 = icmp sle i32 %826, 64
  br i1 %827, label %828, label %853

828:                                              ; preds = %825
  %829 = load i32, ptr %15, align 4, !tbaa !5
  %830 = icmp sle i32 %829, 64
  br i1 %830, label %831, label %853

831:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %832 = call i64 @libxsmm_timer_tick()
  store i64 %832, ptr %26, align 8, !tbaa !12
  %833 = load ptr, ptr %25, align 8, !tbaa !9
  %834 = load i32, ptr %14, align 4, !tbaa !5
  %835 = load i32, ptr %15, align 4, !tbaa !5
  %836 = load i32, ptr %16, align 4, !tbaa !5
  %837 = load i32, ptr %17, align 4, !tbaa !5
  call void @libxsmm_itrans_batch(ptr noundef %833, i32 noundef 8, i32 noundef %834, i32 noundef %835, i32 noundef %836, i32 noundef %837, i32 noundef 0, i32 noundef 0, ptr noundef null, i32 noundef 100, i32 noundef 0, i32 noundef 1)
  %838 = load i64, ptr %26, align 8, !tbaa !12
  %839 = call i64 @libxsmm_timer_tick()
  %840 = call double @libxsmm_timer_duration(i64 noundef %838, i64 noundef %839)
  store double %840, ptr %46, align 8, !tbaa !16
  %841 = load double, ptr %46, align 8, !tbaa !16
  %842 = fcmp olt double 0.000000e+00, %841
  br i1 %842, label %843, label %852

843:                                              ; preds = %831
  %844 = load ptr, ptr @stdout, align 8, !tbaa !9
  %845 = load i64, ptr %45, align 8, !tbaa !14
  %846 = mul i64 %845, 100
  %847 = uitofp i64 %846 to double
  %848 = load double, ptr %46, align 8, !tbaa !16
  %849 = fmul double %848, 0x41D0000000000000
  %850 = fdiv double %847, %849
  %851 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %844, ptr noundef @.str.11, double noundef %850) #8
  br label %852

852:                                              ; preds = %843, %831
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  br label %853

853:                                              ; preds = %852, %828, %825, %821, %807
  br label %854

854:                                              ; preds = %853, %799
  %855 = load i32, ptr %13, align 4, !tbaa !5
  %856 = icmp eq i32 0, %855
  br i1 %856, label %857, label %873

857:                                              ; preds = %854
  %858 = load ptr, ptr @stdout, align 8, !tbaa !9
  %859 = load double, ptr %43, align 8, !tbaa !16
  %860 = load i32, ptr %11, align 4, !tbaa !5
  %861 = icmp eq i32 0, %860
  br i1 %861, label %862, label %865

862:                                              ; preds = %857
  %863 = load i32, ptr %12, align 4, !tbaa !5
  %864 = add nsw i32 %863, 1
  br label %867

865:                                              ; preds = %857
  %866 = load i32, ptr %12, align 4, !tbaa !5
  br label %867

867:                                              ; preds = %865, %862
  %868 = phi i32 [ %864, %862 ], [ %866, %865 ]
  %869 = sitofp i32 %868 to double
  %870 = fdiv double %859, %869
  %871 = fmul double 1.000000e+03, %870
  %872 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %858, ptr noundef @.str.12, double noundef %871) #8
  br label %878

873:                                              ; preds = %854
  %874 = load ptr, ptr @stdout, align 8, !tbaa !9
  %875 = load double, ptr %43, align 8, !tbaa !16
  %876 = fmul double 1.000000e+03, %875
  %877 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %874, ptr noundef @.str.13, double noundef %876) #8
  br label %878

878:                                              ; preds = %873, %867
  %879 = load i64, ptr %28, align 8, !tbaa !12
  %880 = icmp ult i64 0, %879
  br i1 %880, label %881, label %890

881:                                              ; preds = %878
  %882 = load ptr, ptr @stdout, align 8, !tbaa !9
  %883 = load i64, ptr %27, align 8, !tbaa !12
  %884 = uitofp i64 %883 to double
  %885 = fmul double 1.000000e+00, %884
  %886 = load i64, ptr %28, align 8, !tbaa !12
  %887 = uitofp i64 %886 to double
  %888 = fdiv double %885, %887
  %889 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %882, ptr noundef @.str.14, double noundef %888) #8
  br label %890

890:                                              ; preds = %881, %878
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %906

891:                                              ; preds = %785
  %892 = load i32, ptr %23, align 4, !tbaa !5
  %893 = icmp ne i32 0, %892
  br i1 %893, label %894, label %905

894:                                              ; preds = %891
  %895 = load ptr, ptr @stderr, align 8, !tbaa !9
  %896 = load i32, ptr %14, align 4, !tbaa !5
  %897 = sext i32 %896 to i64
  %898 = load i32, ptr %15, align 4, !tbaa !5
  %899 = sext i32 %898 to i64
  %900 = load i32, ptr %16, align 4, !tbaa !5
  %901 = sext i32 %900 to i64
  %902 = load i32, ptr %17, align 4, !tbaa !5
  %903 = sext i32 %902 to i64
  %904 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %895, ptr noundef @.str.15, i64 noundef %897, i64 noundef %899, i64 noundef %901, i64 noundef %903) #8
  br label %905

905:                                              ; preds = %894, %891
  br label %906

906:                                              ; preds = %905, %890
  %907 = load ptr, ptr %24, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %907)
  %908 = load ptr, ptr %25, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %908)
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %915

909:                                              ; preds = %201
  %910 = load ptr, ptr @stderr, align 8, !tbaa !9
  %911 = load ptr, ptr %5, align 8, !tbaa !9
  %912 = getelementptr inbounds ptr, ptr %911, i64 0
  %913 = load ptr, ptr %912, align 8, !tbaa !9
  %914 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %910, ptr noundef @.str.16, ptr noundef %913) #8
  store i32 1, ptr %18, align 4, !tbaa !5
  br label %915

915:                                              ; preds = %909, %906
  %916 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %916, ptr %3, align 4
  store i32 1, ptr %37, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #8
  %917 = load i32, ptr %3, align 4
  ret i32 %917

918:                                              ; preds = %769, %576
  unreachable
}

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden noalias ptr @libxsmm_malloc(i64 noundef) #5

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @initial_value(i32 noundef, i32 noundef, i32 noundef) #5

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

; Function Attrs: nounwind
declare void @srand(i32 noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @libxsmm_timer_tick() #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @randstart(i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @libxsmm_otrans(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @libxsmm_itrans(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @libxsmm_timer_ncycles(i64 noundef, i64 noundef) #5

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @matrix_transpose(ptr noalias noundef, ptr noalias noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @libxsmm_timer_duration(i64 noundef, i64 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @libxsmm_itrans_batch(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @libxsmm_free(ptr noundef) #5

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 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"long long", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}


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

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [86 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = icmp sgt i32 %0, 1
  br i1 %3, label %4, label %.thread

4:                                                ; preds = %2
  %5 = getelementptr inbounds i8, ptr %1, i64 8
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = load i8, ptr %6, align 1, !tbaa !9
  %.not449 = icmp eq i32 %0, 2
  br i1 %.not449, label %.thread, label %8

8:                                                ; preds = %4
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = tail call i32 @atoi(ptr nocapture noundef %10) #10
  %.fr = freeze i32 %11
  %12 = icmp ugt i32 %0, 3
  br i1 %12, label %13, label %.thread405.thread

13:                                               ; preds = %8
  %14 = getelementptr inbounds i8, ptr %1, i64 24
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = tail call i32 @atoi(ptr nocapture noundef %15) #10
  %.not450 = icmp eq i32 %0, 4
  br i1 %.not450, label %.thread410, label %.thread405

.thread410:                                       ; preds = %13
  %.mux409 = tail call i32 @llvm.smax.i32(i32 %.fr, i32 0)
  br label %.thread

.thread405.thread:                                ; preds = %8
  %spec.select = tail call i32 @llvm.smax.i32(i32 %.fr, i32 0)
  br label %.thread

.thread405:                                       ; preds = %13
  %17 = getelementptr inbounds i8, ptr %1, i64 32
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = tail call i32 @atoi(ptr nocapture noundef %18) #10
  %20 = icmp slt i32 %19, %.fr
  %.mux = select i1 %20, i32 %.fr, i32 0
  br i1 %20, label %25, label %21

21:                                               ; preds = %.thread405
  %22 = getelementptr inbounds i8, ptr %1, i64 32
  %23 = load ptr, ptr %22, align 8, !tbaa !5
  %24 = tail call i32 @atoi(ptr nocapture noundef %23) #10
  br label %25

25:                                               ; preds = %.thread405, %21
  %26 = phi i32 [ %24, %21 ], [ %.mux, %.thread405 ]
  %27 = icmp ugt i32 %0, 5
  br i1 %27, label %28, label %.thread

28:                                               ; preds = %25
  %29 = getelementptr inbounds i8, ptr %1, i64 40
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = tail call i32 @atoi(ptr nocapture noundef %30) #10
  br label %.thread

.thread:                                          ; preds = %.thread405.thread, %4, %2, %.thread410, %25, %28
  %.not566 = phi i1 [ false, %28 ], [ true, %25 ], [ true, %.thread410 ], [ true, %2 ], [ true, %4 ], [ true, %.thread405.thread ]
  %32 = phi i32 [ %26, %28 ], [ %26, %25 ], [ %.mux409, %.thread410 ], [ 4096, %2 ], [ 4096, %4 ], [ %spec.select, %.thread405.thread ]
  %33 = phi i32 [ %16, %28 ], [ %16, %25 ], [ %16, %.thread410 ], [ 4096, %2 ], [ 4096, %4 ], [ %.fr, %.thread405.thread ]
  %34 = phi i8 [ %7, %28 ], [ %7, %25 ], [ %7, %.thread410 ], [ 111, %2 ], [ %7, %4 ], [ %7, %.thread405.thread ]
  %35 = phi i32 [ %.fr, %28 ], [ %.fr, %25 ], [ %.fr, %.thread410 ], [ 4096, %2 ], [ 4096, %4 ], [ %.fr, %.thread405.thread ]
  %36 = phi i32 [ %31, %28 ], [ 0, %25 ], [ 0, %.thread410 ], [ 0, %2 ], [ 0, %4 ], [ 0, %.thread405.thread ]
  %37 = sext i8 %34 to i32
  %38 = and i8 %34, -33
  %or.cond = icmp eq i8 %38, 79
  %39 = tail call i32 @llvm.smax.i32(i32 %33, i32 %32)
  %40 = select i1 %or.cond, i32 %33, i32 %39
  %41 = icmp slt i32 %36, %40
  %brmerge567 = or i1 %41, %.not566
  %.mux568 = select i1 %41, i32 %40, i32 0
  br i1 %brmerge567, label %46, label %42

42:                                               ; preds = %.thread
  %43 = getelementptr inbounds i8, ptr %1, i64 40
  %44 = load ptr, ptr %43, align 8, !tbaa !5
  %45 = tail call i32 @atoi(ptr nocapture noundef %44) #10
  br label %46

46:                                               ; preds = %.thread, %42
  %47 = phi i32 [ %45, %42 ], [ %.mux568, %.thread ]
  %48 = icmp sgt i32 %0, 6
  br i1 %48, label %49, label %.thread411

49:                                               ; preds = %46
  %50 = getelementptr inbounds i8, ptr %1, i64 48
  %51 = load ptr, ptr %50, align 8, !tbaa !5
  %52 = tail call i32 @atoi(ptr nocapture noundef %51) #10
  %53 = tail call i32 @llvm.abs.i32(i32 %52, i1 true)
  %.not451 = icmp eq i32 %0, 7
  br i1 %.not451, label %.thread411, label %54

54:                                               ; preds = %49
  %55 = getelementptr inbounds i8, ptr %1, i64 56
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = tail call i32 @atoi(ptr nocapture noundef %56) #10
  br label %.thread411

.thread411:                                       ; preds = %46, %49, %54
  %58 = phi i32 [ %53, %54 ], [ %53, %49 ], [ 0, %46 ]
  %59 = phi i32 [ %52, %54 ], [ %52, %49 ], [ 0, %46 ]
  %60 = phi i32 [ %57, %54 ], [ 0, %49 ], [ 0, %46 ]
  %61 = tail call ptr @strchr(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %37) #10
  %.not = icmp eq ptr %61, null
  br i1 %.not, label %271, label %62

62:                                               ; preds = %.thread411
  %63 = tail call ptr @getenv(ptr noundef nonnull @.str.1) #11
  %64 = tail call ptr @getenv(ptr noundef nonnull @.str.2) #11
  %65 = icmp eq ptr %64, null
  br i1 %65, label %71, label %66

66:                                               ; preds = %62
  %67 = load i8, ptr %64, align 1, !tbaa !9
  %68 = icmp eq i8 %67, 0
  br i1 %68, label %71, label %69

69:                                               ; preds = %66
  %70 = tail call i32 @atoi(ptr nocapture noundef %64) #10
  br label %71

71:                                               ; preds = %62, %66, %69
  %72 = phi i32 [ %70, %69 ], [ 1, %66 ], [ 1, %62 ]
  %73 = sext i32 %32 to i64
  %74 = select i1 %or.cond, i32 %33, i32 %47
  %75 = sext i32 %74 to i64
  %76 = shl nsw i64 %73, 3
  %77 = mul i64 %76, %75
  %78 = tail call noalias ptr @libxsmm_malloc(i64 noundef %77)
  %79 = sext i32 %47 to i64
  %80 = select i1 %or.cond, i32 %35, i32 %32
  %81 = sext i32 %80 to i64
  %82 = shl nsw i64 %81, 3
  %83 = mul i64 %82, %79
  %84 = tail call noalias ptr @libxsmm_malloc(i64 noundef %83)
  %85 = load ptr, ptr @stdout, align 8, !tbaa !5
  %86 = sext i32 %35 to i64
  %87 = sext i32 %33 to i64
  %88 = shl nsw i64 %87, 3
  %89 = mul i64 %88, %86
  %90 = uitofp i64 %89 to double
  %91 = fmul double %90, 0x3EB0000000000000
  %92 = select i1 %or.cond, ptr @.str.5, ptr @.str.6
  %93 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %85, ptr noundef nonnull @.str.3, i64 noundef %86, i64 noundef %87, i64 noundef %73, i64 noundef %79, double noundef %91, ptr noundef nonnull @.str.4, ptr noundef nonnull %92) #11
  %94 = icmp sgt i32 %33, 0
  %95 = icmp sgt i32 %35, 0
  %or.cond569 = and i1 %94, %95
  br i1 %or.cond569, label %.preheader457.us.preheader, label %._crit_edge473

.preheader457.us.preheader:                       ; preds = %71
  %wide.trip.count529 = zext nneg i32 %33 to i64
  %wide.trip.count = zext nneg i32 %35 to i64
  br label %.preheader457.us

.preheader457.us:                                 ; preds = %.preheader457.us.preheader, %._crit_edge.us
  %indvars.iv526 = phi i64 [ 0, %.preheader457.us.preheader ], [ %indvars.iv.next527, %._crit_edge.us ]
  %96 = mul nsw i64 %indvars.iv526, %73
  %97 = trunc nuw nsw i64 %indvars.iv526 to i32
  %invariant.gep = getelementptr double, ptr %78, i64 %96
  br label %98

98:                                               ; preds = %.preheader457.us, %98
  %indvars.iv = phi i64 [ 0, %.preheader457.us ], [ %indvars.iv.next, %98 ]
  %99 = trunc nuw nsw i64 %indvars.iv to i32
  %100 = tail call double @initial_value(i32 noundef %97, i32 noundef %99, i32 noundef %35)
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  store double %100, ptr %gep, align 8, !tbaa !10
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %98, !llvm.loop !12

._crit_edge.us:                                   ; preds = %98
  %indvars.iv.next527 = add nuw nsw i64 %indvars.iv526, 1
  %exitcond530.not = icmp eq i64 %indvars.iv.next527, %wide.trip.count529
  br i1 %exitcond530.not, label %._crit_edge473, label %.preheader457.us, !llvm.loop !14

._crit_edge473:                                   ; preds = %._crit_edge.us, %71
  %.not395 = icmp ne i32 %72, 0
  br i1 %.not395, label %105, label %101

101:                                              ; preds = %._crit_edge473
  %102 = tail call i64 @libxsmm_timer_tick()
  %103 = urem i64 %102, 4294967295
  %104 = trunc nuw i64 %103 to i32
  br label %105

105:                                              ; preds = %._crit_edge473, %101
  %.sink = phi i32 [ %104, %101 ], [ 25071975, %._crit_edge473 ]
  tail call void @srand(i32 noundef %.sink) #11
  %106 = icmp eq i32 %59, 0
  %107 = sext i1 %106 to i32
  %108 = icmp sgt i32 %58, %107
  br i1 %108, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %105
  %109 = icmp sgt i32 %59, 0
  %110 = icmp sgt i32 %60, -1
  %111 = tail call i32 @llvm.abs.i32(i32 %60, i1 true)
  %or.cond20 = icmp eq i8 %38, 73
  br label %112

112:                                              ; preds = %.lr.ph, %.loopexit456
  %.0487 = phi i32 [ %35, %.lr.ph ], [ %.1421, %.loopexit456 ]
  %.0334486 = phi i32 [ %33, %.lr.ph ], [ %.1335419, %.loopexit456 ]
  %.0339485 = phi i32 [ %32, %.lr.ph ], [ %.2341, %.loopexit456 ]
  %.0345484 = phi i32 [ %47, %.lr.ph ], [ %.2347, %.loopexit456 ]
  %.0361483 = phi i32 [ %107, %.lr.ph ], [ %166, %.loopexit456 ]
  %.0365482 = phi i64 [ 0, %.lr.ph ], [ %.1366, %.loopexit456 ]
  %.0380481 = phi i64 [ 0, %.lr.ph ], [ %148, %.loopexit456 ]
  br i1 %109, label %113, label %129

113:                                              ; preds = %112
  br i1 %110, label %114, label %117

114:                                              ; preds = %113
  %115 = tail call i32 @randstart(i32 noundef %60, i32 noundef %32)
  %116 = tail call i32 @randstart(i32 noundef %60, i32 noundef %47)
  br label %117

117:                                              ; preds = %113, %114
  %118 = phi i32 [ %115, %114 ], [ 0, %113 ]
  %119 = phi i32 [ %116, %114 ], [ 0, %113 ]
  %120 = tail call i32 @randstart(i32 noundef %111, i32 noundef %35)
  %121 = tail call i32 @llvm.smax.i32(i32 %118, i32 %120)
  %122 = tail call i32 @randstart(i32 noundef %111, i32 noundef %33)
  %123 = tail call i32 @llvm.smax.i32(i32 %119, i32 %122)
  %124 = sext i32 %120 to i64
  %125 = shl nsw i64 %124, 3
  %126 = sext i32 %122 to i64
  %127 = mul i64 %125, %126
  %128 = add i64 %127, %.0380481
  br i1 %or.cond, label %.thread413, label %.thread422

.thread413:                                       ; preds = %117
  tail call void @libxsmm_otrans(ptr noundef %84, ptr noundef %78, i32 noundef 8, i32 noundef %120, i32 noundef %122, i32 noundef %121, i32 noundef %123)
  br label %135

.thread422:                                       ; preds = %117
  tail call void @libxsmm_itrans(ptr noundef %84, i32 noundef 8, i32 noundef %120, i32 noundef %122, i32 noundef %121, i32 noundef %123)
  br label %138

129:                                              ; preds = %112
  %130 = sext i32 %.0487 to i64
  %131 = sext i32 %.0334486 to i64
  %132 = shl nsw i64 %131, 3
  %133 = mul i64 %132, %130
  %134 = add i64 %133, %.0380481
  br i1 %or.cond, label %135, label %138

135:                                              ; preds = %.thread413, %129
  %136 = phi i64 [ %128, %.thread413 ], [ %134, %129 ]
  %.1420 = phi i32 [ %120, %.thread413 ], [ %.0487, %129 ]
  %.1335418 = phi i32 [ %122, %.thread413 ], [ %.0334486, %129 ]
  %137 = tail call i64 @libxsmm_timer_tick()
  tail call void @libxsmm_otrans(ptr noundef %84, ptr noundef %78, i32 noundef 8, i32 noundef %.1420, i32 noundef %.1335418, i32 noundef %.1420, i32 noundef %.1335418)
  br label %147

138:                                              ; preds = %.thread422, %129
  %139 = phi i64 [ %128, %.thread422 ], [ %134, %129 ]
  %140 = phi i64 [ %126, %.thread422 ], [ %131, %129 ]
  %.1430 = phi i32 [ %120, %.thread422 ], [ %.0487, %129 ]
  %.1335429 = phi i32 [ %122, %.thread422 ], [ %.0334486, %129 ]
  %.1340428 = phi i32 [ %121, %.thread422 ], [ %.0339485, %129 ]
  %.1346427 = phi i32 [ %123, %.thread422 ], [ %.0345484, %129 ]
  br i1 %or.cond20, label %142, label %141

141:                                              ; preds = %138
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 196, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #12
  unreachable

142:                                              ; preds = %138
  %143 = sext i32 %.1340428 to i64
  %144 = shl nsw i64 %140, 3
  %145 = mul i64 %144, %143
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %84, ptr align 8 %78, i64 %145, i1 false)
  %146 = tail call i64 @libxsmm_timer_tick()
  tail call void @libxsmm_itrans(ptr noundef %84, i32 noundef 8, i32 noundef %.1430, i32 noundef %.1335429, i32 noundef %.1340428, i32 noundef %.1346427)
  br label %147

147:                                              ; preds = %142, %135
  %.sink570 = phi i64 [ %146, %142 ], [ %137, %135 ]
  %148 = phi i64 [ %139, %142 ], [ %136, %135 ]
  %.1421 = phi i32 [ %.1430, %142 ], [ %.1420, %135 ]
  %.1335419 = phi i32 [ %.1335429, %142 ], [ %.1335418, %135 ]
  %.2347 = phi i32 [ %.1346427, %142 ], [ %.1335418, %135 ]
  %.2341 = phi i32 [ %.1340428, %142 ], [ %.1420, %135 ]
  %149 = tail call i64 @libxsmm_timer_tick()
  %150 = tail call i64 @libxsmm_timer_ncycles(i64 noundef %.sink570, i64 noundef %149)
  %.1366 = add i64 %150, %.0365482
  %151 = icmp sgt i32 %.1421, 0
  %or.cond520 = select i1 %.not395, i1 %151, i1 false
  %152 = icmp sgt i32 %.1335419, 0
  %or.cond572 = select i1 %or.cond520, i1 %152, i1 false
  br i1 %or.cond572, label %.preheader454.us.preheader, label %.loopexit456

.preheader454.us.preheader:                       ; preds = %147
  %153 = sext i32 %.2341 to i64
  %wide.trip.count534 = zext nneg i32 %.1335419 to i64
  br label %.preheader454.us

.preheader454.us:                                 ; preds = %.preheader454.us.preheader, %..split.loop.exit474_crit_edge.us
  %.1353480.us = phi i32 [ %.4356.us, %..split.loop.exit474_crit_edge.us ], [ 0, %.preheader454.us.preheader ]
  %.1372479.us = phi i32 [ %163, %..split.loop.exit474_crit_edge.us ], [ 0, %.preheader454.us.preheader ]
  %154 = mul nsw i32 %.1372479.us, %.2347
  %155 = sext i32 %154 to i64
  %156 = sext i32 %.1372479.us to i64
  %invariant.gep558 = getelementptr double, ptr %84, i64 %155
  %invariant.gep560 = getelementptr double, ptr %78, i64 %156
  br label %158

157:                                              ; preds = %158
  %indvars.iv.next532 = add nuw nsw i64 %indvars.iv531, 1
  %exitcond535.not = icmp eq i64 %indvars.iv.next532, %wide.trip.count534
  br i1 %exitcond535.not, label %..split.loop.exit474_crit_edge.us, label %158, !llvm.loop !15

158:                                              ; preds = %.preheader454.us, %157
  %indvars.iv531 = phi i64 [ 0, %.preheader454.us ], [ %indvars.iv.next532, %157 ]
  %gep559 = getelementptr double, ptr %invariant.gep558, i64 %indvars.iv531
  %159 = load double, ptr %gep559, align 8, !tbaa !10
  %160 = mul nsw i64 %indvars.iv531, %153
  %gep561 = getelementptr double, ptr %invariant.gep560, i64 %160
  %161 = load double, ptr %gep561, align 8, !tbaa !10
  %162 = fcmp une double %159, %161
  br i1 %162, label %.split.loop.exit.us, label %157

..split.loop.exit474_crit_edge.us:                ; preds = %157, %.split.loop.exit.us
  %.4375.us = phi i32 [ %165, %.split.loop.exit.us ], [ %.1372479.us, %157 ]
  %.4356.us = phi i32 [ 1, %.split.loop.exit.us ], [ %.1353480.us, %157 ]
  %163 = add nsw i32 %.4375.us, 1
  %164 = icmp slt i32 %163, %.1421
  br i1 %164, label %.preheader454.us, label %.loopexit456, !llvm.loop !16

.split.loop.exit.us:                              ; preds = %158
  %165 = add nsw i32 %.1372479.us, %.1421
  br label %..split.loop.exit474_crit_edge.us

.loopexit456:                                     ; preds = %..split.loop.exit474_crit_edge.us, %147
  %.5357 = phi i32 [ 0, %147 ], [ %.4356.us, %..split.loop.exit474_crit_edge.us ]
  %166 = add nsw i32 %.0361483, 1
  %167 = icmp slt i32 %166, %58
  %168 = icmp eq i32 %.5357, 0
  %169 = select i1 %167, i1 %168, i1 false
  br i1 %169, label %112, label %._crit_edge, !llvm.loop !17

._crit_edge:                                      ; preds = %.loopexit456, %105
  %.0380.lcssa = phi i64 [ 0, %105 ], [ %148, %.loopexit456 ]
  %.0365.lcssa = phi i64 [ 0, %105 ], [ %.1366, %.loopexit456 ]
  %.0352.lcssa = phi i32 [ 0, %105 ], [ %.5357, %.loopexit456 ]
  %.0345.lcssa = phi i32 [ %47, %105 ], [ %.2347, %.loopexit456 ]
  %.0339.lcssa = phi i32 [ %32, %105 ], [ %.2341, %.loopexit456 ]
  %.0334.lcssa = phi i32 [ %33, %105 ], [ %.1335419, %.loopexit456 ]
  %.0.lcssa = phi i32 [ %35, %105 ], [ %.1421, %.loopexit456 ]
  %170 = icmp sgt i32 %72, 0
  br i1 %170, label %171, label %.loopexit453

171:                                              ; preds = %._crit_edge
  tail call void @srand(i32 noundef 25071975) #11
  %172 = icmp eq i32 %.0352.lcssa, 0
  %173 = select i1 %108, i1 %172, i1 false
  br i1 %173, label %.lr.ph513, label %.loopexit453

.lr.ph513:                                        ; preds = %171
  %174 = icmp sgt i32 %59, 0
  %175 = icmp sgt i32 %60, -1
  %176 = tail call i32 @llvm.abs.i32(i32 %60, i1 true)
  %or.cond29 = icmp eq i8 %38, 73
  %.not398 = icmp ne i32 %72, 1
  br label %177

177:                                              ; preds = %.lr.ph513, %.loopexit
  %.2511 = phi i32 [ %.0.lcssa, %.lr.ph513 ], [ %.3439, %.loopexit ]
  %.2336510 = phi i32 [ %.0334.lcssa, %.lr.ph513 ], [ %.4338437, %.loopexit ]
  %.3342509 = phi i32 [ %.0339.lcssa, %.lr.ph513 ], [ %.5344, %.loopexit ]
  %.3348508 = phi i32 [ %.0345.lcssa, %.lr.ph513 ], [ %.6351, %.loopexit ]
  %.1362507 = phi i32 [ %107, %.lr.ph513 ], [ %217, %.loopexit ]
  %.0367506 = phi i64 [ 0, %.lr.ph513 ], [ %.1368, %.loopexit ]
  br i1 %174, label %178, label %191

178:                                              ; preds = %177
  br i1 %175, label %179, label %.thread546

179:                                              ; preds = %178
  %180 = tail call i32 @randstart(i32 noundef %60, i32 noundef %32)
  %181 = tail call i32 @randstart(i32 noundef %176, i32 noundef %35)
  br i1 %or.cond, label %183, label %.thread440

.thread546:                                       ; preds = %178
  %182 = tail call i32 @randstart(i32 noundef %176, i32 noundef %35)
  br i1 %or.cond, label %.thread431, label %.thread440

183:                                              ; preds = %179
  %184 = tail call i32 @randstart(i32 noundef %60, i32 noundef %47)
  br label %.thread431

.thread431:                                       ; preds = %.thread546, %183
  %185 = phi i32 [ %181, %183 ], [ %182, %.thread546 ]
  %186 = tail call i32 @randstart(i32 noundef %176, i32 noundef %33)
  br label %192

.thread440:                                       ; preds = %.thread546, %179
  %187 = phi i32 [ %182, %.thread546 ], [ %181, %179 ]
  %188 = phi i32 [ 0, %.thread546 ], [ %180, %179 ]
  %189 = tail call i32 @llvm.smax.i32(i32 %188, i32 %187)
  %190 = tail call i32 @randstart(i32 noundef %176, i32 noundef %33)
  br label %212

191:                                              ; preds = %177
  br i1 %or.cond, label %192, label %212

192:                                              ; preds = %.thread431, %191
  %.3438 = phi i32 [ %185, %.thread431 ], [ %.2511, %191 ]
  %.4338436 = phi i32 [ %186, %.thread431 ], [ %.2336510, %191 ]
  %193 = tail call i64 @libxsmm_timer_tick()
  tail call void @matrix_transpose(ptr noundef %84, ptr noundef %78, i32 noundef %.3438, i32 noundef %.4338436)
  %194 = tail call i64 @libxsmm_timer_tick()
  %195 = tail call i64 @libxsmm_timer_ncycles(i64 noundef %193, i64 noundef %194)
  %196 = add i64 %195, %.0367506
  %197 = icmp sgt i32 %.3438, 0
  %or.cond521 = select i1 %.not398, i1 %197, i1 false
  %198 = icmp sgt i32 %.4338436, 0
  %or.cond573 = select i1 %or.cond521, i1 %198, i1 false
  br i1 %or.cond573, label %.preheader.us.preheader, label %.loopexit

.preheader.us.preheader:                          ; preds = %192
  %199 = zext nneg i32 %.3438 to i64
  %wide.trip.count539 = zext nneg i32 %.4338436 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %..split.loop.exit494_crit_edge.us
  %.7359502.us = phi i32 [ %.10.us, %..split.loop.exit494_crit_edge.us ], [ 0, %.preheader.us.preheader ]
  %.5376501.us = phi i32 [ %209, %..split.loop.exit494_crit_edge.us ], [ 0, %.preheader.us.preheader ]
  %200 = mul nsw i32 %.5376501.us, %.4338436
  %201 = sext i32 %200 to i64
  %202 = sext i32 %.5376501.us to i64
  %invariant.gep562 = getelementptr double, ptr %84, i64 %201
  %invariant.gep564 = getelementptr double, ptr %78, i64 %202
  br label %204

203:                                              ; preds = %204
  %indvars.iv.next537 = add nuw nsw i64 %indvars.iv536, 1
  %exitcond540.not = icmp eq i64 %indvars.iv.next537, %wide.trip.count539
  br i1 %exitcond540.not, label %..split.loop.exit494_crit_edge.us, label %204, !llvm.loop !18

204:                                              ; preds = %.preheader.us, %203
  %indvars.iv536 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next537, %203 ]
  %gep563 = getelementptr double, ptr %invariant.gep562, i64 %indvars.iv536
  %205 = load double, ptr %gep563, align 8, !tbaa !10
  %206 = mul nuw nsw i64 %indvars.iv536, %199
  %gep565 = getelementptr double, ptr %invariant.gep564, i64 %206
  %207 = load double, ptr %gep565, align 8, !tbaa !10
  %208 = fcmp une double %205, %207
  br i1 %208, label %.split.loop.exit.us504, label %203

..split.loop.exit494_crit_edge.us:                ; preds = %203, %.split.loop.exit.us504
  %.8379.us = phi i32 [ %211, %.split.loop.exit.us504 ], [ %.5376501.us, %203 ]
  %.10.us = phi i32 [ 1, %.split.loop.exit.us504 ], [ %.7359502.us, %203 ]
  %209 = add nsw i32 %.8379.us, 1
  %210 = icmp slt i32 %209, %.3438
  br i1 %210, label %.preheader.us, label %.loopexit, !llvm.loop !19

.split.loop.exit.us504:                           ; preds = %204
  %211 = add nsw i32 %.5376501.us, %.3438
  br label %..split.loop.exit494_crit_edge.us

212:                                              ; preds = %.thread440, %191
  %.3448 = phi i32 [ %187, %.thread440 ], [ %.2511, %191 ]
  %.4338447 = phi i32 [ %190, %.thread440 ], [ %.2336510, %191 ]
  %.4343446 = phi i32 [ %189, %.thread440 ], [ %.3342509, %191 ]
  %.5350445 = phi i32 [ %189, %.thread440 ], [ %.3348508, %191 ]
  br i1 %or.cond29, label %214, label %213

213:                                              ; preds = %212
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 260, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #12
  unreachable

214:                                              ; preds = %212
  %215 = load ptr, ptr @stderr, align 8, !tbaa !5
  %216 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef nonnull @.str.9) #13
  br label %.loopexit

.loopexit:                                        ; preds = %..split.loop.exit494_crit_edge.us, %192, %214
  %.3439 = phi i32 [ %.3438, %192 ], [ %.3448, %214 ], [ %.3438, %..split.loop.exit494_crit_edge.us ]
  %.4338437 = phi i32 [ %.4338436, %192 ], [ %.4338447, %214 ], [ %.4338436, %..split.loop.exit494_crit_edge.us ]
  %.1368 = phi i64 [ %196, %192 ], [ %.0367506, %214 ], [ %196, %..split.loop.exit494_crit_edge.us ]
  %.11 = phi i32 [ 0, %192 ], [ 0, %214 ], [ %.10.us, %..split.loop.exit494_crit_edge.us ]
  %.6351 = phi i32 [ %.4338436, %192 ], [ %.5350445, %214 ], [ %.4338436, %..split.loop.exit494_crit_edge.us ]
  %.5344 = phi i32 [ %.3438, %192 ], [ %.4343446, %214 ], [ %.3438, %..split.loop.exit494_crit_edge.us ]
  %217 = add nsw i32 %.1362507, 1
  %218 = icmp slt i32 %217, %58
  %219 = icmp eq i32 %.11, 0
  %220 = select i1 %218, i1 %219, i1 false
  br i1 %220, label %177, label %.loopexit453, !llvm.loop !20

.loopexit453:                                     ; preds = %.loopexit, %171, %._crit_edge
  %.2369 = phi i64 [ 0, %._crit_edge ], [ 0, %171 ], [ %.1368, %.loopexit ]
  %.12 = phi i32 [ %.0352.lcssa, %._crit_edge ], [ %.0352.lcssa, %171 ], [ %.11, %.loopexit ]
  %.7 = phi i32 [ %.0345.lcssa, %._crit_edge ], [ %.0345.lcssa, %171 ], [ %.6351, %.loopexit ]
  %.6 = phi i32 [ %.0339.lcssa, %._crit_edge ], [ %.0339.lcssa, %171 ], [ %.5344, %.loopexit ]
  %.5 = phi i32 [ %.0334.lcssa, %._crit_edge ], [ %.0334.lcssa, %171 ], [ %.4338437, %.loopexit ]
  %.4 = phi i32 [ %.0.lcssa, %._crit_edge ], [ %.0.lcssa, %171 ], [ %.3439, %.loopexit ]
  %221 = icmp eq i32 %.12, 0
  br i1 %221, label %222, label %262

222:                                              ; preds = %.loopexit453
  %223 = tail call double @libxsmm_timer_duration(i64 noundef 0, i64 noundef %.0365.lcssa)
  %224 = select i1 %or.cond, i64 3, i64 2
  %225 = mul i64 %.0380.lcssa, %224
  %.not396 = icmp eq i64 %.0365.lcssa, 0
  br i1 %.not396, label %248, label %226

226:                                              ; preds = %222
  %227 = load ptr, ptr @stdout, align 8, !tbaa !5
  %228 = uitofp i64 %225 to double
  %229 = fmul double %223, 0x41D0000000000000
  %230 = fdiv double %228, %229
  %231 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %227, ptr noundef nonnull @.str.10, double noundef %230) #11
  %232 = icmp slt i32 %59, 1
  br i1 %232, label %233, label %248

233:                                              ; preds = %226
  %or.cond34 = icmp eq i8 %38, 73
  %234 = icmp slt i32 %.4, 65
  %or.cond36 = select i1 %or.cond34, i1 %234, i1 false
  %235 = icmp slt i32 %.5, 65
  %or.cond38 = select i1 %or.cond36, i1 %235, i1 false
  br i1 %or.cond38, label %236, label %248

236:                                              ; preds = %233
  %237 = tail call i64 @libxsmm_timer_tick()
  tail call void @libxsmm_itrans_batch(ptr noundef %84, i32 noundef 8, i32 noundef %.4, i32 noundef %.5, i32 noundef %.6, i32 noundef %.7, i32 noundef 0, i32 noundef 0, ptr noundef null, i32 noundef 100, i32 noundef 0, i32 noundef 1)
  %238 = tail call i64 @libxsmm_timer_tick()
  %239 = tail call double @libxsmm_timer_duration(i64 noundef %237, i64 noundef %238)
  %240 = fcmp ogt double %239, 0.000000e+00
  br i1 %240, label %241, label %248

241:                                              ; preds = %236
  %242 = load ptr, ptr @stdout, align 8, !tbaa !5
  %243 = mul i64 %225, 100
  %244 = uitofp i64 %243 to double
  %245 = fmul double %239, 0x41D0000000000000
  %246 = fdiv double %244, %245
  %247 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef nonnull @.str.11, double noundef %246) #11
  br label %248

248:                                              ; preds = %236, %241, %226, %233, %222
  %249 = icmp eq i32 %60, 0
  %250 = load ptr, ptr @stdout, align 8, !tbaa !5
  %251 = select i1 %106, i32 1, i32 %58
  %252 = uitofp nneg i32 %251 to double
  %253 = fdiv double %223, %252
  %.sink575 = select i1 %249, double %253, double %223
  %.str.13.sink = select i1 %249, ptr @.str.12, ptr @.str.13
  %254 = fmul double %.sink575, 1.000000e+03
  %255 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %250, ptr noundef nonnull %.str.13.sink, double noundef %254) #11
  %.not397 = icmp eq i64 %.2369, 0
  br i1 %.not397, label %270, label %256

256:                                              ; preds = %248
  %257 = load ptr, ptr @stdout, align 8, !tbaa !5
  %258 = uitofp i64 %.0365.lcssa to double
  %259 = uitofp i64 %.2369 to double
  %260 = fdiv double %258, %259
  %261 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef nonnull @.str.14, double noundef %260) #11
  br label %270

262:                                              ; preds = %.loopexit453
  br i1 %.not395, label %263, label %270

263:                                              ; preds = %262
  %264 = load ptr, ptr @stderr, align 8, !tbaa !5
  %265 = sext i32 %.4 to i64
  %266 = sext i32 %.5 to i64
  %267 = sext i32 %.6 to i64
  %268 = sext i32 %.7 to i64
  %269 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %264, ptr noundef nonnull @.str.15, i64 noundef %265, i64 noundef %266, i64 noundef %267, i64 noundef %268) #13
  br label %270

270:                                              ; preds = %248, %256, %262, %263
  tail call void @libxsmm_free(ptr noundef %78)
  tail call void @libxsmm_free(ptr noundef %84)
  br label %275

271:                                              ; preds = %.thread411
  %272 = load ptr, ptr @stderr, align 8, !tbaa !5
  %273 = load ptr, ptr %1, align 8, !tbaa !5
  %274 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %272, ptr noundef nonnull @.str.16, ptr noundef %273) #13
  br label %275

275:                                              ; preds = %271, %270
  %.13 = phi i32 [ %.12, %270 ], [ 1, %271 ]
  ret i32 %.13
}

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden noalias ptr @libxsmm_malloc(i64 noundef) local_unnamed_addr #4

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

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

; Function Attrs: nounwind
declare void @srand(i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @libxsmm_timer_tick() local_unnamed_addr #4

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

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

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @libxsmm_timer_duration(i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #9

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #9

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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #2 = { 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 #3 = { 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 #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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind }
attributes #12 = { noreturn nounwind }
attributes #13 = { 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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}


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