; LLVM IR from BrunoLevy/learn-fpga :: LiteX/software/Tagl/Lib/locgman.ll (ZN20LocalGeometryManagerC2EPciii)

; 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"

%class.LocalGeometryManager = type <{ %class.GeometryManager, %class.Flags, [4 x i8], ptr, ptr, %class.GMatrix, %class.GMatrix, [100 x %class.GMatrix], i32, [100 x %class.Rect], i32, [100 x %class.GMatrix], i32, %class.GMatrix, i32, %class.GVertexPool, [4 x %class.GVertex], i32, i32, i32, i32, i32, i32, [4 x i8] }>
%class.GeometryManager = type { %class.GraphicProcessor }
%class.GraphicProcessor = type { %class.GraphicComponent, ptr }
%class.GraphicComponent = type { ptr, i32, i32, [100 x %class.Flags], i32, %class.Flags, ptr, [8192 x i8] }
%class.Flags = type { i32 }
%class.Rect = type { i32, i32, i32, i32, i32, i32 }
%class.GMatrix = type { [4 x [4 x %class.GCoeff]] }
%class.GCoeff = type { float }
%class.GVertexPool = type { [100 x %class.GVertex], i32 }
%class.GVertex = type { %class.GVertexAttributes, i32, i32, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.Flags }
%class.GVertexAttributes = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%class.GVector = type { [4 x %class.GCoord] }
%class.GCoord = type { float }

@_ZTV20LocalGeometryManager = external dso_local unnamed_addr constant { [59 x ptr] }, align 8
@.str = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404)) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN20LocalGeometryManagerC2EPciii(ptr noundef nonnull align 8 dereferenceable(37404) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !9
  %13 = load ptr, ptr %6, align 8
  call void @_ZN15GeometryManagerC2Ev(ptr noundef nonnull align 8 dereferenceable(8632) %13)
  store ptr getelementptr inbounds inrange(-16, 456) ({ [59 x ptr] }, ptr @_ZTV20LocalGeometryManager, i32 0, i32 0, i32 2), ptr %13, align 8, !tbaa !11
  %14 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 1
  invoke void @_ZN5FlagsC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef 0)
          to label %15 unwind label %74

15:                                               ; preds = %5
  %16 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 5
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
          to label %17 unwind label %74

17:                                               ; preds = %15
  %18 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 6
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %18)
          to label %19 unwind label %74

19:                                               ; preds = %17
  %20 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 7
  %21 = getelementptr inbounds [100 x %class.GMatrix], ptr %20, i32 0, i32 0
  %22 = getelementptr inbounds %class.GMatrix, ptr %21, i64 100
  br label %23

23:                                               ; preds = %25, %19
  %24 = phi ptr [ %21, %19 ], [ %26, %25 ]
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %24)
          to label %25 unwind label %74

25:                                               ; preds = %23
  %26 = getelementptr inbounds %class.GMatrix, ptr %24, i64 1
  %27 = icmp eq ptr %26, %22
  br i1 %27, label %28, label %23

28:                                               ; preds = %25
  %29 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 9
  %30 = getelementptr inbounds [100 x %class.Rect], ptr %29, i32 0, i32 0
  %31 = getelementptr inbounds %class.Rect, ptr %30, i64 100
  br label %32

32:                                               ; preds = %34, %28
  %33 = phi ptr [ %30, %28 ], [ %35, %34 ]
  invoke void @_ZN4RectC2Eiiii(ptr noundef nonnull align 4 dereferenceable(24) %33, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
          to label %34 unwind label %74

34:                                               ; preds = %32
  %35 = getelementptr inbounds %class.Rect, ptr %33, i64 1
  %36 = icmp eq ptr %35, %31
  br i1 %36, label %37, label %32

37:                                               ; preds = %34
  %38 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 11
  %39 = getelementptr inbounds [100 x %class.GMatrix], ptr %38, i32 0, i32 0
  %40 = getelementptr inbounds %class.GMatrix, ptr %39, i64 100
  br label %41

41:                                               ; preds = %43, %37
  %42 = phi ptr [ %39, %37 ], [ %44, %43 ]
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %42)
          to label %43 unwind label %74

43:                                               ; preds = %41
  %44 = getelementptr inbounds %class.GMatrix, ptr %42, i64 1
  %45 = icmp eq ptr %44, %40
  br i1 %45, label %46, label %41

46:                                               ; preds = %43
  %47 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 13
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %47)
          to label %48 unwind label %74

48:                                               ; preds = %46
  %49 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 15
  invoke void @_ZN11GVertexPoolC2Ev(ptr noundef nonnull align 4 dereferenceable(12804) %49)
          to label %50 unwind label %74

50:                                               ; preds = %48
  %51 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 16
  %52 = getelementptr inbounds [4 x %class.GVertex], ptr %51, i32 0, i32 0
  %53 = getelementptr inbounds %class.GVertex, ptr %52, i64 4
  br label %54

54:                                               ; preds = %56, %50
  %55 = phi ptr [ %52, %50 ], [ %57, %56 ]
  invoke void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128) %55)
          to label %56 unwind label %74

56:                                               ; preds = %54
  %57 = getelementptr inbounds %class.GVertex, ptr %55, i64 1
  %58 = icmp eq ptr %57, %53
  br i1 %58, label %59, label %54

59:                                               ; preds = %56
  %60 = load i32, ptr %10, align 4, !tbaa !9
  invoke void @_ZN16GraphicComponent7VerboseEi(ptr noundef nonnull align 8 dereferenceable(8624) %13, i32 noundef %60)
          to label %61 unwind label %74

61:                                               ; preds = %59
  %62 = getelementptr inbounds %class.GraphicComponent, ptr %13, i32 0, i32 6
  store ptr @.str, ptr %62, align 8, !tbaa !13
  %63 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 14
  store i32 0, ptr %63, align 4, !tbaa !16
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = load i32, ptr %8, align 4, !tbaa !9
  %66 = load i32, ptr %9, align 4, !tbaa !9
  %67 = invoke noundef ptr @_ZN11GraphicPort4MakeEPKciii(ptr noundef %64, i32 noundef %65, i32 noundef %66, i32 noundef 101)
          to label %68 unwind label %74

68:                                               ; preds = %61
  %69 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 3
  store ptr %67, ptr %69, align 8, !tbaa !22
  %70 = icmp ne ptr %67, null
  br i1 %70, label %71, label %78

71:                                               ; preds = %68
  %72 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 1
  invoke void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %72, i32 noundef 1)
          to label %73 unwind label %74

73:                                               ; preds = %71
  br label %80

74:                                               ; preds = %149, %147, %141, %140, %136, %130, %126, %124, %123, %121, %120, %116, %115, %113, %111, %108, %106, %98, %89, %87, %80, %71, %61, %59, %54, %48, %46, %41, %32, %23, %17, %15, %5
  %75 = landingpad { ptr, i32 }
          cleanup
  %76 = extractvalue { ptr, i32 } %75, 0
  store ptr %76, ptr %11, align 8
  %77 = extractvalue { ptr, i32 } %75, 1
  store i32 %77, ptr %12, align 4
  call void @_ZN16GraphicProcessorD2Ev(ptr noundef nonnull align 8 dereferenceable(8632) %13) #5
  br label %152

78:                                               ; preds = %68
  %79 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 14
  store i32 1, ptr %79, align 4, !tbaa !16
  br label %151

80:                                               ; preds = %73
  %81 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 3
  %82 = load ptr, ptr %81, align 8, !tbaa !22
  %83 = invoke noundef ptr @_ZN13PolygonEngine4MakeEP11GraphicPorti(ptr noundef %82, i32 noundef 101)
          to label %84 unwind label %74

84:                                               ; preds = %80
  %85 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 4
  store ptr %83, ptr %85, align 8, !tbaa !23
  %86 = icmp ne ptr %83, null
  br i1 %86, label %87, label %96

87:                                               ; preds = %84
  %88 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 1
  invoke void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %88, i32 noundef 2)
          to label %89 unwind label %74

89:                                               ; preds = %87
  %90 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 4
  %91 = load ptr, ptr %90, align 8, !tbaa !23
  %92 = load ptr, ptr %91, align 8, !tbaa !11
  %93 = getelementptr inbounds ptr, ptr %92, i64 0
  %94 = load ptr, ptr %93, align 8
  invoke void %94(ptr noundef nonnull align 8 dereferenceable(8624) %91)
          to label %95 unwind label %74

95:                                               ; preds = %89
  br label %98

96:                                               ; preds = %84
  %97 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 14
  store i32 2, ptr %97, align 4, !tbaa !16
  br label %151

98:                                               ; preds = %95
  %99 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 20
  store i32 0, ptr %99, align 8, !tbaa !24
  %100 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 19
  store i32 0, ptr %100, align 4, !tbaa !25
  %101 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 21
  store i32 2, ptr %101, align 4, !tbaa !26
  %102 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 22
  store i32 0, ptr %102, align 8, !tbaa !27
  %103 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 8
  store i32 0, ptr %103, align 8, !tbaa !28
  %104 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 10
  store i32 0, ptr %104, align 4, !tbaa !29
  %105 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %106 unwind label %74

106:                                              ; preds = %98
  %107 = invoke noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %108 unwind label %74

108:                                              ; preds = %106
  %109 = sub nsw i32 %107, 1
  %110 = invoke noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %111 unwind label %74

111:                                              ; preds = %108
  %112 = sub nsw i32 %110, 1
  invoke void @_ZN4Rect3SetEiiii(ptr noundef nonnull align 4 dereferenceable(24) %105, i32 noundef 0, i32 noundef 0, i32 noundef %109, i32 noundef %112)
          to label %113 unwind label %74

113:                                              ; preds = %111
  %114 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %115 unwind label %74

115:                                              ; preds = %113
  invoke void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24) %114, i16 noundef zeroext 0, i16 noundef zeroext 511)
          to label %116 unwind label %74

116:                                              ; preds = %115
  %117 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 3
  %118 = load ptr, ptr %117, align 8, !tbaa !22
  %119 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN11GraphicPort4ClipEv(ptr noundef nonnull align 8 dereferenceable(14128) %118)
          to label %120 unwind label %74

120:                                              ; preds = %116
  invoke void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24) %119, i16 noundef zeroext 0, i16 noundef zeroext 511)
          to label %121 unwind label %74

121:                                              ; preds = %120
  %122 = invoke noundef nonnull align 4 dereferenceable(64) ptr @_ZN20LocalGeometryManager12GetModelViewEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %123 unwind label %74

123:                                              ; preds = %121
  invoke void @_ZN7GMatrix12LoadIdentityEv(ptr noundef nonnull align 4 dereferenceable(64) %122)
          to label %124 unwind label %74

124:                                              ; preds = %123
  %125 = invoke noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %126 unwind label %74

126:                                              ; preds = %124
  %127 = sub nsw i32 %125, 1
  %128 = sitofp i32 %127 to float
  %129 = invoke noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404) %13)
          to label %130 unwind label %74

130:                                              ; preds = %126
  %131 = sub nsw i32 %129, 1
  %132 = sitofp i32 %131 to float
  %133 = load ptr, ptr %13, align 8, !tbaa !11
  %134 = getelementptr inbounds ptr, ptr %133, i64 45
  %135 = load ptr, ptr %134, align 8
  invoke void %135(ptr noundef nonnull align 8 dereferenceable(37404) %13, float noundef 0.000000e+00, float noundef %128, float noundef 0.000000e+00, float noundef %132, float noundef 5.000000e+00, float noundef 1.638300e+04)
          to label %136 unwind label %74

136:                                              ; preds = %130
  %137 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 4
  %138 = load ptr, ptr %137, align 8, !tbaa !23
  %139 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN16GraphicComponent10AttributesEv(ptr noundef nonnull align 8 dereferenceable(8624) %138)
          to label %140 unwind label %74

140:                                              ; preds = %136
  invoke void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %139, i32 noundef 8)
          to label %141 unwind label %74

141:                                              ; preds = %140
  %142 = getelementptr inbounds %class.LocalGeometryManager, ptr %13, i32 0, i32 4
  %143 = load ptr, ptr %142, align 8, !tbaa !23
  %144 = load ptr, ptr %143, align 8, !tbaa !11
  %145 = getelementptr inbounds ptr, ptr %144, i64 0
  %146 = load ptr, ptr %145, align 8
  invoke void %146(ptr noundef nonnull align 8 dereferenceable(8624) %143)
          to label %147 unwind label %74

147:                                              ; preds = %141
  %148 = invoke noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentixEi(ptr noundef nonnull align 8 dereferenceable(8624) %13, i32 noundef 3)
          to label %149 unwind label %74

149:                                              ; preds = %147
  %150 = invoke noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentlsEPKc(ptr noundef nonnull align 8 dereferenceable(8624) %148, ptr noundef @.str.1)
          to label %151 unwind label %74

151:                                              ; preds = %149, %96, %78
  ret void

152:                                              ; preds = %74
  %153 = load ptr, ptr %11, align 8
  %154 = load i32, ptr %12, align 4
  %155 = insertvalue { ptr, i32 } poison, ptr %153, 0
  %156 = insertvalue { ptr, i32 } %155, i32 %154, 1
  resume { ptr, i32 } %156
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN15GeometryManagerC2Ev(ptr noundef nonnull align 8 dereferenceable(8632)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN5FlagsC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4RectC2Eiiii(ptr noundef nonnull align 4 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11GVertexPoolC2Ev(ptr noundef nonnull align 4 dereferenceable(12804)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN16GraphicComponent7VerboseEi(ptr noundef nonnull align 8 dereferenceable(8624), i32 noundef) #2 align 2

declare noundef ptr @_ZN11GraphicPort4MakeEPKciii(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #2 align 2

declare noundef ptr @_ZN13PolygonEngine4MakeEP11GraphicPorti(ptr noundef, i32 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4Rect3SetEiiii(ptr noundef nonnull align 4 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24), i16 noundef zeroext, i16 noundef zeroext) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN11GraphicPort4ClipEv(ptr noundef nonnull align 8 dereferenceable(14128)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(64) ptr @_ZN20LocalGeometryManager12GetModelViewEv(ptr noundef nonnull align 8 dereferenceable(37404)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GMatrix12LoadIdentityEv(ptr noundef nonnull align 4 dereferenceable(64)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN16GraphicComponent10AttributesEv(ptr noundef nonnull align 8 dereferenceable(8624)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentixEi(ptr noundef nonnull align 8 dereferenceable(8624), i32 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentlsEPKc(ptr noundef nonnull align 8 dereferenceable(8624), ptr noundef) #0 align 2

; Function Attrs: nounwind
declare void @_ZN16GraphicProcessorD2Ev(ptr noundef nonnull align 8 dereferenceable(8632)) unnamed_addr #4

attributes #0 = { inlinehint 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 #1 = { 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 #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"vtable pointer", !8, i64 0}
!13 = !{!14, !6, i64 424}
!14 = !{!"_ZTS16GraphicComponent", !10, i64 8, !10, i64 12, !7, i64 16, !10, i64 416, !15, i64 420, !6, i64 424, !7, i64 432}
!15 = !{!"_ZTS5Flags", !10, i64 0}
!16 = !{!17, !10, i64 24060}
!17 = !{!"_ZTS20LocalGeometryManager", !18, i64 0, !15, i64 8632, !6, i64 8640, !6, i64 8648, !20, i64 8656, !20, i64 8720, !7, i64 8784, !10, i64 15184, !7, i64 15188, !10, i64 17588, !7, i64 17592, !10, i64 23992, !20, i64 23996, !10, i64 24060, !21, i64 24064, !7, i64 36868, !10, i64 37380, !10, i64 37384, !10, i64 37388, !10, i64 37392, !10, i64 37396, !10, i64 37400}
!18 = !{!"_ZTS15GeometryManager", !19, i64 0}
!19 = !{!"_ZTS16GraphicProcessor", !14, i64 0, !6, i64 8624}
!20 = !{!"_ZTS7GMatrix", !7, i64 0}
!21 = !{!"_ZTS11GVertexPool", !7, i64 0, !10, i64 12800}
!22 = !{!17, !6, i64 8640}
!23 = !{!17, !6, i64 8648}
!24 = !{!17, !10, i64 37392}
!25 = !{!17, !10, i64 37388}
!26 = !{!17, !10, i64 37396}
!27 = !{!17, !10, i64 37400}
!28 = !{!17, !10, i64 15184}
!29 = !{!17, !10, i64 17588}


; 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"

@_ZTV20LocalGeometryManager = external dso_local unnamed_addr constant { [59 x ptr] }, align 8
@.str = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN20LocalGeometryManagerC2EPciii(ptr noundef nonnull align 8 dereferenceable(37404) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  tail call void @_ZN15GeometryManagerC2Ev(ptr noundef nonnull align 8 dereferenceable(8632) %0)
  store ptr getelementptr inbounds inrange(-16, 456) (i8, ptr @_ZTV20LocalGeometryManager, i64 16), ptr %0, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 8632
  tail call void @_ZN5FlagsC2Ei(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef 0)
  %7 = getelementptr inbounds i8, ptr %0, i64 8656
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %7)
          to label %8 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

8:                                                ; preds = %5
  %9 = getelementptr inbounds i8, ptr %0, i64 8720
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %9)
          to label %.preheader31 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader31:                                     ; preds = %8, %10
  %.idx = phi i64 [ %.add, %10 ], [ 8784, %8 ]
  %.ptr = getelementptr inbounds i8, ptr %0, i64 %.idx
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %.ptr)
          to label %10 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit

10:                                               ; preds = %.preheader31
  %.add = add nuw nsw i64 %.idx, 64
  %11 = icmp eq i64 %.add, 15184
  br i1 %11, label %.preheader30, label %.preheader31

.preheader30:                                     ; preds = %10, %.preheader30
  %.idx10 = phi i64 [ %.add11, %.preheader30 ], [ 15188, %10 ]
  %.ptr12 = getelementptr inbounds i8, ptr %0, i64 %.idx10
  tail call void @_ZN4RectC2Eiiii(ptr noundef nonnull align 4 dereferenceable(24) %.ptr12, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %.add11 = add nuw nsw i64 %.idx10, 24
  %12 = icmp eq i64 %.add11, 17588
  br i1 %12, label %.preheader26, label %.preheader30

.preheader26:                                     ; preds = %.preheader30, %13
  %.idx15 = phi i64 [ %.add16, %13 ], [ 17592, %.preheader30 ]
  %.ptr17 = getelementptr inbounds i8, ptr %0, i64 %.idx15
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %.ptr17)
          to label %13 unwind label %.loopexit.split-lp.loopexit

13:                                               ; preds = %.preheader26
  %.add16 = add nuw nsw i64 %.idx15, 64
  %14 = icmp eq i64 %.add16, 23992
  br i1 %14, label %15, label %.preheader26

15:                                               ; preds = %13
  %16 = getelementptr inbounds i8, ptr %0, i64 23996
  invoke void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64) %16)
          to label %17 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

17:                                               ; preds = %15
  %18 = getelementptr inbounds i8, ptr %0, i64 24064
  invoke void @_ZN11GVertexPoolC2Ev(ptr noundef nonnull align 4 dereferenceable(12804) %18)
          to label %.preheader.preheader unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.preheader.preheader:                             ; preds = %17
  %.ptr22 = getelementptr inbounds i8, ptr %0, i64 36868
  invoke void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128) %.ptr22)
          to label %.preheader.1 unwind label %.loopexit

.preheader.1:                                     ; preds = %.preheader.preheader
  %.ptr22.1 = getelementptr inbounds i8, ptr %0, i64 36996
  invoke void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128) %.ptr22.1)
          to label %.preheader.2 unwind label %.loopexit

.preheader.2:                                     ; preds = %.preheader.1
  %.ptr22.2 = getelementptr inbounds i8, ptr %0, i64 37124
  invoke void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128) %.ptr22.2)
          to label %.preheader.3 unwind label %.loopexit

.preheader.3:                                     ; preds = %.preheader.2
  %.ptr22.3 = getelementptr inbounds i8, ptr %0, i64 37252
  invoke void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128) %.ptr22.3)
          to label %19 unwind label %.loopexit

19:                                               ; preds = %.preheader.3
  tail call void @_ZN16GraphicComponent7VerboseEi(ptr noundef nonnull align 8 dereferenceable(8624) %0, i32 noundef %4)
  %20 = getelementptr inbounds i8, ptr %0, i64 424
  store ptr @.str, ptr %20, align 8, !tbaa !8
  %21 = getelementptr inbounds i8, ptr %0, i64 24060
  store i32 0, ptr %21, align 4, !tbaa !14
  %22 = invoke noundef ptr @_ZN11GraphicPort4MakeEPKciii(ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef 101)
          to label %23 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %0, i64 8640
  store ptr %22, ptr %24, align 8, !tbaa !20
  %.not = icmp eq ptr %22, null
  br i1 %.not, label %.sink.split, label %25

25:                                               ; preds = %23
  tail call void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef 1)
  %26 = load ptr, ptr %24, align 8, !tbaa !20
  %27 = invoke noundef ptr @_ZN13PolygonEngine4MakeEP11GraphicPorti(ptr noundef %26, i32 noundef 101)
          to label %28 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.loopexit:                                        ; preds = %.preheader.3, %.preheader.2, %.preheader.1, %.preheader.preheader
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit:                      ; preds = %.preheader26
  %lpad.loopexit27 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit:    ; preds = %.preheader31
  %lpad.loopexit32 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp: ; preds = %5, %8, %15, %17, %19, %25, %30, %34, %40, %42, %49, %51, %53, %61, %67, %69
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp:                               ; preds = %.loopexit.split-lp.loopexit, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit, %.loopexit
  %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit27, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit32, %.loopexit.split-lp.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp ]
  tail call void @_ZN16GraphicProcessorD2Ev(ptr noundef nonnull align 8 dereferenceable(8632) %0) #5
  resume { ptr, i32 } %lpad.phi

28:                                               ; preds = %25
  %29 = getelementptr inbounds i8, ptr %0, i64 8648
  store ptr %27, ptr %29, align 8, !tbaa !21
  %.not25 = icmp eq ptr %27, null
  br i1 %.not25, label %.sink.split, label %30

30:                                               ; preds = %28
  tail call void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %6, i32 noundef 2)
  %31 = load ptr, ptr %29, align 8, !tbaa !21
  %32 = load ptr, ptr %31, align 8, !tbaa !5
  %33 = load ptr, ptr %32, align 8
  invoke void %33(ptr noundef nonnull align 8 dereferenceable(8624) %31)
          to label %34 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %0, i64 37388
  store <4 x i32> <i32 0, i32 0, i32 2, i32 0>, ptr %35, align 4, !tbaa !22
  %36 = getelementptr inbounds i8, ptr %0, i64 15184
  store i32 0, ptr %36, align 8, !tbaa !23
  %37 = getelementptr inbounds i8, ptr %0, i64 17588
  store i32 0, ptr %37, align 4, !tbaa !24
  %38 = tail call noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
  %39 = invoke noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
          to label %40 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

40:                                               ; preds = %34
  %41 = invoke noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
          to label %42 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

42:                                               ; preds = %40
  %43 = add nsw i32 %39, -1
  %44 = add nsw i32 %41, -1
  tail call void @_ZN4Rect3SetEiiii(ptr noundef nonnull align 4 dereferenceable(24) %38, i32 noundef 0, i32 noundef 0, i32 noundef %43, i32 noundef %44)
  %45 = tail call noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
  tail call void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24) %45, i16 noundef zeroext 0, i16 noundef zeroext 511)
  %46 = load ptr, ptr %24, align 8, !tbaa !20
  %47 = tail call noundef nonnull align 4 dereferenceable(24) ptr @_ZN11GraphicPort4ClipEv(ptr noundef nonnull align 8 dereferenceable(14128) %46)
  tail call void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24) %47, i16 noundef zeroext 0, i16 noundef zeroext 511)
  %48 = tail call noundef nonnull align 4 dereferenceable(64) ptr @_ZN20LocalGeometryManager12GetModelViewEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
  invoke void @_ZN7GMatrix12LoadIdentityEv(ptr noundef nonnull align 4 dereferenceable(64) %48)
          to label %49 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

49:                                               ; preds = %42
  %50 = invoke noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
          to label %51 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

51:                                               ; preds = %49
  %52 = invoke noundef i32 @_ZN20LocalGeometryManager9GetHeightEv(ptr noundef nonnull align 8 dereferenceable(37404) %0)
          to label %53 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

53:                                               ; preds = %51
  %54 = add nsw i32 %50, -1
  %55 = sitofp i32 %54 to float
  %56 = add nsw i32 %52, -1
  %57 = sitofp i32 %56 to float
  %58 = load ptr, ptr %0, align 8, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %58, i64 360
  %60 = load ptr, ptr %59, align 8
  invoke void %60(ptr noundef nonnull align 8 dereferenceable(37404) %0, float noundef 0.000000e+00, float noundef %55, float noundef 0.000000e+00, float noundef %57, float noundef 5.000000e+00, float noundef 1.638300e+04)
          to label %61 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

61:                                               ; preds = %53
  %62 = load ptr, ptr %29, align 8, !tbaa !21
  %63 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN16GraphicComponent10AttributesEv(ptr noundef nonnull align 8 dereferenceable(8624) %62)
  tail call void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4) %63, i32 noundef 8)
  %64 = load ptr, ptr %29, align 8, !tbaa !21
  %65 = load ptr, ptr %64, align 8, !tbaa !5
  %66 = load ptr, ptr %65, align 8
  invoke void %66(ptr noundef nonnull align 8 dereferenceable(8624) %64)
          to label %67 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

67:                                               ; preds = %61
  %68 = invoke noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentixEi(ptr noundef nonnull align 8 dereferenceable(8624) %0, i32 noundef 3)
          to label %69 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

69:                                               ; preds = %67
  %70 = invoke noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentlsEPKc(ptr noundef nonnull align 8 dereferenceable(8624) %68, ptr noundef nonnull @.str.1)
          to label %71 unwind label %.loopexit.split-lp.loopexit.split-lp.loopexit.split-lp

.sink.split:                                      ; preds = %28, %23
  %.sink = phi i32 [ 1, %23 ], [ 2, %28 ]
  store i32 %.sink, ptr %21, align 4, !tbaa !14
  br label %71

71:                                               ; preds = %.sink.split, %69
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN15GeometryManagerC2Ev(ptr noundef nonnull align 8 dereferenceable(8632)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN5FlagsC2Ei(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GMatrixC2Ev(ptr noundef nonnull align 4 dereferenceable(64)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4RectC2Eiiii(ptr noundef nonnull align 4 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11GVertexPoolC2Ev(ptr noundef nonnull align 4 dereferenceable(12804)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GVertexC2Ev(ptr noundef nonnull align 4 dereferenceable(128)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN16GraphicComponent7VerboseEi(ptr noundef nonnull align 8 dereferenceable(8624), i32 noundef) local_unnamed_addr #2 align 2

declare noundef ptr @_ZN11GraphicPort4MakeEPKciii(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN5Flags3SetEi(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #2 align 2

declare noundef ptr @_ZN13PolygonEngine4MakeEP11GraphicPorti(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN20LocalGeometryManager11GetViewportEv(ptr noundef nonnull align 8 dereferenceable(37404)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4Rect3SetEiiii(ptr noundef nonnull align 4 dereferenceable(24), i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN20LocalGeometryManager8GetWidthEv(ptr noundef nonnull align 8 dereferenceable(37404)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN4Rect3SetEtt(ptr noundef nonnull align 4 dereferenceable(24), i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN11GraphicPort4ClipEv(ptr noundef nonnull align 8 dereferenceable(14128)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(64) ptr @_ZN20LocalGeometryManager12GetModelViewEv(ptr noundef nonnull align 8 dereferenceable(37404)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7GMatrix12LoadIdentityEv(ptr noundef nonnull align 4 dereferenceable(64)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN16GraphicComponent10AttributesEv(ptr noundef nonnull align 8 dereferenceable(8624)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentixEi(ptr noundef nonnull align 8 dereferenceable(8624), i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8624) ptr @_ZN16GraphicComponentlsEPKc(ptr noundef nonnull align 8 dereferenceable(8624), ptr noundef) local_unnamed_addr #0 align 2

; Function Attrs: nounwind
declare void @_ZN16GraphicProcessorD2Ev(ptr noundef nonnull align 8 dereferenceable(8632)) unnamed_addr #4

attributes #0 = { inlinehint 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 #1 = { 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 #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !13, i64 424}
!9 = !{!"_ZTS16GraphicComponent", !10, i64 8, !10, i64 12, !11, i64 16, !10, i64 416, !12, i64 420, !13, i64 424, !11, i64 432}
!10 = !{!"int", !11, i64 0}
!11 = !{!"omnipotent char", !7, i64 0}
!12 = !{!"_ZTS5Flags", !10, i64 0}
!13 = !{!"any pointer", !11, i64 0}
!14 = !{!15, !10, i64 24060}
!15 = !{!"_ZTS20LocalGeometryManager", !16, i64 0, !12, i64 8632, !13, i64 8640, !13, i64 8648, !18, i64 8656, !18, i64 8720, !11, i64 8784, !10, i64 15184, !11, i64 15188, !10, i64 17588, !11, i64 17592, !10, i64 23992, !18, i64 23996, !10, i64 24060, !19, i64 24064, !11, i64 36868, !10, i64 37380, !10, i64 37384, !10, i64 37388, !10, i64 37392, !10, i64 37396, !10, i64 37400}
!16 = !{!"_ZTS15GeometryManager", !17, i64 0}
!17 = !{!"_ZTS16GraphicProcessor", !9, i64 0, !13, i64 8624}
!18 = !{!"_ZTS7GMatrix", !11, i64 0}
!19 = !{!"_ZTS11GVertexPool", !11, i64 0, !10, i64 12800}
!20 = !{!15, !13, i64 8640}
!21 = !{!15, !13, i64 8648}
!22 = !{!10, !10, i64 0}
!23 = !{!15, !10, i64 15184}
!24 = !{!15, !10, i64 17588}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,InstCombinePass,LoopSimplifyPass,LoopUnrollPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass