; LLVM IR from Angelo1211/HybridRenderingEngine :: src/inputManager.ll (ZN12InputManager11handleEventEP9SDL_EventRbj)

; 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.std::pair" = type <{ %"struct.std::_Rb_tree_const_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%struct.SDL_KeyboardEvent = type { i32, i32, i32, i8, i8, i8, i8, %struct.SDL_Keysym }
%struct.SDL_Keysym = type { i32, i32, i16, i32 }
%class.InputManager = type { ptr, ptr }
%struct.Camera = type <{ %"struct.glm::mat", %"struct.glm::mat", %struct.Frustum, %"class.std::set", %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec", float, float, %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec", %"struct.glm::vec", float, float, float, float, float, i32, [4 x i8] }>
%"struct.glm::mat" = type { [4 x %"struct.glm::vec.3"] }
%"struct.glm::vec.3" = type { %union.anon.4 }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = type { float, float, float, float }
%struct.Frustum = type { [6 x %struct.Plane], float, float, float, float, float, float }
%struct.Plane = type { %"struct.glm::vec", float }
%"class.std::set" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<char, char, std::_Identity<char>, std::less<char>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<char, char, std::_Identity<char>, std::less<char>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"struct.glm::vec" = type { %union.anon.0 }
%union.anon.0 = type { %struct.anon }
%struct.anon = type { float, float, float }
%struct.SDL_MouseMotionEvent = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12InputManager11handleEventEP9SDL_EventRbj(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef %1, ptr noundef nonnull align 1 dereferenceable(1) %2, i32 noundef %3) #1 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca %"struct.std::pair", align 8
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca %"struct.std::pair", align 8
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca %"struct.std::pair", align 8
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca %"struct.std::pair", align 8
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca %"struct.std::pair", align 8
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca %"struct.std::pair", align 8
  %29 = alloca i8, align 1
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  %33 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #4
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = load i32, ptr %34, align 8, !tbaa !11
  %36 = icmp eq i32 %35, 768
  %37 = zext i1 %36 to i8
  store i8 %37, ptr %9, align 1, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #4
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = load i32, ptr %38, align 8, !tbaa !11
  %40 = icmp eq i32 %39, 769
  %41 = zext i1 %40 to i8
  store i8 %41, ptr %10, align 1, !tbaa !12
  %42 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %43 = trunc i8 %42 to i1
  br i1 %43, label %47, label %44

44:                                               ; preds = %4
  %45 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %46 = trunc i8 %45 to i1
  br i1 %46, label %47, label %193

47:                                               ; preds = %44, %4
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.SDL_KeyboardEvent, ptr %48, i32 0, i32 7
  %50 = getelementptr inbounds %struct.SDL_Keysym, ptr %49, i32 0, i32 1
  %51 = load i32, ptr %50, align 4, !tbaa !11
  switch i32 %51, label %191 [
    i32 27, label %52
    i32 114, label %58
    i32 119, label %65
    i32 115, label %86
    i32 97, label %107
    i32 100, label %128
    i32 113, label %149
    i32 101, label %170
  ]

52:                                               ; preds = %47
  %53 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %54 = trunc i8 %53 to i1
  br i1 %54, label %55, label %57

55:                                               ; preds = %52
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  store i8 1, ptr %56, align 1, !tbaa !12
  br label %57

57:                                               ; preds = %55, %52
  store i32 1, ptr %11, align 4
  br label %264

58:                                               ; preds = %47
  %59 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %60 = trunc i8 %59 to i1
  br i1 %60, label %61, label %64

61:                                               ; preds = %58
  %62 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %63 = load ptr, ptr %62, align 8, !tbaa !16
  call void @_ZN6Camera11resetCameraEv(ptr noundef nonnull align 8 dereferenceable(436) %63)
  br label %64

64:                                               ; preds = %61, %58
  br label %192

65:                                               ; preds = %47
  %66 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %67 = trunc i8 %66 to i1
  br i1 %67, label %68, label %77

68:                                               ; preds = %65
  %69 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %70 = load ptr, ptr %69, align 8, !tbaa !16
  %71 = getelementptr inbounds %struct.Camera, ptr %70, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #4
  store i8 119, ptr %12, align 1, !tbaa !11
  %72 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %71, ptr noundef nonnull align 1 dereferenceable(1) %12)
  %73 = getelementptr inbounds { ptr, i8 }, ptr %13, i32 0, i32 0
  %74 = extractvalue { ptr, i8 } %72, 0
  store ptr %74, ptr %73, align 8
  %75 = getelementptr inbounds { ptr, i8 }, ptr %13, i32 0, i32 1
  %76 = extractvalue { ptr, i8 } %72, 1
  store i8 %76, ptr %75, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #4
  br label %77

77:                                               ; preds = %68, %65
  %78 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %79 = trunc i8 %78 to i1
  br i1 %79, label %80, label %85

80:                                               ; preds = %77
  %81 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %82 = load ptr, ptr %81, align 8, !tbaa !16
  %83 = getelementptr inbounds %struct.Camera, ptr %82, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #4
  store i8 119, ptr %14, align 1, !tbaa !11
  %84 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %83, ptr noundef nonnull align 1 dereferenceable(1) %14)
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #4
  br label %85

85:                                               ; preds = %80, %77
  br label %192

86:                                               ; preds = %47
  %87 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %88 = trunc i8 %87 to i1
  br i1 %88, label %89, label %98

89:                                               ; preds = %86
  %90 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %91 = load ptr, ptr %90, align 8, !tbaa !16
  %92 = getelementptr inbounds %struct.Camera, ptr %91, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #4
  store i8 115, ptr %15, align 1, !tbaa !11
  %93 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 1 dereferenceable(1) %15)
  %94 = getelementptr inbounds { ptr, i8 }, ptr %16, i32 0, i32 0
  %95 = extractvalue { ptr, i8 } %93, 0
  store ptr %95, ptr %94, align 8
  %96 = getelementptr inbounds { ptr, i8 }, ptr %16, i32 0, i32 1
  %97 = extractvalue { ptr, i8 } %93, 1
  store i8 %97, ptr %96, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #4
  br label %98

98:                                               ; preds = %89, %86
  %99 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %100 = trunc i8 %99 to i1
  br i1 %100, label %101, label %106

101:                                              ; preds = %98
  %102 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %103 = load ptr, ptr %102, align 8, !tbaa !16
  %104 = getelementptr inbounds %struct.Camera, ptr %103, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #4
  store i8 115, ptr %17, align 1, !tbaa !11
  %105 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %104, ptr noundef nonnull align 1 dereferenceable(1) %17)
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #4
  br label %106

106:                                              ; preds = %101, %98
  br label %192

107:                                              ; preds = %47
  %108 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %109 = trunc i8 %108 to i1
  br i1 %109, label %110, label %119

110:                                              ; preds = %107
  %111 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %112 = load ptr, ptr %111, align 8, !tbaa !16
  %113 = getelementptr inbounds %struct.Camera, ptr %112, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #4
  store i8 97, ptr %18, align 1, !tbaa !11
  %114 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %113, ptr noundef nonnull align 1 dereferenceable(1) %18)
  %115 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 0
  %116 = extractvalue { ptr, i8 } %114, 0
  store ptr %116, ptr %115, align 8
  %117 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 1
  %118 = extractvalue { ptr, i8 } %114, 1
  store i8 %118, ptr %117, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #4
  br label %119

119:                                              ; preds = %110, %107
  %120 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %121 = trunc i8 %120 to i1
  br i1 %121, label %122, label %127

122:                                              ; preds = %119
  %123 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %124 = load ptr, ptr %123, align 8, !tbaa !16
  %125 = getelementptr inbounds %struct.Camera, ptr %124, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #4
  store i8 97, ptr %20, align 1, !tbaa !11
  %126 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %125, ptr noundef nonnull align 1 dereferenceable(1) %20)
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #4
  br label %127

127:                                              ; preds = %122, %119
  br label %192

128:                                              ; preds = %47
  %129 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %130 = trunc i8 %129 to i1
  br i1 %130, label %131, label %140

131:                                              ; preds = %128
  %132 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %133 = load ptr, ptr %132, align 8, !tbaa !16
  %134 = getelementptr inbounds %struct.Camera, ptr %133, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #4
  store i8 100, ptr %21, align 1, !tbaa !11
  %135 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %134, ptr noundef nonnull align 1 dereferenceable(1) %21)
  %136 = getelementptr inbounds { ptr, i8 }, ptr %22, i32 0, i32 0
  %137 = extractvalue { ptr, i8 } %135, 0
  store ptr %137, ptr %136, align 8
  %138 = getelementptr inbounds { ptr, i8 }, ptr %22, i32 0, i32 1
  %139 = extractvalue { ptr, i8 } %135, 1
  store i8 %139, ptr %138, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #4
  br label %140

140:                                              ; preds = %131, %128
  %141 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %142 = trunc i8 %141 to i1
  br i1 %142, label %143, label %148

143:                                              ; preds = %140
  %144 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %145 = load ptr, ptr %144, align 8, !tbaa !16
  %146 = getelementptr inbounds %struct.Camera, ptr %145, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #4
  store i8 100, ptr %23, align 1, !tbaa !11
  %147 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %146, ptr noundef nonnull align 1 dereferenceable(1) %23)
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #4
  br label %148

148:                                              ; preds = %143, %140
  br label %192

149:                                              ; preds = %47
  %150 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %151 = trunc i8 %150 to i1
  br i1 %151, label %152, label %161

152:                                              ; preds = %149
  %153 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %154 = load ptr, ptr %153, align 8, !tbaa !16
  %155 = getelementptr inbounds %struct.Camera, ptr %154, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #4
  store i8 113, ptr %24, align 1, !tbaa !11
  %156 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %155, ptr noundef nonnull align 1 dereferenceable(1) %24)
  %157 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 0
  %158 = extractvalue { ptr, i8 } %156, 0
  store ptr %158, ptr %157, align 8
  %159 = getelementptr inbounds { ptr, i8 }, ptr %25, i32 0, i32 1
  %160 = extractvalue { ptr, i8 } %156, 1
  store i8 %160, ptr %159, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #4
  br label %161

161:                                              ; preds = %152, %149
  %162 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %163 = trunc i8 %162 to i1
  br i1 %163, label %164, label %169

164:                                              ; preds = %161
  %165 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %166 = load ptr, ptr %165, align 8, !tbaa !16
  %167 = getelementptr inbounds %struct.Camera, ptr %166, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #4
  store i8 113, ptr %26, align 1, !tbaa !11
  %168 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %167, ptr noundef nonnull align 1 dereferenceable(1) %26)
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #4
  br label %169

169:                                              ; preds = %164, %161
  br label %192

170:                                              ; preds = %47
  %171 = load i8, ptr %9, align 1, !tbaa !12, !range !14, !noundef !15
  %172 = trunc i8 %171 to i1
  br i1 %172, label %173, label %182

173:                                              ; preds = %170
  %174 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %175 = load ptr, ptr %174, align 8, !tbaa !16
  %176 = getelementptr inbounds %struct.Camera, ptr %175, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #4
  store i8 101, ptr %27, align 1, !tbaa !11
  %177 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %176, ptr noundef nonnull align 1 dereferenceable(1) %27)
  %178 = getelementptr inbounds { ptr, i8 }, ptr %28, i32 0, i32 0
  %179 = extractvalue { ptr, i8 } %177, 0
  store ptr %179, ptr %178, align 8
  %180 = getelementptr inbounds { ptr, i8 }, ptr %28, i32 0, i32 1
  %181 = extractvalue { ptr, i8 } %177, 1
  store i8 %181, ptr %180, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #4
  br label %182

182:                                              ; preds = %173, %170
  %183 = load i8, ptr %10, align 1, !tbaa !12, !range !14, !noundef !15
  %184 = trunc i8 %183 to i1
  br i1 %184, label %185, label %190

185:                                              ; preds = %182
  %186 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %187 = load ptr, ptr %186, align 8, !tbaa !16
  %188 = getelementptr inbounds %struct.Camera, ptr %187, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #4
  store i8 101, ptr %29, align 1, !tbaa !11
  %189 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %188, ptr noundef nonnull align 1 dereferenceable(1) %29)
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  br label %190

190:                                              ; preds = %185, %182
  br label %192

191:                                              ; preds = %47
  br label %192

192:                                              ; preds = %191, %190, %169, %148, %127, %106, %85, %64
  br label %263

193:                                              ; preds = %44
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 8, !tbaa !11
  %196 = icmp eq i32 %195, 1024
  br i1 %196, label %197, label %262

197:                                              ; preds = %193
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.SDL_MouseMotionEvent, ptr %198, i32 0, i32 4
  %200 = load i32, ptr %199, align 8, !tbaa !11
  %201 = and i32 %200, 1
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %259

203:                                              ; preds = %197
  %204 = call i32 @SDL_SetRelativeMouseMode(i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %205 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %206 = load ptr, ptr %205, align 8, !tbaa !16
  %207 = getelementptr inbounds %struct.Camera, ptr %206, i32 0, i32 18
  %208 = load float, ptr %207, align 8, !tbaa !18
  store float %208, ptr %30, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %209 = load ptr, ptr %6, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.SDL_MouseMotionEvent, ptr %209, i32 0, i32 7
  %211 = load i32, ptr %210, align 4, !tbaa !11
  %212 = sitofp i32 %211 to float
  %213 = load float, ptr %30, align 4, !tbaa !33
  %214 = fmul float %212, %213
  store float %214, ptr %31, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.SDL_MouseMotionEvent, ptr %215, i32 0, i32 8
  %217 = load i32, ptr %216, align 8, !tbaa !11
  %218 = sitofp i32 %217 to float
  %219 = fneg float %218
  %220 = load float, ptr %30, align 4, !tbaa !33
  %221 = fmul float %219, %220
  store float %221, ptr %32, align 4, !tbaa !33
  %222 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %223 = load ptr, ptr %222, align 8, !tbaa !16
  %224 = getelementptr inbounds %struct.Camera, ptr %223, i32 0, i32 16
  %225 = load float, ptr %224, align 8, !tbaa !34
  %226 = load float, ptr %31, align 4, !tbaa !33
  %227 = fadd float %225, %226
  %228 = call noundef float @_ZN3glm3modIfEET_S1_S1_(float noundef %227, float noundef 3.600000e+02)
  %229 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %230 = load ptr, ptr %229, align 8, !tbaa !16
  %231 = getelementptr inbounds %struct.Camera, ptr %230, i32 0, i32 16
  store float %228, ptr %231, align 8, !tbaa !34
  %232 = load float, ptr %32, align 4, !tbaa !33
  %233 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %234 = load ptr, ptr %233, align 8, !tbaa !16
  %235 = getelementptr inbounds %struct.Camera, ptr %234, i32 0, i32 15
  %236 = load float, ptr %235, align 4, !tbaa !35
  %237 = fadd float %236, %232
  store float %237, ptr %235, align 4, !tbaa !35
  %238 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %239 = load ptr, ptr %238, align 8, !tbaa !16
  %240 = getelementptr inbounds %struct.Camera, ptr %239, i32 0, i32 15
  %241 = load float, ptr %240, align 4, !tbaa !35
  %242 = fcmp ogt float %241, 8.900000e+01
  br i1 %242, label %243, label %247

243:                                              ; preds = %203
  %244 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %245 = load ptr, ptr %244, align 8, !tbaa !16
  %246 = getelementptr inbounds %struct.Camera, ptr %245, i32 0, i32 15
  store float 8.900000e+01, ptr %246, align 4, !tbaa !35
  br label %258

247:                                              ; preds = %203
  %248 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %249 = load ptr, ptr %248, align 8, !tbaa !16
  %250 = getelementptr inbounds %struct.Camera, ptr %249, i32 0, i32 15
  %251 = load float, ptr %250, align 4, !tbaa !35
  %252 = fcmp olt float %251, -8.900000e+01
  br i1 %252, label %253, label %257

253:                                              ; preds = %247
  %254 = getelementptr inbounds %class.InputManager, ptr %33, i32 0, i32 1
  %255 = load ptr, ptr %254, align 8, !tbaa !16
  %256 = getelementptr inbounds %struct.Camera, ptr %255, i32 0, i32 15
  store float -8.900000e+01, ptr %256, align 4, !tbaa !35
  br label %257

257:                                              ; preds = %253, %247
  br label %258

258:                                              ; preds = %257, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %261

259:                                              ; preds = %197
  %260 = call i32 @SDL_SetRelativeMouseMode(i32 noundef 0)
  br label %261

261:                                              ; preds = %259, %258
  br label %262

262:                                              ; preds = %261, %193
  br label %263

263:                                              ; preds = %262, %192
  store i32 0, ptr %11, align 4
  br label %264

264:                                              ; preds = %263, %57
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #4
  %265 = load i32, ptr %11, align 4
  switch i32 %265, label %267 [
    i32 0, label %266
    i32 1, label %266
  ]

266:                                              ; preds = %264, %264
  ret void

267:                                              ; preds = %264
  unreachable
}

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

declare void @_ZN6Camera11resetCameraEv(ptr noundef nonnull align 8 dereferenceable(436)) #2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

declare i32 @SDL_SetRelativeMouseMode(i32 noundef) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN3glm3modIfEET_S1_S1_(float noundef, float noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { "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 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{i8 0, i8 2}
!15 = !{}
!16 = !{!17, !6, i64 8}
!17 = !{!"_ZTS12InputManager", !6, i64 0, !6, i64 8}
!18 = !{!19, !22, i64 424}
!19 = !{!"_ZTS6Camera", !20, i64 0, !20, i64 64, !21, i64 128, !23, i64 248, !32, i64 296, !32, i64 308, !32, i64 320, !32, i64 332, !22, i64 344, !22, i64 348, !32, i64 352, !32, i64 364, !32, i64 376, !32, i64 388, !32, i64 400, !22, i64 412, !22, i64 416, !22, i64 420, !22, i64 424, !22, i64 428, !10, i64 432}
!20 = !{!"_ZTSN3glm3matILi4ELi4EfLNS_9qualifierE0EEE", !7, i64 0}
!21 = !{!"_ZTS7Frustum", !7, i64 0, !22, i64 96, !22, i64 100, !22, i64 104, !22, i64 108, !22, i64 112, !22, i64 116}
!22 = !{!"float", !7, i64 0}
!23 = !{!"_ZTSSt3setIcSt4lessIcESaIcEE", !24, i64 0}
!24 = !{!"_ZTSSt8_Rb_treeIccSt9_IdentityIcESt4lessIcESaIcEE", !25, i64 0}
!25 = !{!"_ZTSNSt8_Rb_treeIccSt9_IdentityIcESt4lessIcESaIcEE13_Rb_tree_implIS3_Lb1EEE", !26, i64 0, !28, i64 8}
!26 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIcEE", !27, i64 0}
!27 = !{!"_ZTSSt4lessIcE"}
!28 = !{!"_ZTSSt15_Rb_tree_header", !29, i64 0, !31, i64 32}
!29 = !{!"_ZTSSt18_Rb_tree_node_base", !30, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!31 = !{!"long", !7, i64 0}
!32 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !7, i64 0}
!33 = !{!22, !22, i64 0}
!34 = !{!19, !22, i64 416}
!35 = !{!19, !22, i64 412}


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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN12InputManager11handleEventEP9SDL_EventRbj(ptr nocapture noundef nonnull readonly align 8 dereferenceable(16) %0, ptr nocapture noundef readonly %1, ptr nocapture noundef nonnull writeonly align 1 dereferenceable(1) %2, i32 noundef %3) local_unnamed_addr #1 align 2 {
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = load i32, ptr %1, align 8, !tbaa !5
  %18 = icmp eq i32 %17, 768
  switch i32 %17, label %110 [
    i32 769, label %19
    i32 768, label %19
    i32 1024, label %76
  ]

19:                                               ; preds = %4, %4
  %20 = getelementptr inbounds i8, ptr %1, i64 20
  %21 = load i32, ptr %20, align 4, !tbaa !5
  switch i32 %21, label %110 [
    i32 27, label %22
    i32 114, label %24
    i32 119, label %28
    i32 115, label %36
    i32 97, label %44
    i32 100, label %52
    i32 113, label %60
    i32 101, label %68
  ]

22:                                               ; preds = %19
  br i1 %18, label %23, label %110

23:                                               ; preds = %22
  store i8 1, ptr %2, align 1, !tbaa !8
  br label %110

24:                                               ; preds = %19
  br i1 %18, label %25, label %110

25:                                               ; preds = %24
  %26 = getelementptr inbounds i8, ptr %0, i64 8
  %27 = load ptr, ptr %26, align 8, !tbaa !10
  tail call void @_ZN6Camera11resetCameraEv(ptr noundef nonnull align 8 dereferenceable(436) %27)
  br label %110

28:                                               ; preds = %19
  %29 = getelementptr inbounds i8, ptr %0, i64 8
  %30 = load ptr, ptr %29, align 8, !tbaa !10
  %31 = getelementptr inbounds i8, ptr %30, i64 248
  br i1 %18, label %32, label %34

32:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #4
  store i8 119, ptr %5, align 1, !tbaa !5
  %33 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %31, ptr noundef nonnull align 1 dereferenceable(1) %5)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #4
  br label %110

34:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #4
  store i8 119, ptr %6, align 1, !tbaa !5
  %35 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %31, ptr noundef nonnull align 1 dereferenceable(1) %6)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #4
  br label %110

36:                                               ; preds = %19
  %37 = getelementptr inbounds i8, ptr %0, i64 8
  %38 = load ptr, ptr %37, align 8, !tbaa !10
  %39 = getelementptr inbounds i8, ptr %38, i64 248
  br i1 %18, label %40, label %42

40:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #4
  store i8 115, ptr %7, align 1, !tbaa !5
  %41 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %39, ptr noundef nonnull align 1 dereferenceable(1) %7)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #4
  br label %110

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #4
  store i8 115, ptr %8, align 1, !tbaa !5
  %43 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %39, ptr noundef nonnull align 1 dereferenceable(1) %8)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #4
  br label %110

44:                                               ; preds = %19
  %45 = getelementptr inbounds i8, ptr %0, i64 8
  %46 = load ptr, ptr %45, align 8, !tbaa !10
  %47 = getelementptr inbounds i8, ptr %46, i64 248
  br i1 %18, label %48, label %50

48:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #4
  store i8 97, ptr %9, align 1, !tbaa !5
  %49 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %47, ptr noundef nonnull align 1 dereferenceable(1) %9)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #4
  br label %110

50:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #4
  store i8 97, ptr %10, align 1, !tbaa !5
  %51 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %47, ptr noundef nonnull align 1 dereferenceable(1) %10)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #4
  br label %110

52:                                               ; preds = %19
  %53 = getelementptr inbounds i8, ptr %0, i64 8
  %54 = load ptr, ptr %53, align 8, !tbaa !10
  %55 = getelementptr inbounds i8, ptr %54, i64 248
  br i1 %18, label %56, label %58

56:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #4
  store i8 100, ptr %11, align 1, !tbaa !5
  %57 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %55, ptr noundef nonnull align 1 dereferenceable(1) %11)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #4
  br label %110

58:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #4
  store i8 100, ptr %12, align 1, !tbaa !5
  %59 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %55, ptr noundef nonnull align 1 dereferenceable(1) %12)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #4
  br label %110

60:                                               ; preds = %19
  %61 = getelementptr inbounds i8, ptr %0, i64 8
  %62 = load ptr, ptr %61, align 8, !tbaa !10
  %63 = getelementptr inbounds i8, ptr %62, i64 248
  br i1 %18, label %64, label %66

64:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #4
  store i8 113, ptr %13, align 1, !tbaa !5
  %65 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %63, ptr noundef nonnull align 1 dereferenceable(1) %13)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #4
  br label %110

66:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #4
  store i8 113, ptr %14, align 1, !tbaa !5
  %67 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %63, ptr noundef nonnull align 1 dereferenceable(1) %14)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #4
  br label %110

68:                                               ; preds = %19
  %69 = getelementptr inbounds i8, ptr %0, i64 8
  %70 = load ptr, ptr %69, align 8, !tbaa !10
  %71 = getelementptr inbounds i8, ptr %70, i64 248
  br i1 %18, label %72, label %74

72:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #4
  store i8 101, ptr %15, align 1, !tbaa !5
  %73 = call { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48) %71, ptr noundef nonnull align 1 dereferenceable(1) %15)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #4
  br label %110

74:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #4
  store i8 101, ptr %16, align 1, !tbaa !5
  %75 = call noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48) %71, ptr noundef nonnull align 1 dereferenceable(1) %16)
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #4
  br label %110

76:                                               ; preds = %4
  %77 = getelementptr inbounds i8, ptr %1, i64 16
  %78 = load i32, ptr %77, align 8, !tbaa !5
  %79 = and i32 %78, 1
  %.not = icmp eq i32 %79, 0
  br i1 %.not, label %108, label %80

80:                                               ; preds = %76
  %81 = tail call i32 @SDL_SetRelativeMouseMode(i32 noundef 1)
  %82 = getelementptr inbounds i8, ptr %0, i64 8
  %83 = load ptr, ptr %82, align 8, !tbaa !10
  %84 = getelementptr inbounds i8, ptr %83, i64 424
  %85 = load float, ptr %84, align 8, !tbaa !13
  %86 = getelementptr inbounds i8, ptr %1, i64 28
  %87 = load i32, ptr %86, align 4, !tbaa !5
  %88 = sitofp i32 %87 to float
  %89 = fmul float %85, %88
  %90 = getelementptr inbounds i8, ptr %1, i64 32
  %91 = load i32, ptr %90, align 8, !tbaa !5
  %92 = sitofp i32 %91 to float
  %93 = getelementptr inbounds i8, ptr %83, i64 416
  %94 = load float, ptr %93, align 8, !tbaa !29
  %95 = fadd float %94, %89
  %96 = tail call noundef float @_ZN3glm3modIfEET_S1_S1_(float noundef %95, float noundef 3.600000e+02)
  %97 = load ptr, ptr %82, align 8, !tbaa !10
  %98 = getelementptr inbounds i8, ptr %97, i64 416
  store float %96, ptr %98, align 8, !tbaa !29
  %99 = getelementptr inbounds i8, ptr %97, i64 412
  %100 = load float, ptr %99, align 4, !tbaa !30
  %101 = fmul float %85, %92
  %102 = fsub float %100, %101
  store float %102, ptr %99, align 4, !tbaa !30
  %103 = fcmp ogt float %102, 8.900000e+01
  br i1 %103, label %104, label %105

104:                                              ; preds = %80
  store float 8.900000e+01, ptr %99, align 4, !tbaa !30
  br label %110

105:                                              ; preds = %80
  %106 = fcmp olt float %102, -8.900000e+01
  br i1 %106, label %107, label %110

107:                                              ; preds = %105
  store float -8.900000e+01, ptr %99, align 4, !tbaa !30
  br label %110

108:                                              ; preds = %76
  %109 = tail call i32 @SDL_SetRelativeMouseMode(i32 noundef 0)
  br label %110

110:                                              ; preds = %72, %64, %56, %48, %40, %32, %4, %19, %74, %66, %58, %50, %42, %34, %24, %25, %108, %105, %107, %104, %22, %23
  ret void
}

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

declare void @_ZN6Camera11resetCameraEv(ptr noundef nonnull align 8 dereferenceable(436)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3setIcSt4lessIcESaIcEE6insertEOc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3setIcSt4lessIcESaIcEE5eraseERKc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

declare i32 @SDL_SetRelativeMouseMode(i32 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef float @_ZN3glm3modIfEET_S1_S1_(float noundef, float noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { "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 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"bool", !6, i64 0}
!10 = !{!11, !12, i64 8}
!11 = !{!"_ZTS12InputManager", !12, i64 0, !12, i64 8}
!12 = !{!"any pointer", !6, i64 0}
!13 = !{!14, !17, i64 424}
!14 = !{!"_ZTS6Camera", !15, i64 0, !15, i64 64, !16, i64 128, !18, i64 248, !27, i64 296, !27, i64 308, !27, i64 320, !27, i64 332, !17, i64 344, !17, i64 348, !27, i64 352, !27, i64 364, !27, i64 376, !27, i64 388, !27, i64 400, !17, i64 412, !17, i64 416, !17, i64 420, !17, i64 424, !17, i64 428, !28, i64 432}
!15 = !{!"_ZTSN3glm3matILi4ELi4EfLNS_9qualifierE0EEE", !6, i64 0}
!16 = !{!"_ZTS7Frustum", !6, i64 0, !17, i64 96, !17, i64 100, !17, i64 104, !17, i64 108, !17, i64 112, !17, i64 116}
!17 = !{!"float", !6, i64 0}
!18 = !{!"_ZTSSt3setIcSt4lessIcESaIcEE", !19, i64 0}
!19 = !{!"_ZTSSt8_Rb_treeIccSt9_IdentityIcESt4lessIcESaIcEE", !20, i64 0}
!20 = !{!"_ZTSNSt8_Rb_treeIccSt9_IdentityIcESt4lessIcESaIcEE13_Rb_tree_implIS3_Lb1EEE", !21, i64 0, !23, i64 8}
!21 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIcEE", !22, i64 0}
!22 = !{!"_ZTSSt4lessIcE"}
!23 = !{!"_ZTSSt15_Rb_tree_header", !24, i64 0, !26, i64 32}
!24 = !{!"_ZTSSt18_Rb_tree_node_base", !25, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!25 = !{!"_ZTSSt14_Rb_tree_color", !6, i64 0}
!26 = !{!"long", !6, i64 0}
!27 = !{!"_ZTSN3glm3vecILi3EfLNS_9qualifierE0EEE", !6, i64 0}
!28 = !{!"int", !6, i64 0}
!29 = !{!14, !17, i64 416}
!30 = !{!14, !17, i64 412}


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