; LLVM IR from recp/cglm :: test/src (tests)

; 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.test_status_t = type { ptr, i32 }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [94 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.179 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.180 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.181 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.787 = external hidden unnamed_addr constant [64 x i8], align 1
@__const.test_glm_quat_rotatev.v1 = external hidden unnamed_addr constant [3 x float], align 4
@__const.test_glm_quat_rotatev.v2 = external hidden unnamed_addr constant [3 x float], align 4

; 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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: alwaysinline nounwind uwtable
declare hidden zeroext i1 @test_eq(float noundef, float noundef) #2

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @glm_quatv(ptr noundef, float noundef, ptr noundef) #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @glm_quat_rotatev(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local { ptr, i32 } @test_glm_quat_rotatev() #4 {
  %1 = alloca %struct.test_status_t, align 8
  %2 = alloca [3 x float], align 4
  %3 = alloca [3 x float], align 4
  %4 = alloca [4 x float], align 16
  %5 = alloca [3 x float], align 4
  %6 = alloca i32, align 4
  %7 = alloca [3 x float], align 4
  %8 = alloca [3 x float], align 4
  %9 = alloca [3 x float], align 4
  %10 = alloca [3 x float], align 4
  %11 = alloca [3 x float], align 4
  %12 = alloca [3 x float], align 4
  %13 = alloca [3 x float], align 4
  call void @llvm.lifetime.start.p0(i64 12, ptr %2) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2, ptr align 4 @__const.test_glm_quat_rotatev.v1, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %3) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3, ptr align 4 @__const.test_glm_quat_rotatev.v2, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %4) #5
  %14 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %5, align 4, !tbaa !5
  %15 = getelementptr inbounds float, ptr %5, i64 1
  store float 1.000000e+00, ptr %15, align 4, !tbaa !5
  %16 = getelementptr inbounds float, ptr %5, i64 2
  store float 0.000000e+00, ptr %16, align 4, !tbaa !5
  %17 = getelementptr inbounds [3 x float], ptr %5, i64 0, i64 0
  call void @glm_quatv(ptr noundef %14, float noundef 0x3FF921FB60000000, ptr noundef %17)
  %18 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %19 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %20 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %18, ptr noundef %19, ptr noundef %20)
  br label %21

21:                                               ; preds = %0
  %22 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %23 = load float, ptr %22, align 4, !tbaa !5
  %24 = call zeroext i1 @test_eq(float noundef %23, float noundef 0.000000e+00)
  br i1 %24, label %30, label %25

25:                                               ; preds = %21
  %26 = load ptr, ptr @stderr, align 8, !tbaa !9
  %27 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %26, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 902, ptr noundef @.str.27) #5
  %28 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %28, align 8, !tbaa !11
  %29 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %29, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

30:                                               ; preds = %21
  br label %31

31:                                               ; preds = %30
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  %34 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 1
  %35 = load float, ptr %34, align 4, !tbaa !5
  %36 = call zeroext i1 @test_eq(float noundef %35, float noundef 0.000000e+00)
  br i1 %36, label %42, label %37

37:                                               ; preds = %33
  %38 = load ptr, ptr @stderr, align 8, !tbaa !9
  %39 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %38, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 903, ptr noundef @.str.28) #5
  %40 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %40, align 8, !tbaa !11
  %41 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %41, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

42:                                               ; preds = %33
  br label %43

43:                                               ; preds = %42
  br label %44

44:                                               ; preds = %43
  br label %45

45:                                               ; preds = %44
  %46 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 2
  %47 = load float, ptr %46, align 4, !tbaa !5
  %48 = call zeroext i1 @test_eq(float noundef %47, float noundef -1.000000e+00)
  br i1 %48, label %54, label %49

49:                                               ; preds = %45
  %50 = load ptr, ptr @stderr, align 8, !tbaa !9
  %51 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %50, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 904, ptr noundef @.str.177) #5
  %52 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %52, align 8, !tbaa !11
  %53 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %53, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

54:                                               ; preds = %45
  br label %55

55:                                               ; preds = %54
  br label %56

56:                                               ; preds = %55
  %57 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 1.000000e+00, ptr %7, align 4, !tbaa !5
  %58 = getelementptr inbounds float, ptr %7, i64 1
  store float 0.000000e+00, ptr %58, align 4, !tbaa !5
  %59 = getelementptr inbounds float, ptr %7, i64 2
  store float 0.000000e+00, ptr %59, align 4, !tbaa !5
  %60 = getelementptr inbounds [3 x float], ptr %7, i64 0, i64 0
  call void @glm_quatv(ptr noundef %57, float noundef 0x3FF921FB60000000, ptr noundef %60)
  %61 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %62 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %63 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %61, ptr noundef %62, ptr noundef %63)
  br label %64

64:                                               ; preds = %56
  %65 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %66 = load float, ptr %65, align 4, !tbaa !5
  %67 = call zeroext i1 @test_eq(float noundef %66, float noundef 0.000000e+00)
  br i1 %67, label %73, label %68

68:                                               ; preds = %64
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 910, ptr noundef @.str.27) #5
  %71 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %71, align 8, !tbaa !11
  %72 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %72, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

73:                                               ; preds = %64
  br label %74

74:                                               ; preds = %73
  br label %75

75:                                               ; preds = %74
  br label %76

76:                                               ; preds = %75
  %77 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 1
  %78 = load float, ptr %77, align 4, !tbaa !5
  %79 = call zeroext i1 @test_eq(float noundef %78, float noundef 1.000000e+00)
  br i1 %79, label %85, label %80

80:                                               ; preds = %76
  %81 = load ptr, ptr @stderr, align 8, !tbaa !9
  %82 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %81, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 911, ptr noundef @.str.63) #5
  %83 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %83, align 8, !tbaa !11
  %84 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %84, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

85:                                               ; preds = %76
  br label %86

86:                                               ; preds = %85
  br label %87

87:                                               ; preds = %86
  br label %88

88:                                               ; preds = %87
  %89 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 2
  %90 = load float, ptr %89, align 4, !tbaa !5
  %91 = call zeroext i1 @test_eq(float noundef %90, float noundef 0.000000e+00)
  br i1 %91, label %97, label %92

92:                                               ; preds = %88
  %93 = load ptr, ptr @stderr, align 8, !tbaa !9
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 912, ptr noundef @.str.154) #5
  %95 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %95, align 8, !tbaa !11
  %96 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %96, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

97:                                               ; preds = %88
  br label %98

98:                                               ; preds = %97
  br label %99

99:                                               ; preds = %98
  %100 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %8, align 4, !tbaa !5
  %101 = getelementptr inbounds float, ptr %8, i64 1
  store float 0.000000e+00, ptr %101, align 4, !tbaa !5
  %102 = getelementptr inbounds float, ptr %8, i64 2
  store float 1.000000e+00, ptr %102, align 4, !tbaa !5
  %103 = getelementptr inbounds [3 x float], ptr %8, i64 0, i64 0
  call void @glm_quatv(ptr noundef %100, float noundef 0x3FF921FB60000000, ptr noundef %103)
  %104 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %105 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %106 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %104, ptr noundef %105, ptr noundef %106)
  br label %107

107:                                              ; preds = %99
  %108 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 0
  %109 = load float, ptr %108, align 4, !tbaa !5
  %110 = call zeroext i1 @test_eq(float noundef %109, float noundef -1.000000e+00)
  br i1 %110, label %116, label %111

111:                                              ; preds = %107
  %112 = load ptr, ptr @stderr, align 8, !tbaa !9
  %113 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %112, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 918, ptr noundef @.str.64) #5
  %114 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %114, align 8, !tbaa !11
  %115 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %115, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

116:                                              ; preds = %107
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117
  br label %119

119:                                              ; preds = %118
  %120 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 1
  %121 = load float, ptr %120, align 4, !tbaa !5
  %122 = call zeroext i1 @test_eq(float noundef %121, float noundef 0.000000e+00)
  br i1 %122, label %128, label %123

123:                                              ; preds = %119
  %124 = load ptr, ptr @stderr, align 8, !tbaa !9
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 919, ptr noundef @.str.28) #5
  %126 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %126, align 8, !tbaa !11
  %127 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %127, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

128:                                              ; preds = %119
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130
  %132 = getelementptr inbounds [3 x float], ptr %2, i64 0, i64 2
  %133 = load float, ptr %132, align 4, !tbaa !5
  %134 = call zeroext i1 @test_eq(float noundef %133, float noundef 0.000000e+00)
  br i1 %134, label %140, label %135

135:                                              ; preds = %131
  %136 = load ptr, ptr @stderr, align 8, !tbaa !9
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %136, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 920, ptr noundef @.str.154) #5
  %138 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %138, align 8, !tbaa !11
  %139 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %139, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

140:                                              ; preds = %131
  br label %141

141:                                              ; preds = %140
  br label %142

142:                                              ; preds = %141
  %143 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %9, align 4, !tbaa !5
  %144 = getelementptr inbounds float, ptr %9, i64 1
  store float 1.000000e+00, ptr %144, align 4, !tbaa !5
  %145 = getelementptr inbounds float, ptr %9, i64 2
  store float 0.000000e+00, ptr %145, align 4, !tbaa !5
  %146 = getelementptr inbounds [3 x float], ptr %9, i64 0, i64 0
  call void @glm_quatv(ptr noundef %143, float noundef 0x3FF921FB60000000, ptr noundef %146)
  %147 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %148 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %149 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %147, ptr noundef %148, ptr noundef %149)
  br label %150

150:                                              ; preds = %142
  %151 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %152 = load float, ptr %151, align 4, !tbaa !5
  %153 = call zeroext i1 @test_eq(float noundef %152, float noundef 1.000000e+00)
  br i1 %153, label %159, label %154

154:                                              ; preds = %150
  %155 = load ptr, ptr @stderr, align 8, !tbaa !9
  %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %155, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 926, ptr noundef @.str.102) #5
  %157 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %157, align 8, !tbaa !11
  %158 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %158, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

159:                                              ; preds = %150
  br label %160

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  br label %162

162:                                              ; preds = %161
  %163 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 1
  %164 = load float, ptr %163, align 4, !tbaa !5
  %165 = call zeroext i1 @test_eq(float noundef %164, float noundef 1.000000e+00)
  br i1 %165, label %171, label %166

166:                                              ; preds = %162
  %167 = load ptr, ptr @stderr, align 8, !tbaa !9
  %168 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 927, ptr noundef @.str.103) #5
  %169 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %169, align 8, !tbaa !11
  %170 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %170, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

171:                                              ; preds = %162
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  %175 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 2
  %176 = load float, ptr %175, align 4, !tbaa !5
  %177 = call zeroext i1 @test_eq(float noundef %176, float noundef -1.000000e+00)
  br i1 %177, label %183, label %178

178:                                              ; preds = %174
  %179 = load ptr, ptr @stderr, align 8, !tbaa !9
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %179, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 928, ptr noundef @.str.178) #5
  %181 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %181, align 8, !tbaa !11
  %182 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %182, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

183:                                              ; preds = %174
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  %186 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %10, align 4, !tbaa !5
  %187 = getelementptr inbounds float, ptr %10, i64 1
  store float 1.000000e+00, ptr %187, align 4, !tbaa !5
  %188 = getelementptr inbounds float, ptr %10, i64 2
  store float 0.000000e+00, ptr %188, align 4, !tbaa !5
  %189 = getelementptr inbounds [3 x float], ptr %10, i64 0, i64 0
  call void @glm_quatv(ptr noundef %186, float noundef 0x3FF921FB60000000, ptr noundef %189)
  %190 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %191 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %192 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %190, ptr noundef %191, ptr noundef %192)
  br label %193

193:                                              ; preds = %185
  %194 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %195 = load float, ptr %194, align 4, !tbaa !5
  %196 = call zeroext i1 @test_eq(float noundef %195, float noundef -1.000000e+00)
  br i1 %196, label %202, label %197

197:                                              ; preds = %193
  %198 = load ptr, ptr @stderr, align 8, !tbaa !9
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 934, ptr noundef @.str.179) #5
  %200 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %200, align 8, !tbaa !11
  %201 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %201, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

202:                                              ; preds = %193
  br label %203

203:                                              ; preds = %202
  br label %204

204:                                              ; preds = %203
  br label %205

205:                                              ; preds = %204
  %206 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 1
  %207 = load float, ptr %206, align 4, !tbaa !5
  %208 = call zeroext i1 @test_eq(float noundef %207, float noundef 1.000000e+00)
  br i1 %208, label %214, label %209

209:                                              ; preds = %205
  %210 = load ptr, ptr @stderr, align 8, !tbaa !9
  %211 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %210, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 935, ptr noundef @.str.103) #5
  %212 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %212, align 8, !tbaa !11
  %213 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %213, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

214:                                              ; preds = %205
  br label %215

215:                                              ; preds = %214
  br label %216

216:                                              ; preds = %215
  br label %217

217:                                              ; preds = %216
  %218 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 2
  %219 = load float, ptr %218, align 4, !tbaa !5
  %220 = call zeroext i1 @test_eq(float noundef %219, float noundef -1.000000e+00)
  br i1 %220, label %226, label %221

221:                                              ; preds = %217
  %222 = load ptr, ptr @stderr, align 8, !tbaa !9
  %223 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %222, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 936, ptr noundef @.str.178) #5
  %224 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %224, align 8, !tbaa !11
  %225 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %225, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

226:                                              ; preds = %217
  br label %227

227:                                              ; preds = %226
  br label %228

228:                                              ; preds = %227
  %229 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %11, align 4, !tbaa !5
  %230 = getelementptr inbounds float, ptr %11, i64 1
  store float 1.000000e+00, ptr %230, align 4, !tbaa !5
  %231 = getelementptr inbounds float, ptr %11, i64 2
  store float 0.000000e+00, ptr %231, align 4, !tbaa !5
  %232 = getelementptr inbounds [3 x float], ptr %11, i64 0, i64 0
  call void @glm_quatv(ptr noundef %229, float noundef 0x3FF921FB60000000, ptr noundef %232)
  %233 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %234 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %235 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %233, ptr noundef %234, ptr noundef %235)
  br label %236

236:                                              ; preds = %228
  %237 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %238 = load float, ptr %237, align 4, !tbaa !5
  %239 = call zeroext i1 @test_eq(float noundef %238, float noundef -1.000000e+00)
  br i1 %239, label %245, label %240

240:                                              ; preds = %236
  %241 = load ptr, ptr @stderr, align 8, !tbaa !9
  %242 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %241, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 942, ptr noundef @.str.179) #5
  %243 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %243, align 8, !tbaa !11
  %244 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %244, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

245:                                              ; preds = %236
  br label %246

246:                                              ; preds = %245
  br label %247

247:                                              ; preds = %246
  br label %248

248:                                              ; preds = %247
  %249 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 1
  %250 = load float, ptr %249, align 4, !tbaa !5
  %251 = call zeroext i1 @test_eq(float noundef %250, float noundef 1.000000e+00)
  br i1 %251, label %257, label %252

252:                                              ; preds = %248
  %253 = load ptr, ptr @stderr, align 8, !tbaa !9
  %254 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %253, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 943, ptr noundef @.str.103) #5
  %255 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %255, align 8, !tbaa !11
  %256 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %256, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

257:                                              ; preds = %248
  br label %258

258:                                              ; preds = %257
  br label %259

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259
  %261 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 2
  %262 = load float, ptr %261, align 4, !tbaa !5
  %263 = call zeroext i1 @test_eq(float noundef %262, float noundef 1.000000e+00)
  br i1 %263, label %269, label %264

264:                                              ; preds = %260
  %265 = load ptr, ptr @stderr, align 8, !tbaa !9
  %266 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %265, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 944, ptr noundef @.str.180) #5
  %267 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %267, align 8, !tbaa !11
  %268 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %268, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

269:                                              ; preds = %260
  br label %270

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270
  %272 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 1.000000e+00, ptr %12, align 4, !tbaa !5
  %273 = getelementptr inbounds float, ptr %12, i64 1
  store float 0.000000e+00, ptr %273, align 4, !tbaa !5
  %274 = getelementptr inbounds float, ptr %12, i64 2
  store float 0.000000e+00, ptr %274, align 4, !tbaa !5
  %275 = getelementptr inbounds [3 x float], ptr %12, i64 0, i64 0
  call void @glm_quatv(ptr noundef %272, float noundef 0x3FF921FB60000000, ptr noundef %275)
  %276 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %277 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %278 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %276, ptr noundef %277, ptr noundef %278)
  br label %279

279:                                              ; preds = %271
  %280 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %281 = load float, ptr %280, align 4, !tbaa !5
  %282 = call zeroext i1 @test_eq(float noundef %281, float noundef -1.000000e+00)
  br i1 %282, label %288, label %283

283:                                              ; preds = %279
  %284 = load ptr, ptr @stderr, align 8, !tbaa !9
  %285 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %284, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 950, ptr noundef @.str.179) #5
  %286 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %286, align 8, !tbaa !11
  %287 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %287, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

288:                                              ; preds = %279
  br label %289

289:                                              ; preds = %288
  br label %290

290:                                              ; preds = %289
  br label %291

291:                                              ; preds = %290
  %292 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 1
  %293 = load float, ptr %292, align 4, !tbaa !5
  %294 = call zeroext i1 @test_eq(float noundef %293, float noundef -1.000000e+00)
  br i1 %294, label %300, label %295

295:                                              ; preds = %291
  %296 = load ptr, ptr @stderr, align 8, !tbaa !9
  %297 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %296, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 951, ptr noundef @.str.181) #5
  %298 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %298, align 8, !tbaa !11
  %299 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %299, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

300:                                              ; preds = %291
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301
  br label %303

303:                                              ; preds = %302
  %304 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 2
  %305 = load float, ptr %304, align 4, !tbaa !5
  %306 = call zeroext i1 @test_eq(float noundef %305, float noundef 1.000000e+00)
  br i1 %306, label %312, label %307

307:                                              ; preds = %303
  %308 = load ptr, ptr @stderr, align 8, !tbaa !9
  %309 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %308, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 952, ptr noundef @.str.180) #5
  %310 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %310, align 8, !tbaa !11
  %311 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %311, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

312:                                              ; preds = %303
  br label %313

313:                                              ; preds = %312
  br label %314

314:                                              ; preds = %313
  %315 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  store float 0.000000e+00, ptr %13, align 4, !tbaa !5
  %316 = getelementptr inbounds float, ptr %13, i64 1
  store float 0.000000e+00, ptr %316, align 4, !tbaa !5
  %317 = getelementptr inbounds float, ptr %13, i64 2
  store float 1.000000e+00, ptr %317, align 4, !tbaa !5
  %318 = getelementptr inbounds [3 x float], ptr %13, i64 0, i64 0
  call void @glm_quatv(ptr noundef %315, float noundef 0x3FF921FB60000000, ptr noundef %318)
  %319 = getelementptr inbounds [4 x float], ptr %4, i64 0, i64 0
  %320 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %321 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  call void @glm_quat_rotatev(ptr noundef %319, ptr noundef %320, ptr noundef %321)
  br label %322

322:                                              ; preds = %314
  %323 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 0
  %324 = load float, ptr %323, align 4, !tbaa !5
  %325 = call zeroext i1 @test_eq(float noundef %324, float noundef 1.000000e+00)
  br i1 %325, label %331, label %326

326:                                              ; preds = %322
  %327 = load ptr, ptr @stderr, align 8, !tbaa !9
  %328 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %327, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 958, ptr noundef @.str.102) #5
  %329 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %329, align 8, !tbaa !11
  %330 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %330, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

331:                                              ; preds = %322
  br label %332

332:                                              ; preds = %331
  br label %333

333:                                              ; preds = %332
  br label %334

334:                                              ; preds = %333
  %335 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 1
  %336 = load float, ptr %335, align 4, !tbaa !5
  %337 = call zeroext i1 @test_eq(float noundef %336, float noundef -1.000000e+00)
  br i1 %337, label %343, label %338

338:                                              ; preds = %334
  %339 = load ptr, ptr @stderr, align 8, !tbaa !9
  %340 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %339, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 959, ptr noundef @.str.181) #5
  %341 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %341, align 8, !tbaa !11
  %342 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %342, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

343:                                              ; preds = %334
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  br label %346

346:                                              ; preds = %345
  %347 = getelementptr inbounds [3 x float], ptr %3, i64 0, i64 2
  %348 = load float, ptr %347, align 4, !tbaa !5
  %349 = call zeroext i1 @test_eq(float noundef %348, float noundef 1.000000e+00)
  br i1 %349, label %355, label %350

350:                                              ; preds = %346
  %351 = load ptr, ptr @stderr, align 8, !tbaa !9
  %352 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %351, ptr noundef @.str, ptr noundef @.str.787, i32 noundef 960, ptr noundef @.str.180) #5
  %353 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %353, align 8, !tbaa !11
  %354 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 0, ptr %354, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

355:                                              ; preds = %346
  br label %356

356:                                              ; preds = %355
  br label %357

357:                                              ; preds = %356
  %358 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 0
  store ptr null, ptr %358, align 8, !tbaa !11
  %359 = getelementptr inbounds %struct.test_status_t, ptr %1, i32 0, i32 1
  store i32 1, ptr %359, align 8, !tbaa !14
  store i32 1, ptr %6, align 4
  br label %360

360:                                              ; preds = %357, %350, %338, %326, %307, %295, %283, %264, %252, %240, %221, %209, %197, %178, %166, %154, %135, %123, %111, %92, %80, %68, %49, %37, %25
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %2) #5
  %361 = load { ptr, i32 }, ptr %1, align 8
  ret { ptr, i32 } %361
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { alwaysinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #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 = { 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 = !{!"float", !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, !10, i64 0}
!12 = !{!"test_status_t", !10, i64 0, !13, i64 8}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !13, i64 8}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [94 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.178 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.179 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.180 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.181 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.787 = external hidden unnamed_addr constant [64 x i8], align 1
@__const.test_glm_quat_rotatev.v1 = external hidden unnamed_addr constant [3 x float], align 4
@__const.test_glm_quat_rotatev.v2 = external hidden unnamed_addr constant [3 x float], align 4

; 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 nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: alwaysinline nounwind uwtable
declare hidden zeroext i1 @test_eq(float noundef, float noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @glm_quatv(ptr noundef, float noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @glm_quat_rotatev(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local { ptr, i32 } @test_glm_quat_rotatev() local_unnamed_addr #4 {
  %1 = alloca [3 x float], align 4
  %2 = alloca [3 x float], align 4
  %3 = alloca [4 x float], align 16
  %4 = alloca [3 x float], align 8
  %5 = alloca [3 x float], align 8
  %6 = alloca [3 x float], align 8
  %7 = alloca [3 x float], align 8
  %8 = alloca [3 x float], align 8
  %9 = alloca [3 x float], align 8
  %10 = alloca [3 x float], align 8
  %11 = alloca [3 x float], align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %1) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %1, ptr noundef nonnull align 4 dereferenceable(12) @__const.test_glm_quat_rotatev.v1, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %2) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef nonnull align 4 dereferenceable(12) @__const.test_glm_quat_rotatev.v2, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #5
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %4, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %4, i64 8
  store float 0.000000e+00, ptr %12, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %4)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %1, ptr noundef nonnull %1)
  %13 = load float, ptr %1, align 4, !tbaa !5
  %14 = call zeroext i1 @test_eq(float noundef %13, float noundef 0.000000e+00)
  br i1 %14, label %18, label %15

15:                                               ; preds = %0
  %16 = load ptr, ptr @stderr, align 8, !tbaa !9
  %17 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %16, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 902, ptr noundef nonnull @.str.27) #6
  br label %167

18:                                               ; preds = %0
  %19 = getelementptr inbounds i8, ptr %1, i64 4
  %20 = load float, ptr %19, align 4, !tbaa !5
  %21 = call zeroext i1 @test_eq(float noundef %20, float noundef 0.000000e+00)
  br i1 %21, label %25, label %22

22:                                               ; preds = %18
  %23 = load ptr, ptr @stderr, align 8, !tbaa !9
  %24 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 903, ptr noundef nonnull @.str.28) #6
  br label %167

25:                                               ; preds = %18
  %26 = getelementptr inbounds i8, ptr %1, i64 8
  %27 = load float, ptr %26, align 4, !tbaa !5
  %28 = call zeroext i1 @test_eq(float noundef %27, float noundef -1.000000e+00)
  br i1 %28, label %32, label %29

29:                                               ; preds = %25
  %30 = load ptr, ptr @stderr, align 8, !tbaa !9
  %31 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 904, ptr noundef nonnull @.str.177) #6
  br label %167

32:                                               ; preds = %25
  store <2 x float> <float 1.000000e+00, float 0.000000e+00>, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %5, i64 8
  store float 0.000000e+00, ptr %33, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %5)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %1, ptr noundef nonnull %1)
  %34 = load float, ptr %1, align 4, !tbaa !5
  %35 = call zeroext i1 @test_eq(float noundef %34, float noundef 0.000000e+00)
  br i1 %35, label %39, label %36

36:                                               ; preds = %32
  %37 = load ptr, ptr @stderr, align 8, !tbaa !9
  %38 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 910, ptr noundef nonnull @.str.27) #6
  br label %167

39:                                               ; preds = %32
  %40 = load float, ptr %19, align 4, !tbaa !5
  %41 = call zeroext i1 @test_eq(float noundef %40, float noundef 1.000000e+00)
  br i1 %41, label %45, label %42

42:                                               ; preds = %39
  %43 = load ptr, ptr @stderr, align 8, !tbaa !9
  %44 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 911, ptr noundef nonnull @.str.63) #6
  br label %167

45:                                               ; preds = %39
  %46 = load float, ptr %26, align 4, !tbaa !5
  %47 = call zeroext i1 @test_eq(float noundef %46, float noundef 0.000000e+00)
  br i1 %47, label %51, label %48

48:                                               ; preds = %45
  %49 = load ptr, ptr @stderr, align 8, !tbaa !9
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %49, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 912, ptr noundef nonnull @.str.154) #6
  br label %167

51:                                               ; preds = %45
  store <2 x float> zeroinitializer, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %6, i64 8
  store float 1.000000e+00, ptr %52, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %6)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %1, ptr noundef nonnull %1)
  %53 = load float, ptr %1, align 4, !tbaa !5
  %54 = call zeroext i1 @test_eq(float noundef %53, float noundef -1.000000e+00)
  br i1 %54, label %58, label %55

55:                                               ; preds = %51
  %56 = load ptr, ptr @stderr, align 8, !tbaa !9
  %57 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 918, ptr noundef nonnull @.str.64) #6
  br label %167

58:                                               ; preds = %51
  %59 = load float, ptr %19, align 4, !tbaa !5
  %60 = call zeroext i1 @test_eq(float noundef %59, float noundef 0.000000e+00)
  br i1 %60, label %64, label %61

61:                                               ; preds = %58
  %62 = load ptr, ptr @stderr, align 8, !tbaa !9
  %63 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 919, ptr noundef nonnull @.str.28) #6
  br label %167

64:                                               ; preds = %58
  %65 = load float, ptr %26, align 4, !tbaa !5
  %66 = call zeroext i1 @test_eq(float noundef %65, float noundef 0.000000e+00)
  br i1 %66, label %70, label %67

67:                                               ; preds = %64
  %68 = load ptr, ptr @stderr, align 8, !tbaa !9
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 920, ptr noundef nonnull @.str.154) #6
  br label %167

70:                                               ; preds = %64
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %7, i64 8
  store float 0.000000e+00, ptr %71, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %7)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %2)
  %72 = load float, ptr %2, align 4, !tbaa !5
  %73 = call zeroext i1 @test_eq(float noundef %72, float noundef 1.000000e+00)
  br i1 %73, label %77, label %74

74:                                               ; preds = %70
  %75 = load ptr, ptr @stderr, align 8, !tbaa !9
  %76 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 926, ptr noundef nonnull @.str.102) #6
  br label %167

77:                                               ; preds = %70
  %78 = getelementptr inbounds i8, ptr %2, i64 4
  %79 = load float, ptr %78, align 4, !tbaa !5
  %80 = call zeroext i1 @test_eq(float noundef %79, float noundef 1.000000e+00)
  br i1 %80, label %84, label %81

81:                                               ; preds = %77
  %82 = load ptr, ptr @stderr, align 8, !tbaa !9
  %83 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 927, ptr noundef nonnull @.str.103) #6
  br label %167

84:                                               ; preds = %77
  %85 = getelementptr inbounds i8, ptr %2, i64 8
  %86 = load float, ptr %85, align 4, !tbaa !5
  %87 = call zeroext i1 @test_eq(float noundef %86, float noundef -1.000000e+00)
  br i1 %87, label %91, label %88

88:                                               ; preds = %84
  %89 = load ptr, ptr @stderr, align 8, !tbaa !9
  %90 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %89, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 928, ptr noundef nonnull @.str.178) #6
  br label %167

91:                                               ; preds = %84
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %8, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %8, i64 8
  store float 0.000000e+00, ptr %92, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %8)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %2)
  %93 = load float, ptr %2, align 4, !tbaa !5
  %94 = call zeroext i1 @test_eq(float noundef %93, float noundef -1.000000e+00)
  br i1 %94, label %98, label %95

95:                                               ; preds = %91
  %96 = load ptr, ptr @stderr, align 8, !tbaa !9
  %97 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %96, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 934, ptr noundef nonnull @.str.179) #6
  br label %167

98:                                               ; preds = %91
  %99 = load float, ptr %78, align 4, !tbaa !5
  %100 = call zeroext i1 @test_eq(float noundef %99, float noundef 1.000000e+00)
  br i1 %100, label %104, label %101

101:                                              ; preds = %98
  %102 = load ptr, ptr @stderr, align 8, !tbaa !9
  %103 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %102, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 935, ptr noundef nonnull @.str.103) #6
  br label %167

104:                                              ; preds = %98
  %105 = load float, ptr %85, align 4, !tbaa !5
  %106 = call zeroext i1 @test_eq(float noundef %105, float noundef -1.000000e+00)
  br i1 %106, label %110, label %107

107:                                              ; preds = %104
  %108 = load ptr, ptr @stderr, align 8, !tbaa !9
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 936, ptr noundef nonnull @.str.178) #6
  br label %167

110:                                              ; preds = %104
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %9, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %9, i64 8
  store float 0.000000e+00, ptr %111, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %9)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %2)
  %112 = load float, ptr %2, align 4, !tbaa !5
  %113 = call zeroext i1 @test_eq(float noundef %112, float noundef -1.000000e+00)
  br i1 %113, label %117, label %114

114:                                              ; preds = %110
  %115 = load ptr, ptr @stderr, align 8, !tbaa !9
  %116 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %115, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 942, ptr noundef nonnull @.str.179) #6
  br label %167

117:                                              ; preds = %110
  %118 = load float, ptr %78, align 4, !tbaa !5
  %119 = call zeroext i1 @test_eq(float noundef %118, float noundef 1.000000e+00)
  br i1 %119, label %123, label %120

120:                                              ; preds = %117
  %121 = load ptr, ptr @stderr, align 8, !tbaa !9
  %122 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 943, ptr noundef nonnull @.str.103) #6
  br label %167

123:                                              ; preds = %117
  %124 = load float, ptr %85, align 4, !tbaa !5
  %125 = call zeroext i1 @test_eq(float noundef %124, float noundef 1.000000e+00)
  br i1 %125, label %129, label %126

126:                                              ; preds = %123
  %127 = load ptr, ptr @stderr, align 8, !tbaa !9
  %128 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %127, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 944, ptr noundef nonnull @.str.180) #6
  br label %167

129:                                              ; preds = %123
  store <2 x float> <float 1.000000e+00, float 0.000000e+00>, ptr %10, align 8, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %10, i64 8
  store float 0.000000e+00, ptr %130, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %10)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %2)
  %131 = load float, ptr %2, align 4, !tbaa !5
  %132 = call zeroext i1 @test_eq(float noundef %131, float noundef -1.000000e+00)
  br i1 %132, label %136, label %133

133:                                              ; preds = %129
  %134 = load ptr, ptr @stderr, align 8, !tbaa !9
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 950, ptr noundef nonnull @.str.179) #6
  br label %167

136:                                              ; preds = %129
  %137 = load float, ptr %78, align 4, !tbaa !5
  %138 = call zeroext i1 @test_eq(float noundef %137, float noundef -1.000000e+00)
  br i1 %138, label %142, label %139

139:                                              ; preds = %136
  %140 = load ptr, ptr @stderr, align 8, !tbaa !9
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %140, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 951, ptr noundef nonnull @.str.181) #6
  br label %167

142:                                              ; preds = %136
  %143 = load float, ptr %85, align 4, !tbaa !5
  %144 = call zeroext i1 @test_eq(float noundef %143, float noundef 1.000000e+00)
  br i1 %144, label %148, label %145

145:                                              ; preds = %142
  %146 = load ptr, ptr @stderr, align 8, !tbaa !9
  %147 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %146, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 952, ptr noundef nonnull @.str.180) #6
  br label %167

148:                                              ; preds = %142
  store <2 x float> zeroinitializer, ptr %11, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %11, i64 8
  store float 1.000000e+00, ptr %149, align 8, !tbaa !5
  call void @glm_quatv(ptr noundef nonnull %3, float noundef 0x3FF921FB60000000, ptr noundef nonnull %11)
  call void @glm_quat_rotatev(ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %2)
  %150 = load float, ptr %2, align 4, !tbaa !5
  %151 = call zeroext i1 @test_eq(float noundef %150, float noundef 1.000000e+00)
  br i1 %151, label %155, label %152

152:                                              ; preds = %148
  %153 = load ptr, ptr @stderr, align 8, !tbaa !9
  %154 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 958, ptr noundef nonnull @.str.102) #6
  br label %167

155:                                              ; preds = %148
  %156 = load float, ptr %78, align 4, !tbaa !5
  %157 = call zeroext i1 @test_eq(float noundef %156, float noundef -1.000000e+00)
  br i1 %157, label %161, label %158

158:                                              ; preds = %155
  %159 = load ptr, ptr @stderr, align 8, !tbaa !9
  %160 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %159, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 959, ptr noundef nonnull @.str.181) #6
  br label %167

161:                                              ; preds = %155
  %162 = load float, ptr %85, align 4, !tbaa !5
  %163 = call zeroext i1 @test_eq(float noundef %162, float noundef 1.000000e+00)
  br i1 %163, label %167, label %164

164:                                              ; preds = %161
  %165 = load ptr, ptr @stderr, align 8, !tbaa !9
  %166 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %165, ptr noundef nonnull @.str, ptr noundef nonnull @.str.787, i32 noundef 960, ptr noundef nonnull @.str.180) #6
  br label %167

167:                                              ; preds = %161, %164, %158, %152, %145, %139, %133, %126, %120, %114, %107, %101, %95, %88, %81, %74, %67, %61, %55, %48, %42, %36, %29, %22, %15
  %.sroa.26.0 = phi i32 [ 0, %164 ], [ 0, %158 ], [ 0, %152 ], [ 0, %145 ], [ 0, %139 ], [ 0, %133 ], [ 0, %126 ], [ 0, %120 ], [ 0, %114 ], [ 0, %107 ], [ 0, %101 ], [ 0, %95 ], [ 0, %88 ], [ 0, %81 ], [ 0, %74 ], [ 0, %67 ], [ 0, %61 ], [ 0, %55 ], [ 0, %48 ], [ 0, %42 ], [ 0, %36 ], [ 0, %29 ], [ 0, %22 ], [ 0, %15 ], [ 1, %161 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %2) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %1) #5
  %.fca.1.insert = insertvalue { ptr, i32 } { ptr null, i32 poison }, i32 %.sroa.26.0, 1
  ret { ptr, i32 } %.fca.1.insert
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { alwaysinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nofree 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 #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 = { nounwind }
attributes #6 = { cold 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 = !{!"float", !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}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass