; LLVM IR from musetronstar/tagd :: tagl/src (lemon)

; 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.acttab = type { i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32 }
%struct.lookahead_action = type { i32, i32 }

@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@__PRETTY_FUNCTION__.acttab_insert = external hidden unnamed_addr constant [33 x i8], align 1

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

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

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local i32 @acttab_insert(ptr noundef %0, i32 noundef %1) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %11 = load ptr, ptr %3, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct.acttab, ptr %11, i32 0, i32 7
  %13 = load i32, ptr %12, align 4, !tbaa !11
  %14 = icmp sgt i32 %13, 0
  br i1 %14, label %15, label %16

15:                                               ; preds = %2
  br label %17

16:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.3, i32 noundef 681, ptr noundef @__PRETTY_FUNCTION__.acttab_insert) #7
  unreachable

17:                                               ; preds = %15
  %18 = load ptr, ptr %3, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.acttab, ptr %18, i32 0, i32 10
  %20 = load i32, ptr %19, align 8, !tbaa !13
  %21 = add nsw i32 %20, 1
  store i32 %21, ptr %8, align 4, !tbaa !9
  %22 = load ptr, ptr %3, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.acttab, ptr %22, i32 0, i32 0
  %24 = load i32, ptr %23, align 8, !tbaa !14
  %25 = load i32, ptr %8, align 4, !tbaa !9
  %26 = add nsw i32 %24, %25
  %27 = load ptr, ptr %3, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.acttab, ptr %27, i32 0, i32 1
  %29 = load i32, ptr %28, align 4, !tbaa !15
  %30 = icmp sge i32 %26, %29
  br i1 %30, label %31, label %92

31:                                               ; preds = %17
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.acttab, ptr %32, i32 0, i32 1
  %34 = load i32, ptr %33, align 4, !tbaa !15
  store i32 %34, ptr %10, align 4, !tbaa !9
  %35 = load ptr, ptr %3, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.acttab, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !14
  %38 = load i32, ptr %8, align 4, !tbaa !9
  %39 = add nsw i32 %37, %38
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.acttab, ptr %40, i32 0, i32 1
  %42 = load i32, ptr %41, align 4, !tbaa !15
  %43 = add nsw i32 %39, %42
  %44 = add nsw i32 %43, 20
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.acttab, ptr %45, i32 0, i32 1
  store i32 %44, ptr %46, align 4, !tbaa !15
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.acttab, ptr %47, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.acttab, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 4, !tbaa !15
  %53 = sext i32 %52 to i64
  %54 = mul i64 8, %53
  %55 = call ptr @realloc(ptr noundef %49, i64 noundef %54) #8
  %56 = load ptr, ptr %3, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.acttab, ptr %56, i32 0, i32 2
  store ptr %55, ptr %57, align 8, !tbaa !16
  %58 = load ptr, ptr %3, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.acttab, ptr %58, i32 0, i32 2
  %60 = load ptr, ptr %59, align 8, !tbaa !16
  %61 = icmp eq ptr %60, null
  br i1 %61, label %62, label %65

62:                                               ; preds = %31
  %63 = load ptr, ptr @stderr, align 8, !tbaa !5
  %64 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %63, ptr noundef @.str.1) #6
  call void @exit(i32 noundef 1) #7
  unreachable

65:                                               ; preds = %31
  %66 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %66, ptr %5, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %88, %65
  %68 = load i32, ptr %5, align 4, !tbaa !9
  %69 = load ptr, ptr %3, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.acttab, ptr %69, i32 0, i32 1
  %71 = load i32, ptr %70, align 4, !tbaa !15
  %72 = icmp slt i32 %68, %71
  br i1 %72, label %73, label %91

73:                                               ; preds = %67
  %74 = load ptr, ptr %3, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.acttab, ptr %74, i32 0, i32 2
  %76 = load ptr, ptr %75, align 8, !tbaa !16
  %77 = load i32, ptr %5, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds %struct.lookahead_action, ptr %76, i64 %78
  %80 = getelementptr inbounds %struct.lookahead_action, ptr %79, i32 0, i32 0
  store i32 -1, ptr %80, align 4, !tbaa !17
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.acttab, ptr %81, i32 0, i32 2
  %83 = load ptr, ptr %82, align 8, !tbaa !16
  %84 = load i32, ptr %5, align 4, !tbaa !9
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds %struct.lookahead_action, ptr %83, i64 %85
  %87 = getelementptr inbounds %struct.lookahead_action, ptr %86, i32 0, i32 1
  store i32 -1, ptr %87, align 4, !tbaa !19
  br label %88

88:                                               ; preds = %73
  %89 = load i32, ptr %5, align 4, !tbaa !9
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %5, align 4, !tbaa !9
  br label %67, !llvm.loop !20

91:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %92

92:                                               ; preds = %91, %17
  %93 = load i32, ptr %4, align 4, !tbaa !9
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %95, label %99

95:                                               ; preds = %92
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.acttab, ptr %96, i32 0, i32 4
  %98 = load i32, ptr %97, align 8, !tbaa !22
  br label %100

99:                                               ; preds = %92
  br label %100

100:                                              ; preds = %99, %95
  %101 = phi i32 [ %98, %95 ], [ 0, %99 ]
  store i32 %101, ptr %9, align 4, !tbaa !9
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.acttab, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !14
  %105 = sub nsw i32 %104, 1
  store i32 %105, ptr %5, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %268, %100
  %107 = load i32, ptr %5, align 4, !tbaa !9
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = icmp sge i32 %107, %108
  br i1 %109, label %110, label %271

110:                                              ; preds = %106
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.acttab, ptr %111, i32 0, i32 2
  %113 = load ptr, ptr %112, align 8, !tbaa !16
  %114 = load i32, ptr %5, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds %struct.lookahead_action, ptr %113, i64 %115
  %117 = getelementptr inbounds %struct.lookahead_action, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 4, !tbaa !17
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.acttab, ptr %119, i32 0, i32 4
  %121 = load i32, ptr %120, align 8, !tbaa !22
  %122 = icmp eq i32 %118, %121
  br i1 %122, label %123, label %267

123:                                              ; preds = %110
  %124 = load ptr, ptr %3, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.acttab, ptr %124, i32 0, i32 2
  %126 = load ptr, ptr %125, align 8, !tbaa !16
  %127 = load i32, ptr %5, align 4, !tbaa !9
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds %struct.lookahead_action, ptr %126, i64 %128
  %130 = getelementptr inbounds %struct.lookahead_action, ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 4, !tbaa !19
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.acttab, ptr %132, i32 0, i32 5
  %134 = load i32, ptr %133, align 4, !tbaa !23
  %135 = icmp ne i32 %131, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %123
  br label %268

137:                                              ; preds = %123
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %138

138:                                              ; preds = %207, %137
  %139 = load i32, ptr %6, align 4, !tbaa !9
  %140 = load ptr, ptr %3, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.acttab, ptr %140, i32 0, i32 7
  %142 = load i32, ptr %141, align 4, !tbaa !11
  %143 = icmp slt i32 %139, %142
  br i1 %143, label %144, label %210

144:                                              ; preds = %138
  %145 = load ptr, ptr %3, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.acttab, ptr %145, i32 0, i32 3
  %147 = load ptr, ptr %146, align 8, !tbaa !24
  %148 = load i32, ptr %6, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds %struct.lookahead_action, ptr %147, i64 %149
  %151 = getelementptr inbounds %struct.lookahead_action, ptr %150, i32 0, i32 0
  %152 = load i32, ptr %151, align 4, !tbaa !17
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.acttab, ptr %153, i32 0, i32 4
  %155 = load i32, ptr %154, align 8, !tbaa !22
  %156 = sub nsw i32 %152, %155
  %157 = load i32, ptr %5, align 4, !tbaa !9
  %158 = add nsw i32 %156, %157
  store i32 %158, ptr %7, align 4, !tbaa !9
  %159 = load i32, ptr %7, align 4, !tbaa !9
  %160 = icmp slt i32 %159, 0
  br i1 %160, label %167, label %161

161:                                              ; preds = %144
  %162 = load i32, ptr %7, align 4, !tbaa !9
  %163 = load ptr, ptr %3, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.acttab, ptr %163, i32 0, i32 0
  %165 = load i32, ptr %164, align 8, !tbaa !14
  %166 = icmp sge i32 %162, %165
  br i1 %166, label %167, label %168

167:                                              ; preds = %161, %144
  br label %210

168:                                              ; preds = %161
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.acttab, ptr %169, i32 0, i32 3
  %171 = load ptr, ptr %170, align 8, !tbaa !24
  %172 = load i32, ptr %6, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds %struct.lookahead_action, ptr %171, i64 %173
  %175 = getelementptr inbounds %struct.lookahead_action, ptr %174, i32 0, i32 0
  %176 = load i32, ptr %175, align 4, !tbaa !17
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.acttab, ptr %177, i32 0, i32 2
  %179 = load ptr, ptr %178, align 8, !tbaa !16
  %180 = load i32, ptr %7, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds %struct.lookahead_action, ptr %179, i64 %181
  %183 = getelementptr inbounds %struct.lookahead_action, ptr %182, i32 0, i32 0
  %184 = load i32, ptr %183, align 4, !tbaa !17
  %185 = icmp ne i32 %176, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %168
  br label %210

187:                                              ; preds = %168
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.acttab, ptr %188, i32 0, i32 3
  %190 = load ptr, ptr %189, align 8, !tbaa !24
  %191 = load i32, ptr %6, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds %struct.lookahead_action, ptr %190, i64 %192
  %194 = getelementptr inbounds %struct.lookahead_action, ptr %193, i32 0, i32 1
  %195 = load i32, ptr %194, align 4, !tbaa !19
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.acttab, ptr %196, i32 0, i32 2
  %198 = load ptr, ptr %197, align 8, !tbaa !16
  %199 = load i32, ptr %7, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds %struct.lookahead_action, ptr %198, i64 %200
  %202 = getelementptr inbounds %struct.lookahead_action, ptr %201, i32 0, i32 1
  %203 = load i32, ptr %202, align 4, !tbaa !19
  %204 = icmp ne i32 %195, %203
  br i1 %204, label %205, label %206

205:                                              ; preds = %187
  br label %210

206:                                              ; preds = %187
  br label %207

207:                                              ; preds = %206
  %208 = load i32, ptr %6, align 4, !tbaa !9
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %6, align 4, !tbaa !9
  br label %138, !llvm.loop !25

210:                                              ; preds = %205, %186, %167, %138
  %211 = load i32, ptr %6, align 4, !tbaa !9
  %212 = load ptr, ptr %3, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.acttab, ptr %212, i32 0, i32 7
  %214 = load i32, ptr %213, align 4, !tbaa !11
  %215 = icmp slt i32 %211, %214
  br i1 %215, label %216, label %217

216:                                              ; preds = %210
  br label %268

217:                                              ; preds = %210
  store i32 0, ptr %8, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %218

218:                                              ; preds = %256, %217
  %219 = load i32, ptr %6, align 4, !tbaa !9
  %220 = load ptr, ptr %3, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.acttab, ptr %220, i32 0, i32 0
  %222 = load i32, ptr %221, align 8, !tbaa !14
  %223 = icmp slt i32 %219, %222
  br i1 %223, label %224, label %259

224:                                              ; preds = %218
  %225 = load ptr, ptr %3, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.acttab, ptr %225, i32 0, i32 2
  %227 = load ptr, ptr %226, align 8, !tbaa !16
  %228 = load i32, ptr %6, align 4, !tbaa !9
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds %struct.lookahead_action, ptr %227, i64 %229
  %231 = getelementptr inbounds %struct.lookahead_action, ptr %230, i32 0, i32 0
  %232 = load i32, ptr %231, align 4, !tbaa !17
  %233 = icmp slt i32 %232, 0
  br i1 %233, label %234, label %235

234:                                              ; preds = %224
  br label %256

235:                                              ; preds = %224
  %236 = load ptr, ptr %3, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.acttab, ptr %236, i32 0, i32 2
  %238 = load ptr, ptr %237, align 8, !tbaa !16
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds %struct.lookahead_action, ptr %238, i64 %240
  %242 = getelementptr inbounds %struct.lookahead_action, ptr %241, i32 0, i32 0
  %243 = load i32, ptr %242, align 4, !tbaa !17
  %244 = load i32, ptr %6, align 4, !tbaa !9
  %245 = load ptr, ptr %3, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.acttab, ptr %245, i32 0, i32 4
  %247 = load i32, ptr %246, align 8, !tbaa !22
  %248 = add nsw i32 %244, %247
  %249 = load i32, ptr %5, align 4, !tbaa !9
  %250 = sub nsw i32 %248, %249
  %251 = icmp eq i32 %243, %250
  br i1 %251, label %252, label %255

252:                                              ; preds = %235
  %253 = load i32, ptr %8, align 4, !tbaa !9
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %8, align 4, !tbaa !9
  br label %255

255:                                              ; preds = %252, %235
  br label %256

256:                                              ; preds = %255, %234
  %257 = load i32, ptr %6, align 4, !tbaa !9
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %6, align 4, !tbaa !9
  br label %218, !llvm.loop !26

259:                                              ; preds = %218
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = load ptr, ptr %3, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.acttab, ptr %261, i32 0, i32 7
  %263 = load i32, ptr %262, align 4, !tbaa !11
  %264 = icmp eq i32 %260, %263
  br i1 %264, label %265, label %266

265:                                              ; preds = %259
  br label %271

266:                                              ; preds = %259
  br label %267

267:                                              ; preds = %266, %110
  br label %268

268:                                              ; preds = %267, %216, %136
  %269 = load i32, ptr %5, align 4, !tbaa !9
  %270 = add nsw i32 %269, -1
  store i32 %270, ptr %5, align 4, !tbaa !9
  br label %106, !llvm.loop !27

271:                                              ; preds = %265, %106
  %272 = load i32, ptr %5, align 4, !tbaa !9
  %273 = load i32, ptr %9, align 4, !tbaa !9
  %274 = icmp slt i32 %272, %273
  br i1 %274, label %275, label %394

275:                                              ; preds = %271
  %276 = load i32, ptr %4, align 4, !tbaa !9
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %282

278:                                              ; preds = %275
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.acttab, ptr %279, i32 0, i32 4
  %281 = load i32, ptr %280, align 8, !tbaa !22
  br label %283

282:                                              ; preds = %275
  br label %283

283:                                              ; preds = %282, %278
  %284 = phi i32 [ %281, %278 ], [ 0, %282 ]
  store i32 %284, ptr %5, align 4, !tbaa !9
  br label %285

285:                                              ; preds = %390, %283
  %286 = load i32, ptr %5, align 4, !tbaa !9
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.acttab, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !15
  %290 = load ptr, ptr %3, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.acttab, ptr %290, i32 0, i32 6
  %292 = load i32, ptr %291, align 8, !tbaa !28
  %293 = sub nsw i32 %289, %292
  %294 = icmp slt i32 %286, %293
  br i1 %294, label %295, label %393

295:                                              ; preds = %285
  %296 = load ptr, ptr %3, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.acttab, ptr %296, i32 0, i32 2
  %298 = load ptr, ptr %297, align 8, !tbaa !16
  %299 = load i32, ptr %5, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds %struct.lookahead_action, ptr %298, i64 %300
  %302 = getelementptr inbounds %struct.lookahead_action, ptr %301, i32 0, i32 0
  %303 = load i32, ptr %302, align 4, !tbaa !17
  %304 = icmp slt i32 %303, 0
  br i1 %304, label %305, label %389

305:                                              ; preds = %295
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %306

306:                                              ; preds = %342, %305
  %307 = load i32, ptr %6, align 4, !tbaa !9
  %308 = load ptr, ptr %3, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.acttab, ptr %308, i32 0, i32 7
  %310 = load i32, ptr %309, align 4, !tbaa !11
  %311 = icmp slt i32 %307, %310
  br i1 %311, label %312, label %345

312:                                              ; preds = %306
  %313 = load ptr, ptr %3, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.acttab, ptr %313, i32 0, i32 3
  %315 = load ptr, ptr %314, align 8, !tbaa !24
  %316 = load i32, ptr %6, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds %struct.lookahead_action, ptr %315, i64 %317
  %319 = getelementptr inbounds %struct.lookahead_action, ptr %318, i32 0, i32 0
  %320 = load i32, ptr %319, align 4, !tbaa !17
  %321 = load ptr, ptr %3, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.acttab, ptr %321, i32 0, i32 4
  %323 = load i32, ptr %322, align 8, !tbaa !22
  %324 = sub nsw i32 %320, %323
  %325 = load i32, ptr %5, align 4, !tbaa !9
  %326 = add nsw i32 %324, %325
  store i32 %326, ptr %7, align 4, !tbaa !9
  %327 = load i32, ptr %7, align 4, !tbaa !9
  %328 = icmp slt i32 %327, 0
  br i1 %328, label %329, label %330

329:                                              ; preds = %312
  br label %345

330:                                              ; preds = %312
  %331 = load ptr, ptr %3, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.acttab, ptr %331, i32 0, i32 2
  %333 = load ptr, ptr %332, align 8, !tbaa !16
  %334 = load i32, ptr %7, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds %struct.lookahead_action, ptr %333, i64 %335
  %337 = getelementptr inbounds %struct.lookahead_action, ptr %336, i32 0, i32 0
  %338 = load i32, ptr %337, align 4, !tbaa !17
  %339 = icmp sge i32 %338, 0
  br i1 %339, label %340, label %341

340:                                              ; preds = %330
  br label %345

341:                                              ; preds = %330
  br label %342

342:                                              ; preds = %341
  %343 = load i32, ptr %6, align 4, !tbaa !9
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %6, align 4, !tbaa !9
  br label %306, !llvm.loop !29

345:                                              ; preds = %340, %329, %306
  %346 = load i32, ptr %6, align 4, !tbaa !9
  %347 = load ptr, ptr %3, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.acttab, ptr %347, i32 0, i32 7
  %349 = load i32, ptr %348, align 4, !tbaa !11
  %350 = icmp slt i32 %346, %349
  br i1 %350, label %351, label %352

351:                                              ; preds = %345
  br label %390

352:                                              ; preds = %345
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %353

353:                                              ; preds = %378, %352
  %354 = load i32, ptr %6, align 4, !tbaa !9
  %355 = load ptr, ptr %3, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.acttab, ptr %355, i32 0, i32 0
  %357 = load i32, ptr %356, align 8, !tbaa !14
  %358 = icmp slt i32 %354, %357
  br i1 %358, label %359, label %381

359:                                              ; preds = %353
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.acttab, ptr %360, i32 0, i32 2
  %362 = load ptr, ptr %361, align 8, !tbaa !16
  %363 = load i32, ptr %6, align 4, !tbaa !9
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds %struct.lookahead_action, ptr %362, i64 %364
  %366 = getelementptr inbounds %struct.lookahead_action, ptr %365, i32 0, i32 0
  %367 = load i32, ptr %366, align 4, !tbaa !17
  %368 = load i32, ptr %6, align 4, !tbaa !9
  %369 = load ptr, ptr %3, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.acttab, ptr %369, i32 0, i32 4
  %371 = load i32, ptr %370, align 8, !tbaa !22
  %372 = add nsw i32 %368, %371
  %373 = load i32, ptr %5, align 4, !tbaa !9
  %374 = sub nsw i32 %372, %373
  %375 = icmp eq i32 %367, %374
  br i1 %375, label %376, label %377

376:                                              ; preds = %359
  br label %381

377:                                              ; preds = %359
  br label %378

378:                                              ; preds = %377
  %379 = load i32, ptr %6, align 4, !tbaa !9
  %380 = add nsw i32 %379, 1
  store i32 %380, ptr %6, align 4, !tbaa !9
  br label %353, !llvm.loop !30

381:                                              ; preds = %376, %353
  %382 = load i32, ptr %6, align 4, !tbaa !9
  %383 = load ptr, ptr %3, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.acttab, ptr %383, i32 0, i32 0
  %385 = load i32, ptr %384, align 8, !tbaa !14
  %386 = icmp eq i32 %382, %385
  br i1 %386, label %387, label %388

387:                                              ; preds = %381
  br label %393

388:                                              ; preds = %381
  br label %389

389:                                              ; preds = %388, %295
  br label %390

390:                                              ; preds = %389, %351
  %391 = load i32, ptr %5, align 4, !tbaa !9
  %392 = add nsw i32 %391, 1
  store i32 %392, ptr %5, align 4, !tbaa !9
  br label %285, !llvm.loop !31

393:                                              ; preds = %387, %285
  br label %394

394:                                              ; preds = %393, %271
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %395

395:                                              ; preds = %439, %394
  %396 = load i32, ptr %6, align 4, !tbaa !9
  %397 = load ptr, ptr %3, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.acttab, ptr %397, i32 0, i32 7
  %399 = load i32, ptr %398, align 4, !tbaa !11
  %400 = icmp slt i32 %396, %399
  br i1 %400, label %401, label %442

401:                                              ; preds = %395
  %402 = load ptr, ptr %3, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.acttab, ptr %402, i32 0, i32 3
  %404 = load ptr, ptr %403, align 8, !tbaa !24
  %405 = load i32, ptr %6, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %struct.lookahead_action, ptr %404, i64 %406
  %408 = getelementptr inbounds %struct.lookahead_action, ptr %407, i32 0, i32 0
  %409 = load i32, ptr %408, align 4, !tbaa !17
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.acttab, ptr %410, i32 0, i32 4
  %412 = load i32, ptr %411, align 8, !tbaa !22
  %413 = sub nsw i32 %409, %412
  %414 = load i32, ptr %5, align 4, !tbaa !9
  %415 = add nsw i32 %413, %414
  store i32 %415, ptr %7, align 4, !tbaa !9
  %416 = load ptr, ptr %3, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.acttab, ptr %416, i32 0, i32 2
  %418 = load ptr, ptr %417, align 8, !tbaa !16
  %419 = load i32, ptr %7, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.lookahead_action, ptr %418, i64 %420
  %422 = load ptr, ptr %3, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.acttab, ptr %422, i32 0, i32 3
  %424 = load ptr, ptr %423, align 8, !tbaa !24
  %425 = load i32, ptr %6, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds %struct.lookahead_action, ptr %424, i64 %426
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %421, ptr align 4 %427, i64 8, i1 false), !tbaa.struct !32
  %428 = load i32, ptr %7, align 4, !tbaa !9
  %429 = load ptr, ptr %3, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.acttab, ptr %429, i32 0, i32 0
  %431 = load i32, ptr %430, align 8, !tbaa !14
  %432 = icmp sge i32 %428, %431
  br i1 %432, label %433, label %438

433:                                              ; preds = %401
  %434 = load i32, ptr %7, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  %436 = load ptr, ptr %3, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.acttab, ptr %436, i32 0, i32 0
  store i32 %435, ptr %437, align 8, !tbaa !14
  br label %438

438:                                              ; preds = %433, %401
  br label %439

439:                                              ; preds = %438
  %440 = load i32, ptr %6, align 4, !tbaa !9
  %441 = add nsw i32 %440, 1
  store i32 %441, ptr %6, align 4, !tbaa !9
  br label %395, !llvm.loop !33

442:                                              ; preds = %395
  %443 = load i32, ptr %4, align 4, !tbaa !9
  %444 = icmp ne i32 %443, 0
  br i1 %444, label %445, label %464

445:                                              ; preds = %442
  %446 = load i32, ptr %5, align 4, !tbaa !9
  %447 = load ptr, ptr %3, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.acttab, ptr %447, i32 0, i32 9
  %449 = load i32, ptr %448, align 4, !tbaa !34
  %450 = add nsw i32 %446, %449
  %451 = load ptr, ptr %3, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.acttab, ptr %451, i32 0, i32 0
  %453 = load i32, ptr %452, align 8, !tbaa !14
  %454 = icmp sge i32 %450, %453
  br i1 %454, label %455, label %464

455:                                              ; preds = %445
  %456 = load i32, ptr %5, align 4, !tbaa !9
  %457 = load ptr, ptr %3, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.acttab, ptr %457, i32 0, i32 9
  %459 = load i32, ptr %458, align 4, !tbaa !34
  %460 = add nsw i32 %456, %459
  %461 = add nsw i32 %460, 1
  %462 = load ptr, ptr %3, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.acttab, ptr %462, i32 0, i32 0
  store i32 %461, ptr %463, align 8, !tbaa !14
  br label %464

464:                                              ; preds = %455, %445, %442
  %465 = load ptr, ptr %3, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.acttab, ptr %465, i32 0, i32 7
  store i32 0, ptr %466, align 4, !tbaa !11
  %467 = load i32, ptr %5, align 4, !tbaa !9
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.acttab, ptr %468, i32 0, i32 4
  %470 = load i32, ptr %469, align 8, !tbaa !22
  %471 = sub nsw i32 %467, %470
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  ret i32 %471
}

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

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

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

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

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


; 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.lookahead_action = type { i32, i32 }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@__PRETTY_FUNCTION__.acttab_insert = external hidden unnamed_addr constant [33 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local i32 @acttab_insert(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #3 {
  %3 = getelementptr inbounds i8, ptr %0, i64 36
  %4 = load i32, ptr %3, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %7, label %6

6:                                                ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, i32 noundef 681, ptr noundef nonnull @__PRETTY_FUNCTION__.acttab_insert) #6
  unreachable

7:                                                ; preds = %2
  %8 = getelementptr inbounds i8, ptr %0, i64 48
  %9 = load i32, ptr %8, align 8, !tbaa !11
  %10 = add nsw i32 %9, 1
  %11 = load i32, ptr %0, align 8, !tbaa !12
  %12 = add nsw i32 %10, %11
  %13 = getelementptr inbounds i8, ptr %0, i64 4
  %14 = load i32, ptr %13, align 4, !tbaa !13
  %.not = icmp slt i32 %12, %14
  br i1 %.not, label %.loopexit152, label %15

15:                                               ; preds = %7
  %16 = add i32 %14, 20
  %17 = add i32 %16, %12
  store i32 %17, ptr %13, align 4, !tbaa !13
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load ptr, ptr %18, align 8, !tbaa !14
  %20 = sext i32 %17 to i64
  %21 = shl nsw i64 %20, 3
  %22 = tail call ptr @realloc(ptr noundef %19, i64 noundef %21) #7
  store ptr %22, ptr %18, align 8, !tbaa !14
  %23 = icmp eq ptr %22, null
  br i1 %23, label %33, label %.preheader151

.preheader151:                                    ; preds = %15
  %24 = load i32, ptr %13, align 4, !tbaa !13
  %25 = icmp slt i32 %14, %24
  br i1 %25, label %.lr.ph.preheader, label %.loopexit152

.lr.ph.preheader:                                 ; preds = %.preheader151
  %26 = sext i32 %14 to i64
  %27 = shl nsw i64 %26, 3
  %scevgep = getelementptr i8, ptr %22, i64 %27
  %28 = xor i32 %14, -1
  %29 = add i32 %24, %28
  %30 = zext i32 %29 to i64
  %31 = shl nuw nsw i64 %30, 3
  %32 = add nuw nsw i64 %31, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep, i8 -1, i64 %32, i1 false), !tbaa !15
  br label %.loopexit152

33:                                               ; preds = %15
  %34 = load ptr, ptr @stderr, align 8, !tbaa !16
  %35 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %34, ptr noundef nonnull @.str.1) #8
  tail call void @exit(i32 noundef 1) #6
  unreachable

.loopexit152:                                     ; preds = %.lr.ph.preheader, %.preheader151, %7
  %36 = phi i32 [ %24, %.lr.ph.preheader ], [ %24, %.preheader151 ], [ %14, %7 ]
  %.not136 = icmp eq i32 %1, 0
  br i1 %.not136, label %40, label %37

37:                                               ; preds = %.loopexit152
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load i32, ptr %38, align 8, !tbaa !17
  br label %40

40:                                               ; preds = %.loopexit152, %37
  %41 = phi i32 [ %39, %37 ], [ 0, %.loopexit152 ]
  %42 = load i32, ptr %0, align 8, !tbaa !12
  %.not137.not163 = icmp sgt i32 %42, %41
  br i1 %.not137.not163, label %.lr.ph166, label %.thread145

.lr.ph166:                                        ; preds = %40
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !14
  %45 = getelementptr inbounds i8, ptr %0, i64 24
  %46 = load i32, ptr %45, align 8, !tbaa !17
  %47 = getelementptr inbounds i8, ptr %0, i64 28
  %48 = getelementptr inbounds i8, ptr %0, i64 16
  %49 = icmp sgt i32 %42, 0
  %50 = sext i32 %42 to i64
  %51 = sext i32 %41 to i64
  %wide.trip.count192 = zext i32 %42 to i64
  %min.iters.check = icmp ult i32 %42, 9
  %n.mod.vf = and i64 %wide.trip.count192, 7
  %52 = icmp eq i64 %n.mod.vf, 0
  %53 = select i1 %52, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count192, %53
  br label %54

54:                                               ; preds = %.lr.ph166, %.thread
  %indvars.iv194 = phi i64 [ %50, %.lr.ph166 ], [ %indvars.iv.next195, %.thread ]
  %indvars.iv.next195 = add nsw i64 %indvars.iv194, -1
  %55 = getelementptr inbounds %struct.lookahead_action, ptr %44, i64 %indvars.iv.next195
  %56 = load i32, ptr %55, align 4, !tbaa !18
  %57 = icmp eq i32 %56, %46
  br i1 %57, label %58, label %.thread

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %55, i64 4
  %60 = load i32, ptr %59, align 4, !tbaa !20
  %61 = load i32, ptr %47, align 4, !tbaa !21
  %.not138 = icmp eq i32 %60, %61
  br i1 %.not138, label %.preheader150, label %.thread

.preheader150:                                    ; preds = %58
  %62 = load i32, ptr %3, align 4, !tbaa !5
  %63 = icmp sgt i32 %62, 0
  br i1 %63, label %.lr.ph157, label %.preheader149

.lr.ph157:                                        ; preds = %.preheader150
  %64 = load ptr, ptr %48, align 8, !tbaa !22
  %wide.trip.count = zext nneg i32 %62 to i64
  %65 = trunc nsw i64 %indvars.iv.next195 to i32
  br label %86

66:                                               ; preds = %96
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader149, label %86, !llvm.loop !23

.preheader149:                                    ; preds = %66, %.preheader150
  br i1 %49, label %.lr.ph160, label %._crit_edge

.lr.ph160:                                        ; preds = %.preheader149
  %67 = trunc nsw i64 %indvars.iv194 to i32
  %reass.sub = sub i32 %46, %67
  %68 = add i32 %reass.sub, 1
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph160
  %indvars.iv189.ph = phi i64 [ 0, %.lr.ph160 ], [ %n.vec, %middle.block ]
  %.0127158.ph = phi i32 [ 0, %.lr.ph160 ], [ %85, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph160
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %68, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %82, %vector.body ]
  %vec.phi226 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %83, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %69 = or disjoint i64 %index, 4
  %70 = getelementptr inbounds %struct.lookahead_action, ptr %44, i64 %index
  %71 = getelementptr inbounds %struct.lookahead_action, ptr %44, i64 %69
  %wide.vec = load <8 x i32>, ptr %70, align 4, !tbaa !18
  %wide.vec228 = load <8 x i32>, ptr %71, align 4, !tbaa !18
  %strided.vec = shufflevector <8 x i32> %wide.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec229 = shufflevector <8 x i32> %wide.vec228, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %72 = icmp sgt <4 x i32> %strided.vec, <i32 -1, i32 -1, i32 -1, i32 -1>
  %73 = icmp sgt <4 x i32> %strided.vec229, <i32 -1, i32 -1, i32 -1, i32 -1>
  %74 = add <4 x i32> %broadcast.splat, %vec.ind
  %75 = add <4 x i32> %broadcast.splat, %step.add
  %76 = icmp eq <4 x i32> %strided.vec, %74
  %77 = icmp eq <4 x i32> %strided.vec229, %75
  %78 = and <4 x i1> %72, %76
  %79 = and <4 x i1> %73, %77
  %80 = zext <4 x i1> %78 to <4 x i32>
  %81 = zext <4 x i1> %79 to <4 x i32>
  %82 = add <4 x i32> %vec.phi, %80
  %83 = add <4 x i32> %vec.phi226, %81
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %84 = icmp eq i64 %index.next, %n.vec
  br i1 %84, label %middle.block, label %vector.body, !llvm.loop !25

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %83, %82
  %85 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  br label %scalar.ph.preheader

86:                                               ; preds = %.lr.ph157, %66
  %indvars.iv = phi i64 [ 0, %.lr.ph157 ], [ %indvars.iv.next, %66 ]
  %87 = getelementptr inbounds %struct.lookahead_action, ptr %64, i64 %indvars.iv
  %88 = load i32, ptr %87, align 4, !tbaa !18
  %89 = sub nsw i32 %88, %46
  %90 = add nsw i32 %89, %65
  %91 = icmp sgt i32 %90, -1
  %.not139 = icmp slt i32 %90, %42
  %or.cond = and i1 %91, %.not139
  br i1 %or.cond, label %92, label %.thread

92:                                               ; preds = %86
  %93 = zext nneg i32 %90 to i64
  %94 = getelementptr inbounds %struct.lookahead_action, ptr %44, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !18
  %.not140 = icmp eq i32 %88, %95
  br i1 %.not140, label %96, label %.thread

96:                                               ; preds = %92
  %97 = getelementptr inbounds i8, ptr %87, i64 4
  %98 = load i32, ptr %97, align 4, !tbaa !20
  %99 = getelementptr inbounds i8, ptr %94, i64 4
  %100 = load i32, ptr %99, align 4, !tbaa !20
  %.not141 = icmp eq i32 %98, %100
  br i1 %.not141, label %66, label %.thread

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv189 = phi i64 [ %indvars.iv.next190, %scalar.ph ], [ %indvars.iv189.ph, %scalar.ph.preheader ]
  %.0127158 = phi i32 [ %.1128, %scalar.ph ], [ %.0127158.ph, %scalar.ph.preheader ]
  %indvars191 = trunc i64 %indvars.iv189 to i32
  %101 = getelementptr inbounds %struct.lookahead_action, ptr %44, i64 %indvars.iv189
  %102 = load i32, ptr %101, align 4, !tbaa !18
  %103 = icmp sgt i32 %102, -1
  %104 = add i32 %68, %indvars191
  %105 = icmp eq i32 %102, %104
  %narrow = and i1 %103, %105
  %spec.select = zext i1 %narrow to i32
  %.1128 = add nuw nsw i32 %.0127158, %spec.select
  %indvars.iv.next190 = add nuw nsw i64 %indvars.iv189, 1
  %exitcond193.not = icmp eq i64 %indvars.iv.next190, %wide.trip.count192
  br i1 %exitcond193.not, label %._crit_edge, label %scalar.ph, !llvm.loop !28

._crit_edge:                                      ; preds = %scalar.ph, %.preheader149
  %.0127.lcssa = phi i32 [ 0, %.preheader149 ], [ %.1128, %scalar.ph ]
  %106 = icmp eq i32 %.0127.lcssa, %62
  br i1 %106, label %.loopexit.loopexit185, label %.thread

.thread:                                          ; preds = %86, %92, %96, %54, %._crit_edge, %58
  %.not137.not = icmp sgt i64 %indvars.iv.next195, %51
  br i1 %.not137.not, label %54, label %.thread145, !llvm.loop !29

.thread145:                                       ; preds = %.thread, %40
  br i1 %.not136, label %110, label %107

107:                                              ; preds = %.thread145
  %108 = getelementptr inbounds i8, ptr %0, i64 24
  %109 = load i32, ptr %108, align 8, !tbaa !17
  br label %110

110:                                              ; preds = %.thread145, %107
  %111 = phi i32 [ %109, %107 ], [ 0, %.thread145 ]
  %112 = getelementptr inbounds i8, ptr %0, i64 32
  %113 = load i32, ptr %112, align 8, !tbaa !30
  %114 = sub nsw i32 %36, %113
  %115 = icmp slt i32 %111, %114
  br i1 %115, label %.lr.ph177, label %.loopexit

.lr.ph177:                                        ; preds = %110
  %116 = getelementptr inbounds i8, ptr %0, i64 8
  %117 = load ptr, ptr %116, align 8, !tbaa !14
  %118 = getelementptr inbounds i8, ptr %0, i64 16
  %119 = getelementptr inbounds i8, ptr %0, i64 24
  %120 = icmp sgt i32 %42, 0
  %121 = sext i32 %111 to i64
  %122 = sext i32 %114 to i64
  %wide.trip.count205 = zext nneg i32 %42 to i64
  br label %123

123:                                              ; preds = %.lr.ph177, %.thread147
  %indvars.iv207 = phi i64 [ %121, %.lr.ph177 ], [ %indvars.iv.next208, %.thread147 ]
  %124 = getelementptr inbounds %struct.lookahead_action, ptr %117, i64 %indvars.iv207
  %125 = load i32, ptr %124, align 4, !tbaa !18
  %126 = icmp slt i32 %125, 0
  br i1 %126, label %.preheader148, label %.thread147

.preheader148:                                    ; preds = %123
  %127 = load i32, ptr %3, align 4, !tbaa !5
  %128 = icmp sgt i32 %127, 0
  br i1 %128, label %.lr.ph168, label %.preheader

.lr.ph168:                                        ; preds = %.preheader148
  %129 = load ptr, ptr %118, align 8, !tbaa !22
  %130 = load i32, ptr %119, align 8, !tbaa !17
  %wide.trip.count200 = zext nneg i32 %127 to i64
  %131 = trunc nsw i64 %indvars.iv207 to i32
  br label %135

132:                                              ; preds = %141
  %indvars.iv.next198 = add nuw nsw i64 %indvars.iv197, 1
  %exitcond201.not = icmp eq i64 %indvars.iv.next198, %wide.trip.count200
  br i1 %exitcond201.not, label %.preheader, label %135, !llvm.loop !31

.preheader:                                       ; preds = %132, %.preheader148
  br i1 %120, label %.lr.ph170, label %.preheader.._crit_edge171_crit_edge

.preheader.._crit_edge171_crit_edge:              ; preds = %.preheader
  %.pre = trunc nsw i64 %indvars.iv207 to i32
  br label %._crit_edge171

.lr.ph170:                                        ; preds = %.preheader
  %133 = load i32, ptr %119, align 8, !tbaa !17
  %134 = trunc nsw i64 %indvars.iv207 to i32
  br label %146

135:                                              ; preds = %.lr.ph168, %132
  %indvars.iv197 = phi i64 [ 0, %.lr.ph168 ], [ %indvars.iv.next198, %132 ]
  %136 = getelementptr inbounds %struct.lookahead_action, ptr %129, i64 %indvars.iv197
  %137 = load i32, ptr %136, align 4, !tbaa !18
  %138 = sub nsw i32 %137, %130
  %139 = add nsw i32 %138, %131
  %140 = icmp slt i32 %139, 0
  br i1 %140, label %.thread147, label %141

141:                                              ; preds = %135
  %142 = zext nneg i32 %139 to i64
  %143 = getelementptr inbounds %struct.lookahead_action, ptr %117, i64 %142
  %144 = load i32, ptr %143, align 4, !tbaa !18
  %145 = icmp sgt i32 %144, -1
  br i1 %145, label %.thread147, label %132

146:                                              ; preds = %.lr.ph170, %153
  %indvars.iv202 = phi i64 [ 0, %.lr.ph170 ], [ %indvars.iv.next203, %153 ]
  %147 = getelementptr inbounds %struct.lookahead_action, ptr %117, i64 %indvars.iv202
  %148 = load i32, ptr %147, align 4, !tbaa !18
  %149 = trunc nuw nsw i64 %indvars.iv202 to i32
  %150 = sub i32 %149, %134
  %151 = add i32 %150, %133
  %152 = icmp eq i32 %148, %151
  br i1 %152, label %._crit_edge171, label %153

153:                                              ; preds = %146
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond206.not = icmp eq i64 %indvars.iv.next203, %wide.trip.count205
  br i1 %exitcond206.not, label %.loopexit, label %146, !llvm.loop !32

._crit_edge171:                                   ; preds = %146, %.preheader.._crit_edge171_crit_edge
  %.pre-phi = phi i32 [ %.pre, %.preheader.._crit_edge171_crit_edge ], [ %134, %146 ]
  %.3126.lcssa = phi i32 [ 0, %.preheader.._crit_edge171_crit_edge ], [ %149, %146 ]
  %154 = icmp eq i32 %.3126.lcssa, %42
  br i1 %154, label %.loopexit, label %.thread147

.thread147:                                       ; preds = %135, %141, %123, %._crit_edge171
  %indvars.iv.next208 = add nsw i64 %indvars.iv207, 1
  %155 = icmp slt i64 %indvars.iv.next208, %122
  br i1 %155, label %123, label %.loopexit, !llvm.loop !33

.loopexit.loopexit185:                            ; preds = %._crit_edge
  %156 = trunc nsw i64 %indvars.iv.next195 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge171, %.thread147, %153, %.loopexit.loopexit185, %110
  %.3 = phi i32 [ %111, %110 ], [ %156, %.loopexit.loopexit185 ], [ %134, %153 ], [ %.pre-phi, %._crit_edge171 ], [ %114, %.thread147 ]
  %157 = load i32, ptr %3, align 4, !tbaa !5
  %158 = icmp sgt i32 %157, 0
  br i1 %158, label %.lr.ph183, label %._crit_edge184

.lr.ph183:                                        ; preds = %.loopexit
  %159 = getelementptr inbounds i8, ptr %0, i64 16
  %160 = getelementptr inbounds i8, ptr %0, i64 24
  %161 = getelementptr inbounds i8, ptr %0, i64 8
  br label %162

162:                                              ; preds = %.lr.ph183, %176
  %indvars.iv210 = phi i64 [ 0, %.lr.ph183 ], [ %indvars.iv.next211, %176 ]
  %163 = load ptr, ptr %159, align 8, !tbaa !22
  %164 = getelementptr inbounds %struct.lookahead_action, ptr %163, i64 %indvars.iv210
  %165 = load i32, ptr %164, align 4, !tbaa !18
  %166 = load i32, ptr %160, align 8, !tbaa !17
  %167 = sub nsw i32 %165, %166
  %168 = add nsw i32 %167, %.3
  %169 = load ptr, ptr %161, align 8, !tbaa !14
  %170 = sext i32 %168 to i64
  %171 = getelementptr inbounds %struct.lookahead_action, ptr %169, i64 %170
  %172 = load i64, ptr %164, align 4
  store i64 %172, ptr %171, align 4
  %173 = load i32, ptr %0, align 8, !tbaa !12
  %.not144 = icmp slt i32 %168, %173
  br i1 %.not144, label %176, label %174

174:                                              ; preds = %162
  %175 = add nsw i32 %168, 1
  store i32 %175, ptr %0, align 8, !tbaa !12
  br label %176

176:                                              ; preds = %162, %174
  %177 = phi i32 [ %173, %162 ], [ %175, %174 ]
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %178 = load i32, ptr %3, align 4, !tbaa !5
  %179 = sext i32 %178 to i64
  %180 = icmp slt i64 %indvars.iv.next211, %179
  br i1 %180, label %162, label %._crit_edge184, !llvm.loop !34

._crit_edge184:                                   ; preds = %176, %.loopexit
  %181 = phi i32 [ %42, %.loopexit ], [ %177, %176 ]
  br i1 %.not136, label %188, label %182

182:                                              ; preds = %._crit_edge184
  %183 = getelementptr inbounds i8, ptr %0, i64 44
  %184 = load i32, ptr %183, align 4, !tbaa !35
  %185 = add nsw i32 %184, %.3
  %.not143 = icmp slt i32 %185, %181
  br i1 %.not143, label %188, label %186

186:                                              ; preds = %182
  %187 = add nsw i32 %185, 1
  store i32 %187, ptr %0, align 8, !tbaa !12
  br label %188

188:                                              ; preds = %186, %182, %._crit_edge184
  store i32 0, ptr %3, align 4, !tbaa !5
  %189 = getelementptr inbounds i8, ptr %0, i64 24
  %190 = load i32, ptr %189, align 8, !tbaa !17
  %191 = sub nsw i32 %.3, %190
  ret i32 %191
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #5

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

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

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


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