; LLVM IR from reworks-org/galaxy :: deps/sfml_deps/freetype-src/src/autofit (aflatin)

; 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.AF_SegmentRec_ = type { i8, i8, i16, i16, i16, i16, i16, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr }
%struct.AF_GlyphHintsRec_ = type { ptr, i64, i64, i64, i64, i32, i32, ptr, i32, i32, ptr, [2 x %struct.AF_AxisHintsRec_], i32, i32, ptr, %struct.anon.0 }
%struct.AF_AxisHintsRec_ = type { i32, i32, ptr, i32, i32, ptr, i32, %struct.anon }
%struct.anon = type { [18 x %struct.AF_SegmentRec_], [12 x %struct.AF_EdgeRec_] }
%struct.AF_EdgeRec_ = type { i16, i64, i64, i8, i8, i64, ptr, ptr, ptr, i32, ptr, ptr }
%struct.anon.0 = type { [8 x ptr], [96 x %struct.AF_PointRec_] }
%struct.AF_PointRec_ = type { i16, i8, i8, i64, i64, i16, i16, i64, i64, i64, i64, ptr, ptr }
%struct.AF_LatinMetricsRec_ = type { %struct.AF_StyleMetricsRec_, i32, [2 x %struct.AF_LatinAxisRec_] }
%struct.AF_StyleMetricsRec_ = type { ptr, %struct.AF_ScalerRec_, i8, ptr }
%struct.AF_ScalerRec_ = type { ptr, i64, i64, i64, i64, i32, i32 }
%struct.AF_LatinAxisRec_ = type { i64, i64, i32, [16 x %struct.AF_WidthRec_], i64, i64, i8, i32, [266 x %struct.AF_LatinBlueRec_], i64, i64 }
%struct.AF_WidthRec_ = type { i64, i64, i64 }
%struct.AF_LatinBlueRec_ = type { %struct.AF_WidthRec_, %struct.AF_WidthRec_, i64, i64, i32 }

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

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

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

; Function Attrs: nounwind uwtable
define hidden i32 @af_latin_hints_compute_segments(ptr noundef %0, i32 noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca %struct.AF_SegmentRec_, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i16, align 2
  %29 = alloca i16, align 2
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i16, align 2
  %39 = alloca i16, align 2
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %53, i32 0, i32 14
  %55 = load ptr, ptr %54, align 8, !tbaa !11
  store ptr %55, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %56, i32 0, i32 11
  %58 = load i32, ptr %5, align 4, !tbaa !9
  %59 = zext i32 %58 to i64
  %60 = getelementptr inbounds [2 x %struct.AF_AxisHintsRec_], ptr %57, i64 0, i64 %59
  store ptr %60, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %61, i32 0, i32 0
  %63 = load ptr, ptr %62, align 8, !tbaa !15
  store ptr %63, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 80, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %64, i32 0, i32 10
  %66 = load ptr, ptr %65, align 8, !tbaa !16
  store ptr %66, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %67 = load ptr, ptr %12, align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %68, i32 0, i32 9
  %70 = load i32, ptr %69, align 4, !tbaa !17
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds ptr, ptr %67, i64 %71
  store ptr %72, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.AF_LatinMetricsRec_, ptr %73, i32 0, i32 1
  %75 = load i32, ptr %74, align 8, !tbaa !18
  %76 = udiv i32 %75, 14
  %77 = zext i32 %76 to i64
  store i64 %77, ptr %16, align 8, !tbaa !22
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 80, i1 false)
  %78 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %11, i32 0, i32 11
  store i64 32000, ptr %78, align 8, !tbaa !23
  %79 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %11, i32 0, i32 0
  store i8 0, ptr %79, align 8, !tbaa !26
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %80, i32 0, i32 6
  %82 = load i32, ptr %81, align 8, !tbaa !27
  %83 = icmp slt i32 %82, 0
  br i1 %83, label %84, label %89

84:                                               ; preds = %2
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %85, i32 0, i32 6
  %87 = load i32, ptr %86, align 8, !tbaa !27
  %88 = sub nsw i32 0, %87
  br label %93

89:                                               ; preds = %2
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %90, i32 0, i32 6
  %92 = load i32, ptr %91, align 8, !tbaa !27
  br label %93

93:                                               ; preds = %89, %84
  %94 = phi i32 [ %88, %84 ], [ %92, %89 ]
  store i32 %94, ptr %14, align 4, !tbaa !9
  %95 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %95, ptr %15, align 4, !tbaa !9
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %96, i32 0, i32 0
  store i32 0, ptr %97, align 8, !tbaa !30
  %98 = load i32, ptr %5, align 4, !tbaa !9
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %131

100:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %101, i32 0, i32 7
  %103 = load ptr, ptr %102, align 8, !tbaa !31
  store ptr %103, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %104 = load ptr, ptr %17, align 8, !tbaa !5
  %105 = load ptr, ptr %4, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %105, i32 0, i32 6
  %107 = load i32, ptr %106, align 4, !tbaa !32
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds %struct.AF_PointRec_, ptr %104, i64 %108
  store ptr %109, ptr %18, align 8, !tbaa !5
  br label %110

110:                                              ; preds = %127, %100
  %111 = load ptr, ptr %17, align 8, !tbaa !5
  %112 = load ptr, ptr %18, align 8, !tbaa !5
  %113 = icmp ult ptr %111, %112
  br i1 %113, label %114, label %130

114:                                              ; preds = %110
  %115 = load ptr, ptr %17, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.AF_PointRec_, ptr %115, i32 0, i32 5
  %117 = load i16, ptr %116, align 8, !tbaa !33
  %118 = sext i16 %117 to i64
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.AF_PointRec_, ptr %119, i32 0, i32 9
  store i64 %118, ptr %120, align 8, !tbaa !35
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.AF_PointRec_, ptr %121, i32 0, i32 6
  %123 = load i16, ptr %122, align 2, !tbaa !36
  %124 = sext i16 %123 to i64
  %125 = load ptr, ptr %17, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.AF_PointRec_, ptr %125, i32 0, i32 10
  store i64 %124, ptr %126, align 8, !tbaa !37
  br label %127

127:                                              ; preds = %114
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.AF_PointRec_, ptr %128, i32 1
  store ptr %129, ptr %17, align 8, !tbaa !5
  br label %110, !llvm.loop !38

130:                                              ; preds = %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %162

131:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %132, i32 0, i32 7
  %134 = load ptr, ptr %133, align 8, !tbaa !31
  store ptr %134, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %135 = load ptr, ptr %19, align 8, !tbaa !5
  %136 = load ptr, ptr %4, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.AF_GlyphHintsRec_, ptr %136, i32 0, i32 6
  %138 = load i32, ptr %137, align 4, !tbaa !32
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds %struct.AF_PointRec_, ptr %135, i64 %139
  store ptr %140, ptr %20, align 8, !tbaa !5
  br label %141

141:                                              ; preds = %158, %131
  %142 = load ptr, ptr %19, align 8, !tbaa !5
  %143 = load ptr, ptr %20, align 8, !tbaa !5
  %144 = icmp ult ptr %142, %143
  br i1 %144, label %145, label %161

145:                                              ; preds = %141
  %146 = load ptr, ptr %19, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.AF_PointRec_, ptr %146, i32 0, i32 6
  %148 = load i16, ptr %147, align 2, !tbaa !36
  %149 = sext i16 %148 to i64
  %150 = load ptr, ptr %19, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.AF_PointRec_, ptr %150, i32 0, i32 9
  store i64 %149, ptr %151, align 8, !tbaa !35
  %152 = load ptr, ptr %19, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.AF_PointRec_, ptr %152, i32 0, i32 5
  %154 = load i16, ptr %153, align 8, !tbaa !33
  %155 = sext i16 %154 to i64
  %156 = load ptr, ptr %19, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.AF_PointRec_, ptr %156, i32 0, i32 10
  store i64 %155, ptr %157, align 8, !tbaa !37
  br label %158

158:                                              ; preds = %145
  %159 = load ptr, ptr %19, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.AF_PointRec_, ptr %159, i32 1
  store ptr %160, ptr %19, align 8, !tbaa !5
  br label %141, !llvm.loop !40

161:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %162

162:                                              ; preds = %161, %130
  br label %163

163:                                              ; preds = %835, %162
  %164 = load ptr, ptr %12, align 8, !tbaa !5
  %165 = load ptr, ptr %13, align 8, !tbaa !5
  %166 = icmp ult ptr %164, %165
  br i1 %166, label %167, label %838

167:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %168 = load ptr, ptr %12, align 8, !tbaa !5
  %169 = getelementptr inbounds ptr, ptr %168, i64 0
  %170 = load ptr, ptr %169, align 8, !tbaa !5
  store ptr %170, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %171 = load ptr, ptr %21, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.AF_PointRec_, ptr %171, i32 0, i32 12
  %173 = load ptr, ptr %172, align 8, !tbaa !41
  store ptr %173, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store i64 32000, ptr %24, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  store i64 -32000, ptr %25, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  store i64 32000, ptr %26, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  store i64 -32000, ptr %27, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #5
  store i16 0, ptr %28, align 2, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #5
  store i16 0, ptr %29, align 2, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  store i64 32000, ptr %30, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store i64 -32000, ptr %31, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store ptr null, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %174 = load i64, ptr %24, align 8, !tbaa !22
  store i64 %174, ptr %34, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %175 = load i64, ptr %25, align 8, !tbaa !22
  store i64 %175, ptr %35, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %176 = load i64, ptr %26, align 8, !tbaa !22
  store i64 %176, ptr %36, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %177 = load i64, ptr %27, align 8, !tbaa !22
  store i64 %177, ptr %37, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %38) #5
  %178 = load i16, ptr %28, align 2, !tbaa !42
  store i16 %178, ptr %38, align 2, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 2, ptr %39) #5
  %179 = load i16, ptr %29, align 2, !tbaa !42
  store i16 %179, ptr %39, align 2, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %180 = load i64, ptr %30, align 8, !tbaa !22
  store i64 %180, ptr %40, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %181 = load i64, ptr %31, align 8, !tbaa !22
  store i64 %181, ptr %41, align 8, !tbaa !22
  %182 = load ptr, ptr %22, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.AF_PointRec_, ptr %182, i32 0, i32 2
  %184 = load i8, ptr %183, align 1, !tbaa !43
  %185 = sext i8 %184 to i32
  %186 = icmp slt i32 %185, 0
  br i1 %186, label %187, label %193

187:                                              ; preds = %167
  %188 = load ptr, ptr %22, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.AF_PointRec_, ptr %188, i32 0, i32 2
  %190 = load i8, ptr %189, align 1, !tbaa !43
  %191 = sext i8 %190 to i32
  %192 = sub nsw i32 0, %191
  br label %198

193:                                              ; preds = %167
  %194 = load ptr, ptr %22, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.AF_PointRec_, ptr %194, i32 0, i32 2
  %196 = load i8, ptr %195, align 1, !tbaa !43
  %197 = sext i8 %196 to i32
  br label %198

198:                                              ; preds = %193, %187
  %199 = phi i32 [ %192, %187 ], [ %197, %193 ]
  %200 = load i32, ptr %14, align 4, !tbaa !9
  %201 = icmp eq i32 %199, %200
  br i1 %201, label %202, label %260

202:                                              ; preds = %198
  %203 = load ptr, ptr %21, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.AF_PointRec_, ptr %203, i32 0, i32 2
  %205 = load i8, ptr %204, align 1, !tbaa !43
  %206 = sext i8 %205 to i32
  %207 = icmp slt i32 %206, 0
  br i1 %207, label %208, label %214

208:                                              ; preds = %202
  %209 = load ptr, ptr %21, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.AF_PointRec_, ptr %209, i32 0, i32 2
  %211 = load i8, ptr %210, align 1, !tbaa !43
  %212 = sext i8 %211 to i32
  %213 = sub nsw i32 0, %212
  br label %219

214:                                              ; preds = %202
  %215 = load ptr, ptr %21, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.AF_PointRec_, ptr %215, i32 0, i32 2
  %217 = load i8, ptr %216, align 1, !tbaa !43
  %218 = sext i8 %217 to i32
  br label %219

219:                                              ; preds = %214, %208
  %220 = phi i32 [ %213, %208 ], [ %218, %214 ]
  %221 = load i32, ptr %14, align 4, !tbaa !9
  %222 = icmp eq i32 %220, %221
  br i1 %222, label %223, label %260

223:                                              ; preds = %219
  %224 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %224, ptr %22, align 8, !tbaa !5
  br label %225

225:                                              ; preds = %258, %223
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.AF_PointRec_, ptr %226, i32 0, i32 12
  %228 = load ptr, ptr %227, align 8, !tbaa !41
  store ptr %228, ptr %21, align 8, !tbaa !5
  %229 = load ptr, ptr %21, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.AF_PointRec_, ptr %229, i32 0, i32 2
  %231 = load i8, ptr %230, align 1, !tbaa !43
  %232 = sext i8 %231 to i32
  %233 = icmp slt i32 %232, 0
  br i1 %233, label %234, label %240

234:                                              ; preds = %225
  %235 = load ptr, ptr %21, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.AF_PointRec_, ptr %235, i32 0, i32 2
  %237 = load i8, ptr %236, align 1, !tbaa !43
  %238 = sext i8 %237 to i32
  %239 = sub nsw i32 0, %238
  br label %245

240:                                              ; preds = %225
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.AF_PointRec_, ptr %241, i32 0, i32 2
  %243 = load i8, ptr %242, align 1, !tbaa !43
  %244 = sext i8 %243 to i32
  br label %245

245:                                              ; preds = %240, %234
  %246 = phi i32 [ %239, %234 ], [ %244, %240 ]
  %247 = load i32, ptr %14, align 4, !tbaa !9
  %248 = icmp ne i32 %246, %247
  br i1 %248, label %249, label %253

249:                                              ; preds = %245
  %250 = load ptr, ptr %21, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.AF_PointRec_, ptr %250, i32 0, i32 11
  %252 = load ptr, ptr %251, align 8, !tbaa !44
  store ptr %252, ptr %21, align 8, !tbaa !5
  br label %259

253:                                              ; preds = %245
  %254 = load ptr, ptr %21, align 8, !tbaa !5
  %255 = load ptr, ptr %22, align 8, !tbaa !5
  %256 = icmp eq ptr %254, %255
  br i1 %256, label %257, label %258

257:                                              ; preds = %253
  br label %259

258:                                              ; preds = %253
  br label %225

259:                                              ; preds = %257, %249
  br label %260

260:                                              ; preds = %259, %219, %198
  %261 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %261, ptr %22, align 8, !tbaa !5
  store i8 0, ptr %32, align 1, !tbaa !45
  br label %262

262:                                              ; preds = %830, %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %263 = load i32, ptr %23, align 4, !tbaa !9
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %681

265:                                              ; preds = %262
  %266 = load ptr, ptr %21, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.AF_PointRec_, ptr %266, i32 0, i32 9
  %268 = load i64, ptr %267, align 8, !tbaa !35
  store i64 %268, ptr %42, align 8, !tbaa !22
  %269 = load i64, ptr %42, align 8, !tbaa !22
  %270 = load i64, ptr %24, align 8, !tbaa !22
  %271 = icmp slt i64 %269, %270
  br i1 %271, label %272, label %274

272:                                              ; preds = %265
  %273 = load i64, ptr %42, align 8, !tbaa !22
  store i64 %273, ptr %24, align 8, !tbaa !22
  br label %274

274:                                              ; preds = %272, %265
  %275 = load i64, ptr %42, align 8, !tbaa !22
  %276 = load i64, ptr %25, align 8, !tbaa !22
  %277 = icmp sgt i64 %275, %276
  br i1 %277, label %278, label %280

278:                                              ; preds = %274
  %279 = load i64, ptr %42, align 8, !tbaa !22
  store i64 %279, ptr %25, align 8, !tbaa !22
  br label %280

280:                                              ; preds = %278, %274
  %281 = load ptr, ptr %21, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.AF_PointRec_, ptr %281, i32 0, i32 10
  %283 = load i64, ptr %282, align 8, !tbaa !37
  store i64 %283, ptr %43, align 8, !tbaa !22
  %284 = load i64, ptr %43, align 8, !tbaa !22
  %285 = load i64, ptr %26, align 8, !tbaa !22
  %286 = icmp slt i64 %284, %285
  br i1 %286, label %287, label %292

287:                                              ; preds = %280
  %288 = load i64, ptr %43, align 8, !tbaa !22
  store i64 %288, ptr %26, align 8, !tbaa !22
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.AF_PointRec_, ptr %289, i32 0, i32 0
  %291 = load i16, ptr %290, align 8, !tbaa !46
  store i16 %291, ptr %28, align 2, !tbaa !42
  br label %292

292:                                              ; preds = %287, %280
  %293 = load i64, ptr %43, align 8, !tbaa !22
  %294 = load i64, ptr %27, align 8, !tbaa !22
  %295 = icmp sgt i64 %293, %294
  br i1 %295, label %296, label %301

296:                                              ; preds = %292
  %297 = load i64, ptr %43, align 8, !tbaa !22
  store i64 %297, ptr %27, align 8, !tbaa !22
  %298 = load ptr, ptr %21, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.AF_PointRec_, ptr %298, i32 0, i32 0
  %300 = load i16, ptr %299, align 8, !tbaa !46
  store i16 %300, ptr %29, align 2, !tbaa !42
  br label %301

301:                                              ; preds = %296, %292
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.AF_PointRec_, ptr %302, i32 0, i32 0
  %304 = load i16, ptr %303, align 8, !tbaa !46
  %305 = zext i16 %304 to i32
  %306 = and i32 %305, 3
  %307 = icmp ne i32 %306, 0
  br i1 %307, label %324, label %308

308:                                              ; preds = %301
  %309 = load ptr, ptr %21, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.AF_PointRec_, ptr %309, i32 0, i32 10
  %311 = load i64, ptr %310, align 8, !tbaa !37
  store i64 %311, ptr %43, align 8, !tbaa !22
  %312 = load i64, ptr %43, align 8, !tbaa !22
  %313 = load i64, ptr %30, align 8, !tbaa !22
  %314 = icmp slt i64 %312, %313
  br i1 %314, label %315, label %317

315:                                              ; preds = %308
  %316 = load i64, ptr %43, align 8, !tbaa !22
  store i64 %316, ptr %30, align 8, !tbaa !22
  br label %317

317:                                              ; preds = %315, %308
  %318 = load i64, ptr %43, align 8, !tbaa !22
  %319 = load i64, ptr %31, align 8, !tbaa !22
  %320 = icmp sgt i64 %318, %319
  br i1 %320, label %321, label %323

321:                                              ; preds = %317
  %322 = load i64, ptr %43, align 8, !tbaa !22
  store i64 %322, ptr %31, align 8, !tbaa !22
  br label %323

323:                                              ; preds = %321, %317
  br label %324

324:                                              ; preds = %323, %301
  %325 = load ptr, ptr %21, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.AF_PointRec_, ptr %325, i32 0, i32 2
  %327 = load i8, ptr %326, align 1, !tbaa !43
  %328 = sext i8 %327 to i32
  %329 = load i32, ptr %15, align 4, !tbaa !9
  %330 = icmp ne i32 %328, %329
  br i1 %330, label %335, label %331

331:                                              ; preds = %324
  %332 = load ptr, ptr %21, align 8, !tbaa !5
  %333 = load ptr, ptr %22, align 8, !tbaa !5
  %334 = icmp eq ptr %332, %333
  br i1 %334, label %335, label %680

335:                                              ; preds = %331, %324
  %336 = load ptr, ptr %33, align 8, !tbaa !5
  %337 = icmp ne ptr %336, null
  br i1 %337, label %338, label %346

338:                                              ; preds = %335
  %339 = load ptr, ptr %10, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %339, i32 0, i32 13
  %341 = load ptr, ptr %340, align 8, !tbaa !47
  %342 = load ptr, ptr %33, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %342, i32 0, i32 14
  %344 = load ptr, ptr %343, align 8, !tbaa !48
  %345 = icmp ne ptr %341, %344
  br i1 %345, label %346, label %414

346:                                              ; preds = %338, %335
  %347 = load ptr, ptr %21, align 8, !tbaa !5
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %348, i32 0, i32 14
  store ptr %347, ptr %349, align 8, !tbaa !48
  %350 = load i64, ptr %24, align 8, !tbaa !22
  %351 = load i64, ptr %25, align 8, !tbaa !22
  %352 = add nsw i64 %350, %351
  %353 = ashr i64 %352, 1
  %354 = trunc i64 %353 to i16
  %355 = load ptr, ptr %10, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %355, i32 0, i32 2
  store i16 %354, ptr %356, align 2, !tbaa !49
  %357 = load i64, ptr %25, align 8, !tbaa !22
  %358 = load i64, ptr %24, align 8, !tbaa !22
  %359 = sub nsw i64 %357, %358
  %360 = ashr i64 %359, 1
  %361 = trunc i64 %360 to i16
  %362 = load ptr, ptr %10, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %362, i32 0, i32 3
  store i16 %361, ptr %363, align 4, !tbaa !50
  %364 = load i16, ptr %28, align 2, !tbaa !42
  %365 = zext i16 %364 to i32
  %366 = load i16, ptr %29, align 2, !tbaa !42
  %367 = zext i16 %366 to i32
  %368 = or i32 %365, %367
  %369 = and i32 %368, 3
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %384

371:                                              ; preds = %346
  %372 = load i64, ptr %31, align 8, !tbaa !22
  %373 = load i64, ptr %30, align 8, !tbaa !22
  %374 = sub nsw i64 %372, %373
  %375 = load i64, ptr %16, align 8, !tbaa !22
  %376 = icmp slt i64 %374, %375
  br i1 %376, label %377, label %384

377:                                              ; preds = %371
  %378 = load ptr, ptr %10, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %378, i32 0, i32 0
  %380 = load i8, ptr %379, align 8, !tbaa !26
  %381 = zext i8 %380 to i32
  %382 = or i32 %381, 1
  %383 = trunc i32 %382 to i8
  store i8 %383, ptr %379, align 8, !tbaa !26
  br label %384

384:                                              ; preds = %377, %371, %346
  %385 = load i64, ptr %26, align 8, !tbaa !22
  %386 = trunc i64 %385 to i16
  %387 = load ptr, ptr %10, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %387, i32 0, i32 4
  store i16 %386, ptr %388, align 2, !tbaa !51
  %389 = load i64, ptr %27, align 8, !tbaa !22
  %390 = trunc i64 %389 to i16
  %391 = load ptr, ptr %10, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %391, i32 0, i32 5
  store i16 %390, ptr %392, align 8, !tbaa !52
  %393 = load ptr, ptr %10, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %393, i32 0, i32 5
  %395 = load i16, ptr %394, align 8, !tbaa !52
  %396 = sext i16 %395 to i32
  %397 = load ptr, ptr %10, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %397, i32 0, i32 4
  %399 = load i16, ptr %398, align 2, !tbaa !51
  %400 = sext i16 %399 to i32
  %401 = sub nsw i32 %396, %400
  %402 = trunc i32 %401 to i16
  %403 = load ptr, ptr %10, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %403, i32 0, i32 6
  store i16 %402, ptr %404, align 2, !tbaa !53
  %405 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %405, ptr %33, align 8, !tbaa !5
  %406 = load i64, ptr %24, align 8, !tbaa !22
  store i64 %406, ptr %34, align 8, !tbaa !22
  %407 = load i64, ptr %25, align 8, !tbaa !22
  store i64 %407, ptr %35, align 8, !tbaa !22
  %408 = load i64, ptr %26, align 8, !tbaa !22
  store i64 %408, ptr %36, align 8, !tbaa !22
  %409 = load i64, ptr %27, align 8, !tbaa !22
  store i64 %409, ptr %37, align 8, !tbaa !22
  %410 = load i16, ptr %28, align 2, !tbaa !42
  store i16 %410, ptr %38, align 2, !tbaa !42
  %411 = load i16, ptr %29, align 2, !tbaa !42
  store i16 %411, ptr %39, align 2, !tbaa !42
  %412 = load i64, ptr %30, align 8, !tbaa !22
  store i64 %412, ptr %40, align 8, !tbaa !22
  %413 = load i64, ptr %31, align 8, !tbaa !22
  store i64 %413, ptr %41, align 8, !tbaa !22
  br label %679

414:                                              ; preds = %338
  %415 = load ptr, ptr %33, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %415, i32 0, i32 14
  %417 = load ptr, ptr %416, align 8, !tbaa !48
  %418 = getelementptr inbounds %struct.AF_PointRec_, ptr %417, i32 0, i32 1
  %419 = load i8, ptr %418, align 2, !tbaa !54
  %420 = sext i8 %419 to i32
  %421 = load ptr, ptr %21, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.AF_PointRec_, ptr %421, i32 0, i32 1
  %423 = load i8, ptr %422, align 2, !tbaa !54
  %424 = sext i8 %423 to i32
  %425 = icmp eq i32 %420, %424
  br i1 %425, label %426, label %530

426:                                              ; preds = %414
  %427 = load i64, ptr %34, align 8, !tbaa !22
  %428 = load i64, ptr %24, align 8, !tbaa !22
  %429 = icmp slt i64 %427, %428
  br i1 %429, label %430, label %432

430:                                              ; preds = %426
  %431 = load i64, ptr %34, align 8, !tbaa !22
  store i64 %431, ptr %24, align 8, !tbaa !22
  br label %432

432:                                              ; preds = %430, %426
  %433 = load i64, ptr %35, align 8, !tbaa !22
  %434 = load i64, ptr %25, align 8, !tbaa !22
  %435 = icmp sgt i64 %433, %434
  br i1 %435, label %436, label %438

436:                                              ; preds = %432
  %437 = load i64, ptr %35, align 8, !tbaa !22
  store i64 %437, ptr %25, align 8, !tbaa !22
  br label %438

438:                                              ; preds = %436, %432
  %439 = load i64, ptr %36, align 8, !tbaa !22
  %440 = load i64, ptr %26, align 8, !tbaa !22
  %441 = icmp slt i64 %439, %440
  br i1 %441, label %442, label %445

442:                                              ; preds = %438
  %443 = load i64, ptr %36, align 8, !tbaa !22
  store i64 %443, ptr %26, align 8, !tbaa !22
  %444 = load i16, ptr %38, align 2, !tbaa !42
  store i16 %444, ptr %28, align 2, !tbaa !42
  br label %445

445:                                              ; preds = %442, %438
  %446 = load i64, ptr %37, align 8, !tbaa !22
  %447 = load i64, ptr %27, align 8, !tbaa !22
  %448 = icmp sgt i64 %446, %447
  br i1 %448, label %449, label %452

449:                                              ; preds = %445
  %450 = load i64, ptr %37, align 8, !tbaa !22
  store i64 %450, ptr %27, align 8, !tbaa !22
  %451 = load i16, ptr %39, align 2, !tbaa !42
  store i16 %451, ptr %29, align 2, !tbaa !42
  br label %452

452:                                              ; preds = %449, %445
  %453 = load i64, ptr %40, align 8, !tbaa !22
  %454 = load i64, ptr %30, align 8, !tbaa !22
  %455 = icmp slt i64 %453, %454
  br i1 %455, label %456, label %458

456:                                              ; preds = %452
  %457 = load i64, ptr %40, align 8, !tbaa !22
  store i64 %457, ptr %30, align 8, !tbaa !22
  br label %458

458:                                              ; preds = %456, %452
  %459 = load i64, ptr %41, align 8, !tbaa !22
  %460 = load i64, ptr %31, align 8, !tbaa !22
  %461 = icmp sgt i64 %459, %460
  br i1 %461, label %462, label %464

462:                                              ; preds = %458
  %463 = load i64, ptr %41, align 8, !tbaa !22
  store i64 %463, ptr %31, align 8, !tbaa !22
  br label %464

464:                                              ; preds = %462, %458
  %465 = load ptr, ptr %21, align 8, !tbaa !5
  %466 = load ptr, ptr %33, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %466, i32 0, i32 14
  store ptr %465, ptr %467, align 8, !tbaa !48
  %468 = load i64, ptr %24, align 8, !tbaa !22
  %469 = load i64, ptr %25, align 8, !tbaa !22
  %470 = add nsw i64 %468, %469
  %471 = ashr i64 %470, 1
  %472 = trunc i64 %471 to i16
  %473 = load ptr, ptr %33, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %473, i32 0, i32 2
  store i16 %472, ptr %474, align 2, !tbaa !49
  %475 = load i64, ptr %25, align 8, !tbaa !22
  %476 = load i64, ptr %24, align 8, !tbaa !22
  %477 = sub nsw i64 %475, %476
  %478 = ashr i64 %477, 1
  %479 = trunc i64 %478 to i16
  %480 = load ptr, ptr %33, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %480, i32 0, i32 3
  store i16 %479, ptr %481, align 4, !tbaa !50
  %482 = load i16, ptr %28, align 2, !tbaa !42
  %483 = zext i16 %482 to i32
  %484 = load i16, ptr %29, align 2, !tbaa !42
  %485 = zext i16 %484 to i32
  %486 = or i32 %483, %485
  %487 = and i32 %486, 3
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %502

489:                                              ; preds = %464
  %490 = load i64, ptr %31, align 8, !tbaa !22
  %491 = load i64, ptr %30, align 8, !tbaa !22
  %492 = sub nsw i64 %490, %491
  %493 = load i64, ptr %16, align 8, !tbaa !22
  %494 = icmp slt i64 %492, %493
  br i1 %494, label %495, label %502

495:                                              ; preds = %489
  %496 = load ptr, ptr %33, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %496, i32 0, i32 0
  %498 = load i8, ptr %497, align 8, !tbaa !26
  %499 = zext i8 %498 to i32
  %500 = or i32 %499, 1
  %501 = trunc i32 %500 to i8
  store i8 %501, ptr %497, align 8, !tbaa !26
  br label %509

502:                                              ; preds = %489, %464
  %503 = load ptr, ptr %33, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %503, i32 0, i32 0
  %505 = load i8, ptr %504, align 8, !tbaa !26
  %506 = zext i8 %505 to i32
  %507 = and i32 %506, -2
  %508 = trunc i32 %507 to i8
  store i8 %508, ptr %504, align 8, !tbaa !26
  br label %509

509:                                              ; preds = %502, %495
  %510 = load i64, ptr %26, align 8, !tbaa !22
  %511 = trunc i64 %510 to i16
  %512 = load ptr, ptr %33, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %512, i32 0, i32 4
  store i16 %511, ptr %513, align 2, !tbaa !51
  %514 = load i64, ptr %27, align 8, !tbaa !22
  %515 = trunc i64 %514 to i16
  %516 = load ptr, ptr %33, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %516, i32 0, i32 5
  store i16 %515, ptr %517, align 8, !tbaa !52
  %518 = load ptr, ptr %33, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %518, i32 0, i32 5
  %520 = load i16, ptr %519, align 8, !tbaa !52
  %521 = sext i16 %520 to i32
  %522 = load ptr, ptr %33, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %522, i32 0, i32 4
  %524 = load i16, ptr %523, align 2, !tbaa !51
  %525 = sext i16 %524 to i32
  %526 = sub nsw i32 %521, %525
  %527 = trunc i32 %526 to i16
  %528 = load ptr, ptr %33, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %528, i32 0, i32 6
  store i16 %527, ptr %529, align 2, !tbaa !53
  br label %674

530:                                              ; preds = %414
  %531 = load i64, ptr %37, align 8, !tbaa !22
  %532 = load i64, ptr %36, align 8, !tbaa !22
  %533 = sub nsw i64 %531, %532
  %534 = icmp slt i64 %533, 0
  br i1 %534, label %535, label %540

535:                                              ; preds = %530
  %536 = load i64, ptr %37, align 8, !tbaa !22
  %537 = load i64, ptr %36, align 8, !tbaa !22
  %538 = sub nsw i64 %536, %537
  %539 = sub nsw i64 0, %538
  br label %544

540:                                              ; preds = %530
  %541 = load i64, ptr %37, align 8, !tbaa !22
  %542 = load i64, ptr %36, align 8, !tbaa !22
  %543 = sub nsw i64 %541, %542
  br label %544

544:                                              ; preds = %540, %535
  %545 = phi i64 [ %539, %535 ], [ %543, %540 ]
  %546 = load i64, ptr %27, align 8, !tbaa !22
  %547 = load i64, ptr %26, align 8, !tbaa !22
  %548 = sub nsw i64 %546, %547
  %549 = icmp slt i64 %548, 0
  br i1 %549, label %550, label %555

550:                                              ; preds = %544
  %551 = load i64, ptr %27, align 8, !tbaa !22
  %552 = load i64, ptr %26, align 8, !tbaa !22
  %553 = sub nsw i64 %551, %552
  %554 = sub nsw i64 0, %553
  br label %559

555:                                              ; preds = %544
  %556 = load i64, ptr %27, align 8, !tbaa !22
  %557 = load i64, ptr %26, align 8, !tbaa !22
  %558 = sub nsw i64 %556, %557
  br label %559

559:                                              ; preds = %555, %550
  %560 = phi i64 [ %554, %550 ], [ %558, %555 ]
  %561 = icmp sgt i64 %545, %560
  br i1 %561, label %562, label %592

562:                                              ; preds = %559
  %563 = load i64, ptr %24, align 8, !tbaa !22
  %564 = load i64, ptr %34, align 8, !tbaa !22
  %565 = icmp slt i64 %563, %564
  br i1 %565, label %566, label %568

566:                                              ; preds = %562
  %567 = load i64, ptr %24, align 8, !tbaa !22
  store i64 %567, ptr %34, align 8, !tbaa !22
  br label %568

568:                                              ; preds = %566, %562
  %569 = load i64, ptr %25, align 8, !tbaa !22
  %570 = load i64, ptr %35, align 8, !tbaa !22
  %571 = icmp sgt i64 %569, %570
  br i1 %571, label %572, label %574

572:                                              ; preds = %568
  %573 = load i64, ptr %25, align 8, !tbaa !22
  store i64 %573, ptr %35, align 8, !tbaa !22
  br label %574

574:                                              ; preds = %572, %568
  %575 = load ptr, ptr %21, align 8, !tbaa !5
  %576 = load ptr, ptr %33, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %576, i32 0, i32 14
  store ptr %575, ptr %577, align 8, !tbaa !48
  %578 = load i64, ptr %34, align 8, !tbaa !22
  %579 = load i64, ptr %35, align 8, !tbaa !22
  %580 = add nsw i64 %578, %579
  %581 = ashr i64 %580, 1
  %582 = trunc i64 %581 to i16
  %583 = load ptr, ptr %33, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %583, i32 0, i32 2
  store i16 %582, ptr %584, align 2, !tbaa !49
  %585 = load i64, ptr %35, align 8, !tbaa !22
  %586 = load i64, ptr %34, align 8, !tbaa !22
  %587 = sub nsw i64 %585, %586
  %588 = ashr i64 %587, 1
  %589 = trunc i64 %588 to i16
  %590 = load ptr, ptr %33, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %590, i32 0, i32 3
  store i16 %589, ptr %591, align 4, !tbaa !50
  br label %673

592:                                              ; preds = %559
  %593 = load i64, ptr %34, align 8, !tbaa !22
  %594 = load i64, ptr %24, align 8, !tbaa !22
  %595 = icmp slt i64 %593, %594
  br i1 %595, label %596, label %598

596:                                              ; preds = %592
  %597 = load i64, ptr %34, align 8, !tbaa !22
  store i64 %597, ptr %24, align 8, !tbaa !22
  br label %598

598:                                              ; preds = %596, %592
  %599 = load i64, ptr %35, align 8, !tbaa !22
  %600 = load i64, ptr %25, align 8, !tbaa !22
  %601 = icmp sgt i64 %599, %600
  br i1 %601, label %602, label %604

602:                                              ; preds = %598
  %603 = load i64, ptr %35, align 8, !tbaa !22
  store i64 %603, ptr %25, align 8, !tbaa !22
  br label %604

604:                                              ; preds = %602, %598
  %605 = load ptr, ptr %21, align 8, !tbaa !5
  %606 = load ptr, ptr %10, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %606, i32 0, i32 14
  store ptr %605, ptr %607, align 8, !tbaa !48
  %608 = load i64, ptr %24, align 8, !tbaa !22
  %609 = load i64, ptr %25, align 8, !tbaa !22
  %610 = add nsw i64 %608, %609
  %611 = ashr i64 %610, 1
  %612 = trunc i64 %611 to i16
  %613 = load ptr, ptr %10, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %613, i32 0, i32 2
  store i16 %612, ptr %614, align 2, !tbaa !49
  %615 = load i64, ptr %25, align 8, !tbaa !22
  %616 = load i64, ptr %24, align 8, !tbaa !22
  %617 = sub nsw i64 %615, %616
  %618 = ashr i64 %617, 1
  %619 = trunc i64 %618 to i16
  %620 = load ptr, ptr %10, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %620, i32 0, i32 3
  store i16 %619, ptr %621, align 4, !tbaa !50
  %622 = load i16, ptr %28, align 2, !tbaa !42
  %623 = zext i16 %622 to i32
  %624 = load i16, ptr %29, align 2, !tbaa !42
  %625 = zext i16 %624 to i32
  %626 = or i32 %623, %625
  %627 = and i32 %626, 3
  %628 = icmp ne i32 %627, 0
  br i1 %628, label %629, label %642

629:                                              ; preds = %604
  %630 = load i64, ptr %31, align 8, !tbaa !22
  %631 = load i64, ptr %30, align 8, !tbaa !22
  %632 = sub nsw i64 %630, %631
  %633 = load i64, ptr %16, align 8, !tbaa !22
  %634 = icmp slt i64 %632, %633
  br i1 %634, label %635, label %642

635:                                              ; preds = %629
  %636 = load ptr, ptr %10, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %636, i32 0, i32 0
  %638 = load i8, ptr %637, align 8, !tbaa !26
  %639 = zext i8 %638 to i32
  %640 = or i32 %639, 1
  %641 = trunc i32 %640 to i8
  store i8 %641, ptr %637, align 8, !tbaa !26
  br label %642

642:                                              ; preds = %635, %629, %604
  %643 = load i64, ptr %26, align 8, !tbaa !22
  %644 = trunc i64 %643 to i16
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %645, i32 0, i32 4
  store i16 %644, ptr %646, align 2, !tbaa !51
  %647 = load i64, ptr %27, align 8, !tbaa !22
  %648 = trunc i64 %647 to i16
  %649 = load ptr, ptr %10, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %649, i32 0, i32 5
  store i16 %648, ptr %650, align 8, !tbaa !52
  %651 = load ptr, ptr %10, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %651, i32 0, i32 5
  %653 = load i16, ptr %652, align 8, !tbaa !52
  %654 = sext i16 %653 to i32
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %655, i32 0, i32 4
  %657 = load i16, ptr %656, align 2, !tbaa !51
  %658 = sext i16 %657 to i32
  %659 = sub nsw i32 %654, %658
  %660 = trunc i32 %659 to i16
  %661 = load ptr, ptr %10, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %661, i32 0, i32 6
  store i16 %660, ptr %662, align 2, !tbaa !53
  %663 = load ptr, ptr %33, align 8, !tbaa !5
  %664 = load ptr, ptr %10, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %663, ptr align 8 %664, i64 80, i1 false), !tbaa.struct !55
  %665 = load i64, ptr %24, align 8, !tbaa !22
  store i64 %665, ptr %34, align 8, !tbaa !22
  %666 = load i64, ptr %25, align 8, !tbaa !22
  store i64 %666, ptr %35, align 8, !tbaa !22
  %667 = load i64, ptr %26, align 8, !tbaa !22
  store i64 %667, ptr %36, align 8, !tbaa !22
  %668 = load i64, ptr %27, align 8, !tbaa !22
  store i64 %668, ptr %37, align 8, !tbaa !22
  %669 = load i16, ptr %28, align 2, !tbaa !42
  store i16 %669, ptr %38, align 2, !tbaa !42
  %670 = load i16, ptr %29, align 2, !tbaa !42
  store i16 %670, ptr %39, align 2, !tbaa !42
  %671 = load i64, ptr %30, align 8, !tbaa !22
  store i64 %671, ptr %40, align 8, !tbaa !22
  %672 = load i64, ptr %31, align 8, !tbaa !22
  store i64 %672, ptr %41, align 8, !tbaa !22
  br label %673

673:                                              ; preds = %642, %574
  br label %674

674:                                              ; preds = %673, %509
  %675 = load ptr, ptr %7, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %675, i32 0, i32 0
  %677 = load i32, ptr %676, align 8, !tbaa !30
  %678 = add i32 %677, -1
  store i32 %678, ptr %676, align 8, !tbaa !30
  br label %679

679:                                              ; preds = %674, %384
  store i32 0, ptr %23, align 4, !tbaa !9
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %680

680:                                              ; preds = %679, %331
  br label %681

681:                                              ; preds = %680, %262
  %682 = load ptr, ptr %21, align 8, !tbaa !5
  %683 = load ptr, ptr %22, align 8, !tbaa !5
  %684 = icmp eq ptr %682, %683
  br i1 %684, label %685, label %690

685:                                              ; preds = %681
  %686 = load i8, ptr %32, align 1, !tbaa !45
  %687 = icmp ne i8 %686, 0
  br i1 %687, label %688, label %689

688:                                              ; preds = %685
  store i32 13, ptr %44, align 4
  br label %828

689:                                              ; preds = %685
  store i8 1, ptr %32, align 1, !tbaa !45
  br label %690

690:                                              ; preds = %689, %681
  %691 = load i32, ptr %23, align 4, !tbaa !9
  %692 = icmp ne i32 %691, 0
  br i1 %692, label %824, label %693

693:                                              ; preds = %690
  %694 = load ptr, ptr %21, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.AF_PointRec_, ptr %694, i32 0, i32 2
  %696 = load i8, ptr %695, align 1, !tbaa !43
  %697 = sext i8 %696 to i32
  %698 = icmp slt i32 %697, 0
  br i1 %698, label %699, label %705

699:                                              ; preds = %693
  %700 = load ptr, ptr %21, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.AF_PointRec_, ptr %700, i32 0, i32 2
  %702 = load i8, ptr %701, align 1, !tbaa !43
  %703 = sext i8 %702 to i32
  %704 = sub nsw i32 0, %703
  br label %710

705:                                              ; preds = %693
  %706 = load ptr, ptr %21, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.AF_PointRec_, ptr %706, i32 0, i32 2
  %708 = load i8, ptr %707, align 1, !tbaa !43
  %709 = sext i8 %708 to i32
  br label %710

710:                                              ; preds = %705, %699
  %711 = phi i32 [ %704, %699 ], [ %709, %705 ]
  %712 = load i32, ptr %14, align 4, !tbaa !9
  %713 = icmp eq i32 %711, %712
  br i1 %713, label %720, label %714

714:                                              ; preds = %710
  %715 = load ptr, ptr %21, align 8, !tbaa !5
  %716 = load ptr, ptr %21, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.AF_PointRec_, ptr %716, i32 0, i32 12
  %718 = load ptr, ptr %717, align 8, !tbaa !41
  %719 = icmp eq ptr %715, %718
  br i1 %719, label %720, label %824

720:                                              ; preds = %714, %710
  %721 = load ptr, ptr %7, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %721, i32 0, i32 0
  %723 = load i32, ptr %722, align 8, !tbaa !30
  %724 = icmp ugt i32 %723, 1000
  br i1 %724, label %725, label %734

725:                                              ; preds = %720
  br label %726

726:                                              ; preds = %725
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728
  br label %730

730:                                              ; preds = %729
  br label %731

731:                                              ; preds = %730
  %732 = load ptr, ptr %7, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %732, i32 0, i32 0
  store i32 0, ptr %733, align 8, !tbaa !30
  store i32 0, ptr %3, align 4
  store i32 1, ptr %44, align 4
  br label %828

734:                                              ; preds = %720
  %735 = load ptr, ptr %21, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.AF_PointRec_, ptr %735, i32 0, i32 2
  %737 = load i8, ptr %736, align 1, !tbaa !43
  %738 = sext i8 %737 to i32
  store i32 %738, ptr %15, align 4, !tbaa !9
  %739 = load ptr, ptr %7, align 8, !tbaa !5
  %740 = load ptr, ptr %8, align 8, !tbaa !5
  %741 = call i32 @af_axis_hints_new_segment(ptr noundef %739, ptr noundef %740, ptr noundef %10)
  store i32 %741, ptr %9, align 4, !tbaa !9
  %742 = load i32, ptr %9, align 4, !tbaa !9
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %745

744:                                              ; preds = %734
  store i32 19, ptr %44, align 4
  br label %828

745:                                              ; preds = %734
  %746 = load ptr, ptr %10, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %746, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %747, ptr align 8 %11, i64 80, i1 false), !tbaa.struct !55
  %748 = load i32, ptr %15, align 4, !tbaa !9
  %749 = trunc i32 %748 to i8
  %750 = load ptr, ptr %10, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %750, i32 0, i32 1
  store i8 %749, ptr %751, align 1, !tbaa !56
  %752 = load ptr, ptr %21, align 8, !tbaa !5
  %753 = load ptr, ptr %10, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %753, i32 0, i32 13
  store ptr %752, ptr %754, align 8, !tbaa !47
  %755 = load ptr, ptr %21, align 8, !tbaa !5
  %756 = load ptr, ptr %10, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %756, i32 0, i32 14
  store ptr %755, ptr %757, align 8, !tbaa !48
  %758 = load ptr, ptr %33, align 8, !tbaa !5
  %759 = icmp ne ptr %758, null
  br i1 %759, label %760, label %763

760:                                              ; preds = %745
  %761 = load ptr, ptr %10, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %761, i64 -1
  store ptr %762, ptr %33, align 8, !tbaa !5
  br label %763

763:                                              ; preds = %760, %745
  %764 = load ptr, ptr %21, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.AF_PointRec_, ptr %764, i32 0, i32 9
  %766 = load i64, ptr %765, align 8, !tbaa !35
  store i64 %766, ptr %25, align 8, !tbaa !22
  store i64 %766, ptr %24, align 8, !tbaa !22
  %767 = load ptr, ptr %21, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.AF_PointRec_, ptr %767, i32 0, i32 10
  %769 = load i64, ptr %768, align 8, !tbaa !37
  store i64 %769, ptr %27, align 8, !tbaa !22
  store i64 %769, ptr %26, align 8, !tbaa !22
  %770 = load ptr, ptr %21, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.AF_PointRec_, ptr %770, i32 0, i32 0
  %772 = load i16, ptr %771, align 8, !tbaa !46
  store i16 %772, ptr %29, align 2, !tbaa !42
  store i16 %772, ptr %28, align 2, !tbaa !42
  %773 = load ptr, ptr %21, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.AF_PointRec_, ptr %773, i32 0, i32 0
  %775 = load i16, ptr %774, align 8, !tbaa !46
  %776 = zext i16 %775 to i32
  %777 = and i32 %776, 3
  %778 = icmp ne i32 %777, 0
  br i1 %778, label %779, label %780

779:                                              ; preds = %763
  store i64 32000, ptr %30, align 8, !tbaa !22
  store i64 -32000, ptr %31, align 8, !tbaa !22
  br label %784

780:                                              ; preds = %763
  %781 = load ptr, ptr %21, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.AF_PointRec_, ptr %781, i32 0, i32 10
  %783 = load i64, ptr %782, align 8, !tbaa !37
  store i64 %783, ptr %31, align 8, !tbaa !22
  store i64 %783, ptr %30, align 8, !tbaa !22
  br label %784

784:                                              ; preds = %780, %779
  store i32 1, ptr %23, align 4, !tbaa !9
  %785 = load ptr, ptr %21, align 8, !tbaa !5
  %786 = load ptr, ptr %21, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.AF_PointRec_, ptr %786, i32 0, i32 12
  %788 = load ptr, ptr %787, align 8, !tbaa !41
  %789 = icmp eq ptr %785, %788
  br i1 %789, label %790, label %823

790:                                              ; preds = %784
  %791 = load i64, ptr %24, align 8, !tbaa !22
  %792 = trunc i64 %791 to i16
  %793 = load ptr, ptr %10, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %793, i32 0, i32 2
  store i16 %792, ptr %794, align 2, !tbaa !49
  %795 = load ptr, ptr %21, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.AF_PointRec_, ptr %795, i32 0, i32 0
  %797 = load i16, ptr %796, align 8, !tbaa !46
  %798 = zext i16 %797 to i32
  %799 = and i32 %798, 3
  %800 = icmp ne i32 %799, 0
  br i1 %800, label %801, label %808

801:                                              ; preds = %790
  %802 = load ptr, ptr %10, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %802, i32 0, i32 0
  %804 = load i8, ptr %803, align 8, !tbaa !26
  %805 = zext i8 %804 to i32
  %806 = or i32 %805, 1
  %807 = trunc i32 %806 to i8
  store i8 %807, ptr %803, align 8, !tbaa !26
  br label %808

808:                                              ; preds = %801, %790
  %809 = load ptr, ptr %21, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.AF_PointRec_, ptr %809, i32 0, i32 10
  %811 = load i64, ptr %810, align 8, !tbaa !37
  %812 = trunc i64 %811 to i16
  %813 = load ptr, ptr %10, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %813, i32 0, i32 4
  store i16 %812, ptr %814, align 2, !tbaa !51
  %815 = load ptr, ptr %21, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.AF_PointRec_, ptr %815, i32 0, i32 10
  %817 = load i64, ptr %816, align 8, !tbaa !37
  %818 = trunc i64 %817 to i16
  %819 = load ptr, ptr %10, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %819, i32 0, i32 5
  store i16 %818, ptr %820, align 8, !tbaa !52
  %821 = load ptr, ptr %10, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %821, i32 0, i32 6
  store i16 0, ptr %822, align 2, !tbaa !53
  store i32 0, ptr %23, align 4, !tbaa !9
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %823

823:                                              ; preds = %808, %784
  br label %824

824:                                              ; preds = %823, %714, %690
  %825 = load ptr, ptr %21, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.AF_PointRec_, ptr %825, i32 0, i32 11
  %827 = load ptr, ptr %826, align 8, !tbaa !44
  store ptr %827, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %44, align 4
  br label %828

828:                                              ; preds = %824, %744, %731, %688
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  %829 = load i32, ptr %44, align 4
  switch i32 %829, label %832 [
    i32 0, label %830
    i32 13, label %831
  ]

830:                                              ; preds = %828
  br label %262

831:                                              ; preds = %828
  store i32 0, ptr %44, align 4
  br label %832

832:                                              ; preds = %831, %828
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  %833 = load i32, ptr %44, align 4
  switch i32 %833, label %980 [
    i32 0, label %834
    i32 19, label %978
  ]

834:                                              ; preds = %832
  br label %835

835:                                              ; preds = %834
  %836 = load ptr, ptr %12, align 8, !tbaa !5
  %837 = getelementptr inbounds ptr, ptr %836, i32 1
  store ptr %837, ptr %12, align 8, !tbaa !5
  br label %163, !llvm.loop !57

838:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %839 = load ptr, ptr %7, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %839, i32 0, i32 2
  %841 = load ptr, ptr %840, align 8, !tbaa !58
  store ptr %841, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %842 = load ptr, ptr %45, align 8, !tbaa !5
  %843 = icmp ne ptr %842, null
  br i1 %843, label %844, label %851

844:                                              ; preds = %838
  %845 = load ptr, ptr %45, align 8, !tbaa !5
  %846 = load ptr, ptr %7, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.AF_AxisHintsRec_, ptr %846, i32 0, i32 0
  %848 = load i32, ptr %847, align 8, !tbaa !30
  %849 = zext i32 %848 to i64
  %850 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %845, i64 %849
  br label %852

851:                                              ; preds = %838
  br label %852

852:                                              ; preds = %851, %844
  %853 = phi ptr [ %850, %844 ], [ null, %851 ]
  store ptr %853, ptr %46, align 8, !tbaa !5
  %854 = load ptr, ptr %45, align 8, !tbaa !5
  store ptr %854, ptr %10, align 8, !tbaa !5
  br label %855

855:                                              ; preds = %974, %852
  %856 = load ptr, ptr %10, align 8, !tbaa !5
  %857 = load ptr, ptr %46, align 8, !tbaa !5
  %858 = icmp ult ptr %856, %857
  br i1 %858, label %859, label %977

859:                                              ; preds = %855
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %860 = load ptr, ptr %10, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %860, i32 0, i32 13
  %862 = load ptr, ptr %861, align 8, !tbaa !47
  store ptr %862, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %863 = load ptr, ptr %10, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %863, i32 0, i32 14
  %865 = load ptr, ptr %864, align 8, !tbaa !48
  store ptr %865, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %866 = load ptr, ptr %47, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.AF_PointRec_, ptr %866, i32 0, i32 10
  %868 = load i64, ptr %867, align 8, !tbaa !37
  store i64 %868, ptr %49, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %869 = load ptr, ptr %48, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.AF_PointRec_, ptr %869, i32 0, i32 10
  %871 = load i64, ptr %870, align 8, !tbaa !37
  store i64 %871, ptr %50, align 8, !tbaa !22
  %872 = load i64, ptr %49, align 8, !tbaa !22
  %873 = load i64, ptr %50, align 8, !tbaa !22
  %874 = icmp slt i64 %872, %873
  br i1 %874, label %875, label %924

875:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %876 = load ptr, ptr %47, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.AF_PointRec_, ptr %876, i32 0, i32 12
  %878 = load ptr, ptr %877, align 8, !tbaa !41
  store ptr %878, ptr %51, align 8, !tbaa !5
  %879 = load ptr, ptr %51, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.AF_PointRec_, ptr %879, i32 0, i32 10
  %881 = load i64, ptr %880, align 8, !tbaa !37
  %882 = load i64, ptr %49, align 8, !tbaa !22
  %883 = icmp slt i64 %881, %882
  br i1 %883, label %884, label %899

884:                                              ; preds = %875
  %885 = load ptr, ptr %10, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %885, i32 0, i32 6
  %887 = load i16, ptr %886, align 2, !tbaa !53
  %888 = sext i16 %887 to i64
  %889 = load i64, ptr %49, align 8, !tbaa !22
  %890 = load ptr, ptr %51, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.AF_PointRec_, ptr %890, i32 0, i32 10
  %892 = load i64, ptr %891, align 8, !tbaa !37
  %893 = sub nsw i64 %889, %892
  %894 = ashr i64 %893, 1
  %895 = add nsw i64 %888, %894
  %896 = trunc i64 %895 to i16
  %897 = load ptr, ptr %10, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %897, i32 0, i32 6
  store i16 %896, ptr %898, align 2, !tbaa !53
  br label %899

899:                                              ; preds = %884, %875
  %900 = load ptr, ptr %48, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.AF_PointRec_, ptr %900, i32 0, i32 11
  %902 = load ptr, ptr %901, align 8, !tbaa !44
  store ptr %902, ptr %51, align 8, !tbaa !5
  %903 = load ptr, ptr %51, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.AF_PointRec_, ptr %903, i32 0, i32 10
  %905 = load i64, ptr %904, align 8, !tbaa !37
  %906 = load i64, ptr %50, align 8, !tbaa !22
  %907 = icmp sgt i64 %905, %906
  br i1 %907, label %908, label %923

908:                                              ; preds = %899
  %909 = load ptr, ptr %10, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %909, i32 0, i32 6
  %911 = load i16, ptr %910, align 2, !tbaa !53
  %912 = sext i16 %911 to i64
  %913 = load ptr, ptr %51, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.AF_PointRec_, ptr %913, i32 0, i32 10
  %915 = load i64, ptr %914, align 8, !tbaa !37
  %916 = load i64, ptr %50, align 8, !tbaa !22
  %917 = sub nsw i64 %915, %916
  %918 = ashr i64 %917, 1
  %919 = add nsw i64 %912, %918
  %920 = trunc i64 %919 to i16
  %921 = load ptr, ptr %10, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %921, i32 0, i32 6
  store i16 %920, ptr %922, align 2, !tbaa !53
  br label %923

923:                                              ; preds = %908, %899
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %973

924:                                              ; preds = %859
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %925 = load ptr, ptr %47, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.AF_PointRec_, ptr %925, i32 0, i32 12
  %927 = load ptr, ptr %926, align 8, !tbaa !41
  store ptr %927, ptr %52, align 8, !tbaa !5
  %928 = load ptr, ptr %52, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.AF_PointRec_, ptr %928, i32 0, i32 10
  %930 = load i64, ptr %929, align 8, !tbaa !37
  %931 = load i64, ptr %49, align 8, !tbaa !22
  %932 = icmp sgt i64 %930, %931
  br i1 %932, label %933, label %948

933:                                              ; preds = %924
  %934 = load ptr, ptr %10, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %934, i32 0, i32 6
  %936 = load i16, ptr %935, align 2, !tbaa !53
  %937 = sext i16 %936 to i64
  %938 = load ptr, ptr %52, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.AF_PointRec_, ptr %938, i32 0, i32 10
  %940 = load i64, ptr %939, align 8, !tbaa !37
  %941 = load i64, ptr %49, align 8, !tbaa !22
  %942 = sub nsw i64 %940, %941
  %943 = ashr i64 %942, 1
  %944 = add nsw i64 %937, %943
  %945 = trunc i64 %944 to i16
  %946 = load ptr, ptr %10, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %946, i32 0, i32 6
  store i16 %945, ptr %947, align 2, !tbaa !53
  br label %948

948:                                              ; preds = %933, %924
  %949 = load ptr, ptr %48, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.AF_PointRec_, ptr %949, i32 0, i32 11
  %951 = load ptr, ptr %950, align 8, !tbaa !44
  store ptr %951, ptr %52, align 8, !tbaa !5
  %952 = load ptr, ptr %52, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.AF_PointRec_, ptr %952, i32 0, i32 10
  %954 = load i64, ptr %953, align 8, !tbaa !37
  %955 = load i64, ptr %50, align 8, !tbaa !22
  %956 = icmp slt i64 %954, %955
  br i1 %956, label %957, label %972

957:                                              ; preds = %948
  %958 = load ptr, ptr %10, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %958, i32 0, i32 6
  %960 = load i16, ptr %959, align 2, !tbaa !53
  %961 = sext i16 %960 to i64
  %962 = load i64, ptr %50, align 8, !tbaa !22
  %963 = load ptr, ptr %52, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.AF_PointRec_, ptr %963, i32 0, i32 10
  %965 = load i64, ptr %964, align 8, !tbaa !37
  %966 = sub nsw i64 %962, %965
  %967 = ashr i64 %966, 1
  %968 = add nsw i64 %961, %967
  %969 = trunc i64 %968 to i16
  %970 = load ptr, ptr %10, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %970, i32 0, i32 6
  store i16 %969, ptr %971, align 2, !tbaa !53
  br label %972

972:                                              ; preds = %957, %948
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  br label %973

973:                                              ; preds = %972, %923
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  br label %974

974:                                              ; preds = %973
  %975 = load ptr, ptr %10, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %975, i32 1
  store ptr %976, ptr %10, align 8, !tbaa !5
  br label %855, !llvm.loop !59

977:                                              ; preds = %855
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %978

978:                                              ; preds = %977, %832
  %979 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %979, ptr %3, align 4
  store i32 1, ptr %44, align 4
  br label %980

980:                                              ; preds = %978, %832
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  %981 = load i32, ptr %3, align 4
  ret i32 %981
}

; 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) #3

declare hidden i32 @af_axis_hints_new_segment(ptr noundef, ptr noundef, ptr noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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, !6, i64 5152}
!12 = !{!"AF_GlyphHintsRec_", !6, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !10, i64 40, !10, i64 44, !6, i64 48, !10, i64 56, !10, i64 60, !6, i64 64, !7, i64 72, !10, i64 5144, !10, i64 5148, !6, i64 5152, !14, i64 5160}
!13 = !{!"long", !7, i64 0}
!14 = !{!"", !7, i64 0, !7, i64 64}
!15 = !{!12, !6, i64 0}
!16 = !{!12, !6, i64 64}
!17 = !{!12, !10, i64 60}
!18 = !{!19, !10, i64 72}
!19 = !{!"AF_LatinMetricsRec_", !20, i64 0, !10, i64 72, !7, i64 80}
!20 = !{!"AF_StyleMetricsRec_", !6, i64 0, !21, i64 8, !7, i64 56, !6, i64 64}
!21 = !{!"AF_ScalerRec_", !6, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !10, i64 40, !10, i64 44}
!22 = !{!13, !13, i64 0}
!23 = !{!24, !13, i64 48}
!24 = !{!"AF_SegmentRec_", !7, i64 0, !7, i64 1, !25, i64 2, !25, i64 4, !25, i64 6, !25, i64 8, !25, i64 10, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 56, !6, i64 64, !6, i64 72}
!25 = !{!"short", !7, i64 0}
!26 = !{!24, !7, i64 0}
!27 = !{!28, !10, i64 32}
!28 = !{!"AF_AxisHintsRec_", !10, i64 0, !10, i64 4, !6, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !10, i64 32, !29, i64 40}
!29 = !{!"", !7, i64 0, !7, i64 1440}
!30 = !{!28, !10, i64 0}
!31 = !{!12, !6, i64 48}
!32 = !{!12, !10, i64 44}
!33 = !{!34, !25, i64 24}
!34 = !{!"AF_PointRec_", !25, i64 0, !7, i64 2, !7, i64 3, !13, i64 8, !13, i64 16, !25, i64 24, !25, i64 26, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !6, i64 64, !6, i64 72}
!35 = !{!34, !13, i64 48}
!36 = !{!34, !25, i64 26}
!37 = !{!34, !13, i64 56}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}
!41 = !{!34, !6, i64 72}
!42 = !{!25, !25, i64 0}
!43 = !{!34, !7, i64 3}
!44 = !{!34, !6, i64 64}
!45 = !{!7, !7, i64 0}
!46 = !{!34, !25, i64 0}
!47 = !{!24, !6, i64 64}
!48 = !{!24, !6, i64 72}
!49 = !{!24, !25, i64 2}
!50 = !{!24, !25, i64 4}
!51 = !{!24, !25, i64 6}
!52 = !{!24, !25, i64 8}
!53 = !{!24, !25, i64 10}
!54 = !{!34, !7, i64 2}
!55 = !{i64 0, i64 1, !45, i64 1, i64 1, !45, i64 2, i64 2, !42, i64 4, i64 2, !42, i64 6, i64 2, !42, i64 8, i64 2, !42, i64 10, i64 2, !42, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !22, i64 56, i64 8, !22, i64 64, i64 8, !5, i64 72, i64 8, !5}
!56 = !{!24, !7, i64 1}
!57 = distinct !{!57, !39}
!58 = !{!28, !6, i64 8}
!59 = distinct !{!59, !39}


; 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.AF_AxisHintsRec_ = type { i32, i32, ptr, i32, i32, ptr, i32, %struct.anon }
%struct.anon = type { [18 x %struct.AF_SegmentRec_], [12 x %struct.AF_EdgeRec_] }
%struct.AF_SegmentRec_ = type { i8, i8, i16, i16, i16, i16, i16, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr }
%struct.AF_EdgeRec_ = type { i16, i64, i64, i8, i8, i64, ptr, ptr, ptr, i32, ptr, ptr }
%struct.AF_PointRec_ = type { i16, i8, i8, i64, i64, i16, i16, i64, i64, i64, i64, ptr, ptr }

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

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

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

; Function Attrs: nounwind uwtable
define hidden i32 @af_latin_hints_compute_segments(ptr noundef %0, i32 noundef %1) local_unnamed_addr #2 {
  %3 = alloca ptr, align 8
  %.sroa.5 = alloca [47 x i8], align 1
  %.sroa.6 = alloca { i64, ptr, ptr }, align 8
  %4 = getelementptr inbounds i8, ptr %0, i64 5152
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 72
  %7 = zext i32 %1 to i64
  %8 = getelementptr inbounds [2 x %struct.AF_AxisHintsRec_], ptr %6, i64 0, i64 %7
  %9 = load ptr, ptr %0, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #6
  store ptr null, ptr %3, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 47, ptr nonnull %.sroa.5)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %.sroa.6)
  %10 = getelementptr inbounds i8, ptr %0, i64 64
  %11 = load ptr, ptr %10, align 8, !tbaa !15
  %12 = getelementptr inbounds i8, ptr %0, i64 60
  %13 = load i32, ptr %12, align 4, !tbaa !16
  %14 = sext i32 %13 to i64
  %15 = getelementptr inbounds ptr, ptr %11, i64 %14
  %16 = getelementptr inbounds i8, ptr %5, i64 72
  %17 = load i32, ptr %16, align 8, !tbaa !17
  %18 = udiv i32 %17, 14
  %19 = zext nneg i32 %18 to i64
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(47) %.sroa.5, i8 0, i64 47, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.6, i8 0, i64 24, i1 false)
  %20 = getelementptr inbounds i8, ptr %8, i64 32
  %21 = load i32, ptr %20, align 8, !tbaa !21
  %22 = tail call i32 @llvm.abs.i32(i32 %21, i1 true)
  store i32 0, ptr %8, align 8, !tbaa !24
  %23 = icmp eq i32 %1, 0
  %24 = getelementptr inbounds i8, ptr %0, i64 48
  %25 = load ptr, ptr %24, align 8, !tbaa !25
  %26 = getelementptr inbounds i8, ptr %0, i64 44
  %27 = load i32, ptr %26, align 4, !tbaa !26
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds %struct.AF_PointRec_, ptr %25, i64 %28
  %30 = icmp sgt i32 %27, 0
  br i1 %23, label %31, label %38

31:                                               ; preds = %2
  br i1 %30, label %.lr.ph526, label %.loopexit518

.lr.ph526:                                        ; preds = %31, %.lr.ph526
  %.0291525 = phi ptr [ %36, %.lr.ph526 ], [ %25, %31 ]
  %32 = getelementptr inbounds i8, ptr %.0291525, i64 24
  %33 = getelementptr inbounds i8, ptr %.0291525, i64 48
  %34 = load <2 x i16>, ptr %32, align 8, !tbaa !27
  %35 = sext <2 x i16> %34 to <2 x i64>
  store <2 x i64> %35, ptr %33, align 8, !tbaa !29
  %36 = getelementptr inbounds i8, ptr %.0291525, i64 80
  %37 = icmp ult ptr %36, %29
  br i1 %37, label %.lr.ph526, label %.loopexit518, !llvm.loop !30

38:                                               ; preds = %2
  br i1 %30, label %.lr.ph, label %.loopexit518

.lr.ph:                                           ; preds = %38, %.lr.ph
  %.0407524 = phi ptr [ %44, %.lr.ph ], [ %25, %38 ]
  %39 = getelementptr inbounds i8, ptr %.0407524, i64 48
  %40 = getelementptr inbounds i8, ptr %.0407524, i64 24
  %41 = load <2 x i16>, ptr %40, align 8, !tbaa !27
  %42 = sext <2 x i16> %41 to <2 x i64>
  %43 = shufflevector <2 x i64> %42, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
  store <2 x i64> %43, ptr %39, align 8, !tbaa !29
  %44 = getelementptr inbounds i8, ptr %.0407524, i64 80
  %45 = icmp ult ptr %44, %29
  br i1 %45, label %.lr.ph, label %.loopexit518, !llvm.loop !32

.loopexit518:                                     ; preds = %.lr.ph, %.lr.ph526, %38, %31
  %46 = icmp sgt i32 %13, 0
  br i1 %46, label %.lr.ph529, label %._crit_edge

.lr.ph529:                                        ; preds = %.loopexit518, %241
  %47 = phi ptr [ %190, %241 ], [ null, %.loopexit518 ]
  %.0284528 = phi ptr [ %242, %241 ], [ %11, %.loopexit518 ]
  %.0285527 = phi i32 [ %.1286, %241 ], [ %22, %.loopexit518 ]
  %48 = load ptr, ptr %.0284528, align 8, !tbaa !14
  %49 = getelementptr inbounds i8, ptr %48, i64 72
  %50 = load ptr, ptr %49, align 8, !tbaa !33
  %51 = getelementptr inbounds i8, ptr %50, i64 3
  %52 = load i8, ptr %51, align 1, !tbaa !35
  %53 = call i8 @llvm.abs.i8(i8 %52, i1 false)
  %54 = zext i8 %53 to i32
  %55 = icmp eq i32 %22, %54
  br i1 %55, label %56, label %.loopexit517

56:                                               ; preds = %.lr.ph529
  %57 = getelementptr inbounds i8, ptr %48, i64 3
  %58 = load i8, ptr %57, align 1, !tbaa !35
  %59 = call i8 @llvm.abs.i8(i8 %58, i1 false)
  %60 = zext i8 %59 to i32
  %61 = icmp eq i32 %22, %60
  br i1 %61, label %.preheader, label %.loopexit517

.preheader:                                       ; preds = %56, %71
  %.0403 = phi ptr [ %63, %71 ], [ %48, %56 ]
  %62 = getelementptr inbounds i8, ptr %.0403, i64 72
  %63 = load ptr, ptr %62, align 8, !tbaa !33
  %64 = getelementptr inbounds i8, ptr %63, i64 3
  %65 = load i8, ptr %64, align 1, !tbaa !35
  %66 = call i8 @llvm.abs.i8(i8 %65, i1 false)
  %67 = zext i8 %66 to i32
  %.not444 = icmp eq i32 %22, %67
  br i1 %.not444, label %71, label %68

68:                                               ; preds = %.preheader
  %69 = getelementptr inbounds i8, ptr %63, i64 64
  %70 = load ptr, ptr %69, align 8, !tbaa !36
  br label %.loopexit517

71:                                               ; preds = %.preheader
  %72 = icmp eq ptr %63, %48
  br i1 %72, label %.loopexit517, label %.preheader

.loopexit517:                                     ; preds = %71, %68, %56, %.lr.ph529
  %.1404 = phi ptr [ %70, %68 ], [ %48, %56 ], [ %48, %.lr.ph529 ], [ %63, %71 ]
  br label %73

73:                                               ; preds = %237, %.loopexit517
  %74 = phi ptr [ %47, %.loopexit517 ], [ %238, %237 ]
  %.2405 = phi ptr [ %.1404, %.loopexit517 ], [ %240, %237 ]
  %.0399 = phi i32 [ 0, %.loopexit517 ], [ %.2401, %237 ]
  %.0390 = phi i64 [ 32000, %.loopexit517 ], [ %.7397, %237 ]
  %.0381 = phi i64 [ -32000, %.loopexit517 ], [ %.7388, %237 ]
  %.0373 = phi i64 [ 32000, %.loopexit517 ], [ %.6379, %237 ]
  %.0365 = phi i64 [ -32000, %.loopexit517 ], [ %.6371, %237 ]
  %.0357 = phi i16 [ 0, %.loopexit517 ], [ %.6363, %237 ]
  %.0349 = phi i16 [ 0, %.loopexit517 ], [ %.6355, %237 ]
  %.0340 = phi i64 [ 32000, %.loopexit517 ], [ %.8348, %237 ]
  %.0334 = phi i64 [ -32000, %.loopexit517 ], [ %.7, %237 ]
  %.0331 = phi i8 [ 0, %.loopexit517 ], [ %.1332, %237 ]
  %.0326 = phi ptr [ null, %.loopexit517 ], [ %.4330, %237 ]
  %.0321 = phi i64 [ 32000, %.loopexit517 ], [ %.4325, %237 ]
  %.0316 = phi i64 [ -32000, %.loopexit517 ], [ %.4320, %237 ]
  %.0312 = phi i64 [ 32000, %.loopexit517 ], [ %.3315, %237 ]
  %.0308 = phi i64 [ -32000, %.loopexit517 ], [ %.3311, %237 ]
  %.0304 = phi i16 [ 0, %.loopexit517 ], [ %.3307, %237 ]
  %.0300 = phi i16 [ 0, %.loopexit517 ], [ %.3303, %237 ]
  %.0296 = phi i64 [ 32000, %.loopexit517 ], [ %.3299, %237 ]
  %.0292 = phi i64 [ -32000, %.loopexit517 ], [ %.3295, %237 ]
  %.1286 = phi i32 [ %.0285527, %.loopexit517 ], [ %.2287, %237 ]
  %.not445 = icmp eq i32 %.0399, 0
  br i1 %.not445, label %189, label %75

75:                                               ; preds = %73
  %76 = getelementptr inbounds i8, ptr %.2405, i64 48
  %77 = load i64, ptr %76, align 8, !tbaa !37
  %spec.select = call i64 @llvm.smin.i64(i64 %77, i64 %.0390)
  %.1382 = call i64 @llvm.smax.i64(i64 %77, i64 %.0381)
  %78 = getelementptr inbounds i8, ptr %.2405, i64 56
  %79 = load i64, ptr %78, align 8, !tbaa !38
  %80 = icmp slt i64 %79, %.0373
  %.pre.pre = load i16, ptr %.2405, align 8, !tbaa !39
  %spec.select547 = call i64 @llvm.smin.i64(i64 %79, i64 %.0373)
  %spec.select548 = select i1 %80, i16 %.pre.pre, i16 %.0357
  %81 = icmp sgt i64 %79, %.0365
  %.1366 = call i64 @llvm.smax.i64(i64 %79, i64 %.0365)
  %.1350 = select i1 %81, i16 %.pre.pre, i16 %.0349
  %82 = and i16 %.pre.pre, 3
  %.not446 = icmp eq i16 %82, 0
  %spec.select460 = call i64 @llvm.smin.i64(i64 %79, i64 %.0340)
  %spec.select470 = call i64 @llvm.smax.i64(i64 %79, i64 %.0334)
  %.2342 = select i1 %.not446, i64 %spec.select460, i64 %.0340
  %.1335 = select i1 %.not446, i64 %spec.select470, i64 %.0334
  %83 = getelementptr inbounds i8, ptr %.2405, i64 3
  %84 = load i8, ptr %83, align 1, !tbaa !35
  %85 = sext i8 %84 to i32
  %.not447 = icmp ne i32 %.1286, %85
  %86 = icmp eq ptr %.2405, %.1404
  %or.cond = select i1 %.not447, i1 true, i1 %86
  br i1 %or.cond, label %87, label %189

87:                                               ; preds = %75
  %.not448 = icmp eq ptr %.0326, null
  br i1 %.not448, label %93, label %88

88:                                               ; preds = %87
  %89 = getelementptr inbounds i8, ptr %74, i64 64
  %90 = load ptr, ptr %89, align 8, !tbaa !40
  %91 = getelementptr inbounds i8, ptr %.0326, i64 72
  %92 = load ptr, ptr %91, align 8, !tbaa !42
  %.not449 = icmp eq ptr %90, %92
  br i1 %.not449, label %117, label %93

93:                                               ; preds = %88, %87
  %94 = getelementptr inbounds i8, ptr %74, i64 72
  store ptr %.2405, ptr %94, align 8, !tbaa !42
  %95 = add nsw i64 %spec.select, %.1382
  %96 = lshr i64 %95, 1
  %97 = trunc i64 %96 to i16
  %98 = getelementptr inbounds i8, ptr %74, i64 2
  store i16 %97, ptr %98, align 2, !tbaa !43
  %99 = sub nsw i64 %.1382, %spec.select
  %100 = lshr i64 %99, 1
  %101 = trunc i64 %100 to i16
  %102 = getelementptr inbounds i8, ptr %74, i64 4
  store i16 %101, ptr %102, align 4, !tbaa !44
  %103 = or i16 %.1350, %spec.select548
  %104 = and i16 %103, 3
  %.not453 = icmp ne i16 %104, 0
  %105 = sub nsw i64 %.1335, %.2342
  %106 = icmp slt i64 %105, %19
  %or.cond462 = select i1 %.not453, i1 %106, i1 false
  br i1 %or.cond462, label %107, label %110

107:                                              ; preds = %93
  %108 = load i8, ptr %74, align 8, !tbaa !45
  %109 = or i8 %108, 1
  store i8 %109, ptr %74, align 8, !tbaa !45
  br label %110

110:                                              ; preds = %107, %93
  %111 = trunc i64 %spec.select547 to i16
  %112 = getelementptr inbounds i8, ptr %74, i64 6
  store i16 %111, ptr %112, align 2, !tbaa !46
  %113 = trunc i64 %.1366 to i16
  %114 = getelementptr inbounds i8, ptr %74, i64 8
  store i16 %113, ptr %114, align 8, !tbaa !47
  %115 = sub i16 %113, %111
  %116 = getelementptr inbounds i8, ptr %74, i64 10
  store i16 %115, ptr %116, align 2, !tbaa !48
  br label %188

117:                                              ; preds = %88
  %118 = getelementptr inbounds i8, ptr %92, i64 2
  %119 = load i8, ptr %118, align 2, !tbaa !49
  %120 = getelementptr inbounds i8, ptr %.2405, i64 2
  %121 = load i8, ptr %120, align 2, !tbaa !49
  %122 = icmp eq i8 %119, %121
  br i1 %122, label %123, label %146

123:                                              ; preds = %117
  %spec.select463 = call i64 @llvm.smin.i64(i64 %.0321, i64 %spec.select)
  %.2383 = call i64 @llvm.smax.i64(i64 %.0316, i64 %.1382)
  %124 = icmp slt i64 %.0312, %spec.select547
  %.2375 = call i64 @llvm.smin.i64(i64 %.0312, i64 %spec.select547)
  %.2359 = select i1 %124, i16 %.0304, i16 %spec.select548
  %125 = icmp sgt i64 %.0308, %.1366
  %.2367 = call i64 @llvm.smax.i64(i64 %.0308, i64 %.1366)
  %.2351 = select i1 %125, i16 %.0300, i16 %.1350
  %.3343 = call i64 @llvm.smin.i64(i64 %.0296, i64 %.2342)
  %.2336 = call i64 @llvm.smax.i64(i64 %.0292, i64 %.1335)
  store ptr %.2405, ptr %91, align 8, !tbaa !42
  %126 = add nsw i64 %spec.select463, %.2383
  %127 = lshr i64 %126, 1
  %128 = trunc i64 %127 to i16
  %129 = getelementptr inbounds i8, ptr %.0326, i64 2
  store i16 %128, ptr %129, align 2, !tbaa !43
  %130 = sub nsw i64 %.2383, %spec.select463
  %131 = lshr i64 %130, 1
  %132 = trunc i64 %131 to i16
  %133 = getelementptr inbounds i8, ptr %.0326, i64 4
  store i16 %132, ptr %133, align 4, !tbaa !44
  %134 = or i16 %.2351, %.2359
  %135 = and i16 %134, 3
  %.not451 = icmp ne i16 %135, 0
  %136 = sub nsw i64 %.2336, %.3343
  %137 = icmp slt i64 %136, %19
  %or.cond465 = select i1 %.not451, i1 %137, i1 false
  %138 = load i8, ptr %.0326, align 8, !tbaa !45
  %139 = and i8 %138, -2
  %masksel = zext i1 %or.cond465 to i8
  %storemerge452 = or disjoint i8 %139, %masksel
  store i8 %storemerge452, ptr %.0326, align 8, !tbaa !45
  %140 = trunc i64 %.2375 to i16
  %141 = getelementptr inbounds i8, ptr %.0326, i64 6
  store i16 %140, ptr %141, align 2, !tbaa !46
  %142 = trunc i64 %.2367 to i16
  %143 = getelementptr inbounds i8, ptr %.0326, i64 8
  store i16 %142, ptr %143, align 8, !tbaa !47
  %144 = sub i16 %142, %140
  %145 = getelementptr inbounds i8, ptr %.0326, i64 10
  store i16 %144, ptr %145, align 2, !tbaa !48
  br label %185

146:                                              ; preds = %117
  %147 = sub nsw i64 %.0308, %.0312
  %148 = call i64 @llvm.abs.i64(i64 %147, i1 true)
  %149 = sub nsw i64 %.1366, %spec.select547
  %150 = call i64 @llvm.abs.i64(i64 %149, i1 true)
  %151 = icmp ugt i64 %148, %150
  br i1 %151, label %152, label %161

152:                                              ; preds = %146
  %spec.select466 = call i64 @llvm.smin.i64(i64 %spec.select, i64 %.0321)
  %.1317 = call i64 @llvm.smax.i64(i64 %.1382, i64 %.0316)
  store ptr %.2405, ptr %91, align 8, !tbaa !42
  %153 = add nsw i64 %spec.select466, %.1317
  %154 = lshr i64 %153, 1
  %155 = trunc i64 %154 to i16
  %156 = getelementptr inbounds i8, ptr %.0326, i64 2
  store i16 %155, ptr %156, align 2, !tbaa !43
  %157 = sub nsw i64 %.1317, %spec.select466
  %158 = lshr i64 %157, 1
  %159 = trunc i64 %158 to i16
  %160 = getelementptr inbounds i8, ptr %.0326, i64 4
  store i16 %159, ptr %160, align 4, !tbaa !44
  br label %185

161:                                              ; preds = %146
  %spec.select467 = call i64 @llvm.smin.i64(i64 %.0321, i64 %spec.select)
  %.3384 = call i64 @llvm.smax.i64(i64 %.0316, i64 %.1382)
  %162 = getelementptr inbounds i8, ptr %74, i64 72
  store ptr %.2405, ptr %162, align 8, !tbaa !42
  %163 = add nsw i64 %spec.select467, %.3384
  %164 = lshr i64 %163, 1
  %165 = trunc i64 %164 to i16
  %166 = getelementptr inbounds i8, ptr %74, i64 2
  store i16 %165, ptr %166, align 2, !tbaa !43
  %167 = sub nsw i64 %.3384, %spec.select467
  %168 = lshr i64 %167, 1
  %169 = trunc i64 %168 to i16
  %170 = getelementptr inbounds i8, ptr %74, i64 4
  store i16 %169, ptr %170, align 4, !tbaa !44
  %171 = or i16 %.1350, %spec.select548
  %172 = and i16 %171, 3
  %.not450 = icmp ne i16 %172, 0
  %173 = sub nsw i64 %.1335, %.2342
  %174 = icmp slt i64 %173, %19
  %or.cond469 = select i1 %.not450, i1 %174, i1 false
  br i1 %or.cond469, label %175, label %178

175:                                              ; preds = %161
  %176 = load i8, ptr %74, align 8, !tbaa !45
  %177 = or i8 %176, 1
  store i8 %177, ptr %74, align 8, !tbaa !45
  br label %178

178:                                              ; preds = %175, %161
  %179 = trunc i64 %spec.select547 to i16
  %180 = getelementptr inbounds i8, ptr %74, i64 6
  store i16 %179, ptr %180, align 2, !tbaa !46
  %181 = trunc i64 %.1366 to i16
  %182 = getelementptr inbounds i8, ptr %74, i64 8
  store i16 %181, ptr %182, align 8, !tbaa !47
  %183 = sub i16 %181, %179
  %184 = getelementptr inbounds i8, ptr %74, i64 10
  store i16 %183, ptr %184, align 2, !tbaa !48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %.0326, ptr noundef nonnull align 8 dereferenceable(80) %74, i64 80, i1 false), !tbaa.struct !50
  br label %185

185:                                              ; preds = %152, %178, %123
  %.4394 = phi i64 [ %spec.select463, %123 ], [ %spec.select, %152 ], [ %spec.select467, %178 ]
  %.4385 = phi i64 [ %.2383, %123 ], [ %.1382, %152 ], [ %.3384, %178 ]
  %.3376 = phi i64 [ %.2375, %123 ], [ %spec.select547, %152 ], [ %spec.select547, %178 ]
  %.3368 = phi i64 [ %.2367, %123 ], [ %.1366, %152 ], [ %.1366, %178 ]
  %.3360 = phi i16 [ %.2359, %123 ], [ %spec.select548, %152 ], [ %spec.select548, %178 ]
  %.3352 = phi i16 [ %.2351, %123 ], [ %.1350, %152 ], [ %.1350, %178 ]
  %.4344 = phi i64 [ %.3343, %123 ], [ %.2342, %152 ], [ %.2342, %178 ]
  %.3337 = phi i64 [ %.2336, %123 ], [ %.1335, %152 ], [ %.1335, %178 ]
  %.2323 = phi i64 [ %.0321, %123 ], [ %spec.select466, %152 ], [ %spec.select467, %178 ]
  %.2318 = phi i64 [ %.0316, %123 ], [ %.1317, %152 ], [ %.3384, %178 ]
  %.1313 = phi i64 [ %.0312, %123 ], [ %.0312, %152 ], [ %spec.select547, %178 ]
  %.1309 = phi i64 [ %.0308, %123 ], [ %.0308, %152 ], [ %.1366, %178 ]
  %.1305 = phi i16 [ %.0304, %123 ], [ %.0304, %152 ], [ %spec.select548, %178 ]
  %.1301 = phi i16 [ %.0300, %123 ], [ %.0300, %152 ], [ %.1350, %178 ]
  %.1297 = phi i64 [ %.0296, %123 ], [ %.0296, %152 ], [ %.2342, %178 ]
  %.1293 = phi i64 [ %.0292, %123 ], [ %.0292, %152 ], [ %.1335, %178 ]
  %186 = load i32, ptr %8, align 8, !tbaa !24
  %187 = add i32 %186, -1
  store i32 %187, ptr %8, align 8, !tbaa !24
  br label %188

188:                                              ; preds = %185, %110
  %.5395 = phi i64 [ %spec.select, %110 ], [ %.4394, %185 ]
  %.5386 = phi i64 [ %.1382, %110 ], [ %.4385, %185 ]
  %.4377 = phi i64 [ %spec.select547, %110 ], [ %.3376, %185 ]
  %.4369 = phi i64 [ %.1366, %110 ], [ %.3368, %185 ]
  %.4361 = phi i16 [ %spec.select548, %110 ], [ %.3360, %185 ]
  %.4353 = phi i16 [ %.1350, %110 ], [ %.3352, %185 ]
  %.5345 = phi i64 [ %.2342, %110 ], [ %.4344, %185 ]
  %.4338 = phi i64 [ %.1335, %110 ], [ %.3337, %185 ]
  %.1327 = phi ptr [ %74, %110 ], [ %.0326, %185 ]
  %.3324 = phi i64 [ %spec.select, %110 ], [ %.2323, %185 ]
  %.3319 = phi i64 [ %.1382, %110 ], [ %.2318, %185 ]
  %.2314 = phi i64 [ %spec.select547, %110 ], [ %.1313, %185 ]
  %.2310 = phi i64 [ %.1366, %110 ], [ %.1309, %185 ]
  %.2306 = phi i16 [ %spec.select548, %110 ], [ %.1305, %185 ]
  %.2302 = phi i16 [ %.1350, %110 ], [ %.1301, %185 ]
  %.2298 = phi i64 [ %.2342, %110 ], [ %.1297, %185 ]
  %.2294 = phi i64 [ %.1335, %110 ], [ %.1293, %185 ]
  store ptr null, ptr %3, align 8, !tbaa !14
  br label %189

189:                                              ; preds = %75, %188, %73
  %190 = phi ptr [ null, %188 ], [ %74, %73 ], [ %74, %75 ]
  %.not455 = phi i1 [ true, %188 ], [ true, %73 ], [ false, %75 ]
  %.6396 = phi i64 [ %.5395, %188 ], [ %.0390, %73 ], [ %spec.select, %75 ]
  %.6387 = phi i64 [ %.5386, %188 ], [ %.0381, %73 ], [ %.1382, %75 ]
  %.5378 = phi i64 [ %.4377, %188 ], [ %.0373, %73 ], [ %spec.select547, %75 ]
  %.5370 = phi i64 [ %.4369, %188 ], [ %.0365, %73 ], [ %.1366, %75 ]
  %.5362 = phi i16 [ %.4361, %188 ], [ %.0357, %73 ], [ %spec.select548, %75 ]
  %.5354 = phi i16 [ %.4353, %188 ], [ %.0349, %73 ], [ %.1350, %75 ]
  %.6346 = phi i64 [ %.5345, %188 ], [ %.0340, %73 ], [ %.2342, %75 ]
  %.5339 = phi i64 [ %.4338, %188 ], [ %.0334, %73 ], [ %.1335, %75 ]
  %.2328 = phi ptr [ %.1327, %188 ], [ %.0326, %73 ], [ %.0326, %75 ]
  %.4325 = phi i64 [ %.3324, %188 ], [ %.0321, %73 ], [ %.0321, %75 ]
  %.4320 = phi i64 [ %.3319, %188 ], [ %.0316, %73 ], [ %.0316, %75 ]
  %.3315 = phi i64 [ %.2314, %188 ], [ %.0312, %73 ], [ %.0312, %75 ]
  %.3311 = phi i64 [ %.2310, %188 ], [ %.0308, %73 ], [ %.0308, %75 ]
  %.3307 = phi i16 [ %.2306, %188 ], [ %.0304, %73 ], [ %.0304, %75 ]
  %.3303 = phi i16 [ %.2302, %188 ], [ %.0300, %73 ], [ %.0300, %75 ]
  %.3299 = phi i64 [ %.2298, %188 ], [ %.0296, %73 ], [ %.0296, %75 ]
  %.3295 = phi i64 [ %.2294, %188 ], [ %.0292, %73 ], [ %.0292, %75 ]
  %191 = icmp eq ptr %.2405, %.1404
  br i1 %191, label %192, label %193

192:                                              ; preds = %189
  %.not454 = icmp eq i8 %.0331, 0
  br i1 %.not454, label %193, label %241

193:                                              ; preds = %192, %189
  %.1332 = phi i8 [ %.0331, %189 ], [ 1, %192 ]
  br i1 %.not455, label %194, label %237

194:                                              ; preds = %193
  %195 = getelementptr inbounds i8, ptr %.2405, i64 3
  %196 = load i8, ptr %195, align 1, !tbaa !35
  %197 = sext i8 %196 to i32
  %198 = call i32 @llvm.abs.i32(i32 %197, i1 true)
  %199 = icmp eq i32 %198, %22
  br i1 %199, label %204, label %200

200:                                              ; preds = %194
  %201 = getelementptr inbounds i8, ptr %.2405, i64 72
  %202 = load ptr, ptr %201, align 8, !tbaa !33
  %203 = icmp eq ptr %.2405, %202
  br i1 %203, label %204, label %237

204:                                              ; preds = %200, %194
  %205 = load i32, ptr %8, align 8, !tbaa !24
  %206 = icmp ugt i32 %205, 1000
  br i1 %206, label %.thread512, label %207

.thread512:                                       ; preds = %204
  store i32 0, ptr %8, align 8, !tbaa !24
  br label %.loopexit516

207:                                              ; preds = %204
  %208 = call i32 @af_axis_hints_new_segment(ptr noundef nonnull %8, ptr noundef %9, ptr noundef nonnull %3) #6
  %.not456 = icmp eq i32 %208, 0
  br i1 %.not456, label %209, label %.loopexit516

209:                                              ; preds = %207
  %210 = load ptr, ptr %3, align 8, !tbaa !14
  store i8 0, ptr %210, align 8, !tbaa !51
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %210, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(47) %.sroa.5.0..sroa_idx, ptr noundef nonnull align 1 dereferenceable(47) %.sroa.5, i64 47, i1 false), !tbaa.struct !52
  %.sroa.5253.0..sroa_idx = getelementptr inbounds i8, ptr %210, i64 48
  store i64 32000, ptr %.sroa.5253.0..sroa_idx, align 8, !tbaa !29
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %210, i64 56
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.6.0..sroa_idx, ptr noundef nonnull align 8 dereferenceable(24) %.sroa.6, i64 24, i1 false), !tbaa.struct !53
  %211 = load ptr, ptr %3, align 8, !tbaa !14
  %212 = getelementptr inbounds i8, ptr %211, i64 1
  store i8 %196, ptr %212, align 1, !tbaa !54
  %213 = getelementptr inbounds i8, ptr %211, i64 64
  store ptr %.2405, ptr %213, align 8, !tbaa !40
  %214 = getelementptr inbounds i8, ptr %211, i64 72
  store ptr %.2405, ptr %214, align 8, !tbaa !42
  %.not457 = icmp eq ptr %.2328, null
  %215 = load ptr, ptr %3, align 8
  %216 = getelementptr inbounds i8, ptr %215, i64 -80
  %.3329 = select i1 %.not457, ptr null, ptr %216
  %217 = getelementptr inbounds i8, ptr %.2405, i64 48
  %218 = load i64, ptr %217, align 8, !tbaa !37
  %219 = getelementptr inbounds i8, ptr %.2405, i64 56
  %220 = load i64, ptr %219, align 8, !tbaa !38
  %221 = load i16, ptr %.2405, align 8, !tbaa !39
  %222 = and i16 %221, 3
  %.not458 = icmp eq i16 %222, 0
  %.7347 = select i1 %.not458, i64 %220, i64 32000
  %.6 = select i1 %.not458, i64 %220, i64 -32000
  %223 = getelementptr inbounds i8, ptr %.2405, i64 72
  %224 = load ptr, ptr %223, align 8, !tbaa !33
  %225 = icmp eq ptr %.2405, %224
  br i1 %225, label %226, label %237

226:                                              ; preds = %209
  %227 = trunc i64 %218 to i16
  %228 = getelementptr inbounds i8, ptr %215, i64 2
  store i16 %227, ptr %228, align 2, !tbaa !43
  br i1 %.not458, label %232, label %229

229:                                              ; preds = %226
  %230 = load i8, ptr %215, align 8, !tbaa !45
  %231 = or i8 %230, 1
  store i8 %231, ptr %215, align 8, !tbaa !45
  br label %232

232:                                              ; preds = %229, %226
  %233 = trunc i64 %220 to i16
  %234 = getelementptr inbounds i8, ptr %215, i64 6
  store i16 %233, ptr %234, align 2, !tbaa !46
  %235 = getelementptr inbounds i8, ptr %215, i64 8
  store i16 %233, ptr %235, align 8, !tbaa !47
  %236 = getelementptr inbounds i8, ptr %215, i64 10
  store i16 0, ptr %236, align 2, !tbaa !48
  store ptr null, ptr %3, align 8, !tbaa !14
  br label %237

237:                                              ; preds = %193, %200, %232, %209
  %238 = phi ptr [ %190, %193 ], [ null, %232 ], [ %215, %209 ], [ %190, %200 ]
  %.2401 = phi i32 [ 1, %193 ], [ 0, %232 ], [ 1, %209 ], [ 0, %200 ]
  %.7397 = phi i64 [ %.6396, %193 ], [ %218, %232 ], [ %218, %209 ], [ %.6396, %200 ]
  %.7388 = phi i64 [ %.6387, %193 ], [ %218, %232 ], [ %218, %209 ], [ %.6387, %200 ]
  %.6379 = phi i64 [ %.5378, %193 ], [ %220, %232 ], [ %220, %209 ], [ %.5378, %200 ]
  %.6371 = phi i64 [ %.5370, %193 ], [ %220, %232 ], [ %220, %209 ], [ %.5370, %200 ]
  %.6363 = phi i16 [ %.5362, %193 ], [ %221, %232 ], [ %221, %209 ], [ %.5362, %200 ]
  %.6355 = phi i16 [ %.5354, %193 ], [ %221, %232 ], [ %221, %209 ], [ %.5354, %200 ]
  %.8348 = phi i64 [ %.6346, %193 ], [ %.7347, %232 ], [ %.7347, %209 ], [ %.6346, %200 ]
  %.7 = phi i64 [ %.5339, %193 ], [ %.6, %232 ], [ %.6, %209 ], [ %.5339, %200 ]
  %.4330 = phi ptr [ %.2328, %193 ], [ %.3329, %232 ], [ %.3329, %209 ], [ %.2328, %200 ]
  %.2287 = phi i32 [ %.1286, %193 ], [ %197, %232 ], [ %197, %209 ], [ %.1286, %200 ]
  %239 = getelementptr inbounds i8, ptr %.2405, i64 64
  %240 = load ptr, ptr %239, align 8, !tbaa !36
  br label %73

241:                                              ; preds = %192
  %242 = getelementptr inbounds i8, ptr %.0284528, i64 8
  %243 = icmp ult ptr %242, %15
  br i1 %243, label %.lr.ph529, label %._crit_edge, !llvm.loop !55

._crit_edge:                                      ; preds = %241, %.loopexit518
  %244 = getelementptr inbounds i8, ptr %8, i64 8
  %245 = load ptr, ptr %244, align 8, !tbaa !56
  %.not = icmp eq ptr %245, null
  br i1 %.not, label %.loopexit516, label %246

246:                                              ; preds = %._crit_edge
  %247 = load i32, ptr %8, align 8, !tbaa !24
  %248 = zext i32 %247 to i64
  %249 = getelementptr inbounds %struct.AF_SegmentRec_, ptr %245, i64 %248
  %.not553 = icmp eq i32 %247, 0
  br i1 %.not553, label %.loopexit516, label %.lr.ph532

.lr.ph532:                                        ; preds = %246, %300
  %storemerge530 = phi ptr [ %301, %300 ], [ %245, %246 ]
  %250 = getelementptr inbounds i8, ptr %storemerge530, i64 64
  %251 = load ptr, ptr %250, align 8, !tbaa !40
  %252 = getelementptr inbounds i8, ptr %storemerge530, i64 72
  %253 = load ptr, ptr %252, align 8, !tbaa !42
  %254 = getelementptr inbounds i8, ptr %251, i64 56
  %255 = load i64, ptr %254, align 8, !tbaa !38
  %256 = getelementptr inbounds i8, ptr %253, i64 56
  %257 = load i64, ptr %256, align 8, !tbaa !38
  %258 = icmp slt i64 %255, %257
  %259 = getelementptr inbounds i8, ptr %251, i64 72
  %260 = load ptr, ptr %259, align 8, !tbaa !33
  %261 = getelementptr inbounds i8, ptr %260, i64 56
  %262 = load i64, ptr %261, align 8, !tbaa !38
  br i1 %258, label %263, label %280

263:                                              ; preds = %.lr.ph532
  %264 = icmp slt i64 %262, %255
  br i1 %264, label %265, label %272

265:                                              ; preds = %263
  %266 = getelementptr inbounds i8, ptr %storemerge530, i64 10
  %267 = load i16, ptr %266, align 2, !tbaa !48
  %268 = sub nsw i64 %255, %262
  %269 = lshr i64 %268, 1
  %270 = trunc i64 %269 to i16
  %271 = add i16 %267, %270
  store i16 %271, ptr %266, align 2, !tbaa !48
  br label %272

272:                                              ; preds = %265, %263
  %273 = getelementptr inbounds i8, ptr %253, i64 64
  %274 = load ptr, ptr %273, align 8, !tbaa !36
  %275 = getelementptr inbounds i8, ptr %274, i64 56
  %276 = load i64, ptr %275, align 8, !tbaa !38
  %277 = icmp sgt i64 %276, %257
  br i1 %277, label %278, label %300

278:                                              ; preds = %272
  %279 = sub nsw i64 %276, %257
  br label %.sink.split

280:                                              ; preds = %.lr.ph532
  %281 = icmp sgt i64 %262, %255
  br i1 %281, label %282, label %289

282:                                              ; preds = %280
  %283 = getelementptr inbounds i8, ptr %storemerge530, i64 10
  %284 = load i16, ptr %283, align 2, !tbaa !48
  %285 = sub nsw i64 %262, %255
  %286 = lshr i64 %285, 1
  %287 = trunc i64 %286 to i16
  %288 = add i16 %284, %287
  store i16 %288, ptr %283, align 2, !tbaa !48
  br label %289

289:                                              ; preds = %282, %280
  %290 = getelementptr inbounds i8, ptr %253, i64 64
  %291 = load ptr, ptr %290, align 8, !tbaa !36
  %292 = getelementptr inbounds i8, ptr %291, i64 56
  %293 = load i64, ptr %292, align 8, !tbaa !38
  %294 = icmp slt i64 %293, %257
  br i1 %294, label %295, label %300

295:                                              ; preds = %289
  %296 = sub nsw i64 %257, %293
  br label %.sink.split

.sink.split:                                      ; preds = %278, %295
  %.sink552 = phi i64 [ %296, %295 ], [ %279, %278 ]
  %.sink549 = getelementptr inbounds i8, ptr %storemerge530, i64 10
  %.sink550 = load i16, ptr %.sink549, align 2, !tbaa !48
  %297 = lshr i64 %.sink552, 1
  %298 = trunc i64 %297 to i16
  %299 = add i16 %.sink550, %298
  store i16 %299, ptr %.sink549, align 2, !tbaa !48
  br label %300

300:                                              ; preds = %.sink.split, %289, %272
  %301 = getelementptr inbounds i8, ptr %storemerge530, i64 80
  %302 = icmp ult ptr %301, %249
  br i1 %302, label %.lr.ph532, label %.loopexit516, !llvm.loop !57

.loopexit516:                                     ; preds = %207, %300, %246, %._crit_edge, %.thread512
  %.3 = phi i32 [ 0, %.thread512 ], [ 0, %._crit_edge ], [ 0, %246 ], [ 0, %300 ], [ %208, %207 ]
  call void @llvm.lifetime.end.p0(i64 47, ptr nonnull %.sroa.5)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %.sroa.6)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #6
  ret i32 %.3
}

; Function Attrs: mustprogress 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) #3

declare hidden i32 @af_axis_hints_new_segment(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.abs.i8(i8, i1 immarg) #5

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 5152}
!6 = !{!"AF_GlyphHintsRec_", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !11, i64 44, !7, i64 48, !11, i64 56, !11, i64 60, !7, i64 64, !8, i64 72, !11, i64 5144, !11, i64 5148, !7, i64 5152, !12, i64 5160}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"", !8, i64 0, !8, i64 64}
!13 = !{!6, !7, i64 0}
!14 = !{!7, !7, i64 0}
!15 = !{!6, !7, i64 64}
!16 = !{!6, !11, i64 60}
!17 = !{!18, !11, i64 72}
!18 = !{!"AF_LatinMetricsRec_", !19, i64 0, !11, i64 72, !8, i64 80}
!19 = !{!"AF_StyleMetricsRec_", !7, i64 0, !20, i64 8, !8, i64 56, !7, i64 64}
!20 = !{!"AF_ScalerRec_", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !11, i64 44}
!21 = !{!22, !11, i64 32}
!22 = !{!"AF_AxisHintsRec_", !11, i64 0, !11, i64 4, !7, i64 8, !11, i64 16, !11, i64 20, !7, i64 24, !11, i64 32, !23, i64 40}
!23 = !{!"", !8, i64 0, !8, i64 1440}
!24 = !{!22, !11, i64 0}
!25 = !{!6, !7, i64 48}
!26 = !{!6, !11, i64 44}
!27 = !{!28, !28, i64 0}
!28 = !{!"short", !8, i64 0}
!29 = !{!10, !10, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!34, !7, i64 72}
!34 = !{!"AF_PointRec_", !28, i64 0, !8, i64 2, !8, i64 3, !10, i64 8, !10, i64 16, !28, i64 24, !28, i64 26, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 72}
!35 = !{!34, !8, i64 3}
!36 = !{!34, !7, i64 64}
!37 = !{!34, !10, i64 48}
!38 = !{!34, !10, i64 56}
!39 = !{!34, !28, i64 0}
!40 = !{!41, !7, i64 64}
!41 = !{!"AF_SegmentRec_", !8, i64 0, !8, i64 1, !28, i64 2, !28, i64 4, !28, i64 6, !28, i64 8, !28, i64 10, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 72}
!42 = !{!41, !7, i64 72}
!43 = !{!41, !28, i64 2}
!44 = !{!41, !28, i64 4}
!45 = !{!41, !8, i64 0}
!46 = !{!41, !28, i64 6}
!47 = !{!41, !28, i64 8}
!48 = !{!41, !28, i64 10}
!49 = !{!34, !8, i64 2}
!50 = !{i64 0, i64 1, !51, i64 1, i64 1, !51, i64 2, i64 2, !27, i64 4, i64 2, !27, i64 6, i64 2, !27, i64 8, i64 2, !27, i64 10, i64 2, !27, i64 16, i64 8, !14, i64 24, i64 8, !14, i64 32, i64 8, !14, i64 40, i64 8, !14, i64 48, i64 8, !29, i64 56, i64 8, !29, i64 64, i64 8, !14, i64 72, i64 8, !14}
!51 = !{!8, !8, i64 0}
!52 = !{i64 0, i64 1, !51, i64 1, i64 2, !27, i64 3, i64 2, !27, i64 5, i64 2, !27, i64 7, i64 2, !27, i64 9, i64 2, !27, i64 15, i64 8, !14, i64 23, i64 8, !14, i64 31, i64 8, !14, i64 39, i64 8, !14, i64 47, i64 8, !29, i64 55, i64 8, !29, i64 63, i64 8, !14, i64 71, i64 8, !14}
!53 = !{i64 0, i64 8, !29, i64 8, i64 8, !14, i64 16, i64 8, !14}
!54 = !{!41, !8, i64 1}
!55 = distinct !{!55, !31}
!56 = !{!22, !7, i64 8}
!57 = distinct !{!57, !31}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass