; LLVM IR from hbatagelo/abcg :: abcg/external/glslang/glslang/MachineIndependent (parseConst)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.glslang::TConstUnionArray" = type { ptr, ptr }
%"class.glslang::TConstTraverser" = type { %"class.glslang::TIntermTraverser", i32, %"class.glslang::TConstUnionArray", i32, ptr, i32, i8, i8, i32, i8, i32, i32 }
%"class.glslang::TIntermTraverser" = type { ptr, i8, i8, i8, i8, i32, i32, %"class.glslang::TVector" }
%"class.glslang::TVector" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<TIntermNode *, glslang::pool_allocator<TIntermNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<TIntermNode *, glslang::pool_allocator<TIntermNode *>>::_Vector_impl" = type { %"class.glslang::pool_allocator", %"struct.std::_Vector_base<TIntermNode *, glslang::pool_allocator<TIntermNode *>>::_Vector_impl_data" }
%"class.glslang::pool_allocator" = type { ptr }
%"struct.std::_Vector_base<TIntermNode *, glslang::pool_allocator<TIntermNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144)) #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7glslang15TConstTraverser18visitConstantUnionEPNS_20TIntermConstantUnionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.glslang::TConstUnionArray", align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %27 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #4
  %28 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 2
  call void @_ZN7glslang16TConstUnionArrayC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  %29 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 4
  %30 = load ptr, ptr %29, align 8, !tbaa !9
  %31 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %30)
          to label %32 unwind label %38

32:                                               ; preds = %2
  store i32 %31, ptr %6, align 4, !tbaa !22
  %33 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %34 = load i32, ptr %33, align 8, !tbaa !23
  %35 = load i32, ptr %6, align 4, !tbaa !22
  %36 = icmp sge i32 %34, %35
  br i1 %36, label %37, label %42

37:                                               ; preds = %32
  store i32 1, ptr %9, align 4
  br label %416

38:                                               ; preds = %2
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %7, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %8, align 4
  br label %419

42:                                               ; preds = %32
  %43 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 6
  %44 = load i8, ptr %43, align 4, !tbaa !24, !range !25, !noundef !26
  %45 = trunc i8 %44 to i1
  br i1 %45, label %106, label %46

46:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %47, align 8, !tbaa !27
  %49 = getelementptr inbounds ptr, ptr %48, i64 30
  %50 = load ptr, ptr %49, align 8
  %51 = invoke noundef nonnull align 8 dereferenceable(144) ptr %50(ptr noundef nonnull align 8 dereferenceable(176) %47)
          to label %52 unwind label %63

52:                                               ; preds = %46
  %53 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %51)
          to label %54 unwind label %63

54:                                               ; preds = %52
  store i32 %53, ptr %10, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193) %55)
          to label %57 unwind label %67

57:                                               ; preds = %54
  store ptr %56, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !22
  br label %58

58:                                               ; preds = %91, %57
  %59 = load i32, ptr %12, align 4, !tbaa !22
  %60 = load i32, ptr %10, align 4, !tbaa !22
  %61 = icmp slt i32 %59, %60
  br i1 %61, label %71, label %62

62:                                               ; preds = %58
  store i32 2, ptr %9, align 4
  br label %98

63:                                               ; preds = %52, %46
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %7, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %8, align 4
  br label %105

67:                                               ; preds = %54
  %68 = landingpad { ptr, i32 }
          cleanup
  %69 = extractvalue { ptr, i32 } %68, 0
  store ptr %69, ptr %7, align 8
  %70 = extractvalue { ptr, i32 } %68, 1
  store i32 %70, ptr %8, align 4
  br label %104

71:                                               ; preds = %58
  %72 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %73 = load i32, ptr %72, align 8, !tbaa !23
  %74 = load i32, ptr %6, align 4, !tbaa !22
  %75 = icmp sge i32 %73, %74
  br i1 %75, label %76, label %77

76:                                               ; preds = %71
  store i32 1, ptr %9, align 4
  br label %98

77:                                               ; preds = %71
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  %79 = load i32, ptr %12, align 4, !tbaa !22
  %80 = sext i32 %79 to i64
  %81 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %78, i64 noundef %80)
          to label %82 unwind label %94

82:                                               ; preds = %77
  %83 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %84 = load i32, ptr %83, align 8, !tbaa !23
  %85 = sext i32 %84 to i64
  %86 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %85)
          to label %87 unwind label %94

87:                                               ; preds = %82
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %86, ptr align 8 %81, i64 12, i1 false), !tbaa.struct !29
  %88 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %89 = load i32, ptr %88, align 8, !tbaa !23
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %88, align 8, !tbaa !23
  br label %91

91:                                               ; preds = %87
  %92 = load i32, ptr %12, align 4, !tbaa !22
  %93 = add nsw i32 %92, 1
  store i32 %93, ptr %12, align 4, !tbaa !22
  br label %58, !llvm.loop !33

94:                                               ; preds = %82, %77
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %7, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %104

98:                                               ; preds = %76, %62
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  %99 = load i32, ptr %9, align 4
  switch i32 %99, label %101 [
    i32 2, label %100
  ]

100:                                              ; preds = %98
  store i32 0, ptr %9, align 4
  br label %101

101:                                              ; preds = %100, %98
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %102 = load i32, ptr %9, align 4
  switch i32 %102, label %416 [
    i32 0, label %103
  ]

103:                                              ; preds = %101
  br label %415

104:                                              ; preds = %94, %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  br label %105

105:                                              ; preds = %104, %63
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %419

106:                                              ; preds = %42
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %107 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %108 = load i32, ptr %107, align 8, !tbaa !23
  %109 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 8
  %110 = load i32, ptr %109, align 8, !tbaa !35
  %111 = add nsw i32 %108, %110
  store i32 %111, ptr %13, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193) %112)
          to label %114 unwind label %134

114:                                              ; preds = %106
  store ptr %113, ptr %14, align 8, !tbaa !5
  %115 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 9
  %116 = load i8, ptr %115, align 4, !tbaa !36, !range !25, !noundef !26
  %117 = trunc i8 %116 to i1
  br i1 %117, label %180, label %118

118:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %119 = load ptr, ptr %4, align 8, !tbaa !5
  %120 = load ptr, ptr %119, align 8, !tbaa !27
  %121 = getelementptr inbounds ptr, ptr %120, i64 30
  %122 = load ptr, ptr %121, align 8
  %123 = invoke noundef nonnull align 8 dereferenceable(144) ptr %122(ptr noundef nonnull align 8 dereferenceable(176) %119)
          to label %124 unwind label %138

124:                                              ; preds = %118
  %125 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %123)
          to label %126 unwind label %138

126:                                              ; preds = %124
  store i32 %125, ptr %16, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %127 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %128 = load i32, ptr %127, align 8, !tbaa !23
  store i32 %128, ptr %17, align 4, !tbaa !22
  br label %129

129:                                              ; preds = %170, %126
  %130 = load i32, ptr %17, align 4, !tbaa !22
  %131 = load i32, ptr %13, align 4, !tbaa !22
  %132 = icmp slt i32 %130, %131
  br i1 %132, label %142, label %133

133:                                              ; preds = %129
  store i32 5, ptr %9, align 4
  br label %173

134:                                              ; preds = %180, %106
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %7, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %8, align 4
  br label %414

138:                                              ; preds = %124, %118
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %7, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %8, align 4
  br label %179

142:                                              ; preds = %129
  %143 = load i32, ptr %17, align 4, !tbaa !22
  %144 = load i32, ptr %6, align 4, !tbaa !22
  %145 = icmp sge i32 %143, %144
  br i1 %145, label %146, label %147

146:                                              ; preds = %142
  store i32 1, ptr %9, align 4
  br label %173

147:                                              ; preds = %142
  %148 = load ptr, ptr %14, align 8, !tbaa !5
  %149 = load i32, ptr %15, align 4, !tbaa !22
  %150 = sext i32 %149 to i64
  %151 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %148, i64 noundef %150)
          to label %152 unwind label %165

152:                                              ; preds = %147
  %153 = load i32, ptr %17, align 4, !tbaa !22
  %154 = sext i32 %153 to i64
  %155 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %154)
          to label %156 unwind label %165

156:                                              ; preds = %152
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %155, ptr align 8 %151, i64 12, i1 false), !tbaa.struct !29
  %157 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %158 = load i32, ptr %157, align 8, !tbaa !23
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %157, align 8, !tbaa !23
  %160 = load i32, ptr %16, align 4, !tbaa !22
  %161 = icmp sgt i32 %160, 1
  br i1 %161, label %162, label %169

162:                                              ; preds = %156
  %163 = load i32, ptr %15, align 4, !tbaa !22
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %15, align 4, !tbaa !22
  br label %169

165:                                              ; preds = %152, %147
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %7, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %179

169:                                              ; preds = %162, %156
  br label %170

170:                                              ; preds = %169
  %171 = load i32, ptr %17, align 4, !tbaa !22
  %172 = add nsw i32 %171, 1
  store i32 %172, ptr %17, align 4, !tbaa !22
  br label %129, !llvm.loop !37

173:                                              ; preds = %146, %133
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  %174 = load i32, ptr %9, align 4
  switch i32 %174, label %176 [
    i32 5, label %175
  ]

175:                                              ; preds = %173
  store i32 0, ptr %9, align 4
  br label %176

176:                                              ; preds = %175, %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  %177 = load i32, ptr %9, align 4
  switch i32 %177, label %411 [
    i32 0, label %178
  ]

178:                                              ; preds = %176
  br label %410

179:                                              ; preds = %165, %138
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %414

180:                                              ; preds = %114
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = load ptr, ptr %181, align 8, !tbaa !27
  %183 = getelementptr inbounds ptr, ptr %182, i64 41
  %184 = load ptr, ptr %183, align 8
  %185 = invoke noundef zeroext i1 %184(ptr noundef nonnull align 8 dereferenceable(176) %181)
          to label %186 unwind label %134

186:                                              ; preds = %180
  br i1 %185, label %187, label %298

187:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !22
  br label %188

188:                                              ; preds = %294, %187
  %189 = load i32, ptr %18, align 4, !tbaa !22
  %190 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 10
  %191 = load i32, ptr %190, align 8, !tbaa !38
  %192 = icmp slt i32 %189, %191
  br i1 %192, label %194, label %193

193:                                              ; preds = %188
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %297

194:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !22
  br label %195

195:                                              ; preds = %289, %194
  %196 = load i32, ptr %19, align 4, !tbaa !22
  %197 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 11
  %198 = load i32, ptr %197, align 4, !tbaa !39
  %199 = icmp slt i32 %196, %198
  br i1 %199, label %201, label %200

200:                                              ; preds = %195
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %293

201:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %202 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %203 = load i32, ptr %202, align 8, !tbaa !23
  %204 = load i32, ptr %18, align 4, !tbaa !22
  %205 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 11
  %206 = load i32, ptr %205, align 4, !tbaa !39
  %207 = mul nsw i32 %204, %206
  %208 = add nsw i32 %203, %207
  %209 = load i32, ptr %19, align 4, !tbaa !22
  %210 = add nsw i32 %208, %209
  store i32 %210, ptr %20, align 4, !tbaa !22
  %211 = load i32, ptr %19, align 4, !tbaa !22
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = load ptr, ptr %212, align 8, !tbaa !27
  %214 = getelementptr inbounds ptr, ptr %213, i64 30
  %215 = load ptr, ptr %214, align 8
  %216 = invoke noundef nonnull align 8 dereferenceable(144) ptr %215(ptr noundef nonnull align 8 dereferenceable(176) %212)
          to label %217 unwind label %263

217:                                              ; preds = %201
  %218 = load ptr, ptr %216, align 8, !tbaa !27
  %219 = getelementptr inbounds ptr, ptr %218, i64 14
  %220 = load ptr, ptr %219, align 8
  %221 = invoke noundef i32 %220(ptr noundef nonnull align 8 dereferenceable(144) %216)
          to label %222 unwind label %263

222:                                              ; preds = %217
  %223 = icmp slt i32 %211, %221
  br i1 %223, label %224, label %271

224:                                              ; preds = %222
  %225 = load i32, ptr %18, align 4, !tbaa !22
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = load ptr, ptr %226, align 8, !tbaa !27
  %228 = getelementptr inbounds ptr, ptr %227, i64 30
  %229 = load ptr, ptr %228, align 8
  %230 = invoke noundef nonnull align 8 dereferenceable(144) ptr %229(ptr noundef nonnull align 8 dereferenceable(176) %226)
          to label %231 unwind label %263

231:                                              ; preds = %224
  %232 = load ptr, ptr %230, align 8, !tbaa !27
  %233 = getelementptr inbounds ptr, ptr %232, i64 13
  %234 = load ptr, ptr %233, align 8
  %235 = invoke noundef i32 %234(ptr noundef nonnull align 8 dereferenceable(144) %230)
          to label %236 unwind label %263

236:                                              ; preds = %231
  %237 = icmp slt i32 %225, %235
  br i1 %237, label %238, label %271

238:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %239 = load i32, ptr %18, align 4, !tbaa !22
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = load ptr, ptr %240, align 8, !tbaa !27
  %242 = getelementptr inbounds ptr, ptr %241, i64 30
  %243 = load ptr, ptr %242, align 8
  %244 = invoke noundef nonnull align 8 dereferenceable(144) ptr %243(ptr noundef nonnull align 8 dereferenceable(176) %240)
          to label %245 unwind label %267

245:                                              ; preds = %238
  %246 = load ptr, ptr %244, align 8, !tbaa !27
  %247 = getelementptr inbounds ptr, ptr %246, i64 14
  %248 = load ptr, ptr %247, align 8
  %249 = invoke noundef i32 %248(ptr noundef nonnull align 8 dereferenceable(144) %244)
          to label %250 unwind label %267

250:                                              ; preds = %245
  %251 = mul nsw i32 %239, %249
  %252 = load i32, ptr %19, align 4, !tbaa !22
  %253 = add nsw i32 %251, %252
  store i32 %253, ptr %21, align 4, !tbaa !22
  %254 = load ptr, ptr %14, align 8, !tbaa !5
  %255 = load i32, ptr %21, align 4, !tbaa !22
  %256 = sext i32 %255 to i64
  %257 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %254, i64 noundef %256)
          to label %258 unwind label %267

258:                                              ; preds = %250
  %259 = load i32, ptr %20, align 4, !tbaa !22
  %260 = sext i32 %259 to i64
  %261 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %260)
          to label %262 unwind label %267

262:                                              ; preds = %258
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %261, ptr align 8 %257, i64 12, i1 false), !tbaa.struct !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %288

263:                                              ; preds = %285, %281, %279, %275, %231, %224, %217, %201
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %7, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %8, align 4
  br label %292

267:                                              ; preds = %258, %250, %245, %238
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %7, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %292

271:                                              ; preds = %236, %222
  %272 = load i32, ptr %19, align 4, !tbaa !22
  %273 = load i32, ptr %18, align 4, !tbaa !22
  %274 = icmp eq i32 %272, %273
  br i1 %274, label %275, label %281

275:                                              ; preds = %271
  %276 = load i32, ptr %20, align 4, !tbaa !22
  %277 = sext i32 %276 to i64
  %278 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %277)
          to label %279 unwind label %263

279:                                              ; preds = %275
  invoke void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %278, double noundef 1.000000e+00)
          to label %280 unwind label %263

280:                                              ; preds = %279
  br label %287

281:                                              ; preds = %271
  %282 = load i32, ptr %20, align 4, !tbaa !22
  %283 = sext i32 %282 to i64
  %284 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %283)
          to label %285 unwind label %263

285:                                              ; preds = %281
  invoke void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %284, double noundef 0.000000e+00)
          to label %286 unwind label %263

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286, %280
  br label %288

288:                                              ; preds = %287, %262
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %19, align 4, !tbaa !22
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %19, align 4, !tbaa !22
  br label %195, !llvm.loop !40

292:                                              ; preds = %267, %263
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %414

293:                                              ; preds = %200
  br label %294

294:                                              ; preds = %293
  %295 = load i32, ptr %18, align 4, !tbaa !22
  %296 = add nsw i32 %295, 1
  store i32 %296, ptr %18, align 4, !tbaa !22
  br label %188, !llvm.loop !41

297:                                              ; preds = %193
  br label %409

298:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %299 = load ptr, ptr %4, align 8, !tbaa !5
  %300 = load ptr, ptr %299, align 8, !tbaa !27
  %301 = getelementptr inbounds ptr, ptr %300, i64 30
  %302 = load ptr, ptr %301, align 8
  %303 = invoke noundef nonnull align 8 dereferenceable(144) ptr %302(ptr noundef nonnull align 8 dereferenceable(176) %299)
          to label %304 unwind label %316

304:                                              ; preds = %298
  %305 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %303)
          to label %306 unwind label %316

306:                                              ; preds = %304
  store i32 %305, ptr %22, align 4, !tbaa !22
  %307 = load i32, ptr %22, align 4, !tbaa !22
  %308 = icmp eq i32 %307, 1
  br i1 %308, label %309, label %363

309:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 0, ptr %23, align 4, !tbaa !22
  br label %310

310:                                              ; preds = %359, %309
  %311 = load i32, ptr %23, align 4, !tbaa !22
  %312 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 10
  %313 = load i32, ptr %312, align 8, !tbaa !38
  %314 = icmp slt i32 %311, %313
  br i1 %314, label %320, label %315

315:                                              ; preds = %310
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %362

316:                                              ; preds = %304, %298
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %7, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %8, align 4
  br label %408

320:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 0, ptr %24, align 4, !tbaa !22
  br label %321

321:                                              ; preds = %355, %320
  %322 = load i32, ptr %24, align 4, !tbaa !22
  %323 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 11
  %324 = load i32, ptr %323, align 4, !tbaa !39
  %325 = icmp slt i32 %322, %324
  br i1 %325, label %327, label %326

326:                                              ; preds = %321
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  br label %358

327:                                              ; preds = %321
  %328 = load i32, ptr %24, align 4, !tbaa !22
  %329 = load i32, ptr %23, align 4, !tbaa !22
  %330 = icmp eq i32 %328, %329
  br i1 %330, label %331, label %344

331:                                              ; preds = %327
  %332 = load ptr, ptr %14, align 8, !tbaa !5
  %333 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %332, i64 noundef 0)
          to label %334 unwind label %340

334:                                              ; preds = %331
  %335 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %336 = load i32, ptr %335, align 8, !tbaa !23
  %337 = sext i32 %336 to i64
  %338 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %337)
          to label %339 unwind label %340

339:                                              ; preds = %334
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %338, ptr align 8 %333, i64 12, i1 false), !tbaa.struct !29
  br label %351

340:                                              ; preds = %349, %344, %334, %331
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %7, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %408

344:                                              ; preds = %327
  %345 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %346 = load i32, ptr %345, align 8, !tbaa !23
  %347 = sext i32 %346 to i64
  %348 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %347)
          to label %349 unwind label %340

349:                                              ; preds = %344
  invoke void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %348, double noundef 0.000000e+00)
          to label %350 unwind label %340

350:                                              ; preds = %349
  br label %351

351:                                              ; preds = %350, %339
  %352 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %353 = load i32, ptr %352, align 8, !tbaa !23
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %352, align 8, !tbaa !23
  br label %355

355:                                              ; preds = %351
  %356 = load i32, ptr %24, align 4, !tbaa !22
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %24, align 4, !tbaa !22
  br label %321, !llvm.loop !42

358:                                              ; preds = %326
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %23, align 4, !tbaa !22
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %23, align 4, !tbaa !22
  br label %310, !llvm.loop !43

362:                                              ; preds = %315
  br label %404

363:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %25, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %364 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %365 = load i32, ptr %364, align 8, !tbaa !23
  store i32 %365, ptr %26, align 4, !tbaa !22
  br label %366

366:                                              ; preds = %391, %363
  %367 = load i32, ptr %26, align 4, !tbaa !22
  %368 = load i32, ptr %13, align 4, !tbaa !22
  %369 = icmp slt i32 %367, %368
  br i1 %369, label %371, label %370

370:                                              ; preds = %366
  store i32 20, ptr %9, align 4
  br label %398

371:                                              ; preds = %366
  %372 = load i32, ptr %26, align 4, !tbaa !22
  %373 = load i32, ptr %6, align 4, !tbaa !22
  %374 = icmp sge i32 %372, %373
  br i1 %374, label %375, label %376

375:                                              ; preds = %371
  store i32 1, ptr %9, align 4
  br label %398

376:                                              ; preds = %371
  %377 = load ptr, ptr %14, align 8, !tbaa !5
  %378 = load i32, ptr %25, align 4, !tbaa !22
  %379 = sext i32 %378 to i64
  %380 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %377, i64 noundef %379)
          to label %381 unwind label %394

381:                                              ; preds = %376
  %382 = load i32, ptr %26, align 4, !tbaa !22
  %383 = sext i32 %382 to i64
  %384 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %383)
          to label %385 unwind label %394

385:                                              ; preds = %381
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %384, ptr align 8 %380, i64 12, i1 false), !tbaa.struct !29
  %386 = getelementptr inbounds %"class.glslang::TConstTraverser", ptr %27, i32 0, i32 1
  %387 = load i32, ptr %386, align 8, !tbaa !23
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %386, align 8, !tbaa !23
  %389 = load i32, ptr %25, align 4, !tbaa !22
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %25, align 4, !tbaa !22
  br label %391

391:                                              ; preds = %385
  %392 = load i32, ptr %26, align 4, !tbaa !22
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %26, align 4, !tbaa !22
  br label %366, !llvm.loop !44

394:                                              ; preds = %381, %376
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %7, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %408

398:                                              ; preds = %375, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %399 = load i32, ptr %9, align 4
  switch i32 %399, label %401 [
    i32 20, label %400
  ]

400:                                              ; preds = %398
  store i32 0, ptr %9, align 4
  br label %401

401:                                              ; preds = %400, %398
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  %402 = load i32, ptr %9, align 4
  switch i32 %402, label %405 [
    i32 0, label %403
  ]

403:                                              ; preds = %401
  br label %404

404:                                              ; preds = %403, %362
  store i32 0, ptr %9, align 4
  br label %405

405:                                              ; preds = %404, %401
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  %406 = load i32, ptr %9, align 4
  switch i32 %406, label %411 [
    i32 0, label %407
  ]

407:                                              ; preds = %405
  br label %409

408:                                              ; preds = %394, %340, %316
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %414

409:                                              ; preds = %407, %297
  br label %410

410:                                              ; preds = %409, %178
  store i32 0, ptr %9, align 4
  br label %411

411:                                              ; preds = %410, %405, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  %412 = load i32, ptr %9, align 4
  switch i32 %412, label %416 [
    i32 0, label %413
  ]

413:                                              ; preds = %411
  br label %415

414:                                              ; preds = %408, %292, %179, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %419

415:                                              ; preds = %413, %103
  store i32 0, ptr %9, align 4
  br label %416

416:                                              ; preds = %415, %411, %101, %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #4
  %417 = load i32, ptr %9, align 4
  switch i32 %417, label %425 [
    i32 0, label %418
    i32 1, label %418
  ]

418:                                              ; preds = %416, %416
  ret void

419:                                              ; preds = %414, %105, %38
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #4
  br label %420

420:                                              ; preds = %419
  %421 = load ptr, ptr %7, align 8
  %422 = load i32, ptr %8, align 4
  %423 = insertvalue { ptr, i32 } poison, ptr %421, 0
  %424 = insertvalue { ptr, i32 } %423, i32 %422, 1
  resume { ptr, i32 } %424

425:                                              ; preds = %416
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang16TConstUnionArrayC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

; 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) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12), double noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 88}
!10 = !{!"_ZTSN7glslang15TConstTraverserE", !11, i64 0, !13, i64 56, !20, i64 64, !21, i64 80, !6, i64 88, !21, i64 96, !12, i64 100, !12, i64 101, !13, i64 104, !12, i64 108, !13, i64 112, !13, i64 116}
!11 = !{!"_ZTSN7glslang16TIntermTraverserE", !12, i64 8, !12, i64 9, !12, i64 10, !12, i64 11, !13, i64 12, !13, i64 16, !14, i64 24}
!12 = !{!"bool", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSN7glslang7TVectorIP11TIntermNodeEE", !15, i64 0}
!15 = !{!"_ZTSSt6vectorIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE12_Vector_implE", !18, i64 0, !19, i64 8}
!18 = !{!"_ZTSN7glslang14pool_allocatorIP11TIntermNodeEE", !6, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSN7glslang16TConstUnionArrayE", !6, i64 8}
!21 = !{!"_ZTSN7glslang9TOperatorE", !7, i64 0}
!22 = !{!13, !13, i64 0}
!23 = !{!10, !13, i64 56}
!24 = !{!10, !12, i64 100}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!28, !28, i64 0}
!28 = !{!"vtable pointer", !8, i64 0}
!29 = !{i64 0, i64 8, !30, i64 8, i64 4, !31}
!30 = !{!7, !7, i64 0}
!31 = !{!32, !32, i64 0}
!32 = !{!"_ZTSN7glslang10TBasicTypeE", !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!10, !13, i64 104}
!36 = !{!10, !12, i64 108}
!37 = distinct !{!37, !34}
!38 = !{!10, !13, i64 112}
!39 = !{!10, !13, i64 116}
!40 = distinct !{!40, !34}
!41 = distinct !{!41, !34}
!42 = distinct !{!42, !34}
!43 = distinct !{!43, !34}
!44 = distinct !{!44, !34}


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

%"class.glslang::TConstUnionArray" = type { ptr, ptr }

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7glslang15TConstTraverser18visitConstantUnionEPNS_20TIntermConstantUnionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %1) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.glslang::TConstUnionArray", align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #5
  %4 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZN7glslang16TConstUnionArrayC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %4) #5
  %5 = getelementptr inbounds i8, ptr %0, i64 88
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %6)
          to label %8 unwind label %11

8:                                                ; preds = %2
  %9 = getelementptr inbounds i8, ptr %0, i64 56
  %10 = load i32, ptr %9, align 8, !tbaa !21
  %.not = icmp slt i32 %10, %7
  br i1 %.not, label %13, label %.critedge

11:                                               ; preds = %2
  %12 = landingpad { ptr, i32 }
          cleanup
  br label %190

13:                                               ; preds = %8
  %14 = getelementptr inbounds i8, ptr %0, i64 100
  %15 = load i8, ptr %14, align 4, !tbaa !22, !range !23, !noundef !24
  %16 = trunc nuw i8 %15 to i1
  br i1 %16, label %36, label %17

17:                                               ; preds = %13
  %18 = load ptr, ptr %1, align 8, !tbaa !25
  %19 = getelementptr inbounds i8, ptr %18, i64 240
  %20 = load ptr, ptr %19, align 8
  %21 = invoke noundef nonnull align 8 dereferenceable(144) ptr %20(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %22 unwind label %28

22:                                               ; preds = %17
  %23 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %21)
          to label %24 unwind label %28

24:                                               ; preds = %22
  %25 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193) %1)
  %.not99116 = icmp sgt i32 %23, 0
  %26 = load i32, ptr %9, align 8
  %.not98117 = icmp slt i32 %26, %7
  %or.cond118 = select i1 %.not99116, i1 %.not98117, i1 false
  br i1 %or.cond118, label %.lr.ph.preheader, label %.critedge

.lr.ph.preheader:                                 ; preds = %24
  %27 = zext nneg i32 %23 to i64
  br label %.lr.ph

28:                                               ; preds = %22, %17
  %29 = landingpad { ptr, i32 }
          cleanup
  br label %190

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %30 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv)
  %31 = load i32, ptr %9, align 8, !tbaa !21
  %32 = sext i32 %31 to i64
  %33 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %32)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %33, ptr noundef nonnull align 8 dereferenceable(12) %30, i64 12, i1 false), !tbaa.struct !27
  %34 = load i32, ptr %9, align 8, !tbaa !21
  %35 = add nsw i32 %34, 1
  store i32 %35, ptr %9, align 8, !tbaa !21
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not99 = icmp ult i64 %indvars.iv.next, %27
  %.not98 = icmp slt i32 %35, %7
  %or.cond = select i1 %.not99, i1 %.not98, i1 false
  br i1 %or.cond, label %.lr.ph, label %.critedge, !llvm.loop !31

36:                                               ; preds = %13
  %37 = getelementptr inbounds i8, ptr %0, i64 104
  %38 = load i32, ptr %37, align 8, !tbaa !33
  %39 = add nsw i32 %38, %10
  %40 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193) %1)
  %41 = getelementptr inbounds i8, ptr %0, i64 108
  %42 = load i8, ptr %41, align 4, !tbaa !34, !range !23, !noundef !24
  %43 = trunc nuw i8 %42 to i1
  %44 = load ptr, ptr %1, align 8, !tbaa !25
  br i1 %43, label %65, label %45

45:                                               ; preds = %36
  %46 = getelementptr inbounds i8, ptr %44, i64 240
  %47 = load ptr, ptr %46, align 8
  %48 = invoke noundef nonnull align 8 dereferenceable(144) ptr %47(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %49 unwind label %58

49:                                               ; preds = %45
  %50 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %48)
          to label %51 unwind label %58

51:                                               ; preds = %49
  %52 = load i32, ptr %9, align 8, !tbaa !21
  %invariant.smin = call i32 @llvm.smin.i32(i32 %39, i32 %7)
  %or.cond107120 = icmp slt i32 %52, %invariant.smin
  br i1 %or.cond107120, label %.lr.ph123, label %.critedge

.lr.ph123:                                        ; preds = %51
  %53 = icmp sgt i32 %50, 1
  %54 = sext i32 %52 to i64
  %55 = zext i1 %53 to i64
  br label %60

56:                                               ; preds = %65
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %190

58:                                               ; preds = %49, %45
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %190

60:                                               ; preds = %.lr.ph123, %60
  %indvars.iv146 = phi i64 [ 0, %.lr.ph123 ], [ %indvars.iv.next147, %60 ]
  %indvars.iv144 = phi i64 [ %54, %.lr.ph123 ], [ %indvars.iv.next145, %60 ]
  %61 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %40, i64 noundef %indvars.iv146)
  %62 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %indvars.iv144)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %62, ptr noundef nonnull align 8 dereferenceable(12) %61, i64 12, i1 false), !tbaa.struct !27
  %63 = load i32, ptr %9, align 8, !tbaa !21
  %64 = add nsw i32 %63, 1
  store i32 %64, ptr %9, align 8, !tbaa !21
  %indvars.iv.next147 = add nuw nsw i64 %indvars.iv146, %55
  %indvars.iv.next145 = add nsw i64 %indvars.iv144, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next145 to i32
  %exitcond.not = icmp eq i32 %invariant.smin, %lftr.wideiv
  br i1 %exitcond.not, label %.critedge, label %60, !llvm.loop !35

65:                                               ; preds = %36
  %66 = getelementptr inbounds i8, ptr %44, i64 328
  %67 = load ptr, ptr %66, align 8
  %68 = invoke noundef zeroext i1 %67(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %69 unwind label %56

69:                                               ; preds = %65
  br i1 %68, label %.preheader109, label %142

.preheader109:                                    ; preds = %69
  %70 = getelementptr inbounds i8, ptr %0, i64 112
  %71 = load i32, ptr %70, align 8, !tbaa !36
  %72 = icmp sgt i32 %71, 0
  br i1 %72, label %.preheader.lr.ph, label %.critedge

.preheader.lr.ph:                                 ; preds = %.preheader109
  %73 = getelementptr inbounds i8, ptr %0, i64 116
  %74 = load i32, ptr %73, align 4, !tbaa !37
  %75 = icmp sgt i32 %74, 0
  br i1 %75, label %.preheader, label %.critedge

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge135
  %76 = phi i32 [ %79, %._crit_edge135 ], [ %71, %.preheader.lr.ph ]
  %77 = phi i32 [ %80, %._crit_edge135 ], [ %74, %.preheader.lr.ph ]
  %.090136 = phi i32 [ %81, %._crit_edge135 ], [ 0, %.preheader.lr.ph ]
  %78 = icmp sgt i32 %77, 0
  br i1 %78, label %.lr.ph134, label %._crit_edge135

._crit_edge135.loopexit:                          ; preds = %138
  %.pre159 = load i32, ptr %70, align 8, !tbaa !36
  br label %._crit_edge135

._crit_edge135:                                   ; preds = %._crit_edge135.loopexit, %.preheader
  %79 = phi i32 [ %.pre159, %._crit_edge135.loopexit ], [ %76, %.preheader ]
  %80 = phi i32 [ %140, %._crit_edge135.loopexit ], [ %77, %.preheader ]
  %81 = add nuw nsw i32 %.090136, 1
  %82 = icmp slt i32 %81, %79
  br i1 %82, label %.preheader, label %.critedge, !llvm.loop !38

.lr.ph134:                                        ; preds = %.preheader, %138
  %83 = phi i32 [ %140, %138 ], [ %77, %.preheader ]
  %.089132 = phi i32 [ %139, %138 ], [ 0, %.preheader ]
  %84 = load i32, ptr %9, align 8, !tbaa !21
  %85 = mul nsw i32 %83, %.090136
  %86 = add i32 %85, %.089132
  %87 = add i32 %86, %84
  %88 = load ptr, ptr %1, align 8, !tbaa !25
  %89 = getelementptr inbounds i8, ptr %88, i64 240
  %90 = load ptr, ptr %89, align 8
  %91 = invoke noundef nonnull align 8 dereferenceable(144) ptr %90(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %92 unwind label %128

92:                                               ; preds = %.lr.ph134
  %93 = load ptr, ptr %91, align 8, !tbaa !25
  %94 = getelementptr inbounds i8, ptr %93, i64 112
  %95 = load ptr, ptr %94, align 8
  %96 = invoke noundef i32 %95(ptr noundef nonnull align 8 dereferenceable(144) %91)
          to label %97 unwind label %128

97:                                               ; preds = %92
  %98 = icmp slt i32 %.089132, %96
  br i1 %98, label %99, label %132

99:                                               ; preds = %97
  %100 = load ptr, ptr %1, align 8, !tbaa !25
  %101 = getelementptr inbounds i8, ptr %100, i64 240
  %102 = load ptr, ptr %101, align 8
  %103 = invoke noundef nonnull align 8 dereferenceable(144) ptr %102(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %104 unwind label %128

104:                                              ; preds = %99
  %105 = load ptr, ptr %103, align 8, !tbaa !25
  %106 = getelementptr inbounds i8, ptr %105, i64 104
  %107 = load ptr, ptr %106, align 8
  %108 = invoke noundef i32 %107(ptr noundef nonnull align 8 dereferenceable(144) %103)
          to label %109 unwind label %128

109:                                              ; preds = %104
  %110 = icmp slt i32 %.090136, %108
  br i1 %110, label %111, label %132

111:                                              ; preds = %109
  %112 = load ptr, ptr %1, align 8, !tbaa !25
  %113 = getelementptr inbounds i8, ptr %112, i64 240
  %114 = load ptr, ptr %113, align 8
  %115 = invoke noundef nonnull align 8 dereferenceable(144) ptr %114(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %116 unwind label %130

116:                                              ; preds = %111
  %117 = load ptr, ptr %115, align 8, !tbaa !25
  %118 = getelementptr inbounds i8, ptr %117, i64 112
  %119 = load ptr, ptr %118, align 8
  %120 = invoke noundef i32 %119(ptr noundef nonnull align 8 dereferenceable(144) %115)
          to label %121 unwind label %130

121:                                              ; preds = %116
  %122 = mul nsw i32 %120, %.090136
  %123 = add nsw i32 %122, %.089132
  %124 = sext i32 %123 to i64
  %125 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %40, i64 noundef %124)
  %126 = sext i32 %87 to i64
  %127 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %126)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %127, ptr noundef nonnull align 8 dereferenceable(12) %125, i64 12, i1 false), !tbaa.struct !27
  br label %138

128:                                              ; preds = %104, %99, %92, %.lr.ph134
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %190

130:                                              ; preds = %116, %111
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %190

132:                                              ; preds = %109, %97
  %133 = icmp eq i32 %.089132, %.090136
  %134 = sext i32 %87 to i64
  %135 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %134)
  br i1 %133, label %136, label %137

136:                                              ; preds = %132
  call void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %135, double noundef 1.000000e+00)
  br label %138

137:                                              ; preds = %132
  call void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %135, double noundef 0.000000e+00)
  br label %138

138:                                              ; preds = %136, %137, %121
  %139 = add nuw nsw i32 %.089132, 1
  %140 = load i32, ptr %73, align 4, !tbaa !37
  %141 = icmp slt i32 %139, %140
  br i1 %141, label %.lr.ph134, label %._crit_edge135.loopexit, !llvm.loop !40

142:                                              ; preds = %69
  %143 = load ptr, ptr %1, align 8, !tbaa !25
  %144 = getelementptr inbounds i8, ptr %143, i64 240
  %145 = load ptr, ptr %144, align 8
  %146 = invoke noundef nonnull align 8 dereferenceable(144) ptr %145(ptr noundef nonnull align 8 dereferenceable(176) %1)
          to label %147 unwind label %160

147:                                              ; preds = %142
  %148 = invoke noundef i32 @_ZNK7glslang5TType20computeNumComponentsEv(ptr noundef nonnull align 8 dereferenceable(144) %146)
          to label %149 unwind label %160

149:                                              ; preds = %147
  %150 = icmp eq i32 %148, 1
  br i1 %150, label %.preheader111, label %182

.preheader111:                                    ; preds = %149
  %151 = getelementptr inbounds i8, ptr %0, i64 112
  %152 = load i32, ptr %151, align 8, !tbaa !36
  %153 = icmp sgt i32 %152, 0
  br i1 %153, label %.preheader110.lr.ph, label %.critedge

.preheader110.lr.ph:                              ; preds = %.preheader111
  %154 = getelementptr inbounds i8, ptr %0, i64 116
  %155 = load i32, ptr %154, align 4, !tbaa !37
  %156 = icmp sgt i32 %155, 0
  br i1 %156, label %.preheader110, label %.critedge

.preheader110:                                    ; preds = %.preheader110.lr.ph, %._crit_edge
  %157 = phi i32 [ %162, %._crit_edge ], [ %152, %.preheader110.lr.ph ]
  %158 = phi i32 [ %163, %._crit_edge ], [ %155, %.preheader110.lr.ph ]
  %.081131 = phi i32 [ %164, %._crit_edge ], [ 0, %.preheader110.lr.ph ]
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %.lr.ph130, label %._crit_edge

160:                                              ; preds = %147, %142
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %190

._crit_edge.loopexit:                             ; preds = %176
  %.pre = load i32, ptr %151, align 8, !tbaa !36
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader110
  %162 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %157, %.preheader110 ]
  %163 = phi i32 [ %180, %._crit_edge.loopexit ], [ %158, %.preheader110 ]
  %164 = add nuw nsw i32 %.081131, 1
  %165 = icmp slt i32 %164, %162
  br i1 %165, label %.preheader110, label %.critedge, !llvm.loop !41

.lr.ph130:                                        ; preds = %.preheader110, %176
  %.080129 = phi i32 [ %179, %176 ], [ 0, %.preheader110 ]
  %166 = icmp eq i32 %.080129, %.081131
  br i1 %166, label %167, label %172

167:                                              ; preds = %.lr.ph130
  %168 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %40, i64 noundef 0)
  %169 = load i32, ptr %9, align 8, !tbaa !21
  %170 = sext i32 %169 to i64
  %171 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %170)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %171, ptr noundef nonnull align 8 dereferenceable(12) %168, i64 12, i1 false), !tbaa.struct !27
  br label %176

172:                                              ; preds = %.lr.ph130
  %173 = load i32, ptr %9, align 8, !tbaa !21
  %174 = sext i32 %173 to i64
  %175 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %174)
  call void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12) %175, double noundef 0.000000e+00)
  br label %176

176:                                              ; preds = %172, %167
  %177 = load i32, ptr %9, align 8, !tbaa !21
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %9, align 8, !tbaa !21
  %179 = add nuw nsw i32 %.080129, 1
  %180 = load i32, ptr %154, align 4, !tbaa !37
  %181 = icmp slt i32 %179, %180
  br i1 %181, label %.lr.ph130, label %._crit_edge.loopexit, !llvm.loop !42

182:                                              ; preds = %149
  %183 = load i32, ptr %9, align 8, !tbaa !21
  %invariant.smin124 = call i32 @llvm.smin.i32(i32 %39, i32 %7)
  %or.cond108125 = icmp slt i32 %183, %invariant.smin124
  br i1 %or.cond108125, label %.lr.ph128.preheader, label %.critedge

.lr.ph128.preheader:                              ; preds = %182
  %184 = sext i32 %183 to i64
  %185 = sub i32 %invariant.smin124, %183
  %wide.trip.count = zext i32 %185 to i64
  br label %.lr.ph128

.lr.ph128:                                        ; preds = %.lr.ph128.preheader, %.lr.ph128
  %indvars.iv153 = phi i64 [ 0, %.lr.ph128.preheader ], [ %indvars.iv.next154, %.lr.ph128 ]
  %indvars.iv151 = phi i64 [ %184, %.lr.ph128.preheader ], [ %indvars.iv.next152, %.lr.ph128 ]
  %186 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %40, i64 noundef %indvars.iv153)
  %187 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16) %3, i64 noundef %indvars.iv151)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %187, ptr noundef nonnull align 8 dereferenceable(12) %186, i64 12, i1 false), !tbaa.struct !27
  %188 = load i32, ptr %9, align 8, !tbaa !21
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %9, align 8, !tbaa !21
  %indvars.iv.next154 = add nuw nsw i64 %indvars.iv153, 1
  %indvars.iv.next152 = add nsw i64 %indvars.iv151, 1
  %exitcond158.not = icmp eq i64 %indvars.iv.next154, %wide.trip.count
  br i1 %exitcond158.not, label %.critedge, label %.lr.ph128, !llvm.loop !43

.critedge:                                        ; preds = %.lr.ph, %60, %.lr.ph128, %._crit_edge, %._crit_edge135, %.preheader110.lr.ph, %.preheader.lr.ph, %24, %51, %182, %.preheader111, %.preheader109, %8
  call void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  ret void

190:                                              ; preds = %56, %58, %160, %130, %128, %28, %11
  %.pn.pn.pn = phi { ptr, i32 } [ %29, %28 ], [ %12, %11 ], [ %161, %160 ], [ %57, %56 ], [ %59, %58 ], [ %131, %130 ], [ %129, %128 ]
  call void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #5
  resume { ptr, i32 } %.pn.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang16TConstUnionArrayC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK7glslang20TIntermConstantUnion13getConstArrayEv(ptr noundef nonnull align 8 dereferenceable(193)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZN7glslang16TConstUnionArrayixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

; 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) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang11TConstUnion9setDConstEd(ptr noundef nonnull align 8 dereferenceable(12), double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang16TConstUnionArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !17, i64 88}
!6 = !{!"_ZTSN7glslang15TConstTraverserE", !7, i64 0, !11, i64 56, !19, i64 64, !20, i64 80, !17, i64 88, !20, i64 96, !8, i64 100, !8, i64 101, !11, i64 104, !8, i64 108, !11, i64 112, !11, i64 116}
!7 = !{!"_ZTSN7glslang16TIntermTraverserE", !8, i64 8, !8, i64 9, !8, i64 10, !8, i64 11, !11, i64 12, !11, i64 16, !12, i64 24}
!8 = !{!"bool", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"_ZTSN7glslang7TVectorIP11TIntermNodeEE", !13, i64 0}
!13 = !{!"_ZTSSt6vectorIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE12_Vector_implE", !16, i64 0, !18, i64 8}
!16 = !{!"_ZTSN7glslang14pool_allocatorIP11TIntermNodeEE", !17, i64 0}
!17 = !{!"any pointer", !9, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIP11TIntermNodeN7glslang14pool_allocatorIS1_EEE17_Vector_impl_dataE", !17, i64 0, !17, i64 8, !17, i64 16}
!19 = !{!"_ZTSN7glslang16TConstUnionArrayE", !17, i64 8}
!20 = !{!"_ZTSN7glslang9TOperatorE", !9, i64 0}
!21 = !{!6, !11, i64 56}
!22 = !{!6, !8, i64 100}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!26, !26, i64 0}
!26 = !{!"vtable pointer", !10, i64 0}
!27 = !{i64 0, i64 8, !28, i64 8, i64 4, !29}
!28 = !{!9, !9, i64 0}
!29 = !{!30, !30, i64 0}
!30 = !{!"_ZTSN7glslang10TBasicTypeE", !9, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!6, !11, i64 104}
!34 = !{!6, !8, i64 108}
!35 = distinct !{!35, !32}
!36 = !{!6, !11, i64 112}
!37 = !{!6, !11, i64 116}
!38 = distinct !{!38, !32, !39}
!39 = !{!"llvm.loop.unswitch.partial.disable"}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !32, !39}
!42 = distinct !{!42, !32}
!43 = distinct !{!43, !32}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass