; LLVM IR from thunlp/SE-WRL :: word2vec (word2vec)

; 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.vocab_word = type { i64, ptr, ptr, ptr, i8 }

@cbow = external dso_local global i32, align 4
@debug_mode = external dso_local global i32, align 4
@window = external dso_local global i32, align 4
@num_threads = external dso_local global i32, align 4
@vocab_size = external dso_local global i64, align 8
@layer1_size = external dso_local global i64, align 8
@train_words = external dso_local global i64, align 8
@word_count_actual = external dso_local global i64, align 8
@iter = external dso_local global i64, align 8
@file_size = external dso_local global i64, align 8
@alpha = external dso_local global float, align 4
@sample = external dso_local global float, align 4
@hs = external dso_local global i32, align 4
@negative = external dso_local global i32, align 4
@table = external dso_local global ptr, align 8
@vocab = external dso_local global ptr, align 8
@stdout = external global ptr, align 8
@train_file = external dso_local global [100 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@syn0 = external dso_local global ptr, align 8
@syn1 = external dso_local global ptr, align 8
@syn1neg = external dso_local global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [57 x i8], align 1
@start = external dso_local global i64, align 8
@starting_alpha = external dso_local global float, align 4
@expTable = external dso_local global ptr, align 8

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

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

; Function Attrs: nounwind
declare i32 @feof(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ReadWordIndex(ptr noundef) #2

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #3

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

declare i32 @fflush(ptr noundef) #4

declare noalias ptr @fopen(ptr noundef, ptr noundef) #4

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

declare i32 @fclose(ptr noundef) #4

declare i32 @fseek(ptr noundef, i64 noundef, i32 noundef) #4

; Function Attrs: nounwind uwtable
define dso_local ptr @TrainModelThread(ptr noundef %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca [1001 x i64], align 16
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca float, align 4
  %28 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store i64 0, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  store i64 0, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  store i64 0, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  store i64 0, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8008, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %29 = load i64, ptr @iter, align 8, !tbaa !9
  store i64 %29, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = ptrtoint ptr %30 to i64
  store i64 %31, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %32 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %33 = call noalias ptr @calloc(i64 noundef %32, i64 noundef 4) #8
  store ptr %33, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %34 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %35 = call noalias ptr @calloc(i64 noundef %34, i64 noundef 4) #8
  store ptr %35, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %36 = call noalias ptr @fopen(ptr noundef @train_file, ptr noundef @.str.1)
  store ptr %36, ptr %26, align 8, !tbaa !5
  %37 = load ptr, ptr %26, align 8, !tbaa !5
  %38 = load i64, ptr @file_size, align 8, !tbaa !9
  %39 = load i32, ptr @num_threads, align 4, !tbaa !11
  %40 = sext i32 %39 to i64
  %41 = sdiv i64 %38, %40
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = ptrtoint ptr %42 to i64
  %44 = mul nsw i64 %41, %43
  %45 = call i32 @fseek(ptr noundef %37, i64 noundef %44, i32 noundef 0)
  br label %46

46:                                               ; preds = %1063, %1062, %243, %227, %1
  br label %47

47:                                               ; preds = %46
  %48 = load i64, ptr %11, align 8, !tbaa !9
  %49 = load i64, ptr %12, align 8, !tbaa !9
  %50 = sub nsw i64 %48, %49
  %51 = icmp sgt i64 %50, 10000
  br i1 %51, label %52, label %125

52:                                               ; preds = %47
  %53 = load i64, ptr %11, align 8, !tbaa !9
  %54 = load i64, ptr %12, align 8, !tbaa !9
  %55 = sub nsw i64 %53, %54
  %56 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %57 = add nsw i64 %56, %55
  store i64 %57, ptr @word_count_actual, align 8, !tbaa !9
  %58 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %58, ptr %12, align 8, !tbaa !9
  %59 = load i32, ptr @debug_mode, align 4, !tbaa !11
  %60 = icmp sgt i32 %59, 1
  br i1 %60, label %61, label %101

61:                                               ; preds = %52
  %62 = call i64 @clock() #7
  store i64 %62, ptr %23, align 8, !tbaa !13
  %63 = load float, ptr @alpha, align 4, !tbaa !15
  %64 = fpext float %63 to double
  %65 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %66 = sitofp i64 %65 to float
  %67 = load i64, ptr @iter, align 8, !tbaa !9
  %68 = load i64, ptr @train_words, align 8, !tbaa !9
  %69 = mul nsw i64 %67, %68
  %70 = add nsw i64 %69, 1
  %71 = sitofp i64 %70 to float
  %72 = fdiv float %66, %71
  %73 = fmul float %72, 1.000000e+02
  %74 = fpext float %73 to double
  %75 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %76 = sitofp i64 %75 to float
  %77 = load i64, ptr %23, align 8, !tbaa !13
  %78 = load i64, ptr @start, align 8, !tbaa !13
  %79 = sub nsw i64 %77, %78
  %80 = add nsw i64 %79, 1
  %81 = sitofp i64 %80 to float
  %82 = fdiv float %81, 1.000000e+06
  %83 = fmul float %82, 1.000000e+03
  %84 = fdiv float %76, %83
  %85 = fpext float %84 to double
  %86 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef 13, double noundef %64, double noundef %74, double noundef %85)
  %87 = load ptr, ptr @stdout, align 8, !tbaa !5
  %88 = call i32 @fflush(ptr noundef %87)
  %89 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %90 = sitofp i64 %89 to float
  %91 = load i64, ptr @iter, align 8, !tbaa !9
  %92 = load i64, ptr @train_words, align 8, !tbaa !9
  %93 = mul nsw i64 %91, %92
  %94 = add nsw i64 %93, 1
  %95 = sitofp i64 %94 to float
  %96 = fdiv float %90, %95
  %97 = fmul float %96, 1.000000e+02
  %98 = fcmp ogt float %97, 8.500000e+01
  br i1 %98, label %99, label %100

99:                                               ; preds = %61
  br label %1064

100:                                              ; preds = %61
  br label %101

101:                                              ; preds = %100, %52
  %102 = load float, ptr @starting_alpha, align 4, !tbaa !15
  %103 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %104 = sitofp i64 %103 to float
  %105 = load i64, ptr @iter, align 8, !tbaa !9
  %106 = load i64, ptr @train_words, align 8, !tbaa !9
  %107 = mul nsw i64 %105, %106
  %108 = add nsw i64 %107, 1
  %109 = sitofp i64 %108 to float
  %110 = fdiv float %104, %109
  %111 = fsub float 1.000000e+00, %110
  %112 = fmul float %102, %111
  store float %112, ptr @alpha, align 4, !tbaa !15
  %113 = load float, ptr @alpha, align 4, !tbaa !15
  %114 = fpext float %113 to double
  %115 = load float, ptr @starting_alpha, align 4, !tbaa !15
  %116 = fpext float %115 to double
  %117 = fmul double %116, 1.000000e-04
  %118 = fcmp olt double %114, %117
  br i1 %118, label %119, label %124

119:                                              ; preds = %101
  %120 = load float, ptr @starting_alpha, align 4, !tbaa !15
  %121 = fpext float %120 to double
  %122 = fmul double %121, 1.000000e-04
  %123 = fptrunc double %122 to float
  store float %123, ptr @alpha, align 4, !tbaa !15
  br label %124

124:                                              ; preds = %119, %101
  br label %125

125:                                              ; preds = %124, %47
  %126 = load i64, ptr %9, align 8, !tbaa !9
  %127 = icmp eq i64 %126, 0
  br i1 %127, label %128, label %205

128:                                              ; preds = %125
  br label %129

129:                                              ; preds = %203, %191, %141, %128
  br label %130

130:                                              ; preds = %129
  %131 = load ptr, ptr %26, align 8, !tbaa !5
  %132 = call i32 @ReadWordIndex(ptr noundef %131)
  %133 = sext i32 %132 to i64
  store i64 %133, ptr %7, align 8, !tbaa !9
  %134 = load ptr, ptr %26, align 8, !tbaa !5
  %135 = call i32 @feof(ptr noundef %134) #7
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %138

137:                                              ; preds = %130
  br label %204

138:                                              ; preds = %130
  %139 = load i64, ptr %7, align 8, !tbaa !9
  %140 = icmp eq i64 %139, -1
  br i1 %140, label %141, label %142

141:                                              ; preds = %138
  br label %129

142:                                              ; preds = %138
  %143 = load i64, ptr %11, align 8, !tbaa !9
  %144 = add nsw i64 %143, 1
  store i64 %144, ptr %11, align 8, !tbaa !9
  %145 = load i64, ptr %7, align 8, !tbaa !9
  %146 = icmp eq i64 %145, 0
  br i1 %146, label %147, label %148

147:                                              ; preds = %142
  br label %204

148:                                              ; preds = %142
  %149 = load float, ptr @sample, align 4, !tbaa !15
  %150 = fcmp ogt float %149, 0.000000e+00
  br i1 %150, label %151, label %194

151:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %152 = load ptr, ptr @vocab, align 8, !tbaa !5
  %153 = load i64, ptr %7, align 8, !tbaa !9
  %154 = getelementptr inbounds %struct.vocab_word, ptr %152, i64 %153
  %155 = getelementptr inbounds %struct.vocab_word, ptr %154, i32 0, i32 0
  %156 = load i64, ptr %155, align 8, !tbaa !17
  %157 = sitofp i64 %156 to float
  %158 = load float, ptr @sample, align 4, !tbaa !15
  %159 = load i64, ptr @train_words, align 8, !tbaa !9
  %160 = sitofp i64 %159 to float
  %161 = fmul float %158, %160
  %162 = fdiv float %157, %161
  %163 = fpext float %162 to double
  %164 = call double @sqrt(double noundef %163) #7
  %165 = fadd double %164, 1.000000e+00
  %166 = load float, ptr @sample, align 4, !tbaa !15
  %167 = load i64, ptr @train_words, align 8, !tbaa !9
  %168 = sitofp i64 %167 to float
  %169 = fmul float %166, %168
  %170 = fpext float %169 to double
  %171 = fmul double %165, %170
  %172 = load ptr, ptr @vocab, align 8, !tbaa !5
  %173 = load i64, ptr %7, align 8, !tbaa !9
  %174 = getelementptr inbounds %struct.vocab_word, ptr %172, i64 %173
  %175 = getelementptr inbounds %struct.vocab_word, ptr %174, i32 0, i32 0
  %176 = load i64, ptr %175, align 8, !tbaa !17
  %177 = sitofp i64 %176 to double
  %178 = fdiv double %171, %177
  %179 = fptrunc double %178 to float
  store float %179, ptr %27, align 4, !tbaa !15
  %180 = load i64, ptr %20, align 8, !tbaa !9
  %181 = mul i64 %180, 25214903917
  %182 = add i64 %181, 11
  store i64 %182, ptr %20, align 8, !tbaa !9
  %183 = load float, ptr %27, align 4, !tbaa !15
  %184 = load i64, ptr %20, align 8, !tbaa !9
  %185 = and i64 %184, 65535
  %186 = uitofp i64 %185 to float
  %187 = fdiv float %186, 6.553600e+04
  %188 = fcmp olt float %183, %187
  br i1 %188, label %189, label %190

189:                                              ; preds = %151
  store i32 4, ptr %28, align 4
  br label %191

190:                                              ; preds = %151
  store i32 0, ptr %28, align 4
  br label %191

191:                                              ; preds = %190, %189
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  %192 = load i32, ptr %28, align 4
  switch i32 %192, label %1069 [
    i32 0, label %193
    i32 4, label %129
  ]

193:                                              ; preds = %191
  br label %194

194:                                              ; preds = %193, %148
  %195 = load i64, ptr %7, align 8, !tbaa !9
  %196 = load i64, ptr %9, align 8, !tbaa !9
  %197 = getelementptr inbounds [1001 x i64], ptr %13, i64 0, i64 %196
  store i64 %195, ptr %197, align 8, !tbaa !9
  %198 = load i64, ptr %9, align 8, !tbaa !9
  %199 = add nsw i64 %198, 1
  store i64 %199, ptr %9, align 8, !tbaa !9
  %200 = load i64, ptr %9, align 8, !tbaa !9
  %201 = icmp sge i64 %200, 1000
  br i1 %201, label %202, label %203

202:                                              ; preds = %194
  br label %204

203:                                              ; preds = %194
  br label %129

204:                                              ; preds = %202, %147, %137
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %205

205:                                              ; preds = %204, %125
  %206 = load ptr, ptr %26, align 8, !tbaa !5
  %207 = call i32 @feof(ptr noundef %206) #7
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %216, label %209

209:                                              ; preds = %205
  %210 = load i64, ptr %11, align 8, !tbaa !9
  %211 = load i64, ptr @train_words, align 8, !tbaa !9
  %212 = load i32, ptr @num_threads, align 4, !tbaa !11
  %213 = sext i32 %212 to i64
  %214 = sdiv i64 %211, %213
  %215 = icmp sgt i64 %210, %214
  br i1 %215, label %216, label %237

216:                                              ; preds = %209, %205
  %217 = load i64, ptr %11, align 8, !tbaa !9
  %218 = load i64, ptr %12, align 8, !tbaa !9
  %219 = sub nsw i64 %217, %218
  %220 = load i64, ptr @word_count_actual, align 8, !tbaa !9
  %221 = add nsw i64 %220, %219
  store i64 %221, ptr @word_count_actual, align 8, !tbaa !9
  %222 = load i64, ptr %19, align 8, !tbaa !9
  %223 = add nsw i64 %222, -1
  store i64 %223, ptr %19, align 8, !tbaa !9
  %224 = load i64, ptr %19, align 8, !tbaa !9
  %225 = icmp eq i64 %224, 0
  br i1 %225, label %226, label %227

226:                                              ; preds = %216
  br label %1064

227:                                              ; preds = %216
  store i64 0, ptr %11, align 8, !tbaa !9
  store i64 0, ptr %12, align 8, !tbaa !9
  store i64 0, ptr %9, align 8, !tbaa !9
  %228 = load ptr, ptr %26, align 8, !tbaa !5
  %229 = load i64, ptr @file_size, align 8, !tbaa !9
  %230 = load i32, ptr @num_threads, align 4, !tbaa !11
  %231 = sext i32 %230 to i64
  %232 = sdiv i64 %229, %231
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = ptrtoint ptr %233 to i64
  %235 = mul nsw i64 %232, %234
  %236 = call i32 @fseek(ptr noundef %228, i64 noundef %235, i32 noundef 0)
  br label %46

237:                                              ; preds = %209
  %238 = load i64, ptr %10, align 8, !tbaa !9
  %239 = getelementptr inbounds [1001 x i64], ptr %13, i64 0, i64 %238
  %240 = load i64, ptr %239, align 8, !tbaa !9
  store i64 %240, ptr %7, align 8, !tbaa !9
  %241 = load i64, ptr %7, align 8, !tbaa !9
  %242 = icmp eq i64 %241, -1
  br i1 %242, label %243, label %244

243:                                              ; preds = %237
  br label %46

244:                                              ; preds = %237
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %245

245:                                              ; preds = %253, %244
  %246 = load i64, ptr %16, align 8, !tbaa !9
  %247 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %248 = icmp slt i64 %246, %247
  br i1 %248, label %249, label %256

249:                                              ; preds = %245
  %250 = load ptr, ptr %24, align 8, !tbaa !5
  %251 = load i64, ptr %16, align 8, !tbaa !9
  %252 = getelementptr inbounds float, ptr %250, i64 %251
  store float 0.000000e+00, ptr %252, align 4, !tbaa !15
  br label %253

253:                                              ; preds = %249
  %254 = load i64, ptr %16, align 8, !tbaa !9
  %255 = add nsw i64 %254, 1
  store i64 %255, ptr %16, align 8, !tbaa !9
  br label %245, !llvm.loop !19

256:                                              ; preds = %245
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %265, %256
  %258 = load i64, ptr %16, align 8, !tbaa !9
  %259 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %260 = icmp slt i64 %258, %259
  br i1 %260, label %261, label %268

261:                                              ; preds = %257
  %262 = load ptr, ptr %25, align 8, !tbaa !5
  %263 = load i64, ptr %16, align 8, !tbaa !9
  %264 = getelementptr inbounds float, ptr %262, i64 %263
  store float 0.000000e+00, ptr %264, align 4, !tbaa !15
  br label %265

265:                                              ; preds = %261
  %266 = load i64, ptr %16, align 8, !tbaa !9
  %267 = add nsw i64 %266, 1
  store i64 %267, ptr %16, align 8, !tbaa !9
  br label %257, !llvm.loop !21

268:                                              ; preds = %257
  %269 = load i64, ptr %20, align 8, !tbaa !9
  %270 = mul i64 %269, 25214903917
  %271 = add i64 %270, 11
  store i64 %271, ptr %20, align 8, !tbaa !9
  %272 = load i64, ptr %20, align 8, !tbaa !9
  %273 = load i32, ptr @window, align 4, !tbaa !11
  %274 = sext i32 %273 to i64
  %275 = urem i64 %272, %274
  store i64 %275, ptr %4, align 8, !tbaa !9
  %276 = load i32, ptr @cbow, align 4, !tbaa !11
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %700

278:                                              ; preds = %268
  store i64 0, ptr %6, align 8, !tbaa !9
  %279 = load i64, ptr %4, align 8, !tbaa !9
  store i64 %279, ptr %3, align 8, !tbaa !9
  br label %280

280:                                              ; preds = %342, %278
  %281 = load i64, ptr %3, align 8, !tbaa !9
  %282 = load i32, ptr @window, align 4, !tbaa !11
  %283 = mul nsw i32 %282, 2
  %284 = add nsw i32 %283, 1
  %285 = sext i32 %284 to i64
  %286 = load i64, ptr %4, align 8, !tbaa !9
  %287 = sub nsw i64 %285, %286
  %288 = icmp slt i64 %281, %287
  br i1 %288, label %289, label %345

289:                                              ; preds = %280
  %290 = load i64, ptr %3, align 8, !tbaa !9
  %291 = load i32, ptr @window, align 4, !tbaa !11
  %292 = sext i32 %291 to i64
  %293 = icmp ne i64 %290, %292
  br i1 %293, label %294, label %341

294:                                              ; preds = %289
  %295 = load i64, ptr %10, align 8, !tbaa !9
  %296 = load i32, ptr @window, align 4, !tbaa !11
  %297 = sext i32 %296 to i64
  %298 = sub nsw i64 %295, %297
  %299 = load i64, ptr %3, align 8, !tbaa !9
  %300 = add nsw i64 %298, %299
  store i64 %300, ptr %16, align 8, !tbaa !9
  %301 = load i64, ptr %16, align 8, !tbaa !9
  %302 = icmp slt i64 %301, 0
  br i1 %302, label %303, label %304

303:                                              ; preds = %294
  br label %342

304:                                              ; preds = %294
  %305 = load i64, ptr %16, align 8, !tbaa !9
  %306 = load i64, ptr %9, align 8, !tbaa !9
  %307 = icmp sge i64 %305, %306
  br i1 %307, label %308, label %309

308:                                              ; preds = %304
  br label %342

309:                                              ; preds = %304
  %310 = load i64, ptr %16, align 8, !tbaa !9
  %311 = getelementptr inbounds [1001 x i64], ptr %13, i64 0, i64 %310
  %312 = load i64, ptr %311, align 8, !tbaa !9
  store i64 %312, ptr %8, align 8, !tbaa !9
  %313 = load i64, ptr %8, align 8, !tbaa !9
  %314 = icmp eq i64 %313, -1
  br i1 %314, label %315, label %316

315:                                              ; preds = %309
  br label %342

316:                                              ; preds = %309
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %317

317:                                              ; preds = %335, %316
  %318 = load i64, ptr %16, align 8, !tbaa !9
  %319 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %320 = icmp slt i64 %318, %319
  br i1 %320, label %321, label %338

321:                                              ; preds = %317
  %322 = load ptr, ptr @syn0, align 8, !tbaa !5
  %323 = load i64, ptr %16, align 8, !tbaa !9
  %324 = load i64, ptr %8, align 8, !tbaa !9
  %325 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %326 = mul nsw i64 %324, %325
  %327 = add nsw i64 %323, %326
  %328 = getelementptr inbounds float, ptr %322, i64 %327
  %329 = load float, ptr %328, align 4, !tbaa !15
  %330 = load ptr, ptr %24, align 8, !tbaa !5
  %331 = load i64, ptr %16, align 8, !tbaa !9
  %332 = getelementptr inbounds float, ptr %330, i64 %331
  %333 = load float, ptr %332, align 4, !tbaa !15
  %334 = fadd float %333, %329
  store float %334, ptr %332, align 4, !tbaa !15
  br label %335

335:                                              ; preds = %321
  %336 = load i64, ptr %16, align 8, !tbaa !9
  %337 = add nsw i64 %336, 1
  store i64 %337, ptr %16, align 8, !tbaa !9
  br label %317, !llvm.loop !22

338:                                              ; preds = %317
  %339 = load i64, ptr %6, align 8, !tbaa !9
  %340 = add nsw i64 %339, 1
  store i64 %340, ptr %6, align 8, !tbaa !9
  br label %341

341:                                              ; preds = %338, %289
  br label %342

342:                                              ; preds = %341, %315, %308, %303
  %343 = load i64, ptr %3, align 8, !tbaa !9
  %344 = add nsw i64 %343, 1
  store i64 %344, ptr %3, align 8, !tbaa !9
  br label %280, !llvm.loop !23

345:                                              ; preds = %280
  %346 = load i64, ptr %6, align 8, !tbaa !9
  %347 = icmp ne i64 %346, 0
  br i1 %347, label %348, label %699

348:                                              ; preds = %345
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %361, %348
  %350 = load i64, ptr %16, align 8, !tbaa !9
  %351 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %352 = icmp slt i64 %350, %351
  br i1 %352, label %353, label %364

353:                                              ; preds = %349
  %354 = load i64, ptr %6, align 8, !tbaa !9
  %355 = sitofp i64 %354 to float
  %356 = load ptr, ptr %24, align 8, !tbaa !5
  %357 = load i64, ptr %16, align 8, !tbaa !9
  %358 = getelementptr inbounds float, ptr %356, i64 %357
  %359 = load float, ptr %358, align 4, !tbaa !15
  %360 = fdiv float %359, %355
  store float %360, ptr %358, align 4, !tbaa !15
  br label %361

361:                                              ; preds = %353
  %362 = load i64, ptr %16, align 8, !tbaa !9
  %363 = add nsw i64 %362, 1
  store i64 %363, ptr %16, align 8, !tbaa !9
  br label %349, !llvm.loop !24

364:                                              ; preds = %349
  %365 = load i32, ptr @hs, align 4, !tbaa !11
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %489

367:                                              ; preds = %364
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %368

368:                                              ; preds = %485, %367
  %369 = load i64, ptr %5, align 8, !tbaa !9
  %370 = load ptr, ptr @vocab, align 8, !tbaa !5
  %371 = load i64, ptr %7, align 8, !tbaa !9
  %372 = getelementptr inbounds %struct.vocab_word, ptr %370, i64 %371
  %373 = getelementptr inbounds %struct.vocab_word, ptr %372, i32 0, i32 4
  %374 = load i8, ptr %373, align 8, !tbaa !25
  %375 = sext i8 %374 to i64
  %376 = icmp slt i64 %369, %375
  br i1 %376, label %377, label %488

377:                                              ; preds = %368
  store float 0.000000e+00, ptr %21, align 4, !tbaa !15
  %378 = load ptr, ptr @vocab, align 8, !tbaa !5
  %379 = load i64, ptr %7, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.vocab_word, ptr %378, i64 %379
  %381 = getelementptr inbounds %struct.vocab_word, ptr %380, i32 0, i32 1
  %382 = load ptr, ptr %381, align 8, !tbaa !26
  %383 = load i64, ptr %5, align 8, !tbaa !9
  %384 = getelementptr inbounds i32, ptr %382, i64 %383
  %385 = load i32, ptr %384, align 4, !tbaa !11
  %386 = sext i32 %385 to i64
  %387 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %388 = mul nsw i64 %386, %387
  store i64 %388, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %389

389:                                              ; preds = %406, %377
  %390 = load i64, ptr %16, align 8, !tbaa !9
  %391 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %392 = icmp slt i64 %390, %391
  br i1 %392, label %393, label %409

393:                                              ; preds = %389
  %394 = load ptr, ptr %24, align 8, !tbaa !5
  %395 = load i64, ptr %16, align 8, !tbaa !9
  %396 = getelementptr inbounds float, ptr %394, i64 %395
  %397 = load float, ptr %396, align 4, !tbaa !15
  %398 = load ptr, ptr @syn1, align 8, !tbaa !5
  %399 = load i64, ptr %16, align 8, !tbaa !9
  %400 = load i64, ptr %15, align 8, !tbaa !9
  %401 = add nsw i64 %399, %400
  %402 = getelementptr inbounds float, ptr %398, i64 %401
  %403 = load float, ptr %402, align 4, !tbaa !15
  %404 = load float, ptr %21, align 4, !tbaa !15
  %405 = call float @llvm.fmuladd.f32(float %397, float %403, float %404)
  store float %405, ptr %21, align 4, !tbaa !15
  br label %406

406:                                              ; preds = %393
  %407 = load i64, ptr %16, align 8, !tbaa !9
  %408 = add nsw i64 %407, 1
  store i64 %408, ptr %16, align 8, !tbaa !9
  br label %389, !llvm.loop !27

409:                                              ; preds = %389
  %410 = load float, ptr %21, align 4, !tbaa !15
  %411 = fcmp ole float %410, -6.000000e+00
  br i1 %411, label %412, label %413

412:                                              ; preds = %409
  br label %485

413:                                              ; preds = %409
  %414 = load float, ptr %21, align 4, !tbaa !15
  %415 = fcmp oge float %414, 6.000000e+00
  br i1 %415, label %416, label %417

416:                                              ; preds = %413
  br label %485

417:                                              ; preds = %413
  %418 = load ptr, ptr @expTable, align 8, !tbaa !5
  %419 = load float, ptr %21, align 4, !tbaa !15
  %420 = fadd float %419, 6.000000e+00
  %421 = fmul float %420, 8.300000e+01
  %422 = fptosi float %421 to i32
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds float, ptr %418, i64 %423
  %425 = load float, ptr %424, align 4, !tbaa !15
  store float %425, ptr %21, align 4, !tbaa !15
  br label %426

426:                                              ; preds = %417
  br label %427

427:                                              ; preds = %426
  %428 = load ptr, ptr @vocab, align 8, !tbaa !5
  %429 = load i64, ptr %7, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.vocab_word, ptr %428, i64 %429
  %431 = getelementptr inbounds %struct.vocab_word, ptr %430, i32 0, i32 3
  %432 = load ptr, ptr %431, align 8, !tbaa !28
  %433 = load i64, ptr %5, align 8, !tbaa !9
  %434 = getelementptr inbounds i8, ptr %432, i64 %433
  %435 = load i8, ptr %434, align 1, !tbaa !29
  %436 = sext i8 %435 to i32
  %437 = sub nsw i32 1, %436
  %438 = sitofp i32 %437 to float
  %439 = load float, ptr %21, align 4, !tbaa !15
  %440 = fsub float %438, %439
  %441 = load float, ptr @alpha, align 4, !tbaa !15
  %442 = fmul float %440, %441
  store float %442, ptr %22, align 4, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %443

443:                                              ; preds = %460, %427
  %444 = load i64, ptr %16, align 8, !tbaa !9
  %445 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %446 = icmp slt i64 %444, %445
  br i1 %446, label %447, label %463

447:                                              ; preds = %443
  %448 = load float, ptr %22, align 4, !tbaa !15
  %449 = load ptr, ptr @syn1, align 8, !tbaa !5
  %450 = load i64, ptr %16, align 8, !tbaa !9
  %451 = load i64, ptr %15, align 8, !tbaa !9
  %452 = add nsw i64 %450, %451
  %453 = getelementptr inbounds float, ptr %449, i64 %452
  %454 = load float, ptr %453, align 4, !tbaa !15
  %455 = load ptr, ptr %25, align 8, !tbaa !5
  %456 = load i64, ptr %16, align 8, !tbaa !9
  %457 = getelementptr inbounds float, ptr %455, i64 %456
  %458 = load float, ptr %457, align 4, !tbaa !15
  %459 = call float @llvm.fmuladd.f32(float %448, float %454, float %458)
  store float %459, ptr %457, align 4, !tbaa !15
  br label %460

460:                                              ; preds = %447
  %461 = load i64, ptr %16, align 8, !tbaa !9
  %462 = add nsw i64 %461, 1
  store i64 %462, ptr %16, align 8, !tbaa !9
  br label %443, !llvm.loop !30

463:                                              ; preds = %443
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %464

464:                                              ; preds = %481, %463
  %465 = load i64, ptr %16, align 8, !tbaa !9
  %466 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %467 = icmp slt i64 %465, %466
  br i1 %467, label %468, label %484

468:                                              ; preds = %464
  %469 = load float, ptr %22, align 4, !tbaa !15
  %470 = load ptr, ptr %24, align 8, !tbaa !5
  %471 = load i64, ptr %16, align 8, !tbaa !9
  %472 = getelementptr inbounds float, ptr %470, i64 %471
  %473 = load float, ptr %472, align 4, !tbaa !15
  %474 = load ptr, ptr @syn1, align 8, !tbaa !5
  %475 = load i64, ptr %16, align 8, !tbaa !9
  %476 = load i64, ptr %15, align 8, !tbaa !9
  %477 = add nsw i64 %475, %476
  %478 = getelementptr inbounds float, ptr %474, i64 %477
  %479 = load float, ptr %478, align 4, !tbaa !15
  %480 = call float @llvm.fmuladd.f32(float %469, float %473, float %479)
  store float %480, ptr %478, align 4, !tbaa !15
  br label %481

481:                                              ; preds = %468
  %482 = load i64, ptr %16, align 8, !tbaa !9
  %483 = add nsw i64 %482, 1
  store i64 %483, ptr %16, align 8, !tbaa !9
  br label %464, !llvm.loop !31

484:                                              ; preds = %464
  br label %485

485:                                              ; preds = %484, %416, %412
  %486 = load i64, ptr %5, align 8, !tbaa !9
  %487 = add nsw i64 %486, 1
  store i64 %487, ptr %5, align 8, !tbaa !9
  br label %368, !llvm.loop !32

488:                                              ; preds = %368
  br label %489

489:                                              ; preds = %488, %364
  %490 = load i32, ptr @negative, align 4, !tbaa !11
  %491 = icmp sgt i32 %490, 0
  br i1 %491, label %492, label %633

492:                                              ; preds = %489
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %493

493:                                              ; preds = %629, %492
  %494 = load i64, ptr %5, align 8, !tbaa !9
  %495 = load i32, ptr @negative, align 4, !tbaa !11
  %496 = add nsw i32 %495, 1
  %497 = sext i32 %496 to i64
  %498 = icmp slt i64 %494, %497
  br i1 %498, label %499, label %632

499:                                              ; preds = %493
  %500 = load i64, ptr %5, align 8, !tbaa !9
  %501 = icmp eq i64 %500, 0
  br i1 %501, label %502, label %504

502:                                              ; preds = %499
  %503 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %503, ptr %17, align 8, !tbaa !9
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %529

504:                                              ; preds = %499
  %505 = load i64, ptr %20, align 8, !tbaa !9
  %506 = mul i64 %505, 25214903917
  %507 = add i64 %506, 11
  store i64 %507, ptr %20, align 8, !tbaa !9
  %508 = load ptr, ptr @table, align 8, !tbaa !5
  %509 = load i64, ptr %20, align 8, !tbaa !9
  %510 = lshr i64 %509, 16
  %511 = urem i64 %510, 100000000
  %512 = getelementptr inbounds i32, ptr %508, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !11
  %514 = sext i32 %513 to i64
  store i64 %514, ptr %17, align 8, !tbaa !9
  %515 = load i64, ptr %17, align 8, !tbaa !9
  %516 = icmp eq i64 %515, 0
  br i1 %516, label %517, label %523

517:                                              ; preds = %504
  %518 = load i64, ptr %20, align 8, !tbaa !9
  %519 = load i64, ptr @vocab_size, align 8, !tbaa !9
  %520 = sub nsw i64 %519, 1
  %521 = urem i64 %518, %520
  %522 = add i64 %521, 1
  store i64 %522, ptr %17, align 8, !tbaa !9
  br label %523

523:                                              ; preds = %517, %504
  %524 = load i64, ptr %17, align 8, !tbaa !9
  %525 = load i64, ptr %7, align 8, !tbaa !9
  %526 = icmp eq i64 %524, %525
  br i1 %526, label %527, label %528

527:                                              ; preds = %523
  br label %629

528:                                              ; preds = %523
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %529

529:                                              ; preds = %528, %502
  %530 = load i64, ptr %17, align 8, !tbaa !9
  %531 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %532 = mul nsw i64 %530, %531
  store i64 %532, ptr %15, align 8, !tbaa !9
  store float 0.000000e+00, ptr %21, align 4, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %533

533:                                              ; preds = %550, %529
  %534 = load i64, ptr %16, align 8, !tbaa !9
  %535 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %536 = icmp slt i64 %534, %535
  br i1 %536, label %537, label %553

537:                                              ; preds = %533
  %538 = load ptr, ptr %24, align 8, !tbaa !5
  %539 = load i64, ptr %16, align 8, !tbaa !9
  %540 = getelementptr inbounds float, ptr %538, i64 %539
  %541 = load float, ptr %540, align 4, !tbaa !15
  %542 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %543 = load i64, ptr %16, align 8, !tbaa !9
  %544 = load i64, ptr %15, align 8, !tbaa !9
  %545 = add nsw i64 %543, %544
  %546 = getelementptr inbounds float, ptr %542, i64 %545
  %547 = load float, ptr %546, align 4, !tbaa !15
  %548 = load float, ptr %21, align 4, !tbaa !15
  %549 = call float @llvm.fmuladd.f32(float %541, float %547, float %548)
  store float %549, ptr %21, align 4, !tbaa !15
  br label %550

550:                                              ; preds = %537
  %551 = load i64, ptr %16, align 8, !tbaa !9
  %552 = add nsw i64 %551, 1
  store i64 %552, ptr %16, align 8, !tbaa !9
  br label %533, !llvm.loop !33

553:                                              ; preds = %533
  %554 = load float, ptr %21, align 4, !tbaa !15
  %555 = fcmp ogt float %554, 6.000000e+00
  br i1 %555, label %556, label %562

556:                                              ; preds = %553
  %557 = load i64, ptr %18, align 8, !tbaa !9
  %558 = sub nsw i64 %557, 1
  %559 = sitofp i64 %558 to float
  %560 = load float, ptr @alpha, align 4, !tbaa !15
  %561 = fmul float %559, %560
  store float %561, ptr %22, align 4, !tbaa !15
  br label %586

562:                                              ; preds = %553
  %563 = load float, ptr %21, align 4, !tbaa !15
  %564 = fcmp olt float %563, -6.000000e+00
  br i1 %564, label %565, label %571

565:                                              ; preds = %562
  %566 = load i64, ptr %18, align 8, !tbaa !9
  %567 = sub nsw i64 %566, 0
  %568 = sitofp i64 %567 to float
  %569 = load float, ptr @alpha, align 4, !tbaa !15
  %570 = fmul float %568, %569
  store float %570, ptr %22, align 4, !tbaa !15
  br label %585

571:                                              ; preds = %562
  %572 = load i64, ptr %18, align 8, !tbaa !9
  %573 = sitofp i64 %572 to float
  %574 = load ptr, ptr @expTable, align 8, !tbaa !5
  %575 = load float, ptr %21, align 4, !tbaa !15
  %576 = fadd float %575, 6.000000e+00
  %577 = fmul float %576, 8.300000e+01
  %578 = fptosi float %577 to i32
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds float, ptr %574, i64 %579
  %581 = load float, ptr %580, align 4, !tbaa !15
  %582 = fsub float %573, %581
  %583 = load float, ptr @alpha, align 4, !tbaa !15
  %584 = fmul float %582, %583
  store float %584, ptr %22, align 4, !tbaa !15
  br label %585

585:                                              ; preds = %571, %565
  br label %586

586:                                              ; preds = %585, %556
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %587

587:                                              ; preds = %604, %586
  %588 = load i64, ptr %16, align 8, !tbaa !9
  %589 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %590 = icmp slt i64 %588, %589
  br i1 %590, label %591, label %607

591:                                              ; preds = %587
  %592 = load float, ptr %22, align 4, !tbaa !15
  %593 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %594 = load i64, ptr %16, align 8, !tbaa !9
  %595 = load i64, ptr %15, align 8, !tbaa !9
  %596 = add nsw i64 %594, %595
  %597 = getelementptr inbounds float, ptr %593, i64 %596
  %598 = load float, ptr %597, align 4, !tbaa !15
  %599 = load ptr, ptr %25, align 8, !tbaa !5
  %600 = load i64, ptr %16, align 8, !tbaa !9
  %601 = getelementptr inbounds float, ptr %599, i64 %600
  %602 = load float, ptr %601, align 4, !tbaa !15
  %603 = call float @llvm.fmuladd.f32(float %592, float %598, float %602)
  store float %603, ptr %601, align 4, !tbaa !15
  br label %604

604:                                              ; preds = %591
  %605 = load i64, ptr %16, align 8, !tbaa !9
  %606 = add nsw i64 %605, 1
  store i64 %606, ptr %16, align 8, !tbaa !9
  br label %587, !llvm.loop !34

607:                                              ; preds = %587
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %608

608:                                              ; preds = %625, %607
  %609 = load i64, ptr %16, align 8, !tbaa !9
  %610 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %611 = icmp slt i64 %609, %610
  br i1 %611, label %612, label %628

612:                                              ; preds = %608
  %613 = load float, ptr %22, align 4, !tbaa !15
  %614 = load ptr, ptr %24, align 8, !tbaa !5
  %615 = load i64, ptr %16, align 8, !tbaa !9
  %616 = getelementptr inbounds float, ptr %614, i64 %615
  %617 = load float, ptr %616, align 4, !tbaa !15
  %618 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %619 = load i64, ptr %16, align 8, !tbaa !9
  %620 = load i64, ptr %15, align 8, !tbaa !9
  %621 = add nsw i64 %619, %620
  %622 = getelementptr inbounds float, ptr %618, i64 %621
  %623 = load float, ptr %622, align 4, !tbaa !15
  %624 = call float @llvm.fmuladd.f32(float %613, float %617, float %623)
  store float %624, ptr %622, align 4, !tbaa !15
  br label %625

625:                                              ; preds = %612
  %626 = load i64, ptr %16, align 8, !tbaa !9
  %627 = add nsw i64 %626, 1
  store i64 %627, ptr %16, align 8, !tbaa !9
  br label %608, !llvm.loop !35

628:                                              ; preds = %608
  br label %629

629:                                              ; preds = %628, %527
  %630 = load i64, ptr %5, align 8, !tbaa !9
  %631 = add nsw i64 %630, 1
  store i64 %631, ptr %5, align 8, !tbaa !9
  br label %493, !llvm.loop !36

632:                                              ; preds = %493
  br label %633

633:                                              ; preds = %632, %489
  %634 = load i64, ptr %4, align 8, !tbaa !9
  store i64 %634, ptr %3, align 8, !tbaa !9
  br label %635

635:                                              ; preds = %695, %633
  %636 = load i64, ptr %3, align 8, !tbaa !9
  %637 = load i32, ptr @window, align 4, !tbaa !11
  %638 = mul nsw i32 %637, 2
  %639 = add nsw i32 %638, 1
  %640 = sext i32 %639 to i64
  %641 = load i64, ptr %4, align 8, !tbaa !9
  %642 = sub nsw i64 %640, %641
  %643 = icmp slt i64 %636, %642
  br i1 %643, label %644, label %698

644:                                              ; preds = %635
  %645 = load i64, ptr %3, align 8, !tbaa !9
  %646 = load i32, ptr @window, align 4, !tbaa !11
  %647 = sext i32 %646 to i64
  %648 = icmp ne i64 %645, %647
  br i1 %648, label %649, label %694

649:                                              ; preds = %644
  %650 = load i64, ptr %10, align 8, !tbaa !9
  %651 = load i32, ptr @window, align 4, !tbaa !11
  %652 = sext i32 %651 to i64
  %653 = sub nsw i64 %650, %652
  %654 = load i64, ptr %3, align 8, !tbaa !9
  %655 = add nsw i64 %653, %654
  store i64 %655, ptr %16, align 8, !tbaa !9
  %656 = load i64, ptr %16, align 8, !tbaa !9
  %657 = icmp slt i64 %656, 0
  br i1 %657, label %658, label %659

658:                                              ; preds = %649
  br label %695

659:                                              ; preds = %649
  %660 = load i64, ptr %16, align 8, !tbaa !9
  %661 = load i64, ptr %9, align 8, !tbaa !9
  %662 = icmp sge i64 %660, %661
  br i1 %662, label %663, label %664

663:                                              ; preds = %659
  br label %695

664:                                              ; preds = %659
  %665 = load i64, ptr %16, align 8, !tbaa !9
  %666 = getelementptr inbounds [1001 x i64], ptr %13, i64 0, i64 %665
  %667 = load i64, ptr %666, align 8, !tbaa !9
  store i64 %667, ptr %8, align 8, !tbaa !9
  %668 = load i64, ptr %8, align 8, !tbaa !9
  %669 = icmp eq i64 %668, -1
  br i1 %669, label %670, label %671

670:                                              ; preds = %664
  br label %695

671:                                              ; preds = %664
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %672

672:                                              ; preds = %690, %671
  %673 = load i64, ptr %16, align 8, !tbaa !9
  %674 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %675 = icmp slt i64 %673, %674
  br i1 %675, label %676, label %693

676:                                              ; preds = %672
  %677 = load ptr, ptr %25, align 8, !tbaa !5
  %678 = load i64, ptr %16, align 8, !tbaa !9
  %679 = getelementptr inbounds float, ptr %677, i64 %678
  %680 = load float, ptr %679, align 4, !tbaa !15
  %681 = load ptr, ptr @syn0, align 8, !tbaa !5
  %682 = load i64, ptr %16, align 8, !tbaa !9
  %683 = load i64, ptr %8, align 8, !tbaa !9
  %684 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %685 = mul nsw i64 %683, %684
  %686 = add nsw i64 %682, %685
  %687 = getelementptr inbounds float, ptr %681, i64 %686
  %688 = load float, ptr %687, align 4, !tbaa !15
  %689 = fadd float %688, %680
  store float %689, ptr %687, align 4, !tbaa !15
  br label %690

690:                                              ; preds = %676
  %691 = load i64, ptr %16, align 8, !tbaa !9
  %692 = add nsw i64 %691, 1
  store i64 %692, ptr %16, align 8, !tbaa !9
  br label %672, !llvm.loop !37

693:                                              ; preds = %672
  br label %694

694:                                              ; preds = %693, %644
  br label %695

695:                                              ; preds = %694, %670, %663, %658
  %696 = load i64, ptr %3, align 8, !tbaa !9
  %697 = add nsw i64 %696, 1
  store i64 %697, ptr %3, align 8, !tbaa !9
  br label %635, !llvm.loop !38

698:                                              ; preds = %635
  br label %699

699:                                              ; preds = %698, %345
  br label %1056

700:                                              ; preds = %268
  %701 = load i64, ptr %4, align 8, !tbaa !9
  store i64 %701, ptr %3, align 8, !tbaa !9
  br label %702

702:                                              ; preds = %1052, %700
  %703 = load i64, ptr %3, align 8, !tbaa !9
  %704 = load i32, ptr @window, align 4, !tbaa !11
  %705 = mul nsw i32 %704, 2
  %706 = add nsw i32 %705, 1
  %707 = sext i32 %706 to i64
  %708 = load i64, ptr %4, align 8, !tbaa !9
  %709 = sub nsw i64 %707, %708
  %710 = icmp slt i64 %703, %709
  br i1 %710, label %711, label %1055

711:                                              ; preds = %702
  %712 = load i64, ptr %3, align 8, !tbaa !9
  %713 = load i32, ptr @window, align 4, !tbaa !11
  %714 = sext i32 %713 to i64
  %715 = icmp ne i64 %712, %714
  br i1 %715, label %716, label %1051

716:                                              ; preds = %711
  %717 = load i64, ptr %10, align 8, !tbaa !9
  %718 = load i32, ptr @window, align 4, !tbaa !11
  %719 = sext i32 %718 to i64
  %720 = sub nsw i64 %717, %719
  %721 = load i64, ptr %3, align 8, !tbaa !9
  %722 = add nsw i64 %720, %721
  store i64 %722, ptr %16, align 8, !tbaa !9
  %723 = load i64, ptr %16, align 8, !tbaa !9
  %724 = icmp slt i64 %723, 0
  br i1 %724, label %725, label %726

725:                                              ; preds = %716
  br label %1052

726:                                              ; preds = %716
  %727 = load i64, ptr %16, align 8, !tbaa !9
  %728 = load i64, ptr %9, align 8, !tbaa !9
  %729 = icmp sge i64 %727, %728
  br i1 %729, label %730, label %731

730:                                              ; preds = %726
  br label %1052

731:                                              ; preds = %726
  %732 = load i64, ptr %16, align 8, !tbaa !9
  %733 = getelementptr inbounds [1001 x i64], ptr %13, i64 0, i64 %732
  %734 = load i64, ptr %733, align 8, !tbaa !9
  store i64 %734, ptr %8, align 8, !tbaa !9
  %735 = load i64, ptr %8, align 8, !tbaa !9
  %736 = icmp eq i64 %735, -1
  br i1 %736, label %737, label %738

737:                                              ; preds = %731
  br label %1052

738:                                              ; preds = %731
  %739 = load i64, ptr %8, align 8, !tbaa !9
  %740 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %741 = mul nsw i64 %739, %740
  store i64 %741, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %742

742:                                              ; preds = %750, %738
  %743 = load i64, ptr %16, align 8, !tbaa !9
  %744 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %745 = icmp slt i64 %743, %744
  br i1 %745, label %746, label %753

746:                                              ; preds = %742
  %747 = load ptr, ptr %25, align 8, !tbaa !5
  %748 = load i64, ptr %16, align 8, !tbaa !9
  %749 = getelementptr inbounds float, ptr %747, i64 %748
  store float 0.000000e+00, ptr %749, align 4, !tbaa !15
  br label %750

750:                                              ; preds = %746
  %751 = load i64, ptr %16, align 8, !tbaa !9
  %752 = add nsw i64 %751, 1
  store i64 %752, ptr %16, align 8, !tbaa !9
  br label %742, !llvm.loop !39

753:                                              ; preds = %742
  %754 = load i32, ptr @hs, align 4, !tbaa !11
  %755 = icmp ne i32 %754, 0
  br i1 %755, label %756, label %882

756:                                              ; preds = %753
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %757

757:                                              ; preds = %878, %756
  %758 = load i64, ptr %5, align 8, !tbaa !9
  %759 = load ptr, ptr @vocab, align 8, !tbaa !5
  %760 = load i64, ptr %7, align 8, !tbaa !9
  %761 = getelementptr inbounds %struct.vocab_word, ptr %759, i64 %760
  %762 = getelementptr inbounds %struct.vocab_word, ptr %761, i32 0, i32 4
  %763 = load i8, ptr %762, align 8, !tbaa !25
  %764 = sext i8 %763 to i64
  %765 = icmp slt i64 %758, %764
  br i1 %765, label %766, label %881

766:                                              ; preds = %757
  store float 0.000000e+00, ptr %21, align 4, !tbaa !15
  %767 = load ptr, ptr @vocab, align 8, !tbaa !5
  %768 = load i64, ptr %7, align 8, !tbaa !9
  %769 = getelementptr inbounds %struct.vocab_word, ptr %767, i64 %768
  %770 = getelementptr inbounds %struct.vocab_word, ptr %769, i32 0, i32 1
  %771 = load ptr, ptr %770, align 8, !tbaa !26
  %772 = load i64, ptr %5, align 8, !tbaa !9
  %773 = getelementptr inbounds i32, ptr %771, i64 %772
  %774 = load i32, ptr %773, align 4, !tbaa !11
  %775 = sext i32 %774 to i64
  %776 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %777 = mul nsw i64 %775, %776
  store i64 %777, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %778

778:                                              ; preds = %797, %766
  %779 = load i64, ptr %16, align 8, !tbaa !9
  %780 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %781 = icmp slt i64 %779, %780
  br i1 %781, label %782, label %800

782:                                              ; preds = %778
  %783 = load ptr, ptr @syn0, align 8, !tbaa !5
  %784 = load i64, ptr %16, align 8, !tbaa !9
  %785 = load i64, ptr %14, align 8, !tbaa !9
  %786 = add nsw i64 %784, %785
  %787 = getelementptr inbounds float, ptr %783, i64 %786
  %788 = load float, ptr %787, align 4, !tbaa !15
  %789 = load ptr, ptr @syn1, align 8, !tbaa !5
  %790 = load i64, ptr %16, align 8, !tbaa !9
  %791 = load i64, ptr %15, align 8, !tbaa !9
  %792 = add nsw i64 %790, %791
  %793 = getelementptr inbounds float, ptr %789, i64 %792
  %794 = load float, ptr %793, align 4, !tbaa !15
  %795 = load float, ptr %21, align 4, !tbaa !15
  %796 = call float @llvm.fmuladd.f32(float %788, float %794, float %795)
  store float %796, ptr %21, align 4, !tbaa !15
  br label %797

797:                                              ; preds = %782
  %798 = load i64, ptr %16, align 8, !tbaa !9
  %799 = add nsw i64 %798, 1
  store i64 %799, ptr %16, align 8, !tbaa !9
  br label %778, !llvm.loop !40

800:                                              ; preds = %778
  %801 = load float, ptr %21, align 4, !tbaa !15
  %802 = fcmp ole float %801, -6.000000e+00
  br i1 %802, label %803, label %804

803:                                              ; preds = %800
  br label %878

804:                                              ; preds = %800
  %805 = load float, ptr %21, align 4, !tbaa !15
  %806 = fcmp oge float %805, 6.000000e+00
  br i1 %806, label %807, label %808

807:                                              ; preds = %804
  br label %878

808:                                              ; preds = %804
  %809 = load ptr, ptr @expTable, align 8, !tbaa !5
  %810 = load float, ptr %21, align 4, !tbaa !15
  %811 = fadd float %810, 6.000000e+00
  %812 = fmul float %811, 8.300000e+01
  %813 = fptosi float %812 to i32
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds float, ptr %809, i64 %814
  %816 = load float, ptr %815, align 4, !tbaa !15
  store float %816, ptr %21, align 4, !tbaa !15
  br label %817

817:                                              ; preds = %808
  br label %818

818:                                              ; preds = %817
  %819 = load ptr, ptr @vocab, align 8, !tbaa !5
  %820 = load i64, ptr %7, align 8, !tbaa !9
  %821 = getelementptr inbounds %struct.vocab_word, ptr %819, i64 %820
  %822 = getelementptr inbounds %struct.vocab_word, ptr %821, i32 0, i32 3
  %823 = load ptr, ptr %822, align 8, !tbaa !28
  %824 = load i64, ptr %5, align 8, !tbaa !9
  %825 = getelementptr inbounds i8, ptr %823, i64 %824
  %826 = load i8, ptr %825, align 1, !tbaa !29
  %827 = sext i8 %826 to i32
  %828 = sub nsw i32 1, %827
  %829 = sitofp i32 %828 to float
  %830 = load float, ptr %21, align 4, !tbaa !15
  %831 = fsub float %829, %830
  %832 = load float, ptr @alpha, align 4, !tbaa !15
  %833 = fmul float %831, %832
  store float %833, ptr %22, align 4, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %834

834:                                              ; preds = %851, %818
  %835 = load i64, ptr %16, align 8, !tbaa !9
  %836 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %837 = icmp slt i64 %835, %836
  br i1 %837, label %838, label %854

838:                                              ; preds = %834
  %839 = load float, ptr %22, align 4, !tbaa !15
  %840 = load ptr, ptr @syn1, align 8, !tbaa !5
  %841 = load i64, ptr %16, align 8, !tbaa !9
  %842 = load i64, ptr %15, align 8, !tbaa !9
  %843 = add nsw i64 %841, %842
  %844 = getelementptr inbounds float, ptr %840, i64 %843
  %845 = load float, ptr %844, align 4, !tbaa !15
  %846 = load ptr, ptr %25, align 8, !tbaa !5
  %847 = load i64, ptr %16, align 8, !tbaa !9
  %848 = getelementptr inbounds float, ptr %846, i64 %847
  %849 = load float, ptr %848, align 4, !tbaa !15
  %850 = call float @llvm.fmuladd.f32(float %839, float %845, float %849)
  store float %850, ptr %848, align 4, !tbaa !15
  br label %851

851:                                              ; preds = %838
  %852 = load i64, ptr %16, align 8, !tbaa !9
  %853 = add nsw i64 %852, 1
  store i64 %853, ptr %16, align 8, !tbaa !9
  br label %834, !llvm.loop !41

854:                                              ; preds = %834
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %855

855:                                              ; preds = %874, %854
  %856 = load i64, ptr %16, align 8, !tbaa !9
  %857 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %858 = icmp slt i64 %856, %857
  br i1 %858, label %859, label %877

859:                                              ; preds = %855
  %860 = load float, ptr %22, align 4, !tbaa !15
  %861 = load ptr, ptr @syn0, align 8, !tbaa !5
  %862 = load i64, ptr %16, align 8, !tbaa !9
  %863 = load i64, ptr %14, align 8, !tbaa !9
  %864 = add nsw i64 %862, %863
  %865 = getelementptr inbounds float, ptr %861, i64 %864
  %866 = load float, ptr %865, align 4, !tbaa !15
  %867 = load ptr, ptr @syn1, align 8, !tbaa !5
  %868 = load i64, ptr %16, align 8, !tbaa !9
  %869 = load i64, ptr %15, align 8, !tbaa !9
  %870 = add nsw i64 %868, %869
  %871 = getelementptr inbounds float, ptr %867, i64 %870
  %872 = load float, ptr %871, align 4, !tbaa !15
  %873 = call float @llvm.fmuladd.f32(float %860, float %866, float %872)
  store float %873, ptr %871, align 4, !tbaa !15
  br label %874

874:                                              ; preds = %859
  %875 = load i64, ptr %16, align 8, !tbaa !9
  %876 = add nsw i64 %875, 1
  store i64 %876, ptr %16, align 8, !tbaa !9
  br label %855, !llvm.loop !42

877:                                              ; preds = %855
  br label %878

878:                                              ; preds = %877, %807, %803
  %879 = load i64, ptr %5, align 8, !tbaa !9
  %880 = add nsw i64 %879, 1
  store i64 %880, ptr %5, align 8, !tbaa !9
  br label %757, !llvm.loop !43

881:                                              ; preds = %757
  br label %882

882:                                              ; preds = %881, %753
  %883 = load i32, ptr @negative, align 4, !tbaa !11
  %884 = icmp sgt i32 %883, 0
  br i1 %884, label %885, label %1030

885:                                              ; preds = %882
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %886

886:                                              ; preds = %1026, %885
  %887 = load i64, ptr %5, align 8, !tbaa !9
  %888 = load i32, ptr @negative, align 4, !tbaa !11
  %889 = add nsw i32 %888, 1
  %890 = sext i32 %889 to i64
  %891 = icmp slt i64 %887, %890
  br i1 %891, label %892, label %1029

892:                                              ; preds = %886
  %893 = load i64, ptr %5, align 8, !tbaa !9
  %894 = icmp eq i64 %893, 0
  br i1 %894, label %895, label %897

895:                                              ; preds = %892
  %896 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %896, ptr %17, align 8, !tbaa !9
  store i64 1, ptr %18, align 8, !tbaa !9
  br label %922

897:                                              ; preds = %892
  %898 = load i64, ptr %20, align 8, !tbaa !9
  %899 = mul i64 %898, 25214903917
  %900 = add i64 %899, 11
  store i64 %900, ptr %20, align 8, !tbaa !9
  %901 = load ptr, ptr @table, align 8, !tbaa !5
  %902 = load i64, ptr %20, align 8, !tbaa !9
  %903 = lshr i64 %902, 16
  %904 = urem i64 %903, 100000000
  %905 = getelementptr inbounds i32, ptr %901, i64 %904
  %906 = load i32, ptr %905, align 4, !tbaa !11
  %907 = sext i32 %906 to i64
  store i64 %907, ptr %17, align 8, !tbaa !9
  %908 = load i64, ptr %17, align 8, !tbaa !9
  %909 = icmp eq i64 %908, 0
  br i1 %909, label %910, label %916

910:                                              ; preds = %897
  %911 = load i64, ptr %20, align 8, !tbaa !9
  %912 = load i64, ptr @vocab_size, align 8, !tbaa !9
  %913 = sub nsw i64 %912, 1
  %914 = urem i64 %911, %913
  %915 = add i64 %914, 1
  store i64 %915, ptr %17, align 8, !tbaa !9
  br label %916

916:                                              ; preds = %910, %897
  %917 = load i64, ptr %17, align 8, !tbaa !9
  %918 = load i64, ptr %7, align 8, !tbaa !9
  %919 = icmp eq i64 %917, %918
  br i1 %919, label %920, label %921

920:                                              ; preds = %916
  br label %1026

921:                                              ; preds = %916
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %922

922:                                              ; preds = %921, %895
  %923 = load i64, ptr %17, align 8, !tbaa !9
  %924 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %925 = mul nsw i64 %923, %924
  store i64 %925, ptr %15, align 8, !tbaa !9
  store float 0.000000e+00, ptr %21, align 4, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %926

926:                                              ; preds = %945, %922
  %927 = load i64, ptr %16, align 8, !tbaa !9
  %928 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %929 = icmp slt i64 %927, %928
  br i1 %929, label %930, label %948

930:                                              ; preds = %926
  %931 = load ptr, ptr @syn0, align 8, !tbaa !5
  %932 = load i64, ptr %16, align 8, !tbaa !9
  %933 = load i64, ptr %14, align 8, !tbaa !9
  %934 = add nsw i64 %932, %933
  %935 = getelementptr inbounds float, ptr %931, i64 %934
  %936 = load float, ptr %935, align 4, !tbaa !15
  %937 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %938 = load i64, ptr %16, align 8, !tbaa !9
  %939 = load i64, ptr %15, align 8, !tbaa !9
  %940 = add nsw i64 %938, %939
  %941 = getelementptr inbounds float, ptr %937, i64 %940
  %942 = load float, ptr %941, align 4, !tbaa !15
  %943 = load float, ptr %21, align 4, !tbaa !15
  %944 = call float @llvm.fmuladd.f32(float %936, float %942, float %943)
  store float %944, ptr %21, align 4, !tbaa !15
  br label %945

945:                                              ; preds = %930
  %946 = load i64, ptr %16, align 8, !tbaa !9
  %947 = add nsw i64 %946, 1
  store i64 %947, ptr %16, align 8, !tbaa !9
  br label %926, !llvm.loop !44

948:                                              ; preds = %926
  %949 = load float, ptr %21, align 4, !tbaa !15
  %950 = fcmp ogt float %949, 6.000000e+00
  br i1 %950, label %951, label %957

951:                                              ; preds = %948
  %952 = load i64, ptr %18, align 8, !tbaa !9
  %953 = sub nsw i64 %952, 1
  %954 = sitofp i64 %953 to float
  %955 = load float, ptr @alpha, align 4, !tbaa !15
  %956 = fmul float %954, %955
  store float %956, ptr %22, align 4, !tbaa !15
  br label %981

957:                                              ; preds = %948
  %958 = load float, ptr %21, align 4, !tbaa !15
  %959 = fcmp olt float %958, -6.000000e+00
  br i1 %959, label %960, label %966

960:                                              ; preds = %957
  %961 = load i64, ptr %18, align 8, !tbaa !9
  %962 = sub nsw i64 %961, 0
  %963 = sitofp i64 %962 to float
  %964 = load float, ptr @alpha, align 4, !tbaa !15
  %965 = fmul float %963, %964
  store float %965, ptr %22, align 4, !tbaa !15
  br label %980

966:                                              ; preds = %957
  %967 = load i64, ptr %18, align 8, !tbaa !9
  %968 = sitofp i64 %967 to float
  %969 = load ptr, ptr @expTable, align 8, !tbaa !5
  %970 = load float, ptr %21, align 4, !tbaa !15
  %971 = fadd float %970, 6.000000e+00
  %972 = fmul float %971, 8.300000e+01
  %973 = fptosi float %972 to i32
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds float, ptr %969, i64 %974
  %976 = load float, ptr %975, align 4, !tbaa !15
  %977 = fsub float %968, %976
  %978 = load float, ptr @alpha, align 4, !tbaa !15
  %979 = fmul float %977, %978
  store float %979, ptr %22, align 4, !tbaa !15
  br label %980

980:                                              ; preds = %966, %960
  br label %981

981:                                              ; preds = %980, %951
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %982

982:                                              ; preds = %999, %981
  %983 = load i64, ptr %16, align 8, !tbaa !9
  %984 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %985 = icmp slt i64 %983, %984
  br i1 %985, label %986, label %1002

986:                                              ; preds = %982
  %987 = load float, ptr %22, align 4, !tbaa !15
  %988 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %989 = load i64, ptr %16, align 8, !tbaa !9
  %990 = load i64, ptr %15, align 8, !tbaa !9
  %991 = add nsw i64 %989, %990
  %992 = getelementptr inbounds float, ptr %988, i64 %991
  %993 = load float, ptr %992, align 4, !tbaa !15
  %994 = load ptr, ptr %25, align 8, !tbaa !5
  %995 = load i64, ptr %16, align 8, !tbaa !9
  %996 = getelementptr inbounds float, ptr %994, i64 %995
  %997 = load float, ptr %996, align 4, !tbaa !15
  %998 = call float @llvm.fmuladd.f32(float %987, float %993, float %997)
  store float %998, ptr %996, align 4, !tbaa !15
  br label %999

999:                                              ; preds = %986
  %1000 = load i64, ptr %16, align 8, !tbaa !9
  %1001 = add nsw i64 %1000, 1
  store i64 %1001, ptr %16, align 8, !tbaa !9
  br label %982, !llvm.loop !45

1002:                                             ; preds = %982
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %1003

1003:                                             ; preds = %1022, %1002
  %1004 = load i64, ptr %16, align 8, !tbaa !9
  %1005 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %1006 = icmp slt i64 %1004, %1005
  br i1 %1006, label %1007, label %1025

1007:                                             ; preds = %1003
  %1008 = load float, ptr %22, align 4, !tbaa !15
  %1009 = load ptr, ptr @syn0, align 8, !tbaa !5
  %1010 = load i64, ptr %16, align 8, !tbaa !9
  %1011 = load i64, ptr %14, align 8, !tbaa !9
  %1012 = add nsw i64 %1010, %1011
  %1013 = getelementptr inbounds float, ptr %1009, i64 %1012
  %1014 = load float, ptr %1013, align 4, !tbaa !15
  %1015 = load ptr, ptr @syn1neg, align 8, !tbaa !5
  %1016 = load i64, ptr %16, align 8, !tbaa !9
  %1017 = load i64, ptr %15, align 8, !tbaa !9
  %1018 = add nsw i64 %1016, %1017
  %1019 = getelementptr inbounds float, ptr %1015, i64 %1018
  %1020 = load float, ptr %1019, align 4, !tbaa !15
  %1021 = call float @llvm.fmuladd.f32(float %1008, float %1014, float %1020)
  store float %1021, ptr %1019, align 4, !tbaa !15
  br label %1022

1022:                                             ; preds = %1007
  %1023 = load i64, ptr %16, align 8, !tbaa !9
  %1024 = add nsw i64 %1023, 1
  store i64 %1024, ptr %16, align 8, !tbaa !9
  br label %1003, !llvm.loop !46

1025:                                             ; preds = %1003
  br label %1026

1026:                                             ; preds = %1025, %920
  %1027 = load i64, ptr %5, align 8, !tbaa !9
  %1028 = add nsw i64 %1027, 1
  store i64 %1028, ptr %5, align 8, !tbaa !9
  br label %886, !llvm.loop !47

1029:                                             ; preds = %886
  br label %1030

1030:                                             ; preds = %1029, %882
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %1031

1031:                                             ; preds = %1047, %1030
  %1032 = load i64, ptr %16, align 8, !tbaa !9
  %1033 = load i64, ptr @layer1_size, align 8, !tbaa !9
  %1034 = icmp slt i64 %1032, %1033
  br i1 %1034, label %1035, label %1050

1035:                                             ; preds = %1031
  %1036 = load ptr, ptr %25, align 8, !tbaa !5
  %1037 = load i64, ptr %16, align 8, !tbaa !9
  %1038 = getelementptr inbounds float, ptr %1036, i64 %1037
  %1039 = load float, ptr %1038, align 4, !tbaa !15
  %1040 = load ptr, ptr @syn0, align 8, !tbaa !5
  %1041 = load i64, ptr %16, align 8, !tbaa !9
  %1042 = load i64, ptr %14, align 8, !tbaa !9
  %1043 = add nsw i64 %1041, %1042
  %1044 = getelementptr inbounds float, ptr %1040, i64 %1043
  %1045 = load float, ptr %1044, align 4, !tbaa !15
  %1046 = fadd float %1045, %1039
  store float %1046, ptr %1044, align 4, !tbaa !15
  br label %1047

1047:                                             ; preds = %1035
  %1048 = load i64, ptr %16, align 8, !tbaa !9
  %1049 = add nsw i64 %1048, 1
  store i64 %1049, ptr %16, align 8, !tbaa !9
  br label %1031, !llvm.loop !48

1050:                                             ; preds = %1031
  br label %1051

1051:                                             ; preds = %1050, %711
  br label %1052

1052:                                             ; preds = %1051, %737, %730, %725
  %1053 = load i64, ptr %3, align 8, !tbaa !9
  %1054 = add nsw i64 %1053, 1
  store i64 %1054, ptr %3, align 8, !tbaa !9
  br label %702, !llvm.loop !49

1055:                                             ; preds = %702
  br label %1056

1056:                                             ; preds = %1055, %699
  %1057 = load i64, ptr %10, align 8, !tbaa !9
  %1058 = add nsw i64 %1057, 1
  store i64 %1058, ptr %10, align 8, !tbaa !9
  %1059 = load i64, ptr %10, align 8, !tbaa !9
  %1060 = load i64, ptr %9, align 8, !tbaa !9
  %1061 = icmp sge i64 %1059, %1060
  br i1 %1061, label %1062, label %1063

1062:                                             ; preds = %1056
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %46

1063:                                             ; preds = %1056
  br label %46

1064:                                             ; preds = %226, %99
  %1065 = load ptr, ptr %26, align 8, !tbaa !5
  %1066 = call i32 @fclose(ptr noundef %1065)
  %1067 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %1067) #7
  %1068 = load ptr, ptr %25, align 8, !tbaa !5
  call void @free(ptr noundef %1068) #7
  call void @pthread_exit(ptr noundef null) #9
  unreachable

1069:                                             ; preds = %191
  unreachable
}

; Function Attrs: nounwind
declare i64 @clock() #1

; Function Attrs: nounwind
declare double @sqrt(double noundef) #1

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

; Function Attrs: noreturn
declare void @pthread_exit(ptr noundef) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"float", !7, i64 0}
!17 = !{!18, !10, i64 0}
!18 = !{!"vocab_word", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !7, i64 32}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = !{!18, !7, i64 32}
!26 = !{!18, !6, i64 8}
!27 = distinct !{!27, !20}
!28 = !{!18, !6, i64 24}
!29 = !{!7, !7, i64 0}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = distinct !{!49, !20}


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

%struct.vocab_word = type { i64, ptr, ptr, ptr, i8 }

@cbow = external dso_local local_unnamed_addr global i32, align 4
@debug_mode = external dso_local local_unnamed_addr global i32, align 4
@window = external dso_local local_unnamed_addr global i32, align 4
@num_threads = external dso_local local_unnamed_addr global i32, align 4
@vocab_size = external dso_local local_unnamed_addr global i64, align 8
@layer1_size = external dso_local local_unnamed_addr global i64, align 8
@train_words = external dso_local local_unnamed_addr global i64, align 8
@word_count_actual = external dso_local local_unnamed_addr global i64, align 8
@iter = external dso_local local_unnamed_addr global i64, align 8
@file_size = external dso_local local_unnamed_addr global i64, align 8
@alpha = external dso_local local_unnamed_addr global float, align 4
@sample = external dso_local local_unnamed_addr global float, align 4
@hs = external dso_local local_unnamed_addr global i32, align 4
@negative = external dso_local local_unnamed_addr global i32, align 4
@table = external dso_local local_unnamed_addr global ptr, align 8
@vocab = external dso_local local_unnamed_addr global ptr, align 8
@stdout = external local_unnamed_addr global ptr, align 8
@train_file = external dso_local global [100 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@syn0 = external dso_local local_unnamed_addr global ptr, align 8
@syn1 = external dso_local local_unnamed_addr global ptr, align 8
@syn1neg = external dso_local local_unnamed_addr global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [57 x i8], align 1
@start = external dso_local local_unnamed_addr global i64, align 8
@starting_alpha = external dso_local local_unnamed_addr global float, align 4
@expTable = external dso_local local_unnamed_addr global ptr, align 8

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ReadWordIndex(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #3

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

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

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #1

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @fseek(ptr nocapture noundef, i64 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: noreturn nounwind uwtable
define dso_local noalias noundef nonnull ptr @TrainModelThread(ptr noundef %0) local_unnamed_addr #5 {
  %2 = alloca [1001 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 8008, ptr nonnull %2) #12
  %3 = load i64, ptr @iter, align 8, !tbaa !5
  %4 = ptrtoint ptr %0 to i64
  %5 = load i64, ptr @layer1_size, align 8, !tbaa !5
  %6 = tail call noalias ptr @calloc(i64 noundef %5, i64 noundef 4) #13
  %7 = tail call noalias ptr @calloc(i64 noundef %5, i64 noundef 4) #13
  %8 = tail call noalias ptr @fopen(ptr noundef nonnull @train_file, ptr noundef nonnull @.str.1)
  br label %.outer375

.outer375:                                        ; preds = %121, %1
  %.0308.ph = phi i64 [ 0, %1 ], [ %.1309, %121 ]
  %.0275.ph = phi i64 [ %3, %1 ], [ %125, %121 ]
  %.0271.ph = phi i64 [ %4, %1 ], [ %.4, %121 ]
  %9 = load i64, ptr @file_size, align 8, !tbaa !5
  %10 = load i32, ptr @num_threads, align 4, !tbaa !9
  %11 = sext i32 %10 to i64
  %12 = sdiv i64 %9, %11
  %13 = mul nsw i64 %12, %4
  %14 = tail call i32 @fseek(ptr noundef %8, i64 noundef %13, i32 noundef 0)
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.outer375
  %.0308 = phi i64 [ %.0308.ph, %.outer375 ], [ %.0308.be, %.backedge.backedge ]
  %.0304 = phi i64 [ 0, %.outer375 ], [ %.3307, %.backedge.backedge ]
  %.0302 = phi i64 [ 0, %.outer375 ], [ %.1303, %.backedge.backedge ]
  %.0298 = phi i64 [ 0, %.outer375 ], [ %.0298.be, %.backedge.backedge ]
  %.0271 = phi i64 [ %.0271.ph, %.outer375 ], [ %.0271.be, %.backedge.backedge ]
  %15 = sub nsw i64 %.0304, %.0302
  %16 = icmp sgt i64 %15, 10000
  br i1 %16, label %17, label %67

17:                                               ; preds = %.backedge
  %18 = load i64, ptr @word_count_actual, align 8, !tbaa !5
  %19 = add nsw i64 %18, %15
  store i64 %19, ptr @word_count_actual, align 8, !tbaa !5
  %20 = load i32, ptr @debug_mode, align 4, !tbaa !9
  %21 = icmp sgt i32 %20, 1
  br i1 %21, label %22, label %._crit_edge552

._crit_edge552:                                   ; preds = %17
  %.pre = load i64, ptr @iter, align 8, !tbaa !5
  %.pre553 = load i64, ptr @train_words, align 8, !tbaa !5
  %.pre554 = sitofp i64 %19 to float
  %.pre555 = mul nsw i64 %.pre553, %.pre
  %.pre557 = add nsw i64 %.pre555, 1
  %.pre559 = sitofp i64 %.pre557 to float
  %.pre561 = fdiv float %.pre554, %.pre559
  br label %57

22:                                               ; preds = %17
  %23 = tail call i64 @clock() #12
  %24 = load float, ptr @alpha, align 4, !tbaa !11
  %25 = fpext float %24 to double
  %26 = load i64, ptr @word_count_actual, align 8, !tbaa !5
  %27 = sitofp i64 %26 to float
  %28 = load i64, ptr @iter, align 8, !tbaa !5
  %29 = load i64, ptr @train_words, align 8, !tbaa !5
  %30 = mul nsw i64 %29, %28
  %31 = add nsw i64 %30, 1
  %32 = sitofp i64 %31 to float
  %33 = fdiv float %27, %32
  %34 = fmul float %33, 1.000000e+02
  %35 = fpext float %34 to double
  %36 = load i64, ptr @start, align 8, !tbaa !13
  %37 = add i64 %23, 1
  %38 = sub i64 %37, %36
  %39 = sitofp i64 %38 to float
  %40 = fdiv float %39, 1.000000e+06
  %41 = fmul float %40, 1.000000e+03
  %42 = fdiv float %27, %41
  %43 = fpext float %42 to double
  %44 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef 13, double noundef %25, double noundef %35, double noundef %43)
  %45 = load ptr, ptr @stdout, align 8, !tbaa !15
  %46 = tail call i32 @fflush(ptr noundef %45)
  %47 = load i64, ptr @word_count_actual, align 8, !tbaa !5
  %48 = sitofp i64 %47 to float
  %49 = load i64, ptr @iter, align 8, !tbaa !5
  %50 = load i64, ptr @train_words, align 8, !tbaa !5
  %51 = mul nsw i64 %50, %49
  %52 = add nsw i64 %51, 1
  %53 = sitofp i64 %52 to float
  %54 = fdiv float %48, %53
  %55 = fmul float %54, 1.000000e+02
  %56 = fcmp ogt float %55, 8.500000e+01
  br i1 %56, label %.loopexit376, label %57

57:                                               ; preds = %._crit_edge552, %22
  %.pre-phi562 = phi float [ %.pre561, %._crit_edge552 ], [ %54, %22 ]
  %58 = load float, ptr @starting_alpha, align 4, !tbaa !11
  %59 = fsub float 1.000000e+00, %.pre-phi562
  %60 = fmul float %58, %59
  store float %60, ptr @alpha, align 4, !tbaa !11
  %61 = fpext float %60 to double
  %62 = fpext float %58 to double
  %63 = fmul double %62, 1.000000e-04
  %64 = fcmp ogt double %63, %61
  br i1 %64, label %65, label %67

65:                                               ; preds = %57
  %66 = fptrunc double %63 to float
  store float %66, ptr @alpha, align 4, !tbaa !11
  br label %67

67:                                               ; preds = %57, %65, %.backedge
  %.1303 = phi i64 [ %.0304, %65 ], [ %.0304, %57 ], [ %.0302, %.backedge ]
  %68 = icmp eq i64 %.0298, 0
  br i1 %68, label %.outer.outer, label %.loopexit372

.outer.outer:                                     ; preds = %67, %111
  %.1305.ph.ph = phi i64 [ %76, %111 ], [ %.0304, %67 ]
  %.1299.ph.ph = phi i64 [ %113, %111 ], [ 0, %67 ]
  %.1272.ph.ph = phi i64 [ %.2273, %111 ], [ %.0271, %67 ]
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %81
  %.1305.ph = phi i64 [ %76, %81 ], [ %.1305.ph.ph, %.outer.outer ]
  %.1272.ph = phi i64 [ %106, %81 ], [ %.1272.ph.ph, %.outer.outer ]
  br label %69

69:                                               ; preds = %.outer, %72
  %70 = tail call i32 @ReadWordIndex(ptr noundef %8)
  %71 = tail call i32 @feof(ptr noundef %8) #12
  %.not = icmp eq i32 %71, 0
  br i1 %.not, label %72, label %.loopexit372

72:                                               ; preds = %69
  %73 = icmp eq i32 %70, -1
  br i1 %73, label %69, label %74

74:                                               ; preds = %72
  %75 = sext i32 %70 to i64
  %76 = add nsw i64 %.1305.ph, 1
  %77 = icmp eq i32 %70, 0
  br i1 %77, label %.loopexit372, label %78

78:                                               ; preds = %74
  %79 = load float, ptr @sample, align 4, !tbaa !11
  %80 = fcmp ogt float %79, 0.000000e+00
  br i1 %80, label %81, label %111

81:                                               ; preds = %78
  %82 = load ptr, ptr @vocab, align 8, !tbaa !15
  %83 = getelementptr inbounds %struct.vocab_word, ptr %82, i64 %75
  %84 = load i64, ptr %83, align 8, !tbaa !17
  %85 = sitofp i64 %84 to float
  %86 = load i64, ptr @train_words, align 8, !tbaa !5
  %87 = sitofp i64 %86 to float
  %88 = fmul float %79, %87
  %89 = fdiv float %85, %88
  %90 = fpext float %89 to double
  %91 = tail call double @sqrt(double noundef %90) #12
  %92 = fadd double %91, 1.000000e+00
  %93 = load float, ptr @sample, align 4, !tbaa !11
  %94 = load i64, ptr @train_words, align 8, !tbaa !5
  %95 = sitofp i64 %94 to float
  %96 = fmul float %93, %95
  %97 = fpext float %96 to double
  %98 = fmul double %92, %97
  %99 = load ptr, ptr @vocab, align 8, !tbaa !15
  %100 = getelementptr inbounds %struct.vocab_word, ptr %99, i64 %75
  %101 = load i64, ptr %100, align 8, !tbaa !17
  %102 = sitofp i64 %101 to double
  %103 = fdiv double %98, %102
  %104 = fptrunc double %103 to float
  %105 = mul i64 %.1272.ph, 25214903917
  %106 = add i64 %105, 11
  %107 = and i64 %106, 65535
  %108 = uitofp nneg i64 %107 to float
  %109 = fmul float %108, 0x3EF0000000000000
  %110 = fcmp ogt float %109, %104
  br i1 %110, label %.outer, label %111

111:                                              ; preds = %81, %78
  %.2273 = phi i64 [ %106, %81 ], [ %.1272.ph, %78 ]
  %112 = getelementptr inbounds [1001 x i64], ptr %2, i64 0, i64 %.1299.ph.ph
  store i64 %75, ptr %112, align 8, !tbaa !5
  %113 = add nuw nsw i64 %.1299.ph.ph, 1
  %exitcond = icmp eq i64 %113, 1000
  br i1 %exitcond, label %.loopexit372, label %.outer.outer

.loopexit372:                                     ; preds = %111, %74, %69, %67
  %.1309 = phi i64 [ %.0308, %67 ], [ 0, %69 ], [ 0, %74 ], [ 0, %111 ]
  %.3307 = phi i64 [ %.0304, %67 ], [ %.1305.ph, %69 ], [ %76, %74 ], [ %76, %111 ]
  %.3301 = phi i64 [ %.0298, %67 ], [ %.1299.ph.ph, %69 ], [ %.1299.ph.ph, %74 ], [ 1000, %111 ]
  %.4 = phi i64 [ %.0271, %67 ], [ %.1272.ph, %69 ], [ %.1272.ph, %74 ], [ %.2273, %111 ]
  %114 = tail call i32 @feof(ptr noundef %8) #12
  %.not331 = icmp eq i32 %114, 0
  br i1 %.not331, label %115, label %121

115:                                              ; preds = %.loopexit372
  %116 = load i64, ptr @train_words, align 8, !tbaa !5
  %117 = load i32, ptr @num_threads, align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = sdiv i64 %116, %118
  %120 = icmp sgt i64 %.3307, %119
  br i1 %120, label %121, label %127

121:                                              ; preds = %115, %.loopexit372
  %122 = sub i64 %.3307, %.1303
  %123 = load i64, ptr @word_count_actual, align 8, !tbaa !5
  %124 = add nsw i64 %122, %123
  store i64 %124, ptr @word_count_actual, align 8, !tbaa !5
  %125 = add nsw i64 %.0275.ph, -1
  %126 = icmp eq i64 %125, 0
  br i1 %126, label %.loopexit376, label %.outer375

127:                                              ; preds = %115
  %128 = getelementptr inbounds [1001 x i64], ptr %2, i64 0, i64 %.1309
  %129 = load i64, ptr %128, align 8, !tbaa !5
  %130 = icmp eq i64 %129, -1
  br i1 %130, label %.backedge.backedge, label %.preheader370

.backedge.backedge:                               ; preds = %127, %.loopexit361
  %.0308.be = phi i64 [ %.1309, %127 ], [ %629, %.loopexit361 ]
  %.0298.be = phi i64 [ %.3301, %127 ], [ %spec.store.select, %.loopexit361 ]
  %.0271.be = phi i64 [ %.4, %127 ], [ %.15, %.loopexit361 ]
  br label %.backedge

.preheader370:                                    ; preds = %127
  %131 = load i64, ptr @layer1_size, align 8, !tbaa !5
  %132 = icmp sgt i64 %131, 0
  br i1 %132, label %.lr.ph395.preheader, label %._crit_edge

.lr.ph395.preheader:                              ; preds = %.preheader370
  %133 = shl nuw i64 %131, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %6, i8 0, i64 %133, i1 false), !tbaa !11
  %134 = shl nuw i64 %131, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %7, i8 0, i64 %134, i1 false), !tbaa !11
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader370, %.lr.ph395.preheader
  %135 = mul i64 %.4, 25214903917
  %136 = add i64 %135, 11
  %137 = load i32, ptr @window, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = urem i64 %136, %138
  %140 = load i32, ptr @cbow, align 4, !tbaa !9
  %.not332 = icmp eq i32 %140, 0
  %141 = shl nsw i32 %137, 1
  %142 = or disjoint i32 %141, 1
  %143 = sext i32 %142 to i64
  %144 = sub nsw i64 %143, %139
  %145 = icmp slt i64 %139, %144
  br i1 %.not332, label %.preheader360, label %.preheader368

.preheader368:                                    ; preds = %._crit_edge
  br i1 %145, label %.lr.ph401, label %.loopexit361

.lr.ph401:                                        ; preds = %.preheader368
  %146 = sub nsw i64 %.1309, %138
  %147 = load ptr, ptr @syn0, align 8
  %min.iters.check788 = icmp ult i64 %131, 8
  %n.vec791 = and i64 %131, 9223372036854775800
  %cmp.n800 = icmp eq i64 %131, %n.vec791
  br label %164

.preheader360:                                    ; preds = %._crit_edge
  br i1 %145, label %.lr.ph510, label %.loopexit361

.lr.ph510:                                        ; preds = %.preheader360
  %148 = sub nsw i64 %.1309, %138
  %149 = load i32, ptr @hs, align 4
  %.not335 = icmp eq i32 %149, 0
  %150 = load ptr, ptr @vocab, align 8
  %151 = getelementptr inbounds %struct.vocab_word, ptr %150, i64 %129
  %152 = getelementptr inbounds i8, ptr %151, i64 32
  %153 = getelementptr inbounds i8, ptr %151, i64 8
  %154 = getelementptr inbounds %struct.vocab_word, ptr %150, i64 %129, i32 3
  %155 = load i32, ptr @negative, align 4
  %156 = icmp sgt i32 %155, 0
  %157 = add i32 %155, 1
  %158 = zext i32 %157 to i64
  %159 = load ptr, ptr @syn0, align 8
  %160 = shl nuw i64 %131, 2
  %161 = add i64 %131, -1
  %xtraiter828 = and i64 %131, 3
  %162 = icmp ult i64 %161, 3
  %unroll_iter832 = and i64 %131, 9223372036854775804
  %lcmp.mod830.not = icmp eq i64 %xtraiter828, 0
  %min.iters.check674 = icmp ult i64 %131, 8
  %n.vec677 = and i64 %131, 9223372036854775800
  %cmp.n688 = icmp eq i64 %131, %n.vec677
  %min.iters.check657 = icmp ult i64 %131, 8
  %n.vec660 = and i64 %131, 9223372036854775800
  %cmp.n671 = icmp eq i64 %131, %n.vec660
  %xtraiter834 = and i64 %131, 1
  %lcmp.mod835.not = icmp eq i64 %xtraiter834, 0
  %xtraiter837 = and i64 %131, 3
  %163 = icmp ult i64 %161, 3
  %unroll_iter841 = and i64 %131, 9223372036854775804
  %lcmp.mod839.not = icmp eq i64 %xtraiter837, 0
  %min.iters.check634 = icmp ult i64 %131, 8
  %n.vec637 = and i64 %131, 9223372036854775800
  %cmp.n648 = icmp eq i64 %131, %n.vec637
  %min.iters.check619 = icmp ult i64 %131, 8
  %n.vec622 = and i64 %131, 9223372036854775800
  %cmp.n631 = icmp eq i64 %131, %n.vec622
  %xtraiter843 = and i64 %131, 1
  %lcmp.mod844.not = icmp eq i64 %xtraiter843, 0
  %min.iters.check = icmp ult i64 %131, 8
  %n.vec = and i64 %131, 9223372036854775800
  %cmp.n = icmp eq i64 %131, %n.vec
  br label %411

164:                                              ; preds = %.lr.ph401, %186
  %.0259400 = phi i64 [ %139, %.lr.ph401 ], [ %187, %186 ]
  %.0263399 = phi i64 [ 0, %.lr.ph401 ], [ %.1264, %186 ]
  %.not341 = icmp eq i64 %.0259400, %138
  br i1 %.not341, label %186, label %165

165:                                              ; preds = %164
  %166 = add nsw i64 %.0259400, %146
  %167 = icmp sgt i64 %166, -1
  %.not342 = icmp slt i64 %166, %.3301
  %or.cond343 = select i1 %167, i1 %.not342, i1 false
  br i1 %or.cond343, label %168, label %186

168:                                              ; preds = %165
  %169 = getelementptr inbounds [1001 x i64], ptr %2, i64 0, i64 %166
  %170 = load i64, ptr %169, align 8, !tbaa !5
  %171 = icmp eq i64 %170, -1
  br i1 %171, label %186, label %.preheader359

.preheader359:                                    ; preds = %168
  br i1 %132, label %.lr.ph397, label %._crit_edge398

.lr.ph397:                                        ; preds = %.preheader359
  %172 = mul nsw i64 %170, %131
  %invariant.gep = getelementptr float, ptr %147, i64 %172
  br i1 %min.iters.check788, label %scalar.ph787.preheader, label %vector.body793

vector.body793:                                   ; preds = %.lr.ph397, %vector.body793
  %index794 = phi i64 [ %index.next799, %vector.body793 ], [ 0, %.lr.ph397 ]
  %173 = getelementptr float, ptr %invariant.gep, i64 %index794
  %174 = getelementptr i8, ptr %173, i64 16
  %wide.load795 = load <4 x float>, ptr %173, align 4, !tbaa !11
  %wide.load796 = load <4 x float>, ptr %174, align 4, !tbaa !11
  %175 = getelementptr inbounds float, ptr %6, i64 %index794
  %176 = getelementptr inbounds i8, ptr %175, i64 16
  %wide.load797 = load <4 x float>, ptr %175, align 4, !tbaa !11
  %wide.load798 = load <4 x float>, ptr %176, align 4, !tbaa !11
  %177 = fadd <4 x float> %wide.load795, %wide.load797
  %178 = fadd <4 x float> %wide.load796, %wide.load798
  store <4 x float> %177, ptr %175, align 4, !tbaa !11
  store <4 x float> %178, ptr %176, align 4, !tbaa !11
  %index.next799 = add nuw i64 %index794, 8
  %179 = icmp eq i64 %index.next799, %n.vec791
  br i1 %179, label %middle.block786, label %vector.body793, !llvm.loop !19

middle.block786:                                  ; preds = %vector.body793
  br i1 %cmp.n800, label %._crit_edge398, label %scalar.ph787.preheader

scalar.ph787.preheader:                           ; preds = %middle.block786, %.lr.ph397
  %.2284396.ph = phi i64 [ 0, %.lr.ph397 ], [ %n.vec791, %middle.block786 ]
  br label %scalar.ph787

scalar.ph787:                                     ; preds = %scalar.ph787.preheader, %scalar.ph787
  %.2284396 = phi i64 [ %184, %scalar.ph787 ], [ %.2284396.ph, %scalar.ph787.preheader ]
  %gep = getelementptr float, ptr %invariant.gep, i64 %.2284396
  %180 = load float, ptr %gep, align 4, !tbaa !11
  %181 = getelementptr inbounds float, ptr %6, i64 %.2284396
  %182 = load float, ptr %181, align 4, !tbaa !11
  %183 = fadd float %180, %182
  store float %183, ptr %181, align 4, !tbaa !11
  %184 = add nuw nsw i64 %.2284396, 1
  %exitcond532.not = icmp eq i64 %184, %131
  br i1 %exitcond532.not, label %._crit_edge398, label %scalar.ph787, !llvm.loop !23

._crit_edge398:                                   ; preds = %scalar.ph787, %middle.block786, %.preheader359
  %185 = add nsw i64 %.0263399, 1
  br label %186

186:                                              ; preds = %164, %._crit_edge398, %168, %165
  %.1264 = phi i64 [ %.0263399, %165 ], [ %.0263399, %168 ], [ %185, %._crit_edge398 ], [ %.0263399, %164 ]
  %187 = add nsw i64 %.0259400, 1
  %188 = icmp slt i64 %187, %144
  br i1 %188, label %164, label %._crit_edge402, !llvm.loop !24

._crit_edge402:                                   ; preds = %186
  %.not336 = icmp eq i64 %.1264, 0
  br i1 %.not336, label %.loopexit361, label %.preheader367

.preheader367:                                    ; preds = %._crit_edge402
  br i1 %132, label %.lr.ph406, label %._crit_edge407

.lr.ph406:                                        ; preds = %.preheader367
  %189 = sitofp i64 %.1264 to float
  %min.iters.check774 = icmp ult i64 %131, 4
  br i1 %min.iters.check774, label %scalar.ph773.preheader, label %vector.ph775

vector.ph775:                                     ; preds = %.lr.ph406
  %n.vec777 = and i64 %131, 9223372036854775804
  %broadcast.splatinsert782 = insertelement <4 x float> poison, float %189, i64 0
  %broadcast.splat783 = shufflevector <4 x float> %broadcast.splatinsert782, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body779

vector.body779:                                   ; preds = %vector.body779, %vector.ph775
  %index780 = phi i64 [ 0, %vector.ph775 ], [ %index.next784, %vector.body779 ]
  %190 = getelementptr inbounds float, ptr %6, i64 %index780
  %wide.load781 = load <4 x float>, ptr %190, align 4, !tbaa !11
  %191 = fdiv <4 x float> %wide.load781, %broadcast.splat783
  store <4 x float> %191, ptr %190, align 4, !tbaa !11
  %index.next784 = add nuw i64 %index780, 4
  %192 = icmp eq i64 %index.next784, %n.vec777
  br i1 %192, label %middle.block772, label %vector.body779, !llvm.loop !25

middle.block772:                                  ; preds = %vector.body779
  %cmp.n785 = icmp eq i64 %131, %n.vec777
  br i1 %cmp.n785, label %._crit_edge407, label %scalar.ph773.preheader

scalar.ph773.preheader:                           ; preds = %middle.block772, %.lr.ph406
  %.3285405.ph = phi i64 [ 0, %.lr.ph406 ], [ %n.vec777, %middle.block772 ]
  br label %scalar.ph773

scalar.ph773:                                     ; preds = %scalar.ph773.preheader, %scalar.ph773
  %.3285405 = phi i64 [ %196, %scalar.ph773 ], [ %.3285405.ph, %scalar.ph773.preheader ]
  %193 = getelementptr inbounds float, ptr %6, i64 %.3285405
  %194 = load float, ptr %193, align 4, !tbaa !11
  %195 = fdiv float %194, %189
  store float %195, ptr %193, align 4, !tbaa !11
  %196 = add nuw nsw i64 %.3285405, 1
  %exitcond533.not = icmp eq i64 %196, %131
  br i1 %exitcond533.not, label %._crit_edge407, label %scalar.ph773, !llvm.loop !26

._crit_edge407:                                   ; preds = %scalar.ph773, %middle.block772, %.preheader367
  %197 = load i32, ptr @hs, align 4, !tbaa !9
  %.not337 = icmp eq i32 %197, 0
  br i1 %.not337, label %.loopexit366, label %.preheader365

.preheader365:                                    ; preds = %._crit_edge407
  %198 = load ptr, ptr @vocab, align 8, !tbaa !15
  %199 = getelementptr inbounds %struct.vocab_word, ptr %198, i64 %129
  %200 = getelementptr inbounds i8, ptr %199, i64 32
  %201 = load i8, ptr %200, align 8, !tbaa !27
  %202 = sext i8 %201 to i64
  %203 = icmp sgt i8 %201, 0
  br i1 %203, label %.lr.ph426, label %.loopexit366

.lr.ph426:                                        ; preds = %.preheader365
  %204 = getelementptr inbounds i8, ptr %199, i64 8
  %205 = load ptr, ptr %204, align 8, !tbaa !28
  %206 = load ptr, ptr @syn1, align 8
  %207 = load ptr, ptr @expTable, align 8
  %208 = getelementptr inbounds %struct.vocab_word, ptr %198, i64 %129, i32 3
  %209 = add i64 %131, -1
  %xtraiter = and i64 %131, 3
  %210 = icmp ult i64 %209, 3
  %unroll_iter = and i64 %131, 9223372036854775804
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %min.iters.check757 = icmp ult i64 %131, 8
  %n.vec760 = and i64 %131, 9223372036854775800
  %cmp.n771 = icmp eq i64 %131, %n.vec760
  %min.iters.check740 = icmp ult i64 %131, 8
  %n.vec743 = and i64 %131, 9223372036854775800
  %cmp.n754 = icmp eq i64 %131, %n.vec743
  br label %211

211:                                              ; preds = %.lr.ph426, %.loopexit358
  %.0260425 = phi i64 [ 0, %.lr.ph426 ], [ %282, %.loopexit358 ]
  %212 = getelementptr inbounds i32, ptr %205, i64 %.0260425
  %213 = load i32, ptr %212, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = mul nsw i64 %131, %214
  br i1 %132, label %.lr.ph411, label %._crit_edge412

.lr.ph411:                                        ; preds = %211
  %invariant.gep414 = getelementptr float, ptr %206, i64 %215
  br i1 %210, label %._crit_edge412.loopexit.unr-lcssa, label %.lr.ph411.new

.lr.ph411.new:                                    ; preds = %.lr.ph411, %.lr.ph411.new
  %.0267409 = phi float [ %234, %.lr.ph411.new ], [ 0.000000e+00, %.lr.ph411 ]
  %.4286408 = phi i64 [ %235, %.lr.ph411.new ], [ 0, %.lr.ph411 ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph411.new ], [ 0, %.lr.ph411 ]
  %216 = getelementptr inbounds float, ptr %6, i64 %.4286408
  %217 = load float, ptr %216, align 4, !tbaa !11
  %gep415 = getelementptr float, ptr %invariant.gep414, i64 %.4286408
  %218 = load float, ptr %gep415, align 4, !tbaa !11
  %219 = tail call float @llvm.fmuladd.f32(float %217, float %218, float %.0267409)
  %220 = or disjoint i64 %.4286408, 1
  %221 = getelementptr inbounds float, ptr %6, i64 %220
  %222 = load float, ptr %221, align 4, !tbaa !11
  %gep415.1 = getelementptr float, ptr %invariant.gep414, i64 %220
  %223 = load float, ptr %gep415.1, align 4, !tbaa !11
  %224 = tail call float @llvm.fmuladd.f32(float %222, float %223, float %219)
  %225 = or disjoint i64 %.4286408, 2
  %226 = getelementptr inbounds float, ptr %6, i64 %225
  %227 = load float, ptr %226, align 4, !tbaa !11
  %gep415.2 = getelementptr float, ptr %invariant.gep414, i64 %225
  %228 = load float, ptr %gep415.2, align 4, !tbaa !11
  %229 = tail call float @llvm.fmuladd.f32(float %227, float %228, float %224)
  %230 = or disjoint i64 %.4286408, 3
  %231 = getelementptr inbounds float, ptr %6, i64 %230
  %232 = load float, ptr %231, align 4, !tbaa !11
  %gep415.3 = getelementptr float, ptr %invariant.gep414, i64 %230
  %233 = load float, ptr %gep415.3, align 4, !tbaa !11
  %234 = tail call float @llvm.fmuladd.f32(float %232, float %233, float %229)
  %235 = add nuw nsw i64 %.4286408, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge412.loopexit.unr-lcssa, label %.lr.ph411.new, !llvm.loop !29

._crit_edge412.loopexit.unr-lcssa:                ; preds = %.lr.ph411.new, %.lr.ph411
  %.lcssa815.ph = phi float [ poison, %.lr.ph411 ], [ %234, %.lr.ph411.new ]
  %.0267409.unr = phi float [ 0.000000e+00, %.lr.ph411 ], [ %234, %.lr.ph411.new ]
  %.4286408.unr = phi i64 [ 0, %.lr.ph411 ], [ %235, %.lr.ph411.new ]
  br i1 %lcmp.mod.not, label %._crit_edge412, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge412.loopexit.unr-lcssa, %.epil.preheader
  %.0267409.epil = phi float [ %239, %.epil.preheader ], [ %.0267409.unr, %._crit_edge412.loopexit.unr-lcssa ]
  %.4286408.epil = phi i64 [ %240, %.epil.preheader ], [ %.4286408.unr, %._crit_edge412.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge412.loopexit.unr-lcssa ]
  %236 = getelementptr inbounds float, ptr %6, i64 %.4286408.epil
  %237 = load float, ptr %236, align 4, !tbaa !11
  %gep415.epil = getelementptr float, ptr %invariant.gep414, i64 %.4286408.epil
  %238 = load float, ptr %gep415.epil, align 4, !tbaa !11
  %239 = tail call float @llvm.fmuladd.f32(float %237, float %238, float %.0267409.epil)
  %240 = add nuw nsw i64 %.4286408.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge412, label %.epil.preheader, !llvm.loop !30

._crit_edge412:                                   ; preds = %._crit_edge412.loopexit.unr-lcssa, %.epil.preheader, %211
  %.0267.lcssa = phi float [ 0.000000e+00, %211 ], [ %.lcssa815.ph, %._crit_edge412.loopexit.unr-lcssa ], [ %239, %.epil.preheader ]
  %241 = tail call float @llvm.fabs.f32(float %.0267.lcssa)
  %or.cond = fcmp ult float %241, 6.000000e+00
  br i1 %or.cond, label %242, label %.loopexit358

242:                                              ; preds = %._crit_edge412
  %243 = fadd float %.0267.lcssa, 6.000000e+00
  %244 = fmul float %243, 8.300000e+01
  %245 = fptosi float %244 to i32
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %207, i64 %246
  %248 = load float, ptr %247, align 4, !tbaa !11
  %249 = load ptr, ptr %208, align 8, !tbaa !32
  %250 = getelementptr inbounds i8, ptr %249, i64 %.0260425
  %251 = load i8, ptr %250, align 1, !tbaa !33
  %252 = sext i8 %251 to i32
  %253 = sub nsw i32 1, %252
  %254 = sitofp i32 %253 to float
  %255 = fsub float %254, %248
  %256 = load float, ptr @alpha, align 4, !tbaa !11
  %257 = fmul float %256, %255
  br i1 %132, label %.lr.ph418, label %.loopexit358

.lr.ph418:                                        ; preds = %242
  %invariant.gep419 = getelementptr float, ptr %206, i64 %215
  br i1 %min.iters.check757, label %scalar.ph756.preheader, label %vector.ph758

scalar.ph756.preheader:                           ; preds = %middle.block755, %.lr.ph418
  %.5287416.ph = phi i64 [ 0, %.lr.ph418 ], [ %n.vec760, %middle.block755 ]
  br label %scalar.ph756

vector.ph758:                                     ; preds = %.lr.ph418
  %broadcast.splatinsert768 = insertelement <4 x float> poison, float %257, i64 0
  %broadcast.splat769 = shufflevector <4 x float> %broadcast.splatinsert768, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body762

vector.body762:                                   ; preds = %vector.body762, %vector.ph758
  %index763 = phi i64 [ 0, %vector.ph758 ], [ %index.next770, %vector.body762 ]
  %258 = getelementptr float, ptr %invariant.gep419, i64 %index763
  %259 = getelementptr i8, ptr %258, i64 16
  %wide.load764 = load <4 x float>, ptr %258, align 4, !tbaa !11
  %wide.load765 = load <4 x float>, ptr %259, align 4, !tbaa !11
  %260 = getelementptr inbounds float, ptr %7, i64 %index763
  %261 = getelementptr inbounds i8, ptr %260, i64 16
  %wide.load766 = load <4 x float>, ptr %260, align 4, !tbaa !11
  %wide.load767 = load <4 x float>, ptr %261, align 4, !tbaa !11
  %262 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat769, <4 x float> %wide.load764, <4 x float> %wide.load766)
  %263 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat769, <4 x float> %wide.load765, <4 x float> %wide.load767)
  store <4 x float> %262, ptr %260, align 4, !tbaa !11
  store <4 x float> %263, ptr %261, align 4, !tbaa !11
  %index.next770 = add nuw i64 %index763, 8
  %264 = icmp eq i64 %index.next770, %n.vec760
  br i1 %264, label %middle.block755, label %vector.body762, !llvm.loop !34

middle.block755:                                  ; preds = %vector.body762
  br i1 %cmp.n771, label %.preheader357, label %scalar.ph756.preheader

.preheader357:                                    ; preds = %scalar.ph756, %middle.block755
  br i1 %132, label %.lr.ph422, label %.loopexit358

.lr.ph422:                                        ; preds = %.preheader357
  %invariant.gep423 = getelementptr float, ptr %206, i64 %215
  br i1 %min.iters.check740, label %scalar.ph739.preheader, label %vector.ph741

scalar.ph739.preheader:                           ; preds = %middle.block738, %.lr.ph422
  %.6288421.ph = phi i64 [ 0, %.lr.ph422 ], [ %n.vec743, %middle.block738 ]
  br label %scalar.ph739

vector.ph741:                                     ; preds = %.lr.ph422
  %broadcast.splatinsert751 = insertelement <4 x float> poison, float %257, i64 0
  %broadcast.splat752 = shufflevector <4 x float> %broadcast.splatinsert751, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body745

vector.body745:                                   ; preds = %vector.body745, %vector.ph741
  %index746 = phi i64 [ 0, %vector.ph741 ], [ %index.next753, %vector.body745 ]
  %265 = getelementptr inbounds float, ptr %6, i64 %index746
  %266 = getelementptr inbounds i8, ptr %265, i64 16
  %wide.load747 = load <4 x float>, ptr %265, align 4, !tbaa !11
  %wide.load748 = load <4 x float>, ptr %266, align 4, !tbaa !11
  %267 = getelementptr float, ptr %invariant.gep423, i64 %index746
  %268 = getelementptr i8, ptr %267, i64 16
  %wide.load749 = load <4 x float>, ptr %267, align 4, !tbaa !11
  %wide.load750 = load <4 x float>, ptr %268, align 4, !tbaa !11
  %269 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat752, <4 x float> %wide.load747, <4 x float> %wide.load749)
  %270 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat752, <4 x float> %wide.load748, <4 x float> %wide.load750)
  store <4 x float> %269, ptr %267, align 4, !tbaa !11
  store <4 x float> %270, ptr %268, align 4, !tbaa !11
  %index.next753 = add nuw i64 %index746, 8
  %271 = icmp eq i64 %index.next753, %n.vec743
  br i1 %271, label %middle.block738, label %vector.body745, !llvm.loop !35

middle.block738:                                  ; preds = %vector.body745
  br i1 %cmp.n754, label %.loopexit358, label %scalar.ph739.preheader

scalar.ph756:                                     ; preds = %scalar.ph756.preheader, %scalar.ph756
  %.5287416 = phi i64 [ %276, %scalar.ph756 ], [ %.5287416.ph, %scalar.ph756.preheader ]
  %gep420 = getelementptr float, ptr %invariant.gep419, i64 %.5287416
  %272 = load float, ptr %gep420, align 4, !tbaa !11
  %273 = getelementptr inbounds float, ptr %7, i64 %.5287416
  %274 = load float, ptr %273, align 4, !tbaa !11
  %275 = tail call float @llvm.fmuladd.f32(float %257, float %272, float %274)
  store float %275, ptr %273, align 4, !tbaa !11
  %276 = add nuw nsw i64 %.5287416, 1
  %exitcond535.not = icmp eq i64 %276, %131
  br i1 %exitcond535.not, label %.preheader357, label %scalar.ph756, !llvm.loop !36

scalar.ph739:                                     ; preds = %scalar.ph739.preheader, %scalar.ph739
  %.6288421 = phi i64 [ %281, %scalar.ph739 ], [ %.6288421.ph, %scalar.ph739.preheader ]
  %277 = getelementptr inbounds float, ptr %6, i64 %.6288421
  %278 = load float, ptr %277, align 4, !tbaa !11
  %gep424 = getelementptr float, ptr %invariant.gep423, i64 %.6288421
  %279 = load float, ptr %gep424, align 4, !tbaa !11
  %280 = tail call float @llvm.fmuladd.f32(float %257, float %278, float %279)
  store float %280, ptr %gep424, align 4, !tbaa !11
  %281 = add nuw nsw i64 %.6288421, 1
  %exitcond536.not = icmp eq i64 %281, %131
  br i1 %exitcond536.not, label %.loopexit358, label %scalar.ph739, !llvm.loop !37

.loopexit358:                                     ; preds = %scalar.ph739, %middle.block738, %242, %.preheader357, %._crit_edge412
  %282 = add nuw nsw i64 %.0260425, 1
  %exitcond537.not = icmp eq i64 %282, %202
  br i1 %exitcond537.not, label %.loopexit366, label %211, !llvm.loop !38

.loopexit366:                                     ; preds = %.loopexit358, %.preheader365, %._crit_edge407
  %283 = load i32, ptr @negative, align 4, !tbaa !9
  %284 = icmp sgt i32 %283, 0
  br i1 %284, label %.preheader363, label %.loopexit364

.preheader363:                                    ; preds = %.loopexit366
  %285 = add nuw i32 %283, 1
  %286 = zext i32 %285 to i64
  %287 = load ptr, ptr @table, align 8
  %288 = load i64, ptr @vocab_size, align 8
  %289 = add nsw i64 %288, -1
  %290 = load ptr, ptr @syn1neg, align 8
  %291 = load ptr, ptr @expTable, align 8
  %292 = add i64 %131, -1
  %xtraiter821 = and i64 %131, 3
  %293 = icmp ult i64 %292, 3
  %unroll_iter825 = and i64 %131, 9223372036854775804
  %lcmp.mod823.not = icmp eq i64 %xtraiter821, 0
  %min.iters.check723 = icmp ult i64 %131, 8
  %n.vec726 = and i64 %131, 9223372036854775800
  %cmp.n737 = icmp eq i64 %131, %n.vec726
  %min.iters.check706 = icmp ult i64 %131, 8
  %n.vec709 = and i64 %131, 9223372036854775800
  %cmp.n720 = icmp eq i64 %131, %n.vec709
  br label %294

294:                                              ; preds = %.preheader363, %.loopexit356
  %.1261445 = phi i64 [ 0, %.preheader363 ], [ %384, %.loopexit356 ]
  %.5444 = phi i64 [ %136, %.preheader363 ], [ %.7, %.loopexit356 ]
  %295 = icmp eq i64 %.1261445, 0
  br i1 %295, label %310, label %296

296:                                              ; preds = %294
  %297 = mul i64 %.5444, 25214903917
  %298 = add i64 %297, 11
  %299 = lshr i64 %298, 16
  %300 = urem i64 %299, 100000000
  %301 = getelementptr inbounds i32, ptr %287, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = icmp eq i32 %302, 0
  br i1 %304, label %305, label %308

305:                                              ; preds = %296
  %306 = urem i64 %298, %289
  %307 = add nuw i64 %306, 1
  br label %308

308:                                              ; preds = %305, %296
  %.0278 = phi i64 [ %307, %305 ], [ %303, %296 ]
  %309 = icmp eq i64 %.0278, %129
  br i1 %309, label %.loopexit356, label %310

310:                                              ; preds = %308, %294
  %.1279 = phi i64 [ %129, %294 ], [ %.0278, %308 ]
  %.0276 = phi i64 [ 1, %294 ], [ 0, %308 ]
  %.6 = phi i64 [ %.5444, %294 ], [ %298, %308 ]
  %311 = mul nsw i64 %.1279, %131
  br i1 %132, label %.lr.ph430, label %.thread

.lr.ph430:                                        ; preds = %310
  %invariant.gep433 = getelementptr float, ptr %290, i64 %311
  br i1 %293, label %._crit_edge431.unr-lcssa, label %.lr.ph430.new

.lr.ph430.new:                                    ; preds = %.lr.ph430, %.lr.ph430.new
  %.1268428 = phi float [ %330, %.lr.ph430.new ], [ 0.000000e+00, %.lr.ph430 ]
  %.7289427 = phi i64 [ %331, %.lr.ph430.new ], [ 0, %.lr.ph430 ]
  %niter826 = phi i64 [ %niter826.next.3, %.lr.ph430.new ], [ 0, %.lr.ph430 ]
  %312 = getelementptr inbounds float, ptr %6, i64 %.7289427
  %313 = load float, ptr %312, align 4, !tbaa !11
  %gep434 = getelementptr float, ptr %invariant.gep433, i64 %.7289427
  %314 = load float, ptr %gep434, align 4, !tbaa !11
  %315 = tail call float @llvm.fmuladd.f32(float %313, float %314, float %.1268428)
  %316 = or disjoint i64 %.7289427, 1
  %317 = getelementptr inbounds float, ptr %6, i64 %316
  %318 = load float, ptr %317, align 4, !tbaa !11
  %gep434.1 = getelementptr float, ptr %invariant.gep433, i64 %316
  %319 = load float, ptr %gep434.1, align 4, !tbaa !11
  %320 = tail call float @llvm.fmuladd.f32(float %318, float %319, float %315)
  %321 = or disjoint i64 %.7289427, 2
  %322 = getelementptr inbounds float, ptr %6, i64 %321
  %323 = load float, ptr %322, align 4, !tbaa !11
  %gep434.2 = getelementptr float, ptr %invariant.gep433, i64 %321
  %324 = load float, ptr %gep434.2, align 4, !tbaa !11
  %325 = tail call float @llvm.fmuladd.f32(float %323, float %324, float %320)
  %326 = or disjoint i64 %.7289427, 3
  %327 = getelementptr inbounds float, ptr %6, i64 %326
  %328 = load float, ptr %327, align 4, !tbaa !11
  %gep434.3 = getelementptr float, ptr %invariant.gep433, i64 %326
  %329 = load float, ptr %gep434.3, align 4, !tbaa !11
  %330 = tail call float @llvm.fmuladd.f32(float %328, float %329, float %325)
  %331 = add nuw nsw i64 %.7289427, 4
  %niter826.next.3 = add i64 %niter826, 4
  %niter826.ncmp.3 = icmp eq i64 %niter826.next.3, %unroll_iter825
  br i1 %niter826.ncmp.3, label %._crit_edge431.unr-lcssa, label %.lr.ph430.new, !llvm.loop !39

._crit_edge431.unr-lcssa:                         ; preds = %.lr.ph430.new, %.lr.ph430
  %.lcssa816.ph = phi float [ poison, %.lr.ph430 ], [ %330, %.lr.ph430.new ]
  %.1268428.unr = phi float [ 0.000000e+00, %.lr.ph430 ], [ %330, %.lr.ph430.new ]
  %.7289427.unr = phi i64 [ 0, %.lr.ph430 ], [ %331, %.lr.ph430.new ]
  br i1 %lcmp.mod823.not, label %._crit_edge431, label %.epil.preheader820

.epil.preheader820:                               ; preds = %._crit_edge431.unr-lcssa, %.epil.preheader820
  %.1268428.epil = phi float [ %335, %.epil.preheader820 ], [ %.1268428.unr, %._crit_edge431.unr-lcssa ]
  %.7289427.epil = phi i64 [ %336, %.epil.preheader820 ], [ %.7289427.unr, %._crit_edge431.unr-lcssa ]
  %epil.iter822 = phi i64 [ %epil.iter822.next, %.epil.preheader820 ], [ 0, %._crit_edge431.unr-lcssa ]
  %332 = getelementptr inbounds float, ptr %6, i64 %.7289427.epil
  %333 = load float, ptr %332, align 4, !tbaa !11
  %gep434.epil = getelementptr float, ptr %invariant.gep433, i64 %.7289427.epil
  %334 = load float, ptr %gep434.epil, align 4, !tbaa !11
  %335 = tail call float @llvm.fmuladd.f32(float %333, float %334, float %.1268428.epil)
  %336 = add nuw nsw i64 %.7289427.epil, 1
  %epil.iter822.next = add i64 %epil.iter822, 1
  %epil.iter822.cmp.not = icmp eq i64 %epil.iter822.next, %xtraiter821
  br i1 %epil.iter822.cmp.not, label %._crit_edge431, label %.epil.preheader820, !llvm.loop !40

._crit_edge431:                                   ; preds = %.epil.preheader820, %._crit_edge431.unr-lcssa
  %.lcssa816 = phi float [ %.lcssa816.ph, %._crit_edge431.unr-lcssa ], [ %335, %.epil.preheader820 ]
  %337 = fcmp ogt float %.lcssa816, 6.000000e+00
  br i1 %337, label %338, label %343

338:                                              ; preds = %._crit_edge431
  %339 = add nsw i64 %.0276, -1
  %340 = sitofp i64 %339 to float
  %341 = load float, ptr @alpha, align 4, !tbaa !11
  %342 = fmul float %341, %340
  br label %359

343:                                              ; preds = %._crit_edge431
  %344 = fcmp olt float %.lcssa816, -6.000000e+00
  br i1 %344, label %345, label %.thread

345:                                              ; preds = %343
  %346 = uitofp nneg i64 %.0276 to float
  %347 = load float, ptr @alpha, align 4, !tbaa !11
  %348 = fmul float %347, %346
  br label %359

.thread:                                          ; preds = %310, %343
  %.1268.lcssa566568 = phi float [ %.lcssa816, %343 ], [ 0.000000e+00, %310 ]
  %349 = uitofp nneg i64 %.0276 to float
  %350 = fadd float %.1268.lcssa566568, 6.000000e+00
  %351 = fmul float %350, 8.300000e+01
  %352 = fptosi float %351 to i32
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds float, ptr %291, i64 %353
  %355 = load float, ptr %354, align 4, !tbaa !11
  %356 = fsub float %349, %355
  %357 = load float, ptr @alpha, align 4, !tbaa !11
  %358 = fmul float %356, %357
  br label %359

359:                                              ; preds = %345, %.thread, %338
  %.0265 = phi float [ %342, %338 ], [ %348, %345 ], [ %358, %.thread ]
  br i1 %132, label %.lr.ph437, label %.loopexit356

.lr.ph437:                                        ; preds = %359
  %invariant.gep438 = getelementptr float, ptr %290, i64 %311
  br i1 %min.iters.check723, label %scalar.ph722.preheader, label %vector.ph724

scalar.ph722.preheader:                           ; preds = %middle.block721, %.lr.ph437
  %.8290435.ph = phi i64 [ 0, %.lr.ph437 ], [ %n.vec726, %middle.block721 ]
  br label %scalar.ph722

vector.ph724:                                     ; preds = %.lr.ph437
  %broadcast.splatinsert734 = insertelement <4 x float> poison, float %.0265, i64 0
  %broadcast.splat735 = shufflevector <4 x float> %broadcast.splatinsert734, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body728

vector.body728:                                   ; preds = %vector.body728, %vector.ph724
  %index729 = phi i64 [ 0, %vector.ph724 ], [ %index.next736, %vector.body728 ]
  %360 = getelementptr float, ptr %invariant.gep438, i64 %index729
  %361 = getelementptr i8, ptr %360, i64 16
  %wide.load730 = load <4 x float>, ptr %360, align 4, !tbaa !11
  %wide.load731 = load <4 x float>, ptr %361, align 4, !tbaa !11
  %362 = getelementptr inbounds float, ptr %7, i64 %index729
  %363 = getelementptr inbounds i8, ptr %362, i64 16
  %wide.load732 = load <4 x float>, ptr %362, align 4, !tbaa !11
  %wide.load733 = load <4 x float>, ptr %363, align 4, !tbaa !11
  %364 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat735, <4 x float> %wide.load730, <4 x float> %wide.load732)
  %365 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat735, <4 x float> %wide.load731, <4 x float> %wide.load733)
  store <4 x float> %364, ptr %362, align 4, !tbaa !11
  store <4 x float> %365, ptr %363, align 4, !tbaa !11
  %index.next736 = add nuw i64 %index729, 8
  %366 = icmp eq i64 %index.next736, %n.vec726
  br i1 %366, label %middle.block721, label %vector.body728, !llvm.loop !41

middle.block721:                                  ; preds = %vector.body728
  br i1 %cmp.n737, label %.preheader355, label %scalar.ph722.preheader

.preheader355:                                    ; preds = %scalar.ph722, %middle.block721
  br i1 %132, label %.lr.ph441, label %.loopexit356

.lr.ph441:                                        ; preds = %.preheader355
  %invariant.gep442 = getelementptr float, ptr %290, i64 %311
  br i1 %min.iters.check706, label %scalar.ph705.preheader, label %vector.ph707

scalar.ph705.preheader:                           ; preds = %middle.block704, %.lr.ph441
  %.9291440.ph = phi i64 [ 0, %.lr.ph441 ], [ %n.vec709, %middle.block704 ]
  br label %scalar.ph705

vector.ph707:                                     ; preds = %.lr.ph441
  %broadcast.splatinsert717 = insertelement <4 x float> poison, float %.0265, i64 0
  %broadcast.splat718 = shufflevector <4 x float> %broadcast.splatinsert717, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body711

vector.body711:                                   ; preds = %vector.body711, %vector.ph707
  %index712 = phi i64 [ 0, %vector.ph707 ], [ %index.next719, %vector.body711 ]
  %367 = getelementptr inbounds float, ptr %6, i64 %index712
  %368 = getelementptr inbounds i8, ptr %367, i64 16
  %wide.load713 = load <4 x float>, ptr %367, align 4, !tbaa !11
  %wide.load714 = load <4 x float>, ptr %368, align 4, !tbaa !11
  %369 = getelementptr float, ptr %invariant.gep442, i64 %index712
  %370 = getelementptr i8, ptr %369, i64 16
  %wide.load715 = load <4 x float>, ptr %369, align 4, !tbaa !11
  %wide.load716 = load <4 x float>, ptr %370, align 4, !tbaa !11
  %371 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat718, <4 x float> %wide.load713, <4 x float> %wide.load715)
  %372 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat718, <4 x float> %wide.load714, <4 x float> %wide.load716)
  store <4 x float> %371, ptr %369, align 4, !tbaa !11
  store <4 x float> %372, ptr %370, align 4, !tbaa !11
  %index.next719 = add nuw i64 %index712, 8
  %373 = icmp eq i64 %index.next719, %n.vec709
  br i1 %373, label %middle.block704, label %vector.body711, !llvm.loop !42

middle.block704:                                  ; preds = %vector.body711
  br i1 %cmp.n720, label %.loopexit356, label %scalar.ph705.preheader

scalar.ph722:                                     ; preds = %scalar.ph722.preheader, %scalar.ph722
  %.8290435 = phi i64 [ %378, %scalar.ph722 ], [ %.8290435.ph, %scalar.ph722.preheader ]
  %gep439 = getelementptr float, ptr %invariant.gep438, i64 %.8290435
  %374 = load float, ptr %gep439, align 4, !tbaa !11
  %375 = getelementptr inbounds float, ptr %7, i64 %.8290435
  %376 = load float, ptr %375, align 4, !tbaa !11
  %377 = tail call float @llvm.fmuladd.f32(float %.0265, float %374, float %376)
  store float %377, ptr %375, align 4, !tbaa !11
  %378 = add nuw nsw i64 %.8290435, 1
  %exitcond539.not = icmp eq i64 %378, %131
  br i1 %exitcond539.not, label %.preheader355, label %scalar.ph722, !llvm.loop !43

scalar.ph705:                                     ; preds = %scalar.ph705.preheader, %scalar.ph705
  %.9291440 = phi i64 [ %383, %scalar.ph705 ], [ %.9291440.ph, %scalar.ph705.preheader ]
  %379 = getelementptr inbounds float, ptr %6, i64 %.9291440
  %380 = load float, ptr %379, align 4, !tbaa !11
  %gep443 = getelementptr float, ptr %invariant.gep442, i64 %.9291440
  %381 = load float, ptr %gep443, align 4, !tbaa !11
  %382 = tail call float @llvm.fmuladd.f32(float %.0265, float %380, float %381)
  store float %382, ptr %gep443, align 4, !tbaa !11
  %383 = add nuw nsw i64 %.9291440, 1
  %exitcond540.not = icmp eq i64 %383, %131
  br i1 %exitcond540.not, label %.loopexit356, label %scalar.ph705, !llvm.loop !44

.loopexit356:                                     ; preds = %scalar.ph705, %middle.block704, %359, %.preheader355, %308
  %.7 = phi i64 [ %298, %308 ], [ %.6, %.preheader355 ], [ %.6, %359 ], [ %.6, %middle.block704 ], [ %.6, %scalar.ph705 ]
  %384 = add nuw nsw i64 %.1261445, 1
  %exitcond541.not = icmp eq i64 %384, %286
  br i1 %exitcond541.not, label %.loopexit364, label %294, !llvm.loop !45

.loopexit364:                                     ; preds = %.loopexit356, %.loopexit366
  %.8 = phi i64 [ %136, %.loopexit366 ], [ %.7, %.loopexit356 ]
  br i1 %145, label %.lr.ph452, label %.loopexit361

.lr.ph452:                                        ; preds = %.loopexit364
  %385 = sub nsw i64 %.1309, %138
  %386 = icmp slt i64 %131, 1
  %387 = load ptr, ptr @syn0, align 8
  %min.iters.check691 = icmp ult i64 %131, 8
  %n.vec694 = and i64 %131, 9223372036854775800
  %cmp.n703 = icmp eq i64 %131, %n.vec694
  br label %388

388:                                              ; preds = %.lr.ph452, %.loopexit354
  %.1450 = phi i64 [ %139, %.lr.ph452 ], [ %409, %.loopexit354 ]
  %.not339 = icmp eq i64 %.1450, %138
  br i1 %.not339, label %.loopexit354, label %389

389:                                              ; preds = %388
  %390 = add nsw i64 %.1450, %385
  %391 = icmp sgt i64 %390, -1
  %.not340 = icmp slt i64 %390, %.3301
  %or.cond344 = select i1 %391, i1 %.not340, i1 false
  br i1 %or.cond344, label %392, label %.loopexit354

392:                                              ; preds = %389
  %393 = getelementptr inbounds [1001 x i64], ptr %2, i64 0, i64 %390
  %394 = load i64, ptr %393, align 8, !tbaa !5
  %395 = icmp eq i64 %394, -1
  %brmerge = or i1 %395, %386
  br i1 %brmerge, label %.loopexit354, label %.lr.ph447

.lr.ph447:                                        ; preds = %392
  %396 = mul nsw i64 %394, %131
  %invariant.gep448 = getelementptr float, ptr %387, i64 %396
  br i1 %min.iters.check691, label %scalar.ph690.preheader, label %vector.body696

vector.body696:                                   ; preds = %.lr.ph447, %vector.body696
  %index697 = phi i64 [ %index.next702, %vector.body696 ], [ 0, %.lr.ph447 ]
  %397 = getelementptr inbounds float, ptr %7, i64 %index697
  %398 = getelementptr inbounds i8, ptr %397, i64 16
  %wide.load698 = load <4 x float>, ptr %397, align 4, !tbaa !11
  %wide.load699 = load <4 x float>, ptr %398, align 4, !tbaa !11
  %399 = getelementptr float, ptr %invariant.gep448, i64 %index697
  %400 = getelementptr i8, ptr %399, i64 16
  %wide.load700 = load <4 x float>, ptr %399, align 4, !tbaa !11
  %wide.load701 = load <4 x float>, ptr %400, align 4, !tbaa !11
  %401 = fadd <4 x float> %wide.load698, %wide.load700
  %402 = fadd <4 x float> %wide.load699, %wide.load701
  store <4 x float> %401, ptr %399, align 4, !tbaa !11
  store <4 x float> %402, ptr %400, align 4, !tbaa !11
  %index.next702 = add nuw i64 %index697, 8
  %403 = icmp eq i64 %index.next702, %n.vec694
  br i1 %403, label %middle.block689, label %vector.body696, !llvm.loop !46

middle.block689:                                  ; preds = %vector.body696
  br i1 %cmp.n703, label %.loopexit354, label %scalar.ph690.preheader

scalar.ph690.preheader:                           ; preds = %middle.block689, %.lr.ph447
  %.10292446.ph = phi i64 [ 0, %.lr.ph447 ], [ %n.vec694, %middle.block689 ]
  br label %scalar.ph690

scalar.ph690:                                     ; preds = %scalar.ph690.preheader, %scalar.ph690
  %.10292446 = phi i64 [ %408, %scalar.ph690 ], [ %.10292446.ph, %scalar.ph690.preheader ]
  %404 = getelementptr inbounds float, ptr %7, i64 %.10292446
  %405 = load float, ptr %404, align 4, !tbaa !11
  %gep449 = getelementptr float, ptr %invariant.gep448, i64 %.10292446
  %406 = load float, ptr %gep449, align 4, !tbaa !11
  %407 = fadd float %405, %406
  store float %407, ptr %gep449, align 4, !tbaa !11
  %408 = add nuw nsw i64 %.10292446, 1
  %exitcond542.not = icmp eq i64 %408, %131
  br i1 %exitcond542.not, label %.loopexit354, label %scalar.ph690, !llvm.loop !47

.loopexit354:                                     ; preds = %scalar.ph690, %middle.block689, %392, %388, %389
  %409 = add nsw i64 %.1450, 1
  %410 = icmp slt i64 %409, %144
  br i1 %410, label %388, label %.loopexit361, !llvm.loop !48

411:                                              ; preds = %.lr.ph510, %.loopexit348
  %.2509 = phi i64 [ %139, %.lr.ph510 ], [ %627, %.loopexit348 ]
  %.9508 = phi i64 [ %136, %.lr.ph510 ], [ %.14, %.loopexit348 ]
  %.not333 = icmp eq i64 %.2509, %138
  br i1 %.not333, label %.loopexit348, label %412

412:                                              ; preds = %411
  %413 = add nsw i64 %.2509, %148
  %414 = icmp sgt i64 %413, -1
  %.not334 = icmp slt i64 %413, %.3301
  %or.cond345 = select i1 %414, i1 %.not334, i1 false
  br i1 %or.cond345, label %415, label %.loopexit348

415:                                              ; preds = %412
  %416 = getelementptr inbounds [1001 x i64], ptr %2, i64 0, i64 %413
  %417 = load i64, ptr %416, align 8, !tbaa !5
  %418 = icmp eq i64 %417, -1
  br i1 %418, label %.loopexit348, label %419

419:                                              ; preds = %415
  %420 = mul i64 %417, %131
  br i1 %132, label %.lr.ph455.preheader, label %._crit_edge456

.lr.ph455.preheader:                              ; preds = %419
  tail call void @llvm.memset.p0.i64(ptr align 4 %7, i8 0, i64 %160, i1 false), !tbaa !11
  br label %._crit_edge456

._crit_edge456:                                   ; preds = %.lr.ph455.preheader, %419
  br i1 %.not335, label %.loopexit352, label %.preheader351

.preheader351:                                    ; preds = %._crit_edge456
  %421 = load i8, ptr %152, align 8, !tbaa !27
  %422 = sext i8 %421 to i64
  %423 = icmp sgt i8 %421, 0
  br i1 %423, label %.lr.ph479, label %.loopexit352

.lr.ph479:                                        ; preds = %.preheader351
  %424 = load ptr, ptr %153, align 8, !tbaa !28
  %425 = load ptr, ptr @syn0, align 8
  %invariant.gep463 = getelementptr float, ptr %425, i64 %420
  %426 = load ptr, ptr @syn1, align 8
  %427 = load ptr, ptr @expTable, align 8
  %428 = shl i64 %417, 2
  %429 = add i64 %428, 4
  %430 = mul i64 %131, %429
  %scevgep651 = getelementptr i8, ptr %425, i64 %430
  br label %431

431:                                              ; preds = %.lr.ph479, %.loopexit347
  %.2262478 = phi i64 [ 0, %.lr.ph479 ], [ %508, %.loopexit347 ]
  %432 = getelementptr inbounds i32, ptr %424, i64 %.2262478
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = mul nsw i64 %131, %434
  br i1 %132, label %.lr.ph460, label %._crit_edge461

.lr.ph460:                                        ; preds = %431
  %invariant.gep465 = getelementptr float, ptr %426, i64 %435
  br i1 %162, label %._crit_edge461.loopexit.unr-lcssa, label %.lr.ph460.new

.lr.ph460.new:                                    ; preds = %.lr.ph460, %.lr.ph460.new
  %.2269458 = phi float [ %450, %.lr.ph460.new ], [ 0.000000e+00, %.lr.ph460 ]
  %.12294457 = phi i64 [ %451, %.lr.ph460.new ], [ 0, %.lr.ph460 ]
  %niter833 = phi i64 [ %niter833.next.3, %.lr.ph460.new ], [ 0, %.lr.ph460 ]
  %gep464 = getelementptr float, ptr %invariant.gep463, i64 %.12294457
  %436 = load float, ptr %gep464, align 4, !tbaa !11
  %gep466 = getelementptr float, ptr %invariant.gep465, i64 %.12294457
  %437 = load float, ptr %gep466, align 4, !tbaa !11
  %438 = tail call float @llvm.fmuladd.f32(float %436, float %437, float %.2269458)
  %439 = or disjoint i64 %.12294457, 1
  %gep464.1 = getelementptr float, ptr %invariant.gep463, i64 %439
  %440 = load float, ptr %gep464.1, align 4, !tbaa !11
  %gep466.1 = getelementptr float, ptr %invariant.gep465, i64 %439
  %441 = load float, ptr %gep466.1, align 4, !tbaa !11
  %442 = tail call float @llvm.fmuladd.f32(float %440, float %441, float %438)
  %443 = or disjoint i64 %.12294457, 2
  %gep464.2 = getelementptr float, ptr %invariant.gep463, i64 %443
  %444 = load float, ptr %gep464.2, align 4, !tbaa !11
  %gep466.2 = getelementptr float, ptr %invariant.gep465, i64 %443
  %445 = load float, ptr %gep466.2, align 4, !tbaa !11
  %446 = tail call float @llvm.fmuladd.f32(float %444, float %445, float %442)
  %447 = or disjoint i64 %.12294457, 3
  %gep464.3 = getelementptr float, ptr %invariant.gep463, i64 %447
  %448 = load float, ptr %gep464.3, align 4, !tbaa !11
  %gep466.3 = getelementptr float, ptr %invariant.gep465, i64 %447
  %449 = load float, ptr %gep466.3, align 4, !tbaa !11
  %450 = tail call float @llvm.fmuladd.f32(float %448, float %449, float %446)
  %451 = add nuw nsw i64 %.12294457, 4
  %niter833.next.3 = add i64 %niter833, 4
  %niter833.ncmp.3 = icmp eq i64 %niter833.next.3, %unroll_iter832
  br i1 %niter833.ncmp.3, label %._crit_edge461.loopexit.unr-lcssa, label %.lr.ph460.new, !llvm.loop !49

._crit_edge461.loopexit.unr-lcssa:                ; preds = %.lr.ph460.new, %.lr.ph460
  %.lcssa817.ph = phi float [ poison, %.lr.ph460 ], [ %450, %.lr.ph460.new ]
  %.2269458.unr = phi float [ 0.000000e+00, %.lr.ph460 ], [ %450, %.lr.ph460.new ]
  %.12294457.unr = phi i64 [ 0, %.lr.ph460 ], [ %451, %.lr.ph460.new ]
  br i1 %lcmp.mod830.not, label %._crit_edge461, label %.epil.preheader827

.epil.preheader827:                               ; preds = %._crit_edge461.loopexit.unr-lcssa, %.epil.preheader827
  %.2269458.epil = phi float [ %454, %.epil.preheader827 ], [ %.2269458.unr, %._crit_edge461.loopexit.unr-lcssa ]
  %.12294457.epil = phi i64 [ %455, %.epil.preheader827 ], [ %.12294457.unr, %._crit_edge461.loopexit.unr-lcssa ]
  %epil.iter829 = phi i64 [ %epil.iter829.next, %.epil.preheader827 ], [ 0, %._crit_edge461.loopexit.unr-lcssa ]
  %gep464.epil = getelementptr float, ptr %invariant.gep463, i64 %.12294457.epil
  %452 = load float, ptr %gep464.epil, align 4, !tbaa !11
  %gep466.epil = getelementptr float, ptr %invariant.gep465, i64 %.12294457.epil
  %453 = load float, ptr %gep466.epil, align 4, !tbaa !11
  %454 = tail call float @llvm.fmuladd.f32(float %452, float %453, float %.2269458.epil)
  %455 = add nuw nsw i64 %.12294457.epil, 1
  %epil.iter829.next = add i64 %epil.iter829, 1
  %epil.iter829.cmp.not = icmp eq i64 %epil.iter829.next, %xtraiter828
  br i1 %epil.iter829.cmp.not, label %._crit_edge461, label %.epil.preheader827, !llvm.loop !50

._crit_edge461:                                   ; preds = %._crit_edge461.loopexit.unr-lcssa, %.epil.preheader827, %431
  %.2269.lcssa = phi float [ 0.000000e+00, %431 ], [ %.lcssa817.ph, %._crit_edge461.loopexit.unr-lcssa ], [ %454, %.epil.preheader827 ]
  %456 = tail call float @llvm.fabs.f32(float %.2269.lcssa)
  %or.cond3 = fcmp ult float %456, 6.000000e+00
  br i1 %or.cond3, label %457, label %.loopexit347

457:                                              ; preds = %._crit_edge461
  %458 = fadd float %.2269.lcssa, 6.000000e+00
  %459 = fmul float %458, 8.300000e+01
  %460 = fptosi float %459 to i32
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds float, ptr %427, i64 %461
  %463 = load float, ptr %462, align 4, !tbaa !11
  %464 = load ptr, ptr %154, align 8, !tbaa !32
  %465 = getelementptr inbounds i8, ptr %464, i64 %.2262478
  %466 = load i8, ptr %465, align 1, !tbaa !33
  %467 = sext i8 %466 to i32
  %468 = sub nsw i32 1, %467
  %469 = sitofp i32 %468 to float
  %470 = fsub float %469, %463
  %471 = load float, ptr @alpha, align 4, !tbaa !11
  %472 = fmul float %471, %470
  br i1 %132, label %.lr.ph469, label %.loopexit347

.lr.ph469:                                        ; preds = %457
  %invariant.gep470 = getelementptr float, ptr %426, i64 %435
  br i1 %min.iters.check674, label %scalar.ph673.preheader, label %vector.ph675

scalar.ph673.preheader:                           ; preds = %middle.block672, %.lr.ph469
  %.13295467.ph = phi i64 [ 0, %.lr.ph469 ], [ %n.vec677, %middle.block672 ]
  br label %scalar.ph673

vector.ph675:                                     ; preds = %.lr.ph469
  %broadcast.splatinsert685 = insertelement <4 x float> poison, float %472, i64 0
  %broadcast.splat686 = shufflevector <4 x float> %broadcast.splatinsert685, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body679

vector.body679:                                   ; preds = %vector.body679, %vector.ph675
  %index680 = phi i64 [ 0, %vector.ph675 ], [ %index.next687, %vector.body679 ]
  %473 = getelementptr float, ptr %invariant.gep470, i64 %index680
  %474 = getelementptr i8, ptr %473, i64 16
  %wide.load681 = load <4 x float>, ptr %473, align 4, !tbaa !11
  %wide.load682 = load <4 x float>, ptr %474, align 4, !tbaa !11
  %475 = getelementptr inbounds float, ptr %7, i64 %index680
  %476 = getelementptr inbounds i8, ptr %475, i64 16
  %wide.load683 = load <4 x float>, ptr %475, align 4, !tbaa !11
  %wide.load684 = load <4 x float>, ptr %476, align 4, !tbaa !11
  %477 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat686, <4 x float> %wide.load681, <4 x float> %wide.load683)
  %478 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat686, <4 x float> %wide.load682, <4 x float> %wide.load684)
  store <4 x float> %477, ptr %475, align 4, !tbaa !11
  store <4 x float> %478, ptr %476, align 4, !tbaa !11
  %index.next687 = add nuw i64 %index680, 8
  %479 = icmp eq i64 %index.next687, %n.vec677
  br i1 %479, label %middle.block672, label %vector.body679, !llvm.loop !51

middle.block672:                                  ; preds = %vector.body679
  br i1 %cmp.n688, label %.preheader346, label %scalar.ph673.preheader

.preheader346:                                    ; preds = %scalar.ph673, %middle.block672
  br i1 %132, label %.lr.ph473, label %.loopexit347

.lr.ph473:                                        ; preds = %.preheader346
  %invariant.gep476 = getelementptr float, ptr %426, i64 %435
  br i1 %min.iters.check657, label %scalar.ph656.preheader, label %vector.memcheck649

scalar.ph656.preheader:                           ; preds = %middle.block655, %vector.memcheck649, %.lr.ph473
  %.14296472.ph = phi i64 [ 0, %vector.memcheck649 ], [ 0, %.lr.ph473 ], [ %n.vec660, %middle.block655 ]
  %.neg = or disjoint i64 %.14296472.ph, 1
  br i1 %lcmp.mod835.not, label %scalar.ph656.prol.loopexit, label %scalar.ph656.prol

scalar.ph656.prol:                                ; preds = %scalar.ph656.preheader
  %gep475.prol = getelementptr float, ptr %invariant.gep463, i64 %.14296472.ph
  %480 = load float, ptr %gep475.prol, align 4, !tbaa !11
  %gep477.prol = getelementptr float, ptr %invariant.gep476, i64 %.14296472.ph
  %481 = load float, ptr %gep477.prol, align 4, !tbaa !11
  %482 = tail call float @llvm.fmuladd.f32(float %472, float %480, float %481)
  store float %482, ptr %gep477.prol, align 4, !tbaa !11
  %483 = or disjoint i64 %.14296472.ph, 1
  br label %scalar.ph656.prol.loopexit

scalar.ph656.prol.loopexit:                       ; preds = %scalar.ph656.prol, %scalar.ph656.preheader
  %.14296472.unr = phi i64 [ %.14296472.ph, %scalar.ph656.preheader ], [ %483, %scalar.ph656.prol ]
  %484 = icmp eq i64 %131, %.neg
  br i1 %484, label %.loopexit347, label %scalar.ph656

vector.memcheck649:                               ; preds = %.lr.ph473
  %485 = shl nsw i64 %434, 2
  %486 = add nsw i64 %485, 4
  %487 = mul i64 %131, %486
  %scevgep650 = getelementptr i8, ptr %426, i64 %487
  %bound0652 = icmp ult ptr %invariant.gep476, %scevgep651
  %bound1653 = icmp ult ptr %invariant.gep463, %scevgep650
  %found.conflict654 = and i1 %bound0652, %bound1653
  br i1 %found.conflict654, label %scalar.ph656.preheader, label %vector.ph658

vector.ph658:                                     ; preds = %vector.memcheck649
  %broadcast.splatinsert668 = insertelement <4 x float> poison, float %472, i64 0
  %broadcast.splat669 = shufflevector <4 x float> %broadcast.splatinsert668, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body662

vector.body662:                                   ; preds = %vector.body662, %vector.ph658
  %index663 = phi i64 [ 0, %vector.ph658 ], [ %index.next670, %vector.body662 ]
  %488 = getelementptr float, ptr %invariant.gep463, i64 %index663
  %489 = getelementptr i8, ptr %488, i64 16
  %wide.load664 = load <4 x float>, ptr %488, align 4, !tbaa !11, !alias.scope !52
  %wide.load665 = load <4 x float>, ptr %489, align 4, !tbaa !11, !alias.scope !52
  %490 = getelementptr float, ptr %invariant.gep476, i64 %index663
  %491 = getelementptr i8, ptr %490, i64 16
  %wide.load666 = load <4 x float>, ptr %490, align 4, !tbaa !11, !alias.scope !55, !noalias !52
  %wide.load667 = load <4 x float>, ptr %491, align 4, !tbaa !11, !alias.scope !55, !noalias !52
  %492 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat669, <4 x float> %wide.load664, <4 x float> %wide.load666)
  %493 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat669, <4 x float> %wide.load665, <4 x float> %wide.load667)
  store <4 x float> %492, ptr %490, align 4, !tbaa !11, !alias.scope !55, !noalias !52
  store <4 x float> %493, ptr %491, align 4, !tbaa !11, !alias.scope !55, !noalias !52
  %index.next670 = add nuw i64 %index663, 8
  %494 = icmp eq i64 %index.next670, %n.vec660
  br i1 %494, label %middle.block655, label %vector.body662, !llvm.loop !57

middle.block655:                                  ; preds = %vector.body662
  br i1 %cmp.n671, label %.loopexit347, label %scalar.ph656.preheader

scalar.ph673:                                     ; preds = %scalar.ph673.preheader, %scalar.ph673
  %.13295467 = phi i64 [ %499, %scalar.ph673 ], [ %.13295467.ph, %scalar.ph673.preheader ]
  %gep471 = getelementptr float, ptr %invariant.gep470, i64 %.13295467
  %495 = load float, ptr %gep471, align 4, !tbaa !11
  %496 = getelementptr inbounds float, ptr %7, i64 %.13295467
  %497 = load float, ptr %496, align 4, !tbaa !11
  %498 = tail call float @llvm.fmuladd.f32(float %472, float %495, float %497)
  store float %498, ptr %496, align 4, !tbaa !11
  %499 = add nuw nsw i64 %.13295467, 1
  %exitcond544.not = icmp eq i64 %499, %131
  br i1 %exitcond544.not, label %.preheader346, label %scalar.ph673, !llvm.loop !58

scalar.ph656:                                     ; preds = %scalar.ph656.prol.loopexit, %scalar.ph656
  %.14296472 = phi i64 [ %507, %scalar.ph656 ], [ %.14296472.unr, %scalar.ph656.prol.loopexit ]
  %gep475 = getelementptr float, ptr %invariant.gep463, i64 %.14296472
  %500 = load float, ptr %gep475, align 4, !tbaa !11
  %gep477 = getelementptr float, ptr %invariant.gep476, i64 %.14296472
  %501 = load float, ptr %gep477, align 4, !tbaa !11
  %502 = tail call float @llvm.fmuladd.f32(float %472, float %500, float %501)
  store float %502, ptr %gep477, align 4, !tbaa !11
  %503 = add nuw nsw i64 %.14296472, 1
  %gep475.1 = getelementptr float, ptr %invariant.gep463, i64 %503
  %504 = load float, ptr %gep475.1, align 4, !tbaa !11
  %gep477.1 = getelementptr float, ptr %invariant.gep476, i64 %503
  %505 = load float, ptr %gep477.1, align 4, !tbaa !11
  %506 = tail call float @llvm.fmuladd.f32(float %472, float %504, float %505)
  store float %506, ptr %gep477.1, align 4, !tbaa !11
  %507 = add nuw nsw i64 %.14296472, 2
  %exitcond545.not.1 = icmp eq i64 %507, %131
  br i1 %exitcond545.not.1, label %.loopexit347, label %scalar.ph656, !llvm.loop !59

.loopexit347:                                     ; preds = %scalar.ph656.prol.loopexit, %scalar.ph656, %middle.block655, %457, %.preheader346, %._crit_edge461
  %508 = add nuw nsw i64 %.2262478, 1
  %exitcond546.not = icmp eq i64 %508, %422
  br i1 %exitcond546.not, label %.loopexit352, label %431, !llvm.loop !60

.loopexit352:                                     ; preds = %.loopexit347, %.preheader351, %._crit_edge456
  br i1 %156, label %.preheader349, label %.loopexit350

.preheader349:                                    ; preds = %.loopexit352
  %509 = load ptr, ptr @table, align 8
  %510 = load i64, ptr @vocab_size, align 8
  %511 = add nsw i64 %510, -1
  %512 = load ptr, ptr @syn0, align 8
  %invariant.gep486 = getelementptr float, ptr %512, i64 %420
  %513 = load ptr, ptr @syn1neg, align 8
  %514 = load ptr, ptr @expTable, align 8
  %515 = shl i64 %417, 2
  %516 = add i64 %515, 4
  %517 = mul i64 %131, %516
  %scevgep616 = getelementptr i8, ptr %512, i64 %517
  br label %518

518:                                              ; preds = %.preheader349, %.loopexit
  %.3502 = phi i64 [ 0, %.preheader349 ], [ %614, %.loopexit ]
  %.10501 = phi i64 [ %.9508, %.preheader349 ], [ %.12, %.loopexit ]
  %519 = icmp eq i64 %.3502, 0
  br i1 %519, label %534, label %520

520:                                              ; preds = %518
  %521 = mul i64 %.10501, 25214903917
  %522 = add i64 %521, 11
  %523 = lshr i64 %522, 16
  %524 = urem i64 %523, 100000000
  %525 = getelementptr inbounds i32, ptr %509, i64 %524
  %526 = load i32, ptr %525, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = icmp eq i32 %526, 0
  br i1 %528, label %529, label %532

529:                                              ; preds = %520
  %530 = urem i64 %522, %511
  %531 = add nuw i64 %530, 1
  br label %532

532:                                              ; preds = %529, %520
  %.2280 = phi i64 [ %531, %529 ], [ %527, %520 ]
  %533 = icmp eq i64 %.2280, %129
  br i1 %533, label %.loopexit, label %534

534:                                              ; preds = %532, %518
  %.3281 = phi i64 [ %129, %518 ], [ %.2280, %532 ]
  %.1277 = phi i64 [ 1, %518 ], [ 0, %532 ]
  %.11 = phi i64 [ %.10501, %518 ], [ %522, %532 ]
  %535 = mul nsw i64 %.3281, %131
  br i1 %132, label %.lr.ph483, label %.thread571

.lr.ph483:                                        ; preds = %534
  %invariant.gep488 = getelementptr float, ptr %513, i64 %535
  br i1 %163, label %._crit_edge484.unr-lcssa, label %.lr.ph483.new

.lr.ph483.new:                                    ; preds = %.lr.ph483, %.lr.ph483.new
  %.3270481 = phi float [ %550, %.lr.ph483.new ], [ 0.000000e+00, %.lr.ph483 ]
  %.15297480 = phi i64 [ %551, %.lr.ph483.new ], [ 0, %.lr.ph483 ]
  %niter842 = phi i64 [ %niter842.next.3, %.lr.ph483.new ], [ 0, %.lr.ph483 ]
  %gep487 = getelementptr float, ptr %invariant.gep486, i64 %.15297480
  %536 = load float, ptr %gep487, align 4, !tbaa !11
  %gep489 = getelementptr float, ptr %invariant.gep488, i64 %.15297480
  %537 = load float, ptr %gep489, align 4, !tbaa !11
  %538 = tail call float @llvm.fmuladd.f32(float %536, float %537, float %.3270481)
  %539 = or disjoint i64 %.15297480, 1
  %gep487.1 = getelementptr float, ptr %invariant.gep486, i64 %539
  %540 = load float, ptr %gep487.1, align 4, !tbaa !11
  %gep489.1 = getelementptr float, ptr %invariant.gep488, i64 %539
  %541 = load float, ptr %gep489.1, align 4, !tbaa !11
  %542 = tail call float @llvm.fmuladd.f32(float %540, float %541, float %538)
  %543 = or disjoint i64 %.15297480, 2
  %gep487.2 = getelementptr float, ptr %invariant.gep486, i64 %543
  %544 = load float, ptr %gep487.2, align 4, !tbaa !11
  %gep489.2 = getelementptr float, ptr %invariant.gep488, i64 %543
  %545 = load float, ptr %gep489.2, align 4, !tbaa !11
  %546 = tail call float @llvm.fmuladd.f32(float %544, float %545, float %542)
  %547 = or disjoint i64 %.15297480, 3
  %gep487.3 = getelementptr float, ptr %invariant.gep486, i64 %547
  %548 = load float, ptr %gep487.3, align 4, !tbaa !11
  %gep489.3 = getelementptr float, ptr %invariant.gep488, i64 %547
  %549 = load float, ptr %gep489.3, align 4, !tbaa !11
  %550 = tail call float @llvm.fmuladd.f32(float %548, float %549, float %546)
  %551 = add nuw nsw i64 %.15297480, 4
  %niter842.next.3 = add i64 %niter842, 4
  %niter842.ncmp.3 = icmp eq i64 %niter842.next.3, %unroll_iter841
  br i1 %niter842.ncmp.3, label %._crit_edge484.unr-lcssa, label %.lr.ph483.new, !llvm.loop !61

._crit_edge484.unr-lcssa:                         ; preds = %.lr.ph483.new, %.lr.ph483
  %.lcssa818.ph = phi float [ poison, %.lr.ph483 ], [ %550, %.lr.ph483.new ]
  %.3270481.unr = phi float [ 0.000000e+00, %.lr.ph483 ], [ %550, %.lr.ph483.new ]
  %.15297480.unr = phi i64 [ 0, %.lr.ph483 ], [ %551, %.lr.ph483.new ]
  br i1 %lcmp.mod839.not, label %._crit_edge484, label %.epil.preheader836

.epil.preheader836:                               ; preds = %._crit_edge484.unr-lcssa, %.epil.preheader836
  %.3270481.epil = phi float [ %554, %.epil.preheader836 ], [ %.3270481.unr, %._crit_edge484.unr-lcssa ]
  %.15297480.epil = phi i64 [ %555, %.epil.preheader836 ], [ %.15297480.unr, %._crit_edge484.unr-lcssa ]
  %epil.iter838 = phi i64 [ %epil.iter838.next, %.epil.preheader836 ], [ 0, %._crit_edge484.unr-lcssa ]
  %gep487.epil = getelementptr float, ptr %invariant.gep486, i64 %.15297480.epil
  %552 = load float, ptr %gep487.epil, align 4, !tbaa !11
  %gep489.epil = getelementptr float, ptr %invariant.gep488, i64 %.15297480.epil
  %553 = load float, ptr %gep489.epil, align 4, !tbaa !11
  %554 = tail call float @llvm.fmuladd.f32(float %552, float %553, float %.3270481.epil)
  %555 = add nuw nsw i64 %.15297480.epil, 1
  %epil.iter838.next = add i64 %epil.iter838, 1
  %epil.iter838.cmp.not = icmp eq i64 %epil.iter838.next, %xtraiter837
  br i1 %epil.iter838.cmp.not, label %._crit_edge484, label %.epil.preheader836, !llvm.loop !62

._crit_edge484:                                   ; preds = %.epil.preheader836, %._crit_edge484.unr-lcssa
  %.lcssa818 = phi float [ %.lcssa818.ph, %._crit_edge484.unr-lcssa ], [ %554, %.epil.preheader836 ]
  %556 = fcmp ogt float %.lcssa818, 6.000000e+00
  br i1 %556, label %557, label %562

557:                                              ; preds = %._crit_edge484
  %558 = add nsw i64 %.1277, -1
  %559 = sitofp i64 %558 to float
  %560 = load float, ptr @alpha, align 4, !tbaa !11
  %561 = fmul float %560, %559
  br label %578

562:                                              ; preds = %._crit_edge484
  %563 = fcmp olt float %.lcssa818, -6.000000e+00
  br i1 %563, label %564, label %.thread571

564:                                              ; preds = %562
  %565 = uitofp nneg i64 %.1277 to float
  %566 = load float, ptr @alpha, align 4, !tbaa !11
  %567 = fmul float %566, %565
  br label %578

.thread571:                                       ; preds = %534, %562
  %.3270.lcssa570573 = phi float [ %.lcssa818, %562 ], [ 0.000000e+00, %534 ]
  %568 = uitofp nneg i64 %.1277 to float
  %569 = fadd float %.3270.lcssa570573, 6.000000e+00
  %570 = fmul float %569, 8.300000e+01
  %571 = fptosi float %570 to i32
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds float, ptr %514, i64 %572
  %574 = load float, ptr %573, align 4, !tbaa !11
  %575 = fsub float %568, %574
  %576 = load float, ptr @alpha, align 4, !tbaa !11
  %577 = fmul float %575, %576
  br label %578

578:                                              ; preds = %564, %.thread571, %557
  %.1266 = phi float [ %561, %557 ], [ %567, %564 ], [ %577, %.thread571 ]
  br i1 %132, label %.lr.ph492, label %.loopexit

.lr.ph492:                                        ; preds = %578
  %invariant.gep493 = getelementptr float, ptr %513, i64 %535
  br i1 %min.iters.check634, label %scalar.ph633.preheader, label %vector.ph635

scalar.ph633.preheader:                           ; preds = %middle.block632, %.lr.ph492
  %.16490.ph = phi i64 [ 0, %.lr.ph492 ], [ %n.vec637, %middle.block632 ]
  br label %scalar.ph633

vector.ph635:                                     ; preds = %.lr.ph492
  %broadcast.splatinsert645 = insertelement <4 x float> poison, float %.1266, i64 0
  %broadcast.splat646 = shufflevector <4 x float> %broadcast.splatinsert645, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body639

vector.body639:                                   ; preds = %vector.body639, %vector.ph635
  %index640 = phi i64 [ 0, %vector.ph635 ], [ %index.next647, %vector.body639 ]
  %579 = getelementptr float, ptr %invariant.gep493, i64 %index640
  %580 = getelementptr i8, ptr %579, i64 16
  %wide.load641 = load <4 x float>, ptr %579, align 4, !tbaa !11
  %wide.load642 = load <4 x float>, ptr %580, align 4, !tbaa !11
  %581 = getelementptr inbounds float, ptr %7, i64 %index640
  %582 = getelementptr inbounds i8, ptr %581, i64 16
  %wide.load643 = load <4 x float>, ptr %581, align 4, !tbaa !11
  %wide.load644 = load <4 x float>, ptr %582, align 4, !tbaa !11
  %583 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat646, <4 x float> %wide.load641, <4 x float> %wide.load643)
  %584 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat646, <4 x float> %wide.load642, <4 x float> %wide.load644)
  store <4 x float> %583, ptr %581, align 4, !tbaa !11
  store <4 x float> %584, ptr %582, align 4, !tbaa !11
  %index.next647 = add nuw i64 %index640, 8
  %585 = icmp eq i64 %index.next647, %n.vec637
  br i1 %585, label %middle.block632, label %vector.body639, !llvm.loop !63

middle.block632:                                  ; preds = %vector.body639
  br i1 %cmp.n648, label %.preheader, label %scalar.ph633.preheader

.preheader:                                       ; preds = %scalar.ph633, %middle.block632
  br i1 %132, label %.lr.ph496, label %.loopexit

.lr.ph496:                                        ; preds = %.preheader
  %invariant.gep499 = getelementptr float, ptr %513, i64 %535
  br i1 %min.iters.check619, label %scalar.ph618.preheader, label %vector.memcheck

scalar.ph618.preheader:                           ; preds = %middle.block617, %vector.memcheck, %.lr.ph496
  %.17495.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph496 ], [ %n.vec622, %middle.block617 ]
  %.neg845 = or disjoint i64 %.17495.ph, 1
  br i1 %lcmp.mod844.not, label %scalar.ph618.prol.loopexit, label %scalar.ph618.prol

scalar.ph618.prol:                                ; preds = %scalar.ph618.preheader
  %gep498.prol = getelementptr float, ptr %invariant.gep486, i64 %.17495.ph
  %586 = load float, ptr %gep498.prol, align 4, !tbaa !11
  %gep500.prol = getelementptr float, ptr %invariant.gep499, i64 %.17495.ph
  %587 = load float, ptr %gep500.prol, align 4, !tbaa !11
  %588 = tail call float @llvm.fmuladd.f32(float %.1266, float %586, float %587)
  store float %588, ptr %gep500.prol, align 4, !tbaa !11
  %589 = or disjoint i64 %.17495.ph, 1
  br label %scalar.ph618.prol.loopexit

scalar.ph618.prol.loopexit:                       ; preds = %scalar.ph618.prol, %scalar.ph618.preheader
  %.17495.unr = phi i64 [ %.17495.ph, %scalar.ph618.preheader ], [ %589, %scalar.ph618.prol ]
  %590 = icmp eq i64 %131, %.neg845
  br i1 %590, label %.loopexit, label %scalar.ph618

vector.memcheck:                                  ; preds = %.lr.ph496
  %591 = shl i64 %.3281, 2
  %592 = add i64 %591, 4
  %593 = mul i64 %131, %592
  %scevgep = getelementptr i8, ptr %513, i64 %593
  %bound0 = icmp ult ptr %invariant.gep499, %scevgep616
  %bound1 = icmp ult ptr %invariant.gep486, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph618.preheader, label %vector.ph620

vector.ph620:                                     ; preds = %vector.memcheck
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.1266, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body624

vector.body624:                                   ; preds = %vector.body624, %vector.ph620
  %index625 = phi i64 [ 0, %vector.ph620 ], [ %index.next630, %vector.body624 ]
  %594 = getelementptr float, ptr %invariant.gep486, i64 %index625
  %595 = getelementptr i8, ptr %594, i64 16
  %wide.load626 = load <4 x float>, ptr %594, align 4, !tbaa !11, !alias.scope !64
  %wide.load627 = load <4 x float>, ptr %595, align 4, !tbaa !11, !alias.scope !64
  %596 = getelementptr float, ptr %invariant.gep499, i64 %index625
  %597 = getelementptr i8, ptr %596, i64 16
  %wide.load628 = load <4 x float>, ptr %596, align 4, !tbaa !11, !alias.scope !67, !noalias !64
  %wide.load629 = load <4 x float>, ptr %597, align 4, !tbaa !11, !alias.scope !67, !noalias !64
  %598 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load626, <4 x float> %wide.load628)
  %599 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load627, <4 x float> %wide.load629)
  store <4 x float> %598, ptr %596, align 4, !tbaa !11, !alias.scope !67, !noalias !64
  store <4 x float> %599, ptr %597, align 4, !tbaa !11, !alias.scope !67, !noalias !64
  %index.next630 = add nuw i64 %index625, 8
  %600 = icmp eq i64 %index.next630, %n.vec622
  br i1 %600, label %middle.block617, label %vector.body624, !llvm.loop !69

middle.block617:                                  ; preds = %vector.body624
  br i1 %cmp.n631, label %.loopexit, label %scalar.ph618.preheader

scalar.ph633:                                     ; preds = %scalar.ph633.preheader, %scalar.ph633
  %.16490 = phi i64 [ %605, %scalar.ph633 ], [ %.16490.ph, %scalar.ph633.preheader ]
  %gep494 = getelementptr float, ptr %invariant.gep493, i64 %.16490
  %601 = load float, ptr %gep494, align 4, !tbaa !11
  %602 = getelementptr inbounds float, ptr %7, i64 %.16490
  %603 = load float, ptr %602, align 4, !tbaa !11
  %604 = tail call float @llvm.fmuladd.f32(float %.1266, float %601, float %603)
  store float %604, ptr %602, align 4, !tbaa !11
  %605 = add nuw nsw i64 %.16490, 1
  %exitcond548.not = icmp eq i64 %605, %131
  br i1 %exitcond548.not, label %.preheader, label %scalar.ph633, !llvm.loop !70

scalar.ph618:                                     ; preds = %scalar.ph618.prol.loopexit, %scalar.ph618
  %.17495 = phi i64 [ %613, %scalar.ph618 ], [ %.17495.unr, %scalar.ph618.prol.loopexit ]
  %gep498 = getelementptr float, ptr %invariant.gep486, i64 %.17495
  %606 = load float, ptr %gep498, align 4, !tbaa !11
  %gep500 = getelementptr float, ptr %invariant.gep499, i64 %.17495
  %607 = load float, ptr %gep500, align 4, !tbaa !11
  %608 = tail call float @llvm.fmuladd.f32(float %.1266, float %606, float %607)
  store float %608, ptr %gep500, align 4, !tbaa !11
  %609 = add nuw nsw i64 %.17495, 1
  %gep498.1 = getelementptr float, ptr %invariant.gep486, i64 %609
  %610 = load float, ptr %gep498.1, align 4, !tbaa !11
  %gep500.1 = getelementptr float, ptr %invariant.gep499, i64 %609
  %611 = load float, ptr %gep500.1, align 4, !tbaa !11
  %612 = tail call float @llvm.fmuladd.f32(float %.1266, float %610, float %611)
  store float %612, ptr %gep500.1, align 4, !tbaa !11
  %613 = add nuw nsw i64 %.17495, 2
  %exitcond549.not.1 = icmp eq i64 %613, %131
  br i1 %exitcond549.not.1, label %.loopexit, label %scalar.ph618, !llvm.loop !71

.loopexit:                                        ; preds = %scalar.ph618.prol.loopexit, %scalar.ph618, %middle.block617, %578, %.preheader, %532
  %.12 = phi i64 [ %522, %532 ], [ %.11, %.preheader ], [ %.11, %578 ], [ %.11, %middle.block617 ], [ %.11, %scalar.ph618 ], [ %.11, %scalar.ph618.prol.loopexit ]
  %614 = add nuw nsw i64 %.3502, 1
  %exitcond550.not = icmp eq i64 %614, %158
  br i1 %exitcond550.not, label %.loopexit350, label %518, !llvm.loop !72

.loopexit350:                                     ; preds = %.loopexit, %.loopexit352
  %.13 = phi i64 [ %.9508, %.loopexit352 ], [ %.12, %.loopexit ]
  br i1 %132, label %.lr.ph505, label %.loopexit348

.lr.ph505:                                        ; preds = %.loopexit350
  %invariant.gep506 = getelementptr float, ptr %159, i64 %420
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph505, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph505 ]
  %615 = getelementptr inbounds float, ptr %7, i64 %index
  %616 = getelementptr inbounds i8, ptr %615, i64 16
  %wide.load = load <4 x float>, ptr %615, align 4, !tbaa !11
  %wide.load613 = load <4 x float>, ptr %616, align 4, !tbaa !11
  %617 = getelementptr float, ptr %invariant.gep506, i64 %index
  %618 = getelementptr i8, ptr %617, i64 16
  %wide.load614 = load <4 x float>, ptr %617, align 4, !tbaa !11
  %wide.load615 = load <4 x float>, ptr %618, align 4, !tbaa !11
  %619 = fadd <4 x float> %wide.load, %wide.load614
  %620 = fadd <4 x float> %wide.load613, %wide.load615
  store <4 x float> %619, ptr %617, align 4, !tbaa !11
  store <4 x float> %620, ptr %618, align 4, !tbaa !11
  %index.next = add nuw i64 %index, 8
  %621 = icmp eq i64 %index.next, %n.vec
  br i1 %621, label %middle.block, label %vector.body, !llvm.loop !73

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit348, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph505
  %.18503.ph = phi i64 [ 0, %.lr.ph505 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.18503 = phi i64 [ %626, %scalar.ph ], [ %.18503.ph, %scalar.ph.preheader ]
  %622 = getelementptr inbounds float, ptr %7, i64 %.18503
  %623 = load float, ptr %622, align 4, !tbaa !11
  %gep507 = getelementptr float, ptr %invariant.gep506, i64 %.18503
  %624 = load float, ptr %gep507, align 4, !tbaa !11
  %625 = fadd float %623, %624
  store float %625, ptr %gep507, align 4, !tbaa !11
  %626 = add nuw nsw i64 %.18503, 1
  %exitcond551.not = icmp eq i64 %626, %131
  br i1 %exitcond551.not, label %.loopexit348, label %scalar.ph, !llvm.loop !74

.loopexit348:                                     ; preds = %scalar.ph, %middle.block, %.loopexit350, %411, %415, %412
  %.14 = phi i64 [ %.9508, %412 ], [ %.9508, %415 ], [ %.9508, %411 ], [ %.13, %.loopexit350 ], [ %.13, %middle.block ], [ %.13, %scalar.ph ]
  %627 = add nsw i64 %.2509, 1
  %628 = icmp slt i64 %627, %144
  br i1 %628, label %411, label %.loopexit361, !llvm.loop !75

.loopexit361:                                     ; preds = %.loopexit354, %.loopexit348, %.preheader368, %.loopexit364, %.preheader360, %._crit_edge402
  %.15 = phi i64 [ %136, %._crit_edge402 ], [ %136, %.preheader360 ], [ %.8, %.loopexit364 ], [ %136, %.preheader368 ], [ %.14, %.loopexit348 ], [ %.8, %.loopexit354 ]
  %629 = add nsw i64 %.1309, 1
  %.not338 = icmp slt i64 %629, %.3301
  %spec.store.select = select i1 %.not338, i64 %.3301, i64 0
  br label %.backedge.backedge

.loopexit376:                                     ; preds = %121, %22
  %630 = tail call i32 @fclose(ptr noundef %8)
  tail call void @free(ptr noundef %6) #12
  tail call void @free(ptr noundef %7) #12
  tail call void @pthread_exit(ptr noundef null) #14
  unreachable
}

; Function Attrs: nounwind
declare i64 @clock() local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #7

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

; Function Attrs: noreturn
declare void @pthread_exit(ptr noundef) local_unnamed_addr #9

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #11

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #10

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

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

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


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