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

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

%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%struct.libxsmm_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [91 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_elementwise_reduce_kernel = external hidden unnamed_addr constant [102 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #0

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

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

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

declare i32 @libxsmm_meltw_getenum_precision(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_elementwise_reduce_kernel(ptr noundef %0, ptr noundef %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %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 ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i64, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 1, !tbaa !9
  store i32 %62, ptr %5, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %63, i32 0, i32 1
  %65 = load i32, ptr %64, align 1, !tbaa !14
  store i32 %65, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %66, i32 0, i32 2
  %68 = load i32, ptr %67, align 1, !tbaa !15
  store i32 %68, ptr %7, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %69, i32 0, i32 3
  %71 = load i32, ptr %70, align 1, !tbaa !16
  store i32 %71, ptr %8, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %72, i32 noundef 0)
  store i32 %73, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %74, i32 noundef 3)
  store i32 %75, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %76, i32 0, i32 9
  %78 = load i16, ptr %77, align 1, !tbaa !17
  %79 = zext i16 %78 to i32
  %80 = and i32 %79, 32
  %81 = icmp sgt i32 %80, 0
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 1, i32 0
  store i32 %83, ptr %11, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %84 = load i32, ptr %11, align 4, !tbaa !13
  %85 = icmp eq i32 %84, 1
  br i1 %85, label %86, label %88

86:                                               ; preds = %2
  %87 = load i32, ptr %6, align 4, !tbaa !13
  br label %90

88:                                               ; preds = %2
  %89 = load i32, ptr %8, align 4, !tbaa !13
  br label %90

90:                                               ; preds = %88, %86
  %91 = phi i32 [ %87, %86 ], [ %89, %88 ]
  store i32 %91, ptr %12, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %92 = load ptr, ptr %3, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %92, i32 0, i32 1
  %94 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %93, i32 0, i32 0
  %95 = load ptr, ptr %94, align 8, !tbaa !18
  store ptr %95, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %96, i32 0, i32 2
  %98 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %97, i32 0, i32 0
  %99 = load ptr, ptr %98, align 8, !tbaa !22
  store ptr %99, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %100 = load ptr, ptr %14, align 8, !tbaa !5
  %101 = load i32, ptr %12, align 4, !tbaa !13
  %102 = load i32, ptr %10, align 4, !tbaa !13
  %103 = icmp eq i32 0, %102
  br i1 %103, label %104, label %105

104:                                              ; preds = %90
  br label %185

105:                                              ; preds = %90
  %106 = load i32, ptr %10, align 4, !tbaa !13
  %107 = icmp eq i32 1, %106
  br i1 %107, label %108, label %109

108:                                              ; preds = %105
  br label %183

109:                                              ; preds = %105
  %110 = load i32, ptr %10, align 4, !tbaa !13
  %111 = icmp eq i32 2, %110
  br i1 %111, label %112, label %113

112:                                              ; preds = %109
  br label %181

113:                                              ; preds = %109
  %114 = load i32, ptr %10, align 4, !tbaa !13
  %115 = icmp eq i32 3, %114
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  br label %179

117:                                              ; preds = %113
  %118 = load i32, ptr %10, align 4, !tbaa !13
  %119 = icmp eq i32 4, %118
  br i1 %119, label %120, label %121

120:                                              ; preds = %117
  br label %177

121:                                              ; preds = %117
  %122 = load i32, ptr %10, align 4, !tbaa !13
  %123 = icmp eq i32 5, %122
  br i1 %123, label %124, label %125

124:                                              ; preds = %121
  br label %175

125:                                              ; preds = %121
  %126 = load i32, ptr %10, align 4, !tbaa !13
  %127 = icmp eq i32 6, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %125
  br label %173

129:                                              ; preds = %125
  %130 = load i32, ptr %10, align 4, !tbaa !13
  %131 = icmp eq i32 7, %130
  br i1 %131, label %132, label %133

132:                                              ; preds = %129
  br label %171

133:                                              ; preds = %129
  %134 = load i32, ptr %10, align 4, !tbaa !13
  %135 = icmp eq i32 8, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %133
  br label %169

137:                                              ; preds = %133
  %138 = load i32, ptr %10, align 4, !tbaa !13
  %139 = icmp eq i32 9, %138
  br i1 %139, label %140, label %141

140:                                              ; preds = %137
  br label %167

141:                                              ; preds = %137
  %142 = load i32, ptr %10, align 4, !tbaa !13
  %143 = icmp eq i32 10, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %141
  br label %165

145:                                              ; preds = %141
  %146 = load i32, ptr %10, align 4, !tbaa !13
  %147 = icmp eq i32 11, %146
  br i1 %147, label %148, label %149

148:                                              ; preds = %145
  br label %163

149:                                              ; preds = %145
  %150 = load i32, ptr %10, align 4, !tbaa !13
  %151 = icmp eq i32 12, %150
  br i1 %151, label %152, label %153

152:                                              ; preds = %149
  br label %161

153:                                              ; preds = %149
  %154 = load i32, ptr %10, align 4, !tbaa !13
  %155 = icmp eq i32 13, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %153
  br label %159

157:                                              ; preds = %153
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 1076, ptr noundef @__PRETTY_FUNCTION__.libxsmm_elementwise_reduce_kernel) #8
  unreachable

158:                                              ; No predecessors!
  br label %159

159:                                              ; preds = %158, %156
  %160 = phi i32 [ 1, %156 ], [ 0, %158 ]
  br label %161

161:                                              ; preds = %159, %152
  %162 = phi i32 [ 1, %152 ], [ %160, %159 ]
  br label %163

163:                                              ; preds = %161, %148
  %164 = phi i32 [ 2, %148 ], [ %162, %161 ]
  br label %165

165:                                              ; preds = %163, %144
  %166 = phi i32 [ 2, %144 ], [ %164, %163 ]
  br label %167

167:                                              ; preds = %165, %140
  %168 = phi i32 [ 4, %140 ], [ %166, %165 ]
  br label %169

169:                                              ; preds = %167, %136
  %170 = phi i32 [ 4, %136 ], [ %168, %167 ]
  br label %171

171:                                              ; preds = %169, %132
  %172 = phi i32 [ 8, %132 ], [ %170, %169 ]
  br label %173

173:                                              ; preds = %171, %128
  %174 = phi i32 [ 8, %128 ], [ %172, %171 ]
  br label %175

175:                                              ; preds = %173, %124
  %176 = phi i32 [ 1, %124 ], [ %174, %173 ]
  br label %177

177:                                              ; preds = %175, %120
  %178 = phi i32 [ 1, %120 ], [ %176, %175 ]
  br label %179

179:                                              ; preds = %177, %116
  %180 = phi i32 [ 2, %116 ], [ %178, %177 ]
  br label %181

181:                                              ; preds = %179, %112
  %182 = phi i32 [ 2, %112 ], [ %180, %179 ]
  br label %183

183:                                              ; preds = %181, %108
  %184 = phi i32 [ 4, %108 ], [ %182, %181 ]
  br label %185

185:                                              ; preds = %183, %104
  %186 = phi i32 [ 8, %104 ], [ %184, %183 ]
  %187 = mul nsw i32 %101, %186
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i8, ptr %100, i64 %188
  store ptr %189, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %190, i32 0, i32 1
  %192 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %191, i32 0, i32 1
  %193 = load ptr, ptr %192, align 8, !tbaa !23
  store ptr %193, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %194, i32 0, i32 2
  %196 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %195, i32 0, i32 1
  %197 = load ptr, ptr %196, align 8, !tbaa !24
  store ptr %197, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store i32 0, ptr %21, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %198 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %198, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %199 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %199, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %200 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %200, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %201, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %202, i32 0, i32 9
  %204 = load i16, ptr %203, align 1, !tbaa !17
  %205 = zext i16 %204 to i32
  %206 = and i32 %205, 64
  %207 = icmp sgt i32 %206, 0
  %208 = zext i1 %207 to i64
  %209 = select i1 %207, i32 1, i32 0
  store i32 %209, ptr %26, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %210, i32 0, i32 9
  %212 = load i16, ptr %211, align 1, !tbaa !17
  %213 = zext i16 %212 to i32
  %214 = and i32 %213, 2048
  %215 = icmp sgt i32 %214, 0
  %216 = zext i1 %215 to i64
  %217 = select i1 %215, i32 1, i32 0
  store i32 %217, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  store i64 0, ptr %29, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %218 = load ptr, ptr %4, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %218, i32 0, i32 9
  %220 = load i16, ptr %219, align 1, !tbaa !17
  %221 = zext i16 %220 to i32
  %222 = and i32 %221, 128
  %223 = icmp sgt i32 %222, 0
  %224 = zext i1 %223 to i64
  %225 = select i1 %223, i32 4, i32 8
  store i32 %225, ptr %30, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  store i32 0, ptr %31, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !13
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %226, i32 0, i32 10
  %228 = load i16, ptr %227, align 1, !tbaa !27
  %229 = zext i16 %228 to i32
  %230 = icmp eq i32 %229, 20
  br i1 %230, label %231, label %232

231:                                              ; preds = %185
  store i32 0, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 1, ptr %32, align 4, !tbaa !13
  br label %232

232:                                              ; preds = %231, %185
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %233, i32 0, i32 10
  %235 = load i16, ptr %234, align 1, !tbaa !27
  %236 = zext i16 %235 to i32
  %237 = icmp eq i32 %236, 18
  br i1 %237, label %238, label %239

238:                                              ; preds = %232
  store i32 0, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  br label %239

239:                                              ; preds = %238, %232
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %240, i32 0, i32 10
  %242 = load i16, ptr %241, align 1, !tbaa !27
  %243 = zext i16 %242 to i32
  %244 = icmp eq i32 %243, 19
  br i1 %244, label %245, label %246

245:                                              ; preds = %239
  store i32 0, ptr %27, align 4, !tbaa !13
  store i32 0, ptr %31, align 4, !tbaa !13
  store i32 1, ptr %32, align 4, !tbaa !13
  br label %246

246:                                              ; preds = %245, %239
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %247, i32 0, i32 10
  %249 = load i16, ptr %248, align 1, !tbaa !27
  %250 = zext i16 %249 to i32
  %251 = icmp eq i32 %250, 21
  br i1 %251, label %252, label %253

252:                                              ; preds = %246
  store i32 1, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  br label %253

253:                                              ; preds = %252, %246
  %254 = load ptr, ptr %4, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %254, i32 0, i32 10
  %256 = load i16, ptr %255, align 1, !tbaa !27
  %257 = zext i16 %256 to i32
  %258 = icmp eq i32 %257, 70
  br i1 %258, label %259, label %260

259:                                              ; preds = %253
  store i32 3, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  br label %260

260:                                              ; preds = %259, %253
  %261 = load ptr, ptr %4, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %261, i32 0, i32 10
  %263 = load i16, ptr %262, align 1, !tbaa !27
  %264 = zext i16 %263 to i32
  %265 = icmp eq i32 %264, 69
  br i1 %265, label %266, label %267

266:                                              ; preds = %260
  store i32 2, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  br label %267

267:                                              ; preds = %266, %260
  %268 = load ptr, ptr %4, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %268, i32 0, i32 10
  %270 = load i16, ptr %269, align 1, !tbaa !27
  %271 = zext i16 %270 to i32
  %272 = icmp eq i32 %271, 44
  br i1 %272, label %273, label %279

273:                                              ; preds = %267
  store i32 0, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  %274 = load ptr, ptr %3, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %274, i32 0, i32 1
  %276 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %275, i32 0, i32 2
  %277 = load ptr, ptr %276, align 8, !tbaa !28
  %278 = load i64, ptr %277, align 8, !tbaa !25
  store i64 %278, ptr %29, align 8, !tbaa !25
  br label %279

279:                                              ; preds = %273, %267
  %280 = load ptr, ptr %4, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %280, i32 0, i32 10
  %282 = load i16, ptr %281, align 1, !tbaa !27
  %283 = zext i16 %282 to i32
  %284 = icmp eq i32 %283, 53
  br i1 %284, label %285, label %291

285:                                              ; preds = %279
  store i32 1, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  %286 = load ptr, ptr %3, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %286, i32 0, i32 1
  %288 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %287, i32 0, i32 2
  %289 = load ptr, ptr %288, align 8, !tbaa !28
  %290 = load i64, ptr %289, align 8, !tbaa !25
  store i64 %290, ptr %29, align 8, !tbaa !25
  br label %291

291:                                              ; preds = %285, %279
  %292 = load ptr, ptr %4, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %292, i32 0, i32 10
  %294 = load i16, ptr %293, align 1, !tbaa !27
  %295 = zext i16 %294 to i32
  %296 = icmp eq i32 %295, 68
  br i1 %296, label %297, label %303

297:                                              ; preds = %291
  store i32 2, ptr %27, align 4, !tbaa !13
  store i32 1, ptr %31, align 4, !tbaa !13
  store i32 0, ptr %32, align 4, !tbaa !13
  %298 = load ptr, ptr %3, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %298, i32 0, i32 1
  %300 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %299, i32 0, i32 2
  %301 = load ptr, ptr %300, align 8, !tbaa !28
  %302 = load i64, ptr %301, align 8, !tbaa !25
  store i64 %302, ptr %29, align 8, !tbaa !25
  br label %303

303:                                              ; preds = %297, %291
  %304 = load i32, ptr %31, align 4, !tbaa !13
  %305 = icmp eq i32 %304, 0
  br i1 %305, label %306, label %314

306:                                              ; preds = %303
  %307 = load i32, ptr %32, align 4, !tbaa !13
  %308 = icmp eq i32 %307, 1
  br i1 %308, label %309, label %314

309:                                              ; preds = %306
  %310 = load ptr, ptr %3, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %310, i32 0, i32 2
  %312 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %311, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8, !tbaa !22
  store ptr %313, ptr %15, align 8, !tbaa !5
  br label %314

314:                                              ; preds = %309, %306, %303
  %315 = load i32, ptr %9, align 4, !tbaa !13
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %1108

317:                                              ; preds = %314
  %318 = load i32, ptr %10, align 4, !tbaa !13
  %319 = icmp eq i32 %318, 0
  br i1 %319, label %320, label %1108

320:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %321 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %321, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %322 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %322, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %323 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %323, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  store ptr null, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  store ptr null, ptr %37, align 8, !tbaa !5
  %324 = load i32, ptr %12, align 4, !tbaa !13
  %325 = sext i32 %324 to i64
  %326 = mul i64 8, %325
  %327 = call noalias ptr @malloc(i64 noundef %326) #9
  store ptr %327, ptr %36, align 8, !tbaa !5
  %328 = load i32, ptr %12, align 4, !tbaa !13
  %329 = sext i32 %328 to i64
  %330 = mul i64 8, %329
  %331 = call noalias ptr @malloc(i64 noundef %330) #9
  store ptr %331, ptr %37, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %332

332:                                              ; preds = %353, %320
  %333 = load i32, ptr %18, align 4, !tbaa !13
  %334 = load i32, ptr %12, align 4, !tbaa !13
  %335 = icmp slt i32 %333, %334
  br i1 %335, label %336, label %356

336:                                              ; preds = %332
  %337 = load i32, ptr %31, align 4, !tbaa !13
  %338 = icmp ne i32 %337, 0
  br i1 %338, label %339, label %344

339:                                              ; preds = %336
  %340 = load ptr, ptr %36, align 8, !tbaa !5
  %341 = load i32, ptr %18, align 4, !tbaa !13
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %340, i64 %342
  store double 0.000000e+00, ptr %343, align 8, !tbaa !29
  br label %344

344:                                              ; preds = %339, %336
  %345 = load i32, ptr %32, align 4, !tbaa !13
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %352

347:                                              ; preds = %344
  %348 = load ptr, ptr %35, align 8, !tbaa !5
  %349 = load i32, ptr %18, align 4, !tbaa !13
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds double, ptr %348, i64 %350
  store double 0.000000e+00, ptr %351, align 8, !tbaa !29
  br label %352

352:                                              ; preds = %347, %344
  br label %353

353:                                              ; preds = %352
  %354 = load i32, ptr %18, align 4, !tbaa !13
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %18, align 4, !tbaa !13
  br label %332, !llvm.loop !31

356:                                              ; preds = %332
  %357 = load i32, ptr %27, align 4, !tbaa !13
  %358 = icmp eq i32 %357, 0
  br i1 %358, label %359, label %649

359:                                              ; preds = %356
  %360 = load i32, ptr %11, align 4, !tbaa !13
  %361 = icmp eq i32 %360, 1
  br i1 %361, label %362, label %474

362:                                              ; preds = %359
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %363

363:                                              ; preds = %425, %362
  %364 = load i32, ptr %19, align 4, !tbaa !13
  %365 = load i32, ptr %6, align 4, !tbaa !13
  %366 = icmp slt i32 %364, %365
  br i1 %366, label %367, label %428

367:                                              ; preds = %363
  %368 = load i32, ptr %31, align 4, !tbaa !13
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %370, label %375

370:                                              ; preds = %367
  %371 = load ptr, ptr %36, align 8, !tbaa !5
  %372 = load i32, ptr %19, align 4, !tbaa !13
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds double, ptr %371, i64 %373
  store double 0.000000e+00, ptr %374, align 8, !tbaa !29
  br label %375

375:                                              ; preds = %370, %367
  %376 = load i32, ptr %32, align 4, !tbaa !13
  %377 = icmp ne i32 %376, 0
  br i1 %377, label %378, label %383

378:                                              ; preds = %375
  %379 = load ptr, ptr %37, align 8, !tbaa !5
  %380 = load i32, ptr %19, align 4, !tbaa !13
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds double, ptr %379, i64 %381
  store double 0.000000e+00, ptr %382, align 8, !tbaa !29
  br label %383

383:                                              ; preds = %378, %375
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %384

384:                                              ; preds = %421, %383
  %385 = load i32, ptr %18, align 4, !tbaa !13
  %386 = load i32, ptr %5, align 4, !tbaa !13
  %387 = icmp slt i32 %385, %386
  br i1 %387, label %388, label %424

388:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %389 = load ptr, ptr %33, align 8, !tbaa !5
  %390 = load i32, ptr %18, align 4, !tbaa !13
  %391 = load i32, ptr %19, align 4, !tbaa !13
  %392 = load i32, ptr %7, align 4, !tbaa !13
  %393 = mul nsw i32 %391, %392
  %394 = add nsw i32 %390, %393
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds double, ptr %389, i64 %395
  %397 = load double, ptr %396, align 8, !tbaa !29
  store double %397, ptr %38, align 8, !tbaa !29
  %398 = load i32, ptr %31, align 4, !tbaa !13
  %399 = icmp ne i32 %398, 0
  br i1 %399, label %400, label %408

400:                                              ; preds = %388
  %401 = load double, ptr %38, align 8, !tbaa !29
  %402 = load ptr, ptr %36, align 8, !tbaa !5
  %403 = load i32, ptr %19, align 4, !tbaa !13
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !29
  %407 = fadd double %406, %401
  store double %407, ptr %405, align 8, !tbaa !29
  br label %408

408:                                              ; preds = %400, %388
  %409 = load i32, ptr %32, align 4, !tbaa !13
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %411, label %420

411:                                              ; preds = %408
  %412 = load double, ptr %38, align 8, !tbaa !29
  %413 = load double, ptr %38, align 8, !tbaa !29
  %414 = load ptr, ptr %37, align 8, !tbaa !5
  %415 = load i32, ptr %19, align 4, !tbaa !13
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds double, ptr %414, i64 %416
  %418 = load double, ptr %417, align 8, !tbaa !29
  %419 = call double @llvm.fmuladd.f64(double %412, double %413, double %418)
  store double %419, ptr %417, align 8, !tbaa !29
  br label %420

420:                                              ; preds = %411, %408
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %421

421:                                              ; preds = %420
  %422 = load i32, ptr %18, align 4, !tbaa !13
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %18, align 4, !tbaa !13
  br label %384, !llvm.loop !33

424:                                              ; preds = %384
  br label %425

425:                                              ; preds = %424
  %426 = load i32, ptr %19, align 4, !tbaa !13
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %19, align 4, !tbaa !13
  br label %363, !llvm.loop !34

428:                                              ; preds = %363
  %429 = load i32, ptr %26, align 4, !tbaa !13
  %430 = icmp ugt i32 %429, 0
  br i1 %430, label %431, label %473

431:                                              ; preds = %428
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %432

432:                                              ; preds = %469, %431
  %433 = load i32, ptr %19, align 4, !tbaa !13
  %434 = load i32, ptr %6, align 4, !tbaa !13
  %435 = icmp slt i32 %433, %434
  br i1 %435, label %436, label %472

436:                                              ; preds = %432
  %437 = load i32, ptr %31, align 4, !tbaa !13
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %439, label %452

439:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %440 = load ptr, ptr %34, align 8, !tbaa !5
  %441 = load i32, ptr %19, align 4, !tbaa !13
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds double, ptr %440, i64 %442
  %444 = load double, ptr %443, align 8, !tbaa !29
  store double %444, ptr %39, align 8, !tbaa !29
  %445 = load double, ptr %39, align 8, !tbaa !29
  %446 = load ptr, ptr %36, align 8, !tbaa !5
  %447 = load i32, ptr %19, align 4, !tbaa !13
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !29
  %451 = fadd double %450, %445
  store double %451, ptr %449, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %452

452:                                              ; preds = %439, %436
  %453 = load i32, ptr %32, align 4, !tbaa !13
  %454 = icmp ne i32 %453, 0
  br i1 %454, label %455, label %468

455:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %456 = load ptr, ptr %35, align 8, !tbaa !5
  %457 = load i32, ptr %19, align 4, !tbaa !13
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %456, i64 %458
  %460 = load double, ptr %459, align 8, !tbaa !29
  store double %460, ptr %40, align 8, !tbaa !29
  %461 = load double, ptr %40, align 8, !tbaa !29
  %462 = load ptr, ptr %37, align 8, !tbaa !5
  %463 = load i32, ptr %19, align 4, !tbaa !13
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !29
  %467 = fadd double %466, %461
  store double %467, ptr %465, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  br label %468

468:                                              ; preds = %455, %452
  br label %469

469:                                              ; preds = %468
  %470 = load i32, ptr %19, align 4, !tbaa !13
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %19, align 4, !tbaa !13
  br label %432, !llvm.loop !35

472:                                              ; preds = %432
  br label %473

473:                                              ; preds = %472, %428
  br label %648

474:                                              ; preds = %359
  %475 = load i64, ptr %29, align 8, !tbaa !25
  %476 = icmp eq i64 %475, 0
  br i1 %476, label %477, label %589

477:                                              ; preds = %474
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %478

478:                                              ; preds = %540, %477
  %479 = load i32, ptr %18, align 4, !tbaa !13
  %480 = load i32, ptr %5, align 4, !tbaa !13
  %481 = icmp slt i32 %479, %480
  br i1 %481, label %482, label %543

482:                                              ; preds = %478
  %483 = load i32, ptr %31, align 4, !tbaa !13
  %484 = icmp ne i32 %483, 0
  br i1 %484, label %485, label %490

485:                                              ; preds = %482
  %486 = load ptr, ptr %36, align 8, !tbaa !5
  %487 = load i32, ptr %18, align 4, !tbaa !13
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds double, ptr %486, i64 %488
  store double 0.000000e+00, ptr %489, align 8, !tbaa !29
  br label %490

490:                                              ; preds = %485, %482
  %491 = load i32, ptr %32, align 4, !tbaa !13
  %492 = icmp ne i32 %491, 0
  br i1 %492, label %493, label %498

493:                                              ; preds = %490
  %494 = load ptr, ptr %37, align 8, !tbaa !5
  %495 = load i32, ptr %18, align 4, !tbaa !13
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %494, i64 %496
  store double 0.000000e+00, ptr %497, align 8, !tbaa !29
  br label %498

498:                                              ; preds = %493, %490
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %499

499:                                              ; preds = %536, %498
  %500 = load i32, ptr %19, align 4, !tbaa !13
  %501 = load i32, ptr %6, align 4, !tbaa !13
  %502 = icmp slt i32 %500, %501
  br i1 %502, label %503, label %539

503:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %504 = load ptr, ptr %33, align 8, !tbaa !5
  %505 = load i32, ptr %18, align 4, !tbaa !13
  %506 = load i32, ptr %19, align 4, !tbaa !13
  %507 = load i32, ptr %7, align 4, !tbaa !13
  %508 = mul nsw i32 %506, %507
  %509 = add nsw i32 %505, %508
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds double, ptr %504, i64 %510
  %512 = load double, ptr %511, align 8, !tbaa !29
  store double %512, ptr %41, align 8, !tbaa !29
  %513 = load i32, ptr %31, align 4, !tbaa !13
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %523

515:                                              ; preds = %503
  %516 = load double, ptr %41, align 8, !tbaa !29
  %517 = load ptr, ptr %36, align 8, !tbaa !5
  %518 = load i32, ptr %18, align 4, !tbaa !13
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %517, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !29
  %522 = fadd double %521, %516
  store double %522, ptr %520, align 8, !tbaa !29
  br label %523

523:                                              ; preds = %515, %503
  %524 = load i32, ptr %32, align 4, !tbaa !13
  %525 = icmp ne i32 %524, 0
  br i1 %525, label %526, label %535

526:                                              ; preds = %523
  %527 = load double, ptr %41, align 8, !tbaa !29
  %528 = load double, ptr %41, align 8, !tbaa !29
  %529 = load ptr, ptr %37, align 8, !tbaa !5
  %530 = load i32, ptr %18, align 4, !tbaa !13
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds double, ptr %529, i64 %531
  %533 = load double, ptr %532, align 8, !tbaa !29
  %534 = call double @llvm.fmuladd.f64(double %527, double %528, double %533)
  store double %534, ptr %532, align 8, !tbaa !29
  br label %535

535:                                              ; preds = %526, %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %536

536:                                              ; preds = %535
  %537 = load i32, ptr %19, align 4, !tbaa !13
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %19, align 4, !tbaa !13
  br label %499, !llvm.loop !36

539:                                              ; preds = %499
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %18, align 4, !tbaa !13
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %18, align 4, !tbaa !13
  br label %478, !llvm.loop !37

543:                                              ; preds = %478
  %544 = load i32, ptr %26, align 4, !tbaa !13
  %545 = icmp ugt i32 %544, 0
  br i1 %545, label %546, label %588

546:                                              ; preds = %543
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %547

547:                                              ; preds = %584, %546
  %548 = load i32, ptr %18, align 4, !tbaa !13
  %549 = load i32, ptr %5, align 4, !tbaa !13
  %550 = icmp slt i32 %548, %549
  br i1 %550, label %551, label %587

551:                                              ; preds = %547
  %552 = load i32, ptr %31, align 4, !tbaa !13
  %553 = icmp ne i32 %552, 0
  br i1 %553, label %554, label %567

554:                                              ; preds = %551
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %555 = load ptr, ptr %34, align 8, !tbaa !5
  %556 = load i32, ptr %18, align 4, !tbaa !13
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %555, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !29
  store double %559, ptr %42, align 8, !tbaa !29
  %560 = load double, ptr %42, align 8, !tbaa !29
  %561 = load ptr, ptr %36, align 8, !tbaa !5
  %562 = load i32, ptr %18, align 4, !tbaa !13
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %561, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !29
  %566 = fadd double %565, %560
  store double %566, ptr %564, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %567

567:                                              ; preds = %554, %551
  %568 = load i32, ptr %32, align 4, !tbaa !13
  %569 = icmp ne i32 %568, 0
  br i1 %569, label %570, label %583

570:                                              ; preds = %567
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %571 = load ptr, ptr %35, align 8, !tbaa !5
  %572 = load i32, ptr %18, align 4, !tbaa !13
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds double, ptr %571, i64 %573
  %575 = load double, ptr %574, align 8, !tbaa !29
  store double %575, ptr %43, align 8, !tbaa !29
  %576 = load double, ptr %43, align 8, !tbaa !29
  %577 = load ptr, ptr %37, align 8, !tbaa !5
  %578 = load i32, ptr %18, align 4, !tbaa !13
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds double, ptr %577, i64 %579
  %581 = load double, ptr %580, align 8, !tbaa !29
  %582 = fadd double %581, %576
  store double %582, ptr %580, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  br label %583

583:                                              ; preds = %570, %567
  br label %584

584:                                              ; preds = %583
  %585 = load i32, ptr %18, align 4, !tbaa !13
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %18, align 4, !tbaa !13
  br label %547, !llvm.loop !38

587:                                              ; preds = %547
  br label %588

588:                                              ; preds = %587, %543
  br label %647

589:                                              ; preds = %474
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %590

590:                                              ; preds = %643, %589
  %591 = load i32, ptr %18, align 4, !tbaa !13
  %592 = load i32, ptr %5, align 4, !tbaa !13
  %593 = icmp slt i32 %591, %592
  br i1 %593, label %594, label %646

594:                                              ; preds = %590
  %595 = load ptr, ptr %36, align 8, !tbaa !5
  %596 = load i32, ptr %18, align 4, !tbaa !13
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds double, ptr %595, i64 %597
  store double 0.000000e+00, ptr %598, align 8, !tbaa !29
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %599

599:                                              ; preds = %639, %594
  %600 = load i32, ptr %20, align 4, !tbaa !13
  %601 = load i64, ptr %29, align 8, !tbaa !25
  %602 = trunc i64 %601 to i32
  %603 = icmp slt i32 %600, %602
  br i1 %603, label %604, label %642

604:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %605 = load i32, ptr %30, align 4, !tbaa !13
  %606 = icmp eq i32 %605, 4
  br i1 %606, label %607, label %614

607:                                              ; preds = %604
  %608 = load ptr, ptr %22, align 8, !tbaa !5
  %609 = load i32, ptr %20, align 4, !tbaa !13
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %608, i64 %610
  %612 = load i32, ptr %611, align 4, !tbaa !13
  %613 = zext i32 %612 to i64
  br label %620

614:                                              ; preds = %604
  %615 = load ptr, ptr %23, align 8, !tbaa !5
  %616 = load i32, ptr %20, align 4, !tbaa !13
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i64, ptr %615, i64 %617
  %619 = load i64, ptr %618, align 8, !tbaa !25
  br label %620

620:                                              ; preds = %614, %607
  %621 = phi i64 [ %613, %607 ], [ %619, %614 ]
  %622 = trunc i64 %621 to i32
  store i32 %622, ptr %19, align 4, !tbaa !13
  %623 = load ptr, ptr %33, align 8, !tbaa !5
  %624 = load i32, ptr %18, align 4, !tbaa !13
  %625 = load i32, ptr %19, align 4, !tbaa !13
  %626 = load i32, ptr %7, align 4, !tbaa !13
  %627 = mul nsw i32 %625, %626
  %628 = add nsw i32 %624, %627
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds double, ptr %623, i64 %629
  %631 = load double, ptr %630, align 8, !tbaa !29
  store double %631, ptr %44, align 8, !tbaa !29
  %632 = load double, ptr %44, align 8, !tbaa !29
  %633 = load ptr, ptr %36, align 8, !tbaa !5
  %634 = load i32, ptr %18, align 4, !tbaa !13
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds double, ptr %633, i64 %635
  %637 = load double, ptr %636, align 8, !tbaa !29
  %638 = fadd double %637, %632
  store double %638, ptr %636, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %639

639:                                              ; preds = %620
  %640 = load i32, ptr %20, align 4, !tbaa !13
  %641 = add nsw i32 %640, 1
  store i32 %641, ptr %20, align 4, !tbaa !13
  br label %599, !llvm.loop !39

642:                                              ; preds = %599
  br label %643

643:                                              ; preds = %642
  %644 = load i32, ptr %18, align 4, !tbaa !13
  %645 = add nsw i32 %644, 1
  store i32 %645, ptr %18, align 4, !tbaa !13
  br label %590, !llvm.loop !40

646:                                              ; preds = %590
  br label %647

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

648:                                              ; preds = %647, %473
  br label %1070

649:                                              ; preds = %356
  %650 = load i32, ptr %11, align 4, !tbaa !13
  %651 = icmp eq i32 %650, 1
  br i1 %651, label %652, label %806

652:                                              ; preds = %649
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %653

653:                                              ; preds = %802, %652
  %654 = load i32, ptr %19, align 4, !tbaa !13
  %655 = load i32, ptr %6, align 4, !tbaa !13
  %656 = icmp slt i32 %654, %655
  br i1 %656, label %657, label %805

657:                                              ; preds = %653
  %658 = load ptr, ptr %33, align 8, !tbaa !5
  %659 = load i32, ptr %19, align 4, !tbaa !13
  %660 = load i32, ptr %7, align 4, !tbaa !13
  %661 = mul nsw i32 %659, %660
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds double, ptr %658, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !29
  %665 = load ptr, ptr %36, align 8, !tbaa !5
  %666 = load i32, ptr %19, align 4, !tbaa !13
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds double, ptr %665, i64 %667
  store double %664, ptr %668, align 8, !tbaa !29
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %669

669:                                              ; preds = %798, %657
  %670 = load i32, ptr %18, align 4, !tbaa !13
  %671 = load i32, ptr %5, align 4, !tbaa !13
  %672 = icmp slt i32 %670, %671
  br i1 %672, label %673, label %801

673:                                              ; preds = %669
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  %674 = load ptr, ptr %33, align 8, !tbaa !5
  %675 = load i32, ptr %18, align 4, !tbaa !13
  %676 = load i32, ptr %19, align 4, !tbaa !13
  %677 = load i32, ptr %7, align 4, !tbaa !13
  %678 = mul nsw i32 %676, %677
  %679 = add nsw i32 %675, %678
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds double, ptr %674, i64 %680
  %682 = load double, ptr %681, align 8, !tbaa !29
  store double %682, ptr %45, align 8, !tbaa !29
  %683 = load i32, ptr %27, align 4, !tbaa !13
  %684 = icmp eq i32 %683, 1
  br i1 %684, label %685, label %703

685:                                              ; preds = %673
  %686 = load ptr, ptr %36, align 8, !tbaa !5
  %687 = load i32, ptr %19, align 4, !tbaa !13
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds double, ptr %686, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !29
  %691 = load double, ptr %45, align 8, !tbaa !29
  %692 = fcmp olt double %690, %691
  br i1 %692, label %693, label %695

693:                                              ; preds = %685
  %694 = load double, ptr %45, align 8, !tbaa !29
  br label %701

695:                                              ; preds = %685
  %696 = load ptr, ptr %36, align 8, !tbaa !5
  %697 = load i32, ptr %19, align 4, !tbaa !13
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds double, ptr %696, i64 %698
  %700 = load double, ptr %699, align 8, !tbaa !29
  br label %701

701:                                              ; preds = %695, %693
  %702 = phi double [ %694, %693 ], [ %700, %695 ]
  br label %792

703:                                              ; preds = %673
  %704 = load i32, ptr %27, align 4, !tbaa !13
  %705 = icmp eq i32 %704, 3
  br i1 %705, label %706, label %772

706:                                              ; preds = %703
  %707 = load ptr, ptr %36, align 8, !tbaa !5
  %708 = load i32, ptr %19, align 4, !tbaa !13
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds double, ptr %707, i64 %709
  %711 = load double, ptr %710, align 8, !tbaa !29
  %712 = fcmp ole double 0.000000e+00, %711
  br i1 %712, label %713, label %719

713:                                              ; preds = %706
  %714 = load ptr, ptr %36, align 8, !tbaa !5
  %715 = load i32, ptr %19, align 4, !tbaa !13
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %714, i64 %716
  %718 = load double, ptr %717, align 8, !tbaa !29
  br label %726

719:                                              ; preds = %706
  %720 = load ptr, ptr %36, align 8, !tbaa !5
  %721 = load i32, ptr %19, align 4, !tbaa !13
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds double, ptr %720, i64 %722
  %724 = load double, ptr %723, align 8, !tbaa !29
  %725 = fneg double %724
  br label %726

726:                                              ; preds = %719, %713
  %727 = phi double [ %718, %713 ], [ %725, %719 ]
  %728 = load double, ptr %45, align 8, !tbaa !29
  %729 = fcmp ole double 0.000000e+00, %728
  br i1 %729, label %730, label %732

730:                                              ; preds = %726
  %731 = load double, ptr %45, align 8, !tbaa !29
  br label %735

732:                                              ; preds = %726
  %733 = load double, ptr %45, align 8, !tbaa !29
  %734 = fneg double %733
  br label %735

735:                                              ; preds = %732, %730
  %736 = phi double [ %731, %730 ], [ %734, %732 ]
  %737 = fcmp olt double %727, %736
  br i1 %737, label %738, label %748

738:                                              ; preds = %735
  %739 = load double, ptr %45, align 8, !tbaa !29
  %740 = fcmp ole double 0.000000e+00, %739
  br i1 %740, label %741, label %743

741:                                              ; preds = %738
  %742 = load double, ptr %45, align 8, !tbaa !29
  br label %746

743:                                              ; preds = %738
  %744 = load double, ptr %45, align 8, !tbaa !29
  %745 = fneg double %744
  br label %746

746:                                              ; preds = %743, %741
  %747 = phi double [ %742, %741 ], [ %745, %743 ]
  br label %770

748:                                              ; preds = %735
  %749 = load ptr, ptr %36, align 8, !tbaa !5
  %750 = load i32, ptr %19, align 4, !tbaa !13
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds double, ptr %749, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !29
  %754 = fcmp ole double 0.000000e+00, %753
  br i1 %754, label %755, label %761

755:                                              ; preds = %748
  %756 = load ptr, ptr %36, align 8, !tbaa !5
  %757 = load i32, ptr %19, align 4, !tbaa !13
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds double, ptr %756, i64 %758
  %760 = load double, ptr %759, align 8, !tbaa !29
  br label %768

761:                                              ; preds = %748
  %762 = load ptr, ptr %36, align 8, !tbaa !5
  %763 = load i32, ptr %19, align 4, !tbaa !13
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds double, ptr %762, i64 %764
  %766 = load double, ptr %765, align 8, !tbaa !29
  %767 = fneg double %766
  br label %768

768:                                              ; preds = %761, %755
  %769 = phi double [ %760, %755 ], [ %767, %761 ]
  br label %770

770:                                              ; preds = %768, %746
  %771 = phi double [ %747, %746 ], [ %769, %768 ]
  br label %790

772:                                              ; preds = %703
  %773 = load ptr, ptr %36, align 8, !tbaa !5
  %774 = load i32, ptr %19, align 4, !tbaa !13
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds double, ptr %773, i64 %775
  %777 = load double, ptr %776, align 8, !tbaa !29
  %778 = load double, ptr %45, align 8, !tbaa !29
  %779 = fcmp olt double %777, %778
  br i1 %779, label %780, label %786

780:                                              ; preds = %772
  %781 = load ptr, ptr %36, align 8, !tbaa !5
  %782 = load i32, ptr %19, align 4, !tbaa !13
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds double, ptr %781, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !29
  br label %788

786:                                              ; preds = %772
  %787 = load double, ptr %45, align 8, !tbaa !29
  br label %788

788:                                              ; preds = %786, %780
  %789 = phi double [ %785, %780 ], [ %787, %786 ]
  br label %790

790:                                              ; preds = %788, %770
  %791 = phi double [ %771, %770 ], [ %789, %788 ]
  br label %792

792:                                              ; preds = %790, %701
  %793 = phi double [ %702, %701 ], [ %791, %790 ]
  %794 = load ptr, ptr %36, align 8, !tbaa !5
  %795 = load i32, ptr %19, align 4, !tbaa !13
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds double, ptr %794, i64 %796
  store double %793, ptr %797, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %798

798:                                              ; preds = %792
  %799 = load i32, ptr %18, align 4, !tbaa !13
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %18, align 4, !tbaa !13
  br label %669, !llvm.loop !41

801:                                              ; preds = %669
  br label %802

802:                                              ; preds = %801
  %803 = load i32, ptr %19, align 4, !tbaa !13
  %804 = add nsw i32 %803, 1
  store i32 %804, ptr %19, align 4, !tbaa !13
  br label %653, !llvm.loop !42

805:                                              ; preds = %653
  br label %1069

806:                                              ; preds = %649
  %807 = load i64, ptr %29, align 8, !tbaa !25
  %808 = icmp eq i64 %807, 0
  br i1 %808, label %809, label %811

809:                                              ; preds = %806
  %810 = load i32, ptr %6, align 4, !tbaa !13
  store i32 %810, ptr %21, align 4, !tbaa !13
  br label %814

811:                                              ; preds = %806
  %812 = load i64, ptr %29, align 8, !tbaa !25
  %813 = trunc i64 %812 to i32
  store i32 %813, ptr %21, align 4, !tbaa !13
  br label %814

814:                                              ; preds = %811, %809
  %815 = load i32, ptr %27, align 4, !tbaa !13
  %816 = icmp eq i32 %815, 1
  br i1 %816, label %820, label %817

817:                                              ; preds = %814
  %818 = load i32, ptr %27, align 4, !tbaa !13
  %819 = icmp eq i32 %818, 3
  br i1 %819, label %820, label %950

820:                                              ; preds = %817, %814
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %821

821:                                              ; preds = %946, %820
  %822 = load i32, ptr %18, align 4, !tbaa !13
  %823 = load i32, ptr %5, align 4, !tbaa !13
  %824 = icmp slt i32 %822, %823
  br i1 %824, label %825, label %949

825:                                              ; preds = %821
  %826 = load i32, ptr %27, align 4, !tbaa !13
  %827 = icmp eq i32 %826, 1
  %828 = zext i1 %827 to i64
  %829 = select i1 %827, float 0xC7EFFFFFE0000000, float 0.000000e+00
  %830 = fpext float %829 to double
  %831 = load ptr, ptr %36, align 8, !tbaa !5
  %832 = load i32, ptr %18, align 4, !tbaa !13
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds double, ptr %831, i64 %833
  store double %830, ptr %834, align 8, !tbaa !29
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %835

835:                                              ; preds = %942, %825
  %836 = load i32, ptr %20, align 4, !tbaa !13
  %837 = load i32, ptr %21, align 4, !tbaa !13
  %838 = icmp slt i32 %836, %837
  br i1 %838, label %839, label %945

839:                                              ; preds = %835
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %840 = load i64, ptr %29, align 8, !tbaa !25
  %841 = icmp eq i64 %840, 0
  br i1 %841, label %842, label %844

842:                                              ; preds = %839
  %843 = load i32, ptr %20, align 4, !tbaa !13
  store i32 %843, ptr %19, align 4, !tbaa !13
  br label %863

844:                                              ; preds = %839
  %845 = load i32, ptr %30, align 4, !tbaa !13
  %846 = icmp eq i32 %845, 4
  br i1 %846, label %847, label %854

847:                                              ; preds = %844
  %848 = load ptr, ptr %22, align 8, !tbaa !5
  %849 = load i32, ptr %20, align 4, !tbaa !13
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds i32, ptr %848, i64 %850
  %852 = load i32, ptr %851, align 4, !tbaa !13
  %853 = zext i32 %852 to i64
  br label %860

854:                                              ; preds = %844
  %855 = load ptr, ptr %23, align 8, !tbaa !5
  %856 = load i32, ptr %20, align 4, !tbaa !13
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds i64, ptr %855, i64 %857
  %859 = load i64, ptr %858, align 8, !tbaa !25
  br label %860

860:                                              ; preds = %854, %847
  %861 = phi i64 [ %853, %847 ], [ %859, %854 ]
  %862 = trunc i64 %861 to i32
  store i32 %862, ptr %19, align 4, !tbaa !13
  br label %863

863:                                              ; preds = %860, %842
  %864 = load ptr, ptr %33, align 8, !tbaa !5
  %865 = load i32, ptr %18, align 4, !tbaa !13
  %866 = load i32, ptr %19, align 4, !tbaa !13
  %867 = load i32, ptr %7, align 4, !tbaa !13
  %868 = mul nsw i32 %866, %867
  %869 = add nsw i32 %865, %868
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds double, ptr %864, i64 %870
  %872 = load double, ptr %871, align 8, !tbaa !29
  store double %872, ptr %46, align 8, !tbaa !29
  %873 = load i32, ptr %27, align 4, !tbaa !13
  %874 = icmp eq i32 %873, 3
  br i1 %874, label %875, label %885

875:                                              ; preds = %863
  %876 = load double, ptr %46, align 8, !tbaa !29
  %877 = fcmp ole double 0.000000e+00, %876
  br i1 %877, label %878, label %880

878:                                              ; preds = %875
  %879 = load double, ptr %46, align 8, !tbaa !29
  br label %883

880:                                              ; preds = %875
  %881 = load double, ptr %46, align 8, !tbaa !29
  %882 = fneg double %881
  br label %883

883:                                              ; preds = %880, %878
  %884 = phi double [ %879, %878 ], [ %882, %880 ]
  store double %884, ptr %46, align 8, !tbaa !29
  br label %885

885:                                              ; preds = %883, %863
  %886 = load i32, ptr %28, align 4, !tbaa !13
  %887 = icmp ugt i32 %886, 0
  br i1 %887, label %888, label %919

888:                                              ; preds = %885
  %889 = load double, ptr %46, align 8, !tbaa !29
  %890 = load ptr, ptr %36, align 8, !tbaa !5
  %891 = load i32, ptr %18, align 4, !tbaa !13
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds double, ptr %890, i64 %892
  %894 = load double, ptr %893, align 8, !tbaa !29
  %895 = fcmp oge double %889, %894
  br i1 %895, label %896, label %918

896:                                              ; preds = %888
  %897 = load double, ptr %46, align 8, !tbaa !29
  %898 = load ptr, ptr %36, align 8, !tbaa !5
  %899 = load i32, ptr %18, align 4, !tbaa !13
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds double, ptr %898, i64 %900
  store double %897, ptr %901, align 8, !tbaa !29
  %902 = load i32, ptr %30, align 4, !tbaa !13
  %903 = icmp eq i32 %902, 4
  br i1 %903, label %904, label %910

904:                                              ; preds = %896
  %905 = load i32, ptr %19, align 4, !tbaa !13
  %906 = load ptr, ptr %24, align 8, !tbaa !5
  %907 = load i32, ptr %18, align 4, !tbaa !13
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds i32, ptr %906, i64 %908
  store i32 %905, ptr %909, align 4, !tbaa !13
  br label %917

910:                                              ; preds = %896
  %911 = load i32, ptr %19, align 4, !tbaa !13
  %912 = sext i32 %911 to i64
  %913 = load ptr, ptr %25, align 8, !tbaa !5
  %914 = load i32, ptr %18, align 4, !tbaa !13
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds i64, ptr %913, i64 %915
  store i64 %912, ptr %916, align 8, !tbaa !25
  br label %917

917:                                              ; preds = %910, %904
  br label %918

918:                                              ; preds = %917, %888
  br label %941

919:                                              ; preds = %885
  %920 = load double, ptr %46, align 8, !tbaa !29
  %921 = load ptr, ptr %36, align 8, !tbaa !5
  %922 = load i32, ptr %18, align 4, !tbaa !13
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds double, ptr %921, i64 %923
  %925 = load double, ptr %924, align 8, !tbaa !29
  %926 = fcmp olt double %920, %925
  br i1 %926, label %927, label %933

927:                                              ; preds = %919
  %928 = load ptr, ptr %36, align 8, !tbaa !5
  %929 = load i32, ptr %18, align 4, !tbaa !13
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds double, ptr %928, i64 %930
  %932 = load double, ptr %931, align 8, !tbaa !29
  br label %935

933:                                              ; preds = %919
  %934 = load double, ptr %46, align 8, !tbaa !29
  br label %935

935:                                              ; preds = %933, %927
  %936 = phi double [ %932, %927 ], [ %934, %933 ]
  %937 = load ptr, ptr %36, align 8, !tbaa !5
  %938 = load i32, ptr %18, align 4, !tbaa !13
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds double, ptr %937, i64 %939
  store double %936, ptr %940, align 8, !tbaa !29
  br label %941

941:                                              ; preds = %935, %918
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  br label %942

942:                                              ; preds = %941
  %943 = load i32, ptr %20, align 4, !tbaa !13
  %944 = add nsw i32 %943, 1
  store i32 %944, ptr %20, align 4, !tbaa !13
  br label %835, !llvm.loop !43

945:                                              ; preds = %835
  br label %946

946:                                              ; preds = %945
  %947 = load i32, ptr %18, align 4, !tbaa !13
  %948 = add nsw i32 %947, 1
  store i32 %948, ptr %18, align 4, !tbaa !13
  br label %821, !llvm.loop !44

949:                                              ; preds = %821
  br label %1068

950:                                              ; preds = %817
  %951 = load i32, ptr %27, align 4, !tbaa !13
  %952 = icmp eq i32 %951, 2
  br i1 %952, label %953, label %1065

953:                                              ; preds = %950
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %954

954:                                              ; preds = %1061, %953
  %955 = load i32, ptr %18, align 4, !tbaa !13
  %956 = load i32, ptr %5, align 4, !tbaa !13
  %957 = icmp slt i32 %955, %956
  br i1 %957, label %958, label %1064

958:                                              ; preds = %954
  %959 = load ptr, ptr %36, align 8, !tbaa !5
  %960 = load i32, ptr %18, align 4, !tbaa !13
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds double, ptr %959, i64 %961
  store double 0x47EFFFFFE0000000, ptr %962, align 8, !tbaa !29
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %963

963:                                              ; preds = %1057, %958
  %964 = load i32, ptr %20, align 4, !tbaa !13
  %965 = load i32, ptr %21, align 4, !tbaa !13
  %966 = icmp slt i32 %964, %965
  br i1 %966, label %967, label %1060

967:                                              ; preds = %963
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %968 = load i64, ptr %29, align 8, !tbaa !25
  %969 = icmp eq i64 %968, 0
  br i1 %969, label %970, label %972

970:                                              ; preds = %967
  %971 = load i32, ptr %20, align 4, !tbaa !13
  store i32 %971, ptr %19, align 4, !tbaa !13
  br label %991

972:                                              ; preds = %967
  %973 = load i32, ptr %30, align 4, !tbaa !13
  %974 = icmp eq i32 %973, 4
  br i1 %974, label %975, label %982

975:                                              ; preds = %972
  %976 = load ptr, ptr %22, align 8, !tbaa !5
  %977 = load i32, ptr %20, align 4, !tbaa !13
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds i32, ptr %976, i64 %978
  %980 = load i32, ptr %979, align 4, !tbaa !13
  %981 = zext i32 %980 to i64
  br label %988

982:                                              ; preds = %972
  %983 = load ptr, ptr %23, align 8, !tbaa !5
  %984 = load i32, ptr %20, align 4, !tbaa !13
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds i64, ptr %983, i64 %985
  %987 = load i64, ptr %986, align 8, !tbaa !25
  br label %988

988:                                              ; preds = %982, %975
  %989 = phi i64 [ %981, %975 ], [ %987, %982 ]
  %990 = trunc i64 %989 to i32
  store i32 %990, ptr %19, align 4, !tbaa !13
  br label %991

991:                                              ; preds = %988, %970
  %992 = load ptr, ptr %33, align 8, !tbaa !5
  %993 = load i32, ptr %18, align 4, !tbaa !13
  %994 = load i32, ptr %19, align 4, !tbaa !13
  %995 = load i32, ptr %7, align 4, !tbaa !13
  %996 = mul nsw i32 %994, %995
  %997 = add nsw i32 %993, %996
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds double, ptr %992, i64 %998
  %1000 = load double, ptr %999, align 8, !tbaa !29
  store double %1000, ptr %47, align 8, !tbaa !29
  %1001 = load i32, ptr %28, align 4, !tbaa !13
  %1002 = icmp ugt i32 %1001, 0
  br i1 %1002, label %1003, label %1034

1003:                                             ; preds = %991
  %1004 = load double, ptr %47, align 8, !tbaa !29
  %1005 = load ptr, ptr %36, align 8, !tbaa !5
  %1006 = load i32, ptr %18, align 4, !tbaa !13
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds double, ptr %1005, i64 %1007
  %1009 = load double, ptr %1008, align 8, !tbaa !29
  %1010 = fcmp ole double %1004, %1009
  br i1 %1010, label %1011, label %1033

1011:                                             ; preds = %1003
  %1012 = load double, ptr %47, align 8, !tbaa !29
  %1013 = load ptr, ptr %36, align 8, !tbaa !5
  %1014 = load i32, ptr %18, align 4, !tbaa !13
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds double, ptr %1013, i64 %1015
  store double %1012, ptr %1016, align 8, !tbaa !29
  %1017 = load i32, ptr %30, align 4, !tbaa !13
  %1018 = icmp eq i32 %1017, 4
  br i1 %1018, label %1019, label %1025

1019:                                             ; preds = %1011
  %1020 = load i32, ptr %19, align 4, !tbaa !13
  %1021 = load ptr, ptr %24, align 8, !tbaa !5
  %1022 = load i32, ptr %18, align 4, !tbaa !13
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds i32, ptr %1021, i64 %1023
  store i32 %1020, ptr %1024, align 4, !tbaa !13
  br label %1032

1025:                                             ; preds = %1011
  %1026 = load i32, ptr %19, align 4, !tbaa !13
  %1027 = sext i32 %1026 to i64
  %1028 = load ptr, ptr %25, align 8, !tbaa !5
  %1029 = load i32, ptr %18, align 4, !tbaa !13
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds i64, ptr %1028, i64 %1030
  store i64 %1027, ptr %1031, align 8, !tbaa !25
  br label %1032

1032:                                             ; preds = %1025, %1019
  br label %1033

1033:                                             ; preds = %1032, %1003
  br label %1056

1034:                                             ; preds = %991
  %1035 = load double, ptr %47, align 8, !tbaa !29
  %1036 = load ptr, ptr %36, align 8, !tbaa !5
  %1037 = load i32, ptr %18, align 4, !tbaa !13
  %1038 = sext i32 %1037 to i64
  %1039 = getelementptr inbounds double, ptr %1036, i64 %1038
  %1040 = load double, ptr %1039, align 8, !tbaa !29
  %1041 = fcmp olt double %1035, %1040
  br i1 %1041, label %1042, label %1044

1042:                                             ; preds = %1034
  %1043 = load double, ptr %47, align 8, !tbaa !29
  br label %1050

1044:                                             ; preds = %1034
  %1045 = load ptr, ptr %36, align 8, !tbaa !5
  %1046 = load i32, ptr %18, align 4, !tbaa !13
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds double, ptr %1045, i64 %1047
  %1049 = load double, ptr %1048, align 8, !tbaa !29
  br label %1050

1050:                                             ; preds = %1044, %1042
  %1051 = phi double [ %1043, %1042 ], [ %1049, %1044 ]
  %1052 = load ptr, ptr %36, align 8, !tbaa !5
  %1053 = load i32, ptr %18, align 4, !tbaa !13
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds double, ptr %1052, i64 %1054
  store double %1051, ptr %1055, align 8, !tbaa !29
  br label %1056

1056:                                             ; preds = %1050, %1033
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %1057

1057:                                             ; preds = %1056
  %1058 = load i32, ptr %20, align 4, !tbaa !13
  %1059 = add nsw i32 %1058, 1
  store i32 %1059, ptr %20, align 4, !tbaa !13
  br label %963, !llvm.loop !45

1060:                                             ; preds = %963
  br label %1061

1061:                                             ; preds = %1060
  %1062 = load i32, ptr %18, align 4, !tbaa !13
  %1063 = add nsw i32 %1062, 1
  store i32 %1063, ptr %18, align 4, !tbaa !13
  br label %954, !llvm.loop !46

1064:                                             ; preds = %954
  br label %1067

1065:                                             ; preds = %950
  %1066 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %1067

1067:                                             ; preds = %1065, %1064
  br label %1068

1068:                                             ; preds = %1067, %949
  br label %1069

1069:                                             ; preds = %1068, %805
  br label %1070

1070:                                             ; preds = %1069, %648
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1071

1071:                                             ; preds = %1102, %1070
  %1072 = load i32, ptr %18, align 4, !tbaa !13
  %1073 = load i32, ptr %12, align 4, !tbaa !13
  %1074 = icmp slt i32 %1072, %1073
  br i1 %1074, label %1075, label %1105

1075:                                             ; preds = %1071
  %1076 = load i32, ptr %31, align 4, !tbaa !13
  %1077 = icmp ne i32 %1076, 0
  br i1 %1077, label %1078, label %1088

1078:                                             ; preds = %1075
  %1079 = load ptr, ptr %36, align 8, !tbaa !5
  %1080 = load i32, ptr %18, align 4, !tbaa !13
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds double, ptr %1079, i64 %1081
  %1083 = load double, ptr %1082, align 8, !tbaa !29
  %1084 = load ptr, ptr %34, align 8, !tbaa !5
  %1085 = load i32, ptr %18, align 4, !tbaa !13
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds double, ptr %1084, i64 %1086
  store double %1083, ptr %1087, align 8, !tbaa !29
  br label %1088

1088:                                             ; preds = %1078, %1075
  %1089 = load i32, ptr %32, align 4, !tbaa !13
  %1090 = icmp ne i32 %1089, 0
  br i1 %1090, label %1091, label %1101

1091:                                             ; preds = %1088
  %1092 = load ptr, ptr %35, align 8, !tbaa !5
  %1093 = load i32, ptr %18, align 4, !tbaa !13
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds double, ptr %1092, i64 %1094
  %1096 = load double, ptr %1095, align 8, !tbaa !29
  %1097 = load ptr, ptr %35, align 8, !tbaa !5
  %1098 = load i32, ptr %18, align 4, !tbaa !13
  %1099 = sext i32 %1098 to i64
  %1100 = getelementptr inbounds double, ptr %1097, i64 %1099
  store double %1096, ptr %1100, align 8, !tbaa !29
  br label %1101

1101:                                             ; preds = %1091, %1088
  br label %1102

1102:                                             ; preds = %1101
  %1103 = load i32, ptr %18, align 4, !tbaa !13
  %1104 = add nsw i32 %1103, 1
  store i32 %1104, ptr %18, align 4, !tbaa !13
  br label %1071, !llvm.loop !47

1105:                                             ; preds = %1071
  %1106 = load ptr, ptr %36, align 8, !tbaa !5
  call void @free(ptr noundef %1106) #7
  %1107 = load ptr, ptr %37, align 8, !tbaa !5
  call void @free(ptr noundef %1107) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %1853

1108:                                             ; preds = %317, %314
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  store ptr null, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  store ptr null, ptr %49, align 8, !tbaa !5
  %1109 = load i32, ptr %12, align 4, !tbaa !13
  %1110 = sext i32 %1109 to i64
  %1111 = mul i64 4, %1110
  %1112 = call noalias ptr @malloc(i64 noundef %1111) #9
  store ptr %1112, ptr %48, align 8, !tbaa !5
  %1113 = load i32, ptr %12, align 4, !tbaa !13
  %1114 = sext i32 %1113 to i64
  %1115 = mul i64 4, %1114
  %1116 = call noalias ptr @malloc(i64 noundef %1115) #9
  store ptr %1116, ptr %49, align 8, !tbaa !5
  %1117 = load i32, ptr %27, align 4, !tbaa !13
  %1118 = icmp eq i32 %1117, 0
  br i1 %1118, label %1119, label %1407

1119:                                             ; preds = %1108
  %1120 = load i32, ptr %11, align 4, !tbaa !13
  %1121 = icmp eq i32 %1120, 1
  br i1 %1121, label %1122, label %1234

1122:                                             ; preds = %1119
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %1123

1123:                                             ; preds = %1183, %1122
  %1124 = load i32, ptr %19, align 4, !tbaa !13
  %1125 = load i32, ptr %6, align 4, !tbaa !13
  %1126 = icmp slt i32 %1124, %1125
  br i1 %1126, label %1127, label %1186

1127:                                             ; preds = %1123
  %1128 = load i32, ptr %31, align 4, !tbaa !13
  %1129 = icmp ne i32 %1128, 0
  br i1 %1129, label %1130, label %1135

1130:                                             ; preds = %1127
  %1131 = load ptr, ptr %48, align 8, !tbaa !5
  %1132 = load i32, ptr %19, align 4, !tbaa !13
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds float, ptr %1131, i64 %1133
  store float 0.000000e+00, ptr %1134, align 4, !tbaa !48
  br label %1135

1135:                                             ; preds = %1130, %1127
  %1136 = load i32, ptr %32, align 4, !tbaa !13
  %1137 = icmp ne i32 %1136, 0
  br i1 %1137, label %1138, label %1143

1138:                                             ; preds = %1135
  %1139 = load ptr, ptr %49, align 8, !tbaa !5
  %1140 = load i32, ptr %19, align 4, !tbaa !13
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds float, ptr %1139, i64 %1141
  store float 0.000000e+00, ptr %1142, align 4, !tbaa !48
  br label %1143

1143:                                             ; preds = %1138, %1135
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1144

1144:                                             ; preds = %1179, %1143
  %1145 = load i32, ptr %18, align 4, !tbaa !13
  %1146 = load i32, ptr %5, align 4, !tbaa !13
  %1147 = icmp slt i32 %1145, %1146
  br i1 %1147, label %1148, label %1182

1148:                                             ; preds = %1144
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #7
  %1149 = load ptr, ptr %13, align 8, !tbaa !5
  %1150 = load i32, ptr %18, align 4, !tbaa !13
  %1151 = load i32, ptr %19, align 4, !tbaa !13
  %1152 = load i32, ptr %7, align 4, !tbaa !13
  %1153 = load i32, ptr %9, align 4, !tbaa !13
  %1154 = load ptr, ptr %4, align 8, !tbaa !5
  %1155 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1149, i32 noundef %1150, i32 noundef %1151, i32 noundef %1152, i32 noundef %1153, ptr noundef %1154, i32 noundef 3)
  store float %1155, ptr %50, align 4, !tbaa !48
  %1156 = load i32, ptr %31, align 4, !tbaa !13
  %1157 = icmp ne i32 %1156, 0
  br i1 %1157, label %1158, label %1166

1158:                                             ; preds = %1148
  %1159 = load float, ptr %50, align 4, !tbaa !48
  %1160 = load ptr, ptr %48, align 8, !tbaa !5
  %1161 = load i32, ptr %19, align 4, !tbaa !13
  %1162 = sext i32 %1161 to i64
  %1163 = getelementptr inbounds float, ptr %1160, i64 %1162
  %1164 = load float, ptr %1163, align 4, !tbaa !48
  %1165 = fadd float %1164, %1159
  store float %1165, ptr %1163, align 4, !tbaa !48
  br label %1166

1166:                                             ; preds = %1158, %1148
  %1167 = load i32, ptr %32, align 4, !tbaa !13
  %1168 = icmp ne i32 %1167, 0
  br i1 %1168, label %1169, label %1178

1169:                                             ; preds = %1166
  %1170 = load float, ptr %50, align 4, !tbaa !48
  %1171 = load float, ptr %50, align 4, !tbaa !48
  %1172 = load ptr, ptr %49, align 8, !tbaa !5
  %1173 = load i32, ptr %19, align 4, !tbaa !13
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds float, ptr %1172, i64 %1174
  %1176 = load float, ptr %1175, align 4, !tbaa !48
  %1177 = call float @llvm.fmuladd.f32(float %1170, float %1171, float %1176)
  store float %1177, ptr %1175, align 4, !tbaa !48
  br label %1178

1178:                                             ; preds = %1169, %1166
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #7
  br label %1179

1179:                                             ; preds = %1178
  %1180 = load i32, ptr %18, align 4, !tbaa !13
  %1181 = add nsw i32 %1180, 1
  store i32 %1181, ptr %18, align 4, !tbaa !13
  br label %1144, !llvm.loop !50

1182:                                             ; preds = %1144
  br label %1183

1183:                                             ; preds = %1182
  %1184 = load i32, ptr %19, align 4, !tbaa !13
  %1185 = add nsw i32 %1184, 1
  store i32 %1185, ptr %19, align 4, !tbaa !13
  br label %1123, !llvm.loop !51

1186:                                             ; preds = %1123
  %1187 = load i32, ptr %26, align 4, !tbaa !13
  %1188 = icmp ugt i32 %1187, 0
  br i1 %1188, label %1189, label %1233

1189:                                             ; preds = %1186
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %1190

1190:                                             ; preds = %1229, %1189
  %1191 = load i32, ptr %19, align 4, !tbaa !13
  %1192 = load i32, ptr %6, align 4, !tbaa !13
  %1193 = icmp slt i32 %1191, %1192
  br i1 %1193, label %1194, label %1232

1194:                                             ; preds = %1190
  %1195 = load i32, ptr %31, align 4, !tbaa !13
  %1196 = icmp ne i32 %1195, 0
  br i1 %1196, label %1197, label %1211

1197:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  %1198 = load ptr, ptr %14, align 8, !tbaa !5
  %1199 = load i32, ptr %19, align 4, !tbaa !13
  %1200 = load i32, ptr %8, align 4, !tbaa !13
  %1201 = load i32, ptr %10, align 4, !tbaa !13
  %1202 = load ptr, ptr %4, align 8, !tbaa !5
  %1203 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1198, i32 noundef %1199, i32 noundef 0, i32 noundef %1200, i32 noundef %1201, ptr noundef %1202, i32 noundef 3)
  store float %1203, ptr %51, align 4, !tbaa !48
  %1204 = load float, ptr %51, align 4, !tbaa !48
  %1205 = load ptr, ptr %48, align 8, !tbaa !5
  %1206 = load i32, ptr %19, align 4, !tbaa !13
  %1207 = sext i32 %1206 to i64
  %1208 = getelementptr inbounds float, ptr %1205, i64 %1207
  %1209 = load float, ptr %1208, align 4, !tbaa !48
  %1210 = fadd float %1209, %1204
  store float %1210, ptr %1208, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  br label %1211

1211:                                             ; preds = %1197, %1194
  %1212 = load i32, ptr %32, align 4, !tbaa !13
  %1213 = icmp ne i32 %1212, 0
  br i1 %1213, label %1214, label %1228

1214:                                             ; preds = %1211
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #7
  %1215 = load ptr, ptr %15, align 8, !tbaa !5
  %1216 = load i32, ptr %19, align 4, !tbaa !13
  %1217 = load i32, ptr %8, align 4, !tbaa !13
  %1218 = load i32, ptr %10, align 4, !tbaa !13
  %1219 = load ptr, ptr %4, align 8, !tbaa !5
  %1220 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1215, i32 noundef %1216, i32 noundef 0, i32 noundef %1217, i32 noundef %1218, ptr noundef %1219, i32 noundef 3)
  store float %1220, ptr %52, align 4, !tbaa !48
  %1221 = load float, ptr %52, align 4, !tbaa !48
  %1222 = load ptr, ptr %49, align 8, !tbaa !5
  %1223 = load i32, ptr %19, align 4, !tbaa !13
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds float, ptr %1222, i64 %1224
  %1226 = load float, ptr %1225, align 4, !tbaa !48
  %1227 = fadd float %1226, %1221
  store float %1227, ptr %1225, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #7
  br label %1228

1228:                                             ; preds = %1214, %1211
  br label %1229

1229:                                             ; preds = %1228
  %1230 = load i32, ptr %19, align 4, !tbaa !13
  %1231 = add nsw i32 %1230, 1
  store i32 %1231, ptr %19, align 4, !tbaa !13
  br label %1190, !llvm.loop !52

1232:                                             ; preds = %1190
  br label %1233

1233:                                             ; preds = %1232, %1186
  br label %1406

1234:                                             ; preds = %1119
  %1235 = load i64, ptr %29, align 8, !tbaa !25
  %1236 = icmp eq i64 %1235, 0
  br i1 %1236, label %1237, label %1349

1237:                                             ; preds = %1234
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1238

1238:                                             ; preds = %1298, %1237
  %1239 = load i32, ptr %18, align 4, !tbaa !13
  %1240 = load i32, ptr %5, align 4, !tbaa !13
  %1241 = icmp slt i32 %1239, %1240
  br i1 %1241, label %1242, label %1301

1242:                                             ; preds = %1238
  %1243 = load i32, ptr %31, align 4, !tbaa !13
  %1244 = icmp ne i32 %1243, 0
  br i1 %1244, label %1245, label %1250

1245:                                             ; preds = %1242
  %1246 = load ptr, ptr %48, align 8, !tbaa !5
  %1247 = load i32, ptr %18, align 4, !tbaa !13
  %1248 = sext i32 %1247 to i64
  %1249 = getelementptr inbounds float, ptr %1246, i64 %1248
  store float 0.000000e+00, ptr %1249, align 4, !tbaa !48
  br label %1250

1250:                                             ; preds = %1245, %1242
  %1251 = load i32, ptr %32, align 4, !tbaa !13
  %1252 = icmp ne i32 %1251, 0
  br i1 %1252, label %1253, label %1258

1253:                                             ; preds = %1250
  %1254 = load ptr, ptr %49, align 8, !tbaa !5
  %1255 = load i32, ptr %18, align 4, !tbaa !13
  %1256 = sext i32 %1255 to i64
  %1257 = getelementptr inbounds float, ptr %1254, i64 %1256
  store float 0.000000e+00, ptr %1257, align 4, !tbaa !48
  br label %1258

1258:                                             ; preds = %1253, %1250
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %1259

1259:                                             ; preds = %1294, %1258
  %1260 = load i32, ptr %19, align 4, !tbaa !13
  %1261 = load i32, ptr %6, align 4, !tbaa !13
  %1262 = icmp slt i32 %1260, %1261
  br i1 %1262, label %1263, label %1297

1263:                                             ; preds = %1259
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #7
  %1264 = load ptr, ptr %13, align 8, !tbaa !5
  %1265 = load i32, ptr %18, align 4, !tbaa !13
  %1266 = load i32, ptr %19, align 4, !tbaa !13
  %1267 = load i32, ptr %7, align 4, !tbaa !13
  %1268 = load i32, ptr %9, align 4, !tbaa !13
  %1269 = load ptr, ptr %4, align 8, !tbaa !5
  %1270 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1264, i32 noundef %1265, i32 noundef %1266, i32 noundef %1267, i32 noundef %1268, ptr noundef %1269, i32 noundef 3)
  store float %1270, ptr %53, align 4, !tbaa !48
  %1271 = load i32, ptr %31, align 4, !tbaa !13
  %1272 = icmp ne i32 %1271, 0
  br i1 %1272, label %1273, label %1281

1273:                                             ; preds = %1263
  %1274 = load float, ptr %53, align 4, !tbaa !48
  %1275 = load ptr, ptr %48, align 8, !tbaa !5
  %1276 = load i32, ptr %18, align 4, !tbaa !13
  %1277 = sext i32 %1276 to i64
  %1278 = getelementptr inbounds float, ptr %1275, i64 %1277
  %1279 = load float, ptr %1278, align 4, !tbaa !48
  %1280 = fadd float %1279, %1274
  store float %1280, ptr %1278, align 4, !tbaa !48
  br label %1281

1281:                                             ; preds = %1273, %1263
  %1282 = load i32, ptr %32, align 4, !tbaa !13
  %1283 = icmp ne i32 %1282, 0
  br i1 %1283, label %1284, label %1293

1284:                                             ; preds = %1281
  %1285 = load float, ptr %53, align 4, !tbaa !48
  %1286 = load float, ptr %53, align 4, !tbaa !48
  %1287 = load ptr, ptr %49, align 8, !tbaa !5
  %1288 = load i32, ptr %18, align 4, !tbaa !13
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds float, ptr %1287, i64 %1289
  %1291 = load float, ptr %1290, align 4, !tbaa !48
  %1292 = call float @llvm.fmuladd.f32(float %1285, float %1286, float %1291)
  store float %1292, ptr %1290, align 4, !tbaa !48
  br label %1293

1293:                                             ; preds = %1284, %1281
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #7
  br label %1294

1294:                                             ; preds = %1293
  %1295 = load i32, ptr %19, align 4, !tbaa !13
  %1296 = add nsw i32 %1295, 1
  store i32 %1296, ptr %19, align 4, !tbaa !13
  br label %1259, !llvm.loop !53

1297:                                             ; preds = %1259
  br label %1298

1298:                                             ; preds = %1297
  %1299 = load i32, ptr %18, align 4, !tbaa !13
  %1300 = add nsw i32 %1299, 1
  store i32 %1300, ptr %18, align 4, !tbaa !13
  br label %1238, !llvm.loop !54

1301:                                             ; preds = %1238
  %1302 = load i32, ptr %26, align 4, !tbaa !13
  %1303 = icmp ugt i32 %1302, 0
  br i1 %1303, label %1304, label %1348

1304:                                             ; preds = %1301
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1305

1305:                                             ; preds = %1344, %1304
  %1306 = load i32, ptr %18, align 4, !tbaa !13
  %1307 = load i32, ptr %5, align 4, !tbaa !13
  %1308 = icmp slt i32 %1306, %1307
  br i1 %1308, label %1309, label %1347

1309:                                             ; preds = %1305
  %1310 = load i32, ptr %31, align 4, !tbaa !13
  %1311 = icmp ne i32 %1310, 0
  br i1 %1311, label %1312, label %1326

1312:                                             ; preds = %1309
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  %1313 = load ptr, ptr %14, align 8, !tbaa !5
  %1314 = load i32, ptr %18, align 4, !tbaa !13
  %1315 = load i32, ptr %8, align 4, !tbaa !13
  %1316 = load i32, ptr %10, align 4, !tbaa !13
  %1317 = load ptr, ptr %4, align 8, !tbaa !5
  %1318 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1313, i32 noundef %1314, i32 noundef 0, i32 noundef %1315, i32 noundef %1316, ptr noundef %1317, i32 noundef 3)
  store float %1318, ptr %54, align 4, !tbaa !48
  %1319 = load float, ptr %54, align 4, !tbaa !48
  %1320 = load ptr, ptr %48, align 8, !tbaa !5
  %1321 = load i32, ptr %18, align 4, !tbaa !13
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr inbounds float, ptr %1320, i64 %1322
  %1324 = load float, ptr %1323, align 4, !tbaa !48
  %1325 = fadd float %1324, %1319
  store float %1325, ptr %1323, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %1326

1326:                                             ; preds = %1312, %1309
  %1327 = load i32, ptr %32, align 4, !tbaa !13
  %1328 = icmp ne i32 %1327, 0
  br i1 %1328, label %1329, label %1343

1329:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  %1330 = load ptr, ptr %15, align 8, !tbaa !5
  %1331 = load i32, ptr %18, align 4, !tbaa !13
  %1332 = load i32, ptr %8, align 4, !tbaa !13
  %1333 = load i32, ptr %10, align 4, !tbaa !13
  %1334 = load ptr, ptr %4, align 8, !tbaa !5
  %1335 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1330, i32 noundef %1331, i32 noundef 0, i32 noundef %1332, i32 noundef %1333, ptr noundef %1334, i32 noundef 3)
  store float %1335, ptr %55, align 4, !tbaa !48
  %1336 = load float, ptr %55, align 4, !tbaa !48
  %1337 = load ptr, ptr %49, align 8, !tbaa !5
  %1338 = load i32, ptr %18, align 4, !tbaa !13
  %1339 = sext i32 %1338 to i64
  %1340 = getelementptr inbounds float, ptr %1337, i64 %1339
  %1341 = load float, ptr %1340, align 4, !tbaa !48
  %1342 = fadd float %1341, %1336
  store float %1342, ptr %1340, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  br label %1343

1343:                                             ; preds = %1329, %1326
  br label %1344

1344:                                             ; preds = %1343
  %1345 = load i32, ptr %18, align 4, !tbaa !13
  %1346 = add nsw i32 %1345, 1
  store i32 %1346, ptr %18, align 4, !tbaa !13
  br label %1305, !llvm.loop !55

1347:                                             ; preds = %1305
  br label %1348

1348:                                             ; preds = %1347, %1301
  br label %1405

1349:                                             ; preds = %1234
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1350

1350:                                             ; preds = %1401, %1349
  %1351 = load i32, ptr %18, align 4, !tbaa !13
  %1352 = load i32, ptr %5, align 4, !tbaa !13
  %1353 = icmp slt i32 %1351, %1352
  br i1 %1353, label %1354, label %1404

1354:                                             ; preds = %1350
  %1355 = load ptr, ptr %48, align 8, !tbaa !5
  %1356 = load i32, ptr %18, align 4, !tbaa !13
  %1357 = sext i32 %1356 to i64
  %1358 = getelementptr inbounds float, ptr %1355, i64 %1357
  store float 0.000000e+00, ptr %1358, align 4, !tbaa !48
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %1359

1359:                                             ; preds = %1397, %1354
  %1360 = load i32, ptr %20, align 4, !tbaa !13
  %1361 = load i64, ptr %29, align 8, !tbaa !25
  %1362 = trunc i64 %1361 to i32
  %1363 = icmp slt i32 %1360, %1362
  br i1 %1363, label %1364, label %1400

1364:                                             ; preds = %1359
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #7
  %1365 = load i32, ptr %30, align 4, !tbaa !13
  %1366 = icmp eq i32 %1365, 4
  br i1 %1366, label %1367, label %1374

1367:                                             ; preds = %1364
  %1368 = load ptr, ptr %22, align 8, !tbaa !5
  %1369 = load i32, ptr %20, align 4, !tbaa !13
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds i32, ptr %1368, i64 %1370
  %1372 = load i32, ptr %1371, align 4, !tbaa !13
  %1373 = zext i32 %1372 to i64
  br label %1380

1374:                                             ; preds = %1364
  %1375 = load ptr, ptr %23, align 8, !tbaa !5
  %1376 = load i32, ptr %20, align 4, !tbaa !13
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds i64, ptr %1375, i64 %1377
  %1379 = load i64, ptr %1378, align 8, !tbaa !25
  br label %1380

1380:                                             ; preds = %1374, %1367
  %1381 = phi i64 [ %1373, %1367 ], [ %1379, %1374 ]
  %1382 = trunc i64 %1381 to i32
  store i32 %1382, ptr %19, align 4, !tbaa !13
  %1383 = load ptr, ptr %13, align 8, !tbaa !5
  %1384 = load i32, ptr %18, align 4, !tbaa !13
  %1385 = load i32, ptr %19, align 4, !tbaa !13
  %1386 = load i32, ptr %7, align 4, !tbaa !13
  %1387 = load i32, ptr %9, align 4, !tbaa !13
  %1388 = load ptr, ptr %4, align 8, !tbaa !5
  %1389 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1383, i32 noundef %1384, i32 noundef %1385, i32 noundef %1386, i32 noundef %1387, ptr noundef %1388, i32 noundef 3)
  store float %1389, ptr %56, align 4, !tbaa !48
  %1390 = load float, ptr %56, align 4, !tbaa !48
  %1391 = load ptr, ptr %48, align 8, !tbaa !5
  %1392 = load i32, ptr %18, align 4, !tbaa !13
  %1393 = sext i32 %1392 to i64
  %1394 = getelementptr inbounds float, ptr %1391, i64 %1393
  %1395 = load float, ptr %1394, align 4, !tbaa !48
  %1396 = fadd float %1395, %1390
  store float %1396, ptr %1394, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #7
  br label %1397

1397:                                             ; preds = %1380
  %1398 = load i32, ptr %20, align 4, !tbaa !13
  %1399 = add nsw i32 %1398, 1
  store i32 %1399, ptr %20, align 4, !tbaa !13
  br label %1359, !llvm.loop !56

1400:                                             ; preds = %1359
  br label %1401

1401:                                             ; preds = %1400
  %1402 = load i32, ptr %18, align 4, !tbaa !13
  %1403 = add nsw i32 %1402, 1
  store i32 %1403, ptr %18, align 4, !tbaa !13
  br label %1350, !llvm.loop !57

1404:                                             ; preds = %1350
  br label %1405

1405:                                             ; preds = %1404, %1348
  br label %1406

1406:                                             ; preds = %1405, %1233
  br label %1817

1407:                                             ; preds = %1108
  %1408 = load i32, ptr %11, align 4, !tbaa !13
  %1409 = icmp eq i32 %1408, 1
  br i1 %1409, label %1410, label %1561

1410:                                             ; preds = %1407
  store i32 0, ptr %19, align 4, !tbaa !13
  br label %1411

1411:                                             ; preds = %1557, %1410
  %1412 = load i32, ptr %19, align 4, !tbaa !13
  %1413 = load i32, ptr %6, align 4, !tbaa !13
  %1414 = icmp slt i32 %1412, %1413
  br i1 %1414, label %1415, label %1560

1415:                                             ; preds = %1411
  %1416 = load ptr, ptr %13, align 8, !tbaa !5
  %1417 = load i32, ptr %19, align 4, !tbaa !13
  %1418 = load i32, ptr %7, align 4, !tbaa !13
  %1419 = load i32, ptr %9, align 4, !tbaa !13
  %1420 = load ptr, ptr %4, align 8, !tbaa !5
  %1421 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1416, i32 noundef 0, i32 noundef %1417, i32 noundef %1418, i32 noundef %1419, ptr noundef %1420, i32 noundef 3)
  %1422 = load ptr, ptr %48, align 8, !tbaa !5
  %1423 = load i32, ptr %19, align 4, !tbaa !13
  %1424 = sext i32 %1423 to i64
  %1425 = getelementptr inbounds float, ptr %1422, i64 %1424
  store float %1421, ptr %1425, align 4, !tbaa !48
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1426

1426:                                             ; preds = %1553, %1415
  %1427 = load i32, ptr %18, align 4, !tbaa !13
  %1428 = load i32, ptr %5, align 4, !tbaa !13
  %1429 = icmp slt i32 %1427, %1428
  br i1 %1429, label %1430, label %1556

1430:                                             ; preds = %1426
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #7
  %1431 = load ptr, ptr %13, align 8, !tbaa !5
  %1432 = load i32, ptr %18, align 4, !tbaa !13
  %1433 = load i32, ptr %19, align 4, !tbaa !13
  %1434 = load i32, ptr %7, align 4, !tbaa !13
  %1435 = load i32, ptr %9, align 4, !tbaa !13
  %1436 = load ptr, ptr %4, align 8, !tbaa !5
  %1437 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1431, i32 noundef %1432, i32 noundef %1433, i32 noundef %1434, i32 noundef %1435, ptr noundef %1436, i32 noundef 3)
  store float %1437, ptr %57, align 4, !tbaa !48
  %1438 = load i32, ptr %27, align 4, !tbaa !13
  %1439 = icmp eq i32 %1438, 1
  br i1 %1439, label %1440, label %1458

1440:                                             ; preds = %1430
  %1441 = load ptr, ptr %48, align 8, !tbaa !5
  %1442 = load i32, ptr %19, align 4, !tbaa !13
  %1443 = sext i32 %1442 to i64
  %1444 = getelementptr inbounds float, ptr %1441, i64 %1443
  %1445 = load float, ptr %1444, align 4, !tbaa !48
  %1446 = load float, ptr %57, align 4, !tbaa !48
  %1447 = fcmp olt float %1445, %1446
  br i1 %1447, label %1448, label %1450

1448:                                             ; preds = %1440
  %1449 = load float, ptr %57, align 4, !tbaa !48
  br label %1456

1450:                                             ; preds = %1440
  %1451 = load ptr, ptr %48, align 8, !tbaa !5
  %1452 = load i32, ptr %19, align 4, !tbaa !13
  %1453 = sext i32 %1452 to i64
  %1454 = getelementptr inbounds float, ptr %1451, i64 %1453
  %1455 = load float, ptr %1454, align 4, !tbaa !48
  br label %1456

1456:                                             ; preds = %1450, %1448
  %1457 = phi float [ %1449, %1448 ], [ %1455, %1450 ]
  br label %1547

1458:                                             ; preds = %1430
  %1459 = load i32, ptr %27, align 4, !tbaa !13
  %1460 = icmp eq i32 %1459, 3
  br i1 %1460, label %1461, label %1527

1461:                                             ; preds = %1458
  %1462 = load ptr, ptr %48, align 8, !tbaa !5
  %1463 = load i32, ptr %19, align 4, !tbaa !13
  %1464 = sext i32 %1463 to i64
  %1465 = getelementptr inbounds float, ptr %1462, i64 %1464
  %1466 = load float, ptr %1465, align 4, !tbaa !48
  %1467 = fcmp ole float 0.000000e+00, %1466
  br i1 %1467, label %1468, label %1474

1468:                                             ; preds = %1461
  %1469 = load ptr, ptr %48, align 8, !tbaa !5
  %1470 = load i32, ptr %19, align 4, !tbaa !13
  %1471 = sext i32 %1470 to i64
  %1472 = getelementptr inbounds float, ptr %1469, i64 %1471
  %1473 = load float, ptr %1472, align 4, !tbaa !48
  br label %1481

1474:                                             ; preds = %1461
  %1475 = load ptr, ptr %48, align 8, !tbaa !5
  %1476 = load i32, ptr %19, align 4, !tbaa !13
  %1477 = sext i32 %1476 to i64
  %1478 = getelementptr inbounds float, ptr %1475, i64 %1477
  %1479 = load float, ptr %1478, align 4, !tbaa !48
  %1480 = fneg float %1479
  br label %1481

1481:                                             ; preds = %1474, %1468
  %1482 = phi float [ %1473, %1468 ], [ %1480, %1474 ]
  %1483 = load float, ptr %57, align 4, !tbaa !48
  %1484 = fcmp ole float 0.000000e+00, %1483
  br i1 %1484, label %1485, label %1487

1485:                                             ; preds = %1481
  %1486 = load float, ptr %57, align 4, !tbaa !48
  br label %1490

1487:                                             ; preds = %1481
  %1488 = load float, ptr %57, align 4, !tbaa !48
  %1489 = fneg float %1488
  br label %1490

1490:                                             ; preds = %1487, %1485
  %1491 = phi float [ %1486, %1485 ], [ %1489, %1487 ]
  %1492 = fcmp olt float %1482, %1491
  br i1 %1492, label %1493, label %1503

1493:                                             ; preds = %1490
  %1494 = load float, ptr %57, align 4, !tbaa !48
  %1495 = fcmp ole float 0.000000e+00, %1494
  br i1 %1495, label %1496, label %1498

1496:                                             ; preds = %1493
  %1497 = load float, ptr %57, align 4, !tbaa !48
  br label %1501

1498:                                             ; preds = %1493
  %1499 = load float, ptr %57, align 4, !tbaa !48
  %1500 = fneg float %1499
  br label %1501

1501:                                             ; preds = %1498, %1496
  %1502 = phi float [ %1497, %1496 ], [ %1500, %1498 ]
  br label %1525

1503:                                             ; preds = %1490
  %1504 = load ptr, ptr %48, align 8, !tbaa !5
  %1505 = load i32, ptr %19, align 4, !tbaa !13
  %1506 = sext i32 %1505 to i64
  %1507 = getelementptr inbounds float, ptr %1504, i64 %1506
  %1508 = load float, ptr %1507, align 4, !tbaa !48
  %1509 = fcmp ole float 0.000000e+00, %1508
  br i1 %1509, label %1510, label %1516

1510:                                             ; preds = %1503
  %1511 = load ptr, ptr %48, align 8, !tbaa !5
  %1512 = load i32, ptr %19, align 4, !tbaa !13
  %1513 = sext i32 %1512 to i64
  %1514 = getelementptr inbounds float, ptr %1511, i64 %1513
  %1515 = load float, ptr %1514, align 4, !tbaa !48
  br label %1523

1516:                                             ; preds = %1503
  %1517 = load ptr, ptr %48, align 8, !tbaa !5
  %1518 = load i32, ptr %19, align 4, !tbaa !13
  %1519 = sext i32 %1518 to i64
  %1520 = getelementptr inbounds float, ptr %1517, i64 %1519
  %1521 = load float, ptr %1520, align 4, !tbaa !48
  %1522 = fneg float %1521
  br label %1523

1523:                                             ; preds = %1516, %1510
  %1524 = phi float [ %1515, %1510 ], [ %1522, %1516 ]
  br label %1525

1525:                                             ; preds = %1523, %1501
  %1526 = phi float [ %1502, %1501 ], [ %1524, %1523 ]
  br label %1545

1527:                                             ; preds = %1458
  %1528 = load ptr, ptr %48, align 8, !tbaa !5
  %1529 = load i32, ptr %19, align 4, !tbaa !13
  %1530 = sext i32 %1529 to i64
  %1531 = getelementptr inbounds float, ptr %1528, i64 %1530
  %1532 = load float, ptr %1531, align 4, !tbaa !48
  %1533 = load float, ptr %57, align 4, !tbaa !48
  %1534 = fcmp olt float %1532, %1533
  br i1 %1534, label %1535, label %1541

1535:                                             ; preds = %1527
  %1536 = load ptr, ptr %48, align 8, !tbaa !5
  %1537 = load i32, ptr %19, align 4, !tbaa !13
  %1538 = sext i32 %1537 to i64
  %1539 = getelementptr inbounds float, ptr %1536, i64 %1538
  %1540 = load float, ptr %1539, align 4, !tbaa !48
  br label %1543

1541:                                             ; preds = %1527
  %1542 = load float, ptr %57, align 4, !tbaa !48
  br label %1543

1543:                                             ; preds = %1541, %1535
  %1544 = phi float [ %1540, %1535 ], [ %1542, %1541 ]
  br label %1545

1545:                                             ; preds = %1543, %1525
  %1546 = phi float [ %1526, %1525 ], [ %1544, %1543 ]
  br label %1547

1547:                                             ; preds = %1545, %1456
  %1548 = phi float [ %1457, %1456 ], [ %1546, %1545 ]
  %1549 = load ptr, ptr %48, align 8, !tbaa !5
  %1550 = load i32, ptr %19, align 4, !tbaa !13
  %1551 = sext i32 %1550 to i64
  %1552 = getelementptr inbounds float, ptr %1549, i64 %1551
  store float %1548, ptr %1552, align 4, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  br label %1553

1553:                                             ; preds = %1547
  %1554 = load i32, ptr %18, align 4, !tbaa !13
  %1555 = add nsw i32 %1554, 1
  store i32 %1555, ptr %18, align 4, !tbaa !13
  br label %1426, !llvm.loop !58

1556:                                             ; preds = %1426
  br label %1557

1557:                                             ; preds = %1556
  %1558 = load i32, ptr %19, align 4, !tbaa !13
  %1559 = add nsw i32 %1558, 1
  store i32 %1559, ptr %19, align 4, !tbaa !13
  br label %1411, !llvm.loop !59

1560:                                             ; preds = %1411
  br label %1816

1561:                                             ; preds = %1407
  %1562 = load i64, ptr %29, align 8, !tbaa !25
  %1563 = icmp eq i64 %1562, 0
  br i1 %1563, label %1564, label %1566

1564:                                             ; preds = %1561
  %1565 = load i32, ptr %6, align 4, !tbaa !13
  store i32 %1565, ptr %21, align 4, !tbaa !13
  br label %1569

1566:                                             ; preds = %1561
  %1567 = load i64, ptr %29, align 8, !tbaa !25
  %1568 = trunc i64 %1567 to i32
  store i32 %1568, ptr %21, align 4, !tbaa !13
  br label %1569

1569:                                             ; preds = %1566, %1564
  %1570 = load i32, ptr %27, align 4, !tbaa !13
  %1571 = icmp eq i32 %1570, 1
  br i1 %1571, label %1575, label %1572

1572:                                             ; preds = %1569
  %1573 = load i32, ptr %27, align 4, !tbaa !13
  %1574 = icmp eq i32 %1573, 3
  br i1 %1574, label %1575, label %1702

1575:                                             ; preds = %1572, %1569
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1576

1576:                                             ; preds = %1698, %1575
  %1577 = load i32, ptr %18, align 4, !tbaa !13
  %1578 = load i32, ptr %5, align 4, !tbaa !13
  %1579 = icmp slt i32 %1577, %1578
  br i1 %1579, label %1580, label %1701

1580:                                             ; preds = %1576
  %1581 = load i32, ptr %27, align 4, !tbaa !13
  %1582 = icmp eq i32 %1581, 1
  %1583 = zext i1 %1582 to i64
  %1584 = select i1 %1582, float 0xC7EFFFFFE0000000, float 0.000000e+00
  %1585 = load ptr, ptr %48, align 8, !tbaa !5
  %1586 = load i32, ptr %18, align 4, !tbaa !13
  %1587 = sext i32 %1586 to i64
  %1588 = getelementptr inbounds float, ptr %1585, i64 %1587
  store float %1584, ptr %1588, align 4, !tbaa !48
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %1589

1589:                                             ; preds = %1694, %1580
  %1590 = load i32, ptr %20, align 4, !tbaa !13
  %1591 = load i32, ptr %21, align 4, !tbaa !13
  %1592 = icmp slt i32 %1590, %1591
  br i1 %1592, label %1593, label %1697

1593:                                             ; preds = %1589
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %1594 = load i64, ptr %29, align 8, !tbaa !25
  %1595 = icmp eq i64 %1594, 0
  br i1 %1595, label %1596, label %1598

1596:                                             ; preds = %1593
  %1597 = load i32, ptr %20, align 4, !tbaa !13
  store i32 %1597, ptr %19, align 4, !tbaa !13
  br label %1617

1598:                                             ; preds = %1593
  %1599 = load i32, ptr %30, align 4, !tbaa !13
  %1600 = icmp eq i32 %1599, 4
  br i1 %1600, label %1601, label %1608

1601:                                             ; preds = %1598
  %1602 = load ptr, ptr %22, align 8, !tbaa !5
  %1603 = load i32, ptr %20, align 4, !tbaa !13
  %1604 = sext i32 %1603 to i64
  %1605 = getelementptr inbounds i32, ptr %1602, i64 %1604
  %1606 = load i32, ptr %1605, align 4, !tbaa !13
  %1607 = zext i32 %1606 to i64
  br label %1614

1608:                                             ; preds = %1598
  %1609 = load ptr, ptr %23, align 8, !tbaa !5
  %1610 = load i32, ptr %20, align 4, !tbaa !13
  %1611 = sext i32 %1610 to i64
  %1612 = getelementptr inbounds i64, ptr %1609, i64 %1611
  %1613 = load i64, ptr %1612, align 8, !tbaa !25
  br label %1614

1614:                                             ; preds = %1608, %1601
  %1615 = phi i64 [ %1607, %1601 ], [ %1613, %1608 ]
  %1616 = trunc i64 %1615 to i32
  store i32 %1616, ptr %19, align 4, !tbaa !13
  br label %1617

1617:                                             ; preds = %1614, %1596
  %1618 = load ptr, ptr %13, align 8, !tbaa !5
  %1619 = load i32, ptr %18, align 4, !tbaa !13
  %1620 = load i32, ptr %19, align 4, !tbaa !13
  %1621 = load i32, ptr %7, align 4, !tbaa !13
  %1622 = load i32, ptr %9, align 4, !tbaa !13
  %1623 = load ptr, ptr %4, align 8, !tbaa !5
  %1624 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1618, i32 noundef %1619, i32 noundef %1620, i32 noundef %1621, i32 noundef %1622, ptr noundef %1623, i32 noundef 3)
  store float %1624, ptr %58, align 4, !tbaa !48
  %1625 = load i32, ptr %27, align 4, !tbaa !13
  %1626 = icmp eq i32 %1625, 3
  br i1 %1626, label %1627, label %1637

1627:                                             ; preds = %1617
  %1628 = load float, ptr %58, align 4, !tbaa !48
  %1629 = fcmp ole float 0.000000e+00, %1628
  br i1 %1629, label %1630, label %1632

1630:                                             ; preds = %1627
  %1631 = load float, ptr %58, align 4, !tbaa !48
  br label %1635

1632:                                             ; preds = %1627
  %1633 = load float, ptr %58, align 4, !tbaa !48
  %1634 = fneg float %1633
  br label %1635

1635:                                             ; preds = %1632, %1630
  %1636 = phi float [ %1631, %1630 ], [ %1634, %1632 ]
  store float %1636, ptr %58, align 4, !tbaa !48
  br label %1637

1637:                                             ; preds = %1635, %1617
  %1638 = load i32, ptr %28, align 4, !tbaa !13
  %1639 = icmp ugt i32 %1638, 0
  br i1 %1639, label %1640, label %1671

1640:                                             ; preds = %1637
  %1641 = load float, ptr %58, align 4, !tbaa !48
  %1642 = load ptr, ptr %48, align 8, !tbaa !5
  %1643 = load i32, ptr %18, align 4, !tbaa !13
  %1644 = sext i32 %1643 to i64
  %1645 = getelementptr inbounds float, ptr %1642, i64 %1644
  %1646 = load float, ptr %1645, align 4, !tbaa !48
  %1647 = fcmp oge float %1641, %1646
  br i1 %1647, label %1648, label %1670

1648:                                             ; preds = %1640
  %1649 = load float, ptr %58, align 4, !tbaa !48
  %1650 = load ptr, ptr %48, align 8, !tbaa !5
  %1651 = load i32, ptr %18, align 4, !tbaa !13
  %1652 = sext i32 %1651 to i64
  %1653 = getelementptr inbounds float, ptr %1650, i64 %1652
  store float %1649, ptr %1653, align 4, !tbaa !48
  %1654 = load i32, ptr %30, align 4, !tbaa !13
  %1655 = icmp eq i32 %1654, 4
  br i1 %1655, label %1656, label %1662

1656:                                             ; preds = %1648
  %1657 = load i32, ptr %19, align 4, !tbaa !13
  %1658 = load ptr, ptr %24, align 8, !tbaa !5
  %1659 = load i32, ptr %18, align 4, !tbaa !13
  %1660 = sext i32 %1659 to i64
  %1661 = getelementptr inbounds i32, ptr %1658, i64 %1660
  store i32 %1657, ptr %1661, align 4, !tbaa !13
  br label %1669

1662:                                             ; preds = %1648
  %1663 = load i32, ptr %19, align 4, !tbaa !13
  %1664 = sext i32 %1663 to i64
  %1665 = load ptr, ptr %25, align 8, !tbaa !5
  %1666 = load i32, ptr %18, align 4, !tbaa !13
  %1667 = sext i32 %1666 to i64
  %1668 = getelementptr inbounds i64, ptr %1665, i64 %1667
  store i64 %1664, ptr %1668, align 8, !tbaa !25
  br label %1669

1669:                                             ; preds = %1662, %1656
  br label %1670

1670:                                             ; preds = %1669, %1640
  br label %1693

1671:                                             ; preds = %1637
  %1672 = load float, ptr %58, align 4, !tbaa !48
  %1673 = load ptr, ptr %48, align 8, !tbaa !5
  %1674 = load i32, ptr %18, align 4, !tbaa !13
  %1675 = sext i32 %1674 to i64
  %1676 = getelementptr inbounds float, ptr %1673, i64 %1675
  %1677 = load float, ptr %1676, align 4, !tbaa !48
  %1678 = fcmp olt float %1672, %1677
  br i1 %1678, label %1679, label %1685

1679:                                             ; preds = %1671
  %1680 = load ptr, ptr %48, align 8, !tbaa !5
  %1681 = load i32, ptr %18, align 4, !tbaa !13
  %1682 = sext i32 %1681 to i64
  %1683 = getelementptr inbounds float, ptr %1680, i64 %1682
  %1684 = load float, ptr %1683, align 4, !tbaa !48
  br label %1687

1685:                                             ; preds = %1671
  %1686 = load float, ptr %58, align 4, !tbaa !48
  br label %1687

1687:                                             ; preds = %1685, %1679
  %1688 = phi float [ %1684, %1679 ], [ %1686, %1685 ]
  %1689 = load ptr, ptr %48, align 8, !tbaa !5
  %1690 = load i32, ptr %18, align 4, !tbaa !13
  %1691 = sext i32 %1690 to i64
  %1692 = getelementptr inbounds float, ptr %1689, i64 %1691
  store float %1688, ptr %1692, align 4, !tbaa !48
  br label %1693

1693:                                             ; preds = %1687, %1670
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  br label %1694

1694:                                             ; preds = %1693
  %1695 = load i32, ptr %20, align 4, !tbaa !13
  %1696 = add nsw i32 %1695, 1
  store i32 %1696, ptr %20, align 4, !tbaa !13
  br label %1589, !llvm.loop !60

1697:                                             ; preds = %1589
  br label %1698

1698:                                             ; preds = %1697
  %1699 = load i32, ptr %18, align 4, !tbaa !13
  %1700 = add nsw i32 %1699, 1
  store i32 %1700, ptr %18, align 4, !tbaa !13
  br label %1576, !llvm.loop !61

1701:                                             ; preds = %1576
  br label %1702

1702:                                             ; preds = %1701, %1572
  %1703 = load i32, ptr %27, align 4, !tbaa !13
  %1704 = icmp eq i32 %1703, 2
  br i1 %1704, label %1705, label %1815

1705:                                             ; preds = %1702
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1706

1706:                                             ; preds = %1811, %1705
  %1707 = load i32, ptr %18, align 4, !tbaa !13
  %1708 = load i32, ptr %5, align 4, !tbaa !13
  %1709 = icmp slt i32 %1707, %1708
  br i1 %1709, label %1710, label %1814

1710:                                             ; preds = %1706
  %1711 = load ptr, ptr %48, align 8, !tbaa !5
  %1712 = load i32, ptr %18, align 4, !tbaa !13
  %1713 = sext i32 %1712 to i64
  %1714 = getelementptr inbounds float, ptr %1711, i64 %1713
  store float 0x47EFFFFFE0000000, ptr %1714, align 4, !tbaa !48
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %1715

1715:                                             ; preds = %1807, %1710
  %1716 = load i32, ptr %20, align 4, !tbaa !13
  %1717 = load i32, ptr %21, align 4, !tbaa !13
  %1718 = icmp slt i32 %1716, %1717
  br i1 %1718, label %1719, label %1810

1719:                                             ; preds = %1715
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #7
  %1720 = load i64, ptr %29, align 8, !tbaa !25
  %1721 = icmp eq i64 %1720, 0
  br i1 %1721, label %1722, label %1724

1722:                                             ; preds = %1719
  %1723 = load i32, ptr %20, align 4, !tbaa !13
  store i32 %1723, ptr %19, align 4, !tbaa !13
  br label %1743

1724:                                             ; preds = %1719
  %1725 = load i32, ptr %30, align 4, !tbaa !13
  %1726 = icmp eq i32 %1725, 4
  br i1 %1726, label %1727, label %1734

1727:                                             ; preds = %1724
  %1728 = load ptr, ptr %22, align 8, !tbaa !5
  %1729 = load i32, ptr %20, align 4, !tbaa !13
  %1730 = sext i32 %1729 to i64
  %1731 = getelementptr inbounds i32, ptr %1728, i64 %1730
  %1732 = load i32, ptr %1731, align 4, !tbaa !13
  %1733 = zext i32 %1732 to i64
  br label %1740

1734:                                             ; preds = %1724
  %1735 = load ptr, ptr %23, align 8, !tbaa !5
  %1736 = load i32, ptr %20, align 4, !tbaa !13
  %1737 = sext i32 %1736 to i64
  %1738 = getelementptr inbounds i64, ptr %1735, i64 %1737
  %1739 = load i64, ptr %1738, align 8, !tbaa !25
  br label %1740

1740:                                             ; preds = %1734, %1727
  %1741 = phi i64 [ %1733, %1727 ], [ %1739, %1734 ]
  %1742 = trunc i64 %1741 to i32
  store i32 %1742, ptr %19, align 4, !tbaa !13
  br label %1743

1743:                                             ; preds = %1740, %1722
  %1744 = load ptr, ptr %13, align 8, !tbaa !5
  %1745 = load i32, ptr %18, align 4, !tbaa !13
  %1746 = load i32, ptr %19, align 4, !tbaa !13
  %1747 = load i32, ptr %7, align 4, !tbaa !13
  %1748 = load i32, ptr %9, align 4, !tbaa !13
  %1749 = load ptr, ptr %4, align 8, !tbaa !5
  %1750 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1744, i32 noundef %1745, i32 noundef %1746, i32 noundef %1747, i32 noundef %1748, ptr noundef %1749, i32 noundef 3)
  store float %1750, ptr %59, align 4, !tbaa !48
  %1751 = load i32, ptr %28, align 4, !tbaa !13
  %1752 = icmp ugt i32 %1751, 0
  br i1 %1752, label %1753, label %1784

1753:                                             ; preds = %1743
  %1754 = load float, ptr %59, align 4, !tbaa !48
  %1755 = load ptr, ptr %48, align 8, !tbaa !5
  %1756 = load i32, ptr %18, align 4, !tbaa !13
  %1757 = sext i32 %1756 to i64
  %1758 = getelementptr inbounds float, ptr %1755, i64 %1757
  %1759 = load float, ptr %1758, align 4, !tbaa !48
  %1760 = fcmp ole float %1754, %1759
  br i1 %1760, label %1761, label %1783

1761:                                             ; preds = %1753
  %1762 = load float, ptr %59, align 4, !tbaa !48
  %1763 = load ptr, ptr %48, align 8, !tbaa !5
  %1764 = load i32, ptr %18, align 4, !tbaa !13
  %1765 = sext i32 %1764 to i64
  %1766 = getelementptr inbounds float, ptr %1763, i64 %1765
  store float %1762, ptr %1766, align 4, !tbaa !48
  %1767 = load i32, ptr %30, align 4, !tbaa !13
  %1768 = icmp eq i32 %1767, 4
  br i1 %1768, label %1769, label %1775

1769:                                             ; preds = %1761
  %1770 = load i32, ptr %19, align 4, !tbaa !13
  %1771 = load ptr, ptr %24, align 8, !tbaa !5
  %1772 = load i32, ptr %18, align 4, !tbaa !13
  %1773 = sext i32 %1772 to i64
  %1774 = getelementptr inbounds i32, ptr %1771, i64 %1773
  store i32 %1770, ptr %1774, align 4, !tbaa !13
  br label %1782

1775:                                             ; preds = %1761
  %1776 = load i32, ptr %19, align 4, !tbaa !13
  %1777 = sext i32 %1776 to i64
  %1778 = load ptr, ptr %25, align 8, !tbaa !5
  %1779 = load i32, ptr %18, align 4, !tbaa !13
  %1780 = sext i32 %1779 to i64
  %1781 = getelementptr inbounds i64, ptr %1778, i64 %1780
  store i64 %1777, ptr %1781, align 8, !tbaa !25
  br label %1782

1782:                                             ; preds = %1775, %1769
  br label %1783

1783:                                             ; preds = %1782, %1753
  br label %1806

1784:                                             ; preds = %1743
  %1785 = load float, ptr %59, align 4, !tbaa !48
  %1786 = load ptr, ptr %48, align 8, !tbaa !5
  %1787 = load i32, ptr %18, align 4, !tbaa !13
  %1788 = sext i32 %1787 to i64
  %1789 = getelementptr inbounds float, ptr %1786, i64 %1788
  %1790 = load float, ptr %1789, align 4, !tbaa !48
  %1791 = fcmp olt float %1785, %1790
  br i1 %1791, label %1792, label %1794

1792:                                             ; preds = %1784
  %1793 = load float, ptr %59, align 4, !tbaa !48
  br label %1800

1794:                                             ; preds = %1784
  %1795 = load ptr, ptr %48, align 8, !tbaa !5
  %1796 = load i32, ptr %18, align 4, !tbaa !13
  %1797 = sext i32 %1796 to i64
  %1798 = getelementptr inbounds float, ptr %1795, i64 %1797
  %1799 = load float, ptr %1798, align 4, !tbaa !48
  br label %1800

1800:                                             ; preds = %1794, %1792
  %1801 = phi float [ %1793, %1792 ], [ %1799, %1794 ]
  %1802 = load ptr, ptr %48, align 8, !tbaa !5
  %1803 = load i32, ptr %18, align 4, !tbaa !13
  %1804 = sext i32 %1803 to i64
  %1805 = getelementptr inbounds float, ptr %1802, i64 %1804
  store float %1801, ptr %1805, align 4, !tbaa !48
  br label %1806

1806:                                             ; preds = %1800, %1783
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  br label %1807

1807:                                             ; preds = %1806
  %1808 = load i32, ptr %20, align 4, !tbaa !13
  %1809 = add nsw i32 %1808, 1
  store i32 %1809, ptr %20, align 4, !tbaa !13
  br label %1715, !llvm.loop !62

1810:                                             ; preds = %1715
  br label %1811

1811:                                             ; preds = %1810
  %1812 = load i32, ptr %18, align 4, !tbaa !13
  %1813 = add nsw i32 %1812, 1
  store i32 %1813, ptr %18, align 4, !tbaa !13
  br label %1706, !llvm.loop !63

1814:                                             ; preds = %1706
  br label %1815

1815:                                             ; preds = %1814, %1702
  br label %1816

1816:                                             ; preds = %1815, %1560
  br label %1817

1817:                                             ; preds = %1816, %1406
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %1818

1818:                                             ; preds = %1847, %1817
  %1819 = load i32, ptr %18, align 4, !tbaa !13
  %1820 = load i32, ptr %12, align 4, !tbaa !13
  %1821 = icmp slt i32 %1819, %1820
  br i1 %1821, label %1822, label %1850

1822:                                             ; preds = %1818
  %1823 = load i32, ptr %31, align 4, !tbaa !13
  %1824 = icmp ne i32 %1823, 0
  br i1 %1824, label %1825, label %1834

1825:                                             ; preds = %1822
  %1826 = load ptr, ptr %14, align 8, !tbaa !5
  %1827 = load ptr, ptr %48, align 8, !tbaa !5
  %1828 = load i32, ptr %18, align 4, !tbaa !13
  %1829 = sext i32 %1828 to i64
  %1830 = getelementptr inbounds float, ptr %1827, i64 %1829
  %1831 = load i32, ptr %18, align 4, !tbaa !13
  %1832 = load i32, ptr %8, align 4, !tbaa !13
  %1833 = load i32, ptr %10, align 4, !tbaa !13
  call void @libxsmm_elementwise_store_value(ptr noundef %1826, ptr noundef %1830, i32 noundef %1831, i32 noundef 0, i32 noundef %1832, i32 noundef 0, i32 noundef %1833, ptr noundef null, i32 noundef 0)
  br label %1834

1834:                                             ; preds = %1825, %1822
  %1835 = load i32, ptr %32, align 4, !tbaa !13
  %1836 = icmp ne i32 %1835, 0
  br i1 %1836, label %1837, label %1846

1837:                                             ; preds = %1834
  %1838 = load ptr, ptr %15, align 8, !tbaa !5
  %1839 = load ptr, ptr %49, align 8, !tbaa !5
  %1840 = load i32, ptr %18, align 4, !tbaa !13
  %1841 = sext i32 %1840 to i64
  %1842 = getelementptr inbounds float, ptr %1839, i64 %1841
  %1843 = load i32, ptr %18, align 4, !tbaa !13
  %1844 = load i32, ptr %8, align 4, !tbaa !13
  %1845 = load i32, ptr %10, align 4, !tbaa !13
  call void @libxsmm_elementwise_store_value(ptr noundef %1838, ptr noundef %1842, i32 noundef %1843, i32 noundef 0, i32 noundef %1844, i32 noundef 0, i32 noundef %1845, ptr noundef null, i32 noundef 0)
  br label %1846

1846:                                             ; preds = %1837, %1834
  br label %1847

1847:                                             ; preds = %1846
  %1848 = load i32, ptr %18, align 4, !tbaa !13
  %1849 = add nsw i32 %1848, 1
  store i32 %1849, ptr %18, align 4, !tbaa !13
  br label %1818, !llvm.loop !64

1850:                                             ; preds = %1818
  %1851 = load ptr, ptr %48, align 8, !tbaa !5
  call void @free(ptr noundef %1851) #7
  %1852 = load ptr, ptr %49, align 8, !tbaa !5
  call void @free(ptr noundef %1852) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  br label %1853

1853:                                             ; preds = %1850, %1105
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  ret void
}

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #5

; Function Attrs: nounwind
declare void @free(ptr noundef) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"libxsmm_meltw_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !12, i64 27, !12, i64 29, !7, i64 31}
!11 = !{!"int", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !11, i64 4}
!15 = !{!10, !11, i64 8}
!16 = !{!10, !11, i64 12}
!17 = !{!10, !12, i64 27}
!18 = !{!19, !6, i64 32}
!19 = !{!"libxsmm_meltw_unary_param", !20, i64 0, !21, i64 32, !21, i64 80}
!20 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!21 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!22 = !{!19, !6, i64 80}
!23 = !{!19, !6, i64 40}
!24 = !{!19, !6, i64 88}
!25 = !{!26, !26, i64 0}
!26 = !{!"long long", !7, i64 0}
!27 = !{!10, !12, i64 29}
!28 = !{!19, !6, i64 48}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !7, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = distinct !{!39, !32}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !32}
!42 = distinct !{!42, !32}
!43 = distinct !{!43, !32}
!44 = distinct !{!44, !32}
!45 = distinct !{!45, !32}
!46 = distinct !{!46, !32}
!47 = distinct !{!47, !32}
!48 = !{!49, !49, i64 0}
!49 = !{!"float", !7, i64 0}
!50 = distinct !{!50, !32}
!51 = distinct !{!51, !32}
!52 = distinct !{!52, !32}
!53 = distinct !{!53, !32}
!54 = distinct !{!54, !32}
!55 = distinct !{!55, !32}
!56 = distinct !{!56, !32}
!57 = distinct !{!57, !32}
!58 = distinct !{!58, !32}
!59 = distinct !{!59, !32}
!60 = distinct !{!60, !32}
!61 = distinct !{!61, !32}
!62 = distinct !{!62, !32}
!63 = distinct !{!63, !32}
!64 = distinct !{!64, !32}


; 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.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [91 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_elementwise_reduce_kernel = external hidden unnamed_addr constant [102 x i8], align 1
@switch.table.libxsmm_elementwise_reduce_kernel = private unnamed_addr constant [11 x i32] [i32 2, i32 2, i32 1, i32 2, i32 8, i32 2, i32 4, i32 2, i32 2, i32 2, i32 1], align 4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_elementwise_get_float_value(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_elementwise_store_value(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @libxsmm_meltw_getenum_precision(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_elementwise_reduce_kernel(ptr nocapture noundef readonly %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = load i32, ptr %1, align 1, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %1, i64 4
  %5 = load i32, ptr %4, align 1, !tbaa !11
  %6 = getelementptr inbounds i8, ptr %1, i64 8
  %7 = load i32, ptr %6, align 1, !tbaa !12
  %8 = getelementptr inbounds i8, ptr %1, i64 12
  %9 = load i32, ptr %8, align 1, !tbaa !13
  %10 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 0) #7
  %11 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #7
  %12 = getelementptr inbounds i8, ptr %1, i64 27
  %13 = load i16, ptr %12, align 1, !tbaa !14
  %.fr = freeze i16 %13
  %14 = and i16 %.fr, 32
  %.not = icmp eq i16 %14, 0
  %15 = select i1 %.not, i32 %9, i32 %5
  %16 = getelementptr inbounds i8, ptr %0, i64 32
  %17 = load ptr, ptr %16, align 8, !tbaa !15
  %18 = getelementptr inbounds i8, ptr %0, i64 80
  %19 = load ptr, ptr %18, align 8, !tbaa !20
  switch i32 %11, label %20 [
    i32 0, label %25
    i32 1, label %.fold.split
  ]

20:                                               ; preds = %2
  %21 = and i32 %11, -2
  %switch.tableidx = add i32 %21, -2
  %22 = icmp ult i32 %switch.tableidx, 11
  br i1 %22, label %switch.hole_check, label %23

23:                                               ; preds = %switch.hole_check, %20
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 1076, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_elementwise_reduce_kernel) #8
  unreachable

.fold.split:                                      ; preds = %2
  br label %25

switch.hole_check:                                ; preds = %20
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %23

switch.lookup:                                    ; preds = %switch.hole_check
  %24 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_elementwise_reduce_kernel, i64 0, i64 %24
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %25

25:                                               ; preds = %switch.lookup, %2, %.fold.split
  %26 = phi i32 [ 8, %2 ], [ 4, %.fold.split ], [ %switch.load, %switch.lookup ]
  %27 = mul nsw i32 %26, %15
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds i8, ptr %19, i64 %28
  %30 = getelementptr inbounds i8, ptr %0, i64 40
  %31 = load ptr, ptr %30, align 8, !tbaa !21
  %32 = getelementptr inbounds i8, ptr %0, i64 88
  %33 = load ptr, ptr %32, align 8, !tbaa !22
  %34 = zext i16 %.fr to i32
  %35 = and i32 %34, 64
  %.not729 = icmp ne i32 %35, 0
  %36 = and i32 %34, 2048
  %.not730 = icmp eq i32 %36, 0
  %37 = and i32 %34, 128
  %.not731 = icmp eq i32 %37, 0
  %38 = getelementptr inbounds i8, ptr %1, i64 29
  %39 = load i16, ptr %38, align 1, !tbaa !23
  switch i16 %39, label %51 [
    i16 44, label %.thread
    i16 53, label %43
    i16 68, label %47
  ]

.thread:                                          ; preds = %25
  %40 = getelementptr inbounds i8, ptr %0, i64 48
  %41 = load ptr, ptr %40, align 8, !tbaa !24
  %42 = load i64, ptr %41, align 8, !tbaa !25
  br label %.thread769

43:                                               ; preds = %25
  %44 = getelementptr inbounds i8, ptr %0, i64 48
  %45 = load ptr, ptr %44, align 8, !tbaa !24
  %46 = load i64, ptr %45, align 8, !tbaa !25
  br label %.thread769

47:                                               ; preds = %25
  %48 = getelementptr inbounds i8, ptr %0, i64 48
  %49 = load ptr, ptr %48, align 8, !tbaa !24
  %50 = load i64, ptr %49, align 8, !tbaa !25
  br label %.thread769

51:                                               ; preds = %25
  %52 = icmp eq i16 %39, 69
  %53 = icmp eq i16 %39, 70
  %54 = icmp eq i16 %39, 21
  %.3669 = zext i1 %54 to i32
  %.4670 = select i1 %53, i32 3, i32 %.3669
  %.5671 = select i1 %52, i32 2, i32 %.4670
  %55 = icmp ne i16 %39, 20
  %56 = icmp eq i16 %39, 18
  %57 = add i16 %39, -69
  %58 = icmp ult i16 %57, 2
  %59 = or i1 %56, %58
  %60 = or i1 %54, %59
  %61 = add i16 %39, -19
  %narrow = icmp ult i16 %61, 2
  %not. = xor i1 %60, true
  %62 = and i1 %55, %not.
  %or.cond = and i1 %narrow, %62
  %spec.select782 = zext i1 %narrow to i32
  %spec.select783 = select i1 %or.cond, ptr %19, ptr %29
  br label %.thread769

.thread769:                                       ; preds = %51, %43, %.thread, %47
  %63 = phi i1 [ false, %47 ], [ false, %.thread ], [ false, %43 ], [ %62, %51 ]
  %.8674777 = phi i32 [ 2, %47 ], [ 0, %.thread ], [ 1, %43 ], [ %.5671, %51 ]
  %.2677776 = phi i64 [ %50, %47 ], [ %42, %.thread ], [ %46, %43 ], [ 0, %51 ]
  %.8695775 = phi i32 [ 0, %47 ], [ 0, %.thread ], [ 0, %43 ], [ %spec.select782, %51 ]
  %.0 = phi ptr [ %29, %47 ], [ %29, %.thread ], [ %29, %43 ], [ %spec.select783, %51 ]
  %64 = or i32 %11, %10
  %or.cond3 = icmp eq i32 %64, 0
  %65 = sext i32 %15 to i64
  br i1 %or.cond3, label %66, label %630

66:                                               ; preds = %.thread769
  %67 = shl nsw i64 %65, 3
  %68 = tail call noalias ptr @malloc(i64 noundef %67) #9
  %69 = tail call noalias ptr @malloc(i64 noundef %67) #9
  %70 = icmp slt i32 %15, 1
  br i1 %70, label %._crit_edge880, label %.lr.ph879

.lr.ph879:                                        ; preds = %66
  %.not753 = icmp eq i32 %.8695775, 0
  %wide.trip.count1133 = zext nneg i32 %15 to i64
  %xtraiter = and i64 %wide.trip.count1133, 1
  %71 = icmp eq i32 %15, 1
  br i1 %71, label %._crit_edge880.loopexit.unr-lcssa, label %.lr.ph879.new

.lr.ph879.new:                                    ; preds = %.lr.ph879
  %unroll_iter = and i64 %wide.trip.count1133, 2147483646
  br label %72

72:                                               ; preds = %84, %.lr.ph879.new
  %indvars.iv1130 = phi i64 [ 0, %.lr.ph879.new ], [ %indvars.iv.next1131.1, %84 ]
  %niter = phi i64 [ 0, %.lr.ph879.new ], [ %niter.next.1, %84 ]
  br i1 %63, label %75, label %73

73:                                               ; preds = %72
  %74 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1130
  store double 0.000000e+00, ptr %74, align 8, !tbaa !27
  br label %75

75:                                               ; preds = %73, %72
  br i1 %.not753, label %78, label %76

76:                                               ; preds = %75
  %77 = getelementptr inbounds double, ptr %.0, i64 %indvars.iv1130
  store double 0.000000e+00, ptr %77, align 8, !tbaa !27
  br label %78

78:                                               ; preds = %75, %76
  %indvars.iv.next1131 = or disjoint i64 %indvars.iv1130, 1
  br i1 %63, label %81, label %79

79:                                               ; preds = %78
  %80 = getelementptr inbounds double, ptr %68, i64 %indvars.iv.next1131
  store double 0.000000e+00, ptr %80, align 8, !tbaa !27
  br label %81

81:                                               ; preds = %79, %78
  br i1 %.not753, label %84, label %82

82:                                               ; preds = %81
  %83 = getelementptr inbounds double, ptr %.0, i64 %indvars.iv.next1131
  store double 0.000000e+00, ptr %83, align 8, !tbaa !27
  br label %84

84:                                               ; preds = %82, %81
  %indvars.iv.next1131.1 = add nuw nsw i64 %indvars.iv1130, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge880.loopexit.unr-lcssa, label %72, !llvm.loop !29

._crit_edge880.loopexit.unr-lcssa:                ; preds = %84, %.lr.ph879
  %indvars.iv1130.unr = phi i64 [ 0, %.lr.ph879 ], [ %indvars.iv.next1131.1, %84 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge880, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge880.loopexit.unr-lcssa
  br i1 %63, label %87, label %85

85:                                               ; preds = %.epil.preheader
  %86 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1130.unr
  store double 0.000000e+00, ptr %86, align 8, !tbaa !27
  br label %87

87:                                               ; preds = %85, %.epil.preheader
  br i1 %.not753, label %._crit_edge880, label %88

88:                                               ; preds = %87
  %89 = getelementptr inbounds double, ptr %.0, i64 %indvars.iv1130.unr
  store double 0.000000e+00, ptr %89, align 8, !tbaa !27
  br label %._crit_edge880

._crit_edge880:                                   ; preds = %._crit_edge880.loopexit.unr-lcssa, %88, %87, %66
  %90 = icmp eq i32 %.8674777, 0
  br i1 %90, label %91, label %328

91:                                               ; preds = %._crit_edge880
  br i1 %.not, label %176, label %.preheader794

.preheader794:                                    ; preds = %91
  %92 = icmp sgt i32 %5, 0
  br i1 %92, label %.lr.ph954, label %.loopexit

.lr.ph954:                                        ; preds = %.preheader794
  %.not751 = icmp eq i32 %.8695775, 0
  %93 = icmp sgt i32 %3, 0
  %94 = sext i32 %7 to i64
  %wide.trip.count1228 = zext nneg i32 %5 to i64
  %wide.trip.count1213 = zext i32 %3 to i64
  %95 = add nsw i64 %wide.trip.count1213, -1
  %xtraiter1495 = and i64 %wide.trip.count1213, 3
  %96 = icmp ult i64 %95, 3
  %unroll_iter1502 = and i64 %wide.trip.count1213, 2147483644
  %lcmp.mod1499.not = icmp eq i64 %xtraiter1495, 0
  %xtraiter1504 = and i64 %wide.trip.count1213, 3
  %97 = icmp ult i64 %95, 3
  %unroll_iter1509 = and i64 %wide.trip.count1213, 2147483644
  %lcmp.mod1507.not = icmp eq i64 %xtraiter1504, 0
  %xtraiter1512 = and i64 %wide.trip.count1213, 7
  %98 = icmp ult i64 %95, 7
  %unroll_iter1517 = and i64 %wide.trip.count1213, 2147483640
  %lcmp.mod1515.not = icmp eq i64 %xtraiter1512, 0
  br label %99

99:                                               ; preds = %.lr.ph954, %._crit_edge944
  %indvars.iv1225 = phi i64 [ 0, %.lr.ph954 ], [ %indvars.iv.next1226, %._crit_edge944 ]
  br i1 %63, label %102, label %100

100:                                              ; preds = %99
  %101 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1225
  store double 0.000000e+00, ptr %101, align 8, !tbaa !27
  br label %102

102:                                              ; preds = %100, %99
  br i1 %.not751, label %103, label %.thread1281

103:                                              ; preds = %102
  br i1 %93, label %.lr.ph943.split.us, label %._crit_edge944

.thread1281:                                      ; preds = %102
  %104 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1225
  store double 0.000000e+00, ptr %104, align 8, !tbaa !27
  br i1 %93, label %.lr.ph943.split, label %._crit_edge944

.lr.ph943.split.us:                               ; preds = %103
  %105 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1225
  br i1 %63, label %._crit_edge944, label %.lr.ph943.split.us.split

.lr.ph943.split.us.split:                         ; preds = %.lr.ph943.split.us
  %106 = mul nsw i64 %indvars.iv1225, %94
  %.promoted951 = load double, ptr %105, align 8, !tbaa !27
  %invariant.gep1344 = getelementptr double, ptr %17, i64 %106
  br i1 %98, label %._crit_edge944.split.us.split.unr-lcssa, label %.lr.ph943.split.us.split.new

.lr.ph943.split.us.split.new:                     ; preds = %.lr.ph943.split.us.split, %.lr.ph943.split.us.split.new
  %indvars.iv1220 = phi i64 [ %indvars.iv.next1221.7, %.lr.ph943.split.us.split.new ], [ 0, %.lr.ph943.split.us.split ]
  %107 = phi double [ %123, %.lr.ph943.split.us.split.new ], [ %.promoted951, %.lr.ph943.split.us.split ]
  %niter1518 = phi i64 [ %niter1518.next.7, %.lr.ph943.split.us.split.new ], [ 0, %.lr.ph943.split.us.split ]
  %gep1345 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv1220
  %108 = load double, ptr %gep1345, align 8, !tbaa !27
  %109 = fadd double %108, %107
  %indvars.iv.next1221 = or disjoint i64 %indvars.iv1220, 1
  %gep1345.1 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221
  %110 = load double, ptr %gep1345.1, align 8, !tbaa !27
  %111 = fadd double %110, %109
  %indvars.iv.next1221.1 = or disjoint i64 %indvars.iv1220, 2
  %gep1345.2 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.1
  %112 = load double, ptr %gep1345.2, align 8, !tbaa !27
  %113 = fadd double %112, %111
  %indvars.iv.next1221.2 = or disjoint i64 %indvars.iv1220, 3
  %gep1345.3 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.2
  %114 = load double, ptr %gep1345.3, align 8, !tbaa !27
  %115 = fadd double %114, %113
  %indvars.iv.next1221.3 = or disjoint i64 %indvars.iv1220, 4
  %gep1345.4 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.3
  %116 = load double, ptr %gep1345.4, align 8, !tbaa !27
  %117 = fadd double %116, %115
  %indvars.iv.next1221.4 = or disjoint i64 %indvars.iv1220, 5
  %gep1345.5 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.4
  %118 = load double, ptr %gep1345.5, align 8, !tbaa !27
  %119 = fadd double %118, %117
  %indvars.iv.next1221.5 = or disjoint i64 %indvars.iv1220, 6
  %gep1345.6 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.5
  %120 = load double, ptr %gep1345.6, align 8, !tbaa !27
  %121 = fadd double %120, %119
  %indvars.iv.next1221.6 = or disjoint i64 %indvars.iv1220, 7
  %gep1345.7 = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv.next1221.6
  %122 = load double, ptr %gep1345.7, align 8, !tbaa !27
  %123 = fadd double %122, %121
  %indvars.iv.next1221.7 = add nuw nsw i64 %indvars.iv1220, 8
  %niter1518.next.7 = add i64 %niter1518, 8
  %niter1518.ncmp.7 = icmp eq i64 %niter1518.next.7, %unroll_iter1517
  br i1 %niter1518.ncmp.7, label %._crit_edge944.split.us.split.unr-lcssa, label %.lr.ph943.split.us.split.new, !llvm.loop !31

._crit_edge944.split.us.split.unr-lcssa:          ; preds = %.lr.ph943.split.us.split.new, %.lr.ph943.split.us.split
  %.lcssa1410.ph = phi double [ poison, %.lr.ph943.split.us.split ], [ %123, %.lr.ph943.split.us.split.new ]
  %indvars.iv1220.unr = phi i64 [ 0, %.lr.ph943.split.us.split ], [ %indvars.iv.next1221.7, %.lr.ph943.split.us.split.new ]
  %.unr1514 = phi double [ %.promoted951, %.lr.ph943.split.us.split ], [ %123, %.lr.ph943.split.us.split.new ]
  br i1 %lcmp.mod1515.not, label %._crit_edge944.split.us.split, label %.epil.preheader1511

.epil.preheader1511:                              ; preds = %._crit_edge944.split.us.split.unr-lcssa, %.epil.preheader1511
  %indvars.iv1220.epil = phi i64 [ %indvars.iv.next1221.epil, %.epil.preheader1511 ], [ %indvars.iv1220.unr, %._crit_edge944.split.us.split.unr-lcssa ]
  %124 = phi double [ %126, %.epil.preheader1511 ], [ %.unr1514, %._crit_edge944.split.us.split.unr-lcssa ]
  %epil.iter1513 = phi i64 [ %epil.iter1513.next, %.epil.preheader1511 ], [ 0, %._crit_edge944.split.us.split.unr-lcssa ]
  %gep1345.epil = getelementptr double, ptr %invariant.gep1344, i64 %indvars.iv1220.epil
  %125 = load double, ptr %gep1345.epil, align 8, !tbaa !27
  %126 = fadd double %125, %124
  %indvars.iv.next1221.epil = add nuw nsw i64 %indvars.iv1220.epil, 1
  %epil.iter1513.next = add i64 %epil.iter1513, 1
  %epil.iter1513.cmp.not = icmp eq i64 %epil.iter1513.next, %xtraiter1512
  br i1 %epil.iter1513.cmp.not, label %._crit_edge944.split.us.split, label %.epil.preheader1511, !llvm.loop !32

._crit_edge944.split.us.split:                    ; preds = %.epil.preheader1511, %._crit_edge944.split.us.split.unr-lcssa
  %.lcssa1410 = phi double [ %.lcssa1410.ph, %._crit_edge944.split.us.split.unr-lcssa ], [ %126, %.epil.preheader1511 ]
  store double %.lcssa1410, ptr %105, align 8, !tbaa !27
  br label %._crit_edge944

.lr.ph943.split:                                  ; preds = %.thread1281
  %127 = mul nsw i64 %indvars.iv1225, %94
  %128 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1225
  %129 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1225
  %.promoted945 = load double, ptr %129, align 8, !tbaa !27
  br i1 %63, label %.lr.ph943.split.split.us.preheader, label %.lr.ph943.split.split

.lr.ph943.split.split.us.preheader:               ; preds = %.lr.ph943.split
  %invariant.gep1342 = getelementptr double, ptr %17, i64 %127
  br i1 %97, label %._crit_edge944.split.loopexit.unr-lcssa, label %.lr.ph943.split.split.us

.lr.ph943.split.split.us:                         ; preds = %.lr.ph943.split.split.us.preheader, %.lr.ph943.split.split.us
  %indvars.iv1215 = phi i64 [ %indvars.iv.next1216.3, %.lr.ph943.split.split.us ], [ 0, %.lr.ph943.split.split.us.preheader ]
  %130 = phi double [ %138, %.lr.ph943.split.split.us ], [ %.promoted945, %.lr.ph943.split.split.us.preheader ]
  %niter1510 = phi i64 [ %niter1510.next.3, %.lr.ph943.split.split.us ], [ 0, %.lr.ph943.split.split.us.preheader ]
  %gep1343 = getelementptr double, ptr %invariant.gep1342, i64 %indvars.iv1215
  %131 = load double, ptr %gep1343, align 8, !tbaa !27
  %132 = tail call double @llvm.fmuladd.f64(double %131, double %131, double %130)
  %indvars.iv.next1216 = or disjoint i64 %indvars.iv1215, 1
  %gep1343.1 = getelementptr double, ptr %invariant.gep1342, i64 %indvars.iv.next1216
  %133 = load double, ptr %gep1343.1, align 8, !tbaa !27
  %134 = tail call double @llvm.fmuladd.f64(double %133, double %133, double %132)
  %indvars.iv.next1216.1 = or disjoint i64 %indvars.iv1215, 2
  %gep1343.2 = getelementptr double, ptr %invariant.gep1342, i64 %indvars.iv.next1216.1
  %135 = load double, ptr %gep1343.2, align 8, !tbaa !27
  %136 = tail call double @llvm.fmuladd.f64(double %135, double %135, double %134)
  %indvars.iv.next1216.2 = or disjoint i64 %indvars.iv1215, 3
  %gep1343.3 = getelementptr double, ptr %invariant.gep1342, i64 %indvars.iv.next1216.2
  %137 = load double, ptr %gep1343.3, align 8, !tbaa !27
  %138 = tail call double @llvm.fmuladd.f64(double %137, double %137, double %136)
  %indvars.iv.next1216.3 = add nuw nsw i64 %indvars.iv1215, 4
  %niter1510.next.3 = add i64 %niter1510, 4
  %niter1510.ncmp.3 = icmp eq i64 %niter1510.next.3, %unroll_iter1509
  br i1 %niter1510.ncmp.3, label %._crit_edge944.split.loopexit.unr-lcssa, label %.lr.ph943.split.split.us, !llvm.loop !31

.lr.ph943.split.split:                            ; preds = %.lr.ph943.split
  %.promoted949 = load double, ptr %128, align 8, !tbaa !27
  %invariant.gep1340 = getelementptr double, ptr %17, i64 %127
  br i1 %96, label %._crit_edge944.split.split.unr-lcssa, label %.lr.ph943.split.split.new

.lr.ph943.split.split.new:                        ; preds = %.lr.ph943.split.split, %.lr.ph943.split.split.new
  %indvars.iv1210 = phi i64 [ %indvars.iv.next1211.3, %.lr.ph943.split.split.new ], [ 0, %.lr.ph943.split.split ]
  %139 = phi double [ %151, %.lr.ph943.split.split.new ], [ %.promoted949, %.lr.ph943.split.split ]
  %140 = phi double [ %152, %.lr.ph943.split.split.new ], [ %.promoted945, %.lr.ph943.split.split ]
  %niter1503 = phi i64 [ %niter1503.next.3, %.lr.ph943.split.split.new ], [ 0, %.lr.ph943.split.split ]
  %gep1341 = getelementptr double, ptr %invariant.gep1340, i64 %indvars.iv1210
  %141 = load double, ptr %gep1341, align 8, !tbaa !27
  %142 = fadd double %141, %139
  %143 = tail call double @llvm.fmuladd.f64(double %141, double %141, double %140)
  %indvars.iv.next1211 = or disjoint i64 %indvars.iv1210, 1
  %gep1341.1 = getelementptr double, ptr %invariant.gep1340, i64 %indvars.iv.next1211
  %144 = load double, ptr %gep1341.1, align 8, !tbaa !27
  %145 = fadd double %144, %142
  %146 = tail call double @llvm.fmuladd.f64(double %144, double %144, double %143)
  %indvars.iv.next1211.1 = or disjoint i64 %indvars.iv1210, 2
  %gep1341.2 = getelementptr double, ptr %invariant.gep1340, i64 %indvars.iv.next1211.1
  %147 = load double, ptr %gep1341.2, align 8, !tbaa !27
  %148 = fadd double %147, %145
  %149 = tail call double @llvm.fmuladd.f64(double %147, double %147, double %146)
  %indvars.iv.next1211.2 = or disjoint i64 %indvars.iv1210, 3
  %gep1341.3 = getelementptr double, ptr %invariant.gep1340, i64 %indvars.iv.next1211.2
  %150 = load double, ptr %gep1341.3, align 8, !tbaa !27
  %151 = fadd double %150, %148
  %152 = tail call double @llvm.fmuladd.f64(double %150, double %150, double %149)
  %indvars.iv.next1211.3 = add nuw nsw i64 %indvars.iv1210, 4
  %niter1503.next.3 = add i64 %niter1503, 4
  %niter1503.ncmp.3 = icmp eq i64 %niter1503.next.3, %unroll_iter1502
  br i1 %niter1503.ncmp.3, label %._crit_edge944.split.split.unr-lcssa, label %.lr.ph943.split.split.new, !llvm.loop !31

._crit_edge944.split.split.unr-lcssa:             ; preds = %.lr.ph943.split.split.new, %.lr.ph943.split.split
  %.lcssa1408.ph = phi double [ poison, %.lr.ph943.split.split ], [ %151, %.lr.ph943.split.split.new ]
  %.lcssa1407.ph = phi double [ poison, %.lr.ph943.split.split ], [ %152, %.lr.ph943.split.split.new ]
  %indvars.iv1210.unr = phi i64 [ 0, %.lr.ph943.split.split ], [ %indvars.iv.next1211.3, %.lr.ph943.split.split.new ]
  %.unr1497 = phi double [ %.promoted949, %.lr.ph943.split.split ], [ %151, %.lr.ph943.split.split.new ]
  %.unr1498 = phi double [ %.promoted945, %.lr.ph943.split.split ], [ %152, %.lr.ph943.split.split.new ]
  br i1 %lcmp.mod1499.not, label %._crit_edge944.split.split, label %.epil.preheader1494

.epil.preheader1494:                              ; preds = %._crit_edge944.split.split.unr-lcssa, %.epil.preheader1494
  %indvars.iv1210.epil = phi i64 [ %indvars.iv.next1211.epil, %.epil.preheader1494 ], [ %indvars.iv1210.unr, %._crit_edge944.split.split.unr-lcssa ]
  %153 = phi double [ %156, %.epil.preheader1494 ], [ %.unr1497, %._crit_edge944.split.split.unr-lcssa ]
  %154 = phi double [ %157, %.epil.preheader1494 ], [ %.unr1498, %._crit_edge944.split.split.unr-lcssa ]
  %epil.iter1496 = phi i64 [ %epil.iter1496.next, %.epil.preheader1494 ], [ 0, %._crit_edge944.split.split.unr-lcssa ]
  %gep1341.epil = getelementptr double, ptr %invariant.gep1340, i64 %indvars.iv1210.epil
  %155 = load double, ptr %gep1341.epil, align 8, !tbaa !27
  %156 = fadd double %155, %153
  %157 = tail call double @llvm.fmuladd.f64(double %155, double %155, double %154)
  %indvars.iv.next1211.epil = add nuw nsw i64 %indvars.iv1210.epil, 1
  %epil.iter1496.next = add i64 %epil.iter1496, 1
  %epil.iter1496.cmp.not = icmp eq i64 %epil.iter1496.next, %xtraiter1495
  br i1 %epil.iter1496.cmp.not, label %._crit_edge944.split.split, label %.epil.preheader1494, !llvm.loop !34

._crit_edge944.split.split:                       ; preds = %.epil.preheader1494, %._crit_edge944.split.split.unr-lcssa
  %.lcssa1408 = phi double [ %.lcssa1408.ph, %._crit_edge944.split.split.unr-lcssa ], [ %156, %.epil.preheader1494 ]
  %.lcssa1407 = phi double [ %.lcssa1407.ph, %._crit_edge944.split.split.unr-lcssa ], [ %157, %.epil.preheader1494 ]
  store double %.lcssa1408, ptr %128, align 8, !tbaa !27
  br label %._crit_edge944.split

._crit_edge944.split.loopexit.unr-lcssa:          ; preds = %.lr.ph943.split.split.us, %.lr.ph943.split.split.us.preheader
  %.lcssa1409.ph = phi double [ poison, %.lr.ph943.split.split.us.preheader ], [ %138, %.lr.ph943.split.split.us ]
  %indvars.iv1215.unr = phi i64 [ 0, %.lr.ph943.split.split.us.preheader ], [ %indvars.iv.next1216.3, %.lr.ph943.split.split.us ]
  %.unr1506 = phi double [ %.promoted945, %.lr.ph943.split.split.us.preheader ], [ %138, %.lr.ph943.split.split.us ]
  br i1 %lcmp.mod1507.not, label %._crit_edge944.split, label %.lr.ph943.split.split.us.epil

.lr.ph943.split.split.us.epil:                    ; preds = %._crit_edge944.split.loopexit.unr-lcssa, %.lr.ph943.split.split.us.epil
  %indvars.iv1215.epil = phi i64 [ %indvars.iv.next1216.epil, %.lr.ph943.split.split.us.epil ], [ %indvars.iv1215.unr, %._crit_edge944.split.loopexit.unr-lcssa ]
  %158 = phi double [ %160, %.lr.ph943.split.split.us.epil ], [ %.unr1506, %._crit_edge944.split.loopexit.unr-lcssa ]
  %epil.iter1505 = phi i64 [ %epil.iter1505.next, %.lr.ph943.split.split.us.epil ], [ 0, %._crit_edge944.split.loopexit.unr-lcssa ]
  %gep1343.epil = getelementptr double, ptr %invariant.gep1342, i64 %indvars.iv1215.epil
  %159 = load double, ptr %gep1343.epil, align 8, !tbaa !27
  %160 = tail call double @llvm.fmuladd.f64(double %159, double %159, double %158)
  %indvars.iv.next1216.epil = add nuw nsw i64 %indvars.iv1215.epil, 1
  %epil.iter1505.next = add i64 %epil.iter1505, 1
  %epil.iter1505.cmp.not = icmp eq i64 %epil.iter1505.next, %xtraiter1504
  br i1 %epil.iter1505.cmp.not, label %._crit_edge944.split, label %.lr.ph943.split.split.us.epil, !llvm.loop !35

._crit_edge944.split:                             ; preds = %._crit_edge944.split.loopexit.unr-lcssa, %.lr.ph943.split.split.us.epil, %._crit_edge944.split.split
  %.us-phi948 = phi double [ %.lcssa1407, %._crit_edge944.split.split ], [ %.lcssa1409.ph, %._crit_edge944.split.loopexit.unr-lcssa ], [ %160, %.lr.ph943.split.split.us.epil ]
  store double %.us-phi948, ptr %129, align 8, !tbaa !27
  br label %._crit_edge944

._crit_edge944:                                   ; preds = %.lr.ph943.split.us, %.thread1281, %._crit_edge944.split, %._crit_edge944.split.us.split, %103
  %indvars.iv.next1226 = add nuw nsw i64 %indvars.iv1225, 1
  %exitcond1229.not = icmp eq i64 %indvars.iv.next1226, %wide.trip.count1228
  br i1 %exitcond1229.not, label %._crit_edge955, label %99, !llvm.loop !36

._crit_edge955:                                   ; preds = %._crit_edge944
  %or.cond991 = and i1 %.not729, %92
  br i1 %or.cond991, label %.lr.ph957, label %.loopexit

.lr.ph957:                                        ; preds = %._crit_edge955
  %.not749 = icmp eq i32 %.8695775, 0
  %wide.trip.count1233 = zext nneg i32 %5 to i64
  br label %161

161:                                              ; preds = %.lr.ph957, %175
  %indvars.iv1230 = phi i64 [ 0, %.lr.ph957 ], [ %indvars.iv.next1231, %175 ]
  br i1 %63, label %168, label %162

162:                                              ; preds = %161
  %163 = getelementptr inbounds double, ptr %19, i64 %indvars.iv1230
  %164 = load double, ptr %163, align 8, !tbaa !27
  %165 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1230
  %166 = load double, ptr %165, align 8, !tbaa !27
  %167 = fadd double %164, %166
  store double %167, ptr %165, align 8, !tbaa !27
  br label %168

168:                                              ; preds = %162, %161
  br i1 %.not749, label %175, label %169

169:                                              ; preds = %168
  %170 = getelementptr inbounds double, ptr %.0, i64 %indvars.iv1230
  %171 = load double, ptr %170, align 8, !tbaa !27
  %172 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1230
  %173 = load double, ptr %172, align 8, !tbaa !27
  %174 = fadd double %171, %173
  store double %174, ptr %172, align 8, !tbaa !27
  br label %175

175:                                              ; preds = %168, %169
  %indvars.iv.next1231 = add nuw nsw i64 %indvars.iv1230, 1
  %exitcond1234.not = icmp eq i64 %indvars.iv.next1231, %wide.trip.count1233
  br i1 %exitcond1234.not, label %.loopexit, label %161, !llvm.loop !37

176:                                              ; preds = %91
  %177 = icmp eq i64 %.2677776, 0
  %178 = icmp sgt i32 %3, 0
  br i1 %177, label %.preheader789, label %.preheader790

.preheader790:                                    ; preds = %176
  br i1 %178, label %.lr.ph967, label %.loopexit

.lr.ph967:                                        ; preds = %.preheader790
  %179 = trunc i64 %.2677776 to i32
  %180 = icmp sgt i32 %179, 0
  %wide.trip.count1248 = zext nneg i32 %3 to i64
  %wide.trip.count1238 = and i64 %.2677776, 2147483647
  %181 = add nsw i64 %wide.trip.count1238, -1
  %xtraiter1519 = and i64 %.2677776, 1
  %182 = icmp eq i64 %181, 0
  %unroll_iter1524 = sub nsw i64 %wide.trip.count1238, %xtraiter1519
  %lcmp.mod1522.not = icmp eq i64 %xtraiter1519, 0
  %xtraiter1526 = and i64 %.2677776, 1
  %183 = icmp eq i64 %181, 0
  %unroll_iter1531 = sub nsw i64 %wide.trip.count1238, %xtraiter1526
  %lcmp.mod1529.not = icmp eq i64 %xtraiter1526, 0
  br label %271

.preheader789:                                    ; preds = %176
  br i1 %178, label %.lr.ph983, label %.loopexit

.lr.ph983:                                        ; preds = %.preheader789
  %.not745 = icmp eq i32 %.8695775, 0
  %184 = icmp sgt i32 %5, 0
  %185 = sext i32 %7 to i64
  %wide.trip.count1268 = zext nneg i32 %3 to i64
  %wide.trip.count1253 = zext i32 %5 to i64
  %xtraiter1534 = and i64 %wide.trip.count1253, 3
  %186 = icmp ult i32 %5, 4
  %unroll_iter1541 = and i64 %wide.trip.count1253, 2147483644
  %lcmp.mod1538.not = icmp eq i64 %xtraiter1534, 0
  %xtraiter1543 = and i64 %wide.trip.count1253, 3
  %187 = icmp ult i32 %5, 4
  %unroll_iter1548 = and i64 %wide.trip.count1253, 2147483644
  %lcmp.mod1546.not = icmp eq i64 %xtraiter1543, 0
  %xtraiter1551 = and i64 %wide.trip.count1253, 3
  %188 = icmp ult i32 %5, 4
  %unroll_iter1556 = and i64 %wide.trip.count1253, 2147483644
  %lcmp.mod1554.not = icmp eq i64 %xtraiter1551, 0
  br label %189

189:                                              ; preds = %.lr.ph983, %._crit_edge971
  %indvars.iv1265 = phi i64 [ 0, %.lr.ph983 ], [ %indvars.iv.next1266, %._crit_edge971 ]
  br i1 %63, label %192, label %190

190:                                              ; preds = %189
  %191 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1265
  store double 0.000000e+00, ptr %191, align 8, !tbaa !27
  br label %192

192:                                              ; preds = %190, %189
  br i1 %.not745, label %193, label %.thread1283

193:                                              ; preds = %192
  br i1 %184, label %.lr.ph970.split.us, label %._crit_edge971

.thread1283:                                      ; preds = %192
  %194 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1265
  store double 0.000000e+00, ptr %194, align 8, !tbaa !27
  br i1 %184, label %.lr.ph970.split, label %._crit_edge971

.lr.ph970.split.us:                               ; preds = %193
  %195 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1265
  br i1 %63, label %._crit_edge971, label %.lr.ph970.split.us.split

.lr.ph970.split.us.split:                         ; preds = %.lr.ph970.split.us
  %.promoted978 = load double, ptr %195, align 8, !tbaa !27
  %invariant.gep1350 = getelementptr double, ptr %17, i64 %indvars.iv1265
  br i1 %188, label %._crit_edge971.split.us.split.unr-lcssa, label %.lr.ph970.split.us.split.new

.lr.ph970.split.us.split.new:                     ; preds = %.lr.ph970.split.us.split, %.lr.ph970.split.us.split.new
  %indvars.iv1260 = phi i64 [ %indvars.iv.next1261.3, %.lr.ph970.split.us.split.new ], [ 0, %.lr.ph970.split.us.split ]
  %196 = phi double [ %208, %.lr.ph970.split.us.split.new ], [ %.promoted978, %.lr.ph970.split.us.split ]
  %niter1557 = phi i64 [ %niter1557.next.3, %.lr.ph970.split.us.split.new ], [ 0, %.lr.ph970.split.us.split ]
  %197 = mul nsw i64 %indvars.iv1260, %185
  %gep1351 = getelementptr double, ptr %invariant.gep1350, i64 %197
  %198 = load double, ptr %gep1351, align 8, !tbaa !27
  %199 = fadd double %198, %196
  %indvars.iv.next1261 = or disjoint i64 %indvars.iv1260, 1
  %200 = mul nsw i64 %indvars.iv.next1261, %185
  %gep1351.1 = getelementptr double, ptr %invariant.gep1350, i64 %200
  %201 = load double, ptr %gep1351.1, align 8, !tbaa !27
  %202 = fadd double %201, %199
  %indvars.iv.next1261.1 = or disjoint i64 %indvars.iv1260, 2
  %203 = mul nsw i64 %indvars.iv.next1261.1, %185
  %gep1351.2 = getelementptr double, ptr %invariant.gep1350, i64 %203
  %204 = load double, ptr %gep1351.2, align 8, !tbaa !27
  %205 = fadd double %204, %202
  %indvars.iv.next1261.2 = or disjoint i64 %indvars.iv1260, 3
  %206 = mul nsw i64 %indvars.iv.next1261.2, %185
  %gep1351.3 = getelementptr double, ptr %invariant.gep1350, i64 %206
  %207 = load double, ptr %gep1351.3, align 8, !tbaa !27
  %208 = fadd double %207, %205
  %indvars.iv.next1261.3 = add nuw nsw i64 %indvars.iv1260, 4
  %niter1557.next.3 = add i64 %niter1557, 4
  %niter1557.ncmp.3 = icmp eq i64 %niter1557.next.3, %unroll_iter1556
  br i1 %niter1557.ncmp.3, label %._crit_edge971.split.us.split.unr-lcssa, label %.lr.ph970.split.us.split.new, !llvm.loop !38

._crit_edge971.split.us.split.unr-lcssa:          ; preds = %.lr.ph970.split.us.split.new, %.lr.ph970.split.us.split
  %.lcssa1401.ph = phi double [ poison, %.lr.ph970.split.us.split ], [ %208, %.lr.ph970.split.us.split.new ]
  %indvars.iv1260.unr = phi i64 [ 0, %.lr.ph970.split.us.split ], [ %indvars.iv.next1261.3, %.lr.ph970.split.us.split.new ]
  %.unr1553 = phi double [ %.promoted978, %.lr.ph970.split.us.split ], [ %208, %.lr.ph970.split.us.split.new ]
  br i1 %lcmp.mod1554.not, label %._crit_edge971.split.us.split, label %.epil.preheader1550

.epil.preheader1550:                              ; preds = %._crit_edge971.split.us.split.unr-lcssa, %.epil.preheader1550
  %indvars.iv1260.epil = phi i64 [ %indvars.iv.next1261.epil, %.epil.preheader1550 ], [ %indvars.iv1260.unr, %._crit_edge971.split.us.split.unr-lcssa ]
  %209 = phi double [ %212, %.epil.preheader1550 ], [ %.unr1553, %._crit_edge971.split.us.split.unr-lcssa ]
  %epil.iter1552 = phi i64 [ %epil.iter1552.next, %.epil.preheader1550 ], [ 0, %._crit_edge971.split.us.split.unr-lcssa ]
  %210 = mul nsw i64 %indvars.iv1260.epil, %185
  %gep1351.epil = getelementptr double, ptr %invariant.gep1350, i64 %210
  %211 = load double, ptr %gep1351.epil, align 8, !tbaa !27
  %212 = fadd double %211, %209
  %indvars.iv.next1261.epil = add nuw nsw i64 %indvars.iv1260.epil, 1
  %epil.iter1552.next = add i64 %epil.iter1552, 1
  %epil.iter1552.cmp.not = icmp eq i64 %epil.iter1552.next, %xtraiter1551
  br i1 %epil.iter1552.cmp.not, label %._crit_edge971.split.us.split, label %.epil.preheader1550, !llvm.loop !39

._crit_edge971.split.us.split:                    ; preds = %.epil.preheader1550, %._crit_edge971.split.us.split.unr-lcssa
  %.lcssa1401 = phi double [ %.lcssa1401.ph, %._crit_edge971.split.us.split.unr-lcssa ], [ %212, %.epil.preheader1550 ]
  store double %.lcssa1401, ptr %195, align 8, !tbaa !27
  br label %._crit_edge971

.lr.ph970.split:                                  ; preds = %.thread1283
  %213 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1265
  %214 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1265
  %.promoted972 = load double, ptr %214, align 8, !tbaa !27
  br i1 %63, label %.lr.ph970.split.split.us.preheader, label %.lr.ph970.split.split

.lr.ph970.split.split.us.preheader:               ; preds = %.lr.ph970.split
  %invariant.gep1348 = getelementptr double, ptr %17, i64 %indvars.iv1265
  br i1 %187, label %._crit_edge971.split.loopexit.unr-lcssa, label %.lr.ph970.split.split.us

.lr.ph970.split.split.us:                         ; preds = %.lr.ph970.split.split.us.preheader, %.lr.ph970.split.split.us
  %indvars.iv1255 = phi i64 [ %indvars.iv.next1256.3, %.lr.ph970.split.split.us ], [ 0, %.lr.ph970.split.split.us.preheader ]
  %215 = phi double [ %227, %.lr.ph970.split.split.us ], [ %.promoted972, %.lr.ph970.split.split.us.preheader ]
  %niter1549 = phi i64 [ %niter1549.next.3, %.lr.ph970.split.split.us ], [ 0, %.lr.ph970.split.split.us.preheader ]
  %216 = mul nsw i64 %indvars.iv1255, %185
  %gep1349 = getelementptr double, ptr %invariant.gep1348, i64 %216
  %217 = load double, ptr %gep1349, align 8, !tbaa !27
  %218 = tail call double @llvm.fmuladd.f64(double %217, double %217, double %215)
  %indvars.iv.next1256 = or disjoint i64 %indvars.iv1255, 1
  %219 = mul nsw i64 %indvars.iv.next1256, %185
  %gep1349.1 = getelementptr double, ptr %invariant.gep1348, i64 %219
  %220 = load double, ptr %gep1349.1, align 8, !tbaa !27
  %221 = tail call double @llvm.fmuladd.f64(double %220, double %220, double %218)
  %indvars.iv.next1256.1 = or disjoint i64 %indvars.iv1255, 2
  %222 = mul nsw i64 %indvars.iv.next1256.1, %185
  %gep1349.2 = getelementptr double, ptr %invariant.gep1348, i64 %222
  %223 = load double, ptr %gep1349.2, align 8, !tbaa !27
  %224 = tail call double @llvm.fmuladd.f64(double %223, double %223, double %221)
  %indvars.iv.next1256.2 = or disjoint i64 %indvars.iv1255, 3
  %225 = mul nsw i64 %indvars.iv.next1256.2, %185
  %gep1349.3 = getelementptr double, ptr %invariant.gep1348, i64 %225
  %226 = load double, ptr %gep1349.3, align 8, !tbaa !27
  %227 = tail call double @llvm.fmuladd.f64(double %226, double %226, double %224)
  %indvars.iv.next1256.3 = add nuw nsw i64 %indvars.iv1255, 4
  %niter1549.next.3 = add i64 %niter1549, 4
  %niter1549.ncmp.3 = icmp eq i64 %niter1549.next.3, %unroll_iter1548
  br i1 %niter1549.ncmp.3, label %._crit_edge971.split.loopexit.unr-lcssa, label %.lr.ph970.split.split.us, !llvm.loop !38

.lr.ph970.split.split:                            ; preds = %.lr.ph970.split
  %.promoted976 = load double, ptr %213, align 8, !tbaa !27
  %invariant.gep1346 = getelementptr double, ptr %17, i64 %indvars.iv1265
  br i1 %186, label %._crit_edge971.split.split.unr-lcssa, label %.lr.ph970.split.split.new

.lr.ph970.split.split.new:                        ; preds = %.lr.ph970.split.split, %.lr.ph970.split.split.new
  %indvars.iv1250 = phi i64 [ %indvars.iv.next1251.3, %.lr.ph970.split.split.new ], [ 0, %.lr.ph970.split.split ]
  %228 = phi double [ %244, %.lr.ph970.split.split.new ], [ %.promoted976, %.lr.ph970.split.split ]
  %229 = phi double [ %245, %.lr.ph970.split.split.new ], [ %.promoted972, %.lr.ph970.split.split ]
  %niter1542 = phi i64 [ %niter1542.next.3, %.lr.ph970.split.split.new ], [ 0, %.lr.ph970.split.split ]
  %230 = mul nsw i64 %indvars.iv1250, %185
  %gep1347 = getelementptr double, ptr %invariant.gep1346, i64 %230
  %231 = load double, ptr %gep1347, align 8, !tbaa !27
  %232 = fadd double %231, %228
  %233 = tail call double @llvm.fmuladd.f64(double %231, double %231, double %229)
  %indvars.iv.next1251 = or disjoint i64 %indvars.iv1250, 1
  %234 = mul nsw i64 %indvars.iv.next1251, %185
  %gep1347.1 = getelementptr double, ptr %invariant.gep1346, i64 %234
  %235 = load double, ptr %gep1347.1, align 8, !tbaa !27
  %236 = fadd double %235, %232
  %237 = tail call double @llvm.fmuladd.f64(double %235, double %235, double %233)
  %indvars.iv.next1251.1 = or disjoint i64 %indvars.iv1250, 2
  %238 = mul nsw i64 %indvars.iv.next1251.1, %185
  %gep1347.2 = getelementptr double, ptr %invariant.gep1346, i64 %238
  %239 = load double, ptr %gep1347.2, align 8, !tbaa !27
  %240 = fadd double %239, %236
  %241 = tail call double @llvm.fmuladd.f64(double %239, double %239, double %237)
  %indvars.iv.next1251.2 = or disjoint i64 %indvars.iv1250, 3
  %242 = mul nsw i64 %indvars.iv.next1251.2, %185
  %gep1347.3 = getelementptr double, ptr %invariant.gep1346, i64 %242
  %243 = load double, ptr %gep1347.3, align 8, !tbaa !27
  %244 = fadd double %243, %240
  %245 = tail call double @llvm.fmuladd.f64(double %243, double %243, double %241)
  %indvars.iv.next1251.3 = add nuw nsw i64 %indvars.iv1250, 4
  %niter1542.next.3 = add i64 %niter1542, 4
  %niter1542.ncmp.3 = icmp eq i64 %niter1542.next.3, %unroll_iter1541
  br i1 %niter1542.ncmp.3, label %._crit_edge971.split.split.unr-lcssa, label %.lr.ph970.split.split.new, !llvm.loop !38

._crit_edge971.split.split.unr-lcssa:             ; preds = %.lr.ph970.split.split.new, %.lr.ph970.split.split
  %.lcssa1399.ph = phi double [ poison, %.lr.ph970.split.split ], [ %244, %.lr.ph970.split.split.new ]
  %.lcssa.ph = phi double [ poison, %.lr.ph970.split.split ], [ %245, %.lr.ph970.split.split.new ]
  %indvars.iv1250.unr = phi i64 [ 0, %.lr.ph970.split.split ], [ %indvars.iv.next1251.3, %.lr.ph970.split.split.new ]
  %.unr1536 = phi double [ %.promoted976, %.lr.ph970.split.split ], [ %244, %.lr.ph970.split.split.new ]
  %.unr1537 = phi double [ %.promoted972, %.lr.ph970.split.split ], [ %245, %.lr.ph970.split.split.new ]
  br i1 %lcmp.mod1538.not, label %._crit_edge971.split.split, label %.epil.preheader1533

.epil.preheader1533:                              ; preds = %._crit_edge971.split.split.unr-lcssa, %.epil.preheader1533
  %indvars.iv1250.epil = phi i64 [ %indvars.iv.next1251.epil, %.epil.preheader1533 ], [ %indvars.iv1250.unr, %._crit_edge971.split.split.unr-lcssa ]
  %246 = phi double [ %250, %.epil.preheader1533 ], [ %.unr1536, %._crit_edge971.split.split.unr-lcssa ]
  %247 = phi double [ %251, %.epil.preheader1533 ], [ %.unr1537, %._crit_edge971.split.split.unr-lcssa ]
  %epil.iter1535 = phi i64 [ %epil.iter1535.next, %.epil.preheader1533 ], [ 0, %._crit_edge971.split.split.unr-lcssa ]
  %248 = mul nsw i64 %indvars.iv1250.epil, %185
  %gep1347.epil = getelementptr double, ptr %invariant.gep1346, i64 %248
  %249 = load double, ptr %gep1347.epil, align 8, !tbaa !27
  %250 = fadd double %249, %246
  %251 = tail call double @llvm.fmuladd.f64(double %249, double %249, double %247)
  %indvars.iv.next1251.epil = add nuw nsw i64 %indvars.iv1250.epil, 1
  %epil.iter1535.next = add i64 %epil.iter1535, 1
  %epil.iter1535.cmp.not = icmp eq i64 %epil.iter1535.next, %xtraiter1534
  br i1 %epil.iter1535.cmp.not, label %._crit_edge971.split.split, label %.epil.preheader1533, !llvm.loop !40

._crit_edge971.split.split:                       ; preds = %.epil.preheader1533, %._crit_edge971.split.split.unr-lcssa
  %.lcssa1399 = phi double [ %.lcssa1399.ph, %._crit_edge971.split.split.unr-lcssa ], [ %250, %.epil.preheader1533 ]
  %.lcssa = phi double [ %.lcssa.ph, %._crit_edge971.split.split.unr-lcssa ], [ %251, %.epil.preheader1533 ]
  store double %.lcssa1399, ptr %213, align 8, !tbaa !27
  br label %._crit_edge971.split

._crit_edge971.split.loopexit.unr-lcssa:          ; preds = %.lr.ph970.split.split.us, %.lr.ph970.split.split.us.preheader
  %.lcssa1400.ph = phi double [ poison, %.lr.ph970.split.split.us.preheader ], [ %227, %.lr.ph970.split.split.us ]
  %indvars.iv1255.unr = phi i64 [ 0, %.lr.ph970.split.split.us.preheader ], [ %indvars.iv.next1256.3, %.lr.ph970.split.split.us ]
  %.unr1545 = phi double [ %.promoted972, %.lr.ph970.split.split.us.preheader ], [ %227, %.lr.ph970.split.split.us ]
  br i1 %lcmp.mod1546.not, label %._crit_edge971.split, label %.lr.ph970.split.split.us.epil

.lr.ph970.split.split.us.epil:                    ; preds = %._crit_edge971.split.loopexit.unr-lcssa, %.lr.ph970.split.split.us.epil
  %indvars.iv1255.epil = phi i64 [ %indvars.iv.next1256.epil, %.lr.ph970.split.split.us.epil ], [ %indvars.iv1255.unr, %._crit_edge971.split.loopexit.unr-lcssa ]
  %252 = phi double [ %255, %.lr.ph970.split.split.us.epil ], [ %.unr1545, %._crit_edge971.split.loopexit.unr-lcssa ]
  %epil.iter1544 = phi i64 [ %epil.iter1544.next, %.lr.ph970.split.split.us.epil ], [ 0, %._crit_edge971.split.loopexit.unr-lcssa ]
  %253 = mul nsw i64 %indvars.iv1255.epil, %185
  %gep1349.epil = getelementptr double, ptr %invariant.gep1348, i64 %253
  %254 = load double, ptr %gep1349.epil, align 8, !tbaa !27
  %255 = tail call double @llvm.fmuladd.f64(double %254, double %254, double %252)
  %indvars.iv.next1256.epil = add nuw nsw i64 %indvars.iv1255.epil, 1
  %epil.iter1544.next = add i64 %epil.iter1544, 1
  %epil.iter1544.cmp.not = icmp eq i64 %epil.iter1544.next, %xtraiter1543
  br i1 %epil.iter1544.cmp.not, label %._crit_edge971.split, label %.lr.ph970.split.split.us.epil, !llvm.loop !41

._crit_edge971.split:                             ; preds = %._crit_edge971.split.loopexit.unr-lcssa, %.lr.ph970.split.split.us.epil, %._crit_edge971.split.split
  %.us-phi975 = phi double [ %.lcssa, %._crit_edge971.split.split ], [ %.lcssa1400.ph, %._crit_edge971.split.loopexit.unr-lcssa ], [ %255, %.lr.ph970.split.split.us.epil ]
  store double %.us-phi975, ptr %214, align 8, !tbaa !27
  br label %._crit_edge971

._crit_edge971:                                   ; preds = %.lr.ph970.split.us, %.thread1283, %._crit_edge971.split, %._crit_edge971.split.us.split, %193
  %indvars.iv.next1266 = add nuw nsw i64 %indvars.iv1265, 1
  %exitcond1269.not = icmp eq i64 %indvars.iv.next1266, %wide.trip.count1268
  br i1 %exitcond1269.not, label %._crit_edge984, label %189, !llvm.loop !42

._crit_edge984:                                   ; preds = %._crit_edge971
  %or.cond993 = and i1 %.not729, %178
  br i1 %or.cond993, label %.lr.ph986, label %.loopexit

.lr.ph986:                                        ; preds = %._crit_edge984
  %.not743 = icmp eq i32 %.8695775, 0
  %wide.trip.count1273 = zext nneg i32 %3 to i64
  br label %256

256:                                              ; preds = %.lr.ph986, %270
  %indvars.iv1270 = phi i64 [ 0, %.lr.ph986 ], [ %indvars.iv.next1271, %270 ]
  br i1 %63, label %263, label %257

257:                                              ; preds = %256
  %258 = getelementptr inbounds double, ptr %19, i64 %indvars.iv1270
  %259 = load double, ptr %258, align 8, !tbaa !27
  %260 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1270
  %261 = load double, ptr %260, align 8, !tbaa !27
  %262 = fadd double %259, %261
  store double %262, ptr %260, align 8, !tbaa !27
  br label %263

263:                                              ; preds = %257, %256
  br i1 %.not743, label %270, label %264

264:                                              ; preds = %263
  %265 = getelementptr inbounds double, ptr %.0, i64 %indvars.iv1270
  %266 = load double, ptr %265, align 8, !tbaa !27
  %267 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1270
  %268 = load double, ptr %267, align 8, !tbaa !27
  %269 = fadd double %266, %268
  store double %269, ptr %267, align 8, !tbaa !27
  br label %270

270:                                              ; preds = %263, %264
  %indvars.iv.next1271 = add nuw nsw i64 %indvars.iv1270, 1
  %exitcond1274.not = icmp eq i64 %indvars.iv.next1271, %wide.trip.count1273
  br i1 %exitcond1274.not, label %.loopexit, label %256, !llvm.loop !43

271:                                              ; preds = %.lr.ph967, %327
  %indvars.iv1245 = phi i64 [ 0, %.lr.ph967 ], [ %indvars.iv.next1246, %327 ]
  %272 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1245
  store double 0.000000e+00, ptr %272, align 8, !tbaa !27
  br i1 %180, label %.lr.ph960, label %327

.lr.ph960:                                        ; preds = %271
  %273 = trunc nuw nsw i64 %indvars.iv1245 to i32
  br i1 %.not731, label %.lr.ph960.split.us.preheader, label %.lr.ph960.split.preheader

.lr.ph960.split.preheader:                        ; preds = %.lr.ph960
  br i1 %182, label %._crit_edge961.loopexit1402.unr-lcssa, label %.lr.ph960.split

.lr.ph960.split.us.preheader:                     ; preds = %.lr.ph960
  br i1 %183, label %._crit_edge961.loopexit.unr-lcssa, label %.lr.ph960.split.us

.lr.ph960.split.us:                               ; preds = %.lr.ph960.split.us.preheader, %.lr.ph960.split.us
  %indvars.iv1240 = phi i64 [ %indvars.iv.next1241.1, %.lr.ph960.split.us ], [ 0, %.lr.ph960.split.us.preheader ]
  %274 = phi double [ %292, %.lr.ph960.split.us ], [ 0.000000e+00, %.lr.ph960.split.us.preheader ]
  %niter1532 = phi i64 [ %niter1532.next.1, %.lr.ph960.split.us ], [ 0, %.lr.ph960.split.us.preheader ]
  %275 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1240
  %276 = load i64, ptr %275, align 8, !tbaa !25
  %277 = trunc i64 %276 to i32
  %278 = mul nsw i32 %7, %277
  %279 = add nsw i32 %278, %273
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds double, ptr %17, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !27
  %283 = fadd double %282, %274
  %indvars.iv.next1241 = or disjoint i64 %indvars.iv1240, 1
  %284 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv.next1241
  %285 = load i64, ptr %284, align 8, !tbaa !25
  %286 = trunc i64 %285 to i32
  %287 = mul nsw i32 %7, %286
  %288 = add nsw i32 %287, %273
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %17, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !27
  %292 = fadd double %291, %283
  %indvars.iv.next1241.1 = add nuw nsw i64 %indvars.iv1240, 2
  %niter1532.next.1 = add i64 %niter1532, 2
  %niter1532.ncmp.1 = icmp eq i64 %niter1532.next.1, %unroll_iter1531
  br i1 %niter1532.ncmp.1, label %._crit_edge961.loopexit.unr-lcssa, label %.lr.ph960.split.us, !llvm.loop !44

.lr.ph960.split:                                  ; preds = %.lr.ph960.split.preheader, %.lr.ph960.split
  %indvars.iv1235 = phi i64 [ %indvars.iv.next1236.1, %.lr.ph960.split ], [ 0, %.lr.ph960.split.preheader ]
  %293 = phi double [ %309, %.lr.ph960.split ], [ 0.000000e+00, %.lr.ph960.split.preheader ]
  %niter1525 = phi i64 [ %niter1525.next.1, %.lr.ph960.split ], [ 0, %.lr.ph960.split.preheader ]
  %294 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1235
  %295 = load i32, ptr %294, align 4, !tbaa !45
  %296 = mul nsw i32 %295, %7
  %297 = add nsw i32 %296, %273
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds double, ptr %17, i64 %298
  %300 = load double, ptr %299, align 8, !tbaa !27
  %301 = fadd double %300, %293
  %indvars.iv.next1236 = or disjoint i64 %indvars.iv1235, 1
  %302 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next1236
  %303 = load i32, ptr %302, align 4, !tbaa !45
  %304 = mul nsw i32 %303, %7
  %305 = add nsw i32 %304, %273
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %17, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !27
  %309 = fadd double %308, %301
  %indvars.iv.next1236.1 = add nuw nsw i64 %indvars.iv1235, 2
  %niter1525.next.1 = add i64 %niter1525, 2
  %niter1525.ncmp.1 = icmp eq i64 %niter1525.next.1, %unroll_iter1524
  br i1 %niter1525.ncmp.1, label %._crit_edge961.loopexit1402.unr-lcssa, label %.lr.ph960.split, !llvm.loop !44

._crit_edge961.loopexit.unr-lcssa:                ; preds = %.lr.ph960.split.us, %.lr.ph960.split.us.preheader
  %.lcssa1405.ph = phi double [ poison, %.lr.ph960.split.us.preheader ], [ %292, %.lr.ph960.split.us ]
  %indvars.iv1240.unr = phi i64 [ 0, %.lr.ph960.split.us.preheader ], [ %indvars.iv.next1241.1, %.lr.ph960.split.us ]
  %.unr1528 = phi double [ 0.000000e+00, %.lr.ph960.split.us.preheader ], [ %292, %.lr.ph960.split.us ]
  br i1 %lcmp.mod1529.not, label %._crit_edge961, label %.lr.ph960.split.us.epil

.lr.ph960.split.us.epil:                          ; preds = %._crit_edge961.loopexit.unr-lcssa
  %310 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1240.unr
  %311 = load i64, ptr %310, align 8, !tbaa !25
  %312 = trunc i64 %311 to i32
  %313 = mul nsw i32 %7, %312
  %314 = add nsw i32 %313, %273
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds double, ptr %17, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !27
  %318 = fadd double %317, %.unr1528
  br label %._crit_edge961

._crit_edge961.loopexit1402.unr-lcssa:            ; preds = %.lr.ph960.split, %.lr.ph960.split.preheader
  %.lcssa1404.ph = phi double [ poison, %.lr.ph960.split.preheader ], [ %309, %.lr.ph960.split ]
  %indvars.iv1235.unr = phi i64 [ 0, %.lr.ph960.split.preheader ], [ %indvars.iv.next1236.1, %.lr.ph960.split ]
  %.unr1521 = phi double [ 0.000000e+00, %.lr.ph960.split.preheader ], [ %309, %.lr.ph960.split ]
  br i1 %lcmp.mod1522.not, label %._crit_edge961, label %.lr.ph960.split.epil

.lr.ph960.split.epil:                             ; preds = %._crit_edge961.loopexit1402.unr-lcssa
  %319 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1235.unr
  %320 = load i32, ptr %319, align 4, !tbaa !45
  %321 = mul nsw i32 %320, %7
  %322 = add nsw i32 %321, %273
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds double, ptr %17, i64 %323
  %325 = load double, ptr %324, align 8, !tbaa !27
  %326 = fadd double %325, %.unr1521
  br label %._crit_edge961

._crit_edge961:                                   ; preds = %.lr.ph960.split.epil, %._crit_edge961.loopexit1402.unr-lcssa, %.lr.ph960.split.us.epil, %._crit_edge961.loopexit.unr-lcssa
  %.us-phi964 = phi double [ %.lcssa1405.ph, %._crit_edge961.loopexit.unr-lcssa ], [ %318, %.lr.ph960.split.us.epil ], [ %.lcssa1404.ph, %._crit_edge961.loopexit1402.unr-lcssa ], [ %326, %.lr.ph960.split.epil ]
  store double %.us-phi964, ptr %272, align 8, !tbaa !27
  br label %327

327:                                              ; preds = %._crit_edge961, %271
  %indvars.iv.next1246 = add nuw nsw i64 %indvars.iv1245, 1
  %exitcond1249.not = icmp eq i64 %indvars.iv.next1246, %wide.trip.count1248
  br i1 %exitcond1249.not, label %.loopexit, label %271, !llvm.loop !46

328:                                              ; preds = %._crit_edge880
  br i1 %.not, label %397, label %.preheader799

.preheader799:                                    ; preds = %328
  %329 = icmp sgt i32 %5, 0
  br i1 %329, label %.lr.ph890, label %.loopexit

.lr.ph890:                                        ; preds = %.preheader799
  %330 = icmp sgt i32 %3, 0
  %331 = sext i32 %7 to i64
  %wide.trip.count1153 = zext nneg i32 %5 to i64
  %wide.trip.count1138 = zext i32 %3 to i64
  %332 = add nsw i64 %wide.trip.count1138, -1
  %xtraiter1444 = and i64 %wide.trip.count1138, 1
  %333 = icmp eq i64 %332, 0
  %unroll_iter1447 = and i64 %wide.trip.count1138, 2147483646
  %lcmp.mod1445.not = icmp eq i64 %xtraiter1444, 0
  %xtraiter1449 = and i64 %wide.trip.count1138, 3
  %334 = icmp ult i64 %332, 3
  %unroll_iter1453 = and i64 %wide.trip.count1138, 2147483644
  %lcmp.mod1451.not = icmp eq i64 %xtraiter1449, 0
  %xtraiter1455 = and i64 %wide.trip.count1138, 3
  %335 = icmp ult i64 %332, 3
  %unroll_iter1460 = and i64 %wide.trip.count1138, 2147483644
  %lcmp.mod1458.not = icmp eq i64 %xtraiter1455, 0
  br label %336

336:                                              ; preds = %.lr.ph890, %396
  %indvars.iv1150 = phi i64 [ 0, %.lr.ph890 ], [ %indvars.iv.next1151, %396 ]
  %337 = mul nsw i64 %indvars.iv1150, %331
  %338 = getelementptr inbounds double, ptr %17, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !27
  %340 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1150
  store double %339, ptr %340, align 8, !tbaa !27
  br i1 %330, label %.lr.ph883, label %396

.lr.ph883:                                        ; preds = %336
  %invariant.gep1334 = getelementptr double, ptr %17, i64 %337
  switch i32 %.8674777, label %.lr.ph883.split.preheader [
    i32 1, label %.lr.ph883.split.us.preheader
    i32 3, label %.lr.ph883.split.us885.preheader
  ]

.lr.ph883.split.us885.preheader:                  ; preds = %.lr.ph883
  br i1 %333, label %._crit_edge884.loopexit1424.unr-lcssa, label %.lr.ph883.split.us885

.lr.ph883.split.us.preheader:                     ; preds = %.lr.ph883
  br i1 %334, label %._crit_edge884.loopexit1423.unr-lcssa, label %.lr.ph883.split.us

.lr.ph883.split.preheader:                        ; preds = %.lr.ph883
  br i1 %335, label %._crit_edge884.loopexit.unr-lcssa, label %.lr.ph883.split

.lr.ph883.split.us:                               ; preds = %.lr.ph883.split.us.preheader, %.lr.ph883.split.us
  %indvars.iv1140 = phi i64 [ %indvars.iv.next1141.3, %.lr.ph883.split.us ], [ 0, %.lr.ph883.split.us.preheader ]
  %341 = phi double [ %..us.3, %.lr.ph883.split.us ], [ %339, %.lr.ph883.split.us.preheader ]
  %niter1454 = phi i64 [ %niter1454.next.3, %.lr.ph883.split.us ], [ 0, %.lr.ph883.split.us.preheader ]
  %gep1333 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1140
  %342 = load double, ptr %gep1333, align 8, !tbaa !27
  %343 = fcmp olt double %341, %342
  %..us = select i1 %343, double %342, double %341
  %indvars.iv.next1141 = or disjoint i64 %indvars.iv1140, 1
  %gep1333.1 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1141
  %344 = load double, ptr %gep1333.1, align 8, !tbaa !27
  %345 = fcmp olt double %..us, %344
  %..us.1 = select i1 %345, double %344, double %..us
  %indvars.iv.next1141.1 = or disjoint i64 %indvars.iv1140, 2
  %gep1333.2 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1141.1
  %346 = load double, ptr %gep1333.2, align 8, !tbaa !27
  %347 = fcmp olt double %..us.1, %346
  %..us.2 = select i1 %347, double %346, double %..us.1
  %indvars.iv.next1141.2 = or disjoint i64 %indvars.iv1140, 3
  %gep1333.3 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1141.2
  %348 = load double, ptr %gep1333.3, align 8, !tbaa !27
  %349 = fcmp olt double %..us.2, %348
  %..us.3 = select i1 %349, double %348, double %..us.2
  %indvars.iv.next1141.3 = add nuw nsw i64 %indvars.iv1140, 4
  %niter1454.next.3 = add i64 %niter1454, 4
  %niter1454.ncmp.3 = icmp eq i64 %niter1454.next.3, %unroll_iter1453
  br i1 %niter1454.ncmp.3, label %._crit_edge884.loopexit1423.unr-lcssa, label %.lr.ph883.split.us, !llvm.loop !47

.lr.ph883.split.us885:                            ; preds = %.lr.ph883.split.us885.preheader, %.lr.ph883.split.us885
  %indvars.iv1135 = phi i64 [ %indvars.iv.next1136.1, %.lr.ph883.split.us885 ], [ 0, %.lr.ph883.split.us885.preheader ]
  %350 = phi double [ %370, %.lr.ph883.split.us885 ], [ %339, %.lr.ph883.split.us885.preheader ]
  %niter1448 = phi i64 [ %niter1448.next.1, %.lr.ph883.split.us885 ], [ 0, %.lr.ph883.split.us885.preheader ]
  %gep = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1135
  %351 = load double, ptr %gep, align 8, !tbaa !27
  %352 = insertelement <2 x double> poison, double %350, i64 0
  %353 = insertelement <2 x double> %352, double %351, i64 1
  %354 = fcmp oge <2 x double> %353, zeroinitializer
  %355 = fneg <2 x double> %353
  %356 = select <2 x i1> %354, <2 x double> %353, <2 x double> %355
  %357 = extractelement <2 x double> %356, i64 0
  %358 = extractelement <2 x double> %356, i64 1
  %359 = fcmp olt double %357, %358
  %360 = select i1 %359, double %358, double %357
  %indvars.iv.next1136 = or disjoint i64 %indvars.iv1135, 1
  %gep.1 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1136
  %361 = load double, ptr %gep.1, align 8, !tbaa !27
  %362 = insertelement <2 x double> poison, double %360, i64 0
  %363 = insertelement <2 x double> %362, double %361, i64 1
  %364 = fcmp oge <2 x double> %363, zeroinitializer
  %365 = fneg <2 x double> %363
  %366 = select <2 x i1> %364, <2 x double> %363, <2 x double> %365
  %367 = extractelement <2 x double> %366, i64 0
  %368 = extractelement <2 x double> %366, i64 1
  %369 = fcmp olt double %367, %368
  %370 = select i1 %369, double %368, double %367
  %indvars.iv.next1136.1 = add nuw nsw i64 %indvars.iv1135, 2
  %niter1448.next.1 = add i64 %niter1448, 2
  %niter1448.ncmp.1 = icmp eq i64 %niter1448.next.1, %unroll_iter1447
  br i1 %niter1448.ncmp.1, label %._crit_edge884.loopexit1424.unr-lcssa, label %.lr.ph883.split.us885, !llvm.loop !47

.lr.ph883.split:                                  ; preds = %.lr.ph883.split.preheader, %.lr.ph883.split
  %indvars.iv1145 = phi i64 [ %indvars.iv.next1146.3, %.lr.ph883.split ], [ 0, %.lr.ph883.split.preheader ]
  %371 = phi double [ %.754.3, %.lr.ph883.split ], [ %339, %.lr.ph883.split.preheader ]
  %niter1461 = phi i64 [ %niter1461.next.3, %.lr.ph883.split ], [ 0, %.lr.ph883.split.preheader ]
  %gep1335 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1145
  %372 = load double, ptr %gep1335, align 8, !tbaa !27
  %373 = fcmp olt double %371, %372
  %.754 = select i1 %373, double %371, double %372
  %indvars.iv.next1146 = or disjoint i64 %indvars.iv1145, 1
  %gep1335.1 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1146
  %374 = load double, ptr %gep1335.1, align 8, !tbaa !27
  %375 = fcmp olt double %.754, %374
  %.754.1 = select i1 %375, double %.754, double %374
  %indvars.iv.next1146.1 = or disjoint i64 %indvars.iv1145, 2
  %gep1335.2 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1146.1
  %376 = load double, ptr %gep1335.2, align 8, !tbaa !27
  %377 = fcmp olt double %.754.1, %376
  %.754.2 = select i1 %377, double %.754.1, double %376
  %indvars.iv.next1146.2 = or disjoint i64 %indvars.iv1145, 3
  %gep1335.3 = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv.next1146.2
  %378 = load double, ptr %gep1335.3, align 8, !tbaa !27
  %379 = fcmp olt double %.754.2, %378
  %.754.3 = select i1 %379, double %.754.2, double %378
  %indvars.iv.next1146.3 = add nuw nsw i64 %indvars.iv1145, 4
  %niter1461.next.3 = add i64 %niter1461, 4
  %niter1461.ncmp.3 = icmp eq i64 %niter1461.next.3, %unroll_iter1460
  br i1 %niter1461.ncmp.3, label %._crit_edge884.loopexit.unr-lcssa, label %.lr.ph883.split, !llvm.loop !47

._crit_edge884.loopexit.unr-lcssa:                ; preds = %.lr.ph883.split, %.lr.ph883.split.preheader
  %.754.lcssa.ph = phi double [ poison, %.lr.ph883.split.preheader ], [ %.754.3, %.lr.ph883.split ]
  %indvars.iv1145.unr = phi i64 [ 0, %.lr.ph883.split.preheader ], [ %indvars.iv.next1146.3, %.lr.ph883.split ]
  %.unr1457 = phi double [ %339, %.lr.ph883.split.preheader ], [ %.754.3, %.lr.ph883.split ]
  br i1 %lcmp.mod1458.not, label %._crit_edge884, label %.lr.ph883.split.epil

.lr.ph883.split.epil:                             ; preds = %._crit_edge884.loopexit.unr-lcssa, %.lr.ph883.split.epil
  %indvars.iv1145.epil = phi i64 [ %indvars.iv.next1146.epil, %.lr.ph883.split.epil ], [ %indvars.iv1145.unr, %._crit_edge884.loopexit.unr-lcssa ]
  %380 = phi double [ %.754.epil, %.lr.ph883.split.epil ], [ %.unr1457, %._crit_edge884.loopexit.unr-lcssa ]
  %epil.iter1456 = phi i64 [ %epil.iter1456.next, %.lr.ph883.split.epil ], [ 0, %._crit_edge884.loopexit.unr-lcssa ]
  %gep1335.epil = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1145.epil
  %381 = load double, ptr %gep1335.epil, align 8, !tbaa !27
  %382 = fcmp olt double %380, %381
  %.754.epil = select i1 %382, double %380, double %381
  %indvars.iv.next1146.epil = add nuw nsw i64 %indvars.iv1145.epil, 1
  %epil.iter1456.next = add i64 %epil.iter1456, 1
  %epil.iter1456.cmp.not = icmp eq i64 %epil.iter1456.next, %xtraiter1455
  br i1 %epil.iter1456.cmp.not, label %._crit_edge884, label %.lr.ph883.split.epil, !llvm.loop !48

._crit_edge884.loopexit1423.unr-lcssa:            ; preds = %.lr.ph883.split.us, %.lr.ph883.split.us.preheader
  %..us.lcssa.ph = phi double [ poison, %.lr.ph883.split.us.preheader ], [ %..us.3, %.lr.ph883.split.us ]
  %indvars.iv1140.unr = phi i64 [ 0, %.lr.ph883.split.us.preheader ], [ %indvars.iv.next1141.3, %.lr.ph883.split.us ]
  %.unr1450 = phi double [ %339, %.lr.ph883.split.us.preheader ], [ %..us.3, %.lr.ph883.split.us ]
  br i1 %lcmp.mod1451.not, label %._crit_edge884, label %.lr.ph883.split.us.epil

.lr.ph883.split.us.epil:                          ; preds = %._crit_edge884.loopexit1423.unr-lcssa, %.lr.ph883.split.us.epil
  %indvars.iv1140.epil = phi i64 [ %indvars.iv.next1141.epil, %.lr.ph883.split.us.epil ], [ %indvars.iv1140.unr, %._crit_edge884.loopexit1423.unr-lcssa ]
  %383 = phi double [ %..us.epil, %.lr.ph883.split.us.epil ], [ %.unr1450, %._crit_edge884.loopexit1423.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph883.split.us.epil ], [ 0, %._crit_edge884.loopexit1423.unr-lcssa ]
  %gep1333.epil = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1140.epil
  %384 = load double, ptr %gep1333.epil, align 8, !tbaa !27
  %385 = fcmp olt double %383, %384
  %..us.epil = select i1 %385, double %384, double %383
  %indvars.iv.next1141.epil = add nuw nsw i64 %indvars.iv1140.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1449
  br i1 %epil.iter.cmp.not, label %._crit_edge884, label %.lr.ph883.split.us.epil, !llvm.loop !49

._crit_edge884.loopexit1424.unr-lcssa:            ; preds = %.lr.ph883.split.us885, %.lr.ph883.split.us885.preheader
  %.lcssa1426.ph = phi double [ poison, %.lr.ph883.split.us885.preheader ], [ %370, %.lr.ph883.split.us885 ]
  %indvars.iv1135.unr = phi i64 [ 0, %.lr.ph883.split.us885.preheader ], [ %indvars.iv.next1136.1, %.lr.ph883.split.us885 ]
  %.unr = phi double [ %339, %.lr.ph883.split.us885.preheader ], [ %370, %.lr.ph883.split.us885 ]
  br i1 %lcmp.mod1445.not, label %._crit_edge884, label %.lr.ph883.split.us885.epil

.lr.ph883.split.us885.epil:                       ; preds = %._crit_edge884.loopexit1424.unr-lcssa
  %gep.epil = getelementptr double, ptr %invariant.gep1334, i64 %indvars.iv1135.unr
  %386 = load double, ptr %gep.epil, align 8, !tbaa !27
  %387 = insertelement <2 x double> poison, double %.unr, i64 0
  %388 = insertelement <2 x double> %387, double %386, i64 1
  %389 = fcmp oge <2 x double> %388, zeroinitializer
  %390 = fneg <2 x double> %388
  %391 = select <2 x i1> %389, <2 x double> %388, <2 x double> %390
  %392 = extractelement <2 x double> %391, i64 0
  %393 = extractelement <2 x double> %391, i64 1
  %394 = fcmp olt double %392, %393
  %395 = select i1 %394, double %393, double %392
  br label %._crit_edge884

._crit_edge884:                                   ; preds = %.lr.ph883.split.us885.epil, %._crit_edge884.loopexit1424.unr-lcssa, %._crit_edge884.loopexit1423.unr-lcssa, %.lr.ph883.split.us.epil, %._crit_edge884.loopexit.unr-lcssa, %.lr.ph883.split.epil
  %.us-phi = phi double [ %.754.lcssa.ph, %._crit_edge884.loopexit.unr-lcssa ], [ %.754.epil, %.lr.ph883.split.epil ], [ %..us.lcssa.ph, %._crit_edge884.loopexit1423.unr-lcssa ], [ %..us.epil, %.lr.ph883.split.us.epil ], [ %.lcssa1426.ph, %._crit_edge884.loopexit1424.unr-lcssa ], [ %395, %.lr.ph883.split.us885.epil ]
  store double %.us-phi, ptr %340, align 8, !tbaa !27
  br label %396

396:                                              ; preds = %._crit_edge884, %336
  %indvars.iv.next1151 = add nuw nsw i64 %indvars.iv1150, 1
  %exitcond1154.not = icmp eq i64 %indvars.iv.next1151, %wide.trip.count1153
  br i1 %exitcond1154.not, label %.loopexit, label %336, !llvm.loop !50

397:                                              ; preds = %328
  %398 = icmp eq i64 %.2677776, 0
  %399 = trunc i64 %.2677776 to i32
  %.0664 = select i1 %398, i32 %5, i32 %399
  %400 = icmp eq i32 %.8674777, 1
  %401 = icmp eq i32 %.8674777, 3
  switch i32 %.8674777, label %.preheader795 [
    i32 3, label %.preheader797
    i32 1, label %.preheader797
  ]

.preheader797:                                    ; preds = %397, %397
  %402 = icmp sgt i32 %3, 0
  br i1 %402, label %.lr.ph917, label %.loopexit

.lr.ph917:                                        ; preds = %.preheader797
  %403 = select i1 %400, double 0xC7EFFFFFE0000000, double 0.000000e+00
  %404 = icmp sgt i32 %.0664, 0
  %wide.trip.count1178 = zext nneg i32 %3 to i64
  %wide.trip.count1158 = zext i32 %.0664 to i64
  %wide.trip.count1163 = zext nneg i32 %.0664 to i64
  %wide.trip.count1168 = zext nneg i32 %.0664 to i64
  %wide.trip.count1173 = zext nneg i32 %.0664 to i64
  %xtraiter1462 = and i64 %wide.trip.count1158, 1
  %405 = icmp eq i32 %.0664, 1
  %unroll_iter1466 = and i64 %wide.trip.count1158, 2147483646
  %lcmp.mod1464.not = icmp eq i64 %xtraiter1462, 0
  br label %415

.preheader795:                                    ; preds = %397
  %406 = icmp sgt i32 %3, 0
  br i1 %406, label %.lr.ph940, label %.loopexit

.lr.ph940:                                        ; preds = %.preheader795
  %407 = icmp sgt i32 %.0664, 0
  %408 = sext i32 %7 to i64
  %wide.trip.count1208 = zext nneg i32 %3 to i64
  %wide.trip.count1183 = and i64 %.2677776, 4294967295
  %wide.trip.count1188 = zext i32 %5 to i64
  %wide.trip.count1193 = zext nneg i32 %.0664 to i64
  %409 = add nsw i64 %wide.trip.count1183, -1
  %410 = add nsw i64 %wide.trip.count1188, -1
  %xtraiter1468 = and i64 %.2677776, 1
  %411 = icmp eq i64 %409, 0
  %unroll_iter1473 = sub nsw i64 %wide.trip.count1183, %xtraiter1468
  %lcmp.mod1471.not = icmp eq i64 %xtraiter1468, 0
  %xtraiter1475 = and i64 %wide.trip.count1188, 1
  %412 = icmp eq i64 %410, 0
  %unroll_iter1480 = and i64 %wide.trip.count1188, 4294967294
  %lcmp.mod1478.not = icmp eq i64 %xtraiter1475, 0
  %xtraiter1482 = and i64 %.2677776, 1
  %413 = icmp eq i64 %409, 0
  %unroll_iter1486 = sub nsw i64 %wide.trip.count1183, %xtraiter1482
  %lcmp.mod1484.not = icmp eq i64 %xtraiter1482, 0
  %xtraiter1488 = and i64 %wide.trip.count1188, 1
  %414 = icmp eq i64 %410, 0
  %unroll_iter1492 = and i64 %wide.trip.count1188, 4294967294
  %lcmp.mod1490.not = icmp eq i64 %xtraiter1488, 0
  br label %511

415:                                              ; preds = %.lr.ph917, %._crit_edge895
  %indvars.iv1175 = phi i64 [ 0, %.lr.ph917 ], [ %indvars.iv.next1176, %._crit_edge895 ]
  %416 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1175
  store double %403, ptr %416, align 8, !tbaa !27
  br i1 %404, label %.lr.ph894, label %._crit_edge895

.lr.ph894:                                        ; preds = %415
  %417 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv1175
  %418 = getelementptr inbounds i64, ptr %33, i64 %indvars.iv1175
  %419 = trunc nuw nsw i64 %indvars.iv1175 to i32
  br i1 %.not730, label %.lr.ph894.split.us, label %.lr.ph894.split

.lr.ph894.split.us:                               ; preds = %.lr.ph894, %438
  %indvars.iv1170 = phi i64 [ %indvars.iv.next1171, %438 ], [ 0, %.lr.ph894 ]
  %..0696.us912 = phi double [ %..0696.us, %438 ], [ %403, %.lr.ph894 ]
  br i1 %398, label %428, label %420

420:                                              ; preds = %.lr.ph894.split.us
  br i1 %.not731, label %425, label %421

421:                                              ; preds = %420
  %422 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1170
  %423 = load i32, ptr %422, align 4, !tbaa !45
  %424 = zext i32 %423 to i64
  br label %428

425:                                              ; preds = %420
  %426 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1170
  %427 = load i64, ptr %426, align 8, !tbaa !25
  br label %428

428:                                              ; preds = %421, %425, %.lr.ph894.split.us
  %.4650.us.in = phi i64 [ %indvars.iv1170, %.lr.ph894.split.us ], [ %424, %421 ], [ %427, %425 ]
  %.4650.us = trunc i64 %.4650.us.in to i32
  %429 = mul nsw i32 %7, %.4650.us
  %430 = add nsw i32 %429, %419
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds double, ptr %17, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !27
  br i1 %401, label %434, label %438

434:                                              ; preds = %428
  %435 = fcmp oge double %433, 0.000000e+00
  %436 = fneg double %433
  %437 = select i1 %435, double %433, double %436
  br label %438

438:                                              ; preds = %434, %428
  %.0696.us = phi double [ %437, %434 ], [ %433, %428 ]
  %439 = fcmp olt double %.0696.us, %..0696.us912
  %..0696.us = select i1 %439, double %..0696.us912, double %.0696.us
  %indvars.iv.next1171 = add nuw nsw i64 %indvars.iv1170, 1
  %exitcond1174.not = icmp eq i64 %indvars.iv.next1171, %wide.trip.count1173
  br i1 %exitcond1174.not, label %._crit_edge895.sink.split, label %.lr.ph894.split.us, !llvm.loop !51

.lr.ph894.split:                                  ; preds = %.lr.ph894
  br i1 %.not731, label %.lr.ph894.split.split.us, label %.lr.ph894.split.split

.lr.ph894.split.split.us:                         ; preds = %.lr.ph894.split, %457
  %indvars.iv1165 = phi i64 [ %indvars.iv.next1166, %457 ], [ 0, %.lr.ph894.split ]
  %.0696898.us = phi double [ %.0696897.us, %457 ], [ %403, %.lr.ph894.split ]
  br i1 %398, label %443, label %440

440:                                              ; preds = %.lr.ph894.split.split.us
  %441 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1165
  %442 = load i64, ptr %441, align 8, !tbaa !25
  br label %443

443:                                              ; preds = %440, %.lr.ph894.split.split.us
  %.4650.us900.in = phi i64 [ %442, %440 ], [ %indvars.iv1165, %.lr.ph894.split.split.us ]
  %.4650.us900 = trunc i64 %.4650.us900.in to i32
  %444 = mul nsw i32 %7, %.4650.us900
  %445 = add nsw i32 %444, %419
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds double, ptr %17, i64 %446
  %448 = load double, ptr %447, align 8, !tbaa !27
  br i1 %401, label %449, label %453

449:                                              ; preds = %443
  %450 = fcmp oge double %448, 0.000000e+00
  %451 = fneg double %448
  %452 = select i1 %450, double %448, double %451
  br label %453

453:                                              ; preds = %449, %443
  %.0696.us901 = phi double [ %452, %449 ], [ %448, %443 ]
  %454 = fcmp ult double %.0696.us901, %.0696898.us
  br i1 %454, label %457, label %455

455:                                              ; preds = %453
  %sext1279 = shl i64 %.4650.us900.in, 32
  %456 = ashr exact i64 %sext1279, 32
  store i64 %456, ptr %418, align 8, !tbaa !25
  br label %457

457:                                              ; preds = %455, %453
  %.0696897.us = phi double [ %.0696898.us, %453 ], [ %.0696.us901, %455 ]
  %indvars.iv.next1166 = add nuw nsw i64 %indvars.iv1165, 1
  %exitcond1169.not = icmp eq i64 %indvars.iv.next1166, %wide.trip.count1168
  br i1 %exitcond1169.not, label %._crit_edge895.sink.split, label %.lr.ph894.split.split.us, !llvm.loop !51

.lr.ph894.split.split:                            ; preds = %.lr.ph894.split
  br i1 %401, label %.lr.ph894.split.split.split.us, label %.lr.ph894.split.split.split.preheader

.lr.ph894.split.split.split.preheader:            ; preds = %.lr.ph894.split.split
  br i1 %405, label %._crit_edge895.sink.split.loopexit1421.unr-lcssa, label %.lr.ph894.split.split.split

.lr.ph894.split.split.split.us:                   ; preds = %.lr.ph894.split.split, %473
  %indvars.iv1160 = phi i64 [ %indvars.iv.next1161, %473 ], [ 0, %.lr.ph894.split.split ]
  %.0696898.us904 = phi double [ %.0696897.us908, %473 ], [ %403, %.lr.ph894.split.split ]
  %458 = trunc nuw nsw i64 %indvars.iv1160 to i32
  br i1 %398, label %462, label %459

459:                                              ; preds = %.lr.ph894.split.split.split.us
  %460 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1160
  %461 = load i32, ptr %460, align 4, !tbaa !45
  br label %462

462:                                              ; preds = %459, %.lr.ph894.split.split.split.us
  %.4650.us906 = phi i32 [ %461, %459 ], [ %458, %.lr.ph894.split.split.split.us ]
  %463 = mul nsw i32 %.4650.us906, %7
  %464 = add nsw i32 %463, %419
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds double, ptr %17, i64 %465
  %467 = load double, ptr %466, align 8, !tbaa !27
  %468 = fcmp oge double %467, 0.000000e+00
  %469 = fneg double %467
  %470 = select i1 %468, double %467, double %469
  %471 = fcmp ult double %470, %.0696898.us904
  br i1 %471, label %473, label %472

472:                                              ; preds = %462
  store i32 %.4650.us906, ptr %417, align 4, !tbaa !45
  br label %473

473:                                              ; preds = %472, %462
  %.0696897.us908 = phi double [ %.0696898.us904, %462 ], [ %470, %472 ]
  %indvars.iv.next1161 = add nuw nsw i64 %indvars.iv1160, 1
  %exitcond1164.not = icmp eq i64 %indvars.iv.next1161, %wide.trip.count1163
  br i1 %exitcond1164.not, label %._crit_edge895.sink.split, label %.lr.ph894.split.split.split.us, !llvm.loop !51

.lr.ph894.split.split.split:                      ; preds = %.lr.ph894.split.split.split.preheader, %498
  %indvars.iv1155 = phi i64 [ %indvars.iv.next1156.1, %498 ], [ 0, %.lr.ph894.split.split.split.preheader ]
  %.0696898 = phi double [ %.0696897.1, %498 ], [ %403, %.lr.ph894.split.split.split.preheader ]
  %niter1467 = phi i64 [ %niter1467.next.1, %498 ], [ 0, %.lr.ph894.split.split.split.preheader ]
  %474 = trunc nuw nsw i64 %indvars.iv1155 to i32
  br i1 %398, label %478, label %475

475:                                              ; preds = %.lr.ph894.split.split.split
  %476 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1155
  %477 = load i32, ptr %476, align 4, !tbaa !45
  br label %478

478:                                              ; preds = %.lr.ph894.split.split.split, %475
  %.4650 = phi i32 [ %477, %475 ], [ %474, %.lr.ph894.split.split.split ]
  %479 = mul nsw i32 %.4650, %7
  %480 = add nsw i32 %479, %419
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %17, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !27
  %484 = fcmp ult double %483, %.0696898
  br i1 %484, label %.lr.ph894.split.split.split.1, label %485

485:                                              ; preds = %478
  store i32 %.4650, ptr %417, align 4, !tbaa !45
  br label %.lr.ph894.split.split.split.1

.lr.ph894.split.split.split.1:                    ; preds = %478, %485
  %.0696897 = phi double [ %.0696898, %478 ], [ %483, %485 ]
  %indvars.iv.next1156 = or disjoint i64 %indvars.iv1155, 1
  %486 = trunc nuw nsw i64 %indvars.iv.next1156 to i32
  br i1 %398, label %490, label %487

487:                                              ; preds = %.lr.ph894.split.split.split.1
  %488 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next1156
  %489 = load i32, ptr %488, align 4, !tbaa !45
  br label %490

490:                                              ; preds = %487, %.lr.ph894.split.split.split.1
  %.4650.1 = phi i32 [ %489, %487 ], [ %486, %.lr.ph894.split.split.split.1 ]
  %491 = mul nsw i32 %.4650.1, %7
  %492 = add nsw i32 %491, %419
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds double, ptr %17, i64 %493
  %495 = load double, ptr %494, align 8, !tbaa !27
  %496 = fcmp ult double %495, %.0696897
  br i1 %496, label %498, label %497

497:                                              ; preds = %490
  store i32 %.4650.1, ptr %417, align 4, !tbaa !45
  br label %498

498:                                              ; preds = %497, %490
  %.0696897.1 = phi double [ %.0696897, %490 ], [ %495, %497 ]
  %indvars.iv.next1156.1 = add nuw nsw i64 %indvars.iv1155, 2
  %niter1467.next.1 = add i64 %niter1467, 2
  %niter1467.ncmp.1 = icmp eq i64 %niter1467.next.1, %unroll_iter1466
  br i1 %niter1467.ncmp.1, label %._crit_edge895.sink.split.loopexit1421.unr-lcssa, label %.lr.ph894.split.split.split, !llvm.loop !51

._crit_edge895.sink.split.loopexit1421.unr-lcssa: ; preds = %498, %.lr.ph894.split.split.split.preheader
  %.0696897.lcssa.ph = phi double [ poison, %.lr.ph894.split.split.split.preheader ], [ %.0696897.1, %498 ]
  %indvars.iv1155.unr = phi i64 [ 0, %.lr.ph894.split.split.split.preheader ], [ %indvars.iv.next1156.1, %498 ]
  %.0696898.unr = phi double [ %403, %.lr.ph894.split.split.split.preheader ], [ %.0696897.1, %498 ]
  br i1 %lcmp.mod1464.not, label %._crit_edge895.sink.split, label %.lr.ph894.split.split.split.epil

.lr.ph894.split.split.split.epil:                 ; preds = %._crit_edge895.sink.split.loopexit1421.unr-lcssa
  %499 = trunc nuw nsw i64 %indvars.iv1155.unr to i32
  br i1 %398, label %503, label %500

500:                                              ; preds = %.lr.ph894.split.split.split.epil
  %501 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1155.unr
  %502 = load i32, ptr %501, align 4, !tbaa !45
  br label %503

503:                                              ; preds = %500, %.lr.ph894.split.split.split.epil
  %.4650.epil = phi i32 [ %502, %500 ], [ %499, %.lr.ph894.split.split.split.epil ]
  %504 = mul nsw i32 %.4650.epil, %7
  %505 = add nsw i32 %504, %419
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %17, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !27
  %509 = fcmp ult double %508, %.0696898.unr
  br i1 %509, label %._crit_edge895.sink.split, label %510

510:                                              ; preds = %503
  store i32 %.4650.epil, ptr %417, align 4, !tbaa !45
  br label %._crit_edge895.sink.split

._crit_edge895.sink.split:                        ; preds = %._crit_edge895.sink.split.loopexit1421.unr-lcssa, %510, %503, %473, %457, %438
  %.us-phi902.sink = phi double [ %..0696.us, %438 ], [ %.0696897.us, %457 ], [ %.0696897.us908, %473 ], [ %.0696897.lcssa.ph, %._crit_edge895.sink.split.loopexit1421.unr-lcssa ], [ %.0696898.unr, %503 ], [ %508, %510 ]
  store double %.us-phi902.sink, ptr %416, align 8, !tbaa !27
  br label %._crit_edge895

._crit_edge895:                                   ; preds = %._crit_edge895.sink.split, %415
  %indvars.iv.next1176 = add nuw nsw i64 %indvars.iv1175, 1
  %exitcond1179.not = icmp eq i64 %indvars.iv.next1176, %wide.trip.count1178
  br i1 %exitcond1179.not, label %.loopexit, label %415, !llvm.loop !52

511:                                              ; preds = %.lr.ph940, %._crit_edge922
  %indvars.iv1205 = phi i64 [ 0, %.lr.ph940 ], [ %indvars.iv.next1206, %._crit_edge922 ]
  %512 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1205
  store double 0x47EFFFFFE0000000, ptr %512, align 8, !tbaa !27
  br i1 %407, label %.lr.ph921, label %._crit_edge922

.lr.ph921:                                        ; preds = %511
  %513 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv1205
  %514 = getelementptr inbounds i64, ptr %33, i64 %indvars.iv1205
  %invariant.gep1338 = getelementptr double, ptr %17, i64 %indvars.iv1205
  br i1 %.not730, label %.lr.ph921.split.us, label %.lr.ph921.split

.lr.ph921.split.us:                               ; preds = %.lr.ph921
  br i1 %398, label %.lr.ph921.split.us.split.us.preheader, label %.lr.ph921.split.us.split.preheader

.lr.ph921.split.us.split.preheader:               ; preds = %.lr.ph921.split.us
  br i1 %413, label %._crit_edge922.sink.split.loopexit1411.unr-lcssa, label %.lr.ph921.split.us.split

.lr.ph921.split.us.split.us.preheader:            ; preds = %.lr.ph921.split.us
  br i1 %414, label %._crit_edge922.sink.split.loopexit.unr-lcssa, label %.lr.ph921.split.us.split.us

.lr.ph921.split.us.split.us:                      ; preds = %.lr.ph921.split.us.split.us.preheader, %.lr.ph921.split.us.split.us
  %indvars.iv1200 = phi i64 [ %indvars.iv.next1201.1, %.lr.ph921.split.us.split.us ], [ 0, %.lr.ph921.split.us.split.us.preheader ]
  %.755.us934.us = phi double [ %.755.us.us.1, %.lr.ph921.split.us.split.us ], [ 0x47EFFFFFE0000000, %.lr.ph921.split.us.split.us.preheader ]
  %niter1493 = phi i64 [ %niter1493.next.1, %.lr.ph921.split.us.split.us ], [ 0, %.lr.ph921.split.us.split.us.preheader ]
  %515 = mul nsw i64 %indvars.iv1200, %408
  %gep1339 = getelementptr double, ptr %invariant.gep1338, i64 %515
  %516 = load double, ptr %gep1339, align 8, !tbaa !27
  %517 = fcmp olt double %516, %.755.us934.us
  %.755.us.us = select i1 %517, double %516, double %.755.us934.us
  %indvars.iv.next1201 = or disjoint i64 %indvars.iv1200, 1
  %518 = mul nsw i64 %indvars.iv.next1201, %408
  %gep1339.1 = getelementptr double, ptr %invariant.gep1338, i64 %518
  %519 = load double, ptr %gep1339.1, align 8, !tbaa !27
  %520 = fcmp olt double %519, %.755.us.us
  %.755.us.us.1 = select i1 %520, double %519, double %.755.us.us
  %indvars.iv.next1201.1 = add nuw nsw i64 %indvars.iv1200, 2
  %niter1493.next.1 = add i64 %niter1493, 2
  %niter1493.ncmp.1 = icmp eq i64 %niter1493.next.1, %unroll_iter1492
  br i1 %niter1493.ncmp.1, label %._crit_edge922.sink.split.loopexit.unr-lcssa, label %.lr.ph921.split.us.split.us, !llvm.loop !53

.lr.ph921.split.us.split:                         ; preds = %.lr.ph921.split.us.split.preheader, %542
  %indvars.iv1195 = phi i64 [ %indvars.iv.next1196.1, %542 ], [ 0, %.lr.ph921.split.us.split.preheader ]
  %.755.us934 = phi double [ %.755.us.1, %542 ], [ 0x47EFFFFFE0000000, %.lr.ph921.split.us.split.preheader ]
  %niter1487 = phi i64 [ %niter1487.next.1, %542 ], [ 0, %.lr.ph921.split.us.split.preheader ]
  br i1 %.not731, label %525, label %521

521:                                              ; preds = %.lr.ph921.split.us.split
  %522 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1195
  %523 = load i32, ptr %522, align 4, !tbaa !45
  %524 = zext i32 %523 to i64
  br label %.lr.ph921.split.us.split.1

525:                                              ; preds = %.lr.ph921.split.us.split
  %526 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1195
  %527 = load i64, ptr %526, align 8, !tbaa !25
  br label %.lr.ph921.split.us.split.1

.lr.ph921.split.us.split.1:                       ; preds = %525, %521
  %528 = phi i64 [ %524, %521 ], [ %527, %525 ]
  %529 = trunc i64 %528 to i32
  %530 = mul nsw i32 %7, %529
  %531 = sext i32 %530 to i64
  %532 = getelementptr double, ptr %invariant.gep1338, i64 %531
  %533 = load double, ptr %532, align 8, !tbaa !27
  %534 = fcmp olt double %533, %.755.us934
  %.755.us = select i1 %534, double %533, double %.755.us934
  %indvars.iv.next1196 = or disjoint i64 %indvars.iv1195, 1
  br i1 %.not731, label %539, label %535

535:                                              ; preds = %.lr.ph921.split.us.split.1
  %536 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next1196
  %537 = load i32, ptr %536, align 4, !tbaa !45
  %538 = zext i32 %537 to i64
  br label %542

539:                                              ; preds = %.lr.ph921.split.us.split.1
  %540 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv.next1196
  %541 = load i64, ptr %540, align 8, !tbaa !25
  br label %542

542:                                              ; preds = %539, %535
  %543 = phi i64 [ %538, %535 ], [ %541, %539 ]
  %544 = trunc i64 %543 to i32
  %545 = mul nsw i32 %7, %544
  %546 = sext i32 %545 to i64
  %547 = getelementptr double, ptr %invariant.gep1338, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !27
  %549 = fcmp olt double %548, %.755.us
  %.755.us.1 = select i1 %549, double %548, double %.755.us
  %indvars.iv.next1196.1 = add nuw nsw i64 %indvars.iv1195, 2
  %niter1487.next.1 = add i64 %niter1487, 2
  %niter1487.ncmp.1 = icmp eq i64 %niter1487.next.1, %unroll_iter1486
  br i1 %niter1487.ncmp.1, label %._crit_edge922.sink.split.loopexit1411.unr-lcssa, label %.lr.ph921.split.us.split, !llvm.loop !53

.lr.ph921.split:                                  ; preds = %.lr.ph921
  br i1 %.not731, label %.lr.ph921.split.split.us, label %.lr.ph921.split.split

.lr.ph921.split.split.us:                         ; preds = %.lr.ph921.split, %562
  %indvars.iv1190 = phi i64 [ %indvars.iv.next1191, %562 ], [ 0, %.lr.ph921.split ]
  %550 = phi double [ %563, %562 ], [ 0x47EFFFFFE0000000, %.lr.ph921.split ]
  br i1 %398, label %554, label %551

551:                                              ; preds = %.lr.ph921.split.split.us
  %552 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1190
  %553 = load i64, ptr %552, align 8, !tbaa !25
  br label %554

554:                                              ; preds = %551, %.lr.ph921.split.split.us
  %.5651.us926.in = phi i64 [ %553, %551 ], [ %indvars.iv1190, %.lr.ph921.split.split.us ]
  %.5651.us926 = trunc i64 %.5651.us926.in to i32
  %555 = mul nsw i32 %7, %.5651.us926
  %556 = sext i32 %555 to i64
  %557 = getelementptr double, ptr %invariant.gep1338, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !27
  %559 = fcmp ugt double %558, %550
  br i1 %559, label %562, label %560

560:                                              ; preds = %554
  %sext1280 = shl i64 %.5651.us926.in, 32
  %561 = ashr exact i64 %sext1280, 32
  store i64 %561, ptr %514, align 8, !tbaa !25
  br label %562

562:                                              ; preds = %560, %554
  %563 = phi double [ %550, %554 ], [ %558, %560 ]
  %indvars.iv.next1191 = add nuw nsw i64 %indvars.iv1190, 1
  %exitcond1194.not = icmp eq i64 %indvars.iv.next1191, %wide.trip.count1193
  br i1 %exitcond1194.not, label %._crit_edge922.sink.split, label %.lr.ph921.split.split.us, !llvm.loop !53

.lr.ph921.split.split:                            ; preds = %.lr.ph921.split
  br i1 %398, label %.lr.ph921.split.split.split.us.preheader, label %.lr.ph921.split.split.split.preheader

.lr.ph921.split.split.split.preheader:            ; preds = %.lr.ph921.split.split
  br i1 %411, label %._crit_edge922.sink.split.loopexit1414.unr-lcssa, label %.lr.ph921.split.split.split

.lr.ph921.split.split.split.us.preheader:         ; preds = %.lr.ph921.split.split
  br i1 %412, label %._crit_edge922.sink.split.loopexit1413.unr-lcssa, label %.lr.ph921.split.split.split.us

.lr.ph921.split.split.split.us:                   ; preds = %.lr.ph921.split.split.split.us.preheader, %576
  %indvars.iv1185 = phi i64 [ %indvars.iv.next1186.1, %576 ], [ 0, %.lr.ph921.split.split.split.us.preheader ]
  %564 = phi double [ %577, %576 ], [ 0x47EFFFFFE0000000, %.lr.ph921.split.split.split.us.preheader ]
  %niter1481 = phi i64 [ %niter1481.next.1, %576 ], [ 0, %.lr.ph921.split.split.split.us.preheader ]
  %565 = mul nsw i64 %indvars.iv1185, %408
  %gep1337 = getelementptr double, ptr %invariant.gep1338, i64 %565
  %566 = load double, ptr %gep1337, align 8, !tbaa !27
  %567 = fcmp ugt double %566, %564
  br i1 %567, label %.lr.ph921.split.split.split.us.1, label %568

568:                                              ; preds = %.lr.ph921.split.split.split.us
  %569 = trunc nuw nsw i64 %indvars.iv1185 to i32
  store i32 %569, ptr %513, align 4, !tbaa !45
  br label %.lr.ph921.split.split.split.us.1

.lr.ph921.split.split.split.us.1:                 ; preds = %568, %.lr.ph921.split.split.split.us
  %570 = phi double [ %564, %.lr.ph921.split.split.split.us ], [ %566, %568 ]
  %indvars.iv.next1186 = or disjoint i64 %indvars.iv1185, 1
  %571 = mul nsw i64 %indvars.iv.next1186, %408
  %gep1337.1 = getelementptr double, ptr %invariant.gep1338, i64 %571
  %572 = load double, ptr %gep1337.1, align 8, !tbaa !27
  %573 = fcmp ugt double %572, %570
  br i1 %573, label %576, label %574

574:                                              ; preds = %.lr.ph921.split.split.split.us.1
  %575 = trunc nuw nsw i64 %indvars.iv.next1186 to i32
  store i32 %575, ptr %513, align 4, !tbaa !45
  br label %576

576:                                              ; preds = %574, %.lr.ph921.split.split.split.us.1
  %577 = phi double [ %570, %.lr.ph921.split.split.split.us.1 ], [ %572, %574 ]
  %indvars.iv.next1186.1 = add nuw nsw i64 %indvars.iv1185, 2
  %niter1481.next.1 = add i64 %niter1481, 2
  %niter1481.ncmp.1 = icmp eq i64 %niter1481.next.1, %unroll_iter1480
  br i1 %niter1481.ncmp.1, label %._crit_edge922.sink.split.loopexit1413.unr-lcssa, label %.lr.ph921.split.split.split.us, !llvm.loop !53

.lr.ph921.split.split.split:                      ; preds = %.lr.ph921.split.split.split.preheader, %596
  %indvars.iv1180 = phi i64 [ %indvars.iv.next1181.1, %596 ], [ 0, %.lr.ph921.split.split.split.preheader ]
  %578 = phi double [ %597, %596 ], [ 0x47EFFFFFE0000000, %.lr.ph921.split.split.split.preheader ]
  %niter1474 = phi i64 [ %niter1474.next.1, %596 ], [ 0, %.lr.ph921.split.split.split.preheader ]
  %579 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1180
  %580 = load i32, ptr %579, align 4, !tbaa !45
  %581 = mul nsw i32 %580, %7
  %582 = sext i32 %581 to i64
  %583 = getelementptr double, ptr %invariant.gep1338, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !27
  %585 = fcmp ugt double %584, %578
  br i1 %585, label %.lr.ph921.split.split.split.1, label %586

586:                                              ; preds = %.lr.ph921.split.split.split
  store i32 %580, ptr %513, align 4, !tbaa !45
  br label %.lr.ph921.split.split.split.1

.lr.ph921.split.split.split.1:                    ; preds = %.lr.ph921.split.split.split, %586
  %587 = phi double [ %578, %.lr.ph921.split.split.split ], [ %584, %586 ]
  %indvars.iv.next1181 = or disjoint i64 %indvars.iv1180, 1
  %588 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next1181
  %589 = load i32, ptr %588, align 4, !tbaa !45
  %590 = mul nsw i32 %589, %7
  %591 = sext i32 %590 to i64
  %592 = getelementptr double, ptr %invariant.gep1338, i64 %591
  %593 = load double, ptr %592, align 8, !tbaa !27
  %594 = fcmp ugt double %593, %587
  br i1 %594, label %596, label %595

595:                                              ; preds = %.lr.ph921.split.split.split.1
  store i32 %589, ptr %513, align 4, !tbaa !45
  br label %596

596:                                              ; preds = %595, %.lr.ph921.split.split.split.1
  %597 = phi double [ %587, %.lr.ph921.split.split.split.1 ], [ %593, %595 ]
  %indvars.iv.next1181.1 = add nuw nsw i64 %indvars.iv1180, 2
  %niter1474.next.1 = add i64 %niter1474, 2
  %niter1474.ncmp.1 = icmp eq i64 %niter1474.next.1, %unroll_iter1473
  br i1 %niter1474.ncmp.1, label %._crit_edge922.sink.split.loopexit1414.unr-lcssa, label %.lr.ph921.split.split.split, !llvm.loop !53

._crit_edge922.sink.split.loopexit.unr-lcssa:     ; preds = %.lr.ph921.split.us.split.us, %.lr.ph921.split.us.split.us.preheader
  %.755.us.us.lcssa.ph = phi double [ poison, %.lr.ph921.split.us.split.us.preheader ], [ %.755.us.us.1, %.lr.ph921.split.us.split.us ]
  %indvars.iv1200.unr = phi i64 [ 0, %.lr.ph921.split.us.split.us.preheader ], [ %indvars.iv.next1201.1, %.lr.ph921.split.us.split.us ]
  %.755.us934.us.unr = phi double [ 0x47EFFFFFE0000000, %.lr.ph921.split.us.split.us.preheader ], [ %.755.us.us.1, %.lr.ph921.split.us.split.us ]
  br i1 %lcmp.mod1490.not, label %._crit_edge922.sink.split, label %.lr.ph921.split.us.split.us.epil

.lr.ph921.split.us.split.us.epil:                 ; preds = %._crit_edge922.sink.split.loopexit.unr-lcssa
  %598 = mul nsw i64 %indvars.iv1200.unr, %408
  %gep1339.epil = getelementptr double, ptr %invariant.gep1338, i64 %598
  %599 = load double, ptr %gep1339.epil, align 8, !tbaa !27
  %600 = fcmp olt double %599, %.755.us934.us.unr
  %.755.us.us.epil = select i1 %600, double %599, double %.755.us934.us.unr
  br label %._crit_edge922.sink.split

._crit_edge922.sink.split.loopexit1411.unr-lcssa: ; preds = %542, %.lr.ph921.split.us.split.preheader
  %.755.us.lcssa.ph = phi double [ poison, %.lr.ph921.split.us.split.preheader ], [ %.755.us.1, %542 ]
  %indvars.iv1195.unr = phi i64 [ 0, %.lr.ph921.split.us.split.preheader ], [ %indvars.iv.next1196.1, %542 ]
  %.755.us934.unr = phi double [ 0x47EFFFFFE0000000, %.lr.ph921.split.us.split.preheader ], [ %.755.us.1, %542 ]
  br i1 %lcmp.mod1484.not, label %._crit_edge922.sink.split, label %.lr.ph921.split.us.split.epil

.lr.ph921.split.us.split.epil:                    ; preds = %._crit_edge922.sink.split.loopexit1411.unr-lcssa
  br i1 %.not731, label %605, label %601

601:                                              ; preds = %.lr.ph921.split.us.split.epil
  %602 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1195.unr
  %603 = load i32, ptr %602, align 4, !tbaa !45
  %604 = zext i32 %603 to i64
  br label %._crit_edge922.sink.split.loopexit1411.epilog-lcssa

605:                                              ; preds = %.lr.ph921.split.us.split.epil
  %606 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1195.unr
  %607 = load i64, ptr %606, align 8, !tbaa !25
  br label %._crit_edge922.sink.split.loopexit1411.epilog-lcssa

._crit_edge922.sink.split.loopexit1411.epilog-lcssa: ; preds = %605, %601
  %608 = phi i64 [ %604, %601 ], [ %607, %605 ]
  %609 = trunc i64 %608 to i32
  %610 = mul nsw i32 %7, %609
  %611 = sext i32 %610 to i64
  %612 = getelementptr double, ptr %invariant.gep1338, i64 %611
  %613 = load double, ptr %612, align 8, !tbaa !27
  %614 = fcmp olt double %613, %.755.us934.unr
  %.755.us.epil = select i1 %614, double %613, double %.755.us934.unr
  br label %._crit_edge922.sink.split

._crit_edge922.sink.split.loopexit1413.unr-lcssa: ; preds = %576, %.lr.ph921.split.split.split.us.preheader
  %.lcssa1417.ph = phi double [ poison, %.lr.ph921.split.split.split.us.preheader ], [ %577, %576 ]
  %indvars.iv1185.unr = phi i64 [ 0, %.lr.ph921.split.split.split.us.preheader ], [ %indvars.iv.next1186.1, %576 ]
  %.unr1477 = phi double [ 0x47EFFFFFE0000000, %.lr.ph921.split.split.split.us.preheader ], [ %577, %576 ]
  br i1 %lcmp.mod1478.not, label %._crit_edge922.sink.split, label %.lr.ph921.split.split.split.us.epil

.lr.ph921.split.split.split.us.epil:              ; preds = %._crit_edge922.sink.split.loopexit1413.unr-lcssa
  %615 = mul nsw i64 %indvars.iv1185.unr, %408
  %gep1337.epil = getelementptr double, ptr %invariant.gep1338, i64 %615
  %616 = load double, ptr %gep1337.epil, align 8, !tbaa !27
  %617 = fcmp ugt double %616, %.unr1477
  br i1 %617, label %._crit_edge922.sink.split, label %618

618:                                              ; preds = %.lr.ph921.split.split.split.us.epil
  %619 = trunc nuw nsw i64 %indvars.iv1185.unr to i32
  store i32 %619, ptr %513, align 4, !tbaa !45
  br label %._crit_edge922.sink.split

._crit_edge922.sink.split.loopexit1414.unr-lcssa: ; preds = %596, %.lr.ph921.split.split.split.preheader
  %.lcssa1416.ph = phi double [ poison, %.lr.ph921.split.split.split.preheader ], [ %597, %596 ]
  %indvars.iv1180.unr = phi i64 [ 0, %.lr.ph921.split.split.split.preheader ], [ %indvars.iv.next1181.1, %596 ]
  %.unr1470 = phi double [ 0x47EFFFFFE0000000, %.lr.ph921.split.split.split.preheader ], [ %597, %596 ]
  br i1 %lcmp.mod1471.not, label %._crit_edge922.sink.split, label %.lr.ph921.split.split.split.epil

.lr.ph921.split.split.split.epil:                 ; preds = %._crit_edge922.sink.split.loopexit1414.unr-lcssa
  %620 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1180.unr
  %621 = load i32, ptr %620, align 4, !tbaa !45
  %622 = mul nsw i32 %621, %7
  %623 = sext i32 %622 to i64
  %624 = getelementptr double, ptr %invariant.gep1338, i64 %623
  %625 = load double, ptr %624, align 8, !tbaa !27
  %626 = fcmp ugt double %625, %.unr1470
  br i1 %626, label %._crit_edge922.sink.split, label %627

627:                                              ; preds = %.lr.ph921.split.split.split.epil
  store i32 %621, ptr %513, align 4, !tbaa !45
  br label %._crit_edge922.sink.split

._crit_edge922.sink.split:                        ; preds = %._crit_edge922.sink.split.loopexit1414.unr-lcssa, %627, %.lr.ph921.split.split.split.epil, %._crit_edge922.sink.split.loopexit1413.unr-lcssa, %618, %.lr.ph921.split.split.split.us.epil, %562, %._crit_edge922.sink.split.loopexit1411.epilog-lcssa, %._crit_edge922.sink.split.loopexit1411.unr-lcssa, %.lr.ph921.split.us.split.us.epil, %._crit_edge922.sink.split.loopexit.unr-lcssa
  %.us-phi927.sink = phi double [ %.755.us.us.lcssa.ph, %._crit_edge922.sink.split.loopexit.unr-lcssa ], [ %.755.us.us.epil, %.lr.ph921.split.us.split.us.epil ], [ %.755.us.lcssa.ph, %._crit_edge922.sink.split.loopexit1411.unr-lcssa ], [ %.755.us.epil, %._crit_edge922.sink.split.loopexit1411.epilog-lcssa ], [ %563, %562 ], [ %.lcssa1417.ph, %._crit_edge922.sink.split.loopexit1413.unr-lcssa ], [ %.unr1477, %.lr.ph921.split.split.split.us.epil ], [ %616, %618 ], [ %.lcssa1416.ph, %._crit_edge922.sink.split.loopexit1414.unr-lcssa ], [ %.unr1470, %.lr.ph921.split.split.split.epil ], [ %625, %627 ]
  store double %.us-phi927.sink, ptr %512, align 8, !tbaa !27
  br label %._crit_edge922

._crit_edge922:                                   ; preds = %._crit_edge922.sink.split, %511
  %indvars.iv.next1206 = add nuw nsw i64 %indvars.iv1205, 1
  %exitcond1209.not = icmp eq i64 %indvars.iv.next1206, %wide.trip.count1208
  br i1 %exitcond1209.not, label %.loopexit, label %511, !llvm.loop !54

.loopexit:                                        ; preds = %396, %._crit_edge895, %._crit_edge922, %175, %327, %270, %.preheader789, %.preheader794, %.preheader799, %.preheader797, %.preheader795, %.preheader790, %._crit_edge955, %._crit_edge984
  %brmerge = or i1 %70, %63
  br i1 %brmerge, label %._crit_edge990, label %.lr.ph989.split.preheader

.lr.ph989.split.preheader:                        ; preds = %.loopexit
  %628 = zext nneg i32 %15 to i64
  %629 = shl nuw nsw i64 %628, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %68, i64 %629, i1 false), !tbaa !27
  br label %._crit_edge990

630:                                              ; preds = %.thread769
  %631 = shl nsw i64 %65, 2
  %632 = tail call noalias ptr @malloc(i64 noundef %631) #9
  %633 = tail call noalias ptr @malloc(i64 noundef %631) #9
  %634 = icmp eq i32 %.8674777, 0
  br i1 %634, label %635, label %742

635:                                              ; preds = %630
  br i1 %.not, label %680, label %.preheader808

.preheader808:                                    ; preds = %635
  %636 = icmp sgt i32 %5, 0
  br i1 %636, label %.lr.ph850, label %.loopexit802

.lr.ph850:                                        ; preds = %.preheader808
  %.not741 = icmp eq i32 %.8695775, 0
  %637 = icmp sgt i32 %3, 0
  %wide.trip.count1089 = zext nneg i32 %5 to i64
  br label %638

638:                                              ; preds = %.lr.ph850, %._crit_edge845
  %indvars.iv1086 = phi i64 [ 0, %.lr.ph850 ], [ %indvars.iv.next1087, %._crit_edge845 ]
  br i1 %63, label %641, label %639

639:                                              ; preds = %638
  %640 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1086
  store float 0.000000e+00, ptr %640, align 4, !tbaa !55
  br label %641

641:                                              ; preds = %639, %638
  br i1 %.not741, label %642, label %.thread1285

642:                                              ; preds = %641
  br i1 %637, label %.lr.ph844.split.us, label %._crit_edge845

.thread1285:                                      ; preds = %641
  %643 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1086
  store float 0.000000e+00, ptr %643, align 4, !tbaa !55
  br i1 %637, label %.lr.ph844.split, label %._crit_edge845

.lr.ph844.split.us:                               ; preds = %642
  %644 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1086
  %645 = trunc nuw nsw i64 %indvars.iv1086 to i32
  br i1 %63, label %.lr.ph844.split.us.split.us, label %.lr.ph844.split.us.split

.lr.ph844.split.us.split.us:                      ; preds = %.lr.ph844.split.us, %.lr.ph844.split.us.split.us
  %.9842.us.us = phi i32 [ %647, %.lr.ph844.split.us.split.us ], [ 0, %.lr.ph844.split.us ]
  %646 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.9842.us.us, i32 noundef %645, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %647 = add nuw nsw i32 %.9842.us.us, 1
  %exitcond1085.not = icmp eq i32 %647, %3
  br i1 %exitcond1085.not, label %._crit_edge845, label %.lr.ph844.split.us.split.us, !llvm.loop !57

.lr.ph844.split.us.split:                         ; preds = %.lr.ph844.split.us, %.lr.ph844.split.us.split
  %.9842.us = phi i32 [ %651, %.lr.ph844.split.us.split ], [ 0, %.lr.ph844.split.us ]
  %648 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.9842.us, i32 noundef %645, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %649 = load float, ptr %644, align 4, !tbaa !55
  %650 = fadd float %648, %649
  store float %650, ptr %644, align 4, !tbaa !55
  %651 = add nuw nsw i32 %.9842.us, 1
  %exitcond1084.not = icmp eq i32 %651, %3
  br i1 %exitcond1084.not, label %._crit_edge845, label %.lr.ph844.split.us.split, !llvm.loop !57

.lr.ph844.split:                                  ; preds = %.thread1285
  %652 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1086
  %653 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1086
  %654 = trunc nuw nsw i64 %indvars.iv1086 to i32
  br i1 %63, label %.lr.ph844.split.split.us, label %.lr.ph844.split.split

.lr.ph844.split.split.us:                         ; preds = %.lr.ph844.split, %.lr.ph844.split.split.us
  %.9842.us846 = phi i32 [ %658, %.lr.ph844.split.split.us ], [ 0, %.lr.ph844.split ]
  %655 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.9842.us846, i32 noundef %654, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %656 = load float, ptr %653, align 4, !tbaa !55
  %657 = tail call float @llvm.fmuladd.f32(float %655, float %655, float %656)
  store float %657, ptr %653, align 4, !tbaa !55
  %658 = add nuw nsw i32 %.9842.us846, 1
  %exitcond1083.not = icmp eq i32 %658, %3
  br i1 %exitcond1083.not, label %._crit_edge845, label %.lr.ph844.split.split.us, !llvm.loop !57

.lr.ph844.split.split:                            ; preds = %.lr.ph844.split, %.lr.ph844.split.split
  %.9842 = phi i32 [ %664, %.lr.ph844.split.split ], [ 0, %.lr.ph844.split ]
  %659 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.9842, i32 noundef %654, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %660 = load float, ptr %652, align 4, !tbaa !55
  %661 = fadd float %659, %660
  store float %661, ptr %652, align 4, !tbaa !55
  %662 = load float, ptr %653, align 4, !tbaa !55
  %663 = tail call float @llvm.fmuladd.f32(float %659, float %659, float %662)
  store float %663, ptr %653, align 4, !tbaa !55
  %664 = add nuw nsw i32 %.9842, 1
  %exitcond1082.not = icmp eq i32 %664, %3
  br i1 %exitcond1082.not, label %._crit_edge845, label %.lr.ph844.split.split, !llvm.loop !57

._crit_edge845:                                   ; preds = %.lr.ph844.split.split, %.lr.ph844.split.split.us, %.lr.ph844.split.us.split, %.lr.ph844.split.us.split.us, %.thread1285, %642
  %indvars.iv.next1087 = add nuw nsw i64 %indvars.iv1086, 1
  %exitcond1090.not = icmp eq i64 %indvars.iv.next1087, %wide.trip.count1089
  br i1 %exitcond1090.not, label %._crit_edge851, label %638, !llvm.loop !58

._crit_edge851:                                   ; preds = %._crit_edge845
  %or.cond995 = and i1 %.not729, %636
  br i1 %or.cond995, label %.lr.ph853, label %.loopexit802

.lr.ph853:                                        ; preds = %._crit_edge851
  %.not739 = icmp eq i32 %.8695775, 0
  %wide.trip.count1094 = zext nneg i32 %5 to i64
  br label %665

665:                                              ; preds = %.lr.ph853, %679
  %indvars.iv1091 = phi i64 [ 0, %.lr.ph853 ], [ %indvars.iv.next1092, %679 ]
  br i1 %63, label %672, label %666

666:                                              ; preds = %665
  %667 = trunc nuw nsw i64 %indvars.iv1091 to i32
  %668 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %19, i32 noundef %667, i32 noundef 0, i32 noundef %9, i32 noundef %11, ptr noundef nonnull %1, i32 noundef 3)
  %669 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1091
  %670 = load float, ptr %669, align 4, !tbaa !55
  %671 = fadd float %668, %670
  store float %671, ptr %669, align 4, !tbaa !55
  br label %672

672:                                              ; preds = %666, %665
  br i1 %.not739, label %679, label %673

673:                                              ; preds = %672
  %674 = trunc nuw nsw i64 %indvars.iv1091 to i32
  %675 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %.0, i32 noundef %674, i32 noundef 0, i32 noundef %9, i32 noundef %11, ptr noundef nonnull %1, i32 noundef 3)
  %676 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1091
  %677 = load float, ptr %676, align 4, !tbaa !55
  %678 = fadd float %675, %677
  store float %678, ptr %676, align 4, !tbaa !55
  br label %679

679:                                              ; preds = %672, %673
  %indvars.iv.next1092 = add nuw nsw i64 %indvars.iv1091, 1
  %exitcond1095.not = icmp eq i64 %indvars.iv.next1092, %wide.trip.count1094
  br i1 %exitcond1095.not, label %.loopexit802, label %665, !llvm.loop !59

680:                                              ; preds = %635
  %681 = icmp eq i64 %.2677776, 0
  %682 = icmp sgt i32 %3, 0
  br i1 %681, label %.preheader803, label %.preheader804

.preheader804:                                    ; preds = %680
  br i1 %682, label %.lr.ph860, label %.loopexit802

.lr.ph860:                                        ; preds = %.preheader804
  %683 = trunc i64 %.2677776 to i32
  %684 = icmp sgt i32 %683, 0
  %wide.trip.count1109 = zext nneg i32 %3 to i64
  %wide.trip.count1099 = and i64 %.2677776, 2147483647
  %wide.trip.count1104 = and i64 %.2677776, 2147483647
  br label %728

.preheader803:                                    ; preds = %680
  br i1 %682, label %.lr.ph869, label %.loopexit802

.lr.ph869:                                        ; preds = %.preheader803
  %.not735 = icmp eq i32 %.8695775, 0
  %685 = icmp sgt i32 %5, 0
  %wide.trip.count1118 = zext nneg i32 %3 to i64
  br label %686

686:                                              ; preds = %.lr.ph869, %._crit_edge864
  %indvars.iv1115 = phi i64 [ 0, %.lr.ph869 ], [ %indvars.iv.next1116, %._crit_edge864 ]
  br i1 %63, label %689, label %687

687:                                              ; preds = %686
  %688 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1115
  store float 0.000000e+00, ptr %688, align 4, !tbaa !55
  br label %689

689:                                              ; preds = %687, %686
  br i1 %.not735, label %690, label %.thread1287

690:                                              ; preds = %689
  br i1 %685, label %.lr.ph863.split.us, label %._crit_edge864

.thread1287:                                      ; preds = %689
  %691 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1115
  store float 0.000000e+00, ptr %691, align 4, !tbaa !55
  br i1 %685, label %.lr.ph863.split, label %._crit_edge864

.lr.ph863.split.us:                               ; preds = %690
  %692 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1115
  %693 = trunc nuw nsw i64 %indvars.iv1115 to i32
  br i1 %63, label %.lr.ph863.split.us.split.us, label %.lr.ph863.split.us.split

.lr.ph863.split.us.split.us:                      ; preds = %.lr.ph863.split.us, %.lr.ph863.split.us.split.us
  %.8654861.us.us = phi i32 [ %695, %.lr.ph863.split.us.split.us ], [ 0, %.lr.ph863.split.us ]
  %694 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %693, i32 noundef %.8654861.us.us, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %695 = add nuw nsw i32 %.8654861.us.us, 1
  %exitcond1114.not = icmp eq i32 %695, %5
  br i1 %exitcond1114.not, label %._crit_edge864, label %.lr.ph863.split.us.split.us, !llvm.loop !60

.lr.ph863.split.us.split:                         ; preds = %.lr.ph863.split.us, %.lr.ph863.split.us.split
  %.8654861.us = phi i32 [ %699, %.lr.ph863.split.us.split ], [ 0, %.lr.ph863.split.us ]
  %696 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %693, i32 noundef %.8654861.us, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %697 = load float, ptr %692, align 4, !tbaa !55
  %698 = fadd float %696, %697
  store float %698, ptr %692, align 4, !tbaa !55
  %699 = add nuw nsw i32 %.8654861.us, 1
  %exitcond1113.not = icmp eq i32 %699, %5
  br i1 %exitcond1113.not, label %._crit_edge864, label %.lr.ph863.split.us.split, !llvm.loop !60

.lr.ph863.split:                                  ; preds = %.thread1287
  %700 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1115
  %701 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1115
  %702 = trunc nuw nsw i64 %indvars.iv1115 to i32
  br i1 %63, label %.lr.ph863.split.split.us, label %.lr.ph863.split.split

.lr.ph863.split.split.us:                         ; preds = %.lr.ph863.split, %.lr.ph863.split.split.us
  %.8654861.us865 = phi i32 [ %706, %.lr.ph863.split.split.us ], [ 0, %.lr.ph863.split ]
  %703 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %702, i32 noundef %.8654861.us865, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %704 = load float, ptr %701, align 4, !tbaa !55
  %705 = tail call float @llvm.fmuladd.f32(float %703, float %703, float %704)
  store float %705, ptr %701, align 4, !tbaa !55
  %706 = add nuw nsw i32 %.8654861.us865, 1
  %exitcond1112.not = icmp eq i32 %706, %5
  br i1 %exitcond1112.not, label %._crit_edge864, label %.lr.ph863.split.split.us, !llvm.loop !60

.lr.ph863.split.split:                            ; preds = %.lr.ph863.split, %.lr.ph863.split.split
  %.8654861 = phi i32 [ %712, %.lr.ph863.split.split ], [ 0, %.lr.ph863.split ]
  %707 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %702, i32 noundef %.8654861, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %708 = load float, ptr %700, align 4, !tbaa !55
  %709 = fadd float %707, %708
  store float %709, ptr %700, align 4, !tbaa !55
  %710 = load float, ptr %701, align 4, !tbaa !55
  %711 = tail call float @llvm.fmuladd.f32(float %707, float %707, float %710)
  store float %711, ptr %701, align 4, !tbaa !55
  %712 = add nuw nsw i32 %.8654861, 1
  %exitcond1111.not = icmp eq i32 %712, %5
  br i1 %exitcond1111.not, label %._crit_edge864, label %.lr.ph863.split.split, !llvm.loop !60

._crit_edge864:                                   ; preds = %.lr.ph863.split.split, %.lr.ph863.split.split.us, %.lr.ph863.split.us.split, %.lr.ph863.split.us.split.us, %.thread1287, %690
  %indvars.iv.next1116 = add nuw nsw i64 %indvars.iv1115, 1
  %exitcond1119.not = icmp eq i64 %indvars.iv.next1116, %wide.trip.count1118
  br i1 %exitcond1119.not, label %._crit_edge870, label %686, !llvm.loop !61

._crit_edge870:                                   ; preds = %._crit_edge864
  %or.cond997 = and i1 %.not729, %682
  br i1 %or.cond997, label %.lr.ph872, label %.loopexit802

.lr.ph872:                                        ; preds = %._crit_edge870
  %.not733 = icmp eq i32 %.8695775, 0
  %wide.trip.count1123 = zext nneg i32 %3 to i64
  br label %713

713:                                              ; preds = %.lr.ph872, %727
  %indvars.iv1120 = phi i64 [ 0, %.lr.ph872 ], [ %indvars.iv.next1121, %727 ]
  br i1 %63, label %720, label %714

714:                                              ; preds = %713
  %715 = trunc nuw nsw i64 %indvars.iv1120 to i32
  %716 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %19, i32 noundef %715, i32 noundef 0, i32 noundef %9, i32 noundef %11, ptr noundef nonnull %1, i32 noundef 3)
  %717 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1120
  %718 = load float, ptr %717, align 4, !tbaa !55
  %719 = fadd float %716, %718
  store float %719, ptr %717, align 4, !tbaa !55
  br label %720

720:                                              ; preds = %714, %713
  br i1 %.not733, label %727, label %721

721:                                              ; preds = %720
  %722 = trunc nuw nsw i64 %indvars.iv1120 to i32
  %723 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %.0, i32 noundef %722, i32 noundef 0, i32 noundef %9, i32 noundef %11, ptr noundef nonnull %1, i32 noundef 3)
  %724 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1120
  %725 = load float, ptr %724, align 4, !tbaa !55
  %726 = fadd float %723, %725
  store float %726, ptr %724, align 4, !tbaa !55
  br label %727

727:                                              ; preds = %720, %721
  %indvars.iv.next1121 = add nuw nsw i64 %indvars.iv1120, 1
  %exitcond1124.not = icmp eq i64 %indvars.iv.next1121, %wide.trip.count1123
  br i1 %exitcond1124.not, label %.loopexit802, label %713, !llvm.loop !62

728:                                              ; preds = %.lr.ph860, %._crit_edge857
  %indvars.iv1106 = phi i64 [ 0, %.lr.ph860 ], [ %indvars.iv.next1107, %._crit_edge857 ]
  %729 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1106
  store float 0.000000e+00, ptr %729, align 4, !tbaa !55
  br i1 %684, label %.lr.ph856, label %._crit_edge857

.lr.ph856:                                        ; preds = %728
  %730 = trunc nuw nsw i64 %indvars.iv1106 to i32
  br i1 %.not731, label %.lr.ph856.split.us, label %.lr.ph856.split

.lr.ph856.split.us:                               ; preds = %.lr.ph856, %.lr.ph856.split.us
  %731 = phi float [ %736, %.lr.ph856.split.us ], [ 0.000000e+00, %.lr.ph856 ]
  %indvars.iv1101 = phi i64 [ %indvars.iv.next1102, %.lr.ph856.split.us ], [ 0, %.lr.ph856 ]
  %732 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1101
  %733 = load i64, ptr %732, align 8, !tbaa !25
  %734 = trunc i64 %733 to i32
  %735 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %730, i32 noundef %734, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %736 = fadd float %735, %731
  store float %736, ptr %729, align 4, !tbaa !55
  %indvars.iv.next1102 = add nuw nsw i64 %indvars.iv1101, 1
  %exitcond1105.not = icmp eq i64 %indvars.iv.next1102, %wide.trip.count1104
  br i1 %exitcond1105.not, label %._crit_edge857, label %.lr.ph856.split.us, !llvm.loop !63

.lr.ph856.split:                                  ; preds = %.lr.ph856, %.lr.ph856.split
  %737 = phi float [ %741, %.lr.ph856.split ], [ 0.000000e+00, %.lr.ph856 ]
  %indvars.iv1096 = phi i64 [ %indvars.iv.next1097, %.lr.ph856.split ], [ 0, %.lr.ph856 ]
  %738 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1096
  %739 = load i32, ptr %738, align 4, !tbaa !45
  %740 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %730, i32 noundef %739, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %741 = fadd float %740, %737
  store float %741, ptr %729, align 4, !tbaa !55
  %indvars.iv.next1097 = add nuw nsw i64 %indvars.iv1096, 1
  %exitcond1100.not = icmp eq i64 %indvars.iv.next1097, %wide.trip.count1099
  br i1 %exitcond1100.not, label %._crit_edge857, label %.lr.ph856.split, !llvm.loop !63

._crit_edge857:                                   ; preds = %.lr.ph856.split, %.lr.ph856.split.us, %728
  %indvars.iv.next1107 = add nuw nsw i64 %indvars.iv1106, 1
  %exitcond1110.not = icmp eq i64 %indvars.iv.next1107, %wide.trip.count1109
  br i1 %exitcond1110.not, label %.loopexit802, label %728, !llvm.loop !64

742:                                              ; preds = %630
  br i1 %.not, label %769, label %.preheader813

.preheader813:                                    ; preds = %742
  %743 = icmp sgt i32 %5, 0
  br i1 %743, label %.lr.ph821, label %.loopexit802

.lr.ph821:                                        ; preds = %.preheader813
  %744 = icmp sgt i32 %3, 0
  %wide.trip.count = zext nneg i32 %5 to i64
  br label %745

745:                                              ; preds = %.lr.ph821, %._crit_edge
  %indvars.iv = phi i64 [ 0, %.lr.ph821 ], [ %indvars.iv.next, %._crit_edge ]
  %746 = trunc nuw nsw i64 %indvars.iv to i32
  %747 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef 0, i32 noundef %746, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %748 = getelementptr inbounds float, ptr %632, i64 %indvars.iv
  store float %747, ptr %748, align 4, !tbaa !55
  br i1 %744, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %745
  switch i32 %.8674777, label %.lr.ph.split [
    i32 1, label %.lr.ph.split.us
    i32 3, label %.lr.ph.split.us816
  ]

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %749 = phi float [ %.756.us, %.lr.ph.split.us ], [ %747, %.lr.ph ]
  %.13815.us = phi i32 [ %752, %.lr.ph.split.us ], [ 0, %.lr.ph ]
  %750 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.13815.us, i32 noundef %746, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %751 = fcmp olt float %749, %750
  %.756.us = select i1 %751, float %750, float %749
  store float %.756.us, ptr %748, align 4, !tbaa !55
  %752 = add nuw nsw i32 %.13815.us, 1
  %exitcond1043.not = icmp eq i32 %752, %3
  br i1 %exitcond1043.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !65

.lr.ph.split.us816:                               ; preds = %.lr.ph, %.lr.ph.split.us816
  %753 = phi float [ %763, %.lr.ph.split.us816 ], [ %747, %.lr.ph ]
  %.13815.us817 = phi i32 [ %764, %.lr.ph.split.us816 ], [ 0, %.lr.ph ]
  %754 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.13815.us817, i32 noundef %746, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %755 = insertelement <2 x float> poison, float %753, i64 0
  %756 = insertelement <2 x float> %755, float %754, i64 1
  %757 = fcmp oge <2 x float> %756, zeroinitializer
  %758 = fneg <2 x float> %756
  %759 = select <2 x i1> %757, <2 x float> %756, <2 x float> %758
  %760 = extractelement <2 x float> %759, i64 0
  %761 = extractelement <2 x float> %759, i64 1
  %762 = fcmp olt float %760, %761
  %763 = select i1 %762, float %761, float %760
  store float %763, ptr %748, align 4, !tbaa !55
  %764 = add nuw nsw i32 %.13815.us817, 1
  %exitcond.not = icmp eq i32 %764, %3
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split.us816, !llvm.loop !65

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %765 = phi float [ %.757, %.lr.ph.split ], [ %747, %.lr.ph ]
  %.13815 = phi i32 [ %768, %.lr.ph.split ], [ 0, %.lr.ph ]
  %766 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %.13815, i32 noundef %746, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %767 = fcmp olt float %765, %766
  %.757 = select i1 %767, float %765, float %766
  store float %.757, ptr %748, align 4, !tbaa !55
  %768 = add nuw nsw i32 %.13815, 1
  %exitcond1044.not = icmp eq i32 %768, %3
  br i1 %exitcond1044.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !65

._crit_edge:                                      ; preds = %.lr.ph.split.us816, %.lr.ph.split.us, %.lr.ph.split, %745
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond1046.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond1046.not, label %.loopexit802, label %745, !llvm.loop !66

769:                                              ; preds = %742
  %770 = icmp eq i64 %.2677776, 0
  %771 = trunc i64 %.2677776 to i32
  %.1665 = select i1 %770, i32 %5, i32 %771
  %772 = icmp eq i32 %.8674777, 1
  %773 = icmp eq i32 %.8674777, 3
  %switch = icmp eq i32 %.8674777, 2
  %774 = icmp sgt i32 %3, 0
  br i1 %switch, label %.preheader809, label %.preheader811

.preheader811:                                    ; preds = %769
  br i1 %774, label %.lr.ph829, label %.loopexit802

.lr.ph829:                                        ; preds = %.preheader811
  %775 = select i1 %772, float 0xC7EFFFFFE0000000, float 0.000000e+00
  %776 = icmp sgt i32 %.1665, 0
  %wide.trip.count1060 = zext nneg i32 %3 to i64
  %wide.trip.count1050 = zext nneg i32 %.1665 to i64
  %wide.trip.count1055 = zext nneg i32 %.1665 to i64
  br label %778

.preheader809:                                    ; preds = %769
  br i1 %774, label %.lr.ph841, label %.loopexit802

.lr.ph841:                                        ; preds = %.preheader809
  %777 = icmp sgt i32 %.1665, 0
  %wide.trip.count1080 = zext nneg i32 %3 to i64
  %wide.trip.count1065 = zext nneg i32 %.1665 to i64
  %wide.trip.count1070 = zext nneg i32 %.1665 to i64
  %wide.trip.count1075 = zext nneg i32 %.1665 to i64
  br label %823

778:                                              ; preds = %.lr.ph829, %._crit_edge826
  %indvars.iv1057 = phi i64 [ 0, %.lr.ph829 ], [ %indvars.iv.next1058, %._crit_edge826 ]
  %779 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1057
  store float %775, ptr %779, align 4, !tbaa !55
  br i1 %776, label %.lr.ph825, label %._crit_edge826

.lr.ph825:                                        ; preds = %778
  %780 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv1057
  %781 = getelementptr inbounds i64, ptr %33, i64 %indvars.iv1057
  %782 = trunc nuw nsw i64 %indvars.iv1057 to i32
  br i1 %.not730, label %.lr.ph825.split.us, label %.lr.ph825.split

.lr.ph825.split.us:                               ; preds = %.lr.ph825, %798
  %783 = phi float [ %..0644.us, %798 ], [ %775, %.lr.ph825 ]
  %indvars.iv1052 = phi i64 [ %indvars.iv.next1053, %798 ], [ 0, %.lr.ph825 ]
  br i1 %770, label %792, label %784

784:                                              ; preds = %.lr.ph825.split.us
  br i1 %.not731, label %789, label %785

785:                                              ; preds = %784
  %786 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1052
  %787 = load i32, ptr %786, align 4, !tbaa !45
  %788 = zext i32 %787 to i64
  br label %792

789:                                              ; preds = %784
  %790 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1052
  %791 = load i64, ptr %790, align 8, !tbaa !25
  br label %792

792:                                              ; preds = %785, %789, %.lr.ph825.split.us
  %.10656.us.in = phi i64 [ %indvars.iv1052, %.lr.ph825.split.us ], [ %788, %785 ], [ %791, %789 ]
  %.10656.us = trunc i64 %.10656.us.in to i32
  %793 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %782, i32 noundef %.10656.us, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  br i1 %773, label %794, label %798

794:                                              ; preds = %792
  %795 = fcmp oge float %793, 0.000000e+00
  %796 = fneg float %793
  %797 = select i1 %795, float %793, float %796
  br label %798

798:                                              ; preds = %794, %792
  %.0644.us = phi float [ %797, %794 ], [ %793, %792 ]
  %799 = fcmp olt float %.0644.us, %783
  %..0644.us = select i1 %799, float %783, float %.0644.us
  store float %..0644.us, ptr %779, align 4, !tbaa !55
  %indvars.iv.next1053 = add nuw nsw i64 %indvars.iv1052, 1
  %exitcond1056.not = icmp eq i64 %indvars.iv.next1053, %wide.trip.count1055
  br i1 %exitcond1056.not, label %._crit_edge826, label %.lr.ph825.split.us, !llvm.loop !67

.lr.ph825.split:                                  ; preds = %.lr.ph825, %821
  %800 = phi float [ %822, %821 ], [ %775, %.lr.ph825 ]
  %indvars.iv1047 = phi i64 [ %indvars.iv.next1048, %821 ], [ 0, %.lr.ph825 ]
  br i1 %770, label %809, label %801

801:                                              ; preds = %.lr.ph825.split
  br i1 %.not731, label %806, label %802

802:                                              ; preds = %801
  %803 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1047
  %804 = load i32, ptr %803, align 4, !tbaa !45
  %805 = zext i32 %804 to i64
  br label %809

806:                                              ; preds = %801
  %807 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1047
  %808 = load i64, ptr %807, align 8, !tbaa !25
  br label %809

809:                                              ; preds = %802, %806, %.lr.ph825.split
  %.10656.in = phi i64 [ %indvars.iv1047, %.lr.ph825.split ], [ %805, %802 ], [ %808, %806 ]
  %.10656 = trunc i64 %.10656.in to i32
  %810 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %782, i32 noundef %.10656, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  br i1 %773, label %811, label %815

811:                                              ; preds = %809
  %812 = fcmp oge float %810, 0.000000e+00
  %813 = fneg float %810
  %814 = select i1 %812, float %810, float %813
  br label %815

815:                                              ; preds = %811, %809
  %.0644 = phi float [ %814, %811 ], [ %810, %809 ]
  %816 = fcmp ult float %.0644, %800
  br i1 %816, label %821, label %817

817:                                              ; preds = %815
  store float %.0644, ptr %779, align 4, !tbaa !55
  br i1 %.not731, label %819, label %818

818:                                              ; preds = %817
  store i32 %.10656, ptr %780, align 4, !tbaa !45
  br label %821

819:                                              ; preds = %817
  %sext = shl i64 %.10656.in, 32
  %820 = ashr exact i64 %sext, 32
  store i64 %820, ptr %781, align 8, !tbaa !25
  br label %821

821:                                              ; preds = %815, %819, %818
  %822 = phi float [ %800, %815 ], [ %.0644, %819 ], [ %.0644, %818 ]
  %indvars.iv.next1048 = add nuw nsw i64 %indvars.iv1047, 1
  %exitcond1051.not = icmp eq i64 %indvars.iv.next1048, %wide.trip.count1050
  br i1 %exitcond1051.not, label %._crit_edge826, label %.lr.ph825.split, !llvm.loop !67

._crit_edge826:                                   ; preds = %821, %798, %778
  %indvars.iv.next1058 = add nuw nsw i64 %indvars.iv1057, 1
  %exitcond1061.not = icmp eq i64 %indvars.iv.next1058, %wide.trip.count1060
  br i1 %exitcond1061.not, label %.loopexit802, label %778, !llvm.loop !68

823:                                              ; preds = %.lr.ph841, %._crit_edge834
  %indvars.iv1077 = phi i64 [ 0, %.lr.ph841 ], [ %indvars.iv.next1078, %._crit_edge834 ]
  %824 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1077
  store float 0x47EFFFFFE0000000, ptr %824, align 4, !tbaa !55
  br i1 %777, label %.lr.ph833, label %._crit_edge834

.lr.ph833:                                        ; preds = %823
  %825 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv1077
  %826 = getelementptr inbounds i64, ptr %33, i64 %indvars.iv1077
  %827 = trunc nuw nsw i64 %indvars.iv1077 to i32
  br i1 %.not730, label %.lr.ph833.split.us, label %.lr.ph833.split

.lr.ph833.split.us:                               ; preds = %.lr.ph833, %837
  %828 = phi float [ %.758.us, %837 ], [ 0x47EFFFFFE0000000, %.lr.ph833 ]
  %indvars.iv1072 = phi i64 [ %indvars.iv.next1073, %837 ], [ 0, %.lr.ph833 ]
  br i1 %770, label %837, label %829

829:                                              ; preds = %.lr.ph833.split.us
  br i1 %.not731, label %834, label %830

830:                                              ; preds = %829
  %831 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1072
  %832 = load i32, ptr %831, align 4, !tbaa !45
  %833 = zext i32 %832 to i64
  br label %837

834:                                              ; preds = %829
  %835 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1072
  %836 = load i64, ptr %835, align 8, !tbaa !25
  br label %837

837:                                              ; preds = %830, %834, %.lr.ph833.split.us
  %.11657.us.in = phi i64 [ %indvars.iv1072, %.lr.ph833.split.us ], [ %833, %830 ], [ %836, %834 ]
  %.11657.us = trunc i64 %.11657.us.in to i32
  %838 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %827, i32 noundef %.11657.us, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %839 = fcmp olt float %838, %828
  %.758.us = select i1 %839, float %838, float %828
  store float %.758.us, ptr %824, align 4, !tbaa !55
  %indvars.iv.next1073 = add nuw nsw i64 %indvars.iv1072, 1
  %exitcond1076.not = icmp eq i64 %indvars.iv.next1073, %wide.trip.count1075
  br i1 %exitcond1076.not, label %._crit_edge834, label %.lr.ph833.split.us, !llvm.loop !69

.lr.ph833.split:                                  ; preds = %.lr.ph833
  br i1 %.not731, label %.lr.ph833.split.split.us, label %.lr.ph833.split.split

.lr.ph833.split.split.us:                         ; preds = %.lr.ph833.split, %849
  %840 = phi float [ %850, %849 ], [ 0x47EFFFFFE0000000, %.lr.ph833.split ]
  %indvars.iv1067 = phi i64 [ %indvars.iv.next1068, %849 ], [ 0, %.lr.ph833.split ]
  br i1 %770, label %844, label %841

841:                                              ; preds = %.lr.ph833.split.split.us
  %842 = getelementptr inbounds i64, ptr %31, i64 %indvars.iv1067
  %843 = load i64, ptr %842, align 8, !tbaa !25
  br label %844

844:                                              ; preds = %841, %.lr.ph833.split.split.us
  %.11657.us837.in = phi i64 [ %843, %841 ], [ %indvars.iv1067, %.lr.ph833.split.split.us ]
  %.11657.us837 = trunc i64 %.11657.us837.in to i32
  %845 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %827, i32 noundef %.11657.us837, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %846 = fcmp ugt float %845, %840
  br i1 %846, label %849, label %847

847:                                              ; preds = %844
  store float %845, ptr %824, align 4, !tbaa !55
  %sext1278 = shl i64 %.11657.us837.in, 32
  %848 = ashr exact i64 %sext1278, 32
  store i64 %848, ptr %826, align 8, !tbaa !25
  br label %849

849:                                              ; preds = %847, %844
  %850 = phi float [ %845, %847 ], [ %840, %844 ]
  %indvars.iv.next1068 = add nuw nsw i64 %indvars.iv1067, 1
  %exitcond1071.not = icmp eq i64 %indvars.iv.next1068, %wide.trip.count1070
  br i1 %exitcond1071.not, label %._crit_edge834, label %.lr.ph833.split.split.us, !llvm.loop !69

.lr.ph833.split.split:                            ; preds = %.lr.ph833.split, %860
  %851 = phi float [ %861, %860 ], [ 0x47EFFFFFE0000000, %.lr.ph833.split ]
  %indvars.iv1062 = phi i64 [ %indvars.iv.next1063, %860 ], [ 0, %.lr.ph833.split ]
  %852 = trunc nuw nsw i64 %indvars.iv1062 to i32
  br i1 %770, label %856, label %853

853:                                              ; preds = %.lr.ph833.split.split
  %854 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv1062
  %855 = load i32, ptr %854, align 4, !tbaa !45
  br label %856

856:                                              ; preds = %.lr.ph833.split.split, %853
  %.11657 = phi i32 [ %855, %853 ], [ %852, %.lr.ph833.split.split ]
  %857 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %17, i32 noundef %827, i32 noundef %.11657, i32 noundef %7, i32 noundef %10, ptr noundef nonnull %1, i32 noundef 3)
  %858 = fcmp ugt float %857, %851
  br i1 %858, label %860, label %859

859:                                              ; preds = %856
  store float %857, ptr %824, align 4, !tbaa !55
  store i32 %.11657, ptr %825, align 4, !tbaa !45
  br label %860

860:                                              ; preds = %856, %859
  %861 = phi float [ %851, %856 ], [ %857, %859 ]
  %indvars.iv.next1063 = add nuw nsw i64 %indvars.iv1062, 1
  %exitcond1066.not = icmp eq i64 %indvars.iv.next1063, %wide.trip.count1065
  br i1 %exitcond1066.not, label %._crit_edge834, label %.lr.ph833.split.split, !llvm.loop !69

._crit_edge834:                                   ; preds = %860, %849, %837, %823
  %indvars.iv.next1078 = add nuw nsw i64 %indvars.iv1077, 1
  %exitcond1081.not = icmp eq i64 %indvars.iv.next1078, %wide.trip.count1080
  br i1 %exitcond1081.not, label %.loopexit802, label %823, !llvm.loop !70

.loopexit802:                                     ; preds = %._crit_edge, %._crit_edge826, %._crit_edge834, %679, %._crit_edge857, %727, %.preheader803, %.preheader808, %.preheader813, %.preheader811, %.preheader809, %.preheader804, %._crit_edge851, %._crit_edge870
  %862 = icmp sgt i32 %15, 0
  br i1 %862, label %.lr.ph875, label %._crit_edge990

.lr.ph875:                                        ; preds = %.loopexit802
  %.not737 = icmp eq i32 %.8695775, 0
  %wide.trip.count1128 = zext nneg i32 %15 to i64
  br label %863

863:                                              ; preds = %.lr.ph875, %871
  %indvars.iv1125 = phi i64 [ 0, %.lr.ph875 ], [ %indvars.iv.next1126, %871 ]
  br i1 %63, label %867, label %864

864:                                              ; preds = %863
  %865 = getelementptr inbounds float, ptr %632, i64 %indvars.iv1125
  %866 = trunc nuw nsw i64 %indvars.iv1125 to i32
  tail call void @libxsmm_elementwise_store_value(ptr noundef %19, ptr noundef %865, i32 noundef %866, i32 noundef 0, i32 noundef %9, i32 noundef 0, i32 noundef %11, ptr noundef null, i32 noundef 0)
  br label %867

867:                                              ; preds = %864, %863
  br i1 %.not737, label %871, label %868

868:                                              ; preds = %867
  %869 = getelementptr inbounds float, ptr %633, i64 %indvars.iv1125
  %870 = trunc nuw nsw i64 %indvars.iv1125 to i32
  tail call void @libxsmm_elementwise_store_value(ptr noundef %.0, ptr noundef %869, i32 noundef %870, i32 noundef 0, i32 noundef %9, i32 noundef 0, i32 noundef %11, ptr noundef null, i32 noundef 0)
  br label %871

871:                                              ; preds = %867, %868
  %indvars.iv.next1126 = add nuw nsw i64 %indvars.iv1125, 1
  %exitcond1129.not = icmp eq i64 %indvars.iv.next1126, %wide.trip.count1128
  br i1 %exitcond1129.not, label %._crit_edge990, label %863, !llvm.loop !71

._crit_edge990:                                   ; preds = %871, %.loopexit802, %.lr.ph989.split.preheader, %.loopexit
  %.sink1353 = phi ptr [ %68, %.loopexit ], [ %68, %.lr.ph989.split.preheader ], [ %632, %.loopexit802 ], [ %632, %871 ]
  %.sink = phi ptr [ %69, %.loopexit ], [ %69, %.lr.ph989.split.preheader ], [ %633, %.loopexit802 ], [ %633, %871 ]
  tail call void @free(ptr noundef %.sink1353) #7
  tail call void @free(ptr noundef %.sink) #7
  ret void
}

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }
attributes #9 = { nounwind allocsize(0) }

!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, !7, i64 0}
!6 = !{!"libxsmm_meltw_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !10, i64 27, !10, i64 29, !8, i64 31}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !7, i64 8}
!13 = !{!6, !7, i64 12}
!14 = !{!6, !10, i64 27}
!15 = !{!16, !18, i64 32}
!16 = !{!"libxsmm_meltw_unary_param", !17, i64 0, !19, i64 32, !19, i64 80}
!17 = !{!"libxsmm_matrix_op_arg", !18, i64 0, !18, i64 8, !18, i64 16, !18, i64 24}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!"libxsmm_matrix_arg", !18, i64 0, !18, i64 8, !18, i64 16, !18, i64 24, !18, i64 32, !18, i64 40}
!20 = !{!16, !18, i64 80}
!21 = !{!16, !18, i64 40}
!22 = !{!16, !18, i64 88}
!23 = !{!6, !10, i64 29}
!24 = !{!16, !18, i64 48}
!25 = !{!26, !26, i64 0}
!26 = !{!"long long", !8, i64 0}
!27 = !{!28, !28, i64 0}
!28 = !{!"double", !8, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.unroll.disable"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !33}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}
!42 = distinct !{!42, !30}
!43 = distinct !{!43, !30}
!44 = distinct !{!44, !30}
!45 = !{!7, !7, i64 0}
!46 = distinct !{!46, !30}
!47 = distinct !{!47, !30}
!48 = distinct !{!48, !33}
!49 = distinct !{!49, !33}
!50 = distinct !{!50, !30}
!51 = distinct !{!51, !30}
!52 = distinct !{!52, !30}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !30}
!55 = !{!56, !56, i64 0}
!56 = !{!"float", !8, i64 0}
!57 = distinct !{!57, !30}
!58 = distinct !{!58, !30}
!59 = distinct !{!59, !30}
!60 = distinct !{!60, !30}
!61 = distinct !{!61, !30}
!62 = distinct !{!62, !30}
!63 = distinct !{!63, !30}
!64 = distinct !{!64, !30}
!65 = distinct !{!65, !30}
!66 = distinct !{!66, !30}
!67 = distinct !{!67, !30}
!68 = distinct !{!68, !30}
!69 = distinct !{!69, !30}
!70 = distinct !{!70, !30}
!71 = distinct !{!71, !30}


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