; LLVM IR from DarrenSweeney/3D-Physics-Engine :: Physics Engine/Imgui/imgui.ll (ZN10ImDrawList7AddRectERK6ImVec2S2_jfi)

; 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.ImVec2 = type { float, float }

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #0 align 2

; 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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL5ImMinff(float noundef, float noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(8) %2, i32 noundef %3, float noundef %4, i32 noundef %5) #4 align 2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %12 = alloca i32, align 4
  %13 = alloca float, align 4
  %14 = alloca %struct.ImVec2, align 4
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca %struct.ImVec2, align 4
  %17 = alloca %struct.ImVec2, align 4
  %18 = alloca %struct.ImVec2, align 4
  %19 = alloca %struct.ImVec2, align 4
  %20 = alloca %struct.ImVec2, align 4
  %21 = alloca %struct.ImVec2, align 4
  %22 = alloca %struct.ImVec2, align 4
  %23 = alloca %struct.ImVec2, align 4
  %24 = alloca %struct.ImVec2, align 4
  %25 = alloca %struct.ImVec2, align 4
  %26 = alloca %struct.ImVec2, align 4
  %27 = alloca %struct.ImVec2, align 4
  %28 = alloca %struct.ImVec2, align 4
  %29 = alloca %struct.ImVec2, align 4
  %30 = alloca %struct.ImVec2, align 4
  %31 = alloca %struct.ImVec2, align 4
  %32 = alloca %struct.ImVec2, align 4
  %33 = alloca %struct.ImVec2, align 4
  %34 = alloca %struct.ImVec2, align 4
  %35 = alloca %struct.ImVec2, align 4
  %36 = alloca %struct.ImVec2, align 4
  %37 = alloca %struct.ImVec2, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store float %4, ptr %11, align 4, !tbaa !11
  store i32 %5, ptr %12, align 4, !tbaa !9
  %38 = load ptr, ptr %7, align 8
  %39 = load i32, ptr %10, align 4, !tbaa !9
  %40 = lshr i32 %39, 24
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %42, label %43

42:                                               ; preds = %6
  br label %341

43:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %44 = load float, ptr %11, align 4, !tbaa !11
  store float %44, ptr %13, align 4, !tbaa !11
  %45 = load float, ptr %13, align 4, !tbaa !11
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.ImVec2, ptr %46, i32 0, i32 0
  %48 = load float, ptr %47, align 4, !tbaa !13
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ImVec2, ptr %49, i32 0, i32 0
  %51 = load float, ptr %50, align 4, !tbaa !13
  %52 = fsub float %48, %51
  %53 = call float @llvm.fabs.f32(float %52)
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = and i32 %54, 3
  %56 = icmp eq i32 %55, 3
  br i1 %56, label %61, label %57

57:                                               ; preds = %43
  %58 = load i32, ptr %12, align 4, !tbaa !9
  %59 = and i32 %58, 12
  %60 = icmp eq i32 %59, 12
  br label %61

61:                                               ; preds = %57, %43
  %62 = phi i1 [ true, %43 ], [ %60, %57 ]
  %63 = zext i1 %62 to i64
  %64 = select i1 %62, float 5.000000e-01, float 1.000000e+00
  %65 = fmul float %53, %64
  %66 = call noundef float @_ZL5ImMinff(float noundef %45, float noundef %65)
  store float %66, ptr %13, align 4, !tbaa !11
  %67 = load float, ptr %13, align 4, !tbaa !11
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.ImVec2, ptr %68, i32 0, i32 1
  %70 = load float, ptr %69, align 4, !tbaa !15
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ImVec2, ptr %71, i32 0, i32 1
  %73 = load float, ptr %72, align 4, !tbaa !15
  %74 = fsub float %70, %73
  %75 = call float @llvm.fabs.f32(float %74)
  %76 = load i32, ptr %12, align 4, !tbaa !9
  %77 = and i32 %76, 9
  %78 = icmp eq i32 %77, 9
  br i1 %78, label %83, label %79

79:                                               ; preds = %61
  %80 = load i32, ptr %12, align 4, !tbaa !9
  %81 = and i32 %80, 6
  %82 = icmp eq i32 %81, 6
  br label %83

83:                                               ; preds = %79, %61
  %84 = phi i1 [ true, %61 ], [ %82, %79 ]
  %85 = zext i1 %84 to i64
  %86 = select i1 %84, float 5.000000e-01, float 1.000000e+00
  %87 = fmul float %75, %86
  %88 = call noundef float @_ZL5ImMinff(float noundef %67, float noundef %87)
  store float %88, ptr %13, align 4, !tbaa !11
  %89 = load float, ptr %13, align 4, !tbaa !11
  %90 = fcmp oeq float %89, 0.000000e+00
  br i1 %90, label %94, label %91

91:                                               ; preds = %83
  %92 = load i32, ptr %12, align 4, !tbaa !9
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %94, label %147

94:                                               ; preds = %91, %83
  call void @_ZN10ImDrawList15ReserveVerticesEj(ptr noundef nonnull align 8 dereferenceable(104) %38, i32 noundef 24)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.ImVec2, ptr %95, i32 0, i32 0
  %97 = load float, ptr %96, align 4, !tbaa !13
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.ImVec2, ptr %98, i32 0, i32 1
  %100 = load float, ptr %99, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef %97, float noundef %100)
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.ImVec2, ptr %101, i32 0, i32 0
  %103 = load float, ptr %102, align 4, !tbaa !13
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.ImVec2, ptr %104, i32 0, i32 1
  %106 = load float, ptr %105, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef %103, float noundef %106)
  %107 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %14, ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %107)
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.ImVec2, ptr %108, i32 0, i32 0
  %110 = load float, ptr %109, align 4, !tbaa !13
  %111 = load ptr, ptr %8, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.ImVec2, ptr %111, i32 0, i32 1
  %113 = load float, ptr %112, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %16, float noundef %110, float noundef %113)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %114 = load ptr, ptr %9, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.ImVec2, ptr %114, i32 0, i32 0
  %116 = load float, ptr %115, align 4, !tbaa !13
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.ImVec2, ptr %117, i32 0, i32 1
  %119 = load float, ptr %118, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %17, float noundef %116, float noundef %119)
  %120 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(8) %17, i32 noundef %120)
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.ImVec2, ptr %121, i32 0, i32 0
  %123 = load float, ptr %122, align 4, !tbaa !13
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.ImVec2, ptr %124, i32 0, i32 1
  %126 = load float, ptr %125, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %18, float noundef %123, float noundef %126)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %127 = load ptr, ptr %8, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.ImVec2, ptr %127, i32 0, i32 0
  %129 = load float, ptr %128, align 4, !tbaa !13
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.ImVec2, ptr %130, i32 0, i32 1
  %132 = load float, ptr %131, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %19, float noundef %129, float noundef %132)
  %133 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %18, ptr noundef nonnull align 4 dereferenceable(8) %19, i32 noundef %133)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.ImVec2, ptr %134, i32 0, i32 0
  %136 = load float, ptr %135, align 4, !tbaa !13
  %137 = load ptr, ptr %9, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ImVec2, ptr %137, i32 0, i32 1
  %139 = load float, ptr %138, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %20, float noundef %136, float noundef %139)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.ImVec2, ptr %140, i32 0, i32 0
  %142 = load float, ptr %141, align 4, !tbaa !13
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.ImVec2, ptr %143, i32 0, i32 1
  %145 = load float, ptr %144, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef %142, float noundef %145)
  %146 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %21, i32 noundef %146)
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %340

147:                                              ; preds = %91
  call void @_ZN10ImDrawList15ReserveVerticesEj(ptr noundef nonnull align 8 dereferenceable(104) %38, i32 noundef 24)
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %148 = load ptr, ptr %8, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.ImVec2, ptr %148, i32 0, i32 0
  %150 = load float, ptr %149, align 4, !tbaa !13
  %151 = load i32, ptr %12, align 4, !tbaa !9
  %152 = and i32 %151, 1
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %154, label %156

154:                                              ; preds = %147
  %155 = load float, ptr %13, align 4, !tbaa !11
  br label %157

156:                                              ; preds = %147
  br label %157

157:                                              ; preds = %156, %154
  %158 = phi float [ %155, %154 ], [ 0.000000e+00, %156 ]
  %159 = fadd float %150, %158
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.ImVec2, ptr %160, i32 0, i32 1
  %162 = load float, ptr %161, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %159, float noundef %162)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %163 = load ptr, ptr %9, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ImVec2, ptr %163, i32 0, i32 0
  %165 = load float, ptr %164, align 4, !tbaa !13
  %166 = load i32, ptr %12, align 4, !tbaa !9
  %167 = and i32 %166, 2
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %169, label %171

169:                                              ; preds = %157
  %170 = load float, ptr %13, align 4, !tbaa !11
  br label %172

171:                                              ; preds = %157
  br label %172

172:                                              ; preds = %171, %169
  %173 = phi float [ %170, %169 ], [ 0.000000e+00, %171 ]
  %174 = fsub float %165, %173
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.ImVec2, ptr %175, i32 0, i32 1
  %177 = load float, ptr %176, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef %174, float noundef %177)
  %178 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %22, ptr noundef nonnull align 4 dereferenceable(8) %23, i32 noundef %178)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %179 = load ptr, ptr %9, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.ImVec2, ptr %179, i32 0, i32 0
  %181 = load float, ptr %180, align 4, !tbaa !13
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.ImVec2, ptr %182, i32 0, i32 1
  %184 = load float, ptr %183, align 4, !tbaa !15
  %185 = load i32, ptr %12, align 4, !tbaa !9
  %186 = and i32 %185, 2
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %190

188:                                              ; preds = %172
  %189 = load float, ptr %13, align 4, !tbaa !11
  br label %191

190:                                              ; preds = %172
  br label %191

191:                                              ; preds = %190, %188
  %192 = phi float [ %189, %188 ], [ 0.000000e+00, %190 ]
  %193 = fadd float %184, %192
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef %181, float noundef %193)
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %194 = load ptr, ptr %9, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.ImVec2, ptr %194, i32 0, i32 0
  %196 = load float, ptr %195, align 4, !tbaa !13
  %197 = load ptr, ptr %9, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.ImVec2, ptr %197, i32 0, i32 1
  %199 = load float, ptr %198, align 4, !tbaa !15
  %200 = load i32, ptr %12, align 4, !tbaa !9
  %201 = and i32 %200, 4
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %205

203:                                              ; preds = %191
  %204 = load float, ptr %13, align 4, !tbaa !11
  br label %206

205:                                              ; preds = %191
  br label %206

206:                                              ; preds = %205, %203
  %207 = phi float [ %204, %203 ], [ 0.000000e+00, %205 ]
  %208 = fsub float %199, %207
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %25, float noundef %196, float noundef %208)
  %209 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %24, ptr noundef nonnull align 4 dereferenceable(8) %25, i32 noundef %209)
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.ImVec2, ptr %210, i32 0, i32 0
  %212 = load float, ptr %211, align 4, !tbaa !13
  %213 = load i32, ptr %12, align 4, !tbaa !9
  %214 = and i32 %213, 4
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %216, label %218

216:                                              ; preds = %206
  %217 = load float, ptr %13, align 4, !tbaa !11
  br label %219

218:                                              ; preds = %206
  br label %219

219:                                              ; preds = %218, %216
  %220 = phi float [ %217, %216 ], [ 0.000000e+00, %218 ]
  %221 = fsub float %212, %220
  %222 = load ptr, ptr %9, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.ImVec2, ptr %222, i32 0, i32 1
  %224 = load float, ptr %223, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %26, float noundef %221, float noundef %224)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ImVec2, ptr %225, i32 0, i32 0
  %227 = load float, ptr %226, align 4, !tbaa !13
  %228 = load i32, ptr %12, align 4, !tbaa !9
  %229 = and i32 %228, 8
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %231, label %233

231:                                              ; preds = %219
  %232 = load float, ptr %13, align 4, !tbaa !11
  br label %234

233:                                              ; preds = %219
  br label %234

234:                                              ; preds = %233, %231
  %235 = phi float [ %232, %231 ], [ 0.000000e+00, %233 ]
  %236 = fadd float %227, %235
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.ImVec2, ptr %237, i32 0, i32 1
  %239 = load float, ptr %238, align 4, !tbaa !15
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %27, float noundef %236, float noundef %239)
  %240 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %26, ptr noundef nonnull align 4 dereferenceable(8) %27, i32 noundef %240)
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.ImVec2, ptr %241, i32 0, i32 0
  %243 = load float, ptr %242, align 4, !tbaa !13
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.ImVec2, ptr %244, i32 0, i32 1
  %246 = load float, ptr %245, align 4, !tbaa !15
  %247 = load i32, ptr %12, align 4, !tbaa !9
  %248 = and i32 %247, 8
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %252

250:                                              ; preds = %234
  %251 = load float, ptr %13, align 4, !tbaa !11
  br label %253

252:                                              ; preds = %234
  br label %253

253:                                              ; preds = %252, %250
  %254 = phi float [ %251, %250 ], [ 0.000000e+00, %252 ]
  %255 = fsub float %246, %254
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %28, float noundef %243, float noundef %255)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.ImVec2, ptr %256, i32 0, i32 0
  %258 = load float, ptr %257, align 4, !tbaa !13
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.ImVec2, ptr %259, i32 0, i32 1
  %261 = load float, ptr %260, align 4, !tbaa !15
  %262 = load i32, ptr %12, align 4, !tbaa !9
  %263 = and i32 %262, 1
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %267

265:                                              ; preds = %253
  %266 = load float, ptr %13, align 4, !tbaa !11
  br label %268

267:                                              ; preds = %253
  br label %268

268:                                              ; preds = %267, %265
  %269 = phi float [ %266, %265 ], [ 0.000000e+00, %267 ]
  %270 = fadd float %261, %269
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %29, float noundef %258, float noundef %270)
  %271 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %28, ptr noundef nonnull align 4 dereferenceable(8) %29, i32 noundef %271)
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  %272 = load i32, ptr %12, align 4, !tbaa !9
  %273 = and i32 %272, 1
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %288

275:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.ImVec2, ptr %276, i32 0, i32 0
  %278 = load float, ptr %277, align 4, !tbaa !13
  %279 = load float, ptr %13, align 4, !tbaa !11
  %280 = fadd float %278, %279
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.ImVec2, ptr %281, i32 0, i32 1
  %283 = load float, ptr %282, align 4, !tbaa !15
  %284 = load float, ptr %13, align 4, !tbaa !11
  %285 = fadd float %283, %284
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %30, float noundef %280, float noundef %285)
  %286 = load float, ptr %13, align 4, !tbaa !11
  %287 = load i32, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %31, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %30, float noundef %286, i32 noundef %287, i32 noundef 0, i32 noundef 3, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %31)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %288

288:                                              ; preds = %275, %268
  %289 = load i32, ptr %12, align 4, !tbaa !9
  %290 = and i32 %289, 2
  %291 = icmp ne i32 %290, 0
  br i1 %291, label %292, label %305

292:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.ImVec2, ptr %293, i32 0, i32 0
  %295 = load float, ptr %294, align 4, !tbaa !13
  %296 = load float, ptr %13, align 4, !tbaa !11
  %297 = fsub float %295, %296
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.ImVec2, ptr %298, i32 0, i32 1
  %300 = load float, ptr %299, align 4, !tbaa !15
  %301 = load float, ptr %13, align 4, !tbaa !11
  %302 = fadd float %300, %301
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef %297, float noundef %302)
  %303 = load float, ptr %13, align 4, !tbaa !11
  %304 = load i32, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %33, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %32, float noundef %303, i32 noundef %304, i32 noundef 3, i32 noundef 6, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %33)
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %305

305:                                              ; preds = %292, %288
  %306 = load i32, ptr %12, align 4, !tbaa !9
  %307 = and i32 %306, 4
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %322

309:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.ImVec2, ptr %310, i32 0, i32 0
  %312 = load float, ptr %311, align 4, !tbaa !13
  %313 = load float, ptr %13, align 4, !tbaa !11
  %314 = fsub float %312, %313
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.ImVec2, ptr %315, i32 0, i32 1
  %317 = load float, ptr %316, align 4, !tbaa !15
  %318 = load float, ptr %13, align 4, !tbaa !11
  %319 = fsub float %317, %318
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef %314, float noundef %319)
  %320 = load float, ptr %13, align 4, !tbaa !11
  %321 = load i32, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %35, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %34, float noundef %320, i32 noundef %321, i32 noundef 6, i32 noundef 9, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %35)
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %322

322:                                              ; preds = %309, %305
  %323 = load i32, ptr %12, align 4, !tbaa !9
  %324 = and i32 %323, 8
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %326, label %339

326:                                              ; preds = %322
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.ImVec2, ptr %327, i32 0, i32 0
  %329 = load float, ptr %328, align 4, !tbaa !13
  %330 = load float, ptr %13, align 4, !tbaa !11
  %331 = fadd float %329, %330
  %332 = load ptr, ptr %9, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.ImVec2, ptr %332, i32 0, i32 1
  %334 = load float, ptr %333, align 4, !tbaa !15
  %335 = load float, ptr %13, align 4, !tbaa !11
  %336 = fsub float %334, %335
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef %331, float noundef %336)
  %337 = load float, ptr %13, align 4, !tbaa !11
  %338 = load i32, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %37, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %38, ptr noundef nonnull align 4 dereferenceable(8) %36, float noundef %337, i32 noundef %338, i32 noundef 9, i32 noundef 12, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %37)
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %339

339:                                              ; preds = %326, %322
  br label %340

340:                                              ; preds = %339, %94
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %341

341:                                              ; preds = %340, %42
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(8), float noundef, i32 noundef, i32 noundef, i32 noundef, i1 noundef zeroext, ptr noundef nonnull align 4 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList15ReserveVerticesEj(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #5 align 2

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { inlinehint 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #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, !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, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !12, i64 0}
!14 = !{!"_ZTS6ImVec2", !12, i64 0, !12, i64 4}
!15 = !{!14, !12, i64 4}


; 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.ImVec2 = type { float, float }

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8), float noundef, float noundef) unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef float @_ZL5ImMinff(float noundef, float noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10ImDrawList7AddRectERK6ImVec2S2_jfi(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr nocapture noundef nonnull readonly align 4 dereferenceable(8) %1, ptr nocapture noundef nonnull readonly align 4 dereferenceable(8) %2, i32 noundef %3, float noundef %4, i32 noundef %5) local_unnamed_addr #4 align 2 {
  %7 = alloca %struct.ImVec2, align 4
  %8 = alloca %struct.ImVec2, align 4
  %9 = alloca %struct.ImVec2, align 4
  %10 = alloca %struct.ImVec2, align 4
  %11 = alloca %struct.ImVec2, align 4
  %12 = alloca %struct.ImVec2, align 4
  %13 = alloca %struct.ImVec2, align 4
  %14 = alloca %struct.ImVec2, align 4
  %15 = alloca %struct.ImVec2, align 4
  %16 = alloca %struct.ImVec2, align 4
  %17 = alloca %struct.ImVec2, align 4
  %18 = alloca %struct.ImVec2, align 4
  %19 = alloca %struct.ImVec2, align 4
  %20 = alloca %struct.ImVec2, align 4
  %21 = alloca %struct.ImVec2, align 4
  %22 = alloca %struct.ImVec2, align 4
  %23 = alloca %struct.ImVec2, align 4
  %24 = alloca %struct.ImVec2, align 4
  %25 = alloca %struct.ImVec2, align 4
  %26 = alloca %struct.ImVec2, align 4
  %27 = alloca %struct.ImVec2, align 4
  %28 = alloca %struct.ImVec2, align 4
  %29 = alloca %struct.ImVec2, align 4
  %30 = alloca %struct.ImVec2, align 4
  %31 = icmp ult i32 %3, 16777216
  br i1 %31, label %134, label %32

32:                                               ; preds = %6
  %33 = load float, ptr %2, align 4, !tbaa !5
  %34 = load float, ptr %1, align 4, !tbaa !5
  %35 = fsub float %33, %34
  %36 = tail call float @llvm.fabs.f32(float %35)
  %37 = and i32 %5, 3
  %38 = icmp eq i32 %37, 3
  %39 = and i32 %5, 12
  %40 = icmp eq i32 %39, 12
  %41 = or i1 %38, %40
  %42 = select i1 %41, float 5.000000e-01, float 1.000000e+00
  %43 = fmul float %42, %36
  %44 = tail call noundef float @_ZL5ImMinff(float noundef %4, float noundef %43)
  %45 = getelementptr inbounds i8, ptr %2, i64 4
  %46 = load float, ptr %45, align 4, !tbaa !10
  %47 = getelementptr inbounds i8, ptr %1, i64 4
  %48 = load float, ptr %47, align 4, !tbaa !10
  %49 = fsub float %46, %48
  %50 = tail call float @llvm.fabs.f32(float %49)
  %51 = and i32 %5, 9
  %52 = icmp eq i32 %51, 9
  %53 = and i32 %5, 6
  %54 = icmp eq i32 %53, 6
  %55 = or i1 %52, %54
  %56 = select i1 %55, float 5.000000e-01, float 1.000000e+00
  %57 = fmul float %56, %50
  %58 = tail call noundef float @_ZL5ImMinff(float noundef %44, float noundef %57)
  %59 = fcmp oeq float %58, 0.000000e+00
  %60 = icmp eq i32 %5, 0
  %or.cond = or i1 %60, %59
  tail call void @_ZN10ImDrawList15ReserveVerticesEj(ptr noundef nonnull align 8 dereferenceable(104) %0, i32 noundef 24)
  br i1 %or.cond, label %61, label %78

61:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %62 = load float, ptr %1, align 4, !tbaa !5
  %63 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %7, float noundef %62, float noundef %63)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %64 = load float, ptr %2, align 4, !tbaa !5
  %65 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %8, float noundef %64, float noundef %65)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(8) %8, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %66 = load float, ptr %2, align 4, !tbaa !5
  %67 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %9, float noundef %66, float noundef %67)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %68 = load float, ptr %2, align 4, !tbaa !5
  %69 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %10, float noundef %68, float noundef %69)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %9, ptr noundef nonnull align 4 dereferenceable(8) %10, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %70 = load float, ptr %2, align 4, !tbaa !5
  %71 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %11, float noundef %70, float noundef %71)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %72 = load float, ptr %1, align 4, !tbaa !5
  %73 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %12, float noundef %72, float noundef %73)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %11, ptr noundef nonnull align 4 dereferenceable(8) %12, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %74 = load float, ptr %1, align 4, !tbaa !5
  %75 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %13, float noundef %74, float noundef %75)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  %76 = load float, ptr %1, align 4, !tbaa !5
  %77 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %14, float noundef %76, float noundef %77)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %13, ptr noundef nonnull align 4 dereferenceable(8) %14, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  br label %134

78:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  %79 = load float, ptr %1, align 4, !tbaa !5
  %80 = and i32 %5, 1
  %.not = icmp eq i32 %80, 0
  %81 = select i1 %.not, float 0.000000e+00, float %58
  %82 = fadd float %81, %79
  %83 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %15, float noundef %82, float noundef %83)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  %84 = load float, ptr %2, align 4, !tbaa !5
  %85 = and i32 %5, 2
  %.not100 = icmp eq i32 %85, 0
  %86 = select i1 %.not100, float 0.000000e+00, float %58
  %87 = fsub float %84, %86
  %88 = load float, ptr %47, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %16, float noundef %87, float noundef %88)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %15, ptr noundef nonnull align 4 dereferenceable(8) %16, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  %89 = load float, ptr %2, align 4, !tbaa !5
  %90 = load float, ptr %47, align 4, !tbaa !10
  %91 = fadd float %86, %90
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %17, float noundef %89, float noundef %91)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  %92 = load float, ptr %2, align 4, !tbaa !5
  %93 = load float, ptr %45, align 4, !tbaa !10
  %94 = and i32 %5, 4
  %.not101 = icmp eq i32 %94, 0
  %95 = select i1 %.not101, float 0.000000e+00, float %58
  %96 = fsub float %93, %95
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %18, float noundef %92, float noundef %96)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %17, ptr noundef nonnull align 4 dereferenceable(8) %18, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  %97 = load float, ptr %2, align 4, !tbaa !5
  %98 = fsub float %97, %95
  %99 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %19, float noundef %98, float noundef %99)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  %100 = load float, ptr %1, align 4, !tbaa !5
  %101 = and i32 %5, 8
  %.not102 = icmp eq i32 %101, 0
  %102 = select i1 %.not102, float 0.000000e+00, float %58
  %103 = fadd float %102, %100
  %104 = load float, ptr %45, align 4, !tbaa !10
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %20, float noundef %103, float noundef %104)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %19, ptr noundef nonnull align 4 dereferenceable(8) %20, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  %105 = load float, ptr %1, align 4, !tbaa !5
  %106 = load float, ptr %45, align 4, !tbaa !10
  %107 = fsub float %106, %102
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %21, float noundef %105, float noundef %107)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  %108 = load float, ptr %1, align 4, !tbaa !5
  %109 = load float, ptr %47, align 4, !tbaa !10
  %110 = fadd float %81, %109
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %22, float noundef %108, float noundef %110)
  call void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 4 dereferenceable(8) %22, i32 noundef %3)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  br i1 %.not, label %116, label %111

111:                                              ; preds = %78
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  %112 = load float, ptr %1, align 4, !tbaa !5
  %113 = fadd float %58, %112
  %114 = load float, ptr %47, align 4, !tbaa !10
  %115 = fadd float %58, %114
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef %113, float noundef %115)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %24, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %23, float noundef %58, i32 noundef %3, i32 noundef 0, i32 noundef 3, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %24)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  br label %116

116:                                              ; preds = %111, %78
  br i1 %.not100, label %122, label %117

117:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  %118 = load float, ptr %2, align 4, !tbaa !5
  %119 = fsub float %118, %58
  %120 = load float, ptr %47, align 4, !tbaa !10
  %121 = fadd float %58, %120
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %25, float noundef %119, float noundef %121)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %26, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %25, float noundef %58, i32 noundef %3, i32 noundef 3, i32 noundef 6, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %26)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  br label %122

122:                                              ; preds = %117, %116
  br i1 %.not101, label %128, label %123

123:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  %124 = load float, ptr %2, align 4, !tbaa !5
  %125 = fsub float %124, %58
  %126 = load float, ptr %45, align 4, !tbaa !10
  %127 = fsub float %126, %58
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %27, float noundef %125, float noundef %127)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %28, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %27, float noundef %58, i32 noundef %3, i32 noundef 6, i32 noundef 9, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %28)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  br label %128

128:                                              ; preds = %123, %122
  br i1 %.not102, label %134, label %129

129:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #6
  %130 = load float, ptr %1, align 4, !tbaa !5
  %131 = fadd float %58, %130
  %132 = load float, ptr %45, align 4, !tbaa !10
  %133 = fsub float %132, %58
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %29, float noundef %131, float noundef %133)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  call void @_ZN6ImVec2C2Eff(ptr noundef nonnull align 4 dereferenceable(8) %30, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104) %0, ptr noundef nonnull align 4 dereferenceable(8) %29, float noundef %58, i32 noundef %3, i32 noundef 9, i32 noundef 12, i1 noundef zeroext false, ptr noundef nonnull align 4 dereferenceable(8) %30)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %134

134:                                              ; preds = %61, %129, %128, %6
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList6AddArcERK6ImVec2fjiibS2_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(8), float noundef, i32 noundef, i32 noundef, i32 noundef, i1 noundef zeroext, ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList15ReserveVerticesEj(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10ImDrawList10AddVtxLineERK6ImVec2S2_j(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #5 align 2

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { inlinehint 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #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 0}
!6 = !{!"_ZTS6ImVec2", !7, i64 0, !7, i64 4}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!6, !7, i64 4}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass