; LLVM IR from bkaradzic/bgfx :: 3rdparty/fcpp (cpp5)

; 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.optab = type { i8, i8, i8 }
%struct.Global = type { i32, i32, ptr, ptr, i32, i32, i32, ptr, i32, i32, i32, i32, [513 x i8], ptr, i8, i8, i8, i8, i8, [32 x i8], ptr, [20 x ptr], ptr, [20 x ptr], [20 x i8], i32, [5 x ptr], [5 x ptr], i8, ptr, [1025 x i8], ptr, [31 x ptr], i32, ptr, [64 x ptr], i32, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, i8, ptr, i64, i8, i8, i8, i8, i8, i8, ptr, [20 x ptr], i32, i8, i8, i8, ptr }

@opdope = external hidden global [31 x i8], align 16
@opname = external hidden global [31 x ptr], align 16

; Function Attrs: nounwind uwtable
define dso_local i32 @fpp_eval(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca [128 x i32], align 16
  %14 = alloca [128 x %struct.optab], align 16
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 512, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 384, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #3
  store i8 1, ptr %16, align 1, !tbaa !9
  %18 = getelementptr inbounds [128 x i32], ptr %13, i64 0, i64 0
  store ptr %18, ptr %7, align 8, !tbaa !5
  %19 = getelementptr inbounds [128 x %struct.optab], ptr %14, i64 0, i64 0
  store ptr %19, ptr %8, align 8, !tbaa !5
  %20 = load ptr, ptr %8, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.optab, ptr %20, i32 0, i32 0
  store i8 30, ptr %21, align 1, !tbaa !10
  %22 = load i8, ptr getelementptr inbounds ([31 x i8], ptr @opdope, i64 0, i64 30), align 2, !tbaa !9
  %23 = load ptr, ptr %8, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.optab, ptr %23, i32 0, i32 1
  store i8 %22, ptr %24, align 1, !tbaa !12
  %25 = load ptr, ptr %8, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.optab, ptr %25, i32 0, i32 2
  store i8 0, ptr %26, align 1, !tbaa !13
  store i32 0, ptr %10, align 4, !tbaa !14
  br label %27

27:                                               ; preds = %277, %85, %2
  %28 = load i8, ptr %16, align 1, !tbaa !9
  %29 = icmp ne i8 %28, 0
  br i1 %29, label %30, label %278

30:                                               ; preds = %27
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = load ptr, ptr %8, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.optab, ptr %32, i32 0, i32 2
  %34 = load i8, ptr %33, align 1, !tbaa !13
  %35 = sext i8 %34 to i32
  %36 = call i32 @fpp_evallex(ptr noundef %31, i32 noundef %35, ptr noundef %6)
  store i32 %36, ptr %15, align 4, !tbaa !14
  %37 = load i32, ptr %15, align 4, !tbaa !14
  %38 = icmp ne i32 %37, 0
  br i1 %38, label %39, label %41

39:                                               ; preds = %30
  %40 = load i32, ptr %15, align 4, !tbaa !14
  store i32 %40, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

41:                                               ; preds = %30
  %42 = load i32, ptr %6, align 4, !tbaa !14
  %43 = icmp eq i32 %42, 4
  br i1 %43, label %44, label %48

44:                                               ; preds = %41
  %45 = load i32, ptr %10, align 4, !tbaa !14
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %48

47:                                               ; preds = %44
  store i32 25, ptr %6, align 4, !tbaa !14
  br label %62

48:                                               ; preds = %44, %41
  %49 = load i32, ptr %6, align 4, !tbaa !14
  %50 = icmp eq i32 %49, 3
  br i1 %50, label %51, label %55

51:                                               ; preds = %48
  %52 = load i32, ptr %10, align 4, !tbaa !14
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  store i32 24, ptr %6, align 4, !tbaa !14
  br label %61

55:                                               ; preds = %51, %48
  %56 = load i32, ptr %6, align 4, !tbaa !14
  %57 = icmp eq i32 %56, 31
  br i1 %57, label %58, label %60

58:                                               ; preds = %55
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %59, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

60:                                               ; preds = %55
  br label %61

61:                                               ; preds = %60, %54
  br label %62

62:                                               ; preds = %61, %47
  %63 = load i32, ptr %6, align 4, !tbaa !14
  %64 = icmp eq i32 %63, 1
  br i1 %64, label %65, label %86

65:                                               ; preds = %62
  %66 = load i32, ptr %10, align 4, !tbaa !14
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %71

68:                                               ; preds = %65
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %69, i32 noundef 11)
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %70, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

71:                                               ; preds = %65
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds [128 x i32], ptr %13, i64 0, i64 127
  %74 = icmp uge ptr %72, %73
  br i1 %74, label %75, label %78

75:                                               ; preds = %71
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %76, i32 noundef 12)
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %77, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

78:                                               ; preds = %71
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.Global, ptr %79, i32 0, i32 36
  %81 = load i32, ptr %80, align 8, !tbaa !16
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds i32, ptr %82, i32 1
  store ptr %83, ptr %7, align 8, !tbaa !5
  store i32 %81, ptr %82, align 4, !tbaa !14
  store i32 1, ptr %10, align 4, !tbaa !14
  br label %84

84:                                               ; preds = %78
  br label %85

85:                                               ; preds = %84
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %27, !llvm.loop !19

86:                                               ; preds = %62
  %87 = load i32, ptr %6, align 4, !tbaa !14
  %88 = icmp sgt i32 %87, 30
  br i1 %88, label %89, label %92

89:                                               ; preds = %86
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %90, i32 noundef 13)
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %91, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

92:                                               ; preds = %86
  br label %93

93:                                               ; preds = %92
  %94 = load i32, ptr %6, align 4, !tbaa !14
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds [31 x i8], ptr @opdope, i64 0, i64 %95
  %97 = load i8, ptr %96, align 1, !tbaa !9
  %98 = sext i8 %97 to i32
  store i32 %98, ptr %9, align 4, !tbaa !14
  %99 = load i32, ptr %10, align 4, !tbaa !14
  %100 = load i32, ptr %9, align 4, !tbaa !14
  %101 = and i32 %100, 1
  %102 = icmp ne i32 %99, %101
  br i1 %102, label %103, label %110

103:                                              ; preds = %93
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = load i32, ptr %6, align 4, !tbaa !14
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %106
  %108 = load ptr, ptr %107, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %104, i32 noundef 14, ptr noundef %108)
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %109, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

110:                                              ; preds = %93
  %111 = load i32, ptr %9, align 4, !tbaa !14
  %112 = and i32 %111, 2
  %113 = ashr i32 %112, 1
  store i32 %113, ptr %10, align 4, !tbaa !14
  br label %114

114:                                              ; preds = %273, %110
  %115 = load i32, ptr %9, align 4, !tbaa !14
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.optab, ptr %116, i32 0, i32 1
  %118 = load i8, ptr %117, align 1, !tbaa !12
  %119 = sext i8 %118 to i32
  %120 = icmp sgt i32 %115, %119
  br i1 %120, label %121, label %213

121:                                              ; preds = %114
  %122 = load i32, ptr %6, align 4, !tbaa !14
  %123 = icmp eq i32 %122, 28
  br i1 %123, label %124, label %125

124:                                              ; preds = %121
  store i32 11, ptr %9, align 4, !tbaa !14
  br label %130

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

128:                                              ; preds = %125
  store i32 28, ptr %9, align 4, !tbaa !14
  br label %129

129:                                              ; preds = %128, %125
  br label %130

130:                                              ; preds = %129, %124
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.optab, ptr %131, i32 0, i32 2
  %133 = load i8, ptr %132, align 1, !tbaa !13
  %134 = sext i8 %133 to i32
  store i32 %134, ptr %11, align 4, !tbaa !14
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.optab, ptr %135, i32 1
  store ptr %136, ptr %8, align 8, !tbaa !5
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = getelementptr inbounds [128 x %struct.optab], ptr %14, i64 0, i64 128
  %139 = icmp uge ptr %137, %138
  br i1 %139, label %140, label %147

140:                                              ; preds = %130
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = load i32, ptr %6, align 4, !tbaa !14
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %143
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %141, i32 noundef 15, ptr noundef %145)
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %146, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

147:                                              ; preds = %130
  %148 = load i32, ptr %6, align 4, !tbaa !14
  %149 = trunc i32 %148 to i8
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.optab, ptr %150, i32 0, i32 0
  store i8 %149, ptr %151, align 1, !tbaa !10
  %152 = load i32, ptr %9, align 4, !tbaa !14
  %153 = trunc i32 %152 to i8
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.optab, ptr %154, i32 0, i32 1
  store i8 %153, ptr %155, align 1, !tbaa !12
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds i32, ptr %156, i64 -1
  %158 = load i32, ptr %157, align 4, !tbaa !14
  %159 = icmp ne i32 %158, 0
  %160 = zext i1 %159 to i32
  store i32 %160, ptr %12, align 4, !tbaa !14
  %161 = load i32, ptr %6, align 4, !tbaa !14
  %162 = icmp eq i32 %161, 19
  br i1 %162, label %163, label %166

163:                                              ; preds = %147
  %164 = load i32, ptr %12, align 4, !tbaa !14
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %166, label %172

166:                                              ; preds = %163, %147
  %167 = load i32, ptr %6, align 4, !tbaa !14
  %168 = icmp eq i32 %167, 20
  br i1 %168, label %169, label %175

169:                                              ; preds = %166
  %170 = load i32, ptr %12, align 4, !tbaa !14
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %175

172:                                              ; preds = %169, %163
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.optab, ptr %173, i32 0, i32 2
  store i8 2, ptr %174, align 1, !tbaa !13
  br label %212

175:                                              ; preds = %169, %166
  %176 = load i32, ptr %6, align 4, !tbaa !14
  %177 = icmp eq i32 %176, 21
  br i1 %177, label %178, label %190

178:                                              ; preds = %175
  %179 = load i32, ptr %11, align 4, !tbaa !14
  %180 = and i32 %179, 2
  %181 = load i32, ptr %12, align 4, !tbaa !14
  %182 = icmp ne i32 %181, 0
  %183 = xor i1 %182, true
  %184 = zext i1 %183 to i64
  %185 = select i1 %183, i32 1, i32 0
  %186 = or i32 %180, %185
  %187 = trunc i32 %186 to i8
  %188 = load ptr, ptr %8, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.optab, ptr %188, i32 0, i32 2
  store i8 %187, ptr %189, align 1, !tbaa !13
  br label %211

190:                                              ; preds = %175
  %191 = load i32, ptr %6, align 4, !tbaa !14
  %192 = icmp eq i32 %191, 22
  br i1 %192, label %193, label %205

193:                                              ; preds = %190
  %194 = load i32, ptr %11, align 4, !tbaa !14
  %195 = and i32 %194, 2
  %196 = load i32, ptr %11, align 4, !tbaa !14
  %197 = and i32 %196, 1
  %198 = icmp ne i32 %197, 0
  %199 = zext i1 %198 to i64
  %200 = select i1 %198, i32 0, i32 1
  %201 = or i32 %195, %200
  %202 = trunc i32 %201 to i8
  %203 = load ptr, ptr %8, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.optab, ptr %203, i32 0, i32 2
  store i8 %202, ptr %204, align 1, !tbaa !13
  br label %210

205:                                              ; preds = %190
  %206 = load i32, ptr %11, align 4, !tbaa !14
  %207 = trunc i32 %206 to i8
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.optab, ptr %208, i32 0, i32 2
  store i8 %207, ptr %209, align 1, !tbaa !13
  br label %210

210:                                              ; preds = %205, %193
  br label %211

211:                                              ; preds = %210, %178
  br label %212

212:                                              ; preds = %211, %172
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %273

213:                                              ; preds = %114
  %214 = load ptr, ptr %8, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.optab, ptr %214, i32 0, i32 2
  %216 = load i8, ptr %215, align 1, !tbaa !13
  %217 = sext i8 %216 to i32
  store i32 %217, ptr %12, align 4, !tbaa !14
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.optab, ptr %218, i32 0, i32 0
  %220 = load i8, ptr %219, align 1, !tbaa !10
  %221 = sext i8 %220 to i32
  store i32 %221, ptr %11, align 4, !tbaa !14
  switch i32 %221, label %264 [
    i32 30, label %222
    i32 28, label %231
    i32 21, label %244
    i32 22, label %245
  ]

222:                                              ; preds = %213
  %223 = load i32, ptr %6, align 4, !tbaa !14
  %224 = icmp eq i32 %223, 0
  br i1 %224, label %225, label %230

225:                                              ; preds = %222
  %226 = load ptr, ptr %7, align 8, !tbaa !5
  %227 = getelementptr inbounds i32, ptr %226, i64 -1
  %228 = load i32, ptr %227, align 4, !tbaa !14
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 %228, ptr %229, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

230:                                              ; preds = %222
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %273

231:                                              ; preds = %213
  %232 = load i32, ptr %6, align 4, !tbaa !14
  %233 = icmp ne i32 %232, 29
  br i1 %233, label %234, label %241

234:                                              ; preds = %231
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = load i32, ptr %6, align 4, !tbaa !14
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %237
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %235, i32 noundef 16, ptr noundef %239)
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %240, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

241:                                              ; preds = %231
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.optab, ptr %242, i32 -1
  store ptr %243, ptr %8, align 8, !tbaa !5
  br label %244

244:                                              ; preds = %241, %213
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %273

245:                                              ; preds = %213
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.optab, ptr %246, i32 -1
  store ptr %247, ptr %8, align 8, !tbaa !5
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.optab, ptr %248, i32 0, i32 0
  %250 = load i8, ptr %249, align 1, !tbaa !10
  %251 = sext i8 %250 to i32
  %252 = icmp ne i32 %251, 21
  br i1 %252, label %253, label %263

253:                                              ; preds = %245
  %254 = load ptr, ptr %4, align 8, !tbaa !5
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.optab, ptr %255, i32 0, i32 0
  %257 = load i8, ptr %256, align 1, !tbaa !10
  %258 = sext i8 %257 to i32
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %259
  %261 = load ptr, ptr %260, align 8, !tbaa !5
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %254, i32 noundef 17, ptr noundef %261)
  %262 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 1, ptr %262, align 4, !tbaa !14
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

263:                                              ; preds = %245
  br label %264

264:                                              ; preds = %263, %213
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.optab, ptr %265, i32 -1
  store ptr %266, ptr %8, align 8, !tbaa !5
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = load ptr, ptr %7, align 8, !tbaa !5
  %269 = load i32, ptr %11, align 4, !tbaa !14
  %270 = load i32, ptr %12, align 4, !tbaa !14
  %271 = call ptr @fpp_evaleval(ptr noundef %267, ptr noundef %268, i32 noundef %269, i32 noundef %270)
  store ptr %271, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %272

272:                                              ; preds = %264
  br label %273

273:                                              ; preds = %272, %244, %230, %212
  %274 = load i8, ptr %16, align 1, !tbaa !9
  %275 = icmp ne i8 %274, 0
  %276 = xor i1 %275, true
  br i1 %276, label %114, label %277, !llvm.loop !21

277:                                              ; preds = %273
  br label %27, !llvm.loop !19

278:                                              ; preds = %27
  store i32 0, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %279

279:                                              ; preds = %278, %253, %234, %225, %140, %103, %89, %75, %68, %58, %39
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 384, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 512, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  %280 = load i32, ptr %3, align 4
  ret i32 %280
}

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

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

declare void @fpp_cerror(ptr noundef, i32 noundef, ...) #2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !7, i64 0}
!11 = !{!"optab", !7, i64 0, !7, i64 1, !7, i64 2}
!12 = !{!11, !7, i64 1}
!13 = !{!11, !7, i64 2}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !15, i64 2904}
!17 = !{!"Global", !15, i64 0, !15, i64 4, !6, i64 8, !6, i64 16, !15, i64 24, !15, i64 28, !15, i64 32, !6, i64 40, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60, !7, i64 64, !6, i64 584, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !7, i64 597, !6, i64 632, !7, i64 640, !6, i64 800, !7, i64 808, !7, i64 968, !15, i64 988, !7, i64 992, !7, i64 1032, !7, i64 1072, !6, i64 1080, !7, i64 1088, !6, i64 2120, !7, i64 2128, !15, i64 2376, !6, i64 2384, !7, i64 2392, !15, i64 2904, !6, i64 2912, !6, i64 2920, !6, i64 2928, !6, i64 2936, !6, i64 2944, !6, i64 2952, !7, i64 2960, !7, i64 2961, !7, i64 2962, !7, i64 2963, !7, i64 2964, !7, i64 2965, !7, i64 2966, !7, i64 2967, !6, i64 2968, !18, i64 2976, !7, i64 2984, !7, i64 2985, !7, i64 2986, !7, i64 2987, !7, i64 2988, !7, i64 2989, !6, i64 2992, !7, i64 3000, !15, i64 3160, !7, i64 3164, !7, i64 3165, !7, i64 3166, !6, i64 3168}
!18 = !{!"long", !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !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.optab = type { i8, i8, i8 }

@opdope = external hidden local_unnamed_addr global [31 x i8], align 16
@opname = external hidden local_unnamed_addr global [31 x ptr], align 16

; Function Attrs: nounwind uwtable
define dso_local i32 @fpp_eval(ptr noundef %0, ptr nocapture noundef writeonly %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca [128 x i32], align 16
  %5 = alloca [128 x %struct.optab], align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #3
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %4) #3
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %5) #3
  store i8 30, ptr %5, align 16, !tbaa !5
  %6 = load i8, ptr getelementptr inbounds (i8, ptr @opdope, i64 30), align 2, !tbaa !9
  %7 = getelementptr inbounds i8, ptr %5, i64 1
  store i8 %6, ptr %7, align 1, !tbaa !10
  %8 = getelementptr inbounds i8, ptr %5, i64 2
  store i8 0, ptr %8, align 2, !tbaa !11
  %9 = call i32 @fpp_evallex(ptr noundef %0, i32 noundef 0, ptr noundef nonnull %3)
  %.not157169 = icmp eq i32 %9, 0
  br i1 %.not157169, label %.lr.ph.lr.ph, label %.loopexit113

.lr.ph.lr.ph:                                     ; preds = %2
  %10 = getelementptr inbounds i8, ptr %4, i64 508
  %11 = getelementptr inbounds i8, ptr %0, i64 2904
  %invariant.gep = getelementptr inbounds i8, ptr %5, i64 2
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.lr.ph, %.outer
  %12 = phi i32 [ 0, %.lr.ph.lr.ph ], [ %107, %.outer ]
  %.074.ph172 = phi i32 [ 0, %.lr.ph.lr.ph ], [ %41, %.outer ]
  %.077.idx.ph171 = phi i64 [ 0, %.lr.ph.lr.ph ], [ %.4.idx.ph, %.outer ]
  %.080.ph170 = phi ptr [ %4, %.lr.ph.lr.ph ], [ %.181148, %.outer ]
  %13 = load i32, ptr %3, align 4, !tbaa !12
  %14 = icmp eq i32 %13, 4
  %15 = icmp eq i32 %.074.ph172, 0
  %or.cond.peel = and i1 %15, %14
  br i1 %or.cond.peel, label %24, label %16

16:                                               ; preds = %.lr.ph
  %17 = icmp eq i32 %13, 3
  %or.cond3.peel = and i1 %15, %17
  br i1 %or.cond3.peel, label %25, label %18

18:                                               ; preds = %16
  switch i32 %13, label %.loopexit214 [
    i32 31, label %.loopexit113.sink.split
    i32 1, label %19
  ]

19:                                               ; preds = %18
  br i1 %15, label %20, label %.loopexit215

20:                                               ; preds = %19
  %.not102.peel = icmp ult ptr %.080.ph170, %10
  br i1 %.not102.peel, label %21, label %.loopexit219

21:                                               ; preds = %20
  %22 = load i32, ptr %11, align 8, !tbaa !14
  store i32 %22, ptr %.080.ph170, align 4, !tbaa !12
  %23 = call i32 @fpp_evallex(ptr noundef %0, i32 noundef %12, ptr noundef nonnull %3)
  %.not.peel = icmp eq i32 %23, 0
  br i1 %.not.peel, label %26, label %.loopexit113

24:                                               ; preds = %.lr.ph
  store i32 25, ptr %3, align 4, !tbaa !12
  br label %.thread104

25:                                               ; preds = %16
  store i32 24, ptr %3, align 4, !tbaa !12
  br label %.thread104

26:                                               ; preds = %21
  %27 = getelementptr inbounds i8, ptr %.080.ph170, i64 4
  %.pre223 = load i32, ptr %3, align 4, !tbaa !12
  switch i32 %.pre223, label %.loopexit214 [
    i32 31, label %.loopexit113.sink.split
    i32 1, label %.loopexit215
  ]

.loopexit215:                                     ; preds = %26, %19
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 11) #3
  br label %.loopexit113.sink.split

.loopexit219:                                     ; preds = %20
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 12) #3
  br label %.loopexit113.sink.split

.loopexit214:                                     ; preds = %26, %18
  %.pr.lcssa = phi i32 [ %13, %18 ], [ %.pre223, %26 ]
  %.074159.lcssa184 = phi i32 [ %.074.ph172, %18 ], [ 1, %26 ]
  %.080158.lcssa177 = phi ptr [ %.080.ph170, %18 ], [ %27, %26 ]
  %28 = icmp sgt i32 %.pr.lcssa, 30
  br i1 %28, label %29, label %.thread104

29:                                               ; preds = %.loopexit214
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 13) #3
  br label %.loopexit113.sink.split

.thread104:                                       ; preds = %25, %24, %.loopexit214
  %.074159188 = phi i32 [ %.074159.lcssa184, %.loopexit214 ], [ 0, %24 ], [ 0, %25 ]
  %.080158181 = phi ptr [ %.080158.lcssa177, %.loopexit214 ], [ %.080.ph170, %24 ], [ %.080.ph170, %25 ]
  %30 = phi i32 [ %.pr.lcssa, %.loopexit214 ], [ 25, %24 ], [ 24, %25 ]
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds [31 x i8], ptr @opdope, i64 0, i64 %31
  %33 = load i8, ptr %32, align 1, !tbaa !9
  %34 = zext i8 %33 to i32
  %35 = and i32 %34, 1
  %.not90 = icmp eq i32 %.074159188, %35
  br i1 %.not90, label %39, label %36

36:                                               ; preds = %.thread104
  %37 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %31
  %38 = load ptr, ptr %37, align 8, !tbaa !18
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 14, ptr noundef %38) #3
  br label %.loopexit113.sink.split

39:                                               ; preds = %.thread104
  %40 = lshr i32 %34, 1
  %41 = and i32 %40, 1
  %.178.ptr161 = getelementptr inbounds i8, ptr %5, i64 %.077.idx.ph171
  %42 = getelementptr inbounds i8, ptr %.178.ptr161, i64 1
  %43 = load i8, ptr %42, align 1, !tbaa !10
  %44 = icmp sgt i8 %33, %43
  br i1 %44, label %._crit_edge, label %.lr.ph165

._crit_edge.loopexit:                             ; preds = %101
  %.pre = load i32, ptr %3, align 4, !tbaa !12
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %39
  %45 = phi i32 [ %30, %39 ], [ %.pre, %._crit_edge.loopexit ]
  %.181.lcssa = phi ptr [ %.080158181, %39 ], [ %102, %._crit_edge.loopexit ]
  %.178.idx.lcssa = phi i64 [ %.077.idx.ph171, %39 ], [ %.3.add, %._crit_edge.loopexit ]
  switch i32 %45, label %.fold.split [
    i32 28, label %47
    i32 21, label %46
  ]

46:                                               ; preds = %._crit_edge
  br label %47

.fold.split:                                      ; preds = %._crit_edge
  br label %47

47:                                               ; preds = %._crit_edge, %.fold.split, %46
  %.176 = phi i8 [ 28, %46 ], [ 11, %._crit_edge ], [ %33, %.fold.split ]
  %gep240 = getelementptr i8, ptr %invariant.gep, i64 %.178.idx.lcssa
  %48 = load i8, ptr %gep240, align 1, !tbaa !11
  %.178.add = add nsw i64 %.178.idx.lcssa, 3
  %.ptr = getelementptr inbounds i8, ptr %5, i64 %.178.add
  %.not93 = icmp slt i64 %.178.idx.lcssa, 381
  br i1 %.not93, label %53, label %49

49:                                               ; preds = %47
  %50 = sext i32 %45 to i64
  %51 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !18
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 15, ptr noundef %52) #3
  br label %.loopexit113.sink.split

53:                                               ; preds = %47
  %54 = trunc i32 %45 to i8
  store i8 %54, ptr %.ptr, align 1, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %.ptr, i64 1
  store i8 %.176, ptr %55, align 1, !tbaa !10
  %56 = getelementptr inbounds i8, ptr %.181.lcssa, i64 -4
  %57 = load i32, ptr %56, align 4, !tbaa !12
  %58 = icmp ne i32 %57, 0
  %59 = icmp ne i32 %45, 19
  %or.cond5 = select i1 %59, i1 true, i1 %58
  %or.cond5.not = xor i1 %or.cond5, true
  %60 = icmp eq i32 %45, 20
  %or.cond7 = select i1 %60, i1 %58, i1 false
  %or.cond103 = select i1 %or.cond5.not, i1 true, i1 %or.cond7
  br i1 %or.cond103, label %61, label %63

61:                                               ; preds = %53
  %62 = getelementptr inbounds i8, ptr %.ptr, i64 2
  store i8 2, ptr %62, align 1, !tbaa !11
  br label %.outer

63:                                               ; preds = %53
  switch i32 %45, label %74 [
    i32 21, label %64
    i32 22, label %70
  ]

64:                                               ; preds = %63
  %65 = and i8 %48, 2
  %66 = xor i1 %58, true
  %67 = zext i1 %66 to i8
  %68 = or disjoint i8 %65, %67
  %69 = getelementptr inbounds i8, ptr %.ptr, i64 2
  store i8 %68, ptr %69, align 1, !tbaa !11
  br label %.outer

70:                                               ; preds = %63
  %71 = and i8 %48, 3
  %72 = xor i8 %71, 1
  %73 = getelementptr inbounds i8, ptr %.ptr, i64 2
  store i8 %72, ptr %73, align 1, !tbaa !11
  br label %.outer

74:                                               ; preds = %63
  %75 = getelementptr inbounds i8, ptr %.ptr, i64 2
  store i8 %48, ptr %75, align 1, !tbaa !11
  br label %.outer

.lr.ph165:                                        ; preds = %39, %101
  %.178.ptr164 = phi ptr [ %.178.ptr, %101 ], [ %.178.ptr161, %39 ]
  %.178.idx163 = phi i64 [ %.3.add, %101 ], [ %.077.idx.ph171, %39 ]
  %.181162 = phi ptr [ %102, %101 ], [ %.080158181, %39 ]
  %76 = getelementptr inbounds i8, ptr %.178.ptr164, i64 2
  %77 = load i8, ptr %76, align 1, !tbaa !11
  %78 = sext i8 %77 to i32
  %79 = load i8, ptr %.178.ptr164, align 1, !tbaa !5
  %80 = sext i8 %79 to i32
  switch i8 %79, label %101 [
    i8 30, label %81
    i8 28, label %87
    i8 21, label %.outer
    i8 22, label %94
  ]

81:                                               ; preds = %.lr.ph165
  %82 = load i32, ptr %3, align 4, !tbaa !12
  %83 = icmp eq i32 %82, 0
  br i1 %83, label %84, label %.outer

84:                                               ; preds = %81
  %85 = getelementptr inbounds i8, ptr %.181162, i64 -4
  %86 = load i32, ptr %85, align 4, !tbaa !12
  br label %.loopexit113.sink.split

87:                                               ; preds = %.lr.ph165
  %88 = load i32, ptr %3, align 4, !tbaa !12
  %.not92 = icmp eq i32 %88, 29
  br i1 %.not92, label %93, label %89

89:                                               ; preds = %87
  %90 = sext i32 %88 to i64
  %91 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %90
  %92 = load ptr, ptr %91, align 8, !tbaa !18
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 16, ptr noundef %92) #3
  br label %.loopexit113.sink.split

93:                                               ; preds = %87
  %.178.add95 = add nsw i64 %.178.idx163, -3
  br label %.outer

94:                                               ; preds = %.lr.ph165
  %.178.add94 = add nsw i64 %.178.idx163, -3
  %.ptr97 = getelementptr inbounds i8, ptr %5, i64 %.178.add94
  %95 = load i8, ptr %.ptr97, align 1, !tbaa !5
  %.not91 = icmp eq i8 %95, 21
  br i1 %.not91, label %101, label %96

96:                                               ; preds = %94
  %97 = sext i8 %95 to i64
  %98 = and i64 %97, 4294967295
  %99 = getelementptr inbounds [31 x ptr], ptr @opname, i64 0, i64 %98
  %100 = load ptr, ptr %99, align 8, !tbaa !18
  call void (ptr, i32, ...) @fpp_cerror(ptr noundef %0, i32 noundef 17, ptr noundef %100) #3
  br label %.loopexit113.sink.split

101:                                              ; preds = %.lr.ph165, %94
  %.3.idx = phi i64 [ %.178.idx163, %.lr.ph165 ], [ %.178.add94, %94 ]
  %.3.add = add nsw i64 %.3.idx, -3
  %102 = call ptr @fpp_evaleval(ptr noundef %0, ptr noundef %.181162, i32 noundef %80, i32 noundef %78)
  %.178.ptr = getelementptr inbounds i8, ptr %5, i64 %.3.add
  %103 = getelementptr inbounds i8, ptr %.178.ptr, i64 1
  %104 = load i8, ptr %103, align 1, !tbaa !10
  %105 = icmp sgt i8 %33, %104
  br i1 %105, label %._crit_edge.loopexit, label %.lr.ph165, !llvm.loop !19

.outer:                                           ; preds = %.lr.ph165, %64, %74, %70, %61, %81, %93
  %.181148 = phi ptr [ %.181162, %93 ], [ %.181162, %81 ], [ %.181.lcssa, %61 ], [ %.181.lcssa, %70 ], [ %.181.lcssa, %74 ], [ %.181.lcssa, %64 ], [ %.181162, %.lr.ph165 ]
  %.4.idx.ph = phi i64 [ %.178.add95, %93 ], [ %.178.idx163, %81 ], [ %.178.add, %61 ], [ %.178.add, %70 ], [ %.178.add, %74 ], [ %.178.add, %64 ], [ %.178.idx163, %.lr.ph165 ]
  %gep = getelementptr i8, ptr %8, i64 %.4.idx.ph
  %106 = load i8, ptr %gep, align 1, !tbaa !11
  %107 = sext i8 %106 to i32
  %108 = call i32 @fpp_evallex(ptr noundef %0, i32 noundef %107, ptr noundef nonnull %3)
  %.not157 = icmp eq i32 %108, 0
  br i1 %.not157, label %.lr.ph, label %.loopexit113, !llvm.loop !21

.loopexit113.sink.split:                          ; preds = %18, %26, %.loopexit215, %.loopexit219, %29, %36, %49, %84, %89, %96
  %.sink = phi i32 [ 1, %96 ], [ 1, %89 ], [ %86, %84 ], [ 1, %49 ], [ 1, %36 ], [ 1, %29 ], [ 1, %.loopexit219 ], [ 1, %.loopexit215 ], [ 1, %26 ], [ 1, %18 ]
  store i32 %.sink, ptr %1, align 4, !tbaa !12
  br label %.loopexit113

.loopexit113:                                     ; preds = %.outer, %21, %.loopexit113.sink.split, %2
  %.073 = phi i32 [ %9, %2 ], [ 0, %.loopexit113.sink.split ], [ %108, %.outer ], [ %23, %21 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #3
  ret i32 %.073
}

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

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

declare void @fpp_cerror(ptr noundef, i32 noundef, ...) local_unnamed_addr #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 0}
!6 = !{!"optab", !7, i64 0, !7, i64 1, !7, i64 2}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!6, !7, i64 1}
!11 = !{!6, !7, i64 2}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 2904}
!15 = !{!"Global", !13, i64 0, !13, i64 4, !16, i64 8, !16, i64 16, !13, i64 24, !13, i64 28, !13, i64 32, !16, i64 40, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !7, i64 64, !16, i64 584, !7, i64 592, !7, i64 593, !7, i64 594, !7, i64 595, !7, i64 596, !7, i64 597, !16, i64 632, !7, i64 640, !16, i64 800, !7, i64 808, !7, i64 968, !13, i64 988, !7, i64 992, !7, i64 1032, !7, i64 1072, !16, i64 1080, !7, i64 1088, !16, i64 2120, !7, i64 2128, !13, i64 2376, !16, i64 2384, !7, i64 2392, !13, i64 2904, !16, i64 2912, !16, i64 2920, !16, i64 2928, !16, i64 2936, !16, i64 2944, !16, i64 2952, !7, i64 2960, !7, i64 2961, !7, i64 2962, !7, i64 2963, !7, i64 2964, !7, i64 2965, !7, i64 2966, !7, i64 2967, !16, i64 2968, !17, i64 2976, !7, i64 2984, !7, i64 2985, !7, i64 2986, !7, i64 2987, !7, i64 2988, !7, i64 2989, !16, i64 2992, !7, i64 3000, !13, i64 3160, !7, i64 3164, !7, i64 3165, !7, i64 3166, !16, i64 3168}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!16, !16, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass