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

; 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.282" = type { i32 }
%class.anon.389 = 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.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = 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.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { 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::CompilerGLSL::TextureFunctionArguments" = type <{ %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i8, [6 x i8] }>
%"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments" = type <{ %"class.spirv_cross::TypedID.282", [4 x i8], ptr, i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"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] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_map.213" = type { %"class.std::_Hashtable.214" }
%"class.std::_Hashtable.214" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set.245" = type { %"class.std::_Hashtable.246" }
%"class.std::_Hashtable.246" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.263" = type { %"class.std::_Hashtable.264" }
%"class.std::_Hashtable.264" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1081 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1082 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1083 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1084 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1085 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1086 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1087 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1088 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1089 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1090 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1091 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1092 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1093 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1094 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1095 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1096 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1097 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1098 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1099 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

; 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)) #1 align 2

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

; 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

; 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: 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: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) #7

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(74) %2, ptr noundef %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.spirv_cross::TypedID.282", align 4
  %10 = alloca ptr, align 8
  %11 = alloca i1, align 1
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca i8, align 1
  %18 = alloca %class.anon.389, align 1
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca i1, align 1
  %24 = alloca i1, align 1
  %25 = alloca ptr, align 8
  %26 = alloca %"struct.spirv_cross::SPIRType", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca i8, align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.std::__cxx11::basic_string", align 8
  %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
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %66 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %68, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 8 %69, i64 4, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %70, i32 0, i32 0
  %72 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %71, i32 0, i32 2
  %73 = load ptr, ptr %72, align 8, !tbaa !12
  store ptr %73, ptr %10, align 8, !tbaa !5
  store i1 false, ptr %11, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %74, i32 0, i32 0
  %76 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %75, i32 0, i32 3
  %77 = load i8, ptr %76, align 8, !tbaa !17, !range !18, !noundef !19
  %78 = trunc i8 %77 to i1
  br i1 %78, label %79, label %88

79:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #8
  %80 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %81 unwind label %84

81:                                               ; preds = %79
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %80)
          to label %82 unwind label %84

82:                                               ; preds = %81
  %83 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #8
  br label %97

84:                                               ; preds = %81, %79
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %13, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #8
  br label %1094

88:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #8
  %89 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %90 unwind label %93

90:                                               ; preds = %88
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %89)
          to label %91 unwind label %93

91:                                               ; preds = %90
  %92 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %15) #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 %97

93:                                               ; preds = %90, %88
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %13, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  br label %1094

97:                                               ; preds = %91, %82
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %98, i32 0, i32 13
  %100 = load i8, ptr %99, align 8, !tbaa !20, !range !18, !noundef !19
  %101 = trunc i8 %100 to i1
  br i1 %101, label %102, label %114

102:                                              ; preds = %97
  %103 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef 0) #8
  %104 = icmp ne i64 %103, -1
  br i1 %104, label %105, label %114

105:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #8
  %106 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %66, i32 0, i32 21
  %107 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %106, i32 0, i32 16
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %108 unwind label %110

108:                                              ; preds = %105
  %109 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  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
  br label %114

110:                                              ; preds = %105
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %13, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #8
  br label %1094

114:                                              ; preds = %108, %102, %97
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #8
  %115 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %66, i32 0, i32 21
  %116 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %115, i32 0, i32 19
  %117 = load i8, ptr %116, align 4, !tbaa !21, !range !18, !noundef !19
  %118 = trunc i8 %117 to i1
  %119 = zext i1 %118 to i8
  store i8 %119, ptr %17, align 1, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  %120 = getelementptr inbounds %class.anon.389, ptr %18, i32 0, i32 0
  %121 = load i8, ptr %17, align 1, !tbaa !129, !range !18, !noundef !19
  %122 = trunc i8 %121 to i1
  %123 = zext i1 %122 to i8
  store i8 %123, ptr %120, align 1, !tbaa !130
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %124, i32 0, i32 1
  %126 = load i32, ptr %125, align 8, !tbaa !132
  %127 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %126)
          to label %128 unwind label %187

128:                                              ; preds = %114
  %129 = zext i1 %127 to i8
  store i8 %129, ptr %19, align 1, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %130, i32 0, i32 2
  %132 = load i32, ptr %131, align 4, !tbaa !133
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %133, i32 0, i32 1
  %135 = load i32, ptr %134, align 8, !tbaa !132
  %136 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %66, i32 noundef %135)
          to label %137 unwind label %191

137:                                              ; preds = %128
  %138 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %136, i32 0, i32 4
  %139 = load i32, ptr %138, align 8, !tbaa !134
  %140 = invoke noundef ptr @"_ZZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbENK3$_0clEjj"(ptr noundef nonnull align 1 dereferenceable(1) %18, i32 noundef %132, i32 noundef %139)
          to label %141 unwind label %191

141:                                              ; preds = %137
  store ptr %140, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #8
  %142 = load ptr, ptr %20, align 8, !tbaa !5
  %143 = load i8, ptr %142, align 1, !tbaa !148
  %144 = sext i8 %143 to i32
  %145 = icmp eq i32 %144, 0
  store i1 false, ptr %23, align 1
  store i1 false, ptr %24, align 1
  br i1 %145, label %146, label %151

146:                                              ; preds = %141
  %147 = load ptr, ptr %7, align 8, !tbaa !5
  %148 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %147, i32 0, i32 1
  %149 = load i32, ptr %148, align 8, !tbaa !132
  invoke 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) %66, i32 noundef %149, i1 noundef zeroext true)
          to label %150 unwind label %195

150:                                              ; preds = %146
  br label %158

151:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  store i1 true, ptr %23, align 1
  %152 = load ptr, ptr %7, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %152, i32 0, i32 1
  %154 = load i32, ptr %153, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %154, i1 noundef zeroext true)
          to label %155 unwind label %199

155:                                              ; preds = %151
  store i1 true, ptr %24, align 1
  %156 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef %156)
          to label %157 unwind label %203

157:                                              ; preds = %155
  br label %158

158:                                              ; preds = %157, %150
  %159 = load i1, ptr %24, align 1
  br i1 %159, label %160, label %161

160:                                              ; preds = %158
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %161

161:                                              ; preds = %160, %158
  %162 = load i1, ptr %23, align 1
  br i1 %162, label %163, label %164

163:                                              ; preds = %161
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %164

164:                                              ; preds = %163, %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %165, i32 0, i32 1
  %167 = load i32, ptr %166, align 8, !tbaa !132
  %168 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %66, i32 noundef %167)
          to label %169 unwind label %214

169:                                              ; preds = %164
  store ptr %168, ptr %25, align 8, !tbaa !5
  %170 = load ptr, ptr %25, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %170, i32 0, i32 2
  %172 = load i32, ptr %171, align 8, !tbaa !149
  %173 = icmp eq i32 %172, 8
  br i1 %173, label %174, label %227

174:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 336, ptr %26) #8
  %175 = load ptr, ptr %25, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %26, ptr noundef nonnull align 8 dereferenceable(336) %175)
          to label %176 unwind label %218

176:                                              ; preds = %174
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %177, i32 0, i32 2
  %179 = load i32, ptr %178, align 4, !tbaa !133
  %180 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %26, i32 0, i32 4
  store i32 %179, ptr %180, align 8, !tbaa !134
  %181 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %26, i32 0, i32 2
  store i32 7, ptr %181, align 8, !tbaa !149
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  %182 = load ptr, ptr %25, align 8, !tbaa !5
  %183 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %182, i32 0, i32 2
  %184 = load i32, ptr %183, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(336) %26, i32 noundef %184, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %185 unwind label %222

185:                                              ; preds = %176
  %186 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %26) #8
  br label %227

187:                                              ; preds = %114
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %13, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %14, align 4
  br label %1091

191:                                              ; preds = %137, %128
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %13, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %14, align 4
  br label %1090

195:                                              ; preds = %146
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %13, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %14, align 4
  br label %1089

199:                                              ; preds = %151
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %13, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %14, align 4
  br label %210

203:                                              ; preds = %155
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %13, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %14, align 4
  %207 = load i1, ptr %24, align 1
  br i1 %207, label %208, label %209

208:                                              ; preds = %203
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %209

209:                                              ; preds = %208, %203
  br label %210

210:                                              ; preds = %209, %199
  %211 = load i1, ptr %23, align 1
  br i1 %211, label %212, label %213

212:                                              ; preds = %210
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %213

213:                                              ; preds = %212, %210
  br label %1089

214:                                              ; preds = %164
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %13, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %14, align 4
  br label %1088

218:                                              ; preds = %174
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %13, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %14, align 4
  br label %226

222:                                              ; preds = %176
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %13, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #8
  br label %226

226:                                              ; preds = %222, %218
  call void @llvm.lifetime.end.p0(i64 336, ptr %26) #8
  br label %1088

227:                                              ; preds = %185, %169
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #8
  %228 = load ptr, ptr %10, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %228, i32 0, i32 14
  %230 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %229, i32 0, i32 3
  %231 = load i8, ptr %230, align 1, !tbaa !150, !range !18, !noundef !19
  %232 = trunc i8 %231 to i1
  br i1 %232, label %233, label %239

233:                                              ; preds = %227
  %234 = load ptr, ptr %10, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %234, i32 0, i32 14
  %236 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %235, i32 0, i32 1
  %237 = load i32, ptr %236, align 4, !tbaa !151
  %238 = icmp eq i32 %237, 1
  br i1 %238, label %245, label %239

239:                                              ; preds = %233, %227
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %240, i32 0, i32 14
  %242 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %241, i32 0, i32 1
  %243 = load i32, ptr %242, align 4, !tbaa !151
  %244 = icmp eq i32 %243, 3
  br i1 %244, label %245, label %263

245:                                              ; preds = %239, %233
  %246 = load ptr, ptr %10, align 8, !tbaa !5
  %247 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %248 unwind label %309

248:                                              ; preds = %245
  %249 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %66, ptr noundef nonnull align 8 dereferenceable(336) %246, i32 noundef %247)
          to label %250 unwind label %309

250:                                              ; preds = %248
  br i1 %249, label %251, label %263

251:                                              ; preds = %250
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %252, i32 0, i32 6
  %254 = load i32, ptr %253, align 4, !tbaa !152
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %256, label %263

256:                                              ; preds = %251
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %258, i32 0, i32 3
  %260 = load i8, ptr %259, align 8, !tbaa !17, !range !18, !noundef !19
  %261 = trunc i8 %260 to i1
  %262 = xor i1 %261, true
  br label %263

263:                                              ; preds = %256, %251, %250, %239
  %264 = phi i1 [ false, %251 ], [ false, %250 ], [ false, %239 ], [ %262, %256 ]
  %265 = zext i1 %264 to i8
  store i8 %265, ptr %28, align 1, !tbaa !129
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %266, i32 0, i32 3
  %268 = load i32, ptr %267, align 8, !tbaa !153
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %270, label %629

270:                                              ; preds = %263
  %271 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %272 = trunc i8 %271 to i1
  br i1 %272, label %273, label %279

273:                                              ; preds = %270
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %274, i32 0, i32 3
  %276 = load i32, ptr %275, align 8, !tbaa !153
  %277 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %276)
          to label %278 unwind label %309

278:                                              ; preds = %273
  br label %279

279:                                              ; preds = %278, %270
  %280 = phi i1 [ false, %270 ], [ %277, %278 ]
  %281 = zext i1 %280 to i8
  store i8 %281, ptr %19, align 1, !tbaa !129
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %283, i32 0, i32 4
  %285 = load i8, ptr %284, align 1, !tbaa !154, !range !18, !noundef !19
  %286 = trunc i8 %285 to i1
  br i1 %286, label %292, label %287

287:                                              ; preds = %279
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %288, i32 0, i32 2
  %290 = load i32, ptr %289, align 4, !tbaa !133
  %291 = icmp eq i32 %290, 4
  br i1 %291, label %292, label %331

292:                                              ; preds = %287, %279
  %293 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %294 unwind label %309

294:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #8
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %295, i32 0, i32 1
  %297 = load i32, ptr %296, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %297, i1 noundef zeroext true)
          to label %298 unwind label %313

298:                                              ; preds = %294
  %299 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %29)
          to label %300 unwind label %317

300:                                              ; preds = %298
  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
  %301 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %302 unwind label %309

302:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %303, i32 0, i32 3
  %305 = load i32, ptr %304, align 8, !tbaa !153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %305, i1 noundef zeroext true)
          to label %306 unwind label %322

306:                                              ; preds = %302
  %307 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %308 unwind label %326

308:                                              ; preds = %306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %628

309:                                              ; preds = %1061, %1055, %1046, %1021, %1015, %989, %966, %943, %918, %912, %900, %826, %820, %812, %803, %762, %752, %746, %735, %719, %717, %640, %483, %434, %426, %362, %354, %352, %337, %300, %292, %273, %248, %245
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %13, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %14, align 4
  br label %1087

313:                                              ; preds = %294
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %13, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %14, align 4
  br label %321

317:                                              ; preds = %298
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %13, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %321

321:                                              ; preds = %317, %313
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #8
  br label %1087

322:                                              ; preds = %302
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %13, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %14, align 4
  br label %330

326:                                              ; preds = %306
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %13, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %330

330:                                              ; preds = %326, %322
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  br label %1087

331:                                              ; preds = %287
  %332 = load ptr, ptr %7, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %332, i32 0, i32 0
  %334 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %333, i32 0, i32 5
  %335 = load i8, ptr %334, align 2, !tbaa !155, !range !18, !noundef !19
  %336 = trunc i8 %335 to i1
  br i1 %336, label %337, label %490

337:                                              ; preds = %331
  %338 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1081)
          to label %339 unwind label %309

339:                                              ; preds = %337
  %340 = load ptr, ptr %10, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %340, i32 0, i32 14
  %342 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %341, i32 0, i32 1
  %343 = load i32, ptr %342, align 4, !tbaa !151
  %344 = icmp eq i32 %343, 0
  br i1 %344, label %345, label %409

345:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %346, i32 0, i32 1
  %348 = load i32, ptr %347, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %348, i1 noundef zeroext true)
          to label %349 unwind label %372

349:                                              ; preds = %345
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @.str)
          to label %350 unwind label %376

350:                                              ; preds = %349
  %351 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %352 unwind label %380

352:                                              ; preds = %350
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  %353 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %354 unwind label %309

354:                                              ; preds = %352
  %355 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1082)
          to label %356 unwind label %309

356:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #8
  %357 = load ptr, ptr %7, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %357, i32 0, i32 3
  %359 = load i32, ptr %358, align 8, !tbaa !153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %359, i1 noundef zeroext true)
          to label %360 unwind label %386

360:                                              ; preds = %356
  %361 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %33)
          to label %362 unwind label %390

362:                                              ; preds = %360
  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
  %363 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %364 unwind label %309

364:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  %365 = load ptr, ptr %7, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %365, i32 0, i32 1
  %367 = load i32, ptr %366, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %367, i1 noundef zeroext true)
          to label %368 unwind label %395

368:                                              ; preds = %364
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef @.str.1083)
          to label %369 unwind label %399

369:                                              ; preds = %368
  %370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %371 unwind label %403

371:                                              ; preds = %369
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  br label %489

372:                                              ; preds = %345
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %13, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %14, align 4
  br label %385

376:                                              ; preds = %349
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %13, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %14, align 4
  br label %384

380:                                              ; preds = %350
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %13, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %384

384:                                              ; preds = %380, %376
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %385

385:                                              ; preds = %384, %372
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  br label %1087

386:                                              ; preds = %356
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %13, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %14, align 4
  br label %394

390:                                              ; preds = %360
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %13, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  br label %394

394:                                              ; preds = %390, %386
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  br label %1087

395:                                              ; preds = %364
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %13, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %14, align 4
  br label %408

399:                                              ; preds = %368
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %13, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %14, align 4
  br label %407

403:                                              ; preds = %369
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %13, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %407

407:                                              ; preds = %403, %399
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %408

408:                                              ; preds = %407, %395
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  br label %1087

409:                                              ; preds = %339
  %410 = load ptr, ptr %10, align 8, !tbaa !5
  %411 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %410, i32 0, i32 14
  %412 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %411, i32 0, i32 1
  %413 = load i32, ptr %412, align 4, !tbaa !151
  %414 = icmp eq i32 %413, 1
  br i1 %414, label %415, label %481

415:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #8
  %416 = load ptr, ptr %7, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %416, i32 0, i32 1
  %418 = load i32, ptr %417, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %418, i1 noundef zeroext true)
          to label %419 unwind label %444

419:                                              ; preds = %415
  %420 = load i8, ptr %17, align 1, !tbaa !129, !range !18, !noundef !19
  %421 = trunc i8 %420 to i1
  %422 = zext i1 %421 to i64
  %423 = select i1 %421, ptr @.str.1084, ptr @.str.4
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef %423)
          to label %424 unwind label %448

424:                                              ; preds = %419
  %425 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %426 unwind label %452

426:                                              ; preds = %424
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  %427 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %428 unwind label %309

428:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %429 = load ptr, ptr %7, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %429, i32 0, i32 3
  %431 = load i32, ptr %430, align 8, !tbaa !153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %431, i1 noundef zeroext true)
          to label %432 unwind label %458

432:                                              ; preds = %428
  %433 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %434 unwind label %462

434:                                              ; preds = %432
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  %435 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %436 unwind label %309

436:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #8
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %437, i32 0, i32 1
  %439 = load i32, ptr %438, align 8, !tbaa !132
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %439, i1 noundef zeroext true)
          to label %440 unwind label %467

440:                                              ; preds = %436
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.1085)
          to label %441 unwind label %471

441:                                              ; preds = %440
  %442 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %443 unwind label %475

443:                                              ; preds = %441
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  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 @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %488

444:                                              ; preds = %415
  %445 = landingpad { ptr, i32 }
          cleanup
  %446 = extractvalue { ptr, i32 } %445, 0
  store ptr %446, ptr %13, align 8
  %447 = extractvalue { ptr, i32 } %445, 1
  store i32 %447, ptr %14, align 4
  br label %457

448:                                              ; preds = %419
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %13, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %14, align 4
  br label %456

452:                                              ; preds = %424
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %13, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %456

456:                                              ; preds = %452, %448
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %457

457:                                              ; preds = %456, %444
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  br label %1087

458:                                              ; preds = %428
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %13, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %14, align 4
  br label %466

462:                                              ; preds = %432
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %13, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %466

466:                                              ; preds = %462, %458
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %1087

467:                                              ; preds = %436
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %13, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %14, align 4
  br label %480

471:                                              ; preds = %440
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %13, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %14, align 4
  br label %479

475:                                              ; preds = %441
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %13, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %479

479:                                              ; preds = %475, %471
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  br label %480

480:                                              ; preds = %479, %467
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #8
  br label %1087

481:                                              ; preds = %409
  %482 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %482, ptr noundef @.str.1086)
          to label %483 unwind label %484

483:                                              ; preds = %481
  invoke void @__cxa_throw(ptr %482, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
          to label %1100 unwind label %309

484:                                              ; preds = %481
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %13, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %14, align 4
  call void @__cxa_free_exception(ptr %482) #8
  br label %1087

488:                                              ; preds = %443
  br label %489

489:                                              ; preds = %488, %371
  br label %627

490:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 336, ptr %41) #8
  %491 = load ptr, ptr %7, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %491, i32 0, i32 1
  %493 = load i32, ptr %492, align 8, !tbaa !132
  %494 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %66, i32 noundef %493)
          to label %495 unwind label %516

495:                                              ; preds = %490
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %41, ptr noundef nonnull align 8 dereferenceable(336) %494)
          to label %496 unwind label %516

496:                                              ; preds = %495
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %497, i32 0, i32 2
  %499 = load i32, ptr %498, align 4, !tbaa !133
  %500 = add i32 %499, 1
  %501 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 4
  store i32 %500, ptr %501, align 8, !tbaa !134
  %502 = load ptr, ptr %10, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %502, i32 0, i32 14
  %504 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %503, i32 0, i32 1
  %505 = load i32, ptr %504, align 4, !tbaa !151
  %506 = icmp eq i32 %505, 0
  br i1 %506, label %507, label %520

507:                                              ; preds = %496
  %508 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %66, i32 0, i32 9
  %509 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %508, i32 0, i32 1
  %510 = load i8, ptr %509, align 4, !tbaa !156, !range !18, !noundef !19
  %511 = trunc i8 %510 to i1
  br i1 %511, label %512, label %520

512:                                              ; preds = %507
  %513 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %41, i32 0, i32 4
  %514 = load i32, ptr %513, align 8, !tbaa !134
  %515 = add i32 %514, 1
  store i32 %515, ptr %513, align 8, !tbaa !134
  br label %520

516:                                              ; preds = %495, %490
  %517 = landingpad { ptr, i32 }
          cleanup
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %13, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %14, align 4
  br label %626

520:                                              ; preds = %512, %507, %496
  %521 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %522 unwind label %555

522:                                              ; preds = %520
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(336) %41)
          to label %523 unwind label %559

523:                                              ; preds = %522
  %524 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %525 unwind label %563

525:                                              ; preds = %523
  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
  %526 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.718)
          to label %527 unwind label %555

527:                                              ; preds = %525
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %528, i32 0, i32 14
  %530 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %529, i32 0, i32 1
  %531 = load i32, ptr %530, align 4, !tbaa !151
  %532 = icmp eq i32 %531, 0
  br i1 %532, label %533, label %602

533:                                              ; preds = %527
  %534 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %66, i32 0, i32 9
  %535 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %534, i32 0, i32 1
  %536 = load i8, ptr %535, align 4, !tbaa !156, !range !18, !noundef !19
  %537 = trunc i8 %536 to i1
  br i1 %537, label %538, label %602

538:                                              ; preds = %533
  %539 = load ptr, ptr %10, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %539, i32 0, i32 14
  %541 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %540, i32 0, i32 3
  %542 = load i8, ptr %541, align 1, !tbaa !150, !range !18, !noundef !19
  %543 = trunc i8 %542 to i1
  br i1 %543, label %544, label %596

544:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %545 unwind label %568

545:                                              ; preds = %544
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str)
          to label %546 unwind label %572

546:                                              ; preds = %545
  %547 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %548 unwind label %576

548:                                              ; preds = %546
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  %549 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1087)
          to label %550 unwind label %555

550:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %551 unwind label %582

551:                                              ; preds = %550
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef @.str.1)
          to label %552 unwind label %586

552:                                              ; preds = %551
  %553 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %554 unwind label %590

554:                                              ; preds = %552
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  br label %601

555:                                              ; preds = %613, %605, %602, %598, %596, %548, %525, %520
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %13, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %14, align 4
  br label %625

559:                                              ; preds = %522
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %13, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %14, align 4
  br label %567

563:                                              ; preds = %523
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %13, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  br label %567

567:                                              ; preds = %563, %559
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  br label %625

568:                                              ; preds = %544
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %13, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %14, align 4
  br label %581

572:                                              ; preds = %545
  %573 = landingpad { ptr, i32 }
          cleanup
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %13, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %14, align 4
  br label %580

576:                                              ; preds = %546
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %13, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %580

580:                                              ; preds = %576, %572
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %581

581:                                              ; preds = %580, %568
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  br label %625

582:                                              ; preds = %550
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %13, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %14, align 4
  br label %595

586:                                              ; preds = %551
  %587 = landingpad { ptr, i32 }
          cleanup
  %588 = extractvalue { ptr, i32 } %587, 0
  store ptr %588, ptr %13, align 8
  %589 = extractvalue { ptr, i32 } %587, 1
  store i32 %589, ptr %14, align 4
  br label %594

590:                                              ; preds = %552
  %591 = landingpad { ptr, i32 }
          cleanup
  %592 = extractvalue { ptr, i32 } %591, 0
  store ptr %592, ptr %13, align 8
  %593 = extractvalue { ptr, i32 } %591, 1
  store i32 %593, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %594

594:                                              ; preds = %590, %586
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %595

595:                                              ; preds = %594, %582
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #8
  br label %625

596:                                              ; preds = %538
  %597 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %598 unwind label %555

598:                                              ; preds = %596
  %599 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1088)
          to label %600 unwind label %555

600:                                              ; preds = %598
  br label %601

601:                                              ; preds = %600, %554
  br label %605

602:                                              ; preds = %533, %527
  %603 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %604 unwind label %555

604:                                              ; preds = %602
  br label %605

605:                                              ; preds = %604, %601
  %606 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %607 unwind label %555

607:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %608 = load ptr, ptr %7, align 8, !tbaa !5
  %609 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %608, i32 0, i32 3
  %610 = load i32, ptr %609, align 8, !tbaa !153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %610, i1 noundef zeroext true)
          to label %611 unwind label %616

611:                                              ; preds = %607
  %612 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %613 unwind label %620

613:                                              ; preds = %611
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  %614 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.135)
          to label %615 unwind label %555

615:                                              ; preds = %613
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #8
  br label %627

616:                                              ; preds = %607
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %13, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %14, align 4
  br label %624

620:                                              ; preds = %611
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %13, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %624

624:                                              ; preds = %620, %616
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %625

625:                                              ; preds = %624, %595, %581, %567, %555
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %41) #8
  br label %626

626:                                              ; preds = %625, %516
  call void @llvm.lifetime.end.p0(i64 336, ptr %41) #8
  br label %1087

627:                                              ; preds = %615, %489
  br label %628

628:                                              ; preds = %627, %308
  br label %722

629:                                              ; preds = %263
  %630 = load ptr, ptr %10, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %630, i32 0, i32 14
  %632 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %631, i32 0, i32 1
  %633 = load i32, ptr %632, align 4, !tbaa !151
  %634 = icmp eq i32 %633, 0
  br i1 %634, label %635, label %717

635:                                              ; preds = %629
  %636 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %66, i32 0, i32 9
  %637 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %636, i32 0, i32 1
  %638 = load i8, ptr %637, align 4, !tbaa !156, !range !18, !noundef !19
  %639 = trunc i8 %638 to i1
  br i1 %639, label %640, label %717

640:                                              ; preds = %635
  %641 = load ptr, ptr %25, align 8, !tbaa !5
  %642 = invoke noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %641)
          to label %643 unwind label %309

643:                                              ; preds = %640
  br i1 %642, label %644, label %683

644:                                              ; preds = %643
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %645, i32 0, i32 14
  %647 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %646, i32 0, i32 3
  %648 = load i8, ptr %647, align 1, !tbaa !150, !range !18, !noundef !19
  %649 = trunc i8 %648 to i1
  br i1 %649, label %656, label %650

650:                                              ; preds = %644
  %651 = load ptr, ptr %7, align 8, !tbaa !5
  %652 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %651, i32 0, i32 0
  %653 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %652, i32 0, i32 5
  %654 = load i8, ptr %653, align 2, !tbaa !155, !range !18, !noundef !19
  %655 = trunc i8 %654 to i1
  br i1 %655, label %656, label %675

656:                                              ; preds = %650, %644
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %657 unwind label %661

657:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %658 unwind label %665

658:                                              ; preds = %657
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 1 dereferenceable(6) @.str.1089, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(10) @.str.1090, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(4) @.str.1083)
          to label %659 unwind label %669

659:                                              ; preds = %658
  %660 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %682

661:                                              ; preds = %656
  %662 = landingpad { ptr, i32 }
          cleanup
  %663 = extractvalue { ptr, i32 } %662, 0
  store ptr %663, ptr %13, align 8
  %664 = extractvalue { ptr, i32 } %662, 1
  store i32 %664, ptr %14, align 4
  br label %674

665:                                              ; preds = %657
  %666 = landingpad { ptr, i32 }
          cleanup
  %667 = extractvalue { ptr, i32 } %666, 0
  store ptr %667, ptr %13, align 8
  %668 = extractvalue { ptr, i32 } %666, 1
  store i32 %668, ptr %14, align 4
  br label %673

669:                                              ; preds = %658
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %13, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %673

673:                                              ; preds = %669, %665
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %674

674:                                              ; preds = %673, %661
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %1087

675:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #8
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 1 dereferenceable(6) @.str.1091, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(7) @.str.1092)
          to label %676 unwind label %678

676:                                              ; preds = %675
  %677 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  br label %682

678:                                              ; preds = %675
  %679 = landingpad { ptr, i32 }
          cleanup
  %680 = extractvalue { ptr, i32 } %679, 0
  store ptr %680, ptr %13, align 8
  %681 = extractvalue { ptr, i32 } %679, 1
  store i32 %681, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #8
  br label %1087

682:                                              ; preds = %676, %659
  br label %716

683:                                              ; preds = %643
  %684 = load ptr, ptr %10, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %684, i32 0, i32 14
  %686 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %685, i32 0, i32 3
  %687 = load i8, ptr %686, align 1, !tbaa !150, !range !18, !noundef !19
  %688 = trunc i8 %687 to i1
  br i1 %688, label %689, label %708

689:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 32, ptr %52) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %690 unwind label %694

690:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %66, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %691 unwind label %698

691:                                              ; preds = %690
  invoke void @_ZN11spirv_cross4joinIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 1 dereferenceable(7) @.str.1093, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(8) @.str.1094, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(4) @.str.1083)
          to label %692 unwind label %702

692:                                              ; preds = %691
  %693 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  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) %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) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %715

694:                                              ; preds = %689
  %695 = landingpad { ptr, i32 }
          cleanup
  %696 = extractvalue { ptr, i32 } %695, 0
  store ptr %696, ptr %13, align 8
  %697 = extractvalue { ptr, i32 } %695, 1
  store i32 %697, ptr %14, align 4
  br label %707

698:                                              ; preds = %690
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %13, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %14, align 4
  br label %706

702:                                              ; preds = %691
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %13, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %706

706:                                              ; preds = %702, %698
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %707

707:                                              ; preds = %706, %694
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %52) #8
  br label %1087

708:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %709 unwind label %711

709:                                              ; preds = %708
  %710 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, 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 @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %715

711:                                              ; preds = %708
  %712 = landingpad { ptr, i32 }
          cleanup
  %713 = extractvalue { ptr, i32 } %712, 0
  store ptr %713, ptr %13, align 8
  %714 = extractvalue { ptr, i32 } %712, 1
  store i32 %714, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  br label %1087

715:                                              ; preds = %709, %692
  br label %716

716:                                              ; preds = %715, %682
  br label %717

717:                                              ; preds = %716, %635, %629
  %718 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %719 unwind label %309

719:                                              ; preds = %717
  %720 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %721 unwind label %309

721:                                              ; preds = %719
  br label %722

722:                                              ; preds = %721, %628
  %723 = load ptr, ptr %7, align 8, !tbaa !5
  %724 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %723, i32 0, i32 4
  %725 = load i32, ptr %724, align 4, !tbaa !157
  %726 = icmp ne i32 %725, 0
  br i1 %726, label %732, label %727

727:                                              ; preds = %722
  %728 = load ptr, ptr %7, align 8, !tbaa !5
  %729 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %728, i32 0, i32 5
  %730 = load i32, ptr %729, align 8, !tbaa !158
  %731 = icmp ne i32 %730, 0
  br i1 %731, label %732, label %789

732:                                              ; preds = %727, %722
  %733 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %734 = trunc i8 %733 to i1
  br i1 %734, label %735, label %741

735:                                              ; preds = %732
  %736 = load ptr, ptr %7, align 8, !tbaa !5
  %737 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %736, i32 0, i32 4
  %738 = load i32, ptr %737, align 4, !tbaa !157
  %739 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %738)
          to label %740 unwind label %309

740:                                              ; preds = %735
  br label %741

741:                                              ; preds = %740, %732
  %742 = phi i1 [ false, %732 ], [ %739, %740 ]
  %743 = zext i1 %742 to i8
  store i8 %743, ptr %19, align 1, !tbaa !129
  %744 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %745 = trunc i8 %744 to i1
  br i1 %745, label %746, label %752

746:                                              ; preds = %741
  %747 = load ptr, ptr %7, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %747, i32 0, i32 5
  %749 = load i32, ptr %748, align 8, !tbaa !158
  %750 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %749)
          to label %751 unwind label %309

751:                                              ; preds = %746
  br label %752

752:                                              ; preds = %751, %741
  %753 = phi i1 [ false, %741 ], [ %750, %751 ]
  %754 = zext i1 %753 to i8
  store i8 %754, ptr %19, align 1, !tbaa !129
  %755 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %756 unwind label %309

756:                                              ; preds = %752
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #8
  %757 = load ptr, ptr %7, align 8, !tbaa !5
  %758 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %757, i32 0, i32 4
  %759 = load i32, ptr %758, align 4, !tbaa !157
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %759, i1 noundef zeroext true)
          to label %760 unwind label %771

760:                                              ; preds = %756
  %761 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %56)
          to label %762 unwind label %775

762:                                              ; preds = %760
  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
  %763 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %764 unwind label %309

764:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #8
  %765 = load ptr, ptr %7, align 8, !tbaa !5
  %766 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %765, i32 0, i32 5
  %767 = load i32, ptr %766, align 8, !tbaa !158
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %767, i1 noundef zeroext true)
          to label %768 unwind label %780

768:                                              ; preds = %764
  %769 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %770 unwind label %784

770:                                              ; preds = %768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  br label %789

771:                                              ; preds = %756
  %772 = landingpad { ptr, i32 }
          cleanup
  %773 = extractvalue { ptr, i32 } %772, 0
  store ptr %773, ptr %13, align 8
  %774 = extractvalue { ptr, i32 } %772, 1
  store i32 %774, ptr %14, align 4
  br label %779

775:                                              ; preds = %760
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %13, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %779

779:                                              ; preds = %775, %771
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  br label %1087

780:                                              ; preds = %764
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %13, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %14, align 4
  br label %788

784:                                              ; preds = %768
  %785 = landingpad { ptr, i32 }
          cleanup
  %786 = extractvalue { ptr, i32 } %785, 0
  store ptr %786, ptr %13, align 8
  %787 = extractvalue { ptr, i32 } %785, 1
  store i32 %787, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %788

788:                                              ; preds = %784, %780
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  br label %1087

789:                                              ; preds = %770, %727
  %790 = load ptr, ptr %7, align 8, !tbaa !5
  %791 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %790, i32 0, i32 6
  %792 = load i32, ptr %791, align 4, !tbaa !152
  %793 = icmp ne i32 %792, 0
  br i1 %793, label %794, label %882

794:                                              ; preds = %789
  %795 = load i8, ptr %28, align 1, !tbaa !129, !range !18, !noundef !19
  %796 = trunc i8 %795 to i1
  br i1 %796, label %797, label %817

797:                                              ; preds = %794
  %798 = load ptr, ptr %10, align 8, !tbaa !5
  %799 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %798, i32 0, i32 14
  %800 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %799, i32 0, i32 1
  %801 = load i32, ptr %800, align 4, !tbaa !151
  %802 = icmp eq i32 %801, 1
  br i1 %802, label %803, label %806

803:                                              ; preds = %797
  %804 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1097)
          to label %805 unwind label %309

805:                                              ; preds = %803
  br label %816

806:                                              ; preds = %797
  %807 = load ptr, ptr %10, align 8, !tbaa !5
  %808 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %807, i32 0, i32 14
  %809 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %808, i32 0, i32 1
  %810 = load i32, ptr %809, align 4, !tbaa !151
  %811 = icmp eq i32 %810, 3
  br i1 %811, label %812, label %815

812:                                              ; preds = %806
  %813 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1098)
          to label %814 unwind label %309

814:                                              ; preds = %812
  br label %815

815:                                              ; preds = %814, %806
  br label %816

816:                                              ; preds = %815, %805
  br label %881

817:                                              ; preds = %794
  %818 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %819 = trunc i8 %818 to i1
  br i1 %819, label %820, label %826

820:                                              ; preds = %817
  %821 = load ptr, ptr %7, align 8, !tbaa !5
  %822 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %821, i32 0, i32 6
  %823 = load i32, ptr %822, align 4, !tbaa !152
  %824 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %823)
          to label %825 unwind label %309

825:                                              ; preds = %820
  br label %826

826:                                              ; preds = %825, %817
  %827 = phi i1 [ false, %817 ], [ %824, %825 ]
  %828 = zext i1 %827 to i8
  store i8 %828, ptr %19, align 1, !tbaa !129
  %829 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %830 unwind label %309

830:                                              ; preds = %826
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %831, i32 0, i32 0
  %833 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %832, i32 0, i32 3
  %834 = load i8, ptr %833, align 8, !tbaa !17, !range !18, !noundef !19
  %835 = trunc i8 %834 to i1
  br i1 %835, label %836, label %864

836:                                              ; preds = %830
  %837 = load ptr, ptr %10, align 8, !tbaa !5
  %838 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %837, i32 0, i32 14
  %839 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %838, i32 0, i32 1
  %840 = load i32, ptr %839, align 4, !tbaa !151
  %841 = icmp ne i32 %840, 5
  br i1 %841, label %842, label %864

842:                                              ; preds = %836
  %843 = load ptr, ptr %10, align 8, !tbaa !5
  %844 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %843, i32 0, i32 14
  %845 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %844, i32 0, i32 4
  %846 = load i8, ptr %845, align 2, !tbaa !159, !range !18, !noundef !19
  %847 = trunc i8 %846 to i1
  br i1 %847, label %864, label %848

848:                                              ; preds = %842
  call void @llvm.lifetime.start.p0(i64 32, ptr %58) #8
  %849 = load ptr, ptr %7, align 8, !tbaa !5
  %850 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %849, i32 0, i32 6
  %851 = load i32, ptr %850, align 4, !tbaa !152
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef 7, i32 noundef %851)
          to label %852 unwind label %855

852:                                              ; preds = %848
  %853 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %854 unwind label %859

854:                                              ; preds = %852
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  br label %880

855:                                              ; preds = %848
  %856 = landingpad { ptr, i32 }
          cleanup
  %857 = extractvalue { ptr, i32 } %856, 0
  store ptr %857, ptr %13, align 8
  %858 = extractvalue { ptr, i32 } %856, 1
  store i32 %858, ptr %14, align 4
  br label %863

859:                                              ; preds = %852
  %860 = landingpad { ptr, i32 }
          cleanup
  %861 = extractvalue { ptr, i32 } %860, 0
  store ptr %861, ptr %13, align 8
  %862 = extractvalue { ptr, i32 } %860, 1
  store i32 %862, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  br label %863

863:                                              ; preds = %859, %855
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  br label %1087

864:                                              ; preds = %842, %836, %830
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #8
  %865 = load ptr, ptr %7, align 8, !tbaa !5
  %866 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %865, i32 0, i32 6
  %867 = load i32, ptr %866, align 4, !tbaa !152
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %867, i1 noundef zeroext true)
          to label %868 unwind label %871

868:                                              ; preds = %864
  %869 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %870 unwind label %875

870:                                              ; preds = %868
  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 %880

871:                                              ; preds = %864
  %872 = landingpad { ptr, i32 }
          cleanup
  %873 = extractvalue { ptr, i32 } %872, 0
  store ptr %873, ptr %13, align 8
  %874 = extractvalue { ptr, i32 } %872, 1
  store i32 %874, ptr %14, align 4
  br label %879

875:                                              ; preds = %868
  %876 = landingpad { ptr, i32 }
          cleanup
  %877 = extractvalue { ptr, i32 } %876, 0
  store ptr %877, ptr %13, align 8
  %878 = extractvalue { ptr, i32 } %876, 1
  store i32 %878, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %879

879:                                              ; preds = %875, %871
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  br label %1087

880:                                              ; preds = %870, %854
  br label %881

881:                                              ; preds = %880, %816
  br label %904

882:                                              ; preds = %789
  %883 = load ptr, ptr %7, align 8, !tbaa !5
  %884 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %883, i32 0, i32 0
  %885 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionBaseArguments", ptr %884, i32 0, i32 3
  %886 = load i8, ptr %885, align 8, !tbaa !17, !range !18, !noundef !19
  %887 = trunc i8 %886 to i1
  br i1 %887, label %888, label %903

888:                                              ; preds = %882
  %889 = load ptr, ptr %10, align 8, !tbaa !5
  %890 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %889, i32 0, i32 14
  %891 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %890, i32 0, i32 1
  %892 = load i32, ptr %891, align 4, !tbaa !151
  %893 = icmp ne i32 %892, 5
  br i1 %893, label %894, label %903

894:                                              ; preds = %888
  %895 = load ptr, ptr %10, align 8, !tbaa !5
  %896 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %895, i32 0, i32 14
  %897 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %896, i32 0, i32 4
  %898 = load i8, ptr %897, align 2, !tbaa !159, !range !18, !noundef !19
  %899 = trunc i8 %898 to i1
  br i1 %899, label %903, label %900

900:                                              ; preds = %894
  %901 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.1099)
          to label %902 unwind label %309

902:                                              ; preds = %900
  br label %903

903:                                              ; preds = %902, %894, %888, %882
  br label %904

904:                                              ; preds = %903, %881
  %905 = load ptr, ptr %7, align 8, !tbaa !5
  %906 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %905, i32 0, i32 7
  %907 = load i32, ptr %906, align 8, !tbaa !160
  %908 = icmp ne i32 %907, 0
  br i1 %908, label %909, label %938

909:                                              ; preds = %904
  %910 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %911 = trunc i8 %910 to i1
  br i1 %911, label %912, label %918

912:                                              ; preds = %909
  %913 = load ptr, ptr %7, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %913, i32 0, i32 7
  %915 = load i32, ptr %914, align 8, !tbaa !160
  %916 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %915)
          to label %917 unwind label %309

917:                                              ; preds = %912
  br label %918

918:                                              ; preds = %917, %909
  %919 = phi i1 [ false, %909 ], [ %916, %917 ]
  %920 = zext i1 %919 to i8
  store i8 %920, ptr %19, align 1, !tbaa !129
  %921 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %922 unwind label %309

922:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  %923 = load ptr, ptr %7, align 8, !tbaa !5
  %924 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %923, i32 0, i32 7
  %925 = load i32, ptr %924, align 8, !tbaa !160
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef 7, i32 noundef %925)
          to label %926 unwind label %929

926:                                              ; preds = %922
  %927 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %928 unwind label %933

928:                                              ; preds = %926
  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
  br label %938

929:                                              ; preds = %922
  %930 = landingpad { ptr, i32 }
          cleanup
  %931 = extractvalue { ptr, i32 } %930, 0
  store ptr %931, ptr %13, align 8
  %932 = extractvalue { ptr, i32 } %930, 1
  store i32 %932, ptr %14, align 4
  br label %937

933:                                              ; preds = %926
  %934 = landingpad { ptr, i32 }
          cleanup
  %935 = extractvalue { ptr, i32 } %934, 0
  store ptr %935, ptr %13, align 8
  %936 = extractvalue { ptr, i32 } %934, 1
  store i32 %936, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %937

937:                                              ; preds = %933, %929
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  br label %1087

938:                                              ; preds = %928, %904
  %939 = load ptr, ptr %7, align 8, !tbaa !5
  %940 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %939, i32 0, i32 10
  %941 = load i32, ptr %940, align 4, !tbaa !161
  %942 = icmp ne i32 %941, 0
  br i1 %942, label %943, label %961

943:                                              ; preds = %938
  %944 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %945 unwind label %309

945:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 32, ptr %61) #8
  %946 = load ptr, ptr %7, align 8, !tbaa !5
  %947 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %946, i32 0, i32 10
  %948 = load i32, ptr %947, align 4, !tbaa !161
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef 7, i32 noundef %948)
          to label %949 unwind label %952

949:                                              ; preds = %945
  %950 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %951 unwind label %956

951:                                              ; preds = %949
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  br label %961

952:                                              ; preds = %945
  %953 = landingpad { ptr, i32 }
          cleanup
  %954 = extractvalue { ptr, i32 } %953, 0
  store ptr %954, ptr %13, align 8
  %955 = extractvalue { ptr, i32 } %953, 1
  store i32 %955, ptr %14, align 4
  br label %960

956:                                              ; preds = %949
  %957 = landingpad { ptr, i32 }
          cleanup
  %958 = extractvalue { ptr, i32 } %957, 0
  store ptr %958, ptr %13, align 8
  %959 = extractvalue { ptr, i32 } %957, 1
  store i32 %959, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %960

960:                                              ; preds = %956, %952
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  br label %1087

961:                                              ; preds = %951, %938
  %962 = load ptr, ptr %7, align 8, !tbaa !5
  %963 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %962, i32 0, i32 12
  %964 = load i32, ptr %963, align 4, !tbaa !162
  %965 = icmp ne i32 %964, 0
  br i1 %965, label %966, label %984

966:                                              ; preds = %961
  %967 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %968 unwind label %309

968:                                              ; preds = %966
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  %969 = load ptr, ptr %7, align 8, !tbaa !5
  %970 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %969, i32 0, i32 12
  %971 = load i32, ptr %970, align 4, !tbaa !162
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %971, i1 noundef zeroext true)
          to label %972 unwind label %975

972:                                              ; preds = %968
  %973 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %974 unwind label %979

974:                                              ; preds = %972
  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 %984

975:                                              ; preds = %968
  %976 = landingpad { ptr, i32 }
          cleanup
  %977 = extractvalue { ptr, i32 } %976, 0
  store ptr %977, ptr %13, align 8
  %978 = extractvalue { ptr, i32 } %976, 1
  store i32 %978, ptr %14, align 4
  br label %983

979:                                              ; preds = %972
  %980 = landingpad { ptr, i32 }
          cleanup
  %981 = extractvalue { ptr, i32 } %980, 0
  store ptr %981, ptr %13, align 8
  %982 = extractvalue { ptr, i32 } %980, 1
  store i32 %982, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %983

983:                                              ; preds = %979, %975
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  br label %1087

984:                                              ; preds = %974, %961
  %985 = load ptr, ptr %7, align 8, !tbaa !5
  %986 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %985, i32 0, i32 11
  %987 = load i32, ptr %986, align 8, !tbaa !163
  %988 = icmp ne i32 %987, 0
  br i1 %988, label %989, label %1007

989:                                              ; preds = %984
  %990 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %991 unwind label %309

991:                                              ; preds = %989
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #8
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %992, i32 0, i32 11
  %994 = load i32, ptr %993, align 8, !tbaa !163
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %994, i1 noundef zeroext true)
          to label %995 unwind label %998

995:                                              ; preds = %991
  %996 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %997 unwind label %1002

997:                                              ; preds = %995
  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
  br label %1007

998:                                              ; preds = %991
  %999 = landingpad { ptr, i32 }
          cleanup
  %1000 = extractvalue { ptr, i32 } %999, 0
  store ptr %1000, ptr %13, align 8
  %1001 = extractvalue { ptr, i32 } %999, 1
  store i32 %1001, ptr %14, align 4
  br label %1006

1002:                                             ; preds = %995
  %1003 = landingpad { ptr, i32 }
          cleanup
  %1004 = extractvalue { ptr, i32 } %1003, 0
  store ptr %1004, ptr %13, align 8
  %1005 = extractvalue { ptr, i32 } %1003, 1
  store i32 %1005, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %1006

1006:                                             ; preds = %1002, %998
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #8
  br label %1087

1007:                                             ; preds = %997, %984
  %1008 = load ptr, ptr %7, align 8, !tbaa !5
  %1009 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1008, i32 0, i32 8
  %1010 = load i32, ptr %1009, align 4, !tbaa !164
  %1011 = icmp ne i32 %1010, 0
  br i1 %1011, label %1012, label %1041

1012:                                             ; preds = %1007
  %1013 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %1014 = trunc i8 %1013 to i1
  br i1 %1014, label %1015, label %1021

1015:                                             ; preds = %1012
  %1016 = load ptr, ptr %7, align 8, !tbaa !5
  %1017 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1016, i32 0, i32 8
  %1018 = load i32, ptr %1017, align 4, !tbaa !164
  %1019 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %1018)
          to label %1020 unwind label %309

1020:                                             ; preds = %1015
  br label %1021

1021:                                             ; preds = %1020, %1012
  %1022 = phi i1 [ false, %1012 ], [ %1019, %1020 ]
  %1023 = zext i1 %1022 to i8
  store i8 %1023, ptr %19, align 1, !tbaa !129
  %1024 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %1025 unwind label %309

1025:                                             ; preds = %1021
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  %1026 = load ptr, ptr %7, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1026, i32 0, i32 8
  %1028 = load i32, ptr %1027, align 4, !tbaa !164
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %1028, i1 noundef zeroext true)
          to label %1029 unwind label %1032

1029:                                             ; preds = %1025
  %1030 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %64)
          to label %1031 unwind label %1036

1031:                                             ; preds = %1029
  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
  br label %1041

1032:                                             ; preds = %1025
  %1033 = landingpad { ptr, i32 }
          cleanup
  %1034 = extractvalue { ptr, i32 } %1033, 0
  store ptr %1034, ptr %13, align 8
  %1035 = extractvalue { ptr, i32 } %1033, 1
  store i32 %1035, ptr %14, align 4
  br label %1040

1036:                                             ; preds = %1029
  %1037 = landingpad { ptr, i32 }
          cleanup
  %1038 = extractvalue { ptr, i32 } %1037, 0
  store ptr %1038, ptr %13, align 8
  %1039 = extractvalue { ptr, i32 } %1037, 1
  store i32 %1039, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %1040

1040:                                             ; preds = %1036, %1032
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  br label %1087

1041:                                             ; preds = %1031, %1007
  %1042 = load ptr, ptr %7, align 8, !tbaa !5
  %1043 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1042, i32 0, i32 9
  %1044 = load i32, ptr %1043, align 8, !tbaa !165
  %1045 = icmp ne i32 %1044, 0
  br i1 %1045, label %1046, label %1081

1046:                                             ; preds = %1041
  %1047 = load ptr, ptr %7, align 8, !tbaa !5
  %1048 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1047, i32 0, i32 9
  %1049 = load i32, ptr %1048, align 8, !tbaa !165
  %1050 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %1049)
          to label %1051 unwind label %309

1051:                                             ; preds = %1046
  br i1 %1050, label %1081, label %1052

1052:                                             ; preds = %1051
  %1053 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %1054 = trunc i8 %1053 to i1
  br i1 %1054, label %1055, label %1061

1055:                                             ; preds = %1052
  %1056 = load ptr, ptr %7, align 8, !tbaa !5
  %1057 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1056, i32 0, i32 9
  %1058 = load i32, ptr %1057, align 8, !tbaa !165
  %1059 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef %1058)
          to label %1060 unwind label %309

1060:                                             ; preds = %1055
  br label %1061

1061:                                             ; preds = %1060, %1052
  %1062 = phi i1 [ false, %1052 ], [ %1059, %1060 ]
  %1063 = zext i1 %1062 to i8
  store i8 %1063, ptr %19, align 1, !tbaa !129
  %1064 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %1065 unwind label %309

1065:                                             ; preds = %1061
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  %1066 = load ptr, ptr %7, align 8, !tbaa !5
  %1067 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::TextureFunctionArguments", ptr %1066, i32 0, i32 9
  %1068 = load i32, ptr %1067, align 8, !tbaa !165
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %66, i32 noundef 7, i32 noundef %1068)
          to label %1069 unwind label %1072

1069:                                             ; preds = %1065
  %1070 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %1071 unwind label %1076

1071:                                             ; preds = %1069
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  br label %1081

1072:                                             ; preds = %1065
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %13, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %14, align 4
  br label %1080

1076:                                             ; preds = %1069
  %1077 = landingpad { ptr, i32 }
          cleanup
  %1078 = extractvalue { ptr, i32 } %1077, 0
  store ptr %1078, ptr %13, align 8
  %1079 = extractvalue { ptr, i32 } %1077, 1
  store i32 %1079, ptr %14, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %1080

1080:                                             ; preds = %1076, %1072
  call void @llvm.lifetime.end.p0(i64 32, ptr %65) #8
  br label %1087

1081:                                             ; preds = %1071, %1051, %1041
  %1082 = load i8, ptr %19, align 1, !tbaa !129, !range !18, !noundef !19
  %1083 = trunc i8 %1082 to i1
  %1084 = load ptr, ptr %8, align 8, !tbaa !5
  %1085 = zext i1 %1083 to i8
  store i8 %1085, ptr %1084, align 1, !tbaa !129
  store i1 true, ptr %11, align 1
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #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) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  %1086 = load i1, ptr %11, align 1
  br i1 %1086, label %1093, label %1092

1087:                                             ; preds = %1080, %1040, %1006, %983, %960, %937, %879, %863, %788, %779, %711, %707, %678, %674, %626, %484, %480, %466, %457, %408, %394, %385, %330, %321, %309
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  br label %1088

1088:                                             ; preds = %1087, %226, %214
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %1089

1089:                                             ; preds = %1088, %213, %195
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %1090

1090:                                             ; preds = %1089, %191
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %1091

1091:                                             ; preds = %1090, %187
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #8
  br label %1094

1092:                                             ; preds = %1081
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  br label %1093

1093:                                             ; preds = %1092, %1081
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  ret void

1094:                                             ; preds = %1091, %110, %93, %84
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %1095

1095:                                             ; preds = %1094
  %1096 = load ptr, ptr %13, align 8
  %1097 = load i32, ptr %14, align 4
  %1098 = insertvalue { ptr, i32 } poison, ptr %1096, 0
  %1099 = insertvalue { ptr, i32 } %1098, i32 %1097, 1
  resume { ptr, i32 } %1099

1100:                                             ; preds = %483
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @"_ZZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbENK3$_0clEjj"(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) #6 align 2

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

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

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

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

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

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

!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 = !{i64 0, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !6, i64 8}
!13 = !{!"_ZTSN11spirv_cross12CompilerGLSL24TextureFunctionArgumentsE", !14, i64 0, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !16, i64 72, !16, i64 73}
!14 = !{!"_ZTSN11spirv_cross12CompilerGLSL28TextureFunctionBaseArgumentsE", !15, i64 0, !6, i64 8, !16, i64 16, !16, i64 17, !16, i64 18}
!15 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !11, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{!13, !16, i64 16}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = !{!13, !16, i64 72}
!21 = !{!22, !16, i64 8380}
!22 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !23, i64 0, !6, i64 3176, !87, i64 3184, !16, i64 3272, !90, i64 3280, !6, i64 7616, !6, i64 7624, !16, i64 7632, !16, i64 7633, !95, i64 7636, !99, i64 7680, !99, i64 7736, !99, i64 7792, !99, i64 7848, !99, i64 7904, !99, i64 7960, !99, i64 8016, !101, i64 8072, !85, i64 8128, !16, i64 8184, !103, i64 8192, !11, i64 8416, !69, i64 8424, !69, i64 8480, !69, i64 8536, !105, i64 8592, !107, i64 8648, !108, i64 8656, !52, i64 8712, !52, i64 8992, !108, i64 9272, !110, i64 9328, !11, i64 9384, !11, i64 9388, !11, i64 9392, !16, i64 9396, !16, i64 9397, !113, i64 9400, !113, i64 9424, !117, i64 9448, !121, i64 9472, !108, i64 9496, !69, i64 9552, !69, i64 9608, !7, i64 9664, !125, i64 9672, !69, i64 9728, !6, i64 9784, !127, i64 9792}
!23 = !{!"_ZTSN11spirv_cross8CompilerE", !24, i64 8, !71, i64 1928, !71, i64 1984, !6, i64 2040, !6, i64 2048, !11, i64 2056, !74, i64 2064, !16, i64 2120, !69, i64 2128, !16, i64 2184, !16, i64 2185, !76, i64 2192, !71, i64 2312, !79, i64 2368, !69, i64 2400, !69, i64 2456, !69, i64 2512, !69, i64 2568, !69, i64 2624, !68, i64 2680, !68, i64 2744, !11, i64 2808, !11, i64 2812, !16, i64 2816, !69, i64 2824, !16, i64 2880, !16, i64 2881, !11, i64 2884, !81, i64 2888, !71, i64 2944, !83, i64 3000, !69, i64 3056, !16, i64 3112, !85, i64 3120}
!24 = !{!"_ZTSN11spirv_cross8ParsedIRE", !25, i64 0, !31, i64 8, !35, i64 32, !39, i64 248, !7, i64 304, !44, i64 1088, !44, i64 1144, !47, i64 1200, !49, i64 1256, !52, i64 1312, !55, i64 1592, !58, i64 1624, !60, i64 1680, !62, i64 1736, !63, i64 1740, !64, i64 1748, !65, i64 1752, !11, i64 1756, !11, i64 1760, !66, i64 1768, !68, i64 1800, !69, i64 1864}
!25 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !27, i64 0}
!27 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !29, i64 0}
!29 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !30, i64 0}
!30 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!31 = !{!"_ZTSSt6vectorIjSaIjEE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !36, i64 0, !37, i64 16, !38, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !37, i64 8}
!37 = !{!"long", !7, i64 0}
!38 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!39 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !40, i64 0}
!40 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!41 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!42 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !43, i64 0, !37, i64 8}
!43 = !{!"float", !7, i64 0}
!44 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !45, i64 0, !37, i64 16, !46, i64 24}
!45 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !37, i64 8}
!46 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!47 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !48, i64 0}
!48 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!49 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !50, i64 0, !37, i64 16, !51, i64 24}
!50 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !37, i64 8}
!51 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!52 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !53, i64 0, !37, i64 16, !54, i64 24}
!53 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !37, i64 8}
!54 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!55 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !56, i64 0, !37, i64 16, !57, i64 24}
!56 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !37, i64 8}
!57 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!58 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !59, i64 0}
!59 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!60 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !61, i64 0}
!61 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!62 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !11, i64 0}
!63 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !11, i64 0, !16, i64 4, !16, i64 5, !16, i64 6}
!64 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!65 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!66 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !67, i64 0, !37, i64 8, !7, i64 16}
!67 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!68 = !{!"_ZTSN11spirv_cross6BitsetE", !37, i64 0, !69, i64 8}
!69 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !70, i64 0}
!70 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!71 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !72, i64 0, !37, i64 16, !73, i64 24}
!72 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !37, i64 8}
!73 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!74 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !75, i64 0}
!75 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!76 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !77, i64 0, !37, i64 16, !78, i64 24}
!77 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !37, i64 8}
!78 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!79 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !80, i64 0, !6, i64 24}
!80 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!81 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !82, i64 0}
!82 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!83 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !84, i64 0}
!84 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!85 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !86, i64 0}
!86 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!87 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !88, i64 0, !37, i64 16, !89, i64 24}
!88 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !37, i64 8}
!89 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!90 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !91, i64 0, !7, i64 24, !92, i64 4120}
!91 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !37, i64 8, !37, i64 16}
!92 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !93, i64 0, !37, i64 16, !94, i64 24}
!93 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !37, i64 8}
!94 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!95 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !11, i64 0, !16, i64 4, !16, i64 5, !11, i64 8, !16, i64 12, !16, i64 13, !16, i64 14, !16, i64 15, !16, i64 16, !16, i64 17, !16, i64 18, !16, i64 19, !16, i64 20, !16, i64 21, !16, i64 22, !16, i64 23, !11, i64 24, !96, i64 28, !97, i64 32}
!96 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !16, i64 0, !16, i64 1, !16, i64 2}
!97 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !98, i64 0, !98, i64 4}
!98 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!99 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !100, i64 0}
!100 = !{!"_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, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!101 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !102, i64 0}
!102 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!103 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !66, i64 0, !66, i64 32, !66, i64 64, !16, i64 96, !16, i64 97, !16, i64 98, !16, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !104, i64 184, !16, i64 188, !16, i64 189, !16, i64 190, !16, i64 191, !16, i64 192, !16, i64 193, !16, i64 194, !16, i64 195, !16, i64 196, !16, i64 197, !16, i64 198, !16, i64 199, !16, i64 200, !16, i64 201, !16, i64 202, !16, i64 203, !16, i64 204, !16, i64 205, !16, i64 206, !16, i64 207, !16, i64 208, !16, i64 209, !16, i64 210, !16, i64 211, !16, i64 212, !16, i64 213, !16, i64 214, !16, i64 215, !16, i64 216, !16, i64 217, !16, i64 218, !16, i64 219}
!104 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!105 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !106, i64 0}
!106 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!107 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !11, i64 0}
!108 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !109, i64 0}
!109 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!110 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !111, i64 0, !37, i64 16, !112, i64 24}
!111 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !37, i64 8}
!112 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!113 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !114, i64 0}
!114 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !115, i64 0}
!115 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !116, i64 0}
!116 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!117 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !118, i64 0}
!118 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !119, i64 0}
!119 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !120, i64 0}
!120 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!121 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !122, i64 0}
!122 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !123, i64 0}
!123 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !124, i64 0}
!124 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!125 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !126, i64 0}
!126 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!127 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !128, i64 0}
!128 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !37, i64 8, !41, i64 16, !37, i64 24, !42, i64 32, !6, i64 48}
!129 = !{!16, !16, i64 0}
!130 = !{!131, !16, i64 0}
!131 = !{!"_ZTSZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbE3$_0", !16, i64 0}
!132 = !{!13, !11, i64 24}
!133 = !{!13, !11, i64 28}
!134 = !{!135, !11, i64 24}
!135 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !136, i64 0, !138, i64 12, !104, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !71, i64 32, !139, i64 88, !11, i64 120, !16, i64 124, !16, i64 125, !142, i64 128, !110, i64 136, !71, i64 192, !143, i64 248, !144, i64 272, !144, i64 276, !99, i64 280}
!136 = !{!"_ZTSN11spirv_cross8IVariantE", !137, i64 8}
!137 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !11, i64 0}
!138 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!139 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !140, i64 0, !37, i64 16, !141, i64 24}
!140 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !37, i64 8}
!141 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!142 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!143 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !144, i64 0, !145, i64 4, !16, i64 8, !16, i64 9, !16, i64 10, !11, i64 12, !146, i64 16, !147, i64 20}
!144 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !11, i64 0}
!145 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!146 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!147 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!148 = !{!7, !7, i64 0}
!149 = !{!135, !104, i64 16}
!150 = !{!135, !16, i64 257}
!151 = !{!135, !145, i64 252}
!152 = !{!13, !11, i64 44}
!153 = !{!13, !11, i64 32}
!154 = !{!13, !16, i64 17}
!155 = !{!13, !16, i64 18}
!156 = !{!22, !16, i64 7640}
!157 = !{!13, !11, i64 36}
!158 = !{!13, !11, i64 40}
!159 = !{!135, !16, i64 258}
!160 = !{!13, !11, i64 48}
!161 = !{!13, !11, i64 60}
!162 = !{!13, !11, i64 68}
!163 = !{!13, !11, i64 64}
!164 = !{!13, !11, i64 52}
!165 = !{!13, !11, i64 56}


; 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.282" = type { i32 }
%class.anon.389 = 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.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = 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.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { 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 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1081 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1082 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1083 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1084 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1085 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1086 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1087 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1088 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1089 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1090 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1091 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1092 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1093 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1094 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1095 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1096 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1097 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1098 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1099 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

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

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

; 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 #3 align 2

; 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

; 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: 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: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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 #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind noalias 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 #1 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336), i32 noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPb(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr nocapture noundef nonnull readonly align 8 dereferenceable(74) %2, ptr nocapture noundef writeonly %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.spirv_cross::TypedID.282", 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.anon.389, align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"struct.spirv_cross::SPIRType", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"struct.spirv_cross::SPIRType", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %51 = load i32, ptr %2, align 8, !tbaa !5
  store i32 %51, ptr %5, align 4, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %2, i64 8
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  %54 = getelementptr inbounds i8, ptr %2, i64 16
  %55 = load i8, ptr %54, align 8, !tbaa !15, !range !16, !noundef !17
  %56 = trunc nuw i8 %55 to i1
  br i1 %56, label %57, label %63

57:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  %58 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %58)
          to label %59 unwind label %61

59:                                               ; preds = %57
  %60 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %6) #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 %69

61:                                               ; preds = %57
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %642

63:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %64 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %64)
          to label %65 unwind label %67

65:                                               ; preds = %63
  %66 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %7) #7
  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
  br label %69

67:                                               ; preds = %63
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %642

69:                                               ; preds = %65, %59
  %70 = getelementptr inbounds i8, ptr %2, i64 72
  %71 = load i8, ptr %70, align 8, !tbaa !18, !range !16, !noundef !17
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %73, label %81

73:                                               ; preds = %69
  %74 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13find_first_ofEcm(ptr noundef nonnull align 8 dereferenceable(32) %0, i8 noundef signext 91, i64 noundef 0) #7
  %.not = icmp eq i64 %74, -1
  br i1 %.not, label %81, label %75

75:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  %76 = getelementptr inbounds i8, ptr %1, i64 8360
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %77 unwind label %79

77:                                               ; preds = %75
  %78 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %8) #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 %81

79:                                               ; preds = %75
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %642

81:                                               ; preds = %77, %73, %69
  %82 = getelementptr inbounds i8, ptr %1, i64 8380
  %83 = load i8, ptr %82, align 4, !tbaa !19, !range !16, !noundef !17
  %84 = trunc nuw i8 %83 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #7
  store i8 %83, ptr %9, align 1, !tbaa !127
  %85 = getelementptr inbounds i8, ptr %2, i64 24
  %86 = load i32, ptr %85, align 8, !tbaa !129
  %87 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %86)
          to label %88 unwind label %118

88:                                               ; preds = %81
  %89 = getelementptr inbounds i8, ptr %2, i64 28
  %90 = load i32, ptr %89, align 4, !tbaa !130
  %91 = load i32, ptr %85, align 8, !tbaa !129
  %92 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %91)
          to label %93 unwind label %120

93:                                               ; preds = %88
  %94 = getelementptr inbounds i8, ptr %92, i64 24
  %95 = load i32, ptr %94, align 8, !tbaa !131
  %96 = call noundef ptr @"_ZZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbENK3$_0clEjj"(ptr noundef nonnull align 1 dereferenceable(1) %9, i32 noundef %90, i32 noundef %95)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %97 = load i8, ptr %96, align 1, !tbaa !145
  %.not159 = icmp eq i8 %97, 0
  br i1 %.not159, label %98, label %100

98:                                               ; preds = %93
  %99 = load i32, ptr %85, align 8, !tbaa !129
  invoke 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) %1, i32 noundef %99, i1 noundef zeroext true)
          to label %.critedge unwind label %122

100:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  %101 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %101, i1 noundef zeroext true)
          to label %102 unwind label %124

102:                                              ; preds = %100
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull %96)
          to label %103 unwind label %126

103:                                              ; preds = %102
  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
  br label %.critedge

.critedge:                                        ; preds = %98, %103
  %104 = load i32, ptr %85, align 8, !tbaa !129
  %105 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %104)
          to label %106 unwind label %129

106:                                              ; preds = %.critedge
  %107 = getelementptr inbounds i8, ptr %105, i64 16
  %108 = load i32, ptr %107, align 8, !tbaa !146
  %109 = icmp eq i32 %108, 8
  br i1 %109, label %110, label %136

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %12) #7
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %12, ptr noundef nonnull align 8 dereferenceable(336) %105)
          to label %111 unwind label %131

111:                                              ; preds = %110
  %112 = load i32, ptr %89, align 4, !tbaa !130
  %113 = getelementptr inbounds i8, ptr %12, i64 24
  store i32 %112, ptr %113, align 8, !tbaa !131
  %114 = getelementptr inbounds i8, ptr %12, i64 16
  store i32 7, ptr %114, align 8, !tbaa !146
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  %115 = load i32, ptr %107, align 8, !tbaa !146
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %12, i32 noundef %115, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %116 unwind label %133

116:                                              ; preds = %111
  %117 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %13) #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 @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %12) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %12) #7
  br label %136

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

120:                                              ; preds = %88
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %641

122:                                              ; preds = %98
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %640

124:                                              ; preds = %100
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %128

126:                                              ; preds = %102
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %128

128:                                              ; preds = %124, %126
  %.pn = phi { ptr, i32 } [ %127, %126 ], [ %125, %124 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  br label %640

129:                                              ; preds = %.critedge
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %639

131:                                              ; preds = %110
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %135

133:                                              ; preds = %111
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %12) #7
  br label %135

135:                                              ; preds = %133, %131
  %.pn160 = phi { ptr, i32 } [ %134, %133 ], [ %132, %131 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %12) #7
  br label %639

136:                                              ; preds = %116, %106
  %137 = getelementptr inbounds i8, ptr %53, i64 257
  %138 = load i8, ptr %137, align 1, !tbaa !147, !range !16, !noundef !17
  %139 = trunc nuw i8 %138 to i1
  %140 = getelementptr inbounds i8, ptr %53, i64 252
  %141 = load i32, ptr %140, align 4, !tbaa !148
  %142 = icmp eq i32 %141, 1
  %or.cond = select i1 %139, i1 %142, i1 false
  %143 = icmp eq i32 %141, 3
  %or.cond248 = select i1 %or.cond, i1 true, i1 %143
  br i1 %or.cond248, label %144, label %154

144:                                              ; preds = %136
  %145 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5)
  %146 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_depth_imageERKNS_8SPIRTypeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, ptr noundef nonnull align 8 dereferenceable(336) %53, i32 noundef %145)
          to label %147 unwind label %181

147:                                              ; preds = %144
  %148 = getelementptr inbounds i8, ptr %2, i64 44
  %149 = load i32, ptr %148, align 4
  %.not162 = icmp ne i32 %149, 0
  %or.cond.not = select i1 %146, i1 %.not162, i1 false
  br i1 %or.cond.not, label %150, label %154

150:                                              ; preds = %147
  %151 = load i8, ptr %54, align 8, !tbaa !15, !range !16, !noundef !17
  %152 = trunc nuw i8 %151 to i1
  %153 = xor i1 %152, true
  br label %154

154:                                              ; preds = %136, %150, %147
  %155 = phi i1 [ false, %147 ], [ %153, %150 ], [ false, %136 ]
  %156 = getelementptr inbounds i8, ptr %2, i64 32
  %157 = load i32, ptr %156, align 8, !tbaa !149
  %.not163 = icmp eq i32 %157, 0
  br i1 %.not163, label %382, label %158

158:                                              ; preds = %154
  br i1 %87, label %159, label %161

159:                                              ; preds = %158
  %160 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %157)
          to label %161 unwind label %181

161:                                              ; preds = %159, %158
  %162 = phi i1 [ false, %158 ], [ %160, %159 ]
  %163 = getelementptr inbounds i8, ptr %2, i64 17
  %164 = load i8, ptr %163, align 1, !tbaa !150, !range !16, !noundef !17
  %165 = trunc nuw i8 %164 to i1
  %166 = load i32, ptr %89, align 4
  %167 = icmp eq i32 %166, 4
  %or.cond243 = select i1 %165, i1 true, i1 %167
  br i1 %or.cond243, label %168, label %193

168:                                              ; preds = %161
  %169 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %170 unwind label %181

170:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  %171 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %171, i1 noundef zeroext true)
          to label %172 unwind label %183

172:                                              ; preds = %170
  %173 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %174 unwind label %185

174:                                              ; preds = %172
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  %175 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %176 unwind label %181

176:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  %177 = load i32, ptr %156, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %177, i1 noundef zeroext true)
          to label %178 unwind label %188

178:                                              ; preds = %176
  %179 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %180 unwind label %190

180:                                              ; preds = %178
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %440

181:                                              ; preds = %.invoke, %624, %621, %617, %601, %599, %583, %568, %553, %537, %535, %486, %484, %458, %.critedge247, %449, %446, %438, %436, %287, %256, %250, %215, %209, %207, %197, %174, %168, %159, %144
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %639

183:                                              ; preds = %170
  %184 = landingpad { ptr, i32 }
          cleanup
  br label %187

185:                                              ; preds = %172
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %187

187:                                              ; preds = %185, %183
  %.pn199 = phi { ptr, i32 } [ %186, %185 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %639

188:                                              ; preds = %176
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %192

190:                                              ; preds = %178
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %192

192:                                              ; preds = %190, %188
  %.pn201 = phi { ptr, i32 } [ %191, %190 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %639

193:                                              ; preds = %161
  %194 = getelementptr inbounds i8, ptr %2, i64 18
  %195 = load i8, ptr %194, align 2, !tbaa !151, !range !16, !noundef !17
  %196 = trunc nuw i8 %195 to i1
  br i1 %196, label %197, label %290

197:                                              ; preds = %193
  %198 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1081)
          to label %199 unwind label %181

199:                                              ; preds = %197
  %200 = getelementptr inbounds i8, ptr %53, i64 252
  %201 = load i32, ptr %200, align 4, !tbaa !148
  switch i32 %201, label %285 [
    i32 0, label %202
    i32 1, label %244
  ]

202:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  %203 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %203, i1 noundef zeroext true)
          to label %204 unwind label %223

204:                                              ; preds = %202
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str)
          to label %205 unwind label %225

205:                                              ; preds = %204
  %206 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %207 unwind label %227

207:                                              ; preds = %205
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  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 @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  %208 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %209 unwind label %181

209:                                              ; preds = %207
  %210 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1082)
          to label %211 unwind label %181

211:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #7
  %212 = load i32, ptr %156, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %212, i1 noundef zeroext true)
          to label %213 unwind label %231

213:                                              ; preds = %211
  %214 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %215 unwind label %233

215:                                              ; preds = %213
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  %216 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %217 unwind label %181

217:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #7
  %218 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %218, i1 noundef zeroext true)
          to label %219 unwind label %236

219:                                              ; preds = %217
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull @.str.1083)
          to label %220 unwind label %238

220:                                              ; preds = %219
  %221 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %222 unwind label %240

222:                                              ; preds = %220
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  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 32, ptr nonnull %19) #7
  br label %440

223:                                              ; preds = %202
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %230

225:                                              ; preds = %204
  %226 = landingpad { ptr, i32 }
          cleanup
  br label %229

227:                                              ; preds = %205
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #7
  br label %229

229:                                              ; preds = %227, %225
  %.pn191 = phi { ptr, i32 } [ %228, %227 ], [ %226, %225 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %230

230:                                              ; preds = %229, %223
  %.pn191.pn = phi { ptr, i32 } [ %.pn191, %229 ], [ %224, %223 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  br label %639

231:                                              ; preds = %211
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %235

233:                                              ; preds = %213
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #7
  br label %235

235:                                              ; preds = %233, %231
  %.pn194 = phi { ptr, i32 } [ %234, %233 ], [ %232, %231 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #7
  br label %639

236:                                              ; preds = %217
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %243

238:                                              ; preds = %219
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %242

240:                                              ; preds = %220
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #7
  br label %242

242:                                              ; preds = %240, %238
  %.pn196 = phi { ptr, i32 } [ %241, %240 ], [ %239, %238 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  br label %243

243:                                              ; preds = %242, %236
  %.pn196.pn = phi { ptr, i32 } [ %.pn196, %242 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  br label %639

244:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #7
  %245 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %245, i1 noundef zeroext true)
          to label %246 unwind label %264

246:                                              ; preds = %244
  %247 = select i1 %84, ptr @.str.1084, ptr @.str.4
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull %247)
          to label %248 unwind label %266

248:                                              ; preds = %246
  %249 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %250 unwind label %268

250:                                              ; preds = %248
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  %251 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %252 unwind label %181

252:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #7
  %253 = load i32, ptr %156, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %253, i1 noundef zeroext true)
          to label %254 unwind label %272

254:                                              ; preds = %252
  %255 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %256 unwind label %274

256:                                              ; preds = %254
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  %257 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %258 unwind label %181

258:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #7
  %259 = load i32, ptr %85, align 8, !tbaa !129
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %259, i1 noundef zeroext true)
          to label %260 unwind label %277

260:                                              ; preds = %258
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull @.str.1085)
          to label %261 unwind label %279

261:                                              ; preds = %260
  %262 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %263 unwind label %281

263:                                              ; preds = %261
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  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 @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %440

264:                                              ; preds = %244
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %271

266:                                              ; preds = %246
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %270

268:                                              ; preds = %248
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #7
  br label %270

270:                                              ; preds = %268, %266
  %.pn183 = phi { ptr, i32 } [ %269, %268 ], [ %267, %266 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #7
  br label %271

271:                                              ; preds = %270, %264
  %.pn183.pn = phi { ptr, i32 } [ %.pn183, %270 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #7
  br label %639

272:                                              ; preds = %252
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %276

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

276:                                              ; preds = %274, %272
  %.pn186 = phi { ptr, i32 } [ %275, %274 ], [ %273, %272 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #7
  br label %639

277:                                              ; preds = %258
  %278 = landingpad { ptr, i32 }
          cleanup
  br label %284

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

281:                                              ; preds = %261
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #7
  br label %283

283:                                              ; preds = %281, %279
  %.pn188 = phi { ptr, i32 } [ %282, %281 ], [ %280, %279 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  br label %284

284:                                              ; preds = %283, %277
  %.pn188.pn = phi { ptr, i32 } [ %.pn188, %283 ], [ %278, %277 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #7
  br label %639

285:                                              ; preds = %199
  %286 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %286, ptr noundef nonnull @.str.1086)
          to label %287 unwind label %288

287:                                              ; preds = %285
  invoke void @__cxa_throw(ptr nonnull %286, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #8
          to label %643 unwind label %181

288:                                              ; preds = %285
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %286) #7
  br label %639

290:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %26) #7
  %291 = load i32, ptr %85, align 8, !tbaa !129
  %292 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %291)
          to label %293 unwind label %307

293:                                              ; preds = %290
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %26, ptr noundef nonnull align 8 dereferenceable(336) %292)
          to label %294 unwind label %307

294:                                              ; preds = %293
  %295 = load i32, ptr %89, align 4, !tbaa !130
  %296 = add i32 %295, 1
  %297 = getelementptr inbounds i8, ptr %26, i64 24
  store i32 %296, ptr %297, align 8, !tbaa !131
  %298 = getelementptr inbounds i8, ptr %53, i64 252
  %299 = load i32, ptr %298, align 4, !tbaa !148
  %300 = icmp eq i32 %299, 0
  br i1 %300, label %301, label %309

301:                                              ; preds = %294
  %302 = getelementptr inbounds i8, ptr %1, i64 7640
  %303 = load i8, ptr %302, align 8, !tbaa !152, !range !16, !noundef !17
  %304 = trunc nuw i8 %303 to i1
  br i1 %304, label %305, label %309

305:                                              ; preds = %301
  %306 = add i32 %295, 2
  store i32 %306, ptr %297, align 8, !tbaa !131
  br label %309

307:                                              ; preds = %293, %290
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %381

309:                                              ; preds = %305, %301, %294
  %310 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %311 unwind label %337

311:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %26)
          to label %312 unwind label %339

312:                                              ; preds = %311
  %313 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %314 unwind label %341

314:                                              ; preds = %312
  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
  %315 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.718)
          to label %316 unwind label %337

316:                                              ; preds = %314
  %317 = load i32, ptr %298, align 4, !tbaa !148
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %364

319:                                              ; preds = %316
  %320 = getelementptr inbounds i8, ptr %1, i64 7640
  %321 = load i8, ptr %320, align 8, !tbaa !152, !range !16, !noundef !17
  %322 = trunc nuw i8 %321 to i1
  br i1 %322, label %323, label %364

323:                                              ; preds = %319
  %324 = load i8, ptr %137, align 1, !tbaa !147, !range !16, !noundef !17
  %325 = trunc nuw i8 %324 to i1
  br i1 %325, label %326, label %360

326:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %327 unwind label %344

327:                                              ; preds = %326
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str)
          to label %328 unwind label %346

328:                                              ; preds = %327
  %329 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %330 unwind label %348

330:                                              ; preds = %328
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  %331 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1087)
          to label %332 unwind label %337

332:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %333 unwind label %352

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 %30, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull @.str.1)
          to label %334 unwind label %354

334:                                              ; preds = %333
  %335 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %336 unwind label %356

336:                                              ; preds = %334
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %366

337:                                              ; preds = %372, %366, %364, %362, %360, %330, %314, %309
  %338 = landingpad { ptr, i32 }
          cleanup
  br label %380

339:                                              ; preds = %311
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %343

341:                                              ; preds = %312
  %342 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #7
  br label %343

343:                                              ; preds = %341, %339
  %.pn170 = phi { ptr, i32 } [ %342, %341 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #7
  br label %380

344:                                              ; preds = %326
  %345 = landingpad { ptr, i32 }
          cleanup
  br label %351

346:                                              ; preds = %327
  %347 = landingpad { ptr, i32 }
          cleanup
  br label %350

348:                                              ; preds = %328
  %349 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #7
  br label %350

350:                                              ; preds = %348, %346
  %.pn172 = phi { ptr, i32 } [ %349, %348 ], [ %347, %346 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #7
  br label %351

351:                                              ; preds = %350, %344
  %.pn172.pn = phi { ptr, i32 } [ %.pn172, %350 ], [ %345, %344 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #7
  br label %380

352:                                              ; preds = %332
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %359

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

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

358:                                              ; preds = %356, %354
  %.pn175 = phi { ptr, i32 } [ %357, %356 ], [ %355, %354 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #7
  br label %359

359:                                              ; preds = %358, %352
  %.pn175.pn = phi { ptr, i32 } [ %.pn175, %358 ], [ %353, %352 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #7
  br label %380

360:                                              ; preds = %323
  %361 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %362 unwind label %337

362:                                              ; preds = %360
  %363 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.1088)
          to label %366 unwind label %337

364:                                              ; preds = %319, %316
  %365 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %366 unwind label %337

366:                                              ; preds = %364, %336, %362
  %367 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %368 unwind label %337

368:                                              ; preds = %366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  %369 = load i32, ptr %156, align 8, !tbaa !149
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %369, i1 noundef zeroext true)
          to label %370 unwind label %375

370:                                              ; preds = %368
  %371 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %372 unwind label %377

372:                                              ; preds = %370
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  %373 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.135)
          to label %374 unwind label %337

374:                                              ; preds = %372
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #7
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %26) #7
  br label %440

375:                                              ; preds = %368
  %376 = landingpad { ptr, i32 }
          cleanup
  br label %379

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

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

380:                                              ; preds = %379, %359, %351, %343, %337
  %.pn180 = phi { ptr, i32 } [ %338, %337 ], [ %.pn178, %379 ], [ %.pn175.pn, %359 ], [ %.pn172.pn, %351 ], [ %.pn170, %343 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %26) #7
  br label %381

381:                                              ; preds = %380, %307
  %.pn180.pn = phi { ptr, i32 } [ %.pn180, %380 ], [ %308, %307 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %26) #7
  br label %639

382:                                              ; preds = %154
  %383 = getelementptr inbounds i8, ptr %53, i64 252
  %384 = load i32, ptr %383, align 4, !tbaa !148
  %385 = icmp eq i32 %384, 0
  br i1 %385, label %386, label %436

386:                                              ; preds = %382
  %387 = getelementptr inbounds i8, ptr %1, i64 7640
  %388 = load i8, ptr %387, align 8, !tbaa !152, !range !16, !noundef !17
  %389 = trunc nuw i8 %388 to i1
  br i1 %389, label %390, label %436

390:                                              ; preds = %386
  %391 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %105)
  %392 = load i8, ptr %137, align 1, !tbaa !147, !range !16, !noundef !17
  %393 = trunc nuw i8 %392 to i1
  br i1 %391, label %394, label %417

394:                                              ; preds = %390
  br i1 %393, label %399, label %395

395:                                              ; preds = %394
  %396 = getelementptr inbounds i8, ptr %2, i64 18
  %397 = load i8, ptr %396, align 2, !tbaa !151, !range !16, !noundef !17
  %398 = trunc nuw i8 %397 to i1
  br i1 %398, label %399, label %412

399:                                              ; preds = %395, %394
  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_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %400 unwind label %404

400:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %401 unwind label %406

401:                                              ; preds = %400
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 1 dereferenceable(6) @.str.1089, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(10) @.str.1090, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(4) @.str.1083)
          to label %402 unwind label %408

402:                                              ; preds = %401
  %403 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  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.end.p0(i64 32, ptr nonnull %33) #7
  br label %436

404:                                              ; preds = %399
  %405 = landingpad { ptr, i32 }
          cleanup
  br label %411

406:                                              ; preds = %400
  %407 = landingpad { ptr, i32 }
          cleanup
  br label %410

408:                                              ; preds = %401
  %409 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %410

410:                                              ; preds = %408, %406
  %.pn167 = phi { ptr, i32 } [ %409, %408 ], [ %407, %406 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #7
  br label %411

411:                                              ; preds = %410, %404
  %.pn167.pn = phi { ptr, i32 } [ %.pn167, %410 ], [ %405, %404 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  br label %639

412:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 1 dereferenceable(6) @.str.1091, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(7) @.str.1092)
          to label %413 unwind label %415

413:                                              ; preds = %412
  %414 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %436

415:                                              ; preds = %412
  %416 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  br label %639

417:                                              ; preds = %390
  br i1 %393, label %418, label %431

418:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %419 unwind label %423

419:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %420 unwind label %425

420:                                              ; preds = %419
  invoke void @_ZN11spirv_cross4joinIJRA7_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_S1_S9_RA4_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 1 dereferenceable(7) @.str.1093, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(8) @.str.1094, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(4) @.str.1083)
          to label %421 unwind label %427

421:                                              ; preds = %420
  %422 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  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 @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %436

423:                                              ; preds = %418
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %430

425:                                              ; preds = %419
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %429

427:                                              ; preds = %420
  %428 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #7
  br label %429

429:                                              ; preds = %427, %425
  %.pn164 = phi { ptr, i32 } [ %428, %427 ], [ %426, %425 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #7
  br label %430

430:                                              ; preds = %429, %423
  %.pn164.pn = phi { ptr, i32 } [ %.pn164, %429 ], [ %424, %423 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  br label %639

431:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %432 unwind label %434

432:                                              ; preds = %431
  %433 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(32) %40) #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
  br label %436

434:                                              ; preds = %431
  %435 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  br label %639

436:                                              ; preds = %413, %402, %432, %421, %386, %382
  %437 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %438 unwind label %181

438:                                              ; preds = %436
  %439 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %440 unwind label %181

440:                                              ; preds = %438, %180, %222, %263, %374
  %.0145.in = phi i1 [ %162, %180 ], [ %162, %222 ], [ %162, %263 ], [ %162, %374 ], [ %87, %438 ]
  %441 = getelementptr inbounds i8, ptr %2, i64 36
  %442 = load i32, ptr %441, align 4, !tbaa !153
  %.not203 = icmp eq i32 %442, 0
  %443 = getelementptr inbounds i8, ptr %2, i64 40
  %444 = load i32, ptr %443, align 8
  %.not204 = icmp eq i32 %444, 0
  %or.cond245 = select i1 %.not203, i1 %.not204, i1 false
  br i1 %or.cond245, label %475, label %445

445:                                              ; preds = %440
  br i1 %.0145.in, label %446, label %.critedge247

446:                                              ; preds = %445
  %447 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %442)
          to label %448 unwind label %181

448:                                              ; preds = %446
  br i1 %447, label %449, label %.critedge247

449:                                              ; preds = %448
  %450 = load i32, ptr %443, align 8, !tbaa !154
  %451 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %450)
          to label %.critedge247 unwind label %181

.critedge247:                                     ; preds = %445, %449, %448
  %452 = phi i1 [ false, %448 ], [ %451, %449 ], [ false, %445 ]
  %453 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %454 unwind label %181

454:                                              ; preds = %.critedge247
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #7
  %455 = load i32, ptr %441, align 4, !tbaa !153
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %455, i1 noundef zeroext true)
          to label %456 unwind label %465

456:                                              ; preds = %454
  %457 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %458 unwind label %467

458:                                              ; preds = %456
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  %459 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %460 unwind label %181

460:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #7
  %461 = load i32, ptr %443, align 8, !tbaa !154
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %461, i1 noundef zeroext true)
          to label %462 unwind label %470

462:                                              ; preds = %460
  %463 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %464 unwind label %472

464:                                              ; preds = %462
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #7
  br label %475

465:                                              ; preds = %454
  %466 = landingpad { ptr, i32 }
          cleanup
  br label %469

467:                                              ; preds = %456
  %468 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #7
  br label %469

469:                                              ; preds = %467, %465
  %.pn205 = phi { ptr, i32 } [ %468, %467 ], [ %466, %465 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #7
  br label %639

470:                                              ; preds = %460
  %471 = landingpad { ptr, i32 }
          cleanup
  br label %474

472:                                              ; preds = %462
  %473 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #7
  br label %474

474:                                              ; preds = %472, %470
  %.pn207 = phi { ptr, i32 } [ %473, %472 ], [ %471, %470 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #7
  br label %639

475:                                              ; preds = %440, %464
  %.1146.in = phi i1 [ %452, %464 ], [ %.0145.in, %440 ]
  %476 = getelementptr inbounds i8, ptr %2, i64 44
  %477 = load i32, ptr %476, align 4, !tbaa !155
  %.not209 = icmp eq i32 %477, 0
  br i1 %.not209, label %519, label %478

478:                                              ; preds = %475
  br i1 %155, label %479, label %483

479:                                              ; preds = %478
  %480 = getelementptr inbounds i8, ptr %53, i64 252
  %481 = load i32, ptr %480, align 4, !tbaa !148
  switch i32 %481, label %531 [
    i32 1, label %.invoke
    i32 3, label %482
  ]

482:                                              ; preds = %479
  br label %.invoke

483:                                              ; preds = %478
  br i1 %.1146.in, label %484, label %486

484:                                              ; preds = %483
  %485 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %477)
          to label %486 unwind label %181

486:                                              ; preds = %484, %483
  %487 = phi i1 [ false, %483 ], [ %485, %484 ]
  %488 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %489 unwind label %181

489:                                              ; preds = %486
  %490 = load i8, ptr %54, align 8, !tbaa !15, !range !16, !noundef !17
  %491 = trunc nuw i8 %490 to i1
  br i1 %491, label %492, label %509

492:                                              ; preds = %489
  %493 = getelementptr inbounds i8, ptr %53, i64 252
  %494 = load i32, ptr %493, align 4, !tbaa !148
  %.not211 = icmp eq i32 %494, 5
  br i1 %.not211, label %509, label %495

495:                                              ; preds = %492
  %496 = getelementptr inbounds i8, ptr %53, i64 258
  %497 = load i8, ptr %496, align 2, !tbaa !156, !range !16, !noundef !17
  %498 = trunc nuw i8 %497 to i1
  br i1 %498, label %509, label %499

499:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #7
  %500 = load i32, ptr %476, align 4, !tbaa !155
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 7, i32 noundef %500)
          to label %501 unwind label %504

501:                                              ; preds = %499
  %502 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %43)
          to label %503 unwind label %506

503:                                              ; preds = %501
  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
  br label %531

504:                                              ; preds = %499
  %505 = landingpad { ptr, i32 }
          cleanup
  br label %508

506:                                              ; preds = %501
  %507 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #7
  br label %508

508:                                              ; preds = %506, %504
  %.pn212 = phi { ptr, i32 } [ %507, %506 ], [ %505, %504 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #7
  br label %639

509:                                              ; preds = %495, %492, %489
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #7
  %510 = load i32, ptr %476, align 4, !tbaa !155
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %510, i1 noundef zeroext true)
          to label %511 unwind label %514

511:                                              ; preds = %509
  %512 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %513 unwind label %516

513:                                              ; preds = %511
  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
  br label %531

514:                                              ; preds = %509
  %515 = landingpad { ptr, i32 }
          cleanup
  br label %518

516:                                              ; preds = %511
  %517 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #7
  br label %518

518:                                              ; preds = %516, %514
  %.pn214 = phi { ptr, i32 } [ %517, %516 ], [ %515, %514 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #7
  br label %639

519:                                              ; preds = %475
  %520 = load i8, ptr %54, align 8, !tbaa !15, !range !16, !noundef !17
  %521 = trunc nuw i8 %520 to i1
  br i1 %521, label %522, label %531

522:                                              ; preds = %519
  %523 = getelementptr inbounds i8, ptr %53, i64 252
  %524 = load i32, ptr %523, align 4, !tbaa !148
  %.not210 = icmp eq i32 %524, 5
  br i1 %.not210, label %531, label %525

525:                                              ; preds = %522
  %526 = getelementptr inbounds i8, ptr %53, i64 258
  %527 = load i8, ptr %526, align 2, !tbaa !156, !range !16, !noundef !17
  %528 = trunc nuw i8 %527 to i1
  br i1 %528, label %531, label %.invoke

.invoke:                                          ; preds = %525, %479, %482
  %529 = phi ptr [ @.str.1098, %482 ], [ @.str.1097, %479 ], [ @.str.1099, %525 ]
  %530 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %529)
          to label %531 unwind label %181

531:                                              ; preds = %.invoke, %479, %519, %522, %525, %513, %503
  %.2147.in = phi i1 [ %487, %513 ], [ %487, %503 ], [ %.1146.in, %525 ], [ %.1146.in, %522 ], [ %.1146.in, %519 ], [ %.1146.in, %479 ], [ %.1146.in, %.invoke ]
  %532 = getelementptr inbounds i8, ptr %2, i64 48
  %533 = load i32, ptr %532, align 8, !tbaa !157
  %.not216 = icmp eq i32 %533, 0
  br i1 %.not216, label %550, label %534

534:                                              ; preds = %531
  br i1 %.2147.in, label %535, label %537

535:                                              ; preds = %534
  %536 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %533)
          to label %537 unwind label %181

537:                                              ; preds = %535, %534
  %538 = phi i1 [ false, %534 ], [ %536, %535 ]
  %539 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %540 unwind label %181

540:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #7
  %541 = load i32, ptr %532, align 8, !tbaa !157
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 7, i32 noundef %541)
          to label %542 unwind label %545

542:                                              ; preds = %540
  %543 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %45)
          to label %544 unwind label %547

544:                                              ; preds = %542
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %550

545:                                              ; preds = %540
  %546 = landingpad { ptr, i32 }
          cleanup
  br label %549

547:                                              ; preds = %542
  %548 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #7
  br label %549

549:                                              ; preds = %547, %545
  %.pn217 = phi { ptr, i32 } [ %548, %547 ], [ %546, %545 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #7
  br label %639

550:                                              ; preds = %544, %531
  %.3148.in = phi i1 [ %538, %544 ], [ %.2147.in, %531 ]
  %551 = getelementptr inbounds i8, ptr %2, i64 60
  %552 = load i32, ptr %551, align 4, !tbaa !158
  %.not219 = icmp eq i32 %552, 0
  br i1 %.not219, label %565, label %553

553:                                              ; preds = %550
  %554 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %555 unwind label %181

555:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #7
  %556 = load i32, ptr %551, align 4, !tbaa !158
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 7, i32 noundef %556)
          to label %557 unwind label %560

557:                                              ; preds = %555
  %558 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %46)
          to label %559 unwind label %562

559:                                              ; preds = %557
  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
  br label %565

560:                                              ; preds = %555
  %561 = landingpad { ptr, i32 }
          cleanup
  br label %564

562:                                              ; preds = %557
  %563 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #7
  br label %564

564:                                              ; preds = %562, %560
  %.pn220 = phi { ptr, i32 } [ %563, %562 ], [ %561, %560 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #7
  br label %639

565:                                              ; preds = %559, %550
  %566 = getelementptr inbounds i8, ptr %2, i64 68
  %567 = load i32, ptr %566, align 4, !tbaa !159
  %.not222 = icmp eq i32 %567, 0
  br i1 %.not222, label %580, label %568

568:                                              ; preds = %565
  %569 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %570 unwind label %181

570:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #7
  %571 = load i32, ptr %566, align 4, !tbaa !159
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %571, i1 noundef zeroext true)
          to label %572 unwind label %575

572:                                              ; preds = %570
  %573 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %574 unwind label %577

574:                                              ; preds = %572
  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
  br label %580

575:                                              ; preds = %570
  %576 = landingpad { ptr, i32 }
          cleanup
  br label %579

577:                                              ; preds = %572
  %578 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #7
  br label %579

579:                                              ; preds = %577, %575
  %.pn223 = phi { ptr, i32 } [ %578, %577 ], [ %576, %575 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #7
  br label %639

580:                                              ; preds = %574, %565
  %581 = getelementptr inbounds i8, ptr %2, i64 64
  %582 = load i32, ptr %581, align 8, !tbaa !160
  %.not225 = icmp eq i32 %582, 0
  br i1 %.not225, label %595, label %583

583:                                              ; preds = %580
  %584 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %585 unwind label %181

585:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #7
  %586 = load i32, ptr %581, align 8, !tbaa !160
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %586, i1 noundef zeroext true)
          to label %587 unwind label %590

587:                                              ; preds = %585
  %588 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %589 unwind label %592

589:                                              ; preds = %587
  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
  br label %595

590:                                              ; preds = %585
  %591 = landingpad { ptr, i32 }
          cleanup
  br label %594

592:                                              ; preds = %587
  %593 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #7
  br label %594

594:                                              ; preds = %592, %590
  %.pn226 = phi { ptr, i32 } [ %593, %592 ], [ %591, %590 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #7
  br label %639

595:                                              ; preds = %589, %580
  %596 = getelementptr inbounds i8, ptr %2, i64 52
  %597 = load i32, ptr %596, align 4, !tbaa !161
  %.not228 = icmp eq i32 %597, 0
  br i1 %.not228, label %614, label %598

598:                                              ; preds = %595
  br i1 %.3148.in, label %599, label %601

599:                                              ; preds = %598
  %600 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %597)
          to label %601 unwind label %181

601:                                              ; preds = %599, %598
  %602 = phi i1 [ false, %598 ], [ %600, %599 ]
  %603 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %604 unwind label %181

604:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #7
  %605 = load i32, ptr %596, align 4, !tbaa !161
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %605, i1 noundef zeroext true)
          to label %606 unwind label %609

606:                                              ; preds = %604
  %607 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %49)
          to label %608 unwind label %611

608:                                              ; preds = %606
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  br label %614

609:                                              ; preds = %604
  %610 = landingpad { ptr, i32 }
          cleanup
  br label %613

611:                                              ; preds = %606
  %612 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %613

613:                                              ; preds = %611, %609
  %.pn229 = phi { ptr, i32 } [ %612, %611 ], [ %610, %609 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #7
  br label %639

614:                                              ; preds = %608, %595
  %.4149.in = phi i1 [ %602, %608 ], [ %.3148.in, %595 ]
  %615 = getelementptr inbounds i8, ptr %2, i64 56
  %616 = load i32, ptr %615, align 8, !tbaa !162
  %.not231 = icmp eq i32 %616, 0
  br i1 %.not231, label %637, label %617

617:                                              ; preds = %614
  %618 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL27expression_is_constant_nullEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %616)
          to label %619 unwind label %181

619:                                              ; preds = %617
  br i1 %618, label %637, label %620

620:                                              ; preds = %619
  br i1 %.4149.in, label %621, label %624

621:                                              ; preds = %620
  %622 = load i32, ptr %615, align 8, !tbaa !162
  %623 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %622)
          to label %624 unwind label %181

624:                                              ; preds = %621, %620
  %625 = phi i1 [ false, %620 ], [ %623, %621 ]
  %626 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %627 unwind label %181

627:                                              ; preds = %624
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #7
  %628 = load i32, ptr %615, align 8, !tbaa !162
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef 7, i32 noundef %628)
          to label %629 unwind label %632

629:                                              ; preds = %627
  %630 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %631 unwind label %634

631:                                              ; preds = %629
  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
  br label %637

632:                                              ; preds = %627
  %633 = landingpad { ptr, i32 }
          cleanup
  br label %636

634:                                              ; preds = %629
  %635 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #7
  br label %636

636:                                              ; preds = %634, %632
  %.pn232 = phi { ptr, i32 } [ %635, %634 ], [ %633, %632 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #7
  br label %639

637:                                              ; preds = %631, %619, %614
  %.5150.in = phi i1 [ %.4149.in, %619 ], [ %625, %631 ], [ %.4149.in, %614 ]
  %638 = zext i1 %.5150.in to i8
  store i8 %638, ptr %3, align 1, !tbaa !163
  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
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  ret void

639:                                              ; preds = %181, %187, %192, %230, %235, %243, %271, %276, %284, %288, %381, %411, %415, %430, %434, %469, %474, %508, %518, %549, %564, %579, %594, %613, %636, %135, %129
  %.pn232.pn.pn = phi { ptr, i32 } [ %.pn160, %135 ], [ %130, %129 ], [ %.pn232, %636 ], [ %182, %181 ], [ %.pn229, %613 ], [ %.pn226, %594 ], [ %.pn223, %579 ], [ %.pn220, %564 ], [ %.pn217, %549 ], [ %.pn214, %518 ], [ %.pn212, %508 ], [ %.pn207, %474 ], [ %.pn205, %469 ], [ %.pn201, %192 ], [ %.pn199, %187 ], [ %.pn196.pn, %243 ], [ %.pn194, %235 ], [ %.pn191.pn, %230 ], [ %.pn188.pn, %284 ], [ %.pn186, %276 ], [ %.pn183.pn, %271 ], [ %289, %288 ], [ %.pn180.pn, %381 ], [ %.pn167.pn, %411 ], [ %416, %415 ], [ %.pn164.pn, %430 ], [ %435, %434 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #7
  br label %640

640:                                              ; preds = %128, %639, %122
  %.pn232.pn.pn.pn = phi { ptr, i32 } [ %.pn232.pn.pn, %639 ], [ %123, %122 ], [ %.pn, %128 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %641

641:                                              ; preds = %120, %640, %118
  %.pn232.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %119, %118 ], [ %.pn232.pn.pn.pn, %640 ], [ %121, %120 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #7
  br label %642

642:                                              ; preds = %641, %79, %67, %61
  %.pn232.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn232.pn.pn.pn.pn.pn, %641 ], [ %80, %79 ], [ %62, %61 ], [ %68, %67 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  resume { ptr, i32 } %.pn232.pn.pn.pn.pn.pn.pn

643:                                              ; preds = %287
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @"_ZZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbENK3$_0clEjj"(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !13, i64 8}
!10 = !{!"_ZTSN11spirv_cross12CompilerGLSL24TextureFunctionArgumentsE", !11, i64 0, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !14, i64 72, !14, i64 73}
!11 = !{!"_ZTSN11spirv_cross12CompilerGLSL28TextureFunctionBaseArgumentsE", !12, i64 0, !13, i64 8, !14, i64 16, !14, i64 17, !14, i64 18}
!12 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !6, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!10, !14, i64 16}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!10, !14, i64 72}
!19 = !{!20, !14, i64 8380}
!20 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !21, i64 0, !13, i64 3176, !85, i64 3184, !14, i64 3272, !88, i64 3280, !13, i64 7616, !13, i64 7624, !14, i64 7632, !14, i64 7633, !93, i64 7636, !97, i64 7680, !97, i64 7736, !97, i64 7792, !97, i64 7848, !97, i64 7904, !97, i64 7960, !97, i64 8016, !99, i64 8072, !83, i64 8128, !14, i64 8184, !101, i64 8192, !6, i64 8416, !67, i64 8424, !67, i64 8480, !67, i64 8536, !103, i64 8592, !105, i64 8648, !106, i64 8656, !50, i64 8712, !50, i64 8992, !106, i64 9272, !108, i64 9328, !6, i64 9384, !6, i64 9388, !6, i64 9392, !14, i64 9396, !14, i64 9397, !111, i64 9400, !111, i64 9424, !115, i64 9448, !119, i64 9472, !106, i64 9496, !67, i64 9552, !67, i64 9608, !7, i64 9664, !123, i64 9672, !67, i64 9728, !13, i64 9784, !125, i64 9792}
!21 = !{!"_ZTSN11spirv_cross8CompilerE", !22, i64 8, !69, i64 1928, !69, i64 1984, !13, i64 2040, !13, i64 2048, !6, i64 2056, !72, i64 2064, !14, i64 2120, !67, i64 2128, !14, i64 2184, !14, i64 2185, !74, i64 2192, !69, i64 2312, !77, i64 2368, !67, i64 2400, !67, i64 2456, !67, i64 2512, !67, i64 2568, !67, i64 2624, !66, i64 2680, !66, i64 2744, !6, i64 2808, !6, i64 2812, !14, i64 2816, !67, i64 2824, !14, i64 2880, !14, i64 2881, !6, i64 2884, !79, i64 2888, !69, i64 2944, !81, i64 3000, !67, i64 3056, !14, i64 3112, !83, i64 3120}
!22 = !{!"_ZTSN11spirv_cross8ParsedIRE", !23, i64 0, !29, i64 8, !33, i64 32, !37, i64 248, !7, i64 304, !42, i64 1088, !42, i64 1144, !45, i64 1200, !47, i64 1256, !50, i64 1312, !53, i64 1592, !56, i64 1624, !58, i64 1680, !60, i64 1736, !61, i64 1740, !62, i64 1748, !63, i64 1752, !6, i64 1756, !6, i64 1760, !64, i64 1768, !66, i64 1800, !67, i64 1864}
!23 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !27, i64 0}
!27 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !28, i64 0}
!28 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !13, i64 0}
!29 = !{!"_ZTSSt6vectorIjSaIjEE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !34, i64 0, !35, i64 16, !36, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !13, i64 0, !35, i64 8}
!35 = !{!"long", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!37 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !38, i64 0}
!38 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_NS0_4MetaEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !13, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !41, i64 0, !35, i64 8}
!41 = !{!"float", !7, i64 0}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !43, i64 0, !35, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !13, i64 0, !35, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!45 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !46, i64 0}
!46 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE0EEESt4pairIKS3_jESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !48, i64 0, !35, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !13, i64 0, !35, i64 8}
!49 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!50 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !51, i64 0, !35, i64 16, !52, i64 24}
!51 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !13, i64 0, !35, i64 8}
!52 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!53 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !54, i64 0, !35, i64 16, !55, i64 24}
!54 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !13, i64 0, !35, i64 8}
!55 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!56 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !57, i64 0}
!57 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE6EEESt4pairIKS3_S3_ESaIS6_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS8_18_Mod_range_hashingENS8_20_Default_ranged_hashENS8_20_Prime_rehash_policyENS8_17_Hashtable_traitsILb1ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!58 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !59, i64 0}
!59 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE4EEESt4pairIKS3_NS0_14SPIREntryPointEESaIS7_ENSt8__detail10_Select1stESt8equal_toIS3_ESt4hashIS3_ENS9_18_Mod_range_hashingENS9_20_Default_ranged_hashENS9_20_Prime_rehash_policyENS9_17_Hashtable_traitsILb1ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!60 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !6, i64 0}
!61 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !6, i64 0, !14, i64 4, !14, i64 5, !14, i64 6}
!62 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!63 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!64 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !65, i64 0, !35, i64 8, !7, i64 16}
!65 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !13, i64 0}
!66 = !{!"_ZTSN11spirv_cross6BitsetE", !35, i64 0, !67, i64 8}
!67 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !68, i64 0}
!68 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!69 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !70, i64 0, !35, i64 16, !71, i64 24}
!70 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !13, i64 0, !35, i64 8}
!71 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!72 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !73, i64 0}
!73 = !{!"_ZTSSt10_HashtableIN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_SaIS3_ENSt8__detail9_IdentityESt8equal_toIS3_ESt4hashIS3_ENS5_18_Mod_range_hashingENS5_20_Default_ranged_hashENS5_20_Prime_rehash_policyENS5_17_Hashtable_traitsILb1ELb1ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!74 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !75, i64 0, !35, i64 16, !76, i64 24}
!75 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !13, i64 0, !35, i64 8}
!76 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!77 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !78, i64 0, !13, i64 24}
!78 = !{!"_ZTSSt14_Function_base", !7, i64 0, !13, i64 16}
!79 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !80, i64 0}
!80 = !{!"_ZTSSt10_HashtableIjSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS4_EEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!81 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !82, i64 0}
!82 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!83 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !84, i64 0}
!84 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!85 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !86, i64 0, !35, i64 16, !87, i64 24}
!86 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !13, i64 0, !35, i64 8}
!87 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!88 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !89, i64 0, !7, i64 24, !90, i64 4120}
!89 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !13, i64 0, !35, i64 8, !35, i64 16}
!90 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !91, i64 0, !35, i64 16, !92, i64 24}
!91 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !13, i64 0, !35, i64 8}
!92 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!93 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !6, i64 0, !14, i64 4, !14, i64 5, !6, i64 8, !14, i64 12, !14, i64 13, !14, i64 14, !14, i64 15, !14, i64 16, !14, i64 17, !14, i64 18, !14, i64 19, !14, i64 20, !14, i64 21, !14, i64 22, !14, i64 23, !6, i64 24, !94, i64 28, !95, i64 32}
!94 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !14, i64 0, !14, i64 1, !14, i64 2}
!95 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !96, i64 0, !96, i64 4}
!96 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!97 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !98, i64 0}
!98 = !{!"_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", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!99 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !100, i64 0}
!100 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St13unordered_setImSt4hashImESt8equal_toImESaImEEESaISF_ENSt8__detail10_Select1stESB_IS5_ES9_IS5_ENSH_18_Mod_range_hashingENSH_20_Default_ranged_hashENSH_20_Prime_rehash_policyENSH_17_Hashtable_traitsILb1ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!101 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !64, i64 0, !64, i64 32, !64, i64 64, !14, i64 96, !14, i64 97, !14, i64 98, !14, i64 99, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !102, i64 184, !14, i64 188, !14, i64 189, !14, i64 190, !14, i64 191, !14, i64 192, !14, i64 193, !14, i64 194, !14, i64 195, !14, i64 196, !14, i64 197, !14, i64 198, !14, i64 199, !14, i64 200, !14, i64 201, !14, i64 202, !14, i64 203, !14, i64 204, !14, i64 205, !14, i64 206, !14, i64 207, !14, i64 208, !14, i64 209, !14, i64 210, !14, i64 211, !14, i64 212, !14, i64 213, !14, i64 214, !14, i64 215, !14, i64 216, !14, i64 217, !14, i64 218, !14, i64 219}
!102 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!103 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !104, i64 0}
!104 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!105 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !6, i64 0}
!106 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !107, i64 0}
!107 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!108 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !109, i64 0, !35, i64 16, !110, i64 24}
!109 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !13, i64 0, !35, i64 8}
!110 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!111 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!115 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !118, i64 0}
!118 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!119 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !122, i64 0}
!122 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !13, i64 0, !13, i64 8, !13, i64 16}
!123 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !124, i64 0}
!124 = !{!"_ZTSSt10_HashtableIN11spirv_cross21LocationComponentPairES1_SaIS1_ENSt8__detail9_IdentityESt8equal_toIS1_ENS0_14InternalHasherENS3_18_Mod_range_hashingENS3_20_Default_ranged_hashENS3_20_Prime_rehash_policyENS3_17_Hashtable_traitsILb1ELb1ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!125 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !126, i64 0}
!126 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !13, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !13, i64 48}
!127 = !{!128, !14, i64 0}
!128 = !{!"_ZTSZN11spirv_cross12CompilerGLSL16to_function_argsB5cxx11ERKNS0_24TextureFunctionArgumentsEPbE3$_0", !14, i64 0}
!129 = !{!10, !6, i64 24}
!130 = !{!10, !6, i64 28}
!131 = !{!132, !6, i64 24}
!132 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !133, i64 0, !135, i64 12, !102, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !69, i64 32, !136, i64 88, !6, i64 120, !14, i64 124, !14, i64 125, !139, i64 128, !108, i64 136, !69, i64 192, !140, i64 248, !141, i64 272, !141, i64 276, !97, i64 280}
!133 = !{!"_ZTSN11spirv_cross8IVariantE", !134, i64 8}
!134 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!135 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!136 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !137, i64 0, !35, i64 16, !138, i64 24}
!137 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !13, i64 0, !35, i64 8}
!138 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!139 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!140 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !141, i64 0, !142, i64 4, !14, i64 8, !14, i64 9, !14, i64 10, !6, i64 12, !143, i64 16, !144, i64 20}
!141 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!142 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!143 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!144 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!145 = !{!7, !7, i64 0}
!146 = !{!132, !102, i64 16}
!147 = !{!132, !14, i64 257}
!148 = !{!132, !142, i64 252}
!149 = !{!10, !6, i64 32}
!150 = !{!10, !14, i64 17}
!151 = !{!10, !14, i64 18}
!152 = !{!20, !14, i64 7640}
!153 = !{!10, !6, i64 36}
!154 = !{!10, !6, i64 40}
!155 = !{!10, !6, i64 44}
!156 = !{!132, !14, i64 258}
!157 = !{!10, !6, i64 48}
!158 = !{!10, !6, i64 60}
!159 = !{!10, !6, i64 68}
!160 = !{!10, !6, i64 64}
!161 = !{!10, !6, i64 52}
!162 = !{!10, !6, i64 56}
!163 = !{!14, !14, i64 0}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass