; LLVM IR from caryll/otfcc :: lib/table (CPAL)

; 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.__caryll_vectorinterface_cpal_ColorSet = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_cpal_Palette = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_vectorinterface_cpal_PaletteSet = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_table_CPAL = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.cpal_Color = type { i8, i8, i8, i8, i16 }
%struct.otfcc_Packet = type { i32, i16, i16, i16, i16, ptr }
%struct.otfcc_PacketPiece = type { i32, i32, i32, i32, ptr }
%struct.cpal_Palette = type { %struct.cpal_ColorSet, i32, i32 }
%struct.cpal_ColorSet = type { i64, i64, ptr }
%struct.table_CPAL = type { i16, %struct.cpal_PaletteSet }
%struct.cpal_PaletteSet = type { i64, i64, ptr }

@cpal_iColorSet = external dso_local constant %struct.__caryll_vectorinterface_cpal_ColorSet, align 8
@cpal_iPalette = external dso_local constant %struct.__caryll_elementinterface_cpal_Palette, align 8
@cpal_iPaletteSet = external dso_local constant %struct.__caryll_vectorinterface_cpal_PaletteSet, align 8
@table_iCPAL = external dso_local constant %struct.__caryll_elementinterface_table_CPAL, align 8
@white = external dso_local constant %struct.cpal_Color, align 2

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_readCPAL(ptr noundef byval(%struct.otfcc_Packet) align 8 %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %struct.otfcc_PacketPiece, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i16, align 2
  %15 = alloca i32, align 4
  %16 = alloca i16, align 2
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i16, align 2
  %22 = alloca %struct.cpal_Color, align 2
  %23 = alloca i16, align 2
  %24 = alloca %struct.cpal_Palette, align 8
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i48, align 8
  %28 = alloca i48, align 8
  %29 = alloca i32, align 4
  %30 = alloca i16, align 2
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i16, align 2
  %34 = alloca i16, align 2
  %35 = alloca i32, align 4
  %36 = alloca i16, align 2
  %37 = alloca i16, align 2
  %38 = alloca i16, align 2
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 1, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 1, ptr %8, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %461, %2
  %40 = load i32, ptr %8, align 4, !tbaa !9
  %41 = icmp ne i32 %40, 0
  br i1 %41, label %42, label %51

42:                                               ; preds = %39
  %43 = load i32, ptr %6, align 4, !tbaa !9
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %51

45:                                               ; preds = %42
  %46 = load i32, ptr %7, align 4, !tbaa !9
  %47 = getelementptr inbounds %struct.otfcc_Packet, ptr %0, i32 0, i32 1
  %48 = load i16, ptr %47, align 4, !tbaa !11
  %49 = zext i16 %48 to i32
  %50 = icmp slt i32 %46, %49
  br label %51

51:                                               ; preds = %45, %42, %39
  %52 = phi i1 [ false, %42 ], [ false, %39 ], [ %50, %45 ]
  br i1 %52, label %54, label %53

53:                                               ; preds = %51
  store i32 2, ptr %9, align 4
  br label %468

54:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #5
  %55 = getelementptr inbounds %struct.otfcc_Packet, ptr %0, i32 0, i32 5
  %56 = load ptr, ptr %55, align 8, !tbaa !14
  %57 = load i32, ptr %7, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %56, i64 %58
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %10, ptr align 8 %59, i64 24, i1 false), !tbaa.struct !15
  br label %60

60:                                               ; preds = %453, %54
  %61 = load i32, ptr %6, align 4, !tbaa !9
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %64, label %63

63:                                               ; preds = %60
  store i32 5, ptr %9, align 4
  br label %458

64:                                               ; preds = %60
  %65 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 0
  %66 = load i32, ptr %65, align 8, !tbaa !16
  %67 = icmp eq i32 %66, 1129333068
  br i1 %67, label %68, label %452

68:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %69

69:                                               ; preds = %448, %68
  %70 = load i32, ptr %11, align 4, !tbaa !9
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %73, label %72

72:                                               ; preds = %69
  store i32 8, ptr %9, align 4
  br label %449

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %74 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !18
  store ptr %75, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %76 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 3
  %77 = load i32, ptr %76, align 4, !tbaa !19
  store i32 %77, ptr %13, align 4, !tbaa !9
  %78 = load i32, ptr %13, align 4, !tbaa !9
  %79 = icmp ult i32 %78, 2
  br i1 %79, label %80, label %81

80:                                               ; preds = %73
  br label %442

81:                                               ; preds = %73
  %82 = load ptr, ptr getelementptr inbounds (%struct.__caryll_elementinterface_table_CPAL, ptr @table_iCPAL, i32 0, i32 6), align 8, !tbaa !20
  %83 = call ptr (...) %82()
  store ptr %83, ptr %5, align 8, !tbaa !5
  %84 = load ptr, ptr %12, align 8, !tbaa !5
  %85 = call zeroext i16 @read_16u(ptr noundef %84)
  store i16 %85, ptr %14, align 2, !tbaa !22
  %86 = load i16, ptr %14, align 2, !tbaa !22
  %87 = zext i16 %86 to i32
  %88 = icmp eq i32 %87, 0
  %89 = zext i1 %88 to i64
  %90 = select i1 %88, i32 14, i32 26
  store i32 %90, ptr %15, align 4, !tbaa !9
  %91 = load i32, ptr %13, align 4, !tbaa !9
  %92 = load i32, ptr %15, align 4, !tbaa !9
  %93 = icmp ult i32 %91, %92
  br i1 %93, label %94, label %95

94:                                               ; preds = %81
  br label %442

95:                                               ; preds = %81
  %96 = load i16, ptr %14, align 2, !tbaa !22
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.table_CPAL, ptr %97, i32 0, i32 0
  store i16 %96, ptr %98, align 8, !tbaa !23
  %99 = load ptr, ptr %12, align 8, !tbaa !5
  %100 = getelementptr inbounds i8, ptr %99, i64 2
  %101 = call zeroext i16 @read_16u(ptr noundef %100)
  store i16 %101, ptr %16, align 2, !tbaa !22
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %102, i64 4
  %104 = call zeroext i16 @read_16u(ptr noundef %103)
  store i16 %104, ptr %17, align 2, !tbaa !22
  %105 = load ptr, ptr %12, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i64 6
  %107 = call zeroext i16 @read_16u(ptr noundef %106)
  store i16 %107, ptr %18, align 2, !tbaa !22
  %108 = load ptr, ptr %12, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %108, i64 8
  %110 = call i32 @read_32u(ptr noundef %109)
  store i32 %110, ptr %19, align 4, !tbaa !9
  %111 = load i32, ptr %13, align 4, !tbaa !9
  %112 = load i32, ptr %19, align 4, !tbaa !9
  %113 = load i16, ptr %18, align 2, !tbaa !22
  %114 = zext i16 %113 to i32
  %115 = mul nsw i32 %114, 4
  %116 = add i32 %112, %115
  %117 = icmp ult i32 %111, %116
  br i1 %117, label %118, label %119

118:                                              ; preds = %95
  br label %442

119:                                              ; preds = %95
  %120 = load i32, ptr %13, align 4, !tbaa !9
  %121 = load i32, ptr %15, align 4, !tbaa !9
  %122 = load i16, ptr %17, align 2, !tbaa !22
  %123 = zext i16 %122 to i32
  %124 = mul nsw i32 2, %123
  %125 = add i32 %121, %124
  %126 = icmp ult i32 %120, %125
  br i1 %126, label %127, label %128

127:                                              ; preds = %119
  br label %442

128:                                              ; preds = %119
  %129 = load i16, ptr %18, align 2, !tbaa !22
  %130 = zext i16 %129 to i64
  %131 = mul i64 6, %130
  %132 = call ptr @__caryll_allocate_clean(i64 noundef %131, i64 noundef 55)
  store ptr %132, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #5
  store i16 0, ptr %21, align 2, !tbaa !22
  br label %133

133:                                              ; preds = %193, %128
  %134 = load i16, ptr %21, align 2, !tbaa !22
  %135 = zext i16 %134 to i32
  %136 = load i16, ptr %18, align 2, !tbaa !22
  %137 = zext i16 %136 to i32
  %138 = icmp slt i32 %135, %137
  br i1 %138, label %140, label %139

139:                                              ; preds = %133
  store i32 12, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #5
  br label %196

140:                                              ; preds = %133
  %141 = load ptr, ptr %20, align 8, !tbaa !5
  %142 = load i16, ptr %21, align 2, !tbaa !22
  %143 = zext i16 %142 to i64
  %144 = getelementptr inbounds %struct.cpal_Color, ptr %141, i64 %143
  %145 = getelementptr inbounds %struct.cpal_Color, ptr %22, i32 0, i32 0
  %146 = load ptr, ptr %12, align 8, !tbaa !5
  %147 = load i32, ptr %19, align 4, !tbaa !9
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds i8, ptr %146, i64 %148
  %150 = load i16, ptr %21, align 2, !tbaa !22
  %151 = zext i16 %150 to i32
  %152 = mul nsw i32 %151, 4
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i8, ptr %149, i64 %153
  %155 = getelementptr inbounds i8, ptr %154, i64 2
  %156 = call zeroext i8 @read_8u(ptr noundef %155)
  store i8 %156, ptr %145, align 2, !tbaa !27
  %157 = getelementptr inbounds %struct.cpal_Color, ptr %22, i32 0, i32 1
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  %159 = load i32, ptr %19, align 4, !tbaa !9
  %160 = zext i32 %159 to i64
  %161 = getelementptr inbounds i8, ptr %158, i64 %160
  %162 = load i16, ptr %21, align 2, !tbaa !22
  %163 = zext i16 %162 to i32
  %164 = mul nsw i32 %163, 4
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i8, ptr %161, i64 %165
  %167 = getelementptr inbounds i8, ptr %166, i64 1
  %168 = call zeroext i8 @read_8u(ptr noundef %167)
  store i8 %168, ptr %157, align 1, !tbaa !29
  %169 = getelementptr inbounds %struct.cpal_Color, ptr %22, i32 0, i32 2
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = load i32, ptr %19, align 4, !tbaa !9
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds i8, ptr %170, i64 %172
  %174 = load i16, ptr %21, align 2, !tbaa !22
  %175 = zext i16 %174 to i32
  %176 = mul nsw i32 %175, 4
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i8, ptr %173, i64 %177
  %179 = call zeroext i8 @read_8u(ptr noundef %178)
  store i8 %179, ptr %169, align 2, !tbaa !30
  %180 = getelementptr inbounds %struct.cpal_Color, ptr %22, i32 0, i32 3
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = load i32, ptr %19, align 4, !tbaa !9
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds i8, ptr %181, i64 %183
  %185 = load i16, ptr %21, align 2, !tbaa !22
  %186 = zext i16 %185 to i32
  %187 = mul nsw i32 %186, 4
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i8, ptr %184, i64 %188
  %190 = getelementptr inbounds i8, ptr %189, i64 3
  %191 = call zeroext i8 @read_8u(ptr noundef %190)
  store i8 %191, ptr %180, align 1, !tbaa !31
  %192 = getelementptr inbounds %struct.cpal_Color, ptr %22, i32 0, i32 4
  store i16 -1, ptr %192, align 2, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %144, ptr align 2 %22, i64 6, i1 false), !tbaa.struct !33
  br label %193

193:                                              ; preds = %140
  %194 = load i16, ptr %21, align 2, !tbaa !22
  %195 = add i16 %194, 1
  store i16 %195, ptr %21, align 2, !tbaa !22
  br label %133, !llvm.loop !35

196:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #5
  store i16 0, ptr %23, align 2, !tbaa !22
  br label %197

197:                                              ; preds = %254, %196
  %198 = load i16, ptr %23, align 2, !tbaa !22
  %199 = zext i16 %198 to i32
  %200 = load i16, ptr %17, align 2, !tbaa !22
  %201 = zext i16 %200 to i32
  %202 = icmp slt i32 %199, %201
  br i1 %202, label %204, label %203

203:                                              ; preds = %197
  store i32 15, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #5
  br label %257

204:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #5
  %205 = load ptr, ptr @cpal_iPalette, align 8, !tbaa !37
  call void %205(ptr noundef %24)
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #5
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %206, i64 12
  %208 = load i16, ptr %23, align 2, !tbaa !22
  %209 = zext i16 %208 to i32
  %210 = mul nsw i32 %209, 2
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i8, ptr %207, i64 %211
  %213 = call zeroext i16 @read_16u(ptr noundef %212)
  store i16 %213, ptr %25, align 2, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #5
  store i16 0, ptr %26, align 2, !tbaa !22
  br label %214

214:                                              ; preds = %247, %204
  %215 = load i16, ptr %26, align 2, !tbaa !22
  %216 = zext i16 %215 to i32
  %217 = load i16, ptr %16, align 2, !tbaa !22
  %218 = zext i16 %217 to i32
  %219 = icmp slt i32 %216, %218
  br i1 %219, label %221, label %220

220:                                              ; preds = %214
  store i32 18, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #5
  br label %250

221:                                              ; preds = %214
  %222 = load i16, ptr %25, align 2, !tbaa !22
  %223 = zext i16 %222 to i32
  %224 = load i16, ptr %26, align 2, !tbaa !22
  %225 = zext i16 %224 to i32
  %226 = add nsw i32 %223, %225
  %227 = load i16, ptr %18, align 2, !tbaa !22
  %228 = zext i16 %227 to i32
  %229 = icmp slt i32 %226, %228
  br i1 %229, label %230, label %242

230:                                              ; preds = %221
  %231 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_cpal_ColorSet, ptr @cpal_iColorSet, i32 0, i32 13), align 8, !tbaa !39
  %232 = getelementptr inbounds %struct.cpal_Palette, ptr %24, i32 0, i32 0
  %233 = load ptr, ptr %20, align 8, !tbaa !5
  %234 = load i16, ptr %26, align 2, !tbaa !22
  %235 = zext i16 %234 to i32
  %236 = load i16, ptr %25, align 2, !tbaa !22
  %237 = zext i16 %236 to i32
  %238 = add nsw i32 %235, %237
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds %struct.cpal_Color, ptr %233, i64 %239
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 2 %240, i64 6, i1 false)
  %241 = load i48, ptr %27, align 8
  call void %231(ptr noundef %232, i48 %241)
  br label %246

242:                                              ; preds = %221
  %243 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_cpal_ColorSet, ptr @cpal_iColorSet, i32 0, i32 13), align 8, !tbaa !39
  %244 = getelementptr inbounds %struct.cpal_Palette, ptr %24, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %28, ptr align 2 @white, i64 6, i1 false)
  %245 = load i48, ptr %28, align 8
  call void %243(ptr noundef %244, i48 %245)
  br label %246

246:                                              ; preds = %242, %230
  br label %247

247:                                              ; preds = %246
  %248 = load i16, ptr %26, align 2, !tbaa !22
  %249 = add i16 %248, 1
  store i16 %249, ptr %26, align 2, !tbaa !22
  br label %214, !llvm.loop !41

250:                                              ; preds = %220
  %251 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_cpal_PaletteSet, ptr @cpal_iPaletteSet, i32 0, i32 13), align 8, !tbaa !42
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.table_CPAL, ptr %252, i32 0, i32 1
  call void %251(ptr noundef %253, ptr noundef byval(%struct.cpal_Palette) align 8 %24)
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #5
  br label %254

254:                                              ; preds = %250
  %255 = load i16, ptr %23, align 2, !tbaa !22
  %256 = add i16 %255, 1
  store i16 %256, ptr %23, align 2, !tbaa !22
  br label %197, !llvm.loop !44

257:                                              ; preds = %203
  %258 = load i16, ptr %14, align 2, !tbaa !22
  %259 = zext i16 %258 to i32
  %260 = icmp sgt i32 %259, 0
  br i1 %260, label %261, label %439

261:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %262 = load ptr, ptr %12, align 8, !tbaa !5
  %263 = getelementptr inbounds i8, ptr %262, i64 16
  %264 = load i16, ptr %17, align 2, !tbaa !22
  %265 = zext i16 %264 to i32
  %266 = mul nsw i32 2, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i8, ptr %263, i64 %267
  %269 = call i32 @read_32u(ptr noundef %268)
  store i32 %269, ptr %29, align 4, !tbaa !9
  %270 = load i32, ptr %29, align 4, !tbaa !9
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %312

272:                                              ; preds = %261
  %273 = load i32, ptr %13, align 4, !tbaa !9
  %274 = load i32, ptr %29, align 4, !tbaa !9
  %275 = load i16, ptr %17, align 2, !tbaa !22
  %276 = zext i16 %275 to i32
  %277 = mul nsw i32 4, %276
  %278 = add i32 %274, %277
  %279 = icmp uge i32 %273, %278
  br i1 %279, label %280, label %312

280:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #5
  store i16 0, ptr %30, align 2, !tbaa !22
  br label %281

281:                                              ; preds = %308, %280
  %282 = load i16, ptr %30, align 2, !tbaa !22
  %283 = zext i16 %282 to i32
  %284 = load i16, ptr %17, align 2, !tbaa !22
  %285 = zext i16 %284 to i32
  %286 = icmp slt i32 %283, %285
  br i1 %286, label %288, label %287

287:                                              ; preds = %281
  store i32 21, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #5
  br label %311

288:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %289 = load ptr, ptr %12, align 8, !tbaa !5
  %290 = load i16, ptr %30, align 2, !tbaa !22
  %291 = zext i16 %290 to i32
  %292 = mul nsw i32 %291, 4
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %289, i64 %293
  %295 = load i32, ptr %29, align 4, !tbaa !9
  %296 = zext i32 %295 to i64
  %297 = getelementptr inbounds i8, ptr %294, i64 %296
  %298 = call i32 @read_32u(ptr noundef %297)
  store i32 %298, ptr %31, align 4, !tbaa !9
  %299 = load i32, ptr %31, align 4, !tbaa !9
  %300 = load ptr, ptr %5, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.table_CPAL, ptr %300, i32 0, i32 1
  %302 = getelementptr inbounds %struct.cpal_PaletteSet, ptr %301, i32 0, i32 2
  %303 = load ptr, ptr %302, align 8, !tbaa !45
  %304 = load i16, ptr %30, align 2, !tbaa !22
  %305 = zext i16 %304 to i64
  %306 = getelementptr inbounds %struct.cpal_Palette, ptr %303, i64 %305
  %307 = getelementptr inbounds %struct.cpal_Palette, ptr %306, i32 0, i32 1
  store i32 %299, ptr %307, align 8, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %308

308:                                              ; preds = %288
  %309 = load i16, ptr %30, align 2, !tbaa !22
  %310 = add i16 %309, 1
  store i16 %310, ptr %30, align 2, !tbaa !22
  br label %281, !llvm.loop !48

311:                                              ; preds = %287
  br label %312

312:                                              ; preds = %311, %272, %261
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %313 = load ptr, ptr %12, align 8, !tbaa !5
  %314 = getelementptr inbounds i8, ptr %313, i64 20
  %315 = load i16, ptr %17, align 2, !tbaa !22
  %316 = zext i16 %315 to i32
  %317 = mul nsw i32 2, %316
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i8, ptr %314, i64 %318
  %320 = call i32 @read_32u(ptr noundef %319)
  store i32 %320, ptr %32, align 4, !tbaa !9
  %321 = load i32, ptr %32, align 4, !tbaa !9
  %322 = icmp ne i32 %321, 0
  br i1 %322, label %323, label %364

323:                                              ; preds = %312
  %324 = load i32, ptr %13, align 4, !tbaa !9
  %325 = load i32, ptr %32, align 4, !tbaa !9
  %326 = load i16, ptr %17, align 2, !tbaa !22
  %327 = zext i16 %326 to i32
  %328 = mul nsw i32 2, %327
  %329 = add i32 %325, %328
  %330 = icmp uge i32 %324, %329
  br i1 %330, label %331, label %364

331:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #5
  store i16 0, ptr %33, align 2, !tbaa !22
  br label %332

332:                                              ; preds = %360, %331
  %333 = load i16, ptr %33, align 2, !tbaa !22
  %334 = zext i16 %333 to i32
  %335 = load i16, ptr %17, align 2, !tbaa !22
  %336 = zext i16 %335 to i32
  %337 = icmp slt i32 %334, %336
  br i1 %337, label %339, label %338

338:                                              ; preds = %332
  store i32 24, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #5
  br label %363

339:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #5
  %340 = load ptr, ptr %12, align 8, !tbaa !5
  %341 = load i16, ptr %33, align 2, !tbaa !22
  %342 = zext i16 %341 to i32
  %343 = mul nsw i32 %342, 2
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i8, ptr %340, i64 %344
  %346 = load i32, ptr %32, align 4, !tbaa !9
  %347 = zext i32 %346 to i64
  %348 = getelementptr inbounds i8, ptr %345, i64 %347
  %349 = call zeroext i16 @read_16u(ptr noundef %348)
  store i16 %349, ptr %34, align 2, !tbaa !22
  %350 = load i16, ptr %34, align 2, !tbaa !22
  %351 = zext i16 %350 to i32
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.table_CPAL, ptr %352, i32 0, i32 1
  %354 = getelementptr inbounds %struct.cpal_PaletteSet, ptr %353, i32 0, i32 2
  %355 = load ptr, ptr %354, align 8, !tbaa !45
  %356 = load i16, ptr %33, align 2, !tbaa !22
  %357 = zext i16 %356 to i64
  %358 = getelementptr inbounds %struct.cpal_Palette, ptr %355, i64 %357
  %359 = getelementptr inbounds %struct.cpal_Palette, ptr %358, i32 0, i32 2
  store i32 %351, ptr %359, align 4, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #5
  br label %360

360:                                              ; preds = %339
  %361 = load i16, ptr %33, align 2, !tbaa !22
  %362 = add i16 %361, 1
  store i16 %362, ptr %33, align 2, !tbaa !22
  br label %332, !llvm.loop !50

363:                                              ; preds = %338
  br label %364

364:                                              ; preds = %363, %323, %312
  %365 = load i16, ptr %14, align 2, !tbaa !22
  %366 = zext i16 %365 to i32
  %367 = icmp sgt i32 %366, 0
  br i1 %367, label %368, label %438

368:                                              ; preds = %364
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %369 = load ptr, ptr %12, align 8, !tbaa !5
  %370 = getelementptr inbounds i8, ptr %369, i64 24
  %371 = load i16, ptr %17, align 2, !tbaa !22
  %372 = zext i16 %371 to i32
  %373 = mul nsw i32 2, %372
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i8, ptr %370, i64 %374
  %376 = call i32 @read_32u(ptr noundef %375)
  store i32 %376, ptr %35, align 4, !tbaa !9
  %377 = load i32, ptr %35, align 4, !tbaa !9
  %378 = icmp ne i32 %377, 0
  br i1 %378, label %379, label %437

379:                                              ; preds = %368
  %380 = load i32, ptr %13, align 4, !tbaa !9
  %381 = load i32, ptr %35, align 4, !tbaa !9
  %382 = load i16, ptr %16, align 2, !tbaa !22
  %383 = zext i16 %382 to i32
  %384 = mul nsw i32 4, %383
  %385 = add i32 %381, %384
  %386 = icmp uge i32 %380, %385
  br i1 %386, label %387, label %437

387:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 2, ptr %36) #5
  store i16 0, ptr %36, align 2, !tbaa !22
  br label %388

388:                                              ; preds = %433, %387
  %389 = load i16, ptr %36, align 2, !tbaa !22
  %390 = zext i16 %389 to i32
  %391 = load i16, ptr %16, align 2, !tbaa !22
  %392 = zext i16 %391 to i32
  %393 = icmp slt i32 %390, %392
  br i1 %393, label %395, label %394

394:                                              ; preds = %388
  store i32 27, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %36) #5
  br label %436

395:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 2, ptr %37) #5
  %396 = load ptr, ptr %12, align 8, !tbaa !5
  %397 = load i16, ptr %36, align 2, !tbaa !22
  %398 = zext i16 %397 to i32
  %399 = mul nsw i32 %398, 2
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i8, ptr %396, i64 %400
  %402 = load i32, ptr %35, align 4, !tbaa !9
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds i8, ptr %401, i64 %403
  %405 = call zeroext i16 @read_16u(ptr noundef %404)
  store i16 %405, ptr %37, align 2, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %38) #5
  store i16 0, ptr %38, align 2, !tbaa !22
  br label %406

406:                                              ; preds = %429, %395
  %407 = load i16, ptr %38, align 2, !tbaa !22
  %408 = zext i16 %407 to i32
  %409 = load i16, ptr %17, align 2, !tbaa !22
  %410 = zext i16 %409 to i32
  %411 = icmp slt i32 %408, %410
  br i1 %411, label %413, label %412

412:                                              ; preds = %406
  store i32 30, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %38) #5
  br label %432

413:                                              ; preds = %406
  %414 = load i16, ptr %37, align 2, !tbaa !22
  %415 = load ptr, ptr %5, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.table_CPAL, ptr %415, i32 0, i32 1
  %417 = getelementptr inbounds %struct.cpal_PaletteSet, ptr %416, i32 0, i32 2
  %418 = load ptr, ptr %417, align 8, !tbaa !45
  %419 = load i16, ptr %38, align 2, !tbaa !22
  %420 = zext i16 %419 to i64
  %421 = getelementptr inbounds %struct.cpal_Palette, ptr %418, i64 %420
  %422 = getelementptr inbounds %struct.cpal_Palette, ptr %421, i32 0, i32 0
  %423 = getelementptr inbounds %struct.cpal_ColorSet, ptr %422, i32 0, i32 2
  %424 = load ptr, ptr %423, align 8, !tbaa !51
  %425 = load i16, ptr %36, align 2, !tbaa !22
  %426 = zext i16 %425 to i64
  %427 = getelementptr inbounds %struct.cpal_Color, ptr %424, i64 %426
  %428 = getelementptr inbounds %struct.cpal_Color, ptr %427, i32 0, i32 4
  store i16 %414, ptr %428, align 2, !tbaa !32
  br label %429

429:                                              ; preds = %413
  %430 = load i16, ptr %38, align 2, !tbaa !22
  %431 = add i16 %430, 1
  store i16 %431, ptr %38, align 2, !tbaa !22
  br label %406, !llvm.loop !52

432:                                              ; preds = %412
  call void @llvm.lifetime.end.p0(i64 2, ptr %37) #5
  br label %433

433:                                              ; preds = %432
  %434 = load i16, ptr %36, align 2, !tbaa !22
  %435 = add i16 %434, 1
  store i16 %435, ptr %36, align 2, !tbaa !22
  br label %388, !llvm.loop !53

436:                                              ; preds = %394
  br label %437

437:                                              ; preds = %436, %379, %368
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %438

438:                                              ; preds = %437, %364
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %439

439:                                              ; preds = %438, %257
  %440 = load ptr, ptr %20, align 8, !tbaa !5
  call void @free(ptr noundef %440) #5
  store ptr null, ptr %20, align 8, !tbaa !5
  %441 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %441, ptr %3, align 8
  store i32 1, ptr %9, align 4
  br label %445

442:                                              ; preds = %127, %118, %94, %80
  %443 = load ptr, ptr getelementptr inbounds (%struct.__caryll_elementinterface_table_CPAL, ptr @table_iCPAL, i32 0, i32 7), align 8, !tbaa !54
  %444 = load ptr, ptr %5, align 8, !tbaa !5
  call void %443(ptr noundef %444)
  store ptr null, ptr %5, align 8, !tbaa !5
  store i32 0, ptr %9, align 4
  br label %445

445:                                              ; preds = %442, %439
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %446 = load i32, ptr %9, align 4
  switch i32 %446, label %449 [
    i32 0, label %447
  ]

447:                                              ; preds = %445
  br label %448

448:                                              ; preds = %447
  store i32 0, ptr %11, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %69, !llvm.loop !55

449:                                              ; preds = %445, %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  %450 = load i32, ptr %9, align 4
  switch i32 %450, label %458 [
    i32 8, label %451
  ]

451:                                              ; preds = %449
  br label %452

452:                                              ; preds = %451, %64
  br label %453

453:                                              ; preds = %452
  %454 = load i32, ptr %6, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  %456 = xor i1 %455, true
  %457 = zext i1 %456 to i32
  store i32 %457, ptr %6, align 4, !tbaa !9
  br label %60, !llvm.loop !56

458:                                              ; preds = %449, %63
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #5
  %459 = load i32, ptr %9, align 4
  switch i32 %459, label %468 [
    i32 5, label %460
  ]

460:                                              ; preds = %458
  br label %461

461:                                              ; preds = %460
  %462 = load i32, ptr %6, align 4, !tbaa !9
  %463 = icmp ne i32 %462, 0
  %464 = xor i1 %463, true
  %465 = zext i1 %464 to i32
  store i32 %465, ptr %6, align 4, !tbaa !9
  %466 = load i32, ptr %7, align 4, !tbaa !9
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr %7, align 4, !tbaa !9
  br label %39, !llvm.loop !57

468:                                              ; preds = %458, %53
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %469 = load i32, ptr %9, align 4
  switch i32 %469, label %471 [
    i32 2, label %470
  ]

470:                                              ; preds = %468
  store ptr null, ptr %3, align 8
  store i32 1, ptr %9, align 4
  br label %471

471:                                              ; preds = %470, %468
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  %472 = load ptr, ptr %3, align 8
  ret ptr %472
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @read_16u(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_32u(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__caryll_allocate_clean(i64 noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i8 @read_8u(ptr noundef) #3

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

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

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 4}
!12 = !{!"", !10, i64 0, !13, i64 4, !13, i64 6, !13, i64 8, !13, i64 10, !6, i64 16}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !6, i64 16}
!15 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 8, !5}
!16 = !{!17, !10, i64 0}
!17 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16}
!18 = !{!17, !6, i64 16}
!19 = !{!17, !10, i64 12}
!20 = !{!21, !6, i64 48}
!21 = !{!"__caryll_elementinterface_table_CPAL", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!22 = !{!13, !13, i64 0}
!23 = !{!24, !13, i64 0}
!24 = !{!"", !13, i64 0, !25, i64 8}
!25 = !{!"", !26, i64 0, !26, i64 8, !6, i64 16}
!26 = !{!"long", !7, i64 0}
!27 = !{!28, !7, i64 0}
!28 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !13, i64 4}
!29 = !{!28, !7, i64 1}
!30 = !{!28, !7, i64 2}
!31 = !{!28, !7, i64 3}
!32 = !{!28, !13, i64 4}
!33 = !{i64 0, i64 1, !34, i64 1, i64 1, !34, i64 2, i64 1, !34, i64 3, i64 1, !34, i64 4, i64 2, !22}
!34 = !{!7, !7, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!38, !6, i64 0}
!38 = !{!"__caryll_elementinterface_cpal_Palette", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!39 = !{!40, !6, i64 104}
!40 = !{!"__caryll_vectorinterface_cpal_ColorSet", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144}
!41 = distinct !{!41, !36}
!42 = !{!43, !6, i64 104}
!43 = !{!"__caryll_vectorinterface_cpal_PaletteSet", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144}
!44 = distinct !{!44, !36}
!45 = !{!24, !6, i64 24}
!46 = !{!47, !10, i64 24}
!47 = !{!"", !25, i64 0, !10, i64 24, !10, i64 28}
!48 = distinct !{!48, !36}
!49 = !{!47, !10, i64 28}
!50 = distinct !{!50, !36}
!51 = !{!47, !6, i64 16}
!52 = distinct !{!52, !36}
!53 = distinct !{!53, !36}
!54 = !{!21, !6, i64 56}
!55 = distinct !{!55, !36}
!56 = distinct !{!56, !36}
!57 = distinct !{!57, !36}


; 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.__caryll_vectorinterface_cpal_ColorSet = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_cpal_Palette = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_vectorinterface_cpal_PaletteSet = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_table_CPAL = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.cpal_Color = type { i8, i8, i8, i8, i16 }
%struct.otfcc_Packet = type { i32, i16, i16, i16, i16, ptr }
%struct.cpal_Palette = type { %struct.cpal_ColorSet, i32, i32 }
%struct.cpal_ColorSet = type { i64, i64, ptr }
%struct.otfcc_PacketPiece = type { i32, i32, i32, i32, ptr }

@cpal_iColorSet = external dso_local local_unnamed_addr constant %struct.__caryll_vectorinterface_cpal_ColorSet, align 8
@cpal_iPalette = external dso_local local_unnamed_addr constant %struct.__caryll_elementinterface_cpal_Palette, align 8
@cpal_iPaletteSet = external dso_local local_unnamed_addr constant %struct.__caryll_vectorinterface_cpal_PaletteSet, align 8
@table_iCPAL = external dso_local local_unnamed_addr constant %struct.__caryll_elementinterface_table_CPAL, align 8
@white = external dso_local local_unnamed_addr constant %struct.cpal_Color, align 2

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_readCPAL(ptr nocapture noundef readonly byval(%struct.otfcc_Packet) align 8 %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
  %3 = alloca %struct.cpal_Palette, align 8
  %4 = getelementptr inbounds i8, ptr %0, i64 4
  %5 = load i16, ptr %4, align 4
  %.not = icmp eq i16 %5, 0
  br i1 %.not, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 16
  %7 = load ptr, ptr getelementptr inbounds (i8, ptr @table_iCPAL, i64 48), align 8
  %8 = load ptr, ptr getelementptr inbounds (i8, ptr @table_iCPAL, i64 56), align 8
  %9 = load ptr, ptr @cpal_iPalette, align 8
  %10 = load ptr, ptr getelementptr inbounds (i8, ptr @cpal_iColorSet, i64 104), align 8
  %.0.copyload = load i48, ptr @white, align 2
  %11 = load ptr, ptr getelementptr inbounds (i8, ptr @cpal_iPaletteSet, i64 104), align 8
  %12 = load ptr, ptr %6, align 8, !tbaa !5
  %13 = zext i16 %5 to i64
  br label %14

14:                                               ; preds = %.lr.ph, %.thread188
  %indvars.iv301 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next302, %.thread188 ]
  %15 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %12, i64 %indvars.iv301
  %.sroa.0104.0.copyload = load i32, ptr %15, align 8, !tbaa !12
  %.not333 = icmp eq i32 %.sroa.0104.0.copyload, 1129333068
  br i1 %.not333, label %.split.us, label %.thread188

.split.us:                                        ; preds = %14
  %.sroa.4106.0..sroa_idx.le = getelementptr inbounds i8, ptr %15, i64 12
  %.sroa.4106.0.copyload.le = load i32, ptr %.sroa.4106.0..sroa_idx.le, align 4, !tbaa !12
  %.sroa.5107.0..sroa_idx.le = getelementptr inbounds i8, ptr %15, i64 16
  %.sroa.5107.0.copyload.le = load ptr, ptr %.sroa.5107.0..sroa_idx.le, align 8, !tbaa !13
  %16 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 2
  %17 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 4
  %18 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 6
  %19 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 8
  %20 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 12
  %21 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 16
  %22 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 20
  %23 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 24
  %24 = icmp ult i32 %.sroa.4106.0.copyload.le, 2
  br i1 %24, label %.preheader202.us.us, label %.preheader202.us

.preheader202.us.us:                              ; preds = %.split.us
  tail call void %8(ptr noundef null) #4
  br label %.critedge

.preheader202.us:                                 ; preds = %.split.us
  %25 = tail call ptr (...) %7() #4
  %26 = tail call zeroext i16 @read_16u(ptr noundef %.sroa.5107.0.copyload.le)
  %27 = icmp eq i16 %26, 0
  %28 = select i1 %27, i32 14, i32 26
  %29 = icmp ult i32 %.sroa.4106.0.copyload.le, %28
  br i1 %29, label %.thread185.loopexit.split.us246, label %30

30:                                               ; preds = %.preheader202.us
  store i16 %26, ptr %25, align 8, !tbaa !14
  %31 = tail call zeroext i16 @read_16u(ptr noundef nonnull %16)
  %32 = tail call zeroext i16 @read_16u(ptr noundef nonnull %17)
  %33 = tail call zeroext i16 @read_16u(ptr noundef nonnull %18)
  %34 = tail call i32 @read_32u(ptr noundef nonnull %19)
  %35 = zext i16 %33 to i32
  %36 = shl nuw nsw i32 %35, 2
  %37 = add i32 %36, %34
  %38 = icmp ult i32 %.sroa.4106.0.copyload.le, %37
  br i1 %38, label %.thread185.loopexit.split.us246, label %39

39:                                               ; preds = %30
  %40 = zext i16 %32 to i32
  %41 = shl nuw nsw i32 %40, 1
  %42 = add nuw nsw i32 %41, %28
  %43 = icmp ult i32 %.sroa.4106.0.copyload.le, %42
  br i1 %43, label %.thread185.loopexit.split.us246, label %44

44:                                               ; preds = %39
  %45 = zext i16 %33 to i64
  %46 = mul nuw nsw i64 %45, 6
  %47 = tail call ptr @__caryll_allocate_clean(i64 noundef %46, i64 noundef 55)
  %.not263 = icmp eq i16 %33, 0
  br i1 %.not263, label %.preheader201.us, label %.lr.ph.us

._crit_edge227.us:                                ; preds = %._crit_edge.us, %.preheader201.us
  br i1 %27, label %.loopexit.us, label %48

48:                                               ; preds = %._crit_edge227.us
  %49 = zext nneg i32 %41 to i64
  %50 = getelementptr inbounds i8, ptr %21, i64 %49
  %51 = call i32 @read_32u(ptr noundef nonnull %50)
  %.not171.us = icmp eq i32 %51, 0
  br i1 %.not171.us, label %.loopexit200.us, label %52

52:                                               ; preds = %48
  %53 = shl nuw nsw i32 %40, 2
  %54 = add i32 %51, %53
  %.not172.us = icmp uge i32 %.sroa.4106.0.copyload.le, %54
  %55 = icmp ne i16 %32, 0
  %or.cond262 = select i1 %.not172.us, i1 %55, i1 false
  br i1 %or.cond262, label %.lr.ph229.us, label %.loopexit200.us

56:                                               ; preds = %.lr.ph229.us, %56
  %indvars.iv281 = phi i64 [ 0, %.lr.ph229.us ], [ %indvars.iv.next282, %56 ]
  %57 = shl nuw nsw i64 %indvars.iv281, 2
  %gep.us = getelementptr inbounds i8, ptr %invariant.gep.us, i64 %57
  %58 = call i32 @read_32u(ptr noundef nonnull %gep.us)
  %59 = load ptr, ptr %123, align 8, !tbaa !18
  %60 = getelementptr inbounds %struct.cpal_Palette, ptr %59, i64 %indvars.iv281, i32 1
  store i32 %58, ptr %60, align 8, !tbaa !19
  %indvars.iv.next282 = add nuw nsw i64 %indvars.iv281, 1
  %exitcond285.not = icmp eq i64 %indvars.iv.next282, %wide.trip.count284
  br i1 %exitcond285.not, label %.loopexit200.us, label %56, !llvm.loop !21

.loopexit200.us:                                  ; preds = %56, %52, %48
  %61 = getelementptr inbounds i8, ptr %22, i64 %49
  %62 = call i32 @read_32u(ptr noundef nonnull %61)
  %.not173.us = icmp ne i32 %62, 0
  %63 = add i32 %62, %41
  %.not174.us = icmp uge i32 %.sroa.4106.0.copyload.le, %63
  %or.cond181.us.not266 = and i1 %.not173.us, %.not174.us
  %64 = icmp ne i16 %32, 0
  %or.cond261 = select i1 %or.cond181.us.not266, i1 %64, i1 false
  br i1 %or.cond261, label %.lr.ph231.us, label %.loopexit198.us

65:                                               ; preds = %.lr.ph231.us, %65
  %indvars.iv286 = phi i64 [ 0, %.lr.ph231.us ], [ %indvars.iv.next287, %65 ]
  %66 = shl nuw nsw i64 %indvars.iv286, 1
  %gep233.us = getelementptr inbounds i8, ptr %invariant.gep232.us, i64 %66
  %67 = call zeroext i16 @read_16u(ptr noundef nonnull %gep233.us)
  %68 = zext i16 %67 to i32
  %69 = load ptr, ptr %125, align 8, !tbaa !18
  %70 = getelementptr inbounds %struct.cpal_Palette, ptr %69, i64 %indvars.iv286, i32 2
  store i32 %68, ptr %70, align 4, !tbaa !23
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %exitcond290.not = icmp eq i64 %indvars.iv.next287, %wide.trip.count289
  br i1 %exitcond290.not, label %.loopexit198.us, label %65, !llvm.loop !24

.loopexit198.us:                                  ; preds = %65, %.loopexit200.us
  %71 = getelementptr inbounds i8, ptr %23, i64 %49
  %72 = call i32 @read_32u(ptr noundef nonnull %71)
  %.not175.us = icmp eq i32 %72, 0
  br i1 %.not175.us, label %.loopexit.us, label %73

73:                                               ; preds = %.loopexit198.us
  %74 = zext i16 %31 to i32
  %75 = shl nuw nsw i32 %74, 2
  %76 = add i32 %72, %75
  %.not176.us = icmp uge i32 %.sroa.4106.0.copyload.le, %76
  %77 = icmp ne i16 %31, 0
  %or.cond = select i1 %.not176.us, i1 %77, i1 false
  br i1 %or.cond, label %.lr.ph239.us, label %.loopexit.us

78:                                               ; preds = %.lr.ph239.us, %._crit_edge237.us
  %indvars.iv296 = phi i64 [ 0, %.lr.ph239.us ], [ %indvars.iv.next297, %._crit_edge237.us ]
  %79 = shl nuw nsw i64 %indvars.iv296, 1
  %gep241.us = getelementptr inbounds i8, ptr %invariant.gep240.us, i64 %79
  %80 = call zeroext i16 @read_16u(ptr noundef nonnull %gep241.us)
  br i1 %.not264, label %._crit_edge237.us, label %.lr.ph236.us

._crit_edge237.us.loopexit.unr-lcssa:             ; preds = %.lr.ph236.us.new, %.lr.ph236.us
  %indvars.iv291.unr = phi i64 [ 0, %.lr.ph236.us ], [ %indvars.iv.next292.3, %.lr.ph236.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge237.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge237.us.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv291.epil = phi i64 [ %indvars.iv.next292.epil, %.epil.preheader ], [ %indvars.iv291.unr, %._crit_edge237.us.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge237.us.loopexit.unr-lcssa ]
  %81 = getelementptr inbounds %struct.cpal_Palette, ptr %126, i64 %indvars.iv291.epil, i32 0, i32 2
  %82 = load ptr, ptr %81, align 8, !tbaa !25
  %83 = getelementptr inbounds %struct.cpal_Color, ptr %82, i64 %indvars.iv296, i32 4
  store i16 %80, ptr %83, align 2, !tbaa !26
  %indvars.iv.next292.epil = add nuw nsw i64 %indvars.iv291.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge237.us, label %.epil.preheader, !llvm.loop !28

._crit_edge237.us:                                ; preds = %._crit_edge237.us.loopexit.unr-lcssa, %.epil.preheader, %78
  %indvars.iv.next297 = add nuw nsw i64 %indvars.iv296, 1
  %exitcond300.not = icmp eq i64 %indvars.iv.next297, %wide.trip.count299
  br i1 %exitcond300.not, label %.loopexit.us, label %78, !llvm.loop !30

.lr.ph236.us.new:                                 ; preds = %.lr.ph236.us, %.lr.ph236.us.new
  %indvars.iv291 = phi i64 [ %indvars.iv.next292.3, %.lr.ph236.us.new ], [ 0, %.lr.ph236.us ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph236.us.new ], [ 0, %.lr.ph236.us ]
  %84 = getelementptr inbounds %struct.cpal_Palette, ptr %126, i64 %indvars.iv291, i32 0, i32 2
  %85 = load ptr, ptr %84, align 8, !tbaa !25
  %86 = getelementptr inbounds %struct.cpal_Color, ptr %85, i64 %indvars.iv296, i32 4
  store i16 %80, ptr %86, align 2, !tbaa !26
  %indvars.iv.next292 = or disjoint i64 %indvars.iv291, 1
  %87 = getelementptr inbounds %struct.cpal_Palette, ptr %126, i64 %indvars.iv.next292, i32 0, i32 2
  %88 = load ptr, ptr %87, align 8, !tbaa !25
  %89 = getelementptr inbounds %struct.cpal_Color, ptr %88, i64 %indvars.iv296, i32 4
  store i16 %80, ptr %89, align 2, !tbaa !26
  %indvars.iv.next292.1 = or disjoint i64 %indvars.iv291, 2
  %90 = getelementptr inbounds %struct.cpal_Palette, ptr %126, i64 %indvars.iv.next292.1, i32 0, i32 2
  %91 = load ptr, ptr %90, align 8, !tbaa !25
  %92 = getelementptr inbounds %struct.cpal_Color, ptr %91, i64 %indvars.iv296, i32 4
  store i16 %80, ptr %92, align 2, !tbaa !26
  %indvars.iv.next292.2 = or disjoint i64 %indvars.iv291, 3
  %93 = getelementptr inbounds %struct.cpal_Palette, ptr %126, i64 %indvars.iv.next292.2, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !25
  %95 = getelementptr inbounds %struct.cpal_Color, ptr %94, i64 %indvars.iv296, i32 4
  store i16 %80, ptr %95, align 2, !tbaa !26
  %indvars.iv.next292.3 = add nuw nsw i64 %indvars.iv291, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge237.us.loopexit.unr-lcssa, label %.lr.ph236.us.new, !llvm.loop !31

.loopexit.us:                                     ; preds = %._crit_edge237.us, %73, %.loopexit198.us, %._crit_edge227.us
  call void @free(ptr noundef %47) #4
  br label %.critedge

96:                                               ; preds = %.lr.ph226.us, %._crit_edge.us
  %indvars.iv276 = phi i64 [ 0, %.lr.ph226.us ], [ %indvars.iv.next277, %._crit_edge.us ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #4
  call void %9(ptr noundef nonnull %3) #4
  %97 = shl nuw nsw i64 %indvars.iv276, 1
  %98 = getelementptr inbounds i8, ptr %20, i64 %97
  %99 = call zeroext i16 @read_16u(ptr noundef nonnull %98)
  br i1 %.not265, label %._crit_edge.us, label %.lr.ph224.us

._crit_edge.us:                                   ; preds = %105, %96
  call void %11(ptr noundef nonnull %120, ptr noundef nonnull byval(%struct.cpal_Palette) align 8 %3) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count279
  br i1 %exitcond280.not, label %._crit_edge227.us, label %96, !llvm.loop !32

100:                                              ; preds = %.lr.ph224.us, %105
  %indvars.iv271 = phi i64 [ 0, %.lr.ph224.us ], [ %indvars.iv.next272, %105 ]
  %101 = add nuw nsw i64 %indvars.iv271, %119
  %102 = icmp ult i64 %101, %121
  br i1 %102, label %103, label %105

103:                                              ; preds = %100
  %104 = getelementptr inbounds %struct.cpal_Color, ptr %47, i64 %101
  %.0.copyload32.us = load i48, ptr %104, align 2
  br label %105

105:                                              ; preds = %100, %103
  %.0.copyload32.us.sink = phi i48 [ %.0.copyload32.us, %103 ], [ %.0.copyload, %100 ]
  call void %10(ptr noundef nonnull %3, i48 %.0.copyload32.us.sink) #4
  %indvars.iv.next272 = add nuw nsw i64 %indvars.iv271, 1
  %exitcond275.not = icmp eq i64 %indvars.iv.next272, %wide.trip.count274
  br i1 %exitcond275.not, label %._crit_edge.us, label %100, !llvm.loop !33

106:                                              ; preds = %.lr.ph.us, %106
  %indvars.iv = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next, %106 ]
  %107 = getelementptr inbounds %struct.cpal_Color, ptr %47, i64 %indvars.iv
  %108 = shl nuw nsw i64 %indvars.iv, 2
  %109 = getelementptr inbounds i8, ptr %118, i64 %108
  %110 = getelementptr inbounds i8, ptr %109, i64 2
  %111 = tail call zeroext i8 @read_8u(ptr noundef nonnull %110)
  %112 = getelementptr inbounds i8, ptr %109, i64 1
  %113 = tail call zeroext i8 @read_8u(ptr noundef nonnull %112)
  %114 = tail call zeroext i8 @read_8u(ptr noundef %109)
  %115 = getelementptr inbounds i8, ptr %109, i64 3
  %116 = tail call zeroext i8 @read_8u(ptr noundef nonnull %115)
  store i8 %111, ptr %107, align 2, !tbaa !34
  %.sroa.2.0..sroa_idx.us = getelementptr inbounds i8, ptr %107, i64 1
  store i8 %113, ptr %.sroa.2.0..sroa_idx.us, align 1, !tbaa !34
  %.sroa.3.0..sroa_idx.us = getelementptr inbounds i8, ptr %107, i64 2
  store i8 %114, ptr %.sroa.3.0..sroa_idx.us, align 2, !tbaa !34
  %.sroa.4.0..sroa_idx.us = getelementptr inbounds i8, ptr %107, i64 3
  store i8 %116, ptr %.sroa.4.0..sroa_idx.us, align 1, !tbaa !34
  %.sroa.5.0..sroa_idx.us = getelementptr inbounds i8, ptr %107, i64 4
  store i16 -1, ptr %.sroa.5.0..sroa_idx.us, align 2, !tbaa !35
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %45
  br i1 %exitcond.not, label %.preheader201.us, label %106, !llvm.loop !36

.thread185.loopexit.split.us246:                  ; preds = %39, %30, %.preheader202.us
  tail call void %8(ptr noundef %25) #4
  br label %.critedge

.preheader201.us:                                 ; preds = %106, %44
  %.not264 = icmp eq i16 %32, 0
  br i1 %.not264, label %._crit_edge227.us, label %.lr.ph226.us

.lr.ph.us:                                        ; preds = %44
  %117 = zext i32 %34 to i64
  %118 = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 %117
  br label %106

.lr.ph224.us:                                     ; preds = %96
  %119 = zext i16 %99 to i64
  br label %100

.lr.ph226.us:                                     ; preds = %.preheader201.us
  %.not265 = icmp eq i16 %31, 0
  %120 = getelementptr inbounds i8, ptr %25, i64 8
  %121 = zext i16 %33 to i64
  %wide.trip.count279 = zext i16 %32 to i64
  %wide.trip.count274 = zext i16 %31 to i64
  br label %96

.lr.ph229.us:                                     ; preds = %52
  %122 = zext i32 %51 to i64
  %invariant.gep.us = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 %122
  %123 = getelementptr inbounds i8, ptr %25, i64 24
  %wide.trip.count284 = zext i16 %32 to i64
  br label %56

.lr.ph231.us:                                     ; preds = %.loopexit200.us
  %124 = zext i32 %62 to i64
  %invariant.gep232.us = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 %124
  %125 = getelementptr inbounds i8, ptr %25, i64 24
  %wide.trip.count289 = zext i16 %32 to i64
  br label %65

.lr.ph236.us:                                     ; preds = %78
  %126 = load ptr, ptr %128, align 8, !tbaa !18
  br i1 %129, label %._crit_edge237.us.loopexit.unr-lcssa, label %.lr.ph236.us.new

.lr.ph239.us:                                     ; preds = %73
  %127 = zext i32 %72 to i64
  %invariant.gep240.us = getelementptr inbounds i8, ptr %.sroa.5107.0.copyload.le, i64 %127
  %128 = getelementptr inbounds i8, ptr %25, i64 24
  %wide.trip.count299 = zext i16 %31 to i64
  %wide.trip.count294 = zext i16 %32 to i64
  %xtraiter = and i64 %wide.trip.count294, 3
  %129 = icmp ult i16 %32, 4
  %unroll_iter = and i64 %wide.trip.count294, 65532
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %78

.thread188:                                       ; preds = %14
  %indvars.iv.next302 = add nuw nsw i64 %indvars.iv301, 1
  %130 = icmp ult i64 %indvars.iv.next302, %13
  br i1 %130, label %14, label %.critedge, !llvm.loop !37

.critedge:                                        ; preds = %.thread188, %.preheader202.us.us, %.thread185.loopexit.split.us246, %.loopexit.us, %2
  %131 = phi ptr [ null, %2 ], [ %25, %.loopexit.us ], [ null, %.thread185.loopexit.split.us246 ], [ null, %.preheader202.us.us ], [ null, %.thread188 ]
  ret ptr %131
}

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @read_16u(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_32u(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__caryll_allocate_clean(i64 noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i8 @read_8u(ptr noundef) local_unnamed_addr #2

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

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

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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !11, i64 16}
!6 = !{!"", !7, i64 0, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 10, !11, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!7, !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!15, !10, i64 0}
!15 = !{!"", !10, i64 0, !16, i64 8}
!16 = !{!"", !17, i64 0, !17, i64 8, !11, i64 16}
!17 = !{!"long", !8, i64 0}
!18 = !{!15, !11, i64 24}
!19 = !{!20, !7, i64 24}
!20 = !{!"", !16, i64 0, !7, i64 24, !7, i64 28}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!20, !7, i64 28}
!24 = distinct !{!24, !22}
!25 = !{!20, !11, i64 16}
!26 = !{!27, !10, i64 4}
!27 = !{!"", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3, !10, i64 4}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.unroll.disable"}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = !{!8, !8, i64 0}
!35 = !{!10, !10, i64 0}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}


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