; LLVM IR from Overload-Technologies/Overload :: Dependencies/assimp/code/PostProcessing (ComputeUVMappingProcess)

; 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.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%struct.aiFace = type { i32, ptr }

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_Z13RemoveUVSeamsP6aiMeshP10aiVector3tIfE(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %15

15:                                               ; preds = %268, %2
  %16 = load i32, ptr %5, align 4, !tbaa !9
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.aiMesh, ptr %17, i32 0, i32 2
  %19 = load i32, ptr %18, align 8, !tbaa !11
  %20 = icmp ult i32 %16, %19
  br i1 %20, label %22, label %21

21:                                               ; preds = %15
  store i32 2, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #2
  br label %271

22:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  %23 = load ptr, ptr %3, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.aiMesh, ptr %23, i32 0, i32 10
  %25 = load ptr, ptr %24, align 8, !tbaa !18
  %26 = load i32, ptr %5, align 4, !tbaa !9
  %27 = zext i32 %26 to i64
  %28 = getelementptr inbounds %struct.aiFace, ptr %25, i64 %27
  store ptr %28, ptr %7, align 8, !tbaa !5
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.aiFace, ptr %29, i32 0, i32 0
  %31 = load i32, ptr %30, align 8, !tbaa !19
  %32 = icmp ult i32 %31, 3
  br i1 %32, label %33, label %34

33:                                               ; preds = %22
  store i32 4, ptr %6, align 4
  br label %265

34:                                               ; preds = %22
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.aiFace, ptr %35, i32 0, i32 0
  %37 = load i32, ptr %36, align 8, !tbaa !19
  store i32 %37, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  %38 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %38, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #2
  store i8 0, ptr %10, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #2
  store i8 0, ptr %11, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #2
  store i8 0, ptr %12, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %110, %34
  %40 = load i32, ptr %13, align 4, !tbaa !9
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.aiFace, ptr %41, i32 0, i32 0
  %43 = load i32, ptr %42, align 8, !tbaa !19
  %44 = icmp ult i32 %40, %43
  br i1 %44, label %46, label %45

45:                                               ; preds = %39
  store i32 5, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  br label %113

46:                                               ; preds = %39
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.aiFace, ptr %48, i32 0, i32 1
  %50 = load ptr, ptr %49, align 8, !tbaa !23
  %51 = load i32, ptr %13, align 4, !tbaa !9
  %52 = zext i32 %51 to i64
  %53 = getelementptr inbounds i32, ptr %50, i64 %52
  %54 = load i32, ptr %53, align 4, !tbaa !9
  %55 = zext i32 %54 to i64
  %56 = getelementptr inbounds %class.aiVector3t, ptr %47, i64 %55
  %57 = getelementptr inbounds %class.aiVector3t, ptr %56, i32 0, i32 0
  %58 = load float, ptr %57, align 4, !tbaa !24
  %59 = fcmp olt float %58, 0x3FB99999A0000000
  br i1 %59, label %60, label %78

60:                                               ; preds = %46
  %61 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %61, ptr %8, align 4, !tbaa !9
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.aiFace, ptr %63, i32 0, i32 1
  %65 = load ptr, ptr %64, align 8, !tbaa !23
  %66 = load i32, ptr %13, align 4, !tbaa !9
  %67 = zext i32 %66 to i64
  %68 = getelementptr inbounds i32, ptr %65, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !9
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds %class.aiVector3t, ptr %62, i64 %70
  %72 = getelementptr inbounds %class.aiVector3t, ptr %71, i32 0, i32 0
  %73 = load float, ptr %72, align 4, !tbaa !24
  %74 = fcmp ole float %73, 0x3F847AE140000000
  br i1 %74, label %75, label %76

75:                                               ; preds = %60
  store i8 1, ptr %10, align 1, !tbaa !21
  br label %77

76:                                               ; preds = %60
  store i8 1, ptr %12, align 1, !tbaa !21
  br label %77

77:                                               ; preds = %76, %75
  br label %78

78:                                               ; preds = %77, %46
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.aiFace, ptr %80, i32 0, i32 1
  %82 = load ptr, ptr %81, align 8, !tbaa !23
  %83 = load i32, ptr %13, align 4, !tbaa !9
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds i32, ptr %82, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds %class.aiVector3t, ptr %79, i64 %87
  %89 = getelementptr inbounds %class.aiVector3t, ptr %88, i32 0, i32 0
  %90 = load float, ptr %89, align 4, !tbaa !24
  %91 = fcmp ogt float %90, 0x3FECCCCCC0000000
  br i1 %91, label %92, label %109

92:                                               ; preds = %78
  %93 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %93, ptr %9, align 4, !tbaa !9
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.aiFace, ptr %95, i32 0, i32 1
  %97 = load ptr, ptr %96, align 8, !tbaa !23
  %98 = load i32, ptr %13, align 4, !tbaa !9
  %99 = zext i32 %98 to i64
  %100 = getelementptr inbounds i32, ptr %97, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !9
  %102 = zext i32 %101 to i64
  %103 = getelementptr inbounds %class.aiVector3t, ptr %94, i64 %102
  %104 = getelementptr inbounds %class.aiVector3t, ptr %103, i32 0, i32 0
  %105 = load float, ptr %104, align 4, !tbaa !24
  %106 = fcmp oge float %105, 0x3FEFAE1480000000
  br i1 %106, label %107, label %108

107:                                              ; preds = %92
  store i8 1, ptr %11, align 1, !tbaa !21
  br label %108

108:                                              ; preds = %107, %92
  br label %109

109:                                              ; preds = %108, %78
  br label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %13, align 4, !tbaa !9
  %112 = add i32 %111, 1
  store i32 %112, ptr %13, align 4, !tbaa !9
  br label %39, !llvm.loop !25

113:                                              ; preds = %45
  %114 = load i32, ptr %8, align 4, !tbaa !9
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.aiFace, ptr %115, i32 0, i32 0
  %117 = load i32, ptr %116, align 8, !tbaa !19
  %118 = icmp ne i32 %114, %117
  br i1 %118, label %119, label %264

119:                                              ; preds = %113
  %120 = load i32, ptr %9, align 4, !tbaa !9
  %121 = load ptr, ptr %7, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.aiFace, ptr %121, i32 0, i32 0
  %123 = load i32, ptr %122, align 8, !tbaa !19
  %124 = icmp ne i32 %120, %123
  br i1 %124, label %125, label %264

125:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %260, %125
  %127 = load i32, ptr %14, align 4, !tbaa !9
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.aiFace, ptr %128, i32 0, i32 0
  %130 = load i32, ptr %129, align 8, !tbaa !19
  %131 = icmp ult i32 %127, %130
  br i1 %131, label %133, label %132

132:                                              ; preds = %126
  store i32 8, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  br label %263

133:                                              ; preds = %126
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.aiFace, ptr %135, i32 0, i32 1
  %137 = load ptr, ptr %136, align 8, !tbaa !23
  %138 = load i32, ptr %14, align 4, !tbaa !9
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds i32, ptr %137, i64 %139
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = zext i32 %141 to i64
  %143 = getelementptr inbounds %class.aiVector3t, ptr %134, i64 %142
  %144 = getelementptr inbounds %class.aiVector3t, ptr %143, i32 0, i32 0
  %145 = load float, ptr %144, align 4, !tbaa !24
  %146 = fcmp ogt float %145, 0x3FECCCCCC0000000
  br i1 %146, label %147, label %162

147:                                              ; preds = %133
  %148 = load i8, ptr %10, align 1, !tbaa !21, !range !27, !noundef !28
  %149 = trunc i8 %148 to i1
  br i1 %149, label %162, label %150

150:                                              ; preds = %147
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = load ptr, ptr %7, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.aiFace, ptr %152, i32 0, i32 1
  %154 = load ptr, ptr %153, align 8, !tbaa !23
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = zext i32 %155 to i64
  %157 = getelementptr inbounds i32, ptr %154, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = zext i32 %158 to i64
  %160 = getelementptr inbounds %class.aiVector3t, ptr %151, i64 %159
  %161 = getelementptr inbounds %class.aiVector3t, ptr %160, i32 0, i32 0
  store float 0.000000e+00, ptr %161, align 4, !tbaa !24
  br label %259

162:                                              ; preds = %147, %133
  %163 = load ptr, ptr %4, align 8, !tbaa !5
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.aiFace, ptr %164, i32 0, i32 1
  %166 = load ptr, ptr %165, align 8, !tbaa !23
  %167 = load i32, ptr %14, align 4, !tbaa !9
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %166, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = zext i32 %170 to i64
  %172 = getelementptr inbounds %class.aiVector3t, ptr %163, i64 %171
  %173 = getelementptr inbounds %class.aiVector3t, ptr %172, i32 0, i32 0
  %174 = load float, ptr %173, align 4, !tbaa !24
  %175 = fcmp olt float %174, 0x3FB99999A0000000
  br i1 %175, label %176, label %191

176:                                              ; preds = %162
  %177 = load i8, ptr %11, align 1, !tbaa !21, !range !27, !noundef !28
  %178 = trunc i8 %177 to i1
  br i1 %178, label %191, label %179

179:                                              ; preds = %176
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.aiFace, ptr %181, i32 0, i32 1
  %183 = load ptr, ptr %182, align 8, !tbaa !23
  %184 = load i32, ptr %14, align 4, !tbaa !9
  %185 = zext i32 %184 to i64
  %186 = getelementptr inbounds i32, ptr %183, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = zext i32 %187 to i64
  %189 = getelementptr inbounds %class.aiVector3t, ptr %180, i64 %188
  %190 = getelementptr inbounds %class.aiVector3t, ptr %189, i32 0, i32 0
  store float 1.000000e+00, ptr %190, align 4, !tbaa !24
  br label %258

191:                                              ; preds = %176, %162
  %192 = load i8, ptr %11, align 1, !tbaa !21, !range !27, !noundef !28
  %193 = trunc i8 %192 to i1
  br i1 %193, label %194, label %257

194:                                              ; preds = %191
  %195 = load i8, ptr %10, align 1, !tbaa !21, !range !27, !noundef !28
  %196 = trunc i8 %195 to i1
  br i1 %196, label %197, label %257

197:                                              ; preds = %194
  %198 = load i8, ptr %12, align 1, !tbaa !21, !range !27, !noundef !28
  %199 = trunc i8 %198 to i1
  br i1 %199, label %200, label %226

200:                                              ; preds = %197
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.aiFace, ptr %202, i32 0, i32 1
  %204 = load ptr, ptr %203, align 8, !tbaa !23
  %205 = load i32, ptr %14, align 4, !tbaa !9
  %206 = zext i32 %205 to i64
  %207 = getelementptr inbounds i32, ptr %204, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !9
  %209 = zext i32 %208 to i64
  %210 = getelementptr inbounds %class.aiVector3t, ptr %201, i64 %209
  %211 = getelementptr inbounds %class.aiVector3t, ptr %210, i32 0, i32 0
  %212 = load float, ptr %211, align 4, !tbaa !24
  %213 = fcmp oge float %212, 0x3FEFAE1480000000
  br i1 %213, label %214, label %226

214:                                              ; preds = %200
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.aiFace, ptr %216, i32 0, i32 1
  %218 = load ptr, ptr %217, align 8, !tbaa !23
  %219 = load i32, ptr %14, align 4, !tbaa !9
  %220 = zext i32 %219 to i64
  %221 = getelementptr inbounds i32, ptr %218, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !9
  %223 = zext i32 %222 to i64
  %224 = getelementptr inbounds %class.aiVector3t, ptr %215, i64 %223
  %225 = getelementptr inbounds %class.aiVector3t, ptr %224, i32 0, i32 0
  store float 0.000000e+00, ptr %225, align 4, !tbaa !24
  br label %256

226:                                              ; preds = %200, %197
  %227 = load i8, ptr %12, align 1, !tbaa !21, !range !27, !noundef !28
  %228 = trunc i8 %227 to i1
  br i1 %228, label %255, label %229

229:                                              ; preds = %226
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.aiFace, ptr %231, i32 0, i32 1
  %233 = load ptr, ptr %232, align 8, !tbaa !23
  %234 = load i32, ptr %14, align 4, !tbaa !9
  %235 = zext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %233, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds %class.aiVector3t, ptr %230, i64 %238
  %240 = getelementptr inbounds %class.aiVector3t, ptr %239, i32 0, i32 0
  %241 = load float, ptr %240, align 4, !tbaa !24
  %242 = fcmp ole float %241, 0x3F847AE140000000
  br i1 %242, label %243, label %255

243:                                              ; preds = %229
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.aiFace, ptr %245, i32 0, i32 1
  %247 = load ptr, ptr %246, align 8, !tbaa !23
  %248 = load i32, ptr %14, align 4, !tbaa !9
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds i32, ptr %247, i64 %249
  %251 = load i32, ptr %250, align 4, !tbaa !9
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds %class.aiVector3t, ptr %244, i64 %252
  %254 = getelementptr inbounds %class.aiVector3t, ptr %253, i32 0, i32 0
  store float 1.000000e+00, ptr %254, align 4, !tbaa !24
  br label %255

255:                                              ; preds = %243, %229, %226
  br label %256

256:                                              ; preds = %255, %214
  br label %257

257:                                              ; preds = %256, %194, %191
  br label %258

258:                                              ; preds = %257, %179
  br label %259

259:                                              ; preds = %258, %150
  br label %260

260:                                              ; preds = %259
  %261 = load i32, ptr %14, align 4, !tbaa !9
  %262 = add i32 %261, 1
  store i32 %262, ptr %14, align 4, !tbaa !9
  br label %126, !llvm.loop !29

263:                                              ; preds = %132
  br label %264

264:                                              ; preds = %263, %119, %113
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  store i32 0, ptr %6, align 4
  br label %265

265:                                              ; preds = %264, %33
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  %266 = load i32, ptr %6, align 4
  switch i32 %266, label %272 [
    i32 0, label %267
    i32 4, label %268
  ]

267:                                              ; preds = %265
  br label %268

268:                                              ; preds = %267, %265
  %269 = load i32, ptr %5, align 4, !tbaa !9
  %270 = add i32 %269, 1
  store i32 %270, ptr %5, align 4, !tbaa !9
  br label %15, !llvm.loop !30

271:                                              ; preds = %21
  ret void

272:                                              ; preds = %265
  unreachable
}

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 8}
!12 = !{!"_ZTS6aiMesh", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !10, i64 216, !6, i64 224, !10, i64 232, !13, i64 236, !10, i64 1264, !6, i64 1272, !14, i64 1280, !15, i64 1284, !6, i64 1312}
!13 = !{!"_ZTS8aiString", !10, i64 0, !7, i64 4}
!14 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!15 = !{!"_ZTS6aiAABB", !16, i64 0, !16, i64 12}
!16 = !{!"_ZTS10aiVector3tIfE", !17, i64 0, !17, i64 4, !17, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!12, !6, i64 208}
!19 = !{!20, !10, i64 0}
!20 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!21 = !{!22, !22, i64 0}
!22 = !{!"bool", !7, i64 0}
!23 = !{!20, !6, i64 8}
!24 = !{!16, !17, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}


; 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.aiFace = type { i32, ptr }
%class.aiVector3t = type { float, float, float }

; Function Attrs: mustprogress nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local void @_Z13RemoveUVSeamsP6aiMeshP10aiVector3tIfE(ptr nocapture noundef readonly %0, ptr nocapture noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = load i32, ptr %3, align 8, !tbaa !5
  %.not95 = icmp eq i32 %4, 0
  br i1 %.not95, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %5 = getelementptr inbounds i8, ptr %0, i64 208
  %6 = load ptr, ptr %5, align 8, !tbaa !16
  %wide.trip.count116 = zext i32 %4 to i64
  br label %7

._crit_edge:                                      ; preds = %.loopexit, %2
  ret void

7:                                                ; preds = %.lr.ph, %.loopexit
  %indvars.iv113 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next114, %.loopexit ]
  %8 = getelementptr inbounds %struct.aiFace, ptr %6, i64 %indvars.iv113
  %9 = load i32, ptr %8, align 8, !tbaa !17
  %10 = icmp ult i32 %9, 3
  br i1 %10, label %.loopexit, label %.preheader77

.preheader77:                                     ; preds = %7
  %11 = getelementptr inbounds i8, ptr %8, i64 8
  %12 = load ptr, ptr %11, align 8, !tbaa !19
  %wide.trip.count = zext i32 %9 to i64
  br label %43

13:                                               ; preds = %57
  %.not = icmp eq i32 %.170, %9
  %.not76 = icmp eq i32 %.168, %9
  %or.cond = select i1 %.not, i1 true, i1 %.not76
  br i1 %or.cond, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %13
  %14 = trunc i8 %.166.fr to i1
  %15 = trunc nuw i8 %.164 to i1
  br i1 %15, label %.preheader.split.us, label %.preheader.split

.preheader.split.us:                              ; preds = %.preheader, %27
  %indvars.iv108 = phi i64 [ %indvars.iv.next109, %27 ], [ 0, %.preheader ]
  %16 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv108
  %17 = load i32, ptr %16, align 4, !tbaa !20
  %18 = zext i32 %17 to i64
  %19 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %18
  %20 = load float, ptr %19, align 4, !tbaa !21
  %21 = fcmp ule float %20, 0x3FECCCCCC0000000
  %brmerge = or i1 %21, %14
  br i1 %brmerge, label %22, label %.sink.split

22:                                               ; preds = %.preheader.split.us
  br i1 %14, label %23, label %27

23:                                               ; preds = %22
  br i1 %.1, label %25, label %.critedge.us

.critedge.us:                                     ; preds = %23
  %24 = fcmp ugt float %20, 0x3F847AE140000000
  br i1 %24, label %27, label %.sink.split

25:                                               ; preds = %23
  %26 = fcmp ult float %20, 0x3FEFAE1480000000
  br i1 %26, label %27, label %.sink.split

.sink.split:                                      ; preds = %25, %.critedge.us, %.preheader.split.us
  %.sink = phi float [ 0.000000e+00, %.preheader.split.us ], [ 1.000000e+00, %.critedge.us ], [ 0.000000e+00, %25 ]
  store float %.sink, ptr %19, align 4, !tbaa !21
  br label %27

27:                                               ; preds = %.sink.split, %25, %.critedge.us, %22
  %indvars.iv.next109 = add nuw nsw i64 %indvars.iv108, 1
  %exitcond112.not = icmp eq i64 %indvars.iv.next109, %wide.trip.count
  br i1 %exitcond112.not, label %.loopexit, label %.preheader.split.us, !llvm.loop !22

.preheader.split:                                 ; preds = %.preheader
  br i1 %14, label %.preheader.split.split.us.preheader, label %.preheader.split.split.preheader

.preheader.split.split.preheader:                 ; preds = %.preheader.split
  %xtraiter = and i64 %wide.trip.count, 1
  %unroll_iter = and i64 %wide.trip.count, 4294967294
  br label %.preheader.split.split

.preheader.split.split.us.preheader:              ; preds = %.preheader.split
  %xtraiter126 = and i64 %wide.trip.count, 1
  %unroll_iter128 = and i64 %wide.trip.count, 4294967294
  br label %.preheader.split.split.us

.preheader.split.split.us:                        ; preds = %42, %.preheader.split.split.us.preheader
  %indvars.iv103 = phi i64 [ 0, %.preheader.split.split.us.preheader ], [ %indvars.iv.next104.1, %42 ]
  %niter129 = phi i64 [ 0, %.preheader.split.split.us.preheader ], [ %niter129.next.1, %42 ]
  %28 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv103
  %29 = load i32, ptr %28, align 4, !tbaa !20
  %30 = zext i32 %29 to i64
  %31 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %30
  %32 = load float, ptr %31, align 4, !tbaa !21
  %33 = fcmp uge float %32, 0x3FB99999A0000000
  br i1 %33, label %.preheader.split.split.us.1, label %34

34:                                               ; preds = %.preheader.split.split.us
  store float 1.000000e+00, ptr %31, align 4, !tbaa !21
  br label %.preheader.split.split.us.1

.preheader.split.split.us.1:                      ; preds = %.preheader.split.split.us, %34
  %indvars.iv.next104 = or disjoint i64 %indvars.iv103, 1
  %35 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv.next104
  %36 = load i32, ptr %35, align 4, !tbaa !20
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %37
  %39 = load float, ptr %38, align 4, !tbaa !21
  %40 = fcmp uge float %39, 0x3FB99999A0000000
  br i1 %40, label %42, label %41

41:                                               ; preds = %.preheader.split.split.us.1
  store float 1.000000e+00, ptr %38, align 4, !tbaa !21
  br label %42

42:                                               ; preds = %41, %.preheader.split.split.us.1
  %indvars.iv.next104.1 = add nuw nsw i64 %indvars.iv103, 2
  %niter129.next.1 = add nuw nsw i64 %niter129, 2
  %niter129.ncmp.1 = icmp eq i64 %niter129.next.1, %unroll_iter128
  br i1 %niter129.ncmp.1, label %.loopexit.loopexit124.unr-lcssa, label %.preheader.split.split.us, !llvm.loop !22

43:                                               ; preds = %.preheader77, %57
  %indvars.iv = phi i64 [ 0, %.preheader77 ], [ %indvars.iv.next, %57 ]
  %.06282 = phi i1 [ false, %.preheader77 ], [ %.1, %57 ]
  %.06381 = phi i8 [ 0, %.preheader77 ], [ %.164, %57 ]
  %.06580 = phi i8 [ 0, %.preheader77 ], [ %.166.fr, %57 ]
  %.06779 = phi i32 [ %9, %.preheader77 ], [ %.168, %57 ]
  %.06978 = phi i32 [ %9, %.preheader77 ], [ %.170, %57 ]
  %44 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv
  %45 = load i32, ptr %44, align 4, !tbaa !20
  %46 = zext i32 %45 to i64
  %47 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %46
  %48 = load float, ptr %47, align 4, !tbaa !21
  %49 = fcmp olt float %48, 0x3FB99999A0000000
  %50 = fcmp ugt float %48, 0x3F847AE140000000
  %.065. = select i1 %50, i8 %.06580, i8 1
  %51 = trunc nuw i64 %indvars.iv to i32
  %.170 = select i1 %49, i32 %51, i32 %.06978
  %.166 = select i1 %49, i8 %.065., i8 %.06580
  %.166.fr = freeze i8 %.166
  %52 = and i1 %49, %50
  %.1 = select i1 %52, i1 true, i1 %.06282
  %53 = fcmp ogt float %48, 0x3FECCCCCC0000000
  br i1 %53, label %54, label %57

54:                                               ; preds = %43
  %55 = fcmp ult float %48, 0x3FEFAE1480000000
  br i1 %55, label %57, label %56

56:                                               ; preds = %54
  br label %57

57:                                               ; preds = %43, %56, %54
  %.168 = phi i32 [ %51, %56 ], [ %51, %54 ], [ %.06779, %43 ]
  %.164 = phi i8 [ 1, %56 ], [ %.06381, %54 ], [ %.06381, %43 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %13, label %43, !llvm.loop !24

.preheader.split.split:                           ; preds = %74, %.preheader.split.split.preheader
  %indvars.iv98 = phi i64 [ 0, %.preheader.split.split.preheader ], [ %indvars.iv.next99.1, %74 ]
  %niter = phi i64 [ 0, %.preheader.split.split.preheader ], [ %niter.next.1, %74 ]
  %58 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv98
  %59 = load i32, ptr %58, align 4, !tbaa !20
  %60 = zext i32 %59 to i64
  %61 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %60
  %62 = load float, ptr %61, align 4, !tbaa !21
  %63 = fcmp ogt float %62, 0x3FECCCCCC0000000
  br i1 %63, label %.sink.split120, label %64

64:                                               ; preds = %.preheader.split.split
  %65 = fcmp uge float %62, 0x3FB99999A0000000
  br i1 %65, label %.preheader.split.split.1, label %.sink.split120

.sink.split120:                                   ; preds = %64, %.preheader.split.split
  %.sink121 = phi float [ 0.000000e+00, %.preheader.split.split ], [ 1.000000e+00, %64 ]
  store float %.sink121, ptr %61, align 4, !tbaa !21
  br label %.preheader.split.split.1

.preheader.split.split.1:                         ; preds = %.sink.split120, %64
  %indvars.iv.next99 = or disjoint i64 %indvars.iv98, 1
  %66 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv.next99
  %67 = load i32, ptr %66, align 4, !tbaa !20
  %68 = zext i32 %67 to i64
  %69 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %68
  %70 = load float, ptr %69, align 4, !tbaa !21
  %71 = fcmp ogt float %70, 0x3FECCCCCC0000000
  br i1 %71, label %.sink.split120.1, label %72

72:                                               ; preds = %.preheader.split.split.1
  %73 = fcmp uge float %70, 0x3FB99999A0000000
  br i1 %73, label %74, label %.sink.split120.1

.sink.split120.1:                                 ; preds = %72, %.preheader.split.split.1
  %.sink121.1 = phi float [ 0.000000e+00, %.preheader.split.split.1 ], [ 1.000000e+00, %72 ]
  store float %.sink121.1, ptr %69, align 4, !tbaa !21
  br label %74

74:                                               ; preds = %.sink.split120.1, %72
  %indvars.iv.next99.1 = add nuw nsw i64 %indvars.iv98, 2
  %niter.next.1 = add nuw nsw i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit125.unr-lcssa, label %.preheader.split.split, !llvm.loop !22

.loopexit.loopexit124.unr-lcssa:                  ; preds = %42
  %lcmp.mod127.not = icmp eq i64 %xtraiter126, 0
  br i1 %lcmp.mod127.not, label %.loopexit, label %.preheader.split.split.us.epil

.preheader.split.split.us.epil:                   ; preds = %.loopexit.loopexit124.unr-lcssa
  %75 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv.next104.1
  %76 = load i32, ptr %75, align 4, !tbaa !20
  %77 = zext i32 %76 to i64
  %78 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %77
  %79 = load float, ptr %78, align 4, !tbaa !21
  %80 = fcmp uge float %79, 0x3FB99999A0000000
  br i1 %80, label %.loopexit, label %81

81:                                               ; preds = %.preheader.split.split.us.epil
  store float 1.000000e+00, ptr %78, align 4, !tbaa !21
  br label %.loopexit

.loopexit.loopexit125.unr-lcssa:                  ; preds = %74
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.preheader.split.split.epil

.preheader.split.split.epil:                      ; preds = %.loopexit.loopexit125.unr-lcssa
  %82 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv.next99.1
  %83 = load i32, ptr %82, align 4, !tbaa !20
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds %class.aiVector3t, ptr %1, i64 %84
  %86 = load float, ptr %85, align 4, !tbaa !21
  %87 = fcmp ogt float %86, 0x3FECCCCCC0000000
  br i1 %87, label %.sink.split120.epil, label %88

88:                                               ; preds = %.preheader.split.split.epil
  %89 = fcmp uge float %86, 0x3FB99999A0000000
  br i1 %89, label %.loopexit, label %.sink.split120.epil

.sink.split120.epil:                              ; preds = %88, %.preheader.split.split.epil
  %.sink121.epil = phi float [ 0.000000e+00, %.preheader.split.split.epil ], [ 1.000000e+00, %88 ]
  store float %.sink121.epil, ptr %85, align 4, !tbaa !21
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit125.unr-lcssa, %.sink.split120.epil, %88, %.loopexit.loopexit124.unr-lcssa, %81, %.preheader.split.split.us.epil, %27, %13, %7
  %indvars.iv.next114 = add nuw nsw i64 %indvars.iv113, 1
  %exitcond117.not = icmp eq i64 %indvars.iv.next114, %wide.trip.count116
  br i1 %exitcond117.not, label %._crit_edge, label %7, !llvm.loop !25
}

attributes #0 = { mustprogress nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) 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" }

!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 8}
!6 = !{!"_ZTS6aiMesh", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !8, i64 48, !8, i64 112, !8, i64 176, !10, i64 208, !7, i64 216, !10, i64 224, !7, i64 232, !11, i64 236, !7, i64 1264, !10, i64 1272, !12, i64 1280, !13, i64 1284, !10, i64 1312}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_ZTS8aiString", !7, i64 0, !8, i64 4}
!12 = !{!"_ZTS16aiMorphingMethod", !8, i64 0}
!13 = !{!"_ZTS6aiAABB", !14, i64 0, !14, i64 12}
!14 = !{!"_ZTS10aiVector3tIfE", !15, i64 0, !15, i64 4, !15, i64 8}
!15 = !{!"float", !8, i64 0}
!16 = !{!6, !10, i64 208}
!17 = !{!18, !7, i64 0}
!18 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!19 = !{!18, !10, i64 8}
!20 = !{!7, !7, i64 0}
!21 = !{!14, !15, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}


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