; LLVM IR from Try/Tempest :: Engine/thirdparty/spirv_cross (spirv_msl)

; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.413", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.413", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.413", [4 x i8] }>
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.414", i32, i32, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::TypedID.350", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.413", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.415", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.350" = type { i32 }
%"class.spirv_cross::TypedID.415" = type { i32 }

@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.155 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.157 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.159 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.161 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj = external hidden unnamed_addr constant [80 x i8], align 1
@.str.162 = external hidden unnamed_addr constant [17 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 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

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #4

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

declare noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #4

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #4

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) #4

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #4

declare void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #5

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca %"class.spirv_cross::TypedID.413", align 4
  %14 = alloca %"class.spirv_cross::TypedID.413", align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca i32, align 4
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i64, align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca i8, align 1
  %28 = alloca i8, align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.spirv_cross::TypedID.414", align 4
  %31 = alloca %"class.spirv_cross::TypedID.413", align 4
  %32 = alloca ptr, align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.71", align 1
  %35 = alloca ptr, align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca ptr, align 8
  %38 = alloca i8, align 1
  %39 = alloca %"struct.spirv_cross::SPIRType", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca i32, align 4
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"struct.spirv_cross::SPIRType", align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca i32, align 4
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::__cxx11::basic_string", align 8
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca %"struct.spirv_cross::SPIRType", align 8
  %58 = alloca i32, align 4
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca i32, align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca i32, align 4
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"struct.spirv_cross::SPIRType", align 8
  %69 = alloca i32, align 4
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca i64, align 8
  %72 = alloca i64, align 8
  %73 = alloca i64, align 8
  %74 = alloca %"class.std::__cxx11::basic_string", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca i8, align 1
  %77 = alloca i8, align 1
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !9
  %86 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %87 = load i32, ptr %6, align 4, !tbaa !9
  %88 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %87)
  store ptr %88, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #8
  %89 = load i32, ptr %5, align 4, !tbaa !9
  %90 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %89, i32 noundef 1)
  %91 = zext i1 %90 to i8
  store i8 %91, ptr %8, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #8
  %92 = load i32, ptr %5, align 4, !tbaa !9
  %93 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %92, i32 noundef 2)
  %94 = zext i1 %93 to i8
  store i8 %94, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %95 = load i32, ptr %5, align 4, !tbaa !9
  %96 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %95)
  store ptr %96, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %97 = load i32, ptr %6, align 4, !tbaa !9
  %98 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %97)
  store ptr %98, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #8
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = icmp ne ptr %99, null
  br i1 %100, label %101, label %106

101:                                              ; preds = %3
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %102, i32 0, i32 6
  %104 = load i8, ptr %103, align 1, !tbaa !13, !range !24, !noundef !25
  %105 = trunc i8 %104 to i1
  br label %106

106:                                              ; preds = %101, %3
  %107 = phi i1 [ false, %3 ], [ %105, %101 ]
  %108 = zext i1 %107 to i8
  store i8 %108, ptr %12, align 1, !tbaa !11
  %109 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef %109)
  %110 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %13, i32 0, i32 0
  %111 = load i32, ptr %110, align 4
  %112 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 %111, i32 noundef 11)
  br i1 %112, label %113, label %137

113:                                              ; preds = %106
  %114 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef %114)
  %115 = getelementptr inbounds %"class.spirv_cross::TypedID.413", ptr %14, i32 0, i32 0
  %116 = load i32, ptr %115, align 4
  %117 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 %116, i32 noundef 11)
  %118 = icmp eq i32 %117, 20
  br i1 %118, label %119, label %137

119:                                              ; preds = %113
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %120)
  br i1 %121, label %122, label %137

122:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #8
  %123 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %123, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #8
  %124 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %124, i1 noundef zeroext true)
          to label %125 unwind label %128

125:                                              ; preds = %122
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA5_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 1 dereferenceable(5) @.str.154)
          to label %126 unwind label %132

126:                                              ; preds = %125
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  %127 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %127)
  br label %917

128:                                              ; preds = %122
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %17, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %18, align 4
  br label %136

132:                                              ; preds = %125
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %17, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  br label %136

136:                                              ; preds = %132, %128
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  br label %918

137:                                              ; preds = %119, %113, %106
  %138 = load i8, ptr %8, align 1, !tbaa !11, !range !24, !noundef !25
  %139 = trunc i8 %138 to i1
  br i1 %139, label %264, label %140

140:                                              ; preds = %137
  %141 = load i8, ptr %9, align 1, !tbaa !11, !range !24, !noundef !25
  %142 = trunc i8 %141 to i1
  br i1 %142, label %264, label %143

143:                                              ; preds = %140
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %144)
  br i1 %145, label %146, label %200

146:                                              ; preds = %143
  %147 = load ptr, ptr %10, align 8, !tbaa !5
  %148 = icmp ne ptr %147, null
  br i1 %148, label %149, label %200

149:                                              ; preds = %146
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %150, i32 0, i32 6
  %152 = load i8, ptr %151, align 1, !tbaa !13, !range !24, !noundef !25
  %153 = trunc i8 %152 to i1
  br i1 %153, label %154, label %200

154:                                              ; preds = %149
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %155, i32 0, i32 6
  store i8 0, ptr %156, align 1, !tbaa !13
  %157 = load ptr, ptr %11, align 8, !tbaa !5
  %158 = icmp ne ptr %157, null
  br i1 %158, label %159, label %182

159:                                              ; preds = %154
  %160 = load ptr, ptr %11, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %160, i32 0, i32 6
  %162 = load i8, ptr %161, align 1, !tbaa !13, !range !24, !noundef !25
  %163 = trunc i8 %162 to i1
  br i1 %163, label %164, label %182

164:                                              ; preds = %159
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %165, i32 0, i32 6
  store i8 0, ptr %166, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  %167 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %167, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #8
  %168 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %168)
          to label %169 unwind label %173

169:                                              ; preds = %164
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %170 unwind label %177

170:                                              ; preds = %169
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  %171 = load ptr, ptr %11, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %171, i32 0, i32 6
  store i8 1, ptr %172, align 1, !tbaa !13
  br label %196

173:                                              ; preds = %164
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %17, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %18, align 4
  br label %181

177:                                              ; preds = %169
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %17, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %181

181:                                              ; preds = %177, %173
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %918

182:                                              ; preds = %159, %154
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #8
  %183 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %183, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  %184 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %184, i1 noundef zeroext true)
          to label %185 unwind label %187

185:                                              ; preds = %182
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(14) @.str.155, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %186 unwind label %191

186:                                              ; preds = %185
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %196

187:                                              ; preds = %182
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %17, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %18, align 4
  br label %195

191:                                              ; preds = %185
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %17, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %195

195:                                              ; preds = %191, %187
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %918

196:                                              ; preds = %186, %170
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %197, i32 0, i32 6
  store i8 1, ptr %198, align 1, !tbaa !13
  %199 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %199)
  br label %263

200:                                              ; preds = %149, %146, %143
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = icmp ne ptr %201, null
  br i1 %202, label %203, label %259

203:                                              ; preds = %200
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %204, i32 0, i32 6
  %206 = load i8, ptr %205, align 1, !tbaa !13, !range !24, !noundef !25
  %207 = trunc i8 %206 to i1
  br i1 %207, label %208, label %259

208:                                              ; preds = %203
  %209 = load ptr, ptr %10, align 8, !tbaa !5
  %210 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %209, i32 0, i32 6
  store i8 0, ptr %210, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %252, %208
  %212 = load i32, ptr %23, align 4, !tbaa !9
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %213, i32 0, i32 4
  %215 = load i32, ptr %214, align 8, !tbaa !26
  %216 = icmp ult i32 %212, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %255

218:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  %219 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %219, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %220 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %24, i8 noundef signext 91, i64 noundef -1) #8
  store i64 %220, ptr %25, align 8, !tbaa !49
  %221 = load i64, ptr %25, align 8, !tbaa !49
  %222 = icmp ne i64 %221, -1
  br i1 %222, label %223, label %251

223:                                              ; preds = %218
  %224 = load i64, ptr %25, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #8
  store i8 91, ptr %27, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #8
  store i8 93, ptr %28, align 1, !tbaa !50
  invoke void @_ZN11spirv_cross4joinIJcRjcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(1) %27, ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %225 unwind label %232

225:                                              ; preds = %223
  %226 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %224, ptr noundef nonnull align 8 dereferenceable(32) %26)
          to label %227 unwind label %236

227:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %228 = load i32, ptr %6, align 4, !tbaa !9
  %229 = load i32, ptr %23, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %228, i32 noundef %229)
          to label %230 unwind label %240

230:                                              ; preds = %227
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %231 unwind label %244

231:                                              ; preds = %230
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  br label %251

232:                                              ; preds = %223
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %17, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %18, align 4
  br label %250

236:                                              ; preds = %225
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %17, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %18, align 4
  br label %249

240:                                              ; preds = %227
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %17, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %18, align 4
  br label %248

244:                                              ; preds = %230
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %17, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %248

248:                                              ; preds = %244, %240
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %249

249:                                              ; preds = %248, %236
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %250

250:                                              ; preds = %249, %232
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %918

251:                                              ; preds = %231, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  br label %252

252:                                              ; preds = %251
  %253 = load i32, ptr %23, align 4, !tbaa !9
  %254 = add i32 %253, 1
  store i32 %254, ptr %23, align 4, !tbaa !9
  br label %211, !llvm.loop !51

255:                                              ; preds = %217
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %256, i32 0, i32 6
  store i8 1, ptr %257, align 1, !tbaa !13
  %258 = load i32, ptr %5, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %258)
  br label %262

259:                                              ; preds = %203, %200
  %260 = load i32, ptr %5, align 4, !tbaa !9
  %261 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %260, i32 noundef %261)
  br label %262

262:                                              ; preds = %259, %255
  br label %263

263:                                              ; preds = %262, %196
  br label %916

264:                                              ; preds = %140, %137
  %265 = load i8, ptr %8, align 1, !tbaa !11, !range !24, !noundef !25
  %266 = trunc i8 %265 to i1
  br i1 %266, label %276, label %267

267:                                              ; preds = %264
  %268 = load ptr, ptr %7, align 8, !tbaa !5
  %269 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %268)
  br i1 %269, label %276, label %270

270:                                              ; preds = %267
  %271 = load i8, ptr %12, align 1, !tbaa !11, !range !24, !noundef !25
  %272 = trunc i8 %271 to i1
  br i1 %272, label %276, label %273

273:                                              ; preds = %270
  %274 = load i32, ptr %5, align 4, !tbaa !9
  %275 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %274, i32 noundef %275)
  br label %915

276:                                              ; preds = %270, %267, %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %277 = load i8, ptr %8, align 1, !tbaa !11, !range !24, !noundef !25
  %278 = trunc i8 %277 to i1
  br i1 %278, label %279, label %282

279:                                              ; preds = %276
  %280 = load i32, ptr %5, align 4, !tbaa !9
  %281 = call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %280, i32 noundef 1)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %31, i32 noundef %281)
  br label %285

282:                                              ; preds = %276
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %283, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 8 %284, i64 4, i1 false), !tbaa.struct !53
  br label %285

285:                                              ; preds = %282, %279
  %286 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %31)
  %287 = getelementptr inbounds %"class.spirv_cross::TypedID.414", ptr %30, i32 0, i32 0
  store i32 %286, ptr %287, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %288 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %30)
  %289 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %288)
  store ptr %289, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef @.str.92, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %290 unwind label %306

290:                                              ; preds = %285
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %291 = load i32, ptr %5, align 4, !tbaa !9
  %292 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %291)
          to label %293 unwind label %310

293:                                              ; preds = %290
  store ptr %292, ptr %35, align 8, !tbaa !5
  %294 = load ptr, ptr %35, align 8, !tbaa !5
  %295 = icmp ne ptr %294, null
  br i1 %295, label %296, label %318

296:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #8
  %297 = load ptr, ptr %35, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %297, i32 0, i32 1
  %299 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %298)
          to label %300 unwind label %314

300:                                              ; preds = %296
  %301 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %299)
          to label %302 unwind label %314

302:                                              ; preds = %300
  %303 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(12482) %86, ptr noundef nonnull align 8 dereferenceable(336) %301, i32 noundef %303, i1 noundef zeroext false)
          to label %304 unwind label %314

304:                                              ; preds = %302
  %305 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  br label %318

306:                                              ; preds = %285
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %17, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #8
  br label %914

310:                                              ; preds = %910, %876, %787, %783, %318, %290
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %17, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %18, align 4
  br label %913

314:                                              ; preds = %302, %300, %296
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %17, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  br label %913

318:                                              ; preds = %304, %293
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  %320 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %319)
          to label %321 unwind label %310

321:                                              ; preds = %318
  br i1 %320, label %322, label %689

322:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %323 = load i8, ptr %9, align 1, !tbaa !11, !range !24, !noundef !25
  %324 = trunc i8 %323 to i1
  %325 = zext i1 %324 to i64
  %326 = select i1 %324, ptr @.str.156, ptr @.str.35
  store ptr %326, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #8
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  %328 = icmp ne ptr %327, null
  br i1 %328, label %329, label %334

329:                                              ; preds = %322
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %330, i32 0, i32 6
  %332 = load i8, ptr %331, align 1, !tbaa !13, !range !24, !noundef !25
  %333 = trunc i8 %332 to i1
  br label %334

334:                                              ; preds = %329, %322
  %335 = phi i1 [ false, %322 ], [ %333, %329 ]
  %336 = zext i1 %335 to i8
  store i8 %336, ptr %38, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 336, ptr %39) #8
  %337 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %39, ptr noundef nonnull align 8 dereferenceable(336) %337)
          to label %338 unwind label %344

338:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  %339 = load i8, ptr %38, align 1, !tbaa !11, !range !24, !noundef !25
  %340 = trunc i8 %339 to i1
  br i1 %340, label %341, label %348

341:                                              ; preds = %338
  %342 = load ptr, ptr %11, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %342, i32 0, i32 6
  store i8 0, ptr %343, align 1, !tbaa !13
  br label %348

344:                                              ; preds = %334
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %17, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %18, align 4
  br label %688

348:                                              ; preds = %341, %338
  %349 = load i8, ptr %12, align 1, !tbaa !11, !range !24, !noundef !25
  %350 = trunc i8 %349 to i1
  br i1 %350, label %351, label %521

351:                                              ; preds = %348
  %352 = load ptr, ptr %10, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %352, i32 0, i32 6
  store i8 0, ptr %353, align 1, !tbaa !13
  %354 = load ptr, ptr %7, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %354, i32 0, i32 5
  %356 = load i32, ptr %355, align 4, !tbaa !54
  %357 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %39, i32 0, i32 4
  store i32 %356, ptr %357, align 8, !tbaa !26
  %358 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %39, i32 0, i32 5
  store i32 1, ptr %358, align 4, !tbaa !54
  %359 = load ptr, ptr %32, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %359, i32 0, i32 5
  %361 = load i32, ptr %360, align 4, !tbaa !54
  %362 = load ptr, ptr %7, align 8, !tbaa !5
  %363 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %362, i32 0, i32 5
  %364 = load i32, ptr %363, align 4, !tbaa !54
  %365 = icmp ne i32 %361, %364
  br i1 %365, label %366, label %382

366:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #8
  %367 = load ptr, ptr %86, align 8, !tbaa !55
  %368 = getelementptr inbounds ptr, ptr %367, i64 19
  %369 = load ptr, ptr %368, align 8
  invoke void %369(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(12482) %86, ptr noundef nonnull align 8 dereferenceable(336) %39, i32 noundef 0)
          to label %370 unwind label %373

370:                                              ; preds = %366
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(3) @.str.91)
          to label %371 unwind label %377

371:                                              ; preds = %370
  %372 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  br label %382

373:                                              ; preds = %366
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %17, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %18, align 4
  br label %381

377:                                              ; preds = %370
  %378 = landingpad { ptr, i32 }
          cleanup
  %379 = extractvalue { ptr, i32 } %378, 0
  store ptr %379, ptr %17, align 8
  %380 = extractvalue { ptr, i32 } %378, 1
  store i32 %380, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  br label %381

381:                                              ; preds = %377, %373
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  br label %687

382:                                              ; preds = %371, %351
  %383 = load i8, ptr %38, align 1, !tbaa !11, !range !24, !noundef !25
  %384 = trunc i8 %383 to i1
  br i1 %384, label %385, label %417

385:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %399, %385
  %387 = load i32, ptr %43, align 4, !tbaa !9
  %388 = load ptr, ptr %7, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %388, i32 0, i32 4
  %390 = load i32, ptr %389, align 8, !tbaa !26
  %391 = icmp ult i32 %387, %390
  br i1 %391, label %393, label %392

392:                                              ; preds = %386
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %416

393:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  %394 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %394, i1 noundef zeroext true)
          to label %395 unwind label %402

395:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #8
  %396 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %396)
          to label %397 unwind label %406

397:                                              ; preds = %395
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %43, ptr noundef nonnull align 1 dereferenceable(3) @.str.157)
          to label %398 unwind label %410

398:                                              ; preds = %397
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  br label %399

399:                                              ; preds = %398
  %400 = load i32, ptr %43, align 4, !tbaa !9
  %401 = add i32 %400, 1
  store i32 %401, ptr %43, align 4, !tbaa !9
  br label %386, !llvm.loop !57

402:                                              ; preds = %393
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %17, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %18, align 4
  br label %415

406:                                              ; preds = %395
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %17, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %18, align 4
  br label %414

410:                                              ; preds = %397
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %17, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %414

414:                                              ; preds = %410, %406
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %415

415:                                              ; preds = %414, %402
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %687

416:                                              ; preds = %392
  br label %518

417:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 336, ptr %46) #8
  %418 = load i32, ptr %6, align 4, !tbaa !9
  %419 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %418)
          to label %420 unwind label %433

420:                                              ; preds = %417
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %46, ptr noundef nonnull align 8 dereferenceable(336) %419)
          to label %421 unwind label %433

421:                                              ; preds = %420
  %422 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %46, i32 0, i32 5
  %423 = load i32, ptr %422, align 4, !tbaa !54
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %46, i32 0, i32 4
  store i32 %423, ptr %424, align 8, !tbaa !26
  %425 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %46, i32 0, i32 5
  store i32 1, ptr %425, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %498, %421
  %427 = load i32, ptr %47, align 4, !tbaa !9
  %428 = load ptr, ptr %7, align 8, !tbaa !5
  %429 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %428, i32 0, i32 4
  %430 = load i32, ptr %429, align 8, !tbaa !26
  %431 = icmp ult i32 %427, %430
  br i1 %431, label %437, label %432

432:                                              ; preds = %426
  store i32 8, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  br label %516

433:                                              ; preds = %420, %417
  %434 = landingpad { ptr, i32 }
          cleanup
  %435 = extractvalue { ptr, i32 } %434, 0
  store ptr %435, ptr %17, align 8
  %436 = extractvalue { ptr, i32 } %434, 1
  store i32 %436, ptr %18, align 4
  br label %517

437:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(336) %46)
          to label %438 unwind label %446

438:                                              ; preds = %437
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef @.str.58)
          to label %439 unwind label %450

439:                                              ; preds = %438
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  store i32 0, ptr %51, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %488, %439
  %441 = load i32, ptr %51, align 4, !tbaa !9
  %442 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %46, i32 0, i32 4
  %443 = load i32, ptr %442, align 8, !tbaa !26
  %444 = icmp ult i32 %441, %443
  br i1 %444, label %455, label %445

445:                                              ; preds = %440
  store i32 11, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %492

446:                                              ; preds = %437
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %17, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %18, align 4
  br label %454

450:                                              ; preds = %438
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %17, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %454

454:                                              ; preds = %450, %446
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  br label %515

455:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  %456 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %456, i1 noundef zeroext true)
          to label %457 unwind label %469

457:                                              ; preds = %455
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_SA_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %51, ptr noundef nonnull align 1 dereferenceable(3) @.str.158, ptr noundef nonnull align 4 dereferenceable(4) %47, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %458 unwind label %473

458:                                              ; preds = %457
  %459 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %460 unwind label %477

460:                                              ; preds = %458
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  %461 = load i32, ptr %51, align 4, !tbaa !9
  %462 = add i32 %461, 1
  %463 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %46, i32 0, i32 4
  %464 = load i32, ptr %463, align 8, !tbaa !26
  %465 = icmp ult i32 %462, %464
  br i1 %465, label %466, label %487

466:                                              ; preds = %460
  %467 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.55)
          to label %468 unwind label %483

468:                                              ; preds = %466
  br label %487

469:                                              ; preds = %455
  %470 = landingpad { ptr, i32 }
          cleanup
  %471 = extractvalue { ptr, i32 } %470, 0
  store ptr %471, ptr %17, align 8
  %472 = extractvalue { ptr, i32 } %470, 1
  store i32 %472, ptr %18, align 4
  br label %482

473:                                              ; preds = %457
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %17, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %18, align 4
  br label %481

477:                                              ; preds = %458
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %17, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  br label %481

481:                                              ; preds = %477, %473
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %482

482:                                              ; preds = %481, %469
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %491

483:                                              ; preds = %466
  %484 = landingpad { ptr, i32 }
          cleanup
  %485 = extractvalue { ptr, i32 } %484, 0
  store ptr %485, ptr %17, align 8
  %486 = extractvalue { ptr, i32 } %484, 1
  store i32 %486, ptr %18, align 4
  br label %491

487:                                              ; preds = %468, %460
  br label %488

488:                                              ; preds = %487
  %489 = load i32, ptr %51, align 4, !tbaa !9
  %490 = add i32 %489, 1
  store i32 %490, ptr %51, align 4, !tbaa !9
  br label %440, !llvm.loop !58

491:                                              ; preds = %483, %482
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %514

492:                                              ; preds = %445
  %493 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.53)
          to label %494 unwind label %501

494:                                              ; preds = %492
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #8
  %495 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %495, i1 noundef zeroext true)
          to label %496 unwind label %505

496:                                              ; preds = %494
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %47, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %497 unwind label %509

497:                                              ; preds = %496
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  br label %498

498:                                              ; preds = %497
  %499 = load i32, ptr %47, align 4, !tbaa !9
  %500 = add i32 %499, 1
  store i32 %500, ptr %47, align 4, !tbaa !9
  br label %426, !llvm.loop !59

501:                                              ; preds = %492
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %17, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %18, align 4
  br label %514

505:                                              ; preds = %494
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %17, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %18, align 4
  br label %513

509:                                              ; preds = %496
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %17, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %513

513:                                              ; preds = %509, %505
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  br label %514

514:                                              ; preds = %513, %501, %491
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %515

515:                                              ; preds = %514, %454
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %46) #8
  br label %517

516:                                              ; preds = %432
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %46) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %46) #8
  br label %518

517:                                              ; preds = %515, %433
  call void @llvm.lifetime.end.p0(i64 336, ptr %46) #8
  br label %687

518:                                              ; preds = %516, %416
  %519 = load ptr, ptr %10, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %519, i32 0, i32 6
  store i8 1, ptr %520, align 1, !tbaa !13
  br label %680

521:                                              ; preds = %348
  %522 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %39, i32 0, i32 5
  store i32 1, ptr %522, align 4, !tbaa !54
  %523 = load ptr, ptr %32, align 8, !tbaa !5
  %524 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %523, i32 0, i32 4
  %525 = load i32, ptr %524, align 8, !tbaa !26
  %526 = load ptr, ptr %7, align 8, !tbaa !5
  %527 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %526, i32 0, i32 4
  %528 = load i32, ptr %527, align 8, !tbaa !26
  %529 = icmp ne i32 %525, %528
  br i1 %529, label %530, label %546

530:                                              ; preds = %521
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #8
  %531 = load ptr, ptr %86, align 8, !tbaa !55
  %532 = getelementptr inbounds ptr, ptr %531, i64 19
  %533 = load ptr, ptr %532, align 8
  invoke void %533(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(12482) %86, ptr noundef nonnull align 8 dereferenceable(336) %39, i32 noundef 0)
          to label %534 unwind label %537

534:                                              ; preds = %530
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 1 dereferenceable(3) @.str.91)
          to label %535 unwind label %541

535:                                              ; preds = %534
  %536 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %546

537:                                              ; preds = %530
  %538 = landingpad { ptr, i32 }
          cleanup
  %539 = extractvalue { ptr, i32 } %538, 0
  store ptr %539, ptr %17, align 8
  %540 = extractvalue { ptr, i32 } %538, 1
  store i32 %540, ptr %18, align 4
  br label %545

541:                                              ; preds = %534
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %17, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %545

545:                                              ; preds = %541, %537
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %687

546:                                              ; preds = %535, %521
  %547 = load i8, ptr %38, align 1, !tbaa !11, !range !24, !noundef !25
  %548 = trunc i8 %547 to i1
  br i1 %548, label %549, label %647

549:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 336, ptr %57) #8
  %550 = load i32, ptr %6, align 4, !tbaa !9
  %551 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %550)
          to label %552 unwind label %562

552:                                              ; preds = %549
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %57, ptr noundef nonnull align 8 dereferenceable(336) %551)
          to label %553 unwind label %562

553:                                              ; preds = %552
  %554 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %57, i32 0, i32 5
  store i32 1, ptr %554, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %555

555:                                              ; preds = %627, %553
  %556 = load i32, ptr %58, align 4, !tbaa !9
  %557 = load ptr, ptr %7, align 8, !tbaa !5
  %558 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %557, i32 0, i32 5
  %559 = load i32, ptr %558, align 4, !tbaa !54
  %560 = icmp ult i32 %556, %559
  br i1 %560, label %566, label %561

561:                                              ; preds = %555
  store i32 14, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %645

562:                                              ; preds = %552, %549
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %17, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %18, align 4
  br label %646

566:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(336) %57)
          to label %567 unwind label %575

567:                                              ; preds = %566
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef @.str.58)
          to label %568 unwind label %579

568:                                              ; preds = %567
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %569

569:                                              ; preds = %616, %568
  %570 = load i32, ptr %61, align 4, !tbaa !9
  %571 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %57, i32 0, i32 4
  %572 = load i32, ptr %571, align 8, !tbaa !26
  %573 = icmp ult i32 %570, %572
  br i1 %573, label %584, label %574

574:                                              ; preds = %569
  store i32 17, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  br label %621

575:                                              ; preds = %566
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %17, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %18, align 4
  br label %583

579:                                              ; preds = %567
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %17, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %583

583:                                              ; preds = %579, %575
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %644

584:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  %585 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %585)
          to label %586 unwind label %598

586:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S8_SB_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 1 dereferenceable(3) @.str.158, ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %587 unwind label %602

587:                                              ; preds = %586
  %588 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %589 unwind label %606

589:                                              ; preds = %587
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  %590 = load i32, ptr %61, align 4, !tbaa !9
  %591 = add i32 %590, 1
  %592 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %57, i32 0, i32 4
  %593 = load i32, ptr %592, align 8, !tbaa !26
  %594 = icmp ult i32 %591, %593
  br i1 %594, label %595, label %615

595:                                              ; preds = %589
  %596 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef @.str.55)
          to label %597 unwind label %611

597:                                              ; preds = %595
  br label %615

598:                                              ; preds = %584
  %599 = landingpad { ptr, i32 }
          cleanup
  %600 = extractvalue { ptr, i32 } %599, 0
  store ptr %600, ptr %17, align 8
  %601 = extractvalue { ptr, i32 } %599, 1
  store i32 %601, ptr %18, align 4
  br label %620

602:                                              ; preds = %586
  %603 = landingpad { ptr, i32 }
          cleanup
  %604 = extractvalue { ptr, i32 } %603, 0
  store ptr %604, ptr %17, align 8
  %605 = extractvalue { ptr, i32 } %603, 1
  store i32 %605, ptr %18, align 4
  br label %610

606:                                              ; preds = %587
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %17, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %610

610:                                              ; preds = %606, %602
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  br label %619

611:                                              ; preds = %595
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %17, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %18, align 4
  br label %619

615:                                              ; preds = %597, %589
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  br label %616

616:                                              ; preds = %615
  %617 = load i32, ptr %61, align 4, !tbaa !9
  %618 = add i32 %617, 1
  store i32 %618, ptr %61, align 4, !tbaa !9
  br label %569, !llvm.loop !60

619:                                              ; preds = %611, %610
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %620

620:                                              ; preds = %619, %598
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  br label %643

621:                                              ; preds = %574
  %622 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef @.str.53)
          to label %623 unwind label %630

623:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  %624 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %624, i1 noundef zeroext true)
          to label %625 unwind label %634

625:                                              ; preds = %623
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %626 unwind label %638

626:                                              ; preds = %625
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  br label %627

627:                                              ; preds = %626
  %628 = load i32, ptr %58, align 4, !tbaa !9
  %629 = add i32 %628, 1
  store i32 %629, ptr %58, align 4, !tbaa !9
  br label %555, !llvm.loop !61

630:                                              ; preds = %621
  %631 = landingpad { ptr, i32 }
          cleanup
  %632 = extractvalue { ptr, i32 } %631, 0
  store ptr %632, ptr %17, align 8
  %633 = extractvalue { ptr, i32 } %631, 1
  store i32 %633, ptr %18, align 4
  br label %643

634:                                              ; preds = %623
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %17, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %18, align 4
  br label %642

638:                                              ; preds = %625
  %639 = landingpad { ptr, i32 }
          cleanup
  %640 = extractvalue { ptr, i32 } %639, 0
  store ptr %640, ptr %17, align 8
  %641 = extractvalue { ptr, i32 } %639, 1
  store i32 %641, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %642

642:                                              ; preds = %638, %634
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  br label %643

643:                                              ; preds = %642, %630, %620
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %644

644:                                              ; preds = %643, %583
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #8
  br label %646

645:                                              ; preds = %561
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %57) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %57) #8
  br label %679

646:                                              ; preds = %644, %562
  call void @llvm.lifetime.end.p0(i64 336, ptr %57) #8
  br label %687

647:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  store i32 0, ptr %65, align 4, !tbaa !9
  br label %648

648:                                              ; preds = %661, %647
  %649 = load i32, ptr %65, align 4, !tbaa !9
  %650 = load ptr, ptr %7, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %650, i32 0, i32 5
  %652 = load i32, ptr %651, align 4, !tbaa !54
  %653 = icmp ult i32 %649, %652
  br i1 %653, label %655, label %654

654:                                              ; preds = %648
  store i32 20, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %678

655:                                              ; preds = %648
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  %656 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %656, i1 noundef zeroext true)
          to label %657 unwind label %664

657:                                              ; preds = %655
  call void @llvm.lifetime.start.p0(i64 32, ptr %67) #8
  %658 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %658, i1 noundef zeroext true)
          to label %659 unwind label %668

659:                                              ; preds = %657
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %65, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %65, ptr noundef nonnull align 1 dereferenceable(3) @.str.157)
          to label %660 unwind label %672

660:                                              ; preds = %659
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  br label %661

661:                                              ; preds = %660
  %662 = load i32, ptr %65, align 4, !tbaa !9
  %663 = add i32 %662, 1
  store i32 %663, ptr %65, align 4, !tbaa !9
  br label %648, !llvm.loop !62

664:                                              ; preds = %655
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %17, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %18, align 4
  br label %677

668:                                              ; preds = %657
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %17, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %18, align 4
  br label %676

672:                                              ; preds = %659
  %673 = landingpad { ptr, i32 }
          cleanup
  %674 = extractvalue { ptr, i32 } %673, 0
  store ptr %674, ptr %17, align 8
  %675 = extractvalue { ptr, i32 } %673, 1
  store i32 %675, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  br label %676

676:                                              ; preds = %672, %668
  call void @llvm.lifetime.end.p0(i64 32, ptr %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %677

677:                                              ; preds = %676, %664
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %687

678:                                              ; preds = %654
  br label %679

679:                                              ; preds = %678, %645
  br label %680

680:                                              ; preds = %679, %518
  %681 = load i8, ptr %38, align 1, !tbaa !11, !range !24, !noundef !25
  %682 = trunc i8 %681 to i1
  br i1 %682, label %683, label %686

683:                                              ; preds = %680
  %684 = load ptr, ptr %11, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %684, i32 0, i32 6
  store i8 1, ptr %685, align 1, !tbaa !13
  br label %686

686:                                              ; preds = %683, %680
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %910

687:                                              ; preds = %677, %646, %545, %517, %415, %381
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %39) #8
  br label %688

688:                                              ; preds = %687, %344
  call void @llvm.lifetime.end.p0(i64 336, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %913

689:                                              ; preds = %321
  %690 = load i8, ptr %12, align 1, !tbaa !11, !range !24, !noundef !25
  %691 = trunc i8 %690 to i1
  br i1 %691, label %692, label %783

692:                                              ; preds = %689
  %693 = load ptr, ptr %10, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %693, i32 0, i32 6
  store i8 0, ptr %694, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 336, ptr %68) #8
  %695 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %68, ptr noundef nonnull align 8 dereferenceable(336) %695)
          to label %696 unwind label %706

696:                                              ; preds = %692
  %697 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 4
  store i32 1, ptr %697, align 8, !tbaa !26
  %698 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %68, i32 0, i32 5
  store i32 1, ptr %698, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %699

699:                                              ; preds = %774, %696
  %700 = load i32, ptr %69, align 4, !tbaa !9
  %701 = load ptr, ptr %7, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %701, i32 0, i32 4
  %703 = load i32, ptr %702, align 8, !tbaa !26
  %704 = icmp ult i32 %700, %703
  br i1 %704, label %710, label %705

705:                                              ; preds = %699
  store i32 23, ptr %48, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %779

706:                                              ; preds = %692
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %17, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %18, align 4
  br label %782

710:                                              ; preds = %699
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #8
  %711 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %711, i1 noundef zeroext true)
          to label %712 unwind label %725

712:                                              ; preds = %710
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %713 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %70, i8 noundef signext 91, i64 noundef -1) #8
  store i64 %713, ptr %71, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %714 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %70, i8 noundef signext 93, i64 noundef -1) #8
  store i64 %714, ptr %72, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %715 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %70, i8 noundef signext 46, i64 noundef -1) #8
  store i64 %715, ptr %73, align 8, !tbaa !49
  %716 = load i64, ptr %73, align 8, !tbaa !49
  %717 = icmp ne i64 %716, -1
  br i1 %717, label %718, label %733

718:                                              ; preds = %712
  %719 = load i64, ptr %73, align 8, !tbaa !49
  %720 = load i64, ptr %72, align 8, !tbaa !49
  %721 = icmp ugt i64 %719, %720
  br i1 %721, label %722, label %733

722:                                              ; preds = %718
  %723 = load i64, ptr %73, align 8, !tbaa !49
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %70, i64 noundef %723)
          to label %724 unwind label %729

724:                                              ; preds = %722
  br label %733

725:                                              ; preds = %710
  %726 = landingpad { ptr, i32 }
          cleanup
  %727 = extractvalue { ptr, i32 } %726, 0
  store ptr %727, ptr %17, align 8
  %728 = extractvalue { ptr, i32 } %726, 1
  store i32 %728, ptr %18, align 4
  br label %778

729:                                              ; preds = %722
  %730 = landingpad { ptr, i32 }
          cleanup
  %731 = extractvalue { ptr, i32 } %730, 0
  store ptr %731, ptr %17, align 8
  %732 = extractvalue { ptr, i32 } %730, 1
  store i32 %732, ptr %18, align 4
  br label %777

733:                                              ; preds = %724, %718, %712
  %734 = load i64, ptr %71, align 8, !tbaa !49
  %735 = icmp ne i64 %734, -1
  br i1 %735, label %736, label %773

736:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 32, ptr %74) #8
  %737 = load ptr, ptr %86, align 8, !tbaa !55
  %738 = getelementptr inbounds ptr, ptr %737, i64 19
  %739 = load ptr, ptr %738, align 8
  invoke void %739(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %74, ptr noundef nonnull align 8 dereferenceable(12482) %86, ptr noundef nonnull align 8 dereferenceable(336) %68, i32 noundef 0)
          to label %740 unwind label %749

740:                                              ; preds = %736
  %741 = load i64, ptr %71, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %76) #8
  store i8 91, ptr %76, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #8
  store i8 93, ptr %77, align 1, !tbaa !50
  invoke void @_ZN11spirv_cross4joinIJcRjcRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 1 dereferenceable(1) %76, ptr noundef nonnull align 4 dereferenceable(4) %69, ptr noundef nonnull align 1 dereferenceable(1) %77, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %742 unwind label %753

742:                                              ; preds = %740
  %743 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %70, i64 noundef %741, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %744 unwind label %757

744:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #8
  %745 = load i32, ptr %6, align 4, !tbaa !9
  %746 = load i32, ptr %69, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %745, i32 noundef %746)
          to label %747 unwind label %761

747:                                              ; preds = %744
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_RA4_S2_SB_SF_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 1 dereferenceable(3) @.str.159, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 1 dereferenceable(4) @.str.160, ptr noundef nonnull align 8 dereferenceable(32) %743, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %748 unwind label %765

748:                                              ; preds = %747
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  br label %773

749:                                              ; preds = %736
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %17, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %18, align 4
  br label %772

753:                                              ; preds = %740
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %17, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %18, align 4
  br label %771

757:                                              ; preds = %742
  %758 = landingpad { ptr, i32 }
          cleanup
  %759 = extractvalue { ptr, i32 } %758, 0
  store ptr %759, ptr %17, align 8
  %760 = extractvalue { ptr, i32 } %758, 1
  store i32 %760, ptr %18, align 4
  br label %770

761:                                              ; preds = %744
  %762 = landingpad { ptr, i32 }
          cleanup
  %763 = extractvalue { ptr, i32 } %762, 0
  store ptr %763, ptr %17, align 8
  %764 = extractvalue { ptr, i32 } %762, 1
  store i32 %764, ptr %18, align 4
  br label %769

765:                                              ; preds = %747
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %17, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  br label %769

769:                                              ; preds = %765, %761
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  br label %770

770:                                              ; preds = %769, %757
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  br label %771

771:                                              ; preds = %770, %753
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #8
  br label %772

772:                                              ; preds = %771, %749
  call void @llvm.lifetime.end.p0(i64 32, ptr %74) #8
  br label %777

773:                                              ; preds = %748, %733
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  br label %774

774:                                              ; preds = %773
  %775 = load i32, ptr %69, align 4, !tbaa !9
  %776 = add i32 %775, 1
  store i32 %776, ptr %69, align 4, !tbaa !9
  br label %699, !llvm.loop !63

777:                                              ; preds = %772, %729
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %778

778:                                              ; preds = %777, %725
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %68) #8
  br label %782

779:                                              ; preds = %705
  %780 = load ptr, ptr %10, align 8, !tbaa !5
  %781 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %780, i32 0, i32 6
  store i8 1, ptr %781, align 1, !tbaa !13
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %68) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %68) #8
  br label %909

782:                                              ; preds = %778, %706
  call void @llvm.lifetime.end.p0(i64 336, ptr %68) #8
  br label %913

783:                                              ; preds = %689
  %784 = load ptr, ptr %32, align 8, !tbaa !5
  %785 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %784)
          to label %786 unwind label %310

786:                                              ; preds = %783
  br i1 %785, label %791, label %787

787:                                              ; preds = %786
  %788 = load ptr, ptr %32, align 8, !tbaa !5
  %789 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %788)
          to label %790 unwind label %310

790:                                              ; preds = %787
  br i1 %789, label %791, label %876

791:                                              ; preds = %790, %786
  %792 = load ptr, ptr %32, align 8, !tbaa !5
  %793 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %792, i32 0, i32 4
  %794 = load i32, ptr %793, align 8, !tbaa !26
  %795 = icmp ule i32 %794, 4
  br i1 %795, label %796, label %876

796:                                              ; preds = %791
  %797 = load ptr, ptr %32, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %797, i32 0, i32 4
  %799 = load i32, ptr %798, align 8, !tbaa !26
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %800, i32 0, i32 4
  %802 = load i32, ptr %801, align 8, !tbaa !26
  %803 = icmp ugt i32 %799, %802
  br i1 %803, label %804, label %876

804:                                              ; preds = %796
  %805 = load ptr, ptr %7, align 8, !tbaa !5
  %806 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %805, i32 0, i32 4
  %807 = load i32, ptr %806, align 8, !tbaa !26
  %808 = icmp uge i32 %807, 1
  br i1 %808, label %809, label %814

809:                                              ; preds = %804
  %810 = load ptr, ptr %7, align 8, !tbaa !5
  %811 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %810, i32 0, i32 4
  %812 = load i32, ptr %811, align 8, !tbaa !26
  %813 = icmp ule i32 %812, 3
  br label %814

814:                                              ; preds = %809, %804
  %815 = phi i1 [ false, %804 ], [ %813, %809 ]
  br i1 %815, label %816, label %817

816:                                              ; preds = %814
  br label %819

817:                                              ; preds = %814
  call void @__assert_fail(ptr noundef @.str.161, ptr noundef @.str.25, i32 noundef 5416, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj) #9
  unreachable

818:                                              ; No predecessors!
  br label %819

819:                                              ; preds = %818, %816
  %820 = load i8, ptr %9, align 1, !tbaa !11, !range !24, !noundef !25
  %821 = trunc i8 %820 to i1
  %822 = xor i1 %821, true
  br i1 %822, label %823, label %824

823:                                              ; preds = %819
  br label %826

824:                                              ; preds = %819
  call void @__assert_fail(ptr noundef @.str.162, ptr noundef @.str.25, i32 noundef 5422, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj) #9
  unreachable

825:                                              ; No predecessors!
  br label %826

826:                                              ; preds = %825, %823
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #8
  %827 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %827, i1 noundef zeroext true)
          to label %828 unwind label %846

828:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #8
  %829 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %829, i1 noundef zeroext true)
          to label %830 unwind label %850

830:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #8
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  %832 = load ptr, ptr %86, align 8, !tbaa !55
  %833 = getelementptr inbounds ptr, ptr %832, i64 19
  %834 = load ptr, ptr %833, align 8
  invoke void %834(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(12482) %86, ptr noundef nonnull align 8 dereferenceable(336) %831, i32 noundef 0)
          to label %835 unwind label %854

835:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %79)
          to label %836 unwind label %858

836:                                              ; preds = %835
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_S9_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(3) @.str.91, ptr noundef nonnull align 8 dereferenceable(32) %83)
          to label %837 unwind label %862

837:                                              ; preds = %836
  %838 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  %839 = load i32, ptr %6, align 4, !tbaa !9
  %840 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %839)
          to label %841 unwind label %868

841:                                              ; preds = %837
  %842 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(336) %840, ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef nonnull align 8 dereferenceable(32) %80)
          to label %843 unwind label %868

843:                                              ; preds = %841
  br i1 %842, label %872, label %844

844:                                              ; preds = %843
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %845 unwind label %868

845:                                              ; preds = %844
  br label %872

846:                                              ; preds = %826
  %847 = landingpad { ptr, i32 }
          cleanup
  %848 = extractvalue { ptr, i32 } %847, 0
  store ptr %848, ptr %17, align 8
  %849 = extractvalue { ptr, i32 } %847, 1
  store i32 %849, ptr %18, align 4
  br label %875

850:                                              ; preds = %828
  %851 = landingpad { ptr, i32 }
          cleanup
  %852 = extractvalue { ptr, i32 } %851, 0
  store ptr %852, ptr %17, align 8
  %853 = extractvalue { ptr, i32 } %851, 1
  store i32 %853, ptr %18, align 4
  br label %874

854:                                              ; preds = %830
  %855 = landingpad { ptr, i32 }
          cleanup
  %856 = extractvalue { ptr, i32 } %855, 0
  store ptr %856, ptr %17, align 8
  %857 = extractvalue { ptr, i32 } %855, 1
  store i32 %857, ptr %18, align 4
  br label %867

858:                                              ; preds = %835
  %859 = landingpad { ptr, i32 }
          cleanup
  %860 = extractvalue { ptr, i32 } %859, 0
  store ptr %860, ptr %17, align 8
  %861 = extractvalue { ptr, i32 } %859, 1
  store i32 %861, ptr %18, align 4
  br label %866

862:                                              ; preds = %836
  %863 = landingpad { ptr, i32 }
          cleanup
  %864 = extractvalue { ptr, i32 } %863, 0
  store ptr %864, ptr %17, align 8
  %865 = extractvalue { ptr, i32 } %863, 1
  store i32 %865, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  br label %866

866:                                              ; preds = %862, %858
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  br label %867

867:                                              ; preds = %866, %854
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  br label %873

868:                                              ; preds = %844, %841, %837
  %869 = landingpad { ptr, i32 }
          cleanup
  %870 = extractvalue { ptr, i32 } %869, 0
  store ptr %870, ptr %17, align 8
  %871 = extractvalue { ptr, i32 } %869, 1
  store i32 %871, ptr %18, align 4
  br label %873

872:                                              ; preds = %845, %843
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %908

873:                                              ; preds = %868, %867
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  br label %874

874:                                              ; preds = %873, %850
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %875

875:                                              ; preds = %874, %846
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %913

876:                                              ; preds = %796, %791, %790
  %877 = load ptr, ptr %7, align 8, !tbaa !5
  %878 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %86, ptr noundef nonnull align 8 dereferenceable(336) %877)
          to label %879 unwind label %310

879:                                              ; preds = %876
  br i1 %878, label %907, label %880

880:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #8
  %881 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %881, i1 noundef zeroext true)
          to label %882 unwind label %892

882:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #8
  %883 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %86, i32 noundef %883, i1 noundef zeroext true)
          to label %884 unwind label %896

884:                                              ; preds = %882
  %885 = load i32, ptr %6, align 4, !tbaa !9
  %886 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %885)
          to label %887 unwind label %900

887:                                              ; preds = %884
  %888 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(336) %886, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 8 dereferenceable(32) %85)
          to label %889 unwind label %900

889:                                              ; preds = %887
  br i1 %888, label %904, label %890

890:                                              ; preds = %889
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %86, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %891 unwind label %900

891:                                              ; preds = %890
  br label %904

892:                                              ; preds = %880
  %893 = landingpad { ptr, i32 }
          cleanup
  %894 = extractvalue { ptr, i32 } %893, 0
  store ptr %894, ptr %17, align 8
  %895 = extractvalue { ptr, i32 } %893, 1
  store i32 %895, ptr %18, align 4
  br label %906

896:                                              ; preds = %882
  %897 = landingpad { ptr, i32 }
          cleanup
  %898 = extractvalue { ptr, i32 } %897, 0
  store ptr %898, ptr %17, align 8
  %899 = extractvalue { ptr, i32 } %897, 1
  store i32 %899, ptr %18, align 4
  br label %905

900:                                              ; preds = %890, %887, %884
  %901 = landingpad { ptr, i32 }
          cleanup
  %902 = extractvalue { ptr, i32 } %901, 0
  store ptr %902, ptr %17, align 8
  %903 = extractvalue { ptr, i32 } %901, 1
  store i32 %903, ptr %18, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  br label %905

904:                                              ; preds = %891, %889
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %907

905:                                              ; preds = %900, %896
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  br label %906

906:                                              ; preds = %905, %892
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  br label %913

907:                                              ; preds = %904, %879
  br label %908

908:                                              ; preds = %907, %872
  br label %909

909:                                              ; preds = %908, %779
  br label %910

910:                                              ; preds = %909, %686
  %911 = load i32, ptr %5, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %86, i32 noundef %911)
          to label %912 unwind label %310

912:                                              ; preds = %910
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %915

913:                                              ; preds = %906, %875, %782, %688, %314, %310
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %914

914:                                              ; preds = %913, %306
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %918

915:                                              ; preds = %912, %273
  br label %916

916:                                              ; preds = %915, %263
  br label %917

917:                                              ; preds = %916, %126
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  ret void

918:                                              ; preds = %914, %250, %195, %181, %136
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %919

919:                                              ; preds = %918
  %920 = load ptr, ptr %17, align 8
  %921 = load i32, ptr %18, align 4
  %922 = insertvalue { ptr, i32 } poison, ptr %920, 0
  %923 = insertvalue { ptr, i32 } %922, i32 %921, 1
  resume { ptr, i32 } %923
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA5_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5)) #5 align 2

declare void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

declare void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

declare void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #5 align 2

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

declare void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJcRjcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #2

declare void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) #4

declare void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, i1 noundef zeroext) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3)) #5 align 2

declare void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

declare void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_SA_S9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S8_SB_SA_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) #2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_RA4_S2_SB_SF_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJcRjcRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(2)) #2

declare void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_S9_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32)) #2

declare void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #4

declare noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #5 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !12, i64 57}
!14 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !15, i64 0, !16, i64 12, !17, i64 16, !20, i64 48, !16, i64 52, !12, i64 56, !12, i64 57, !12, i64 58, !12, i64 59, !21, i64 64, !21, i64 120, !21, i64 176, !10, i64 232}
!15 = !{!"_ZTSN11spirv_cross8IVariantE", !16, i64 8}
!16 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !18, i64 0, !19, i64 8, !7, i64 16}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !22, i64 0, !19, i64 16, !23, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !19, i64 8}
!23 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!27, !10, i64 24}
!27 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !15, i64 0, !28, i64 12, !29, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !30, i64 32, !33, i64 88, !10, i64 120, !12, i64 124, !12, i64 125, !36, i64 128, !37, i64 136, !30, i64 192, !40, i64 248, !20, i64 272, !20, i64 276, !44, i64 280}
!28 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !31, i64 0, !19, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !19, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !34, i64 0, !19, i64 16, !35, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !19, i64 8}
!35 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!36 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !38, i64 0, !19, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !19, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!40 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !20, i64 0, !41, i64 4, !12, i64 8, !12, i64 9, !12, i64 10, !10, i64 12, !42, i64 16, !43, i64 20}
!41 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!42 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!43 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!44 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !45, i64 0}
!45 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !19, i64 8, !46, i64 16, !19, i64 24, !47, i64 32, !6, i64 48}
!46 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!47 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !48, i64 0, !19, i64 8}
!48 = !{!"float", !7, i64 0}
!49 = !{!19, !19, i64 0}
!50 = !{!7, !7, i64 0}
!51 = distinct !{!51, !52}
!52 = !{!"llvm.loop.mustprogress"}
!53 = !{i64 0, i64 4, !9}
!54 = !{!27, !10, i64 28}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !8, i64 0}
!57 = distinct !{!57, !52}
!58 = distinct !{!58, !52}
!59 = distinct !{!59, !52}
!60 = distinct !{!60, !52}
!61 = distinct !{!61, !52}
!62 = distinct !{!62, !52}
!63 = distinct !{!63, !52}


; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.spirv_cross::TypedID.413" = type { i32 }
%"class.spirv_cross::TypedID.414" = type { i32 }
%"class.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.416", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.414", %"class.spirv_cross::TypedID.414", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.413" }>
%"class.spirv_cross::SmallVector.416" = type { %"class.spirv_cross::VectorView.417", i64, %"class.spirv_cross::AlignedBuffer.418" }
%"class.spirv_cross::VectorView.417" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.418" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.414", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str.25 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.153 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.154 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.155 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.156 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.157 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.159 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.161 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj = external hidden unnamed_addr constant [80 x i8], align 1
@.str.162 = external hidden unnamed_addr constant [17 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #3

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

declare noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

declare noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) local_unnamed_addr #3

declare void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

declare noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross11CompilerMSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(12482) %0, i32 noundef %1, i32 noundef %2) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.spirv_cross::TypedID.413", align 4
  %5 = alloca %"class.spirv_cross::TypedID.413", align 4
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.spirv_cross::TypedID.414", align 4
  %19 = alloca %"class.spirv_cross::TypedID.413", align 4
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator.71", align 1
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"struct.spirv_cross::SPIRType", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"struct.spirv_cross::SPIRType", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"struct.spirv_cross::SPIRType", align 8
  %42 = alloca i32, align 4
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca i32, align 4
  %46 = alloca %"class.std::__cxx11::basic_string", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca i32, align 4
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"struct.spirv_cross::SPIRType", align 8
  %53 = alloca i32, align 4
  %54 = alloca %"class.std::__cxx11::basic_string", align 8
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.std::__cxx11::basic_string", align 8
  %57 = alloca i8, align 1
  %58 = alloca i8, align 1
  %59 = alloca %"class.std::__cxx11::basic_string", align 8
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.std::__cxx11::basic_string", align 8
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
  %68 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1, i32 noundef 1)
  %69 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1, i32 noundef 2)
  %70 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %71 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
  %72 = icmp ne ptr %70, null
  br i1 %72, label %73, label %77

73:                                               ; preds = %3
  %74 = getelementptr inbounds i8, ptr %70, i64 57
  %75 = load i8, ptr %74, align 1, !tbaa !5, !range !21, !noundef !22
  %76 = trunc nuw i8 %75 to i1
  br label %77

77:                                               ; preds = %73, %3
  %78 = phi i1 [ false, %3 ], [ %76, %73 ]
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %4, i32 noundef %1)
  %79 = load i32, ptr %4, align 4
  %80 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %79, i32 noundef 11)
  br i1 %80, label %81, label %95

81:                                               ; preds = %77
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %5, i32 noundef %1)
  %82 = load i32, ptr %5, align 4
  %83 = call noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %82, i32 noundef 11)
  %84 = icmp eq i32 %83, 20
  br i1 %84, label %85, label %95

85:                                               ; preds = %81
  %86 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %67)
  br i1 %86, label %87, label %95

87:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %88 unwind label %90

88:                                               ; preds = %87
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA5_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(5) @.str.154)
          to label %89 unwind label %92

89:                                               ; preds = %88
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  br label %537

90:                                               ; preds = %87
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %94

92:                                               ; preds = %88
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  br label %94

94:                                               ; preds = %92, %90
  %.pn255 = phi { ptr, i32 } [ %93, %92 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %538

95:                                               ; preds = %85, %81, %77
  %brmerge = or i1 %68, %69
  br i1 %brmerge, label %156, label %96

96:                                               ; preds = %95
  %97 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %67)
  %or.cond = and i1 %72, %97
  br i1 %or.cond, label %98, label %124

98:                                               ; preds = %96
  %99 = getelementptr inbounds i8, ptr %70, i64 57
  %100 = load i8, ptr %99, align 1, !tbaa !5, !range !21, !noundef !22
  %101 = trunc nuw i8 %100 to i1
  br i1 %101, label %102, label %.thread

102:                                              ; preds = %98
  store i8 0, ptr %99, align 1, !tbaa !5
  %.not180 = icmp eq ptr %71, null
  br i1 %.not180, label %115, label %103

103:                                              ; preds = %102
  %104 = getelementptr inbounds i8, ptr %71, i64 57
  %105 = load i8, ptr %104, align 1, !tbaa !5, !range !21, !noundef !22
  %106 = trunc nuw i8 %105 to i1
  br i1 %106, label %107, label %115

107:                                              ; preds = %103
  store i8 0, ptr %104, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2)
          to label %108 unwind label %110

108:                                              ; preds = %107
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %109 unwind label %112

109:                                              ; preds = %108
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  store i8 1, ptr %104, align 1, !tbaa !5
  br label %123

110:                                              ; preds = %107
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %114

112:                                              ; preds = %108
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #7
  br label %114

114:                                              ; preds = %112, %110
  %.pn183 = phi { ptr, i32 } [ %113, %112 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %538

115:                                              ; preds = %103, %102
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %116 unwind label %118

116:                                              ; preds = %115
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(14) @.str.155, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(3) @.str.59)
          to label %117 unwind label %120

117:                                              ; preds = %116
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %123

118:                                              ; preds = %115
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %122

120:                                              ; preds = %116
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %122

122:                                              ; preds = %120, %118
  %.pn181 = phi { ptr, i32 } [ %121, %120 ], [ %119, %118 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %538

123:                                              ; preds = %117, %109
  store i8 1, ptr %99, align 1, !tbaa !5
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  br label %537

124:                                              ; preds = %96
  br i1 %72, label %..thread_crit_edge, label %155

..thread_crit_edge:                               ; preds = %124
  %.phi.trans.insert = getelementptr inbounds i8, ptr %70, i64 57
  %.pre = load i8, ptr %.phi.trans.insert, align 1, !tbaa !5, !range !21
  br label %.thread

.thread:                                          ; preds = %..thread_crit_edge, %98
  %125 = phi i8 [ %.pre, %..thread_crit_edge ], [ %100, %98 ]
  %126 = getelementptr inbounds i8, ptr %70, i64 57
  %127 = trunc nuw i8 %125 to i1
  br i1 %127, label %128, label %155

128:                                              ; preds = %.thread
  store i8 0, ptr %126, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  %129 = getelementptr inbounds i8, ptr %67, i64 24
  store i32 0, ptr %12, align 4, !tbaa !23
  %130 = load i32, ptr %129, align 8, !tbaa !24
  %.not283 = icmp eq i32 %130, 0
  br i1 %.not283, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %150, %128
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  store i8 1, ptr %126, align 1, !tbaa !5
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  br label %537

.lr.ph:                                           ; preds = %128, %150
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  call void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
  %131 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %13, i8 noundef signext 91, i64 noundef -1) #7
  %.not = icmp eq i64 %131, -1
  br i1 %.not, label %150, label %132

132:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #7
  store i8 91, ptr %15, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #7
  store i8 93, ptr %16, align 1, !tbaa !47
  invoke void @_ZN11spirv_cross4joinIJcRjcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 1 dereferenceable(1) %15, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %133 unwind label %139

133:                                              ; preds = %132
  %134 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, i64 noundef %131, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %135 unwind label %141

135:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  %136 = load i32, ptr %12, align 4, !tbaa !23
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i32 noundef %136)
          to label %137 unwind label %143

137:                                              ; preds = %135
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %138 unwind label %145

138:                                              ; preds = %137
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %150

139:                                              ; preds = %132
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %149

141:                                              ; preds = %133
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %148

143:                                              ; preds = %135
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %147

145:                                              ; preds = %137
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %147

147:                                              ; preds = %145, %143
  %.pn = phi { ptr, i32 } [ %146, %145 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %148

148:                                              ; preds = %147, %141
  %.pn.pn = phi { ptr, i32 } [ %.pn, %147 ], [ %142, %141 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %149

149:                                              ; preds = %148, %139
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %148 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br label %538

150:                                              ; preds = %138, %.lr.ph
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  %151 = load i32, ptr %12, align 4, !tbaa !23
  %152 = add i32 %151, 1
  store i32 %152, ptr %12, align 4, !tbaa !23
  %153 = load i32, ptr %129, align 8, !tbaa !24
  %154 = icmp ult i32 %152, %153
  br i1 %154, label %.lr.ph, label %._crit_edge, !llvm.loop !48

155:                                              ; preds = %.thread, %124
  call void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2)
  br label %537

156:                                              ; preds = %95
  br i1 %68, label %160, label %157

157:                                              ; preds = %156
  %158 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %67)
  %brmerge258 = select i1 %158, i1 true, i1 %78
  br i1 %brmerge258, label %162, label %159

159:                                              ; preds = %157
  call void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2)
  br label %537

160:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %161 = call noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1, i32 noundef 1)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %161)
  br label %165

162:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %163 = getelementptr inbounds i8, ptr %67, i64 8
  %164 = load i32, ptr %163, align 8, !tbaa !23
  store i32 %164, ptr %19, align 4, !tbaa !23
  br label %165

165:                                              ; preds = %162, %160
  %166 = call i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_1EEEv(ptr noundef nonnull align 4 dereferenceable(4) %19)
  store i32 %166, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  %167 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %18)
  %168 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %167)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull @.str.92, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %169 unwind label %179

169:                                              ; preds = %165
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #7
  %170 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
          to label %171 unwind label %181

171:                                              ; preds = %169
  %.not185 = icmp eq ptr %170, null
  br i1 %.not185, label %185, label %172

172:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  %173 = getelementptr inbounds i8, ptr %170, i64 12
  %174 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %173)
  %175 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %174)
          to label %176 unwind label %183

176:                                              ; preds = %172
  invoke void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %175, i32 noundef %1, i1 noundef zeroext false)
          to label %177 unwind label %183

177:                                              ; preds = %176
  %178 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %185

179:                                              ; preds = %165
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #7
  br label %536

181:                                              ; preds = %533, %513, %466, %463, %185, %169
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %535

183:                                              ; preds = %176, %172
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  br label %535

185:                                              ; preds = %177, %171
  %186 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %67)
          to label %187 unwind label %181

187:                                              ; preds = %185
  br i1 %186, label %188, label %409

188:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  %189 = select i1 %69, ptr @.str.156, ptr @.str.35
  store ptr %189, ptr %23, align 8, !tbaa !50
  %.not208 = icmp eq ptr %71, null
  br i1 %.not208, label %194, label %190

190:                                              ; preds = %188
  %191 = getelementptr inbounds i8, ptr %71, i64 57
  %192 = load i8, ptr %191, align 1, !tbaa !5, !range !21, !noundef !22
  %193 = trunc nuw i8 %192 to i1
  br label %194

194:                                              ; preds = %190, %188
  %195 = phi i1 [ false, %188 ], [ %193, %190 ]
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %24) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %24, ptr noundef nonnull align 8 dereferenceable(336) %67)
          to label %196 unwind label %199

196:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br i1 %195, label %197, label %201

197:                                              ; preds = %196
  %198 = getelementptr inbounds i8, ptr %71, i64 57
  store i8 0, ptr %198, align 1, !tbaa !5
  br label %201

199:                                              ; preds = %194
  %200 = landingpad { ptr, i32 }
          cleanup
  br label %408

201:                                              ; preds = %197, %196
  br i1 %78, label %202, label %303

202:                                              ; preds = %201
  %203 = getelementptr inbounds i8, ptr %70, i64 57
  store i8 0, ptr %203, align 1, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %67, i64 28
  %205 = load i32, ptr %204, align 4, !tbaa !51
  %206 = getelementptr inbounds i8, ptr %24, i64 24
  store i32 %205, ptr %206, align 8, !tbaa !24
  %207 = getelementptr inbounds i8, ptr %24, i64 28
  store i32 1, ptr %207, align 4, !tbaa !51
  %208 = getelementptr inbounds i8, ptr %168, i64 28
  %209 = load i32, ptr %208, align 4, !tbaa !51
  %.not230 = icmp eq i32 %209, %205
  br i1 %.not230, label %222, label %210

210:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  %211 = load ptr, ptr %0, align 8, !tbaa !52
  %212 = getelementptr inbounds i8, ptr %211, i64 152
  %213 = load ptr, ptr %212, align 8
  invoke void %213(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %24, i32 noundef 0)
          to label %214 unwind label %217

214:                                              ; preds = %210
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(3) @.str.91)
          to label %215 unwind label %219

215:                                              ; preds = %214
  %216 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  br label %222

217:                                              ; preds = %210
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %221

219:                                              ; preds = %214
  %220 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %221

221:                                              ; preds = %219, %217
  %.pn231 = phi { ptr, i32 } [ %220, %219 ], [ %218, %217 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #7
  br label %407

222:                                              ; preds = %215, %202
  br i1 %195, label %223, label %241

223:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #7
  %224 = getelementptr inbounds i8, ptr %67, i64 24
  store i32 0, ptr %28, align 4, !tbaa !23
  %225 = load i32, ptr %224, align 8, !tbaa !24
  %.not290 = icmp eq i32 %225, 0
  br i1 %.not290, label %._crit_edge282, label %.lr.ph281

._crit_edge282:                                   ; preds = %228, %223
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %302

.lr.ph281:                                        ; preds = %223, %228
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %226 unwind label %233

226:                                              ; preds = %.lr.ph281
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2)
          to label %227 unwind label %235

227:                                              ; preds = %226
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 1 dereferenceable(3) @.str.157)
          to label %228 unwind label %237

228:                                              ; preds = %227
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  %229 = load i32, ptr %28, align 4, !tbaa !23
  %230 = add i32 %229, 1
  store i32 %230, ptr %28, align 4, !tbaa !23
  %231 = load i32, ptr %224, align 8, !tbaa !24
  %232 = icmp ult i32 %230, %231
  br i1 %232, label %.lr.ph281, label %._crit_edge282, !llvm.loop !54

233:                                              ; preds = %.lr.ph281
  %234 = landingpad { ptr, i32 }
          cleanup
  br label %240

235:                                              ; preds = %226
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %239

237:                                              ; preds = %227
  %238 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  br label %239

239:                                              ; preds = %237, %235
  %.pn248 = phi { ptr, i32 } [ %238, %237 ], [ %236, %235 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %240

240:                                              ; preds = %239, %233
  %.pn248.pn = phi { ptr, i32 } [ %.pn248, %239 ], [ %234, %233 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  br label %407

241:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %31) #7
  %242 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
          to label %243 unwind label %250

243:                                              ; preds = %241
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %31, ptr noundef nonnull align 8 dereferenceable(336) %242)
          to label %244 unwind label %250

244:                                              ; preds = %243
  %245 = getelementptr inbounds i8, ptr %31, i64 28
  %246 = load i32, ptr %245, align 4, !tbaa !51
  %247 = getelementptr inbounds i8, ptr %31, i64 24
  store i32 %246, ptr %247, align 8, !tbaa !24
  store i32 1, ptr %245, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #7
  %248 = getelementptr inbounds i8, ptr %67, i64 24
  store i32 0, ptr %32, align 4, !tbaa !23
  %249 = load i32, ptr %248, align 8, !tbaa !24
  %.not288 = icmp eq i32 %249, 0
  br i1 %.not288, label %._crit_edge279, label %.lr.ph278

._crit_edge279:                                   ; preds = %287, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %302

250:                                              ; preds = %243, %241
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %301

.lr.ph278:                                        ; preds = %244, %287
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %31)
          to label %252 unwind label %256

252:                                              ; preds = %.lr.ph278
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.58)
          to label %253 unwind label %258

253:                                              ; preds = %252
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #7
  store i32 0, ptr %35, align 4, !tbaa !23
  %254 = load i32, ptr %247, align 8, !tbaa !24
  %.not289 = icmp eq i32 %254, 0
  br i1 %.not289, label %._crit_edge276, label %.lr.ph275

._crit_edge276:                                   ; preds = %281, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  %255 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.53)
          to label %285 unwind label %292

256:                                              ; preds = %.lr.ph278
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %260

258:                                              ; preds = %252
  %259 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %260

260:                                              ; preds = %258, %256
  %.pn234 = phi { ptr, i32 } [ %259, %258 ], [ %257, %256 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  br label %300

.lr.ph275:                                        ; preds = %253, %281
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %261 unwind label %271

261:                                              ; preds = %.lr.ph275
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_SA_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %35, ptr noundef nonnull align 1 dereferenceable(3) @.str.158, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %262 unwind label %273

262:                                              ; preds = %261
  %263 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %264 unwind label %275

264:                                              ; preds = %262
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  %265 = load i32, ptr %35, align 4, !tbaa !23
  %266 = add i32 %265, 1
  %267 = load i32, ptr %247, align 8, !tbaa !24
  %268 = icmp ult i32 %266, %267
  br i1 %268, label %269, label %281

269:                                              ; preds = %264
  %270 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.55)
          to label %._crit_edge291 unwind label %279

._crit_edge291:                                   ; preds = %269
  %.pre292 = load i32, ptr %35, align 4, !tbaa !23
  %.pre293 = load i32, ptr %247, align 8, !tbaa !24
  %.pre294 = add i32 %.pre292, 1
  br label %281

271:                                              ; preds = %.lr.ph275
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %278

273:                                              ; preds = %261
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %277

275:                                              ; preds = %262
  %276 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  br label %277

277:                                              ; preds = %275, %273
  %.pn239 = phi { ptr, i32 } [ %276, %275 ], [ %274, %273 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %278

278:                                              ; preds = %277, %271
  %.pn239.pn = phi { ptr, i32 } [ %.pn239, %277 ], [ %272, %271 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %284

279:                                              ; preds = %269
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %284

281:                                              ; preds = %._crit_edge291, %264
  %.pre-phi = phi i32 [ %.pre294, %._crit_edge291 ], [ %266, %264 ]
  %282 = phi i32 [ %.pre293, %._crit_edge291 ], [ %267, %264 ]
  store i32 %.pre-phi, ptr %35, align 4, !tbaa !23
  %283 = icmp ult i32 %.pre-phi, %282
  br i1 %283, label %.lr.ph275, label %._crit_edge276, !llvm.loop !55

284:                                              ; preds = %279, %278
  %.pn242 = phi { ptr, i32 } [ %280, %279 ], [ %.pn239.pn, %278 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  br label %299

285:                                              ; preds = %._crit_edge276
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %286 unwind label %294

286:                                              ; preds = %285
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %287 unwind label %296

287:                                              ; preds = %286
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  %288 = load i32, ptr %32, align 4, !tbaa !23
  %289 = add i32 %288, 1
  store i32 %289, ptr %32, align 4, !tbaa !23
  %290 = load i32, ptr %248, align 8, !tbaa !24
  %291 = icmp ult i32 %289, %290
  br i1 %291, label %.lr.ph278, label %._crit_edge279, !llvm.loop !56

292:                                              ; preds = %._crit_edge276
  %293 = landingpad { ptr, i32 }
          cleanup
  br label %299

294:                                              ; preds = %285
  %295 = landingpad { ptr, i32 }
          cleanup
  br label %298

296:                                              ; preds = %286
  %297 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %298

298:                                              ; preds = %296, %294
  %.pn237 = phi { ptr, i32 } [ %297, %296 ], [ %295, %294 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  br label %299

299:                                              ; preds = %298, %292, %284
  %.pn242.pn = phi { ptr, i32 } [ %.pn242, %284 ], [ %.pn237, %298 ], [ %293, %292 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  br label %300

300:                                              ; preds = %299, %260
  %.pn242.pn.pn = phi { ptr, i32 } [ %.pn242.pn, %299 ], [ %.pn234, %260 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %31) #7
  br label %301

301:                                              ; preds = %300, %250
  %.pn242.pn.pn.pn = phi { ptr, i32 } [ %.pn242.pn.pn, %300 ], [ %251, %250 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %31) #7
  br label %407

302:                                              ; preds = %._crit_edge279, %._crit_edge282
  store i8 1, ptr %203, align 1, !tbaa !5
  br label %403

303:                                              ; preds = %201
  %304 = getelementptr inbounds i8, ptr %24, i64 28
  store i32 1, ptr %304, align 4, !tbaa !51
  %305 = getelementptr inbounds i8, ptr %168, i64 24
  %306 = load i32, ptr %305, align 8, !tbaa !24
  %307 = getelementptr inbounds i8, ptr %67, i64 24
  %308 = load i32, ptr %307, align 8, !tbaa !24
  %.not209 = icmp eq i32 %306, %308
  br i1 %.not209, label %321, label %309

309:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  %310 = load ptr, ptr %0, align 8, !tbaa !52
  %311 = getelementptr inbounds i8, ptr %310, i64 152
  %312 = load ptr, ptr %311, align 8
  invoke void %312(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %24, i32 noundef 0)
          to label %313 unwind label %316

313:                                              ; preds = %309
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(3) @.str.91)
          to label %314 unwind label %318

314:                                              ; preds = %313
  %315 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %321

316:                                              ; preds = %309
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %320

318:                                              ; preds = %313
  %319 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #7
  br label %320

320:                                              ; preds = %318, %316
  %.pn210 = phi { ptr, i32 } [ %319, %318 ], [ %317, %316 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  br label %407

321:                                              ; preds = %314, %303
  br i1 %195, label %322, label %385

322:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %41) #7
  %323 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
          to label %324 unwind label %330

324:                                              ; preds = %322
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %41, ptr noundef nonnull align 8 dereferenceable(336) %323)
          to label %325 unwind label %330

325:                                              ; preds = %324
  %326 = getelementptr inbounds i8, ptr %41, i64 28
  store i32 1, ptr %326, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #7
  %327 = getelementptr inbounds i8, ptr %67, i64 28
  store i32 0, ptr %42, align 4, !tbaa !23
  %328 = load i32, ptr %327, align 4, !tbaa !51
  %.not286 = icmp eq i32 %328, 0
  br i1 %.not286, label %._crit_edge273, label %.lr.ph272

.lr.ph272:                                        ; preds = %325
  %329 = getelementptr inbounds i8, ptr %41, i64 24
  br label %332

._crit_edge273:                                   ; preds = %370, %325
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %41) #7
  br label %403

330:                                              ; preds = %324, %322
  %331 = landingpad { ptr, i32 }
          cleanup
  br label %384

332:                                              ; preds = %.lr.ph272, %370
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %41)
          to label %333 unwind label %337

333:                                              ; preds = %332
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.58)
          to label %334 unwind label %339

334:                                              ; preds = %333
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #7
  store i32 0, ptr %45, align 4, !tbaa !23
  %335 = load i32, ptr %329, align 8, !tbaa !24
  %.not287 = icmp eq i32 %335, 0
  br i1 %.not287, label %._crit_edge270, label %.lr.ph269

._crit_edge270:                                   ; preds = %361, %334
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #7
  %336 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull @.str.53)
          to label %368 unwind label %375

337:                                              ; preds = %332
  %338 = landingpad { ptr, i32 }
          cleanup
  br label %341

339:                                              ; preds = %333
  %340 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %341

341:                                              ; preds = %339, %337
  %.pn217 = phi { ptr, i32 } [ %340, %339 ], [ %338, %337 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %383

.lr.ph269:                                        ; preds = %334, %361
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2)
          to label %342 unwind label %352

342:                                              ; preds = %.lr.ph269
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S8_SB_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %45, ptr noundef nonnull align 1 dereferenceable(3) @.str.158, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.69)
          to label %343 unwind label %354

343:                                              ; preds = %342
  %344 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %345 unwind label %356

345:                                              ; preds = %343
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  %346 = load i32, ptr %45, align 4, !tbaa !23
  %347 = add i32 %346, 1
  %348 = load i32, ptr %329, align 8, !tbaa !24
  %349 = icmp ult i32 %347, %348
  br i1 %349, label %350, label %361

350:                                              ; preds = %345
  %351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull @.str.55)
          to label %361 unwind label %359

352:                                              ; preds = %.lr.ph269
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %367

354:                                              ; preds = %342
  %355 = landingpad { ptr, i32 }
          cleanup
  br label %358

356:                                              ; preds = %343
  %357 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %358

358:                                              ; preds = %356, %354
  %.pn222 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  br label %366

359:                                              ; preds = %350
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %366

361:                                              ; preds = %350, %345
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  %362 = load i32, ptr %45, align 4, !tbaa !23
  %363 = add i32 %362, 1
  store i32 %363, ptr %45, align 4, !tbaa !23
  %364 = load i32, ptr %329, align 8, !tbaa !24
  %365 = icmp ult i32 %363, %364
  br i1 %365, label %.lr.ph269, label %._crit_edge270, !llvm.loop !57

366:                                              ; preds = %359, %358
  %.pn224 = phi { ptr, i32 } [ %360, %359 ], [ %.pn222, %358 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %367

367:                                              ; preds = %366, %352
  %.pn224.pn = phi { ptr, i32 } [ %.pn224, %366 ], [ %353, %352 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #7
  br label %382

368:                                              ; preds = %._crit_edge270
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %369 unwind label %377

369:                                              ; preds = %368
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %370 unwind label %379

370:                                              ; preds = %369
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  %371 = load i32, ptr %42, align 4, !tbaa !23
  %372 = add i32 %371, 1
  store i32 %372, ptr %42, align 4, !tbaa !23
  %373 = load i32, ptr %327, align 4, !tbaa !51
  %374 = icmp ult i32 %372, %373
  br i1 %374, label %332, label %._crit_edge273, !llvm.loop !58

375:                                              ; preds = %._crit_edge270
  %376 = landingpad { ptr, i32 }
          cleanup
  br label %382

377:                                              ; preds = %368
  %378 = landingpad { ptr, i32 }
          cleanup
  br label %381

379:                                              ; preds = %369
  %380 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %381

381:                                              ; preds = %379, %377
  %.pn220 = phi { ptr, i32 } [ %380, %379 ], [ %378, %377 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %382

382:                                              ; preds = %381, %375, %367
  %.pn224.pn.pn = phi { ptr, i32 } [ %.pn224.pn, %367 ], [ %.pn220, %381 ], [ %376, %375 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  br label %383

383:                                              ; preds = %382, %341
  %.pn224.pn.pn.pn = phi { ptr, i32 } [ %.pn224.pn.pn, %382 ], [ %.pn217, %341 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #7
  br label %384

384:                                              ; preds = %383, %330
  %.pn224.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn224.pn.pn.pn, %383 ], [ %331, %330 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %41) #7
  br label %407

385:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #7
  %386 = getelementptr inbounds i8, ptr %67, i64 28
  store i32 0, ptr %49, align 4, !tbaa !23
  %387 = load i32, ptr %386, align 4, !tbaa !51
  %.not285 = icmp eq i32 %387, 0
  br i1 %.not285, label %._crit_edge267, label %.lr.ph266

._crit_edge267:                                   ; preds = %390, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #7
  br label %403

.lr.ph266:                                        ; preds = %385, %390
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %388 unwind label %395

388:                                              ; preds = %.lr.ph266
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %389 unwind label %397

389:                                              ; preds = %388
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 1 dereferenceable(2) @.str.69, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(2) @.str.68, ptr noundef nonnull align 4 dereferenceable(4) %49, ptr noundef nonnull align 1 dereferenceable(3) @.str.157)
          to label %390 unwind label %399

390:                                              ; preds = %389
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  %391 = load i32, ptr %49, align 4, !tbaa !23
  %392 = add i32 %391, 1
  store i32 %392, ptr %49, align 4, !tbaa !23
  %393 = load i32, ptr %386, align 4, !tbaa !51
  %394 = icmp ult i32 %392, %393
  br i1 %394, label %.lr.ph266, label %._crit_edge267, !llvm.loop !59

395:                                              ; preds = %.lr.ph266
  %396 = landingpad { ptr, i32 }
          cleanup
  br label %402

397:                                              ; preds = %388
  %398 = landingpad { ptr, i32 }
          cleanup
  br label %401

399:                                              ; preds = %389
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #7
  br label %401

401:                                              ; preds = %399, %397
  %.pn213 = phi { ptr, i32 } [ %400, %399 ], [ %398, %397 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %402

402:                                              ; preds = %401, %395
  %.pn213.pn = phi { ptr, i32 } [ %.pn213, %401 ], [ %396, %395 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #7
  br label %407

403:                                              ; preds = %._crit_edge273, %._crit_edge267, %302
  br i1 %195, label %404, label %406

404:                                              ; preds = %403
  %405 = getelementptr inbounds i8, ptr %71, i64 57
  store i8 1, ptr %405, align 1, !tbaa !5
  br label %406

406:                                              ; preds = %404, %403
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %24) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  br label %533

407:                                              ; preds = %402, %384, %320, %301, %240, %221
  %.pn248.pn.pn = phi { ptr, i32 } [ %.pn248.pn, %240 ], [ %.pn242.pn.pn.pn, %301 ], [ %.pn231, %221 ], [ %.pn224.pn.pn.pn.pn, %384 ], [ %.pn213.pn, %402 ], [ %.pn210, %320 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %24) #7
  br label %408

408:                                              ; preds = %407, %199
  %.pn248.pn.pn.pn = phi { ptr, i32 } [ %.pn248.pn.pn, %407 ], [ %200, %199 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  br label %535

409:                                              ; preds = %187
  br i1 %78, label %410, label %463

410:                                              ; preds = %409
  %411 = getelementptr inbounds i8, ptr %70, i64 57
  store i8 0, ptr %411, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %52) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %52, ptr noundef nonnull align 8 dereferenceable(336) %67)
          to label %412 unwind label %417

412:                                              ; preds = %410
  %413 = getelementptr inbounds i8, ptr %52, i64 24
  store i32 1, ptr %413, align 8, !tbaa !24
  %414 = getelementptr inbounds i8, ptr %52, i64 28
  store i32 1, ptr %414, align 4, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %53) #7
  %415 = getelementptr inbounds i8, ptr %67, i64 24
  store i32 0, ptr %53, align 4, !tbaa !23
  %416 = load i32, ptr %415, align 8, !tbaa !24
  %.not284 = icmp eq i32 %416, 0
  br i1 %.not284, label %._crit_edge264, label %.lr.ph263

._crit_edge264:                                   ; preds = %455, %412
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #7
  store i8 1, ptr %411, align 1, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %52) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %52) #7
  br label %533

417:                                              ; preds = %410
  %418 = landingpad { ptr, i32 }
          cleanup
  br label %462

.lr.ph263:                                        ; preds = %412, %455
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %419 unwind label %425

419:                                              ; preds = %.lr.ph263
  %420 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %54, i8 noundef signext 91, i64 noundef -1) #7
  %421 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %54, i8 noundef signext 93, i64 noundef -1) #7
  %422 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %54, i8 noundef signext 46, i64 noundef -1) #7
  %.not198 = icmp ne i64 %422, -1
  %423 = icmp ugt i64 %422, %421
  %or.cond261 = and i1 %.not198, %423
  br i1 %or.cond261, label %424, label %429

424:                                              ; preds = %419
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %54, i64 noundef %422)
          to label %429 unwind label %427

425:                                              ; preds = %.lr.ph263
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %461

427:                                              ; preds = %424
  %428 = landingpad { ptr, i32 }
          cleanup
  br label %460

429:                                              ; preds = %424, %419
  %.not199 = icmp eq i64 %420, -1
  br i1 %.not199, label %455, label %430

430:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #7
  %431 = load ptr, ptr %0, align 8, !tbaa !52
  %432 = getelementptr inbounds i8, ptr %431, i64 152
  %433 = load ptr, ptr %432, align 8
  invoke void %433(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %52, i32 noundef 0)
          to label %434 unwind label %441

434:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %57) #7
  store i8 91, ptr %57, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %58) #7
  store i8 93, ptr %58, align 1, !tbaa !47
  invoke void @_ZN11spirv_cross4joinIJcRjcRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 1 dereferenceable(1) %57, ptr noundef nonnull align 4 dereferenceable(4) %53, ptr noundef nonnull align 1 dereferenceable(1) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.53)
          to label %435 unwind label %443

435:                                              ; preds = %434
  %436 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %54, i64 noundef %420, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %437 unwind label %445

437:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #7
  %438 = load i32, ptr %53, align 4, !tbaa !23
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i32 noundef %438)
          to label %439 unwind label %447

439:                                              ; preds = %437
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_RA4_S2_SB_SF_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(3) @.str.159, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(4) @.str.160, ptr noundef nonnull align 8 dereferenceable(32) %436, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %440 unwind label %449

440:                                              ; preds = %439
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  br label %455

441:                                              ; preds = %430
  %442 = landingpad { ptr, i32 }
          cleanup
  br label %454

443:                                              ; preds = %434
  %444 = landingpad { ptr, i32 }
          cleanup
  br label %453

445:                                              ; preds = %435
  %446 = landingpad { ptr, i32 }
          cleanup
  br label %452

447:                                              ; preds = %437
  %448 = landingpad { ptr, i32 }
          cleanup
  br label %451

449:                                              ; preds = %439
  %450 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #7
  br label %451

451:                                              ; preds = %449, %447
  %.pn200 = phi { ptr, i32 } [ %450, %449 ], [ %448, %447 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #7
  br label %452

452:                                              ; preds = %451, %445
  %.pn200.pn = phi { ptr, i32 } [ %.pn200, %451 ], [ %446, %445 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #7
  br label %453

453:                                              ; preds = %452, %443
  %.pn200.pn.pn = phi { ptr, i32 } [ %.pn200.pn, %452 ], [ %444, %443 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %57) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #7
  br label %454

454:                                              ; preds = %453, %441
  %.pn200.pn.pn.pn = phi { ptr, i32 } [ %.pn200.pn.pn, %453 ], [ %442, %441 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #7
  br label %460

455:                                              ; preds = %440, %429
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  %456 = load i32, ptr %53, align 4, !tbaa !23
  %457 = add i32 %456, 1
  store i32 %457, ptr %53, align 4, !tbaa !23
  %458 = load i32, ptr %415, align 8, !tbaa !24
  %459 = icmp ult i32 %457, %458
  br i1 %459, label %.lr.ph263, label %._crit_edge264, !llvm.loop !60

460:                                              ; preds = %454, %427
  %.pn200.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn200.pn.pn.pn, %454 ], [ %428, %427 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #7
  br label %461

461:                                              ; preds = %460, %425
  %.pn200.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn200.pn.pn.pn.pn, %460 ], [ %426, %425 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %53) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %52) #7
  br label %462

462:                                              ; preds = %461, %417
  %.pn200.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn200.pn.pn.pn.pn.pn, %461 ], [ %418, %417 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %52) #7
  br label %535

463:                                              ; preds = %409
  %464 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %168)
          to label %465 unwind label %181

465:                                              ; preds = %463
  br i1 %464, label %469, label %466

466:                                              ; preds = %465
  %467 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %168)
          to label %468 unwind label %181

468:                                              ; preds = %466
  br i1 %467, label %469, label %513

469:                                              ; preds = %468, %465
  %470 = getelementptr inbounds i8, ptr %168, i64 24
  %471 = load i32, ptr %470, align 8, !tbaa !24
  %472 = icmp ult i32 %471, 5
  br i1 %472, label %473, label %513

473:                                              ; preds = %469
  %474 = getelementptr inbounds i8, ptr %67, i64 24
  %475 = load i32, ptr %474, align 8, !tbaa !24
  %476 = icmp ugt i32 %471, %475
  br i1 %476, label %477, label %513

477:                                              ; preds = %473
  %.not189 = icmp eq i32 %475, 0
  br i1 %.not189, label %.critedge, label %478

.critedge:                                        ; preds = %477
  call void @__assert_fail(ptr noundef nonnull @.str.161, ptr noundef nonnull @.str.25, i32 noundef 5416, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj) #8
  unreachable

478:                                              ; preds = %477
  br i1 %69, label %479, label %480

479:                                              ; preds = %478
  call void @__assert_fail(ptr noundef nonnull @.str.162, ptr noundef nonnull @.str.25, i32 noundef 5422, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross11CompilerMSL20emit_store_statementEjj) #8
  unreachable

480:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %481 unwind label %495

481:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %482 unwind label %497

482:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #7
  %483 = load ptr, ptr %0, align 8, !tbaa !52
  %484 = getelementptr inbounds i8, ptr %483, i64 152
  %485 = load ptr, ptr %484, align 8
  invoke void %485(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(12482) %0, ptr noundef nonnull align 8 dereferenceable(336) %67, i32 noundef 0)
          to label %486 unwind label %499

486:                                              ; preds = %482
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %487 unwind label %501

487:                                              ; preds = %486
  invoke void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_S9_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.58, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 1 dereferenceable(2) @.str.60, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(3) @.str.91, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %488 unwind label %503

488:                                              ; preds = %487
  %489 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #7
  %490 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
          to label %491 unwind label %507

491:                                              ; preds = %488
  %492 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %490, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %493 unwind label %507

493:                                              ; preds = %491
  br i1 %492, label %509, label %494

494:                                              ; preds = %493
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %509 unwind label %507

495:                                              ; preds = %480
  %496 = landingpad { ptr, i32 }
          cleanup
  br label %512

497:                                              ; preds = %481
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %511

499:                                              ; preds = %482
  %500 = landingpad { ptr, i32 }
          cleanup
  br label %506

501:                                              ; preds = %486
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %505

503:                                              ; preds = %487
  %504 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #7
  br label %505

505:                                              ; preds = %503, %501
  %.pn190 = phi { ptr, i32 } [ %504, %503 ], [ %502, %501 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #7
  br label %506

506:                                              ; preds = %505, %499
  %.pn190.pn = phi { ptr, i32 } [ %.pn190, %505 ], [ %500, %499 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #7
  br label %510

507:                                              ; preds = %494, %491, %488
  %508 = landingpad { ptr, i32 }
          cleanup
  br label %510

509:                                              ; preds = %494, %493
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  br label %533

510:                                              ; preds = %507, %506
  %.pn193 = phi { ptr, i32 } [ %508, %507 ], [ %.pn190.pn, %506 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #7
  br label %511

511:                                              ; preds = %510, %497
  %.pn193.pn = phi { ptr, i32 } [ %.pn193, %510 ], [ %498, %497 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #7
  br label %512

512:                                              ; preds = %511, %495
  %.pn193.pn.pn = phi { ptr, i32 } [ %.pn193.pn, %511 ], [ %496, %495 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #7
  br label %535

513:                                              ; preds = %473, %469, %468
  %514 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler9is_matrixERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %67)
          to label %515 unwind label %181

515:                                              ; preds = %513
  br i1 %514, label %533, label %516

516:                                              ; preds = %515
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i1 noundef zeroext true)
          to label %517 unwind label %524

517:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
          to label %518 unwind label %526

518:                                              ; preds = %517
  %519 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2)
          to label %520 unwind label %528

520:                                              ; preds = %518
  %521 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %519, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %522 unwind label %528

522:                                              ; preds = %520
  br i1 %521, label %530, label %523

523:                                              ; preds = %522
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 1 dereferenceable(4) @.str.153, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(2) @.str.57)
          to label %530 unwind label %528

524:                                              ; preds = %516
  %525 = landingpad { ptr, i32 }
          cleanup
  br label %532

526:                                              ; preds = %517
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %531

528:                                              ; preds = %523, %520, %518
  %529 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  br label %531

530:                                              ; preds = %523, %522
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  br label %533

531:                                              ; preds = %528, %526
  %.pn186 = phi { ptr, i32 } [ %529, %528 ], [ %527, %526 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #7
  br label %532

532:                                              ; preds = %531, %524
  %.pn186.pn = phi { ptr, i32 } [ %.pn186, %531 ], [ %525, %524 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #7
  br label %535

533:                                              ; preds = %._crit_edge264, %515, %530, %509, %406
  invoke void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
          to label %534 unwind label %181

534:                                              ; preds = %533
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  br label %537

535:                                              ; preds = %532, %512, %462, %408, %183, %181
  %.pn248.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn248.pn.pn.pn, %408 ], [ %182, %181 ], [ %.pn200.pn.pn.pn.pn.pn.pn, %462 ], [ %.pn193.pn.pn, %512 ], [ %.pn186.pn, %532 ], [ %184, %183 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %536

536:                                              ; preds = %535, %179
  %.pn248.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn248.pn.pn.pn.pn, %535 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  br label %538

537:                                              ; preds = %._crit_edge, %155, %123, %534, %159, %89
  ret void

538:                                              ; preds = %536, %149, %122, %114, %94
  %.pn255.pn = phi { ptr, i32 } [ %.pn255, %94 ], [ %.pn248.pn.pn.pn.pn.pn, %536 ], [ %.pn183, %114 ], [ %.pn181, %122 ], [ %.pn.pn.pn, %149 ]
  resume { ptr, i32 } %.pn255.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA5_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5)) local_unnamed_addr #4 align 2

declare void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

declare void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

declare void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA14_KcS7_RA3_S8_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #4 align 2

declare void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

declare void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEcm(ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEmRKS4_(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJcRjcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #2

declare void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) local_unnamed_addr #3

declare void @_ZN11spirv_cross12CompilerGLSL20emit_store_statementEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross11CompilerMSL22get_type_address_spaceB5cxx11ERKNS_8SPIRTypeEjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(12482), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef, i1 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_RPS1_S9_RA3_S1_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S7_SB_SC_RA3_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #4 align 2

declare void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

declare void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S7_SA_S9_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcRjSB_RA4_S9_S8_SB_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRjRA3_S8_SB_SA_EEES6_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_SA_RA4_S2_SB_SF_SA_SD_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJcRjcRA2_KcEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEDpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #2

declare void @_ZN11spirv_cross12CompilerGLSL21to_pointer_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA2_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES3_S9_RA3_S1_S9_EEES9_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

declare void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL26optimize_read_modify_writeERKNS_8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS8_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !17, i64 57}
!6 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !7, i64 0, !8, i64 12, !12, i64 16, !16, i64 48, !8, i64 52, !17, i64 56, !17, i64 57, !17, i64 58, !17, i64 59, !18, i64 64, !18, i64 120, !18, i64 176, !9, i64 232}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !13, i64 0, !15, i64 8, !10, i64 16}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !14, i64 0}
!14 = !{!"any pointer", !10, i64 0}
!15 = !{!"long", !10, i64 0}
!16 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!17 = !{!"bool", !10, i64 0}
!18 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !19, i64 0, !15, i64 16, !20, i64 24}
!19 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !14, i64 0, !15, i64 8}
!20 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !10, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!9, !9, i64 0}
!24 = !{!25, !9, i64 24}
!25 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !26, i64 12, !27, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !28, i64 32, !31, i64 88, !9, i64 120, !17, i64 124, !17, i64 125, !34, i64 128, !35, i64 136, !28, i64 192, !38, i64 248, !16, i64 272, !16, i64 276, !42, i64 280}
!26 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!27 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !29, i64 0, !15, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !14, i64 0, !15, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!31 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !32, i64 0, !15, i64 16, !33, i64 24}
!32 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !14, i64 0, !15, i64 8}
!33 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!34 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !36, i64 0, !15, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !14, i64 0, !15, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!38 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !16, i64 0, !39, i64 4, !17, i64 8, !17, i64 9, !17, i64 10, !9, i64 12, !40, i64 16, !41, i64 20}
!39 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!40 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!41 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!42 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !43, i64 0}
!43 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !14, i64 0, !15, i64 8, !44, i64 16, !15, i64 24, !45, i64 32, !14, i64 48}
!44 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !14, i64 0}
!45 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !46, i64 0, !15, i64 8}
!46 = !{!"float", !10, i64 0}
!47 = !{!10, !10, i64 0}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = !{!14, !14, i64 0}
!51 = !{!25, !9, i64 28}
!52 = !{!53, !53, i64 0}
!53 = !{!"vtable pointer", !11, i64 0}
!54 = distinct !{!54, !49}
!55 = distinct !{!55, !49}
!56 = distinct !{!56, !49}
!57 = distinct !{!57, !49}
!58 = distinct !{!58, !49}
!59 = distinct !{!59, !49}
!60 = distinct !{!60, !49}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass