; LLVM IR from erincatto/box2d-lite :: extern/glfw/src (input)

; 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._GLFWlibrary = type { i32, %struct.anon.0, ptr, ptr, ptr, ptr, i32, [16 x %struct._GLFWjoystick], ptr, i32, %struct._GLFWtls, %struct._GLFWtls, %struct._GLFWmutex, %struct.anon.5, %struct.anon.6, %struct.anon.7, %struct._GLFWlibraryX11, %struct._GLFWlibraryGLX, %struct._GLFWlibraryLinux, %struct._GLFWlibraryEGL, %struct._GLFWlibraryOSMesa }
%struct.anon.0 = type { %struct._GLFWinitconfig, %struct._GLFWfbconfig, %struct._GLFWwndconfig, %struct._GLFWctxconfig, i32 }
%struct._GLFWinitconfig = type { i32, %struct.anon.1 }
%struct.anon.1 = type { i32, i32 }
%struct._GLFWfbconfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64 }
%struct._GLFWwndconfig = type { i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.anon.2, %struct.anon.3 }
%struct.anon.2 = type { i32, [256 x i8] }
%struct.anon.3 = type { [256 x i8], [256 x i8] }
%struct._GLFWctxconfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, %struct.anon.4 }
%struct.anon.4 = type { i32 }
%struct._GLFWjoystick = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, [33 x i8], ptr, %struct._GLFWjoystickLinux }
%struct._GLFWjoystickLinux = type { i32, [4096 x i8], [512 x i32], [64 x i32], [64 x %struct.input_absinfo], [4 x [2 x i32]] }
%struct.input_absinfo = type { i32, i32, i32, i32, i32, i32 }
%struct._GLFWtls = type { %struct._GLFWtlsPOSIX }
%struct._GLFWtlsPOSIX = type { i32, i32 }
%struct._GLFWmutex = type { %struct._GLFWmutexPOSIX }
%struct._GLFWmutexPOSIX = type { i32, %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.anon.5 = type { i64, %struct._GLFWtimerPOSIX }
%struct._GLFWtimerPOSIX = type { i32, i64 }
%struct.anon.6 = type { i32, ptr, [2 x ptr], ptr, ptr, i32, i32, i32 }
%struct.anon.7 = type { ptr, ptr }
%struct._GLFWlibraryX11 = type { ptr, i32, i64, float, float, i64, i64, i32, ptr, i32, ptr, ptr, [5 x i8], [256 x i16], [349 x i16], double, double, ptr, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, %struct.anon.8, %struct.anon.9, %struct.anon.10, %struct.anon.11, %struct.anon.12, %struct.anon.13, %struct.anon.14, %struct.anon.15, %struct.anon.16, %struct.anon.17 }
%struct.anon.8 = type { i32, ptr, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.anon.9 = type { i32, i32, i32, i32, i32, i32, i32 }
%struct.anon.10 = type { i32, i32, i32, i32, i32 }
%struct.anon.11 = type { i32, i64, i64 }
%struct.anon.12 = type { ptr, ptr, ptr, ptr }
%struct.anon.13 = type { i32, ptr, i32, i32, ptr, ptr, ptr }
%struct.anon.14 = type { ptr, ptr }
%struct.anon.15 = type { i32, ptr, i32, i32, ptr, ptr, ptr, ptr }
%struct.anon.16 = type { i32, ptr, i32, i32, i32, i32, i32, ptr, ptr }
%struct.anon.17 = type { i32, ptr, i32, i32, i32, i32, ptr, ptr, ptr }
%struct._GLFWlibraryGLX = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct._GLFWlibraryLinux = type { i32, i32, %struct.re_pattern_buffer, i32 }
%struct.re_pattern_buffer = type { ptr, i64, i64, i64, ptr, ptr, i64, i8 }
%struct._GLFWlibraryEGL = type { ptr, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._GLFWlibraryOSMesa = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._GLFWmapping = type { [128 x i8], [33 x i8], [15 x %struct._GLFWmapelement], [6 x %struct._GLFWmapelement] }
%struct._GLFWmapelement = type { i8, i8, i8, i8 }
%struct.GLFWgamepadstate = type { [15 x i8], [6 x float] }

@_glfw = external global %struct._GLFWlibrary, align 8
@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@__PRETTY_FUNCTION__.glfwGetGamepadState = external hidden unnamed_addr constant [49 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

declare void @_glfwInputError(i32 noundef, ptr noundef, ...) #3

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

; Function Attrs: nounwind uwtable
define dso_local i32 @glfwGetGamepadState(i32 noundef %0, ptr noundef %1) #4 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca float, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca float, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %17 = load i32, ptr %4, align 4, !tbaa !5
  %18 = icmp sge i32 %17, 0
  br i1 %18, label %19, label %20

19:                                               ; preds = %2
  br label %21

20:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1195, ptr noundef @__PRETTY_FUNCTION__.glfwGetGamepadState) #7
  unreachable

21:                                               ; preds = %19
  %22 = load i32, ptr %4, align 4, !tbaa !5
  %23 = icmp sle i32 %22, 15
  br i1 %23, label %24, label %25

24:                                               ; preds = %21
  br label %26

25:                                               ; preds = %21
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 1196, ptr noundef @__PRETTY_FUNCTION__.glfwGetGamepadState) #7
  unreachable

26:                                               ; preds = %24
  %27 = load ptr, ptr %5, align 8, !tbaa !9
  %28 = icmp ne ptr %27, null
  br i1 %28, label %29, label %30

29:                                               ; preds = %26
  br label %31

30:                                               ; preds = %26
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 1197, ptr noundef @__PRETTY_FUNCTION__.glfwGetGamepadState) #7
  unreachable

31:                                               ; preds = %29
  %32 = load ptr, ptr %5, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 4 %32, i8 0, i64 40, i1 false)
  %33 = load i32, ptr @_glfw, align 8, !tbaa !11
  %34 = icmp ne i32 %33, 0
  br i1 %34, label %36, label %35

35:                                               ; preds = %31
  call void (i32, ptr, ...) @_glfwInputError(i32 noundef 65537, ptr noundef null)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

36:                                               ; preds = %31
  %37 = load i32, ptr %4, align 4, !tbaa !5
  %38 = icmp slt i32 %37, 0
  br i1 %38, label %42, label %39

39:                                               ; preds = %36
  %40 = load i32, ptr %4, align 4, !tbaa !5
  %41 = icmp sgt i32 %40, 15
  br i1 %41, label %42, label %44

42:                                               ; preds = %39, %36
  %43 = load i32, ptr %4, align 4, !tbaa !5
  call void (i32, ptr, ...) @_glfwInputError(i32 noundef 65539, ptr noundef @.str.11, i32 noundef %43)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

44:                                               ; preds = %39
  %45 = load i32, ptr %4, align 4, !tbaa !5
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds %struct._GLFWjoystick, ptr getelementptr inbounds (%struct._GLFWlibrary, ptr @_glfw, i32 0, i32 7), i64 %46
  store ptr %47, ptr %7, align 8, !tbaa !9
  %48 = load ptr, ptr %7, align 8, !tbaa !9
  %49 = getelementptr inbounds %struct._GLFWjoystick, ptr %48, i32 0, i32 0
  %50 = load i32, ptr %49, align 8, !tbaa !48
  %51 = icmp ne i32 %50, 0
  br i1 %51, label %53, label %52

52:                                               ; preds = %44
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

53:                                               ; preds = %44
  %54 = load ptr, ptr %7, align 8, !tbaa !9
  %55 = call i32 @_glfwPlatformPollJoystick(ptr noundef %54, i32 noundef 3)
  %56 = icmp ne i32 %55, 0
  br i1 %56, label %58, label %57

57:                                               ; preds = %53
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

58:                                               ; preds = %53
  %59 = load ptr, ptr %7, align 8, !tbaa !9
  %60 = getelementptr inbounds %struct._GLFWjoystick, ptr %59, i32 0, i32 10
  %61 = load ptr, ptr %60, align 8, !tbaa !51
  %62 = icmp ne ptr %61, null
  br i1 %62, label %64, label %63

63:                                               ; preds = %58
  store i32 0, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

64:                                               ; preds = %58
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %65

65:                                               ; preds = %171, %64
  %66 = load i32, ptr %6, align 4, !tbaa !5
  %67 = icmp sle i32 %66, 14
  br i1 %67, label %68, label %174

68:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %69 = load ptr, ptr %7, align 8, !tbaa !9
  %70 = getelementptr inbounds %struct._GLFWjoystick, ptr %69, i32 0, i32 10
  %71 = load ptr, ptr %70, align 8, !tbaa !51
  %72 = getelementptr inbounds %struct._GLFWmapping, ptr %71, i32 0, i32 2
  %73 = getelementptr inbounds [15 x %struct._GLFWmapelement], ptr %72, i64 0, i64 0
  %74 = load i32, ptr %6, align 4, !tbaa !5
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds %struct._GLFWmapelement, ptr %73, i64 %75
  store ptr %76, ptr %9, align 8, !tbaa !9
  %77 = load ptr, ptr %9, align 8, !tbaa !9
  %78 = getelementptr inbounds %struct._GLFWmapelement, ptr %77, i32 0, i32 0
  %79 = load i8, ptr %78, align 1, !tbaa !52
  %80 = zext i8 %79 to i32
  %81 = icmp eq i32 %80, 1
  br i1 %81, label %82, label %112

82:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %83 = load ptr, ptr %7, align 8, !tbaa !9
  %84 = getelementptr inbounds %struct._GLFWjoystick, ptr %83, i32 0, i32 1
  %85 = load ptr, ptr %84, align 8, !tbaa !54
  %86 = load ptr, ptr %9, align 8, !tbaa !9
  %87 = getelementptr inbounds %struct._GLFWmapelement, ptr %86, i32 0, i32 1
  %88 = load i8, ptr %87, align 1, !tbaa !55
  %89 = zext i8 %88 to i64
  %90 = getelementptr inbounds float, ptr %85, i64 %89
  %91 = load float, ptr %90, align 4, !tbaa !56
  %92 = load ptr, ptr %9, align 8, !tbaa !9
  %93 = getelementptr inbounds %struct._GLFWmapelement, ptr %92, i32 0, i32 2
  %94 = load i8, ptr %93, align 1, !tbaa !57
  %95 = sext i8 %94 to i32
  %96 = sitofp i32 %95 to float
  %97 = load ptr, ptr %9, align 8, !tbaa !9
  %98 = getelementptr inbounds %struct._GLFWmapelement, ptr %97, i32 0, i32 3
  %99 = load i8, ptr %98, align 1, !tbaa !58
  %100 = sext i8 %99 to i32
  %101 = sitofp i32 %100 to float
  %102 = call float @llvm.fmuladd.f32(float %91, float %96, float %101)
  store float %102, ptr %10, align 4, !tbaa !56
  %103 = load float, ptr %10, align 4, !tbaa !56
  %104 = fcmp ogt float %103, 0.000000e+00
  br i1 %104, label %105, label %111

105:                                              ; preds = %82
  %106 = load ptr, ptr %5, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %106, i32 0, i32 0
  %108 = load i32, ptr %6, align 4, !tbaa !5
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds [15 x i8], ptr %107, i64 0, i64 %109
  store i8 1, ptr %110, align 1, !tbaa !59
  br label %111

111:                                              ; preds = %105, %82
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %170

112:                                              ; preds = %68
  %113 = load ptr, ptr %9, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct._GLFWmapelement, ptr %113, i32 0, i32 0
  %115 = load i8, ptr %114, align 1, !tbaa !52
  %116 = zext i8 %115 to i32
  %117 = icmp eq i32 %116, 3
  br i1 %117, label %118, label %147

118:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %119 = load ptr, ptr %9, align 8, !tbaa !9
  %120 = getelementptr inbounds %struct._GLFWmapelement, ptr %119, i32 0, i32 1
  %121 = load i8, ptr %120, align 1, !tbaa !55
  %122 = zext i8 %121 to i32
  %123 = ashr i32 %122, 4
  store i32 %123, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %124 = load ptr, ptr %9, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct._GLFWmapelement, ptr %124, i32 0, i32 1
  %126 = load i8, ptr %125, align 1, !tbaa !55
  %127 = zext i8 %126 to i32
  %128 = and i32 %127, 15
  store i32 %128, ptr %12, align 4, !tbaa !5
  %129 = load ptr, ptr %7, align 8, !tbaa !9
  %130 = getelementptr inbounds %struct._GLFWjoystick, ptr %129, i32 0, i32 5
  %131 = load ptr, ptr %130, align 8, !tbaa !60
  %132 = load i32, ptr %11, align 4, !tbaa !5
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds i8, ptr %131, i64 %133
  %135 = load i8, ptr %134, align 1, !tbaa !59
  %136 = zext i8 %135 to i32
  %137 = load i32, ptr %12, align 4, !tbaa !5
  %138 = and i32 %136, %137
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %146

140:                                              ; preds = %118
  %141 = load ptr, ptr %5, align 8, !tbaa !9
  %142 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %141, i32 0, i32 0
  %143 = load i32, ptr %6, align 4, !tbaa !5
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [15 x i8], ptr %142, i64 0, i64 %144
  store i8 1, ptr %145, align 1, !tbaa !59
  br label %146

146:                                              ; preds = %140, %118
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %169

147:                                              ; preds = %112
  %148 = load ptr, ptr %9, align 8, !tbaa !9
  %149 = getelementptr inbounds %struct._GLFWmapelement, ptr %148, i32 0, i32 0
  %150 = load i8, ptr %149, align 1, !tbaa !52
  %151 = zext i8 %150 to i32
  %152 = icmp eq i32 %151, 2
  br i1 %152, label %153, label %168

153:                                              ; preds = %147
  %154 = load ptr, ptr %7, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct._GLFWjoystick, ptr %154, i32 0, i32 3
  %156 = load ptr, ptr %155, align 8, !tbaa !61
  %157 = load ptr, ptr %9, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct._GLFWmapelement, ptr %157, i32 0, i32 1
  %159 = load i8, ptr %158, align 1, !tbaa !55
  %160 = zext i8 %159 to i64
  %161 = getelementptr inbounds i8, ptr %156, i64 %160
  %162 = load i8, ptr %161, align 1, !tbaa !59
  %163 = load ptr, ptr %5, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %163, i32 0, i32 0
  %165 = load i32, ptr %6, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [15 x i8], ptr %164, i64 0, i64 %166
  store i8 %162, ptr %167, align 1, !tbaa !59
  br label %168

168:                                              ; preds = %153, %147
  br label %169

169:                                              ; preds = %168, %146
  br label %170

170:                                              ; preds = %169, %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  br label %171

171:                                              ; preds = %170
  %172 = load i32, ptr %6, align 4, !tbaa !5
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %6, align 4, !tbaa !5
  br label %65, !llvm.loop !62

174:                                              ; preds = %65
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %175

175:                                              ; preds = %281, %174
  %176 = load i32, ptr %6, align 4, !tbaa !5
  %177 = icmp sle i32 %176, 5
  br i1 %177, label %178, label %284

178:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %179 = load ptr, ptr %7, align 8, !tbaa !9
  %180 = getelementptr inbounds %struct._GLFWjoystick, ptr %179, i32 0, i32 10
  %181 = load ptr, ptr %180, align 8, !tbaa !51
  %182 = getelementptr inbounds %struct._GLFWmapping, ptr %181, i32 0, i32 3
  %183 = getelementptr inbounds [6 x %struct._GLFWmapelement], ptr %182, i64 0, i64 0
  %184 = load i32, ptr %6, align 4, !tbaa !5
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds %struct._GLFWmapelement, ptr %183, i64 %185
  store ptr %186, ptr %13, align 8, !tbaa !9
  %187 = load ptr, ptr %13, align 8, !tbaa !9
  %188 = getelementptr inbounds %struct._GLFWmapelement, ptr %187, i32 0, i32 0
  %189 = load i8, ptr %188, align 1, !tbaa !52
  %190 = zext i8 %189 to i32
  %191 = icmp eq i32 %190, 1
  br i1 %191, label %192, label %221

192:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  %193 = load ptr, ptr %7, align 8, !tbaa !9
  %194 = getelementptr inbounds %struct._GLFWjoystick, ptr %193, i32 0, i32 1
  %195 = load ptr, ptr %194, align 8, !tbaa !54
  %196 = load ptr, ptr %13, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct._GLFWmapelement, ptr %196, i32 0, i32 1
  %198 = load i8, ptr %197, align 1, !tbaa !55
  %199 = zext i8 %198 to i64
  %200 = getelementptr inbounds float, ptr %195, i64 %199
  %201 = load float, ptr %200, align 4, !tbaa !56
  %202 = load ptr, ptr %13, align 8, !tbaa !9
  %203 = getelementptr inbounds %struct._GLFWmapelement, ptr %202, i32 0, i32 2
  %204 = load i8, ptr %203, align 1, !tbaa !57
  %205 = sext i8 %204 to i32
  %206 = sitofp i32 %205 to float
  %207 = load ptr, ptr %13, align 8, !tbaa !9
  %208 = getelementptr inbounds %struct._GLFWmapelement, ptr %207, i32 0, i32 3
  %209 = load i8, ptr %208, align 1, !tbaa !58
  %210 = sext i8 %209 to i32
  %211 = sitofp i32 %210 to float
  %212 = call float @llvm.fmuladd.f32(float %201, float %206, float %211)
  store float %212, ptr %14, align 4, !tbaa !56
  %213 = load float, ptr %14, align 4, !tbaa !56
  %214 = call float @_glfw_fmaxf(float noundef %213, float noundef -1.000000e+00)
  %215 = call float @_glfw_fminf(float noundef %214, float noundef 1.000000e+00)
  %216 = load ptr, ptr %5, align 8, !tbaa !9
  %217 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %216, i32 0, i32 1
  %218 = load i32, ptr %6, align 4, !tbaa !5
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds [6 x float], ptr %217, i64 0, i64 %219
  store float %215, ptr %220, align 4, !tbaa !56
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %280

221:                                              ; preds = %178
  %222 = load ptr, ptr %13, align 8, !tbaa !9
  %223 = getelementptr inbounds %struct._GLFWmapelement, ptr %222, i32 0, i32 0
  %224 = load i8, ptr %223, align 1, !tbaa !52
  %225 = zext i8 %224 to i32
  %226 = icmp eq i32 %225, 3
  br i1 %226, label %227, label %256

227:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %228 = load ptr, ptr %13, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct._GLFWmapelement, ptr %228, i32 0, i32 1
  %230 = load i8, ptr %229, align 1, !tbaa !55
  %231 = zext i8 %230 to i32
  %232 = ashr i32 %231, 4
  store i32 %232, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %233 = load ptr, ptr %13, align 8, !tbaa !9
  %234 = getelementptr inbounds %struct._GLFWmapelement, ptr %233, i32 0, i32 1
  %235 = load i8, ptr %234, align 1, !tbaa !55
  %236 = zext i8 %235 to i32
  %237 = and i32 %236, 15
  store i32 %237, ptr %16, align 4, !tbaa !5
  %238 = load ptr, ptr %7, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct._GLFWjoystick, ptr %238, i32 0, i32 5
  %240 = load ptr, ptr %239, align 8, !tbaa !60
  %241 = load i32, ptr %15, align 4, !tbaa !5
  %242 = zext i32 %241 to i64
  %243 = getelementptr inbounds i8, ptr %240, i64 %242
  %244 = load i8, ptr %243, align 1, !tbaa !59
  %245 = zext i8 %244 to i32
  %246 = load i32, ptr %16, align 4, !tbaa !5
  %247 = and i32 %245, %246
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %255

249:                                              ; preds = %227
  %250 = load ptr, ptr %5, align 8, !tbaa !9
  %251 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %250, i32 0, i32 1
  %252 = load i32, ptr %6, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [6 x float], ptr %251, i64 0, i64 %253
  store float 1.000000e+00, ptr %254, align 4, !tbaa !56
  br label %255

255:                                              ; preds = %249, %227
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %279

256:                                              ; preds = %221
  %257 = load ptr, ptr %13, align 8, !tbaa !9
  %258 = getelementptr inbounds %struct._GLFWmapelement, ptr %257, i32 0, i32 0
  %259 = load i8, ptr %258, align 1, !tbaa !52
  %260 = zext i8 %259 to i32
  %261 = icmp eq i32 %260, 2
  br i1 %261, label %262, label %278

262:                                              ; preds = %256
  %263 = load ptr, ptr %7, align 8, !tbaa !9
  %264 = getelementptr inbounds %struct._GLFWjoystick, ptr %263, i32 0, i32 3
  %265 = load ptr, ptr %264, align 8, !tbaa !61
  %266 = load ptr, ptr %13, align 8, !tbaa !9
  %267 = getelementptr inbounds %struct._GLFWmapelement, ptr %266, i32 0, i32 1
  %268 = load i8, ptr %267, align 1, !tbaa !55
  %269 = zext i8 %268 to i64
  %270 = getelementptr inbounds i8, ptr %265, i64 %269
  %271 = load i8, ptr %270, align 1, !tbaa !59
  %272 = uitofp i8 %271 to float
  %273 = load ptr, ptr %5, align 8, !tbaa !9
  %274 = getelementptr inbounds %struct.GLFWgamepadstate, ptr %273, i32 0, i32 1
  %275 = load i32, ptr %6, align 4, !tbaa !5
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds [6 x float], ptr %274, i64 0, i64 %276
  store float %272, ptr %277, align 4, !tbaa !56
  br label %278

278:                                              ; preds = %262, %256
  br label %279

279:                                              ; preds = %278, %255
  br label %280

280:                                              ; preds = %279, %192
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %6, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %6, align 4, !tbaa !5
  br label %175, !llvm.loop !64

284:                                              ; preds = %175
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %285

285:                                              ; preds = %284, %63, %57, %52, %42, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  %286 = load i32, ptr %3, align 4
  ret i32 %286
}

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

declare float @_glfw_fminf(float noundef, float noundef) #3

declare float @_glfw_fmaxf(float noundef, float noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { noreturn 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 #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 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"_GLFWlibrary", !6, i64 0, !13, i64 8, !10, i64 992, !10, i64 1000, !10, i64 1008, !10, i64 1016, !6, i64 1024, !7, i64 1032, !10, i64 130568, !6, i64 130576, !23, i64 130580, !23, i64 130588, !25, i64 130600, !27, i64 130648, !29, i64 130672, !30, i64 130736, !31, i64 130752, !43, i64 132960, !44, i64 133184, !46, i64 133264, !47, i64 133440}
!13 = !{!"", !14, i64 0, !16, i64 16, !18, i64 88, !21, i64 920, !6, i64 976}
!14 = !{!"_GLFWinitconfig", !6, i64 0, !15, i64 4}
!15 = !{!"", !6, i64 0, !6, i64 4}
!16 = !{!"_GLFWfbconfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !17, i64 64}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_GLFWwndconfig", !6, i64 0, !6, i64 4, !10, i64 8, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !19, i64 56, !20, i64 316}
!19 = !{!"", !6, i64 0, !7, i64 4}
!20 = !{!"", !7, i64 0, !7, i64 256}
!21 = !{!"_GLFWctxconfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !10, i64 40, !22, i64 48}
!22 = !{!"", !6, i64 0}
!23 = !{!"_GLFWtls", !24, i64 0}
!24 = !{!"_GLFWtlsPOSIX", !6, i64 0, !6, i64 4}
!25 = !{!"_GLFWmutex", !26, i64 0}
!26 = !{!"_GLFWmutexPOSIX", !6, i64 0, !7, i64 8}
!27 = !{!"", !17, i64 0, !28, i64 8}
!28 = !{!"_GLFWtimerPOSIX", !6, i64 0, !17, i64 8}
!29 = !{!"", !6, i64 0, !10, i64 8, !7, i64 16, !10, i64 32, !10, i64 40, !6, i64 48, !6, i64 52, !6, i64 56}
!30 = !{!"", !10, i64 0, !10, i64 8}
!31 = !{!"_GLFWlibraryX11", !10, i64 0, !6, i64 8, !17, i64 16, !32, i64 24, !32, i64 28, !17, i64 32, !17, i64 40, !6, i64 48, !10, i64 56, !6, i64 64, !10, i64 72, !10, i64 80, !7, i64 88, !7, i64 94, !7, i64 606, !33, i64 1304, !33, i64 1312, !10, i64 1320, !17, i64 1328, !17, i64 1336, !17, i64 1344, !17, i64 1352, !17, i64 1360, !17, i64 1368, !17, i64 1376, !17, i64 1384, !17, i64 1392, !17, i64 1400, !17, i64 1408, !17, i64 1416, !17, i64 1424, !17, i64 1432, !17, i64 1440, !17, i64 1448, !17, i64 1456, !17, i64 1464, !17, i64 1472, !17, i64 1480, !17, i64 1488, !17, i64 1496, !17, i64 1504, !17, i64 1512, !17, i64 1520, !17, i64 1528, !17, i64 1536, !17, i64 1544, !17, i64 1552, !17, i64 1560, !17, i64 1568, !17, i64 1576, !17, i64 1584, !17, i64 1592, !17, i64 1600, !17, i64 1608, !17, i64 1616, !17, i64 1624, !17, i64 1632, !17, i64 1640, !17, i64 1648, !17, i64 1656, !17, i64 1664, !17, i64 1672, !17, i64 1680, !17, i64 1688, !34, i64 1696, !35, i64 1872, !36, i64 1900, !37, i64 1920, !38, i64 1944, !39, i64 1976, !30, i64 2024, !40, i64 2040, !41, i64 2096, !42, i64 2152}
!32 = !{!"float", !7, i64 0}
!33 = !{!"double", !7, i64 0}
!34 = !{!"", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168}
!35 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24}
!36 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16}
!37 = !{!"", !6, i64 0, !17, i64 8, !17, i64 16}
!38 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!39 = !{!"", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !10, i64 24, !10, i64 32, !10, i64 40}
!40 = !{!"", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48}
!41 = !{!"", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !10, i64 40, !10, i64 48}
!42 = !{!"", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !10, i64 32, !10, i64 40, !10, i64 48}
!43 = !{!"_GLFWlibraryGLX", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188, !6, i64 192, !6, i64 196, !6, i64 200, !6, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220}
!44 = !{!"_GLFWlibraryLinux", !6, i64 0, !6, i64 4, !45, i64 8, !6, i64 72}
!45 = !{!"re_pattern_buffer", !10, i64 0, !17, i64 8, !17, i64 16, !17, i64 24, !10, i64 32, !10, i64 40, !17, i64 48, !6, i64 56, !6, i64 56, !6, i64 56, !6, i64 56, !6, i64 56, !6, i64 56, !6, i64 56}
!46 = !{!"_GLFWlibraryEGL", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168}
!47 = !{!"_GLFWlibraryOSMesa", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56}
!48 = !{!49, !6, i64 0}
!49 = !{!"_GLFWjoystick", !6, i64 0, !10, i64 8, !6, i64 16, !10, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !10, i64 56, !10, i64 64, !7, i64 72, !10, i64 112, !50, i64 120}
!50 = !{!"_GLFWjoystickLinux", !6, i64 0, !7, i64 4, !7, i64 4100, !7, i64 6148, !7, i64 6404, !7, i64 7940}
!51 = !{!49, !10, i64 112}
!52 = !{!53, !7, i64 0}
!53 = !{!"_GLFWmapelement", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!54 = !{!49, !10, i64 8}
!55 = !{!53, !7, i64 1}
!56 = !{!32, !32, i64 0}
!57 = !{!53, !7, i64 2}
!58 = !{!53, !7, i64 3}
!59 = !{!7, !7, i64 0}
!60 = !{!49, !10, i64 40}
!61 = !{!49, !10, i64 24}
!62 = distinct !{!62, !63}
!63 = !{!"llvm.loop.mustprogress"}
!64 = distinct !{!64, !63}


; 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._GLFWlibrary = type { i32, %struct.anon.0, ptr, ptr, ptr, ptr, i32, [16 x %struct._GLFWjoystick], ptr, i32, %struct._GLFWtls, %struct._GLFWtls, %struct._GLFWmutex, %struct.anon.5, %struct.anon.6, %struct.anon.7, %struct._GLFWlibraryX11, %struct._GLFWlibraryGLX, %struct._GLFWlibraryLinux, %struct._GLFWlibraryEGL, %struct._GLFWlibraryOSMesa }
%struct.anon.0 = type { %struct._GLFWinitconfig, %struct._GLFWfbconfig, %struct._GLFWwndconfig, %struct._GLFWctxconfig, i32 }
%struct._GLFWinitconfig = type { i32, %struct.anon.1 }
%struct.anon.1 = type { i32, i32 }
%struct._GLFWfbconfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64 }
%struct._GLFWwndconfig = type { i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.anon.2, %struct.anon.3 }
%struct.anon.2 = type { i32, [256 x i8] }
%struct.anon.3 = type { [256 x i8], [256 x i8] }
%struct._GLFWctxconfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, %struct.anon.4 }
%struct.anon.4 = type { i32 }
%struct._GLFWjoystick = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, [33 x i8], ptr, %struct._GLFWjoystickLinux }
%struct._GLFWjoystickLinux = type { i32, [4096 x i8], [512 x i32], [64 x i32], [64 x %struct.input_absinfo], [4 x [2 x i32]] }
%struct.input_absinfo = type { i32, i32, i32, i32, i32, i32 }
%struct._GLFWtls = type { %struct._GLFWtlsPOSIX }
%struct._GLFWtlsPOSIX = type { i32, i32 }
%struct._GLFWmutex = type { %struct._GLFWmutexPOSIX }
%struct._GLFWmutexPOSIX = type { i32, %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.anon.5 = type { i64, %struct._GLFWtimerPOSIX }
%struct._GLFWtimerPOSIX = type { i32, i64 }
%struct.anon.6 = type { i32, ptr, [2 x ptr], ptr, ptr, i32, i32, i32 }
%struct.anon.7 = type { ptr, ptr }
%struct._GLFWlibraryX11 = type { ptr, i32, i64, float, float, i64, i64, i32, ptr, i32, ptr, ptr, [5 x i8], [256 x i16], [349 x i16], double, double, ptr, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, %struct.anon.8, %struct.anon.9, %struct.anon.10, %struct.anon.11, %struct.anon.12, %struct.anon.13, %struct.anon.14, %struct.anon.15, %struct.anon.16, %struct.anon.17 }
%struct.anon.8 = type { i32, ptr, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.anon.9 = type { i32, i32, i32, i32, i32, i32, i32 }
%struct.anon.10 = type { i32, i32, i32, i32, i32 }
%struct.anon.11 = type { i32, i64, i64 }
%struct.anon.12 = type { ptr, ptr, ptr, ptr }
%struct.anon.13 = type { i32, ptr, i32, i32, ptr, ptr, ptr }
%struct.anon.14 = type { ptr, ptr }
%struct.anon.15 = type { i32, ptr, i32, i32, ptr, ptr, ptr, ptr }
%struct.anon.16 = type { i32, ptr, i32, i32, i32, i32, i32, ptr, ptr }
%struct.anon.17 = type { i32, ptr, i32, i32, i32, i32, ptr, ptr, ptr }
%struct._GLFWlibraryGLX = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct._GLFWlibraryLinux = type { i32, i32, %struct.re_pattern_buffer, i32 }
%struct.re_pattern_buffer = type { ptr, i64, i64, i64, ptr, ptr, i64, i8 }
%struct._GLFWlibraryEGL = type { ptr, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._GLFWlibraryOSMesa = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct._GLFWmapelement = type { i8, i8, i8, i8 }

@_glfw = external global %struct._GLFWlibrary, align 8
@.str.1 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@__PRETTY_FUNCTION__.glfwGetGamepadState = external hidden unnamed_addr constant [49 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare void @_glfwInputError(i32 noundef, ptr noundef, ...) local_unnamed_addr #2

declare i32 @_glfwPlatformPollJoystick(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @glfwGetGamepadState(i32 noundef %0, ptr noundef writeonly %1) local_unnamed_addr #3 {
  %3 = icmp sgt i32 %0, -1
  br i1 %3, label %5, label %4

4:                                                ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1195, ptr noundef nonnull @__PRETTY_FUNCTION__.glfwGetGamepadState) #5
  unreachable

5:                                                ; preds = %2
  %6 = icmp ult i32 %0, 16
  br i1 %6, label %8, label %7

7:                                                ; preds = %5
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1196, ptr noundef nonnull @__PRETTY_FUNCTION__.glfwGetGamepadState) #5
  unreachable

8:                                                ; preds = %5
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %9, label %10

9:                                                ; preds = %8
  tail call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.1, i32 noundef 1197, ptr noundef nonnull @__PRETTY_FUNCTION__.glfwGetGamepadState) #5
  unreachable

10:                                               ; preds = %8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(40) %1, i8 0, i64 40, i1 false)
  %11 = load i32, ptr @_glfw, align 8, !tbaa !5
  %.not67 = icmp eq i32 %11, 0
  br i1 %.not67, label %12, label %13

12:                                               ; preds = %10
  tail call void (i32, ptr, ...) @_glfwInputError(i32 noundef 65537, ptr noundef null) #6
  br label %.loopexit

13:                                               ; preds = %10
  %14 = zext nneg i32 %0 to i64
  %15 = getelementptr inbounds %struct._GLFWjoystick, ptr getelementptr inbounds (i8, ptr @_glfw, i64 1032), i64 %14
  %16 = load i32, ptr %15, align 8, !tbaa !46
  %.not68 = icmp eq i32 %16, 0
  br i1 %.not68, label %.loopexit, label %17

17:                                               ; preds = %13
  %18 = tail call i32 @_glfwPlatformPollJoystick(ptr noundef nonnull %15, i32 noundef 3) #6
  %.not69 = icmp eq i32 %18, 0
  br i1 %.not69, label %.loopexit, label %19

19:                                               ; preds = %17
  %20 = getelementptr inbounds i8, ptr %15, i64 112
  %21 = load ptr, ptr %20, align 8, !tbaa !49
  %.not70 = icmp eq ptr %21, null
  br i1 %.not70, label %.loopexit, label %.preheader73

.preheader73:                                     ; preds = %19
  %22 = getelementptr inbounds i8, ptr %15, i64 24
  %23 = getelementptr inbounds i8, ptr %15, i64 40
  %24 = getelementptr inbounds i8, ptr %15, i64 8
  br label %29

.preheader:                                       ; preds = %69
  %25 = getelementptr inbounds i8, ptr %1, i64 16
  %26 = load ptr, ptr %20, align 8, !tbaa !49
  %27 = getelementptr inbounds i8, ptr %26, i64 221
  %28 = load i8, ptr %27, align 1, !tbaa !50
  switch i8 %28, label %107 [
    i8 1, label %70
    i8 3, label %86
    i8 2, label %99
  ]

29:                                               ; preds = %.preheader73, %69
  %indvars.iv = phi i64 [ 0, %.preheader73 ], [ %indvars.iv.next, %69 ]
  %30 = load ptr, ptr %20, align 8, !tbaa !49
  %31 = getelementptr inbounds i8, ptr %30, i64 161
  %32 = getelementptr inbounds %struct._GLFWmapelement, ptr %31, i64 %indvars.iv
  %33 = load i8, ptr %32, align 1, !tbaa !50
  switch i8 %33, label %69 [
    i8 1, label %34
    i8 3, label %49
    i8 2, label %61
  ]

34:                                               ; preds = %29
  %35 = load ptr, ptr %24, align 8, !tbaa !52
  %36 = getelementptr inbounds i8, ptr %32, i64 1
  %37 = load i8, ptr %36, align 1, !tbaa !53
  %38 = zext i8 %37 to i64
  %39 = getelementptr inbounds float, ptr %35, i64 %38
  %40 = load float, ptr %39, align 4, !tbaa !54
  %41 = getelementptr inbounds i8, ptr %32, i64 2
  %42 = load i8, ptr %41, align 1, !tbaa !55
  %43 = sitofp i8 %42 to float
  %44 = getelementptr inbounds i8, ptr %32, i64 3
  %45 = load i8, ptr %44, align 1, !tbaa !56
  %46 = sitofp i8 %45 to float
  %47 = tail call float @llvm.fmuladd.f32(float %40, float %43, float %46)
  %48 = fcmp ogt float %47, 0.000000e+00
  br i1 %48, label %.sink.split, label %69

49:                                               ; preds = %29
  %50 = getelementptr inbounds i8, ptr %32, i64 1
  %51 = load i8, ptr %50, align 1, !tbaa !53
  %52 = zext i8 %51 to i32
  %53 = lshr i32 %52, 4
  %54 = and i32 %52, 15
  %55 = load ptr, ptr %23, align 8, !tbaa !57
  %56 = zext nneg i32 %53 to i64
  %57 = getelementptr inbounds i8, ptr %55, i64 %56
  %58 = load i8, ptr %57, align 1, !tbaa !58
  %59 = zext i8 %58 to i32
  %60 = and i32 %54, %59
  %.not72 = icmp eq i32 %60, 0
  br i1 %.not72, label %69, label %.sink.split

61:                                               ; preds = %29
  %62 = load ptr, ptr %22, align 8, !tbaa !59
  %63 = getelementptr inbounds i8, ptr %32, i64 1
  %64 = load i8, ptr %63, align 1, !tbaa !53
  %65 = zext i8 %64 to i64
  %66 = getelementptr inbounds i8, ptr %62, i64 %65
  %67 = load i8, ptr %66, align 1, !tbaa !58
  br label %.sink.split

.sink.split:                                      ; preds = %49, %34, %61
  %.sink = phi i8 [ %67, %61 ], [ 1, %34 ], [ 1, %49 ]
  %68 = getelementptr inbounds [15 x i8], ptr %1, i64 0, i64 %indvars.iv
  store i8 %.sink, ptr %68, align 1, !tbaa !58
  br label %69

69:                                               ; preds = %.sink.split, %29, %49, %34
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 15
  br i1 %exitcond.not, label %.preheader, label %29, !llvm.loop !60

70:                                               ; preds = %.preheader
  %71 = load ptr, ptr %24, align 8, !tbaa !52
  %72 = getelementptr inbounds i8, ptr %26, i64 222
  %73 = load i8, ptr %72, align 1, !tbaa !53
  %74 = zext i8 %73 to i64
  %75 = getelementptr inbounds float, ptr %71, i64 %74
  %76 = load float, ptr %75, align 4, !tbaa !54
  %77 = getelementptr inbounds i8, ptr %26, i64 223
  %78 = load i8, ptr %77, align 1, !tbaa !55
  %79 = sitofp i8 %78 to float
  %80 = getelementptr inbounds i8, ptr %26, i64 224
  %81 = load i8, ptr %80, align 1, !tbaa !56
  %82 = sitofp i8 %81 to float
  %83 = tail call float @llvm.fmuladd.f32(float %76, float %79, float %82)
  %84 = tail call float @_glfw_fmaxf(float noundef %83, float noundef -1.000000e+00) #6
  %85 = tail call float @_glfw_fminf(float noundef %84, float noundef 1.000000e+00) #6
  store float %85, ptr %25, align 4, !tbaa !54
  %.pre = load ptr, ptr %20, align 8, !tbaa !49
  br label %107

86:                                               ; preds = %.preheader
  %87 = getelementptr inbounds i8, ptr %26, i64 222
  %88 = load i8, ptr %87, align 1, !tbaa !53
  %89 = zext i8 %88 to i32
  %90 = lshr i32 %89, 4
  %91 = and i32 %89, 15
  %92 = load ptr, ptr %23, align 8, !tbaa !57
  %93 = zext nneg i32 %90 to i64
  %94 = getelementptr inbounds i8, ptr %92, i64 %93
  %95 = load i8, ptr %94, align 1, !tbaa !58
  %96 = zext i8 %95 to i32
  %97 = and i32 %91, %96
  %.not71 = icmp eq i32 %97, 0
  br i1 %.not71, label %107, label %98

98:                                               ; preds = %86
  store float 1.000000e+00, ptr %25, align 4, !tbaa !54
  br label %107

99:                                               ; preds = %.preheader
  %100 = load ptr, ptr %22, align 8, !tbaa !59
  %101 = getelementptr inbounds i8, ptr %26, i64 222
  %102 = load i8, ptr %101, align 1, !tbaa !53
  %103 = zext i8 %102 to i64
  %104 = getelementptr inbounds i8, ptr %100, i64 %103
  %105 = load i8, ptr %104, align 1, !tbaa !58
  %106 = uitofp i8 %105 to float
  store float %106, ptr %25, align 4, !tbaa !54
  br label %107

107:                                              ; preds = %.preheader, %86, %98, %99, %70
  %108 = phi ptr [ %26, %.preheader ], [ %26, %86 ], [ %26, %98 ], [ %26, %99 ], [ %.pre, %70 ]
  %109 = getelementptr inbounds i8, ptr %108, i64 225
  %110 = load i8, ptr %109, align 1, !tbaa !50
  switch i8 %110, label %151 [
    i8 1, label %134
    i8 3, label %120
    i8 2, label %111
  ]

111:                                              ; preds = %107
  %112 = load ptr, ptr %22, align 8, !tbaa !59
  %113 = getelementptr inbounds i8, ptr %108, i64 226
  %114 = load i8, ptr %113, align 1, !tbaa !53
  %115 = zext i8 %114 to i64
  %116 = getelementptr inbounds i8, ptr %112, i64 %115
  %117 = load i8, ptr %116, align 1, !tbaa !58
  %118 = uitofp i8 %117 to float
  %119 = getelementptr inbounds i8, ptr %1, i64 20
  store float %118, ptr %119, align 4, !tbaa !54
  br label %151

120:                                              ; preds = %107
  %121 = getelementptr inbounds i8, ptr %108, i64 226
  %122 = load i8, ptr %121, align 1, !tbaa !53
  %123 = zext i8 %122 to i32
  %124 = lshr i32 %123, 4
  %125 = and i32 %123, 15
  %126 = load ptr, ptr %23, align 8, !tbaa !57
  %127 = zext nneg i32 %124 to i64
  %128 = getelementptr inbounds i8, ptr %126, i64 %127
  %129 = load i8, ptr %128, align 1, !tbaa !58
  %130 = zext i8 %129 to i32
  %131 = and i32 %125, %130
  %.not71.1 = icmp eq i32 %131, 0
  br i1 %.not71.1, label %151, label %132

132:                                              ; preds = %120
  %133 = getelementptr inbounds i8, ptr %1, i64 20
  store float 1.000000e+00, ptr %133, align 4, !tbaa !54
  br label %151

134:                                              ; preds = %107
  %135 = load ptr, ptr %24, align 8, !tbaa !52
  %136 = getelementptr inbounds i8, ptr %108, i64 226
  %137 = load i8, ptr %136, align 1, !tbaa !53
  %138 = zext i8 %137 to i64
  %139 = getelementptr inbounds float, ptr %135, i64 %138
  %140 = load float, ptr %139, align 4, !tbaa !54
  %141 = getelementptr inbounds i8, ptr %108, i64 227
  %142 = load i8, ptr %141, align 1, !tbaa !55
  %143 = sitofp i8 %142 to float
  %144 = getelementptr inbounds i8, ptr %108, i64 228
  %145 = load i8, ptr %144, align 1, !tbaa !56
  %146 = sitofp i8 %145 to float
  %147 = tail call float @llvm.fmuladd.f32(float %140, float %143, float %146)
  %148 = tail call float @_glfw_fmaxf(float noundef %147, float noundef -1.000000e+00) #6
  %149 = tail call float @_glfw_fminf(float noundef %148, float noundef 1.000000e+00) #6
  %150 = getelementptr inbounds i8, ptr %1, i64 20
  store float %149, ptr %150, align 4, !tbaa !54
  %.pre81 = load ptr, ptr %20, align 8, !tbaa !49
  br label %151

151:                                              ; preds = %134, %132, %120, %111, %107
  %152 = phi ptr [ %.pre81, %134 ], [ %108, %132 ], [ %108, %120 ], [ %108, %111 ], [ %108, %107 ]
  %153 = getelementptr inbounds i8, ptr %152, i64 229
  %154 = load i8, ptr %153, align 1, !tbaa !50
  switch i8 %154, label %195 [
    i8 1, label %178
    i8 3, label %164
    i8 2, label %155
  ]

155:                                              ; preds = %151
  %156 = load ptr, ptr %22, align 8, !tbaa !59
  %157 = getelementptr inbounds i8, ptr %152, i64 230
  %158 = load i8, ptr %157, align 1, !tbaa !53
  %159 = zext i8 %158 to i64
  %160 = getelementptr inbounds i8, ptr %156, i64 %159
  %161 = load i8, ptr %160, align 1, !tbaa !58
  %162 = uitofp i8 %161 to float
  %163 = getelementptr inbounds i8, ptr %1, i64 24
  store float %162, ptr %163, align 4, !tbaa !54
  br label %195

164:                                              ; preds = %151
  %165 = getelementptr inbounds i8, ptr %152, i64 230
  %166 = load i8, ptr %165, align 1, !tbaa !53
  %167 = zext i8 %166 to i32
  %168 = lshr i32 %167, 4
  %169 = and i32 %167, 15
  %170 = load ptr, ptr %23, align 8, !tbaa !57
  %171 = zext nneg i32 %168 to i64
  %172 = getelementptr inbounds i8, ptr %170, i64 %171
  %173 = load i8, ptr %172, align 1, !tbaa !58
  %174 = zext i8 %173 to i32
  %175 = and i32 %169, %174
  %.not71.2 = icmp eq i32 %175, 0
  br i1 %.not71.2, label %195, label %176

176:                                              ; preds = %164
  %177 = getelementptr inbounds i8, ptr %1, i64 24
  store float 1.000000e+00, ptr %177, align 4, !tbaa !54
  br label %195

178:                                              ; preds = %151
  %179 = load ptr, ptr %24, align 8, !tbaa !52
  %180 = getelementptr inbounds i8, ptr %152, i64 230
  %181 = load i8, ptr %180, align 1, !tbaa !53
  %182 = zext i8 %181 to i64
  %183 = getelementptr inbounds float, ptr %179, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !54
  %185 = getelementptr inbounds i8, ptr %152, i64 231
  %186 = load i8, ptr %185, align 1, !tbaa !55
  %187 = sitofp i8 %186 to float
  %188 = getelementptr inbounds i8, ptr %152, i64 232
  %189 = load i8, ptr %188, align 1, !tbaa !56
  %190 = sitofp i8 %189 to float
  %191 = tail call float @llvm.fmuladd.f32(float %184, float %187, float %190)
  %192 = tail call float @_glfw_fmaxf(float noundef %191, float noundef -1.000000e+00) #6
  %193 = tail call float @_glfw_fminf(float noundef %192, float noundef 1.000000e+00) #6
  %194 = getelementptr inbounds i8, ptr %1, i64 24
  store float %193, ptr %194, align 4, !tbaa !54
  %.pre82 = load ptr, ptr %20, align 8, !tbaa !49
  br label %195

195:                                              ; preds = %178, %176, %164, %155, %151
  %196 = phi ptr [ %.pre82, %178 ], [ %152, %176 ], [ %152, %164 ], [ %152, %155 ], [ %152, %151 ]
  %197 = getelementptr inbounds i8, ptr %196, i64 233
  %198 = load i8, ptr %197, align 1, !tbaa !50
  switch i8 %198, label %239 [
    i8 1, label %222
    i8 3, label %208
    i8 2, label %199
  ]

199:                                              ; preds = %195
  %200 = load ptr, ptr %22, align 8, !tbaa !59
  %201 = getelementptr inbounds i8, ptr %196, i64 234
  %202 = load i8, ptr %201, align 1, !tbaa !53
  %203 = zext i8 %202 to i64
  %204 = getelementptr inbounds i8, ptr %200, i64 %203
  %205 = load i8, ptr %204, align 1, !tbaa !58
  %206 = uitofp i8 %205 to float
  %207 = getelementptr inbounds i8, ptr %1, i64 28
  store float %206, ptr %207, align 4, !tbaa !54
  br label %239

208:                                              ; preds = %195
  %209 = getelementptr inbounds i8, ptr %196, i64 234
  %210 = load i8, ptr %209, align 1, !tbaa !53
  %211 = zext i8 %210 to i32
  %212 = lshr i32 %211, 4
  %213 = and i32 %211, 15
  %214 = load ptr, ptr %23, align 8, !tbaa !57
  %215 = zext nneg i32 %212 to i64
  %216 = getelementptr inbounds i8, ptr %214, i64 %215
  %217 = load i8, ptr %216, align 1, !tbaa !58
  %218 = zext i8 %217 to i32
  %219 = and i32 %213, %218
  %.not71.3 = icmp eq i32 %219, 0
  br i1 %.not71.3, label %239, label %220

220:                                              ; preds = %208
  %221 = getelementptr inbounds i8, ptr %1, i64 28
  store float 1.000000e+00, ptr %221, align 4, !tbaa !54
  br label %239

222:                                              ; preds = %195
  %223 = load ptr, ptr %24, align 8, !tbaa !52
  %224 = getelementptr inbounds i8, ptr %196, i64 234
  %225 = load i8, ptr %224, align 1, !tbaa !53
  %226 = zext i8 %225 to i64
  %227 = getelementptr inbounds float, ptr %223, i64 %226
  %228 = load float, ptr %227, align 4, !tbaa !54
  %229 = getelementptr inbounds i8, ptr %196, i64 235
  %230 = load i8, ptr %229, align 1, !tbaa !55
  %231 = sitofp i8 %230 to float
  %232 = getelementptr inbounds i8, ptr %196, i64 236
  %233 = load i8, ptr %232, align 1, !tbaa !56
  %234 = sitofp i8 %233 to float
  %235 = tail call float @llvm.fmuladd.f32(float %228, float %231, float %234)
  %236 = tail call float @_glfw_fmaxf(float noundef %235, float noundef -1.000000e+00) #6
  %237 = tail call float @_glfw_fminf(float noundef %236, float noundef 1.000000e+00) #6
  %238 = getelementptr inbounds i8, ptr %1, i64 28
  store float %237, ptr %238, align 4, !tbaa !54
  %.pre83 = load ptr, ptr %20, align 8, !tbaa !49
  br label %239

239:                                              ; preds = %222, %220, %208, %199, %195
  %240 = phi ptr [ %.pre83, %222 ], [ %196, %220 ], [ %196, %208 ], [ %196, %199 ], [ %196, %195 ]
  %241 = getelementptr inbounds i8, ptr %240, i64 237
  %242 = load i8, ptr %241, align 1, !tbaa !50
  switch i8 %242, label %283 [
    i8 1, label %266
    i8 3, label %252
    i8 2, label %243
  ]

243:                                              ; preds = %239
  %244 = load ptr, ptr %22, align 8, !tbaa !59
  %245 = getelementptr inbounds i8, ptr %240, i64 238
  %246 = load i8, ptr %245, align 1, !tbaa !53
  %247 = zext i8 %246 to i64
  %248 = getelementptr inbounds i8, ptr %244, i64 %247
  %249 = load i8, ptr %248, align 1, !tbaa !58
  %250 = uitofp i8 %249 to float
  %251 = getelementptr inbounds i8, ptr %1, i64 32
  store float %250, ptr %251, align 4, !tbaa !54
  br label %283

252:                                              ; preds = %239
  %253 = getelementptr inbounds i8, ptr %240, i64 238
  %254 = load i8, ptr %253, align 1, !tbaa !53
  %255 = zext i8 %254 to i32
  %256 = lshr i32 %255, 4
  %257 = and i32 %255, 15
  %258 = load ptr, ptr %23, align 8, !tbaa !57
  %259 = zext nneg i32 %256 to i64
  %260 = getelementptr inbounds i8, ptr %258, i64 %259
  %261 = load i8, ptr %260, align 1, !tbaa !58
  %262 = zext i8 %261 to i32
  %263 = and i32 %257, %262
  %.not71.4 = icmp eq i32 %263, 0
  br i1 %.not71.4, label %283, label %264

264:                                              ; preds = %252
  %265 = getelementptr inbounds i8, ptr %1, i64 32
  store float 1.000000e+00, ptr %265, align 4, !tbaa !54
  br label %283

266:                                              ; preds = %239
  %267 = load ptr, ptr %24, align 8, !tbaa !52
  %268 = getelementptr inbounds i8, ptr %240, i64 238
  %269 = load i8, ptr %268, align 1, !tbaa !53
  %270 = zext i8 %269 to i64
  %271 = getelementptr inbounds float, ptr %267, i64 %270
  %272 = load float, ptr %271, align 4, !tbaa !54
  %273 = getelementptr inbounds i8, ptr %240, i64 239
  %274 = load i8, ptr %273, align 1, !tbaa !55
  %275 = sitofp i8 %274 to float
  %276 = getelementptr inbounds i8, ptr %240, i64 240
  %277 = load i8, ptr %276, align 1, !tbaa !56
  %278 = sitofp i8 %277 to float
  %279 = tail call float @llvm.fmuladd.f32(float %272, float %275, float %278)
  %280 = tail call float @_glfw_fmaxf(float noundef %279, float noundef -1.000000e+00) #6
  %281 = tail call float @_glfw_fminf(float noundef %280, float noundef 1.000000e+00) #6
  %282 = getelementptr inbounds i8, ptr %1, i64 32
  store float %281, ptr %282, align 4, !tbaa !54
  %.pre84 = load ptr, ptr %20, align 8, !tbaa !49
  br label %283

283:                                              ; preds = %266, %264, %252, %243, %239
  %284 = phi ptr [ %.pre84, %266 ], [ %240, %264 ], [ %240, %252 ], [ %240, %243 ], [ %240, %239 ]
  %285 = getelementptr inbounds i8, ptr %284, i64 241
  %286 = load i8, ptr %285, align 1, !tbaa !50
  switch i8 %286, label %.loopexit [
    i8 1, label %310
    i8 3, label %296
    i8 2, label %287
  ]

287:                                              ; preds = %283
  %288 = load ptr, ptr %22, align 8, !tbaa !59
  %289 = getelementptr inbounds i8, ptr %284, i64 242
  %290 = load i8, ptr %289, align 1, !tbaa !53
  %291 = zext i8 %290 to i64
  %292 = getelementptr inbounds i8, ptr %288, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !58
  %294 = uitofp i8 %293 to float
  %295 = getelementptr inbounds i8, ptr %1, i64 36
  store float %294, ptr %295, align 4, !tbaa !54
  br label %.loopexit

296:                                              ; preds = %283
  %297 = getelementptr inbounds i8, ptr %284, i64 242
  %298 = load i8, ptr %297, align 1, !tbaa !53
  %299 = zext i8 %298 to i32
  %300 = lshr i32 %299, 4
  %301 = and i32 %299, 15
  %302 = load ptr, ptr %23, align 8, !tbaa !57
  %303 = zext nneg i32 %300 to i64
  %304 = getelementptr inbounds i8, ptr %302, i64 %303
  %305 = load i8, ptr %304, align 1, !tbaa !58
  %306 = zext i8 %305 to i32
  %307 = and i32 %301, %306
  %.not71.5 = icmp eq i32 %307, 0
  br i1 %.not71.5, label %.loopexit, label %308

308:                                              ; preds = %296
  %309 = getelementptr inbounds i8, ptr %1, i64 36
  store float 1.000000e+00, ptr %309, align 4, !tbaa !54
  br label %.loopexit

310:                                              ; preds = %283
  %311 = load ptr, ptr %24, align 8, !tbaa !52
  %312 = getelementptr inbounds i8, ptr %284, i64 242
  %313 = load i8, ptr %312, align 1, !tbaa !53
  %314 = zext i8 %313 to i64
  %315 = getelementptr inbounds float, ptr %311, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !54
  %317 = getelementptr inbounds i8, ptr %284, i64 243
  %318 = load i8, ptr %317, align 1, !tbaa !55
  %319 = sitofp i8 %318 to float
  %320 = getelementptr inbounds i8, ptr %284, i64 244
  %321 = load i8, ptr %320, align 1, !tbaa !56
  %322 = sitofp i8 %321 to float
  %323 = tail call float @llvm.fmuladd.f32(float %316, float %319, float %322)
  %324 = tail call float @_glfw_fmaxf(float noundef %323, float noundef -1.000000e+00) #6
  %325 = tail call float @_glfw_fminf(float noundef %324, float noundef 1.000000e+00) #6
  %326 = getelementptr inbounds i8, ptr %1, i64 36
  store float %325, ptr %326, align 4, !tbaa !54
  br label %.loopexit

.loopexit:                                        ; preds = %283, %287, %296, %308, %310, %19, %17, %13, %12
  %.0 = phi i32 [ 0, %12 ], [ 0, %13 ], [ 0, %17 ], [ 0, %19 ], [ 1, %310 ], [ 1, %308 ], [ 1, %296 ], [ 1, %287 ], [ 1, %283 ]
  ret i32 %.0
}

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

declare float @_glfw_fminf(float noundef, float noundef) local_unnamed_addr #2

declare float @_glfw_fmaxf(float noundef, float noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { noreturn 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 #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 = { 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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { noreturn nounwind }
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 = !{!"_GLFWlibrary", !7, i64 0, !10, i64 8, !16, i64 992, !16, i64 1000, !16, i64 1008, !16, i64 1016, !7, i64 1024, !8, i64 1032, !16, i64 130568, !7, i64 130576, !21, i64 130580, !21, i64 130588, !23, i64 130600, !25, i64 130648, !27, i64 130672, !28, i64 130736, !29, i64 130752, !41, i64 132960, !42, i64 133184, !44, i64 133264, !45, i64 133440}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !13, i64 16, !15, i64 88, !19, i64 920, !7, i64 976}
!11 = !{!"_GLFWinitconfig", !7, i64 0, !12, i64 4}
!12 = !{!"", !7, i64 0, !7, i64 4}
!13 = !{!"_GLFWfbconfig", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !14, i64 64}
!14 = !{!"long", !8, i64 0}
!15 = !{!"_GLFWwndconfig", !7, i64 0, !7, i64 4, !16, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !17, i64 56, !18, i64 316}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!"", !7, i64 0, !8, i64 4}
!18 = !{!"", !8, i64 0, !8, i64 256}
!19 = !{!"_GLFWctxconfig", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !16, i64 40, !20, i64 48}
!20 = !{!"", !7, i64 0}
!21 = !{!"_GLFWtls", !22, i64 0}
!22 = !{!"_GLFWtlsPOSIX", !7, i64 0, !7, i64 4}
!23 = !{!"_GLFWmutex", !24, i64 0}
!24 = !{!"_GLFWmutexPOSIX", !7, i64 0, !8, i64 8}
!25 = !{!"", !14, i64 0, !26, i64 8}
!26 = !{!"_GLFWtimerPOSIX", !7, i64 0, !14, i64 8}
!27 = !{!"", !7, i64 0, !16, i64 8, !8, i64 16, !16, i64 32, !16, i64 40, !7, i64 48, !7, i64 52, !7, i64 56}
!28 = !{!"", !16, i64 0, !16, i64 8}
!29 = !{!"_GLFWlibraryX11", !16, i64 0, !7, i64 8, !14, i64 16, !30, i64 24, !30, i64 28, !14, i64 32, !14, i64 40, !7, i64 48, !16, i64 56, !7, i64 64, !16, i64 72, !16, i64 80, !8, i64 88, !8, i64 94, !8, i64 606, !31, i64 1304, !31, i64 1312, !16, i64 1320, !14, i64 1328, !14, i64 1336, !14, i64 1344, !14, i64 1352, !14, i64 1360, !14, i64 1368, !14, i64 1376, !14, i64 1384, !14, i64 1392, !14, i64 1400, !14, i64 1408, !14, i64 1416, !14, i64 1424, !14, i64 1432, !14, i64 1440, !14, i64 1448, !14, i64 1456, !14, i64 1464, !14, i64 1472, !14, i64 1480, !14, i64 1488, !14, i64 1496, !14, i64 1504, !14, i64 1512, !14, i64 1520, !14, i64 1528, !14, i64 1536, !14, i64 1544, !14, i64 1552, !14, i64 1560, !14, i64 1568, !14, i64 1576, !14, i64 1584, !14, i64 1592, !14, i64 1600, !14, i64 1608, !14, i64 1616, !14, i64 1624, !14, i64 1632, !14, i64 1640, !14, i64 1648, !14, i64 1656, !14, i64 1664, !14, i64 1672, !14, i64 1680, !14, i64 1688, !32, i64 1696, !33, i64 1872, !34, i64 1900, !35, i64 1920, !36, i64 1944, !37, i64 1976, !28, i64 2024, !38, i64 2040, !39, i64 2096, !40, i64 2152}
!30 = !{!"float", !8, i64 0}
!31 = !{!"double", !8, i64 0}
!32 = !{!"", !7, i64 0, !16, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168}
!33 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24}
!34 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16}
!35 = !{!"", !7, i64 0, !14, i64 8, !14, i64 16}
!36 = !{!"", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24}
!37 = !{!"", !7, i64 0, !16, i64 8, !7, i64 16, !7, i64 20, !16, i64 24, !16, i64 32, !16, i64 40}
!38 = !{!"", !7, i64 0, !16, i64 8, !7, i64 16, !7, i64 20, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48}
!39 = !{!"", !7, i64 0, !16, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !16, i64 40, !16, i64 48}
!40 = !{!"", !7, i64 0, !16, i64 8, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !16, i64 32, !16, i64 40, !16, i64 48}
!41 = !{!"_GLFWlibraryGLX", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220}
!42 = !{!"_GLFWlibraryLinux", !7, i64 0, !7, i64 4, !43, i64 8, !7, i64 72}
!43 = !{!"re_pattern_buffer", !16, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !16, i64 32, !16, i64 40, !14, i64 48, !7, i64 56, !7, i64 56, !7, i64 56, !7, i64 56, !7, i64 56, !7, i64 56, !7, i64 56}
!44 = !{!"_GLFWlibraryEGL", !16, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !16, i64 112, !16, i64 120, !16, i64 128, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168}
!45 = !{!"_GLFWlibraryOSMesa", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56}
!46 = !{!47, !7, i64 0}
!47 = !{!"_GLFWjoystick", !7, i64 0, !16, i64 8, !7, i64 16, !16, i64 24, !7, i64 32, !16, i64 40, !7, i64 48, !16, i64 56, !16, i64 64, !8, i64 72, !16, i64 112, !48, i64 120}
!48 = !{!"_GLFWjoystickLinux", !7, i64 0, !8, i64 4, !8, i64 4100, !8, i64 6148, !8, i64 6404, !8, i64 7940}
!49 = !{!47, !16, i64 112}
!50 = !{!51, !8, i64 0}
!51 = !{!"_GLFWmapelement", !8, i64 0, !8, i64 1, !8, i64 2, !8, i64 3}
!52 = !{!47, !16, i64 8}
!53 = !{!51, !8, i64 1}
!54 = !{!30, !30, i64 0}
!55 = !{!51, !8, i64 2}
!56 = !{!51, !8, i64 3}
!57 = !{!47, !16, i64 40}
!58 = !{!8, !8, i64 0}
!59 = !{!47, !16, i64 24}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass